ABAP:MIRO采购预制发票过账BAPI
MIRO采购预制发票过账BAPI:
FUNCTION zsdfu011. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_ID) TYPE ZRFC_LOGID OPTIONAL *" VALUE(I_CANUM) TYPE CANUM OPTIONAL *" EXPORTING *" VALUE(E_CODE) TYPE MSGTY *" VALUE(E_MSG) TYPE MSGTXT *" VALUE(E_FLOW_END) TYPE CHAR01 *" TABLES *" ET_RETURN STRUCTURE ZRFCT005 OPTIONAL *"---------------------------------------------------------------------- DATA:ls_zsdt021 TYPE zsdt021, lt_zsdt017 TYPE TABLE OF zsdt017, ls_zsdt017 LIKE LINE OF lt_zsdt017, lt_zsdt019 TYPE TABLE OF zsdt019, ls_zsdt019 LIKE LINE OF lt_zsdt019. DATA:BEGIN OF ls_objkey, objkey TYPE zsdt008-objkey. DATA:END OF ls_objkey. DATA lt_objkey LIKE TABLE OF ls_objkey. DATA:BEGIN OF ls_zrfc_logid, zrfc_logid TYPE zrfc_logid, END OF ls_zrfc_logid. DATA lt_zrfc_logid LIKE TABLE OF ls_zrfc_logid. DATA:ls_zrfct002 TYPE zrfct002. DATA:ls_creatordatain TYPE bapicreatordata, lt_billing TYPE STANDARD TABLE OF bapivbrk, ls_billing TYPE bapivbrk. SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_zsdt019 FROM zsdt019 WHERE zrfc_logid = i_id. IF lt_zsdt019 IS INITIAL. e_code = 'E'. e_msg = '无可执行数据'. RETURN. ENDIF. SORT lt_zsdt019 BY vbeln posnr. LOOP AT lt_zsdt019 INTO ls_zsdt019. ls_objkey-objkey = ls_zsdt019-vbeln. APPEND ls_objkey TO lt_objkey. ls_zsdt019-zposnr = ''. MODIFY lt_zsdt019 FROM ls_zsdt019. ENDLOOP. DELETE ADJACENT DUPLICATES FROM lt_objkey COMPARING ALL FIELDS. CALL METHOD zcl_rfc=>get_source EXPORTING i_id = i_id i_canum = i_canum IMPORTING e_zrfct002 = ls_zrfct002. SELECT SINGLE zzrfcid zcanum INTO (ls_zsdt021-zzrfcid,ls_zsdt021-zcanum) FROM zsdt021 WHERE zrfcid = ls_zrfct002-zrfcid AND canum = i_canum. SELECT zrfc_logid INTO TABLE lt_zrfc_logid FROM zsdt017 FOR ALL ENTRIES IN lt_objkey WHERE objkey = lt_objkey-objkey AND zrfcid = ls_zsdt021-zzrfcid. IF lt_zrfc_logid IS INITIAL. e_code = 'E'. e_msg = '无可执行数据'. RETURN. ENDIF. SELECT * INTO TABLE lt_zsdt017 FROM zsdt017 FOR ALL ENTRIES IN lt_zrfc_logid WHERE zrfc_logid = lt_zrfc_logid-zrfc_logid AND canum = ls_zsdt021-zcanum. SORT lt_zsdt017 BY objkey. DELETE ADJACENT DUPLICATES FROM lt_zsdt017 COMPARING objkey. LOOP AT lt_zsdt017 INTO ls_zsdt017. CLEAR:e_code,e_msg. PERFORM post_in TABLES et_return CHANGING e_code e_msg e_flow_end ls_zsdt017. IF e_code = 'S'. MODIFY lt_zsdt017 FROM ls_zsdt017. ENDIF. ENDLOOP. MODIFY zsdt017 FROM TABLE lt_zsdt017. REFRESH:lt_zsdt017. ENDFUNCTION. FORM post_in TABLES p_et_return STRUCTURE zrfct005 CHANGING p_e_code p_e_msg p_e_flow_end p_ls_zsdt017 TYPE zsdt017. DATA:message TYPE c LENGTH 200. * DATA:lv_gjahr TYPE rbkp-gjahr. DATA:lv_belnr TYPE rbkp-belnr. DATA:lv_awkey TYPE bkpf-awkey. DATA:ls_zrfct005 TYPE zrfct005. DATA ls_zsdt017 TYPE zsdt017. DATA:lt_return LIKE TABLE OF bapiret2 WITH HEADER LINE. lv_belnr = p_ls_zsdt017-objkey. * SELECT SINGLE gjahr * INTO lv_gjahr * FROM rbkp * WHERE belnr = lv_belnr. CALL FUNCTION 'BAPI_INCOMINGINVOICE_POST' EXPORTING invoicedocnumber = lv_belnr fiscalyear = p_ls_zsdt017-gjahr TABLES return = lt_return. CLEAR:message. LOOP AT lt_return WHERE type = 'A' OR type = 'E' . CONCATENATE message lt_return-message INTO message SEPARATED BY '/'. ENDLOOP. IF sy-subrc <> '0'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. p_e_code = 'S'. CONCATENATE lv_belnr p_ls_zsdt017-gjahr INTO lv_awkey. CLEAR lv_belnr. SELECT SINGLE belnr INTO lv_belnr FROM bkpf WHERE awkey = lv_awkey. CONCATENATE '凭证:' lv_belnr '创建成功' INTO p_e_msg. CLEAR:ls_zrfct005. ls_zrfct005-status = '53'. ls_zrfct005-msgty = p_e_code. ls_zrfct005-msgid = '00'. ls_zrfct005-msgno = '001'. ls_zrfct005-msgv1 = p_e_msg. ls_zrfct005-msgv4 = lv_belnr. APPEND ls_zrfct005 TO p_et_return. p_ls_zsdt017-belnr = lv_belnr."会计凭证 ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. p_e_code = 'E'. p_e_msg = message. ENDIF. CLEAR:lv_awkey,lv_belnr. ENDFORM.