木头坦克SAP版自动金税开票解决方案简介:背景1.金税系统:在中国,增值税销项税发票必须使用税务局指定的防伪税控开票系统开具(简称:金税系统).2.与SAP的集成:企业所使用的SAP软件管理系统和税务上防伪税控开票系统相互独立,两者间缺少有效的数据共享接口,造成税务流程涉及大量的手工重复工作和多系统间的数据人工传递。同时,由于SAP软件系统通常没有办法直接接收防伪税控开票系统返回的发票信息,导致增值税发票往往难以核查,销售与财务的报表数据常常对应不上,从而影响整个企业的业务管理流程。3.税务部门对于开票的要求:1)每张票的不含税总金额有上限,上限的具体值根据公司代码所对应公司所在当地税务机关的规定而定.2)每张票以及票中的每一行的税额计算误差不得超过0.06元3)只有部分用户有权限开红字发票(金额为负的发票)4.甲方单位本身对开票的要求:1)甲方本身已经购买了第三方的金税接口软件,但是因为用户导入的接口文件中无法保证每票每行的误差不超过0.06元,同时也没有根据每票金额上限分折.这样导入接口程序就出现很多异常情况,有时是无法开票,有时则会拆分成许多发票.即使是接口能拆分开票的,也有问题:一、因为其拆分规则没有照顾到用户的一些特殊要求,将一些像退货冲销这样不应该拆分的记录也拆分了。二、在金税已经开完票之后回传到SAP时就会出现无法与原来的内部编号一一对应的情况。为了避免这两种情况,所以必须在SAPECC系统中开发本模块以实现金税接口软件中所有拆分的逻辑,这样本模块产生的接口文件都是已经保证上限和误差都符合金税要求的文件.导入接口程序时就不会再触发拆分的过程。2)对于是否有权开红票要自定义数据表进行维护,在开票时自动检查是否有红票开出.并且只有在BL数据是退货时才允许开出红字的发票,如果无权限又开出退货红票,要能检查出来,并且提示.3)对于SAP中不是因为退货而在BL中开出的金额为负的数据(出错,调价,冲销等),无论该客户是否有权限开出红字发票都不允许开出红字发票,而要和对应BL一一自动合并;对于没有对应BL的数据(如调价等),要在所有当前票和票下面的行中进行自动分配.最终要保证每张发票的金额为正,同时每张的每一行也要为正.4)因为开票时BL的数据量极大(一个月20万的BL记录量),所以在选择多个客户的数据时,要根据客户自动合并开票.使用一个发票只能有一个客户的BL数据,同时在一客户下的数据要尽可能的合并开票,减少开票数量.5)对于零散用户使用一个客户编码的,要提供批量修改抬头的地方.并且修改之后的抬头也要参与上一条提到的合并开票逻辑.开发完解决方案的特点:1.自动动态拆分:当正在开出的发票金额超过上限或误差超限时自动拆分,拆分方式是从先按金额上限拆分再按误差上限拆分.拆分是从末尾往前求出最优的拆分点来拆分的.保证了拆分出的票数最小.根据税务部门要求:在票和行的级别都会进行拆分以保证每张票和票中的每一行的误差都不超过0.06(这样就完全不需要第三方的金税接口软件了)2.自动动态调整:当发票找到不到拆分点时(即上述自动拆分之后误差仍超过0.06的情况一),会自动将误差调整至规定误差以下.为了避免调整时将误差调整到某一行时导致该行的误差超限,分配调整金额是按每一行的累计误差动态分配调整的(以0.01元为单位),保证了不会使行的误差超限.调整的金额记录到行,保证未来调账时有据可查,并可以在回写数据时自动产生调账凭证.根据税务部门要求:在票和行的级别都会进行调整,以保证每张票和票中的每一行的误差都不超过0.063.自动合并:可以分公司分客户自动合并开票,退货凭证与对应凭证自动合并开票.支持手工调整合并方式.支持用户手工调整开票抬头,并且自动按抬头自动合并开票.4.中间存储开票数据:所有开票数据从VBRK\VBRP先取到中间表,提升取数效率.5.开票灵活:选择中间数据(VBRK\VBRP)开票过程中可以随时删除不需要的数据,即使在一个行内也允许输入部分金额或者数量进行部分开票.6.提示信息以弹出窗表格式显示:一个步骤所返回给用户的信息用弹出表格式一次显示给用户,而不是像传统的SAP界面一个个提示消息.7.界面友好直观:处理界面使用可调式分屏界面,发票数据用树型表示,界面友好.解决方案的介绍:1.概览:使用的主要事务码:ZXXXX0021金税开票-处理ZXXXX0022金税开票-下载ZXXXX0023金税开票–回传ZXXXX0024金税开票–查询ZXXXX0025金税开票-开冲销发票的控制表ZXXXX0037金税开票-开票金额上限的控制表2.ZXXXX0021金税开票-处理介绍:此部分功能针对销司项目涉及到的系统发票的汇总拆分到金税票的处理,包括正向发票,退货贷项,调价补差类型的发票;针对这些数据进行合并,总额拆分,精度拆分,产生系统的传输票号,用于进行上传金税票的TXT信息下载;合并逻辑:1)正常销售发票/冲红发票,退货贷项/退货冲红都是通过同一分组+同一结算方+同一结算方抬头名称+同一型号+同一单价进行合并;2)借贷项(调价补差)发票通过同一分组+同一结算方+同一结算方抬头名称进行合并,产生单票的折扣行;3)手工进行特殊合并到行的处理,可通过同一客户进行合并到传输票的一行;拆分逻辑:全部开金税票都必须进行的检查逻辑,总的单张金税传输票的总额小于等于公司可开票额度,和单张传输票的精度以及传输票的每行的精度=(净值*0.17-税额)0.06;当用户点击转到查询时会转到ZXXXX0024查询事务当用户点击1设置时处时会展开设置项设置项中可自定误差金额上限,默认税目,并提供维护是否开红字发票的控制表,以及开票金额上限的控制表(区分普票和增值税票)选择屏幕字段解释:栏位说明范例公司代码可选或输入公司代码(必输项)1126(必输)开票凭证输入系统发票号码用于增加筛选条件,缩小查找范围,提高查找效率销售机构开单业务的销售组织,一般与下列分销渠道组合使用用于增加筛选条件,缩小查找范围,提高查找效率分销渠道开单业务的分销渠道用于增加筛选条件,缩小查找范围,提高查找效率物料号选择或输入SKU码用于增加筛选条件,缩小查找范围,提高查找效率付款方选择或输入付款方客户编码用于增加筛选条件,缩小查找范围,提高查找效率出具发票日期输入开票的日期用于增加筛选条件,缩小查找范围,提高查找效率开票类型选择增值税发票或普通发票,2者只能选其一默认的为增值税发票说明以上查询字段是And的条件,输入的字段越精细,查询出的数据越准细;输入好条件后,点执行按钮,系统会找出符合条件的相关发票数据;屏幕功能说明按钮说明全选(F2)对画面的数据全部选择选择相同值的记录(CTRL+F2)鼠标选择到某行中的某栏位A,然后点击此按钮,系统自动勾选画面中这列与栏位A相同值的行;全不选(Shift+F2)对画面的数据全部不选择发票清单开启/关闭(F9)点一下开启,传输票信息画面显示在画面底部,自动转成关闭,点击一下,传输票画面关闭手工合并开票(F6)对选择的项目是同一客户的进行合并到票,即可按合并的规则前2个逻辑进行合并,然后按拆分的逻辑进行拆分到多票多行;或手工合并到行,即对选择出的项目合并到一票一行;分客户批量开票(F8)可以对选择出的不同客户的项目,进行分组,按合并的规则前2个逻辑进行合并,然后按拆分的逻辑进行拆分到多票多行;说明以上查询字段是And的条件,输入的字段越精细,查询出的数据越准细;输入好条件后,点执行按钮,系统会找出符合条件的相关发票数据;括号内为快捷键按钮信息;处理屏幕字段栏位解释(相同字段解释适用于手工合并处理画面和分客户批量开票处理画面,后续处理画面若有变化,后续单独说明):栏位或功能说明类型选择勾选处理项目标识可勾选发票接收方结算方客户编码显示发票接收方公司名结算方名称-默认的取数来源于发票抬头的文本-CRM零售订单(开票信息)第一行,如文本为空,则是结算方名称;处理的信息画面是显示,进入到手工合并开票或分客户批量开票的画面后为可输入栏位SAP发票系统发票号显示发票行项目系统发票行项目编号显示类型发票的类型显示发票类型描述发票类型描述显示售达方/售达方公司名要货方编码和名称显示出具发票日期系统产生应收的发票日期显示物料号SKU码显示物料描述SKU码描述显示数量系统发票数量,借贷项(调价补差)的发票数量为0,退货贷项发票项目的数量为负数,正向发票项目的数量为正数显示单位数量单位显示不含税金额净值,发票行项目中的净值显示含税金额含税总金额=净值+税额显示不含税单价不含税金额/数量显示含税单价含税总金额/数量显示税额净值*税率显示税率17%显示金税尚未开票数量数量-已开票数量显示金税尚未开票金额不含税金额-已开票金额显示已开票数量等于之前成功产生传输票号的项目数量显示已开票金额等于之前成功产生传输票号的项目金额显示当前已开票数量等于当前操作成功产生传输票号的项目当前输入数量显示当前已开票金额等于当前操作成功产生传输票号的项目当前输入金额显示当前输入数量可手工进行输入的数量,不能大于金税尚未开票数量,正向的发票都可以进行数量的拆分开票,借贷项(调价补差)发票和退货的数量都必须进行全部开票,即不允许拆多次开处理的信息画面是显示,进入到手工合并开票或分客户批量开票的画面后为可输入栏位当前输入金额当前输入数量*不含税单价处理的信息画面是显示,进入到手工合并开票或分客户批量开票的画面后为可输入栏位当前尚未开票数量金税尚未开票数量-当前已开票数量当前尚未开票金额金税尚未开票金额-当前已开票金额商品税目金税的商品税目-标准的1503币别CNY(人民币)销售订单发票的前端业务号码销售订单行项目订单行项目编号说明1.只有勾选的项目才会进入到处理按钮后的画面,如勾选了的项目,点手工合并开票按钮或分客户批量开票按钮,则对选择出来的项目进行处理;2.正向的发票都可以进行数量的拆分开票,借贷项(调价补差)发票和退货的数量都必须进行全部开票,即不允许拆多次开票;2.1选择需开票的项目进行手工合并开票;操作细部描述勾选需进行开票的项目,然后点击手工合并开票,可以输入不同的发票抬头名称,和可以对正常发票项目进行数量的拆分输入,即可输入不大于尚未开票的数量,在可输入框中输入完成输入的资料后,按下Enter键,然后点击刷新按钮,系统自动计算出开票金额-如下图:画面按钮解释:功能键说明范例合并到发票(F9)按正常合并拆分逻辑进行合并到多票多行;合并到发票行(Shift+F9)手工合并到行,即对选择出的项目合并到一票一行;适用一些不能按正常合并的规则进行合并的发票项目,如和正向不同价格或物料的退货项目,需要合并到正向发票的一起开票的情形;刷新(F2)点击刷新,按输入的数量计算出金额取消(ESC)退出当前画面点击合并到票按钮出现下图:屏幕或字段信息说明处理屏幕下方树形信息按正常合并拆分规则拆分出多张传输发票信息,第一层信息:自动产生的传输票号,即如打印成金税的标准TXT格式,则此传输票号产生一金税票号,即可理解成,拆分的传输票号,即是打印的一张金税票;第二层信息:打印成金税票的行信息,数据的组成为系统发票的相同客户+相同物料+相同含税单价的汇总合并;第三层信息:即是具体的系统发票行数据;树形信息误差调整字段是否有误差的调整标识:’X’–有误差调整,空-没有误差调整树形信息误差调整值如有误差上的调整值=传输票的行调整后的净值-原发票的汇总净值;因金税票的调价补差需进行合并到一折扣行,这部分很有可能行的计算精度0.06,如大于0.06,即传输票的行,会按总额再次进行调整净值和税额,调整后的净值和此行汇总的净值的误差就会记录到此字段中;选择列当当前已开票金额=金税未开票金额时为不可操作点击保存按钮,并且在弹出的框中点击是,如点否并直接退出不保存则系统不保存此次产生的传输票号,保存成功,更新相关状态成功信息提示,点击确定按钮或按回车,回到选择画面,操作完成!如需对特殊的退货进行合并开票,则可使用手工合并开票-合并到行按钮系统自动合并和拆分出2张传输票,由下图看出,不同