bdc
-
SAP BDC数据结构及简单实例
本文举例通过ABAP写BDC程序的一般数据结构和套路举例。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889"bdc数据结构.data begin of i_mess occurs 0.include structure bdcmsgcoll.data end of i_mess.data: begin of e_mess occurs 0,mess(100),end of e_mess.data begin of it_bdc occurs 0.include structure bdcdata.data end of it_bdc.data: l_opttion type ctu_params.l_opttion-dismode = 'N'.l_opttion-updmode = 'S'.l_opttion-cattmode = ''.l_opttion-defsize = 'X'.l_opttion-racommit = 'X'.l_opttion-nobinpt = 'X'.l_opttion-nobiend = 'X'.data: e_msg type bapi_msg,l_msg type t100-text.start-of-selection.select single *into @data(lv_bkpf)from bkpfwhere belnr eq '0100000071'and gjahr eq 2019and bukrs eq '1000'.perform frm_bdc_dynpro using 'SAPMF05A' '0105'.perform frm_bdc_field using 'BDC_OKCODE' 'BU'.perform frm_bdc_field using 'RF05A-BELNS' lv_bkpf-belnr.perform frm_bdc_field using 'BKPF-BUKRS' lv_bkpf-bukrs.perform frm_bdc_field using 'RF05A-GJAHS' lv_bkpf-gjahr.if sy-datum(6) = lv_bkpf-budat(6).perform frm_bdc_field using 'UF05A-STGRD' '03'.else.perform frm_bdc_field using 'UF05A-STGRD' '04'.perform frm_bdc_field using 'BSIS-BUDAT'lv_bkpf-budat.endif.call transaction 'FB08' using it_bdcoptions from l_opttionmessages into i_mess.loop at i_mess.call function 'MESSAGE_TEXT_BUILD'exportingmsgid = i_mess-msgidmsgnr = i_mess-msgnrmsgv1 = i_mess-msgv1msgv2 = i_mess-msgv2msgv3 = i_mess-msgv3msgv4 = i_mess-msgv4importingmessage_text_output = l_msg.e_msg = e_msg && l_msg.clear l_msg.endloop.if line_exists( i_mess[ msgtyp = 'E'] ) or line_exists( i_mess[ msgtyp = 'A'] ).write : / '执行失败:', e_msg.else.write : / '执行成功:', e_msg.endif.form frm_bdc_dynpro using program dynpro.clear it_bdc.it_bdc-program = program.it_bdc-dynpro = dynpro.it_bdc-dynbegin = 'X'.append it_bdc.endform. " frm_BDC_DYNPROform frm_bdc_field using fnam fval.clear it_bdc.it_bdc-fnam = fnam.it_bdc-fval = fval.condense it_bdc-fval.append it_bdc.endform. " frm_BDC_FIELD -
密码保护:ABAP使用BDC过账提示BSEG-HKONT was transferred twice
无法提供摘要。这是一篇受保护的文章。
-
ABAP清账实现例子1
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277*&---------------------------------------------------------------------**& Report ZBAPI_POST_CLEAR_TEST*&*&---------------------------------------------------------------------**&*&*&---------------------------------------------------------------------*REPORT ZBAPI_POST_CLEAR_TEST.DATA:GT_BLNTAB TYPE STANDARD TABLE OF BLNTAB INITIAL SIZE 0,GT_BSID_CLEARING TYPE STANDARD TABLE OF BSID INITIAL SIZE 0 ,GT_FTCLEAR TYPE STANDARD TABLE OF FTCLEAR INITIAL SIZE 0,GT_FTPOST TYPE STANDARD TABLE OF FTPOST INITIAL SIZE 0 ,GT_FTTAX TYPE STANDARD TABLE OF FTTAX INITIAL SIZE 0 .DATA:GS_FTPOST LIKE LINE OF GT_FTPOST,GS_BSID_CLEARING LIKE LINE OF GT_BSID_CLEARING.START-OF-SELECTION.GS_BSID_CLEARING-BELNR = '2000000303'.GS_BSID_CLEARING-GJAHR = '2013'.GS_BSID_CLEARING-BUZEI = 1.APPEND GS_BSID_CLEARING TO GT_BSID_CLEARING.PERFORM: F_POSTING_INTERFACE_START.PERFORM: F_POSTING_INTERFACE_CLEARING.PERFORM: F_POSTING_INTERFACE_END.*&---------------------------------------------------------------------**& Form f_posting_interface_start*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM F_POSTING_INTERFACE_START .CONSTANTS: LC_FUNCTION LIKE RFIPI-FUNCT VALUE 'C'," B= BDC, C= Call TransLC_MODE LIKE RFPDO-ALLGAZMD VALUE 'E', "ERRORS onlyLC_UPDATE LIKE RFPDO-ALLGVBMD VALUE 'S' .CALL FUNCTION 'POSTING_INTERFACE_START'EXPORTINGI_FUNCTION = LC_FUNCTIONI_MODE = LC_MODEI_UPDATE = LC_UPDATEEXCEPTIONSCLIENT_INCORRECT = 1FUNCTION_INVALID = 2GROUP_NAME_MISSING = 3MODE_INVALID = 4UPDATE_INVALID = 5OTHERS = 6.IF SY-SUBRC <> 0.MESSAGE 'ERROR' TYPE 'S'.ENDIF.ENDFORM." F_POSTING_INTERFACE_START*&---------------------------------------------------------------------**& Form f_posting_interface_clearing*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM F_POSTING_INTERFACE_CLEARING.CONSTANTS: LC_AUGLV TYPE AUGLV VALUE 'EINGZAHL',LC_TCODE TYPE SYTCODE VALUE 'FB05',LC_SGFUNCT TYPE SGFUNCT_PI VALUE 'C'.PERFORM: F_PREPARE_FTPOST.PERFORM: F_PREPARE_FTCLEAR.CALL FUNCTION 'POSTING_INTERFACE_CLEARING'EXPORTINGI_AUGLV = LC_AUGLVI_TCODE = LC_TCODEI_SGFUNCT = LC_SGFUNCTTABLEST_BLNTAB = GT_BLNTABT_FTCLEAR = GT_FTCLEART_FTPOST = GT_FTPOSTT_FTTAX = GT_FTTAXEXCEPTIONSCLEARING_PROCEDURE_INVALID = 1CLEARING_PROCEDURE_MISSING = 2TABLE_T041A_EMPTY = 3TRANSACTION_CODE_INVALID = 4AMOUNT_FORMAT_ERROR = 5TOO_MANY_LINE_ITEMS = 6COMPANY_CODE_INVALID = 7SCREEN_NOT_FOUND = 8NO_AUTHORIZATION = 9OTHERS = 10.IF SY-SUBRC <> 0.CASE SY-SUBRC.WHEN '1'.MESSAGE 'ERROR' TYPE 'S'.WHEN '2'.MESSAGE 'ERROR' TYPE 'S'.WHEN '3'.MESSAGE 'ERROR' TYPE 'S'.WHEN '4'.MESSAGE 'ERROR' TYPE 'S'.WHEN '5'.MESSAGE 'ERROR' TYPE 'S'.WHEN '6'.MESSAGE 'ERROR' TYPE 'S'.WHEN '7'.MESSAGE 'ERROR' TYPE 'S'.WHEN '8'.MESSAGE 'ERROR' TYPE 'S'.WHEN '9'.MESSAGE 'ERROR' TYPE 'S'.ENDCASE.ELSE.COMMIT WORK.SET SCREEN 0.ENDIF.ENDFORM." F_POSTING_INTERFACE_CLEARING*&---------------------------------------------------------------------**& Form f_prepare_ftpost*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM F_PREPARE_FTPOST .CONSTANTS: LC_HEADER TYPE C VALUE 'K', "HeaderLC_ITEM TYPE C VALUE 'P', "ItemLC_COUNT TYPE I VALUE '001'.*fill_header(BKPF)* Convert the date format from YYYYMMDD -> DD/MM/YYYY* PERFORM: F_CONVERT_DATE USING PA_BLDAT* CHANGING PA_BLDAT.GS_FTPOST-STYPE = LC_HEADER.GS_FTPOST-COUNT = LC_COUNT.GS_FTPOST-FNAM = 'BKPF-BLDAT'.GS_FTPOST-FVAL = SY-DATUM.APPEND GS_FTPOST TO GT_FTPOST.CLEAR GS_FTPOST.* Convert the date format from YYYYMMDD -> DD/MM/YYYY* PERFORM: F_CONVERT_DATE USING PA_BUDAT* CHANGING PA_BUDAT.GS_FTPOST-STYPE = LC_HEADER.GS_FTPOST-COUNT = LC_COUNT.GS_FTPOST-FNAM = 'BKPF-BUDAT'.GS_FTPOST-FVAL = SY-DATUM.APPEND GS_FTPOST TO GT_FTPOST.CLEAR GS_FTPOST.GS_FTPOST-STYPE = LC_HEADER.GS_FTPOST-COUNT = LC_COUNT.GS_FTPOST-FNAM = 'BKPF-BLART'.GS_FTPOST-FVAL = 'SA'.APPEND GS_FTPOST TO GT_FTPOST.CLEAR GS_FTPOST.GS_FTPOST-STYPE = LC_HEADER.GS_FTPOST-COUNT = LC_COUNT.GS_FTPOST-FNAM = 'BKPF-BUKRS'.GS_FTPOST-FVAL = '1000'.APPEND GS_FTPOST TO GT_FTPOST.CLEAR GS_FTPOST.GS_FTPOST-STYPE = LC_HEADER.GS_FTPOST-COUNT = LC_COUNT.GS_FTPOST-FNAM = 'BKPF-WAERS'. "CurrencyGS_FTPOST-FVAL = 'USD'.APPEND GS_FTPOST TO GT_FTPOST.CLEAR GS_FTPOST.* GS_FTPOST-STYPE = LC_HEADER.* GS_FTPOST-COUNT = LC_COUNT.* GS_FTPOST-FNAM = 'BKPF-XBLNR'.* GS_FTPOST-FVAL = PA_XBLNR.* APPEND GS_FTPOST TO GT_FTPOST.* CLEAR GS_FTPOST.* GS_FTPOST-STYPE = LC_HEADER.* GS_FTPOST-COUNT = LC_COUNT.* GS_FTPOST-FNAM = 'BKPF-BKTXT'. "Doc. Header Text* GS_FTPOST-FVAL = PA_TEXT.* APPEND GS_FTPOST TO GT_FTPOST.* CLEAR GS_FTPOST.*Commented temporarily* gs_ftpost-stype = lc_header.* gs_ftpost-count = lc_count.* gs_ftpost-fnam = 'BKPF-KURSF'. "Exchange Rate* gs_ftpost-fval = pa_erate.* SHIFT gs_ftpost-fval LEFT DELETING LEADING space.* APPEND gs_ftpost TO gt_ftpost.* CLEAR gs_ftpost.*Item DataGS_FTPOST-STYPE = LC_ITEM.GS_FTPOST-COUNT = LC_COUNT.GS_FTPOST-FNAM = 'RF05A-NEWKO'.GS_FTPOST-FVAL = 'MA03E'.APPEND GS_FTPOST TO GT_FTPOST.CLEAR GS_FTPOST.GS_FTPOST-STYPE = LC_ITEM.GS_FTPOST-COUNT = LC_COUNT.GS_FTPOST-FNAM = 'RF05A-NEWBS'.GS_FTPOST-FVAL = '31'.APPEND GS_FTPOST TO GT_FTPOST.CLEAR GS_FTPOST.GS_FTPOST-STYPE = LC_ITEM.GS_FTPOST-COUNT = LC_COUNT.GS_FTPOST-FNAM = 'BSEG-WRBTR'.GS_FTPOST-FVAL = '1000'.SHIFT GS_FTPOST-FVAL LEFT DELETING LEADING SPACE.APPEND GS_FTPOST TO GT_FTPOST.CLEAR GS_FTPOST.* Convert the date format from YYYYMMDD -> DD/MM/YYYY* PERFORM: F_CONVERT_DATE USING PA_VALUT* CHANGING PA_VALUT.* GS_FTPOST-STYPE = LC_ITEM.* GS_FTPOST-COUNT = LC_COUNT.* GS_FTPOST-FNAM = 'BSEG-VALUT'.* GS_FTPOST-FVAL = SY-DATUM.* APPEND GS_FTPOST TO GT_FTPOST.* CLEAR GS_FTPOST.*** Convert the date format from YYYYMMDD -> DD/MM/YYYY* PERFORM: F_CONVERT_DATE USING PA_ZFBDT* CHANGING PA_ZFBDT.* GS_FTPOST-STYPE = LC_ITEM.* GS_FTPOST-COUNT = LC_COUNT.* GS_FTPOST-FNAM = 'BSEG-ZFBDT'.* GS_FTPOST-FVAL = PA_ZFBDT.* APPEND GS_FTPOST TO GT_FTPOST.* CLEAR GS_FTPOST.ENDFORM." F_PREPARE_FTPOST*&---------------------------------------------------------------------**& Form f_prepare_ftclear*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM F_PREPARE_FTCLEAR .DATA: LS_FTCLEAR TYPE FTCLEAR.CONSTANTS: LC_AGKOA TYPE KOART VALUE 'S', "CustomersLC_SELFD TYPE FLD30_F05A VALUE 'BELNR'.LOOP AT GT_BSID_CLEARING INTO GS_BSID_CLEARING. "Clearing TableLS_FTCLEAR-AGKOA = LC_AGKOA.* LS_FTCLEAR-AGKON = '200120'. "CustomerLS_FTCLEAR-AGBUK = '1000'. "Company codeLS_FTCLEAR-XNOPS = 'X'. "G/L IndicatorLS_FTCLEAR-SELFD = LC_SELFD.* LS_FTCLEAR-AVSID = '2000000302'.<span style="color:#FF0000"> LS_FTCLEAR-SELVON = '2000000303'.LS_FTCLEAR-SELBIS = '2000000303'.</span>APPEND LS_FTCLEAR TO GT_FTCLEAR.ENDLOOP.ENDFORM." F_PREPARE_FTCLEAR*&---------------------------------------------------------------------**& Form f_posting_interface_end*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM F_POSTING_INTERFACE_END .CALL FUNCTION 'POSTING_INTERFACE_END'EXPORTINGI_BDCIMMED = 'X'EXCEPTIONSSESSION_NOT_PROCESSABLE = 1OTHERS = 2.IF SY-SUBRC <> 0.MESSAGE 'ERROR' TYPE 'S'.ENDIF.ENDFORM. " F_POSTING_INTERFACE_END