业务背景:因客户需要做的预制发票行项目超过上百行,所以在SAP标准功能MIR7中进行操作非常不方便。需要自开发一个批量做供应商发票预制的功能。
SAP标准功能:MIR7 - 预制发票
自开发程序:ZMM_MASS_MIR7 - 批量预制供应商发票程序
自定义事务码:ZMM_MASS_MIR7 - 批量预制供应商发票程序
涉及到的SAP后台表:
EKKO-采购订单抬头表
EKPO-采购订单行项目表
EKBE-采购订单历史记录表
EKKN-采购订单科目表
LFA1-供应商基础数据表
T001-公司代码表
MARA-物料主数据表
MKAT-物料描述表
RBKP-供应商发票抬头
RSEG-供应商发票行项目
ZMM_MASS_MIR7_HEADER-采购预制发票自建表-抬头表
ZMM_MASS_MIR7_LINE ITEM-采购预制发票自建表-行项目表
总体取值逻辑梳理:
1 根据EKKO-EBELN=EKPO-EBELN => INNER JOIN"EKKO&EKPO"
2 根据EKKO-EBELN=EKBE-EBELN AND EKBE-EBELP=EKPO-EBELP => INNER JOIN"EKKO&EKBE"
3 根据EKKO-EBELN=EKKN-EBELN AND EKKN-EBELP=EKPO-EBELP => INNER JOIN OR LEFT JOIN"EKKO&EKKN"
4 根据用户输入项:EKKO-LIFNR AND EKKO-BUKRS AND EKKN-PS_PSP_PNR(如果启用PS模块才需求) AND EKKO-EKGRP AND EKKN-AUFNR AND EKBE-BELNR AND EKPO-MATNR AND EKKO-EBELN AND EKBE-GJAHR AND EKBE-BUDAT AND EKPO-WEKRS AND EKBE-LFBNR AND EKBE-VGABE="1"(业务/事件类型=1收货) AND EKPO-LOEKZ<>"L"(L标识被采购订单行项目已被删除) AND EKBE-BWART=("101"&"102") OR ("105"&"106") OR ("122"&"123") OR ("161"&"162") AND EKPO-REPOS(发票收据&注意事项1) AND EKKN-VBELN
注意事项1:BP供应商主数据创建,在采购视图FLVN01下面有字段-基于收货的发票确认 无法进行必填设置,设置了字段-授予赠品也需要必填。所以只能在创建采购信息记录时,要去字段-基于收货的发票确认,还可以通过将采购订单字段-基于收货的发票确认默认勾选。否则会影响批量预制发票的程序取值,如果采购订单中这个字段没有勾选就会导致预制发票的程序取值不全。
选择屏幕1-创建
EKKO-BUKRS:公司代码 SELECT-OPTIONS & NO INTERVAL
EKPO-WERKS:工厂代码 SELECT-OPTIONS & NO INTERVAL
EKKO-EKGRP:采购组 SELECT-OPTIONS & NO INTERVAL
EKKO-LIFNR:供应商代码 SELECT-OPTIONS & NO INTERVAL
EKPO-EBELN:采购订单 SELECT-OPTIONS
EKPO-MATNR:物料编号 SELECT-OPTIONS
EKBE-BUDAT:过账日期 SELECT-OPTIONS
EKBE-BELNR:物料凭证 SELECT-OPTIONS
EKBE-GJAHR:物料凭证会计年度 SELECT-OPTIONS
EKKN-AUFNR:生产订单 SELECT-OPTIONS
EKKN-VBELN:销售订单 SELECT-OPTIONS
EKKN-PS_PSP_PNR:项目WBS编号 SELECT-OPTIONS
EKBE-LFBNR:供应商送货单号(参考凭证) SELECT-OPTIONS
选择屏幕2-保存
KKO-BUKRS:公司代码 SELECT-OPTIONS & NO INTERVAL
EKPO-WERKS:工厂代码 SELECT-OPTIONS & NO INTERVAL
EKKO-EKGRP:采购组 SELECT-OPTIONS & NO INTERVAL
EKKO-LIFNR:供应商代码 SELECT-OPTIONS & NO INTERVAL
EKPO-EBELN:采购订单 SELECT-OPTIONS
EKBE-BUDAT:过账日期 SELECT-OPTIONS
XXXX-STATUS:处理状态(1-临时创建,2-已创建预制发票,3-已删除) SELECT-OPTIONS & NO INTERVAL
选择屏幕1-创建-ALV字段
EKKO-BUKRS:公司代码
EKBE-WERKS:工厂代码
EKKO-WAERS:采购订单货币
EKKO-LIFNR:供应商编码
EKPO-RETPO:采购订单退货标识
EKBE-BELNR:采购订单收货物料凭证
EKBE-BUZEI:采购订单收货物料凭证行号
EKBE-GJAHR:采购订单收货物料凭证会计年度
EKBE-BUDAT:采购订单收货物料凭证过账日期
EKBE-EBELN:采购订单号
EKBE-EBELP:采购订单行项目号
EKPO-KNTTP:采购订单行项目-科目类别
EKPO-PSTYP:采购订单行项目-项目类别
EKBE-MATNR:物料编号
MAKT-MAKTX:物料描述
EKPO-MWSKZ:税码=J2
PRCD_ELEMENTS-KBETR:税率=13%
EKBE-MENGE:采购订单行项目-已收货过账数量=1 PCS
EKPO-MEINS:采购订单行项目-基本计量单位 PCS
EKPO-BPRME:采购订单行项目-订单单位 TO
EKPO-BPUMZ:转换分子
EKPO-BPUMN:转换分母
EKBE-WRBTR:采购订单行项目-已收货过账数量对应金额(净价=不含税)
XXXX-WRBTR:预制发票不含税总金额(净价)=100 CNY
XXXX-WMWST:预制发票不含税总价对应的税额=13 CNY
XXXX-WRBTR:预制发票含税价总金额=113 CNY
EKKN-AUFNR:生产订单号
EKKN-VBELN:销售订单号
EKKN-PS_PSP_PNR:项目WBS号
选择屏幕2-保存-ALV字段
同选择屏幕1-创建-ALV字段
MIR7预制发票BAPI
CALL FUNCTION 'BAPI_INCOMINGINVOICE_PARK'
Done.
Created on 18th May, 2024