ZSRM_BILING_H
INVOICE_IND 1 类型 XRECH CHAR 1 0 标识: 记帐发票 DOC_TYPE 1 类型 BLART CHAR 2 0 凭证类型 DOC_DATE 1 类型 BLDAT DATS 8 0 凭证中的凭证日期 PSTNG_DATE 1 类型 BUDAT DATS 8 0 凭证中的过账日期 REF_DOC_NO 1 类型 XBLNR CHAR 16 0 参考凭证编号 COMP_CODE 1 类型 BUKRS CHAR 4 0 公司代码 CURRENCY 1 类型 WAERS CUKY 5 0 货币码 GROSS_AMOUNT 1 类型 BAPI_RMWWR DEC 23 4 凭证货币的总发票金额 CALC_TAX_IND 1 类型 XMWST CHAR 1 0 自动计算税金 PMNTTRMS 1 类型 DZTERM CHAR 4 0 收付条件代码 BLINE_DATE 1 类型 DZFBDT DATS 8 0 到期日期计算的起算日期 DIFF_INV 1 类型 LIFRE CHAR 10 0 不同出票方 HEADER_TXT 1 类型 BKTXT CHAR 25 0 凭证抬头文本 ALLOC_NMBR 1 类型 DZUONR CHAR 18 0 分配编号 REF_DOC_NO_LONG 1 类型 XBLNR_LONG CHAR 35 0 参考凭证号(对相关性参看长文本) DEL_COSTS_TAXC 1 类型 MWSKZ_BNK CHAR 2 0 交货成本税码 BUSINESS_PLACE 1 类型 J_1ABRNCH CHAR 4 0 分支号 TAX_CODE 1 类型 MWSKZ CHAR 2 0 销售/购买税代码 TAX_AMOUNT 1 类型 BAPIWMWST DEC 23 4 用凭证货币表示的税收金额 INV_TRAN 1 类型 INV_TRAN CHAR 1 0 后勤发票检验中的事务 BRANCH 1 类型 J_1BBRANC_ CHAR 4 0 业务地点 SGTXT 1 类型 SGTXT CHAR 50 0 项目文本 USERNAME 1 类型 USERNAME CHAR 12 0 用户名 ZZTAX 1 类型 ZZTAX CHAR 300 0 金税发票号 ZZINVID 1 类型 ZINVID CHAR 300 0 金税发票ID ZZWRBTR 1 类型 CHAR 30 0 金税发票的金额 ZZWMWST 1 类型 CHAR 30 0 金税发票的税额
ZSRM_GL_ACCOUNT
INVOICE_DOC_ITEM 1 类型 RBLGP NUMC 6 0 发票凭证中的凭证项目 GL_ACCOUNT 1 类型 HKONT CHAR 10 0 总账科目 ITEM_AMOUNT 1 类型 BAPIWRBTR DEC 23 4 凭证货币金额 DB_CR_IND 1 类型 SHKZG CHAR 1 0 借方/贷方标识 NEG_POSTNG 1 类型 XNEGP CHAR 1 0 标识: 反记帐 COMP_CODE 1 类型 BUKRS CHAR 4 0 公司代码 TAX_CODE 1 类型 MWSKZ CHAR 2 0 销售/购买税代码 TAXJURCODE 1 类型 TXJCD CHAR 15 0 税收管辖权 ITEM_TEXT 1 类型 SGTXT CHAR 50 0 项目文本 COSTCENTER 1 类型 KOSTL CHAR 10 0 成本中心
ZSRM_BILING_ITEM
INVOICE_DOC_ITEM 1 类型 RBLGP NUMC 6 0 发票凭证中的凭证项目 PO_NUMBER 1 类型 BSTNR CHAR 10 0 采购订单号 PO_ITEM 1 类型 EBELP NUMC 5 0 采购凭证的项目编号 REF_DOC 1 类型 LFBNR CHAR 10 0 参考凭证的凭证号 REF_DOC_YEAR 1 类型 LFGJA NUMC 4 0 当前期间的会计年度 REF_DOC_IT 1 类型 LFPOS NUMC 4 0 参考凭证项目 DE_CRE_IND 1 类型 TBTKZ CHAR 1 0 标识:后续借/贷 TAX_CODE 1 类型 MWSKZ_MRM CHAR 2 0 税码 ITEM_AMOUNT 1 类型 BAPIWRBTR DEC 23 4 凭证货币金额 QUANTITY 1 类型 MENGE_D QUAN 13 3 数量 PO_UNIT 1 类型 BSTME UNIT 3 0 采购订单计量单位 COND_TYPE 1 类型 KSCHL CHAR 4 0 条件类型 COND_ST_NO 1 类型 STUNR NUMC 3 0 步骤编号 COND_COUNT 1 类型 DZAEHK_SHORT NUMC 2 0 条件计数器(长度较短) LIFNR 1 类型 LIFNR CHAR 10 0 供应商或债权人的帐号 PO_PR_UOM 1 类型 BPRME UNIT 3 0 订单价格单位(采购)

I_HEADER TYPE ZSRM_BILING_H 发票校验-抬头

E_MSG TYPE STRING 返回消息 E_CODE TYPE CHAR1 返回代码 E_INV_DOC_NO TYPE RE_BELNR 发票凭证的凭证编号 E_FISC_YEAR TYPE GJAHR 会计年度 E_FI_DOC TYPE BELNR_D 会计凭证号码 E_ZZTAX TYPE ZZTAX 金税发票号 E_ZZINVID TYPE ZINVID 金税发票ID E_FI_BUKRS TYPE BUKRS 公司代码

ET_RETURN LIKE BAPIRET2 返回消息 IT_GLACCOUNT LIKE ZSRM_GL_ACCOUNT 发票校验-总账科目数据 IT_ITEM LIKE ZSRM_BILING_ITEM 发票校验-明细行数据
FUNCTION ZFM_BILING_CREATE. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_HEADER) TYPE ZSRM_BILING_H *" EXPORTING *" VALUE(E_MSG) TYPE STRING *" VALUE(E_CODE) TYPE CHAR1 *" VALUE(E_INV_DOC_NO) TYPE RE_BELNR *" VALUE(E_FISC_YEAR) TYPE GJAHR *" VALUE(E_FI_DOC) TYPE BELNR_D *" VALUE(E_ZZTAX) TYPE ZZTAX *" VALUE(E_ZZINVID) TYPE ZINVID *" VALUE(E_FI_BUKRS) TYPE BUKRS *" TABLES *" ET_RETURN STRUCTURE BAPIRET2 OPTIONAL *" IT_GLACCOUNT STRUCTURE ZSRM_GL_ACCOUNT OPTIONAL *" IT_ITEM STRUCTURE ZSRM_BILING_ITEM OPTIONAL *"---------------------------------------------------------------------- DATA: LS_HEADERDATA LIKE BAPI_INCINV_CREATE_HEADER, LT_ITEMDATA LIKE TABLE OF BAPI_INCINV_CREATE_ITEM, LS_ITEMDATA LIKE BAPI_INCINV_CREATE_ITEM, LS_GLACCOUNTDATA LIKE BAPI_INCINV_CREATE_GL_ACCOUNT, LT_GLACCOUNTDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_GL_ACCOUNT, LT_VENDORITEMSPLITDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_VENDORSPLIT, LS_VENDORITEMSPLITDATA TYPE BAPI_INCINV_CREATE_VENDORSPLIT, LS_TAXDATA TYPE BAPI_INCINV_CREATE_TAX, LT_TAXDATA TYPE STANDARD TABLE OF BAPI_INCINV_CREATE_TAX, LT_RETURN LIKE TABLE OF BAPIRET2, LS_RETURN LIKE BAPIRET2, LV_INVOICEDOCNUMBER LIKE BAPI_INCINV_FLD-INV_DOC_NO, LV_FISCALYEAR LIKE BAPI_INCINV_FLD-FISC_YEAR. DATA: LS_EXT2 TYPE ZFIS_BSEG_DOCUMENT, LT_EXTENSION2 TYPE TABLE OF BAPIPAREX, "参考结构 LS_EXTENSION2 TYPE BAPIPAREX. DATA:GV_FLAG TYPE CHAR1. DATA OREF TYPE REF TO CX_ROOT. TRY . *--------------------------------------------------------------------* *-- 描述:参数处理 *-- 日期:04.08.2020 10:38:56 *--------------------------------------------------------------------* *1. 业务处理(transaction)字段选择: * 创建后续借记(subsequent debit):返利业务 * ItemData DE_CRE_IND = 'X' * HeaderData INVOICE_IND = 'X' * 创建后续贷记(subsequent credit): 扣款业务 * ItemData DE_CRE_IND = 'X' * HeaderData INVOICE_IND = ' ' * 发票(invoice) :材料款项业务 * HeaderData INVOICE_IND = 'X' * 贷方凭证(credit demo) * HeaderData INVOICE_IND = ' ' *2. 标识: 货物项目/交货成本/全部(Indicator: Goods Items/Delivery Costs/Both) * 货物/服务项目(Goods/service items) * ItemData COND_TYPE = ' ' * COND_ST_NO = ' ' * COND_COUNT = ' ' * 计划交货成本(Planned delivery costs) * ItemData COND_TYPE = '定价条件' * COND_ST_NO = '定价行号' * COND_COUNT = '金额' "抬头数据 * MOVE-CORRESPONDING I_HEADER TO LS_HEADERDATA. LS_HEADERDATA-INVOICE_IND = I_HEADER-INVOICE_IND. " 'X'. LS_HEADERDATA-DOC_TYPE = I_HEADER-DOC_TYPE. " 'RE'. LS_HEADERDATA-DOC_DATE = I_HEADER-DOC_DATE. " SY-DATUM. "凭证日期 LS_HEADERDATA-PSTNG_DATE = I_HEADER-PSTNG_DATE. " SY-DATUM. " 过账日期 LS_HEADERDATA-REF_DOC_NO = I_HEADER-REF_DOC_NO. " '0000000000'. "供应商发票号 LS_HEADERDATA-COMP_CODE = I_HEADER-COMP_CODE. "'0000'. LS_HEADERDATA-CURRENCY = I_HEADER-CURRENCY. "'CNY'. "金额单位 DATA:LV_AMOUNT(23) TYPE C. MOVE I_HEADER-GROSS_AMOUNT TO LV_AMOUNT. REPLACE ',' IN LV_AMOUNT WITH ''. CONDENSE LV_AMOUNT NO-GAPS. LS_HEADERDATA-GROSS_AMOUNT = LV_AMOUNT."'200.00'. "发票抬头总金额 LS_HEADERDATA-CALC_TAX_IND = I_HEADER-CALC_TAX_IND."'X'. LS_HEADERDATA-PMNTTRMS = I_HEADER-PMNTTRMS. "'AAAA'. "付款条件代码 LS_HEADERDATA-BLINE_DATE = I_HEADER-BLINE_DATE. "SY-DATUM. "基线日期 IF I_HEADER-DIFF_INV IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = I_HEADER-DIFF_INV IMPORTING OUTPUT = LS_HEADERDATA-DIFF_INV. ENDIF. LS_HEADERDATA-HEADER_TXT = I_HEADER-HEADER_TXT. LS_HEADERDATA-INV_TRAN = I_HEADER-INV_TRAN. "1发票 2贷方凭证 3后续借计 4后续贷记 * LS_HEADERDATA-SIMULATION = I_TESTRUN. LS_HEADERDATA-ALLOC_NMBR = I_HEADER-ALLOC_NMBR." 分配编号 LS_HEADERDATA-REF_DOC_NO_LONG = I_HEADER-REF_DOC_NO_LONG." 参考凭证号(对相关性参看长文本) LS_HEADERDATA-DEL_COSTS_TAXC = I_HEADER-DEL_COSTS_TAXC." 交货成本税码 "分支行号用制单人带出 DATA:LV_BRNCH TYPE BRNCH. CLEAR:LV_BRNCH. IF I_HEADER-USERNAME IS NOT INITIAL. SELECT SINGLE PARVA INTO LV_BRNCH FROM USR05 WHERE BNAME EQ I_HEADER-USERNAME AND PARID EQ 'JEA'. IF LV_BRNCH IS INITIAL. LV_BRNCH = I_HEADER-BUSINESS_PLACE. ENDIF. LS_HEADERDATA-PERSON_EXT = I_HEADER-USERNAME."输入者 ENDIF. LS_HEADERDATA-BUSINESS_PLACE = LV_BRNCH."I_HEADER-BUSINESS_PLACE.." 公司代码 LS_HEADERDATA-J_1TPBUPL = LV_BRNCH."I_HEADER-BRANCH." 分支号 IF LV_BRNCH EQ '' . E_CODE = 'E'. E_MSG = '找不到对应的分支号,请联系管理员'. RETURN. ENDIF. LS_HEADERDATA-ITEM_TEXT = I_HEADER-SGTXT."项目文本 LS_HEADERDATA-DEL_COSTS_TAXC = I_HEADER-TAX_CODE."销售/购买税代码 * LS_HEADERDATA-TAX_AMOUNT = I_HEADER-TAX_AMOUNT." 用凭证货币表示的税收金额 "抬头的税金额 CLEAR:LS_TAXDATA,LT_TAXDATA[]. LS_TAXDATA-TAX_CODE = I_HEADER-TAX_CODE. "交货成本税码 LS_TAXDATA-TAX_AMOUNT = I_HEADER-TAX_AMOUNT. APPEND LS_TAXDATA TO LT_TAXDATA. "明细行数据 * MOVE-CORRESPONDING IT_ITEM[] TO LT_ITEMDATA[]. LOOP AT IT_ITEM . CLEAR:LS_ITEMDATA. LS_ITEMDATA-INVOICE_DOC_ITEM = IT_ITEM-INVOICE_DOC_ITEM ."发票凭证中的凭证项目 * LS_ITEMDATA-SHEET_ITEM = IT_ITEM-INVOICE_DOC_ITEM ."发票凭证中的凭证项目 LS_ITEMDATA-PO_NUMBER = IT_ITEM-PO_NUMBER ."采购订单号 LS_ITEMDATA-PO_ITEM = IT_ITEM-PO_ITEM ."采购凭证的项目编号 LS_ITEMDATA-REF_DOC = IT_ITEM-REF_DOC ."参考凭证的凭证号 LS_ITEMDATA-REF_DOC_YEAR = IT_ITEM-REF_DOC_YEAR ."当前期间的会计年度 LS_ITEMDATA-REF_DOC_IT = IT_ITEM-REF_DOC_IT ."参考凭证项目 LS_ITEMDATA-DE_CRE_IND = IT_ITEM-DE_CRE_IND ."标识:后续借/贷 LS_ITEMDATA-TAX_CODE = IT_ITEM-TAX_CODE ."税码 CLEAR:LV_AMOUNT. MOVE IT_ITEM-ITEM_AMOUNT TO LV_AMOUNT. REPLACE ',' IN LV_AMOUNT WITH ''. CONDENSE LV_AMOUNT NO-GAPS. LS_ITEMDATA-ITEM_AMOUNT = LV_AMOUNT ."凭证货币金额 LS_ITEMDATA-QUANTITY = IT_ITEM-QUANTITY ."数量 CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING INPUT = IT_ITEM-PO_UNIT * LANGUAGE = SY-LANGU IMPORTING OUTPUT = LS_ITEMDATA-PO_UNIT EXCEPTIONS UNIT_NOT_FOUND = 1 OTHERS = 2. * LS_ITEMDATA-PO_UNIT = IT_ITEM-PO_UNIT ."采购订单计量单位 LS_ITEMDATA-COND_TYPE = IT_ITEM-COND_TYPE ."条件类型 * LS_ITEMDATA-COND_ST_NO = IT_ITEM-COND_ST_NO ."步骤编号 '012'." * LS_ITEMDATA-COND_COUNT = '011'."IT_ITEM-COND_COUNT ."条件计数器(长度较短) "运费对账的时候,供应商对应 IF LS_HEADERDATA-DIFF_INV IS NOT INITIAL AND LS_ITEMDATA-COND_TYPE IS NOT INITIAL. LS_ITEMDATA-FREIGHT_VEN = LS_HEADERDATA-DIFF_INV ."IT_ITEM-LIFNR. ENDIF. * * 对于单位不同的,需要传 订单价格单位 SELECT SINGLE BPRME INTO LS_ITEMDATA-PO_PR_UOM FROM EKPO WHERE EBELN = IT_ITEM-PO_NUMBER AND EBELP = IT_ITEM-PO_ITEM . IF LS_ITEMDATA-PO_PR_UOM EQ LS_ITEMDATA-PO_UNIT. CLEAR:LS_ITEMDATA-PO_PR_UOM . ENDIF. APPEND LS_ITEMDATA TO LT_ITEMDATA. ENDLOOP. "总账行项目 MOVE-CORRESPONDING IT_GLACCOUNT[] TO LT_GLACCOUNTDATA[]. *--------------------------------------------------------------------* *-- 描述: 增强字段写入 *-- 日期:04.08.2020 10:39:30 *--------------------------------------------------------------------* IF I_HEADER-ZZINVID IS INITIAL OR I_HEADER-ZZTAX IS INITIAL. E_CODE = 'E'. E_MSG = '提交失败,请关联金税发票'. RETURN. ENDIF. DATA:LT_EXTENSIONIN TYPE TABLE OF BAPIPAREX . DATA(LO_BAPI_MAPPING) = CL_CFD_BAPI_MAPPING=>GET_INSTANCE( ). DATA LR_SOURCE TYPE REF TO MMIV_SI_S_BAPI_HEADER_EXT. "必须用这个类型,提前增强 CREATE DATA LR_SOURCE. LR_SOURCE->*-DATA-ZZTAX = I_HEADER-ZZTAX. LR_SOURCE->*-DATA-ZZINVID = I_HEADER-ZZINVID. LR_SOURCE->*-DATA-ZZWRBTR = I_HEADER-ZZWRBTR."金税发票的金额 LR_SOURCE->*-DATA-ZZWMWST = I_HEADER-ZZWMWST."税额 TRY. CALL METHOD LO_BAPI_MAPPING->MAP_TO_BAPIPAREX_SINGLE EXPORTING IR_SOURCE_STRUCTURE = LR_SOURCE CHANGING CT_BAPIPAREX = LT_EXTENSIONIN[]. CATCH CX_CFD_BAPI_MAPPING . ENDTRY. *--------------------------------------------------------------------* *-- 描述:调用bapi *-- 日期:04.08.2020 10:39:30 *--------------------------------------------------------------------* CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE' EXPORTING HEADERDATA = LS_HEADERDATA * ADDRESSDATA = IMPORTING INVOICEDOCNUMBER = E_INV_DOC_NO FISCALYEAR = E_FISC_YEAR TABLES ITEMDATA = LT_ITEMDATA[] * ACCOUNTINGDATA = GLACCOUNTDATA = LT_GLACCOUNTDATA[] * MATERIALDATA = TAXDATA = LT_TAXDATA[] * WITHTAXDATA = * VENDORITEMSPLITDATA = RETURN = ET_RETURN EXTENSIONIN = LT_EXTENSIONIN[] "LT_EXTENSION2 * TM_ITEMDATA = * NFMETALLITMS = * ASSETDATA = . *--------------------------------------------------------------------* *-- 描述:结果处理 *-- 日期:04.08.2020 10:39:46 *--------------------------------------------------------------------* LOOP AT ET_RETURN WHERE TYPE = 'E' OR TYPE = 'A'. GV_FLAG = 'X'. ENDLOOP. IF GV_FLAG EQ 'X'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' IMPORTING RETURN = LS_RETURN. APPEND LS_RETURN TO ET_RETURN. E_CODE = 'E'. E_MSG = '请查看消息,并修改错误信息'. ELSE. CLEAR:LS_RETURN. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X' IMPORTING RETURN = LS_RETURN. IF LS_RETURN-TYPE EQ 'E' OR LS_RETURN-TYPE EQ 'A'. E_CODE = 'E'. E_MSG = '提交结果失败,请联系SAP管理员'. ELSE. E_CODE = 'S'. E_MSG = '成功执行'. *--------------------------------------------------------------------* *-- 描述:增加会计凭证返回 *-- 日期:04.12.2020 11:09:54 *--------------------------------------------------------------------* DATA:LV_AWKEY TYPE BKPF-AWKEY. CONCATENATE E_INV_DOC_NO E_FISC_YEAR INTO LV_AWKEY. WHILE E_FI_DOC IS INITIAL."当未读取到会计凭证的时候,需要不断循环读取。 SELECT SINGLE BELNR BUKRS INTO ( E_FI_DOC , E_FI_BUKRS ) FROM BKPF WHERE AWKEY = LV_AWKEY AND BUKRS = I_HEADER-COMP_CODE. E_ZZTAX = I_HEADER-ZZTAX. E_ZZINVID = I_HEADER-ZZINVID. IF SY-SUBRC NE 0. WAIT UP TO 1 SECONDS."等待时间,数据库访问效率。 ENDIF. ENDWHILE. ENDIF. APPEND LS_RETURN TO ET_RETURN. IF LS_RETURN-TYPE EQ 'E'. E_CODE = LS_RETURN-TYPE. E_MSG = LS_RETURN-MESSAGE. ENDIF. ENDIF. CATCH CX_ROOT INTO OREF. "为防止ABAP dump 做的异常处理动作 E_MSG = OREF->GET_TEXT( ). E_CODE = 'E'. ENDTRY. ENDFUNCTION.
网友评论