Code20080110 - ooxxvv/MySAPnotes GitHub Wiki

PageOutline

Code20080110

  • 此為 Function 的 Source Code
  • 可用來 Post (FB01), Park (FBVB), Reverse (FB08), Reset (FBRA) 會計文件的 Function Group。
  • 利用 Field Status 來檢查欄位的狀態。

Code

{{{#!abap FUNCTION zfi_post_park_doc. *"---------------------------------------------------------------------- ""Local Interface/ *" IMPORTING *" REFERENCE(FI_ACTION) TYPE C *" REFERENCE(FW_BKPF) LIKE BKPF STRUCTURE BKPF *" EXPORTING *" REFERENCE(FO_RETURN) TYPE C *" REFERENCE(FO_BELNR) LIKE BKPF-BELNR *" TABLES *" FT_BSEG STRUCTURE BSEG OPTIONAL *" FT_MESSAGE STRUCTURE ZFI_DOC_MESSAGE *"---------------------------------------------------------------------- DATA/ lt_blntab LIKE blntab OCCURS 0 WITH HEADER LINE, lt_ftpost LIKE ftpost OCCURS 0 WITH HEADER LINE, lt_fttax LIKE fttax OCCURS 0 WITH HEADER LINE.

DATA/ l_lines TYPE i, l_waers LIKE t001-waers.

CLEAR/ ft_message, ft_message[], fo_return, fo_belnr.

*-Check item number READ TABLE ft_bseg WITH KEY buzei='000'. IF sy-subrc EQ 0. fo_return='F'. append_message '000' 'Item number can not be 000'(m07). EXIT. ENDIF.

*-Check item total lines DESCRIBE TABLE ft_bseg LINES l_lines. IF l_lines GT 999. fo_return='F'. append_message '000' 'Item lines can not more then 999'(m08). ELSEIF l_lines LE 0. fo_return='F'. append_message '000' 'Item lines can not be empty'(m18). ENDIF.

*-Get local currency CLEAR/ l_waers.

SELECT SINGLE waers INTO l_waers FROM t001 WHERE bukrs EQ fw_bkpf-bukrs.

IF sy-subrc NE 0. fo_return='F'. append_message '000' 'Get local currency error'(m16). ENDIF.

*-Check Header PERFORM check_acc_header TABLES ft_message USING fw_bkpf.

*-Check Item LOOP AT ft_bseg. *---Get GL account & account type (by Postking key) PERFORM get_gl_acc TABLES ft_message USING ft_bseg-bschl ft_bseg-hkont ft_bseg-buzei fw_bkpf-bukrs CHANGING ft_bseg-hkont ft_bseg-kunnr ft_bseg-lifnr ft_bseg-koart. *---Check field status PERFORM check_field_status TABLES ft_message USING ft_bseg fw_bkpf-bukrs. ENDLOOP.

*-Check message IF NOT ft_message[] IS INITIAL. fo_return='F'. EXIT. ENDIF.

*-Prepare post header data PERFORM prepare_header_special TABLES ft_message lt_ftpost USING fw_bkpf.

PERFORM prepare_header_normal TABLES ft_message lt_ftpost USING fw_bkpf. *-Prepare post item data SORT ft_bseg BY buzei.

LOOP AT ft_bseg. PERFORM prepare_item_special TABLES ft_message lt_ftpost USING ft_bseg l_waers fw_bkpf-waers. PERFORM prepare_item_normal TABLES ft_message lt_ftpost USING ft_bseg. ENDLOOP.

*-Actual post PERFORM actual_post TABLES ft_message lt_blntab lt_ftpost lt_fttax USING fi_action.

*-Get return message READ TABLE lt_blntab INDEX 1.

IF sy-subrc NE 0. fo_return='F'. ENDIF.

IF lt_blntab-belnr EQ space. fo_return='F'. ELSE. fo_return='S'. fo_belnr=lt_blntab-belnr. ENDIF.

ENDFUNCTION.

}}}

{{{#!abap FUNCTION zfi_reverse_reset_doc . *"---------------------------------------------------------------------- ""Local Interface/ *" IMPORTING *" REFERENCE(FI_ACTION) TYPE C *" REFERENCE(FI_BUKRS) LIKE BKPF-BUKRS *" REFERENCE(FI_GJAHR) LIKE BKPF-GJAHR *" REFERENCE(FI_BELNR) LIKE BKPF-BELNR *" REFERENCE(FI_BUDAT) LIKE BKPF-BUDAT OPTIONAL *" REFERENCE(FI_MONAT) LIKE BKPF-MONAT OPTIONAL *" REFERENCE(FI_STGRD) LIKE UF05A-STGRD OPTIONAL *" EXPORTING *" REFERENCE(FO_RETURN) TYPE C *" REFERENCE(FO_BELNR) LIKE BKPF-BELNR *" TABLES *" FT_MESSAGE STRUCTURE ZFI_DOC_MESSAGE *"---------------------------------------------------------------------- DATA/ lt_blntab LIKE blntab OCCURS 0 WITH HEADER LINE. DATA/ l_function LIKE rfipi-funct, l_mode LIKE rfpdo-allgazmd.

CLEAR/ fo_return, fo_belnr, ft_message, ft_message[], lt_blntab, lt_blntab[].

*-Check Input IF fi_bukrs IS INITIAL. append_message '000' 'Company code is required'(m01). ENDIF.

IF fi_gjahr IS INITIAL. append_message '000' 'Financial year is required'(m19). ENDIF.

IF fi_belnr IS INITIAL. append_message '000' 'Document number is required'(m20). ENDIF.

*-Check message IF NOT ft_message[] IS INITIAL. fo_return='F'. EXIT. ENDIF.

*-Post start l_function='C'. l_mode ='N'.

CALL FUNCTION 'POSTING_INTERFACE_START' EXPORTING i_function =l_function i_mode =l_mode EXCEPTIONS client_incorrect =1 function_invalid =2 group_name_missing=3 mode_invalid =4 update_invalid =5 OTHERS =6.

IF sy-subrc <> 0. fo_return='F'. append_message '000' 'BDC/ Call post function start error'(m17). EXIT. ENDIF.

*-Post CASE fi_action. WHEN 'V'. PERFORM reverse_doc TABLES ft_message lt_blntab USING fi_belnr fi_budat fi_bukrs fi_gjahr fi_stgrd fi_monat. WHEN 'S'. PERFORM reset_doc TABLES ft_message USING fi_belnr fi_bukrs fi_gjahr. WHEN OTHERS. fo_return='F'. append_message '000' 'Input action error'(m09). EXIT. ENDCASE.

*-End CALL FUNCTION 'POSTING_INTERFACE_END' EXCEPTIONS session_not_processable=1 OTHERS =2.

*-Return message IF NOT ft_message[] IS INITIAL. fo_return='F'. EXIT. ELSE. fo_return='S'. ENDIF.

READ TABLE lt_blntab INDEX 1. IF sy-subrc EQ 0. fo_belnr=lt_blntab-belnr. ENDIF.

ENDFUNCTION.

}}}

{{{#!abap

FUNCTION-POOL zfi_doc_action. "MESSAGE-ID ..

*---Macros. DEFINE append_message. clear/ ft_message. ft_message-buzei =&1. ft_message-message=&2. append ft_message. END-OF-DEFINITION.

*---Work area data/ wa_message like ZFI_DOC_MESSAGE.

}}}

{{{#!abap

---------------------------------------------------------------------- ***INCLUDE LZFI_DOC_ACTIONF01 . ---------------------------------------------------------------------- &--------------------------------------------------------------------- *& Form check_acc_header &---------------------------------------------------------------------

  • text ---------------------------------------------------------------------- FORM check_acc_header TABLES ft_message STRUCTURE wa_message USING fw_bkpf STRUCTURE bkpf. DATA/ l_bukrs LIKE t001-bukrs.

*---Check company code IF fw_bkpf-bukrs IS INITIAL. append_message '000' 'Company code is required'(m01). ENDIF.

SELECT SINGLE bukrs INTO l_bukrs FROM t001 WHERE bukrs EQ fw_bkpf-bukrs.

IF sy-subrc NE 0. append_message '000' 'Company code error'(m02). ENDIF.

*---Check document date IF fw_bkpf-bldat IS INITIAL. append_message '000' 'Document date is required'(m03). ENDIF.

*---Check posting date IF fw_bkpf-budat IS INITIAL. append_message '000' 'Posting date is required'(m04). ENDIF.

*---Check document type IF fw_bkpf-blart IS INITIAL. append_message '000' 'Document type is required'(m05). ENDIF.

*---Check currency IF fw_bkpf-waers IS INITIAL. append_message '000' 'Currency is required'(m06). ENDIF.

ENDFORM. " check_acc_header &--------------------------------------------------------------------- *& Form set_gl_acc &---------------------------------------------------------------------

  • text ---------------------------------------------------------------------- FORM get_gl_acc TABLES ft_message STRUCTURE wa_message USING fi_bschl value(fi_hkont) fi_buzei fi_bukrs CHANGING fo_hkont fo_kunnr fo_lifnr fo_koart.

CLEAR/ fo_hkont, fo_kunnr, fo_lifnr, fo_koart.

*-Get account type SELECT SINGLE koart INTO fo_koart FROM tbsl WHERE bschl EQ fi_bschl.

IF sy-subrc NE 0. append_message fi_buzei 'Posting key error'(m10). EXIT. ENDIF.

*-Get G/L account CASE fo_koart. *---By Customer WHEN 'D'. SELECT SINGLE akont INTO fo_hkont FROM knb1 WHERE kunnr EQ fi_hkont AND bukrs EQ fi_bukrs.

IF sy-subrc NE 0. append_message fi_buzei 'Customer code error'(m13). EXIT. ELSE. fo_kunnr=fi_hkont. ENDIF.

*---By Vendor WHEN 'K'. SELECT SINGLE akont INTO fo_hkont FROM lfb1 WHERE lifnr EQ fi_hkont AND bukrs EQ fi_bukrs.

IF sy-subrc NE 0. append_message fi_buzei 'Vendor code error'(m12). EXIT. ELSE. fo_lifnr=fi_hkont. ENDIF.

*---By GL account WHEN 'S'. fo_hkont=fi_hkont.

WHEN OTHERS. append_message fi_buzei 'GL account type not support'(m11). EXIT.

ENDCASE.

ENDFORM. " set_gl_acc &--------------------------------------------------------------------- *& Form check_field_status &---------------------------------------------------------------------

  • text ---------------------------------------------------------------------- FORM check_field_status TABLES ft_message STRUCTURE wa_message USING fw_bseg STRUCTURE bseg fi_bukrs. DATA/ lt_tmodu LIKE tmodu OCCURS 0 WITH HEADER LINE, l_field_status TYPE c, l_field_name TYPE string, l_message TYPE string, l_ac_status TYPE c, l_pk_status TYPE c. FIELD-SYMBOLS/ <l_field> TYPE ANY.

*-Get all field name SELECT * INTO TABLE lt_tmodu FROM tmodu WHERE fauna='SKB1-FAUS1'.

IF sy-subrc NE 0. EXIT. ENDIF.

LOOP AT lt_tmodu. *---Get Field status (single field) CALL FUNCTION 'FIELD_STATUS_CHECK' EXPORTING i_bukrs =fi_bukrs i_hkont =fw_bseg-hkont i_sei =fw_bseg-umskz i_field =lt_tmodu-feldn i_bschl =fw_bseg-bschl IMPORTING ac_field_status =l_ac_status pk_field_status =l_pk_status EXCEPTIONS no_chartacc =1 no_acc_t074 =2 fld_pos_invalid1 =3 no_pk_fld_status =4 no_status_grp_skb1=5 fld_nonexist_tmodu=6 fld_pos_invalid2 =7 no_acgrp_fld_status=8 OTHERS =9.

*---Check error IF sy-subrc NE 0. CONTINUE. ENDIF.

*---Set status CLEAR/ l_field_status.

IF l_ac_status EQ 'R' OR l_pk_status EQ 'R'. l_field_status='R'.

ELSEIF l_ac_status EQ 'S' AND l_pk_status EQ 'S'. l_field_status='S'.

ELSE. *-----When option, not need to check l_field_status='O'. CONTINUE. ENDIF.

*---Get field value CLEAR/ l_field_name. CONCATENATE 'FW_BSEG-' lt_tmodu-feldn INTO l_field_name.

ASSIGN (l_field_name) TO <l_field>. IF sy-subrc NE 0. CONTINUE. ENDIF.

*---Check value CLEAR/ l_message.

CASE l_field_status. *-----Required WHEN 'R'. IF <l_field> IS INITIAL. CONCATENATE lt_tmodu-feldn ' is required'(m14) INTO l_message. append_message fw_bseg-buzei l_message. ENDIF. *-----Hidden WHEN 'S'. IF NOT <l_field> IS INITIAL. CONCATENATE lt_tmodu-feldn ' is hidden'(m15) INTO l_message. append_message fw_bseg-buzei l_message. ENDIF.

WHEN OTHERS. CONTINUE. ENDCASE. ENDLOOP.

ENDFORM. " check_field_status &--------------------------------------------------------------------- *& Form put_bdc_value &---------------------------------------------------------------------

  • text ---------------------------------------------------------------------- FORM put_bdc_value TABLES ft_ftpost STRUCTURE ftpost USING fi_stype fi_count fi_fnam fi_fval. *-Check value IF fi_fval IS INITIAL. EXIT. ENDIF.

*-Check BDC field exist READ TABLE ft_ftpost WITH KEY stype=fi_stype count=fi_count fnam=fi_fnam. IF sy-subrc EQ 0. EXIT. ENDIF.

*-Put value CLEAR/ ft_ftpost.

ft_ftpost-stype=fi_stype. ft_ftpost-count=fi_count. ft_ftpost-fnam=fi_fnam. WRITE fi_fval TO ft_ftpost-fval LEFT-JUSTIFIED.

APPEND ft_ftpost.

ENDFORM. " put_bdc_value &--------------------------------------------------------------------- *& Form prepare_header_special &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------
  • -->P_FT_MESSAGE text
  • -->P_LT_FTPOST text ---------------------------------------------------------------------- FORM prepare_header_special TABLES ft_message STRUCTURE wa_message ft_ftpost STRUCTURE ftpost USING fw_bkpf STRUCTURE bkpf. DATA/ l_date_str(10) TYPE c.

CLEAR/ l_date_str.

*---Posting date PERFORM reformat_date USING fw_bkpf-budat CHANGING l_date_str.

PERFORM put_bdc_value TABLES ft_ftpost USING 'K' '000' 'BKPF-BUDAT' l_date_str. *---Document date PERFORM reformat_date USING fw_bkpf-bldat CHANGING l_date_str.

PERFORM put_bdc_value TABLES ft_ftpost USING 'K' '000' 'BKPF-BLDAT' l_date_str.

ENDFORM. " prepare_header_special &--------------------------------------------------------------------- *& Form reformat_date &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------
  • -->P_FW_BKPF_BUDAT text
  • <--P_L_DATE_STR text ---------------------------------------------------------------------- FORM reformat_date USING fi_date CHANGING fo_date_str. CLEAR/ fo_date_str.

IF fi_date IS INITIAL. EXIT. ENDIF.

WRITE fi_date TO fo_date_str.

REPLACE ALL OCCURRENCES OF '/' IN fo_date_str WITH ''. REPLACE ALL OCCURRENCES OF '-' IN fo_date_str WITH ''. REPLACE ALL OCCURRENCES OF '.' IN fo_date_str WITH ''.

ENDFORM. " reformat_date &--------------------------------------------------------------------- *& Form prepare_item_special &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------
  • -->P_FT_MESSAGE text
  • -->P_LT_FTPOST text
  • -->P_FT_BSEG text ---------------------------------------------------------------------- FORM prepare_item_special TABLES ft_message STRUCTURE wa_message ft_ftpost STRUCTURE ftpost USING fw_bseg STRUCTURE bseg fi_local_currency fi_document_currency. DATA/ l_amt_str LIKE ftpost-fval.

CLEAR/ l_amt_str.

*-Check currency IF fi_local_currency EQ fi_document_currency. CLEAR fw_bseg-dmbtr. ENDIF.

*-Local amount PERFORM reformat_amt USING fw_bseg-dmbtr fi_local_currency CHANGING l_amt_str.

PERFORM put_bdc_value TABLES ft_ftpost USING 'P' fw_bseg-buzei 'BSEG-DMBTR' l_amt_str. *-Document amount PERFORM reformat_amt USING fw_bseg-wrbtr fi_document_currency CHANGING l_amt_str.

PERFORM put_bdc_value TABLES ft_ftpost USING 'P' fw_bseg-buzei 'BSEG-WRBTR' l_amt_str.

ENDFORM. " prepare_item_special &--------------------------------------------------------------------- *& Form reformat_amt &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------
  • -->P_BSEG_DMBTR text
  • -->P_FI_DOCUMENT_CURRENCY text
  • <--P_L_AMT_STR text ---------------------------------------------------------------------- FORM reformat_amt USING fi_amt fi_currency CHANGING fo_amt_str. DATA/ l_amt_str(16) TYPE c.

CLEAR/ fo_amt_str, l_amt_str.

IF fi_amt IS INITIAL. EXIT. ENDIF.

WRITE fi_amt TO l_amt_str CURRENCY fi_currency LEFT-JUSTIFIED. WRITE l_amt_str TO fo_amt_str LEFT-JUSTIFIED.

ENDFORM. " reformat_amt &--------------------------------------------------------------------- *& Form actual_post &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------
  • -->P_FT_MESSAGE text
  • -->P_LT_BLNTAB text
  • -->P_LT_FTPOST text
  • -->P_LT_FTTAX text
  • -->P_L_TCODE text ---------------------------------------------------------------------- FORM actual_post TABLES ft_message STRUCTURE wa_message ft_blntab STRUCTURE blntab ft_ftpost STRUCTURE ftpost ft_fttax STRUCTURE fttax USING fi_action. DATA/ l_function LIKE rfipi-funct, l_mode LIKE rfpdo-allgazmd, l_tcode LIKE syst-tcode, l_msgid LIKE sy-msgid, l_msgno LIKE sy-msgno, l_msgty LIKE sy-msgty, l_msgv1 LIKE sy-msgv1, l_msgv2 LIKE sy-msgv2, l_msgv3 LIKE sy-msgv3, l_msgv4 LIKE sy-msgv4, l_subrc LIKE sy-subrc, l_mstring TYPE string.

*-Check message IF NOT ft_message[] IS INITIAL. EXIT. ENDIF.

*-Start l_function='C'. l_mode ='N'.

CALL FUNCTION 'POSTING_INTERFACE_START' EXPORTING i_function =l_function i_mode =l_mode EXCEPTIONS client_incorrect =1 function_invalid =2 group_name_missing=3 mode_invalid =4 update_invalid =5 OTHERS =6.

IF sy-subrc <> 0. append_message '000' 'BDC/ Call post function error'(m17). EXIT. ENDIF.

*-Get Tcode by action CASE fi_action. WHEN 'O'. l_tcode='FB01'. WHEN 'A'. l_tcode='FBVB'. WHEN OTHERS. append_message '000' 'Action error'(m09). EXIT. ENDCASE.

CALL FUNCTION 'POSTING_INTERFACE_DOCUMENT' EXPORTING i_tcode =l_tcode IMPORTING e_msgid =l_msgid e_msgno =l_msgno e_msgty =l_msgty e_msgv1 =l_msgv1 e_msgv2 =l_msgv2 e_msgv3 =l_msgv3 e_msgv4 =l_msgv4 e_subrc =l_subrc TABLES t_blntab =ft_blntab t_ftpost =ft_ftpost t_fttax =ft_fttax EXCEPTIONS account_missing =1 company_code_missing =2 posting_key_invalid =3 posting_key_missing =4 record_type_invalid =5 transaction_code_invalid=6 amount_format_error =7 too_many_line_items =8 company_code_invalid =9 screen_not_found =10 no_authorization =11 OTHERS =12.

IF l_subrc <> 0. SELECT SINGLE text INTO l_mstring FROM t100 WHERE sprsl='E' AND arbgb=l_msgid AND msgnr=l_msgno.

IF sy-subrc=0. IF l_mstring CS '&1'. REPLACE '&1' WITH l_msgv1 INTO l_mstring. REPLACE '&2' WITH l_msgv2 INTO l_mstring. REPLACE '&3' WITH l_msgv3 INTO l_mstring. REPLACE '&4' WITH l_msgv4 INTO l_mstring. ELSE. REPLACE '&' WITH l_msgv1 INTO l_mstring. REPLACE '&' WITH l_msgv2 INTO l_mstring. REPLACE '&' WITH l_msgv3 INTO l_mstring. REPLACE '&' WITH l_msgv4 INTO l_mstring. ENDIF. CONDENSE l_mstring. ELSE. CONCATENATE l_msgid l_msgno l_msgty l_msgv1 l_msgv2 l_msgv3 l_msgv4 INTO l_mstring. ENDIF.

CONCATENATE 'BDC/ ' l_mstring INTO l_mstring. append_message '000' l_mstring.

ENDIF.

CALL FUNCTION 'POSTING_INTERFACE_END' EXCEPTIONS session_not_processable=1 OTHERS =2.

ENDFORM. " actual_post &--------------------------------------------------------------------- *& Form prepare_header_normal &---------------------------------------------------------------------

  • text ---------------------------------------------------------------------- FORM prepare_header_normal TABLES ft_message STRUCTURE wa_message ft_ftpost STRUCTURE ftpost USING fw_bkpf STRUCTURE bkpf. DATA/ BEGIN OF lt_fieldname OCCURS 0, tabname LIKE dd03l-tabname, fieldname LIKE dd03l-fieldname, position LIKE dd03l-position, END OF lt_fieldname. DATA/ l_bdc_fnam LIKE ftpost-fnam, l_fieldname TYPE string. FIELD-SYMBOLS/ <l_field> TYPE ANY. RANGES/ ls_fieldname FOR lt_fieldname-fieldname.

CLEAR/ ft_ftpost, ft_message, lt_fieldname, lt_fieldname[], ls_fieldname, ls_fieldname[].

*-Set BKPF field name range ls_fieldname='EEQMANDT'. APPEND ls_fieldname. ls_fieldname='EEQGJAHR'. APPEND ls_fieldname.

*-Get all BKPF field name SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_fieldname FROM dd03l WHERE tabname EQ 'BKPF' AND as4local EQ 'A'.

SORT lt_fieldname BY position.

*-Put value LOOP AT lt_fieldname WHERE fieldname IN ls_fieldname. *---Get BDC field name CLEAR/ l_bdc_fnam. CONCATENATE 'BKPF-' lt_fieldname-fieldname INTO l_bdc_fnam.

*---Get input value CLEAR/ l_fieldname. CONCATENATE 'FW_BKPF-' lt_fieldname-fieldname INTO l_fieldname. ASSIGN (l_fieldname) TO <l_field>. IF sy-subrc NE 0. CONTINUE. ENDIF.

*---Put value PERFORM put_bdc_value TABLES ft_ftpost USING 'K' '000' l_bdc_fnam <l_field>. ENDLOOP.

ENDFORM. " prepare_header_normal &--------------------------------------------------------------------- *& Form prepare_item_normal &---------------------------------------------------------------------

  • text ----------------------------------------------------------------------
  • -->P_FT_MESSAGE text
  • -->P_LT_FTPOST text
  • -->P_FT_BSEG text ---------------------------------------------------------------------- FORM prepare_item_normal TABLES ft_message STRUCTURE wa_message ft_ftpost STRUCTURE ftpost USING fw_bseg STRUCTURE bseg. DATA/ BEGIN OF lt_fieldname OCCURS 0, tabname LIKE dd03l-tabname, fieldname LIKE dd03l-fieldname, position LIKE dd03l-position, END OF lt_fieldname. DATA/ l_bdc_fnam LIKE ftpost-fnam, l_fieldname TYPE string. FIELD-SYMBOLS/ <l_field> TYPE ANY. RANGES/ ls_fieldname FOR lt_fieldname-fieldname.

CLEAR/ ft_ftpost, ft_message, lt_fieldname, lt_fieldname[], ls_fieldname, ls_fieldname[].

*-Get all BSEG field name SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_fieldname FROM dd03l WHERE tabname EQ 'BSEG' AND as4local EQ 'A'.

SORT lt_fieldname BY position.

*-Set BSEG field name range ls_fieldname='EEQMANDT'. APPEND ls_fieldname. ls_fieldname='EEQBUZEI'. APPEND ls_fieldname. ls_fieldname='EEQLIFNR'. APPEND ls_fieldname. ls_fieldname='EEQKUNNR'. APPEND ls_fieldname.

*-Put value LOOP AT lt_fieldname WHERE fieldname IN ls_fieldname. *---Get BDC field name CLEAR/ l_bdc_fnam. CONCATENATE 'BSEG-' lt_fieldname-fieldname INTO l_bdc_fnam.

*---Get input value CLEAR/ l_fieldname. CONCATENATE 'FW_BSEG-' lt_fieldname-fieldname INTO l_fieldname. ASSIGN (l_fieldname) TO <l_field>. IF sy-subrc NE 0. CONTINUE. ENDIF.

*---Put value PERFORM put_bdc_value TABLES ft_ftpost USING 'P' fw_bseg-buzei l_bdc_fnam <l_field>. ENDLOOP.

ENDFORM. " prepare_item_normal ---------------------------------------------------------------------- ***INCLUDE LZFI_DOC_ACTIONF02 . ---------------------------------------------------------------------- &--------------------------------------------------------------------- *& Form reverse_doc &---------------------------------------------------------------------

  • text ---------------------------------------------------------------------- FORM reverse_doc TABLES ft_message STRUCTURE wa_message ft_blntab STRUCTURE blntab USING fi_belnr fi_budat fi_bukrs fi_gjahr fi_stgrd fi_monat. DATA/ l_tcode LIKE sy-tcode, l_msgid LIKE sy-msgid, l_msgno LIKE sy-msgno, l_msgty LIKE sy-msgty, l_msgv1 LIKE sy-msgv1, l_msgv2 LIKE sy-msgv2, l_msgv3 LIKE sy-msgv3, l_msgv4 LIKE sy-msgv4, l_subrc LIKE sy-subrc, l_mstring TYPE string.

CLEAR/ ft_message, ft_blntab, ft_blntab[], l_tcode, l_msgid, l_msgno, l_msgty, l_msgv1, l_msgv2, l_msgv3, l_msgv4, l_subrc, l_mstring.

l_tcode='FB08'.

CALL FUNCTION 'POSTING_INTERFACE_REVERSE_DOC' EXPORTING i_belns =fi_belnr i_budat =fi_budat i_bukrs =fi_bukrs i_gjahs =fi_gjahr i_monat =fi_monat i_tcode =l_tcode i_stgrd =fi_stgrd IMPORTING e_msgid =l_msgid e_msgno =l_msgno e_msgty =l_msgty e_msgv1 =l_msgv1 e_msgv2 =l_msgv2 e_msgv3 =l_msgv3 e_msgv4 =l_msgv4 e_subrc =l_subrc TABLES t_blntab =ft_blntab EXCEPTIONS transaction_code_invalid=1 no_authorization =2 OTHERS =3.

IF l_subrc <> 0. SELECT SINGLE text INTO l_mstring FROM t100 WHERE sprsl='E' AND arbgb=l_msgid AND msgnr=l_msgno.

IF sy-subrc=0. IF l_mstring CS '&1'. REPLACE '&1' WITH l_msgv1 INTO l_mstring. REPLACE '&2' WITH l_msgv2 INTO l_mstring. REPLACE '&3' WITH l_msgv3 INTO l_mstring. REPLACE '&4' WITH l_msgv4 INTO l_mstring. ELSE. REPLACE '&' WITH l_msgv1 INTO l_mstring. REPLACE '&' WITH l_msgv2 INTO l_mstring. REPLACE '&' WITH l_msgv3 INTO l_mstring. REPLACE '&' WITH l_msgv4 INTO l_mstring. ENDIF. CONDENSE l_mstring. ELSE. CONCATENATE l_msgid l_msgno l_msgty l_msgv1 l_msgv2 l_msgv3 l_msgv4 INTO l_mstring. ENDIF.

CONCATENATE 'BDC/ ' l_mstring INTO l_mstring. append_message '000' l_mstring.

ENDIF.

ENDFORM. " reverse_doc &--------------------------------------------------------------------- *& Form reset_doc &---------------------------------------------------------------------

  • text ---------------------------------------------------------------------- FORM reset_doc TABLES ft_message STRUCTURE wa_message USING fi_belnr fi_bukrs fi_gjahr.

DATA/ l_tcode LIKE sy-tcode, l_msgid LIKE sy-msgid, l_msgno LIKE sy-msgno, l_msgty LIKE sy-msgty, l_msgv1 LIKE sy-msgv1, l_msgv2 LIKE sy-msgv2, l_msgv3 LIKE sy-msgv3, l_msgv4 LIKE sy-msgv4, l_subrc LIKE sy-subrc, l_mstring TYPE string. DATA/ l_augbl LIKE rf05r-augbl, l_bukrs LIKE rf05r-bukrs, l_gjahr LIKE rf05r-gjahr.

CLEAR/ ft_message, l_tcode, l_msgid, l_msgno, l_msgty, l_msgv1, l_msgv2, l_msgv3, l_msgv4, l_subrc, l_mstring, l_augbl, l_bukrs, l_gjahr.

l_augbl=fi_belnr. l_bukrs=fi_bukrs. l_gjahr=fi_gjahr.

l_tcode='FBRA'.

CALL FUNCTION 'POSTING_INTERFACE_RESET_CLEAR' EXPORTING i_augbl =l_augbl i_bukrs =l_bukrs i_gjahr =l_gjahr i_tcode =l_tcode IMPORTING e_msgid =l_msgid e_msgno =l_msgno e_msgty =l_msgty e_msgv1 =l_msgv1 e_msgv2 =l_msgv2 e_msgv3 =l_msgv3 e_msgv4 =l_msgv4 e_subrc =l_subrc EXCEPTIONS transaction_code_invalid=1 no_authorization =2 OTHERS =3.

*-Return message IF l_subrc <> 0. SELECT SINGLE text INTO l_mstring FROM t100 WHERE sprsl='E' AND arbgb=l_msgid AND msgnr=l_msgno.

IF sy-subrc=0. IF l_mstring CS '&1'. REPLACE '&1' WITH l_msgv1 INTO l_mstring. REPLACE '&2' WITH l_msgv2 INTO l_mstring. REPLACE '&3' WITH l_msgv3 INTO l_mstring. REPLACE '&4' WITH l_msgv4 INTO l_mstring. ELSE. REPLACE '&' WITH l_msgv1 INTO l_mstring. REPLACE '&' WITH l_msgv2 INTO l_mstring. REPLACE '&' WITH l_msgv3 INTO l_mstring. REPLACE '&' WITH l_msgv4 INTO l_mstring. ENDIF. CONDENSE l_mstring. ELSE. CONCATENATE l_msgid l_msgno l_msgty l_msgv1 l_msgv2 l_msgv3 l_msgv4 INTO l_mstring. ENDIF.

CONCATENATE 'BDC/ ' l_mstring INTO l_mstring. append_message '000' l_mstring.

ENDIF.

ENDFORM. " reset_doc

}}}

{{{#!comment -------------------- 以下的部份是固定的,不要變動 ----- }}}

⚠️ **GitHub.com Fallback** ⚠️