Code20080110 - ooxxvv/MySAPnotes GitHub Wiki
- 此為 Function 的 Source Code
- 可用來 Post (FB01), Park (FBVB), Reverse (FB08), Reset (FBRA) 會計文件的 Function Group。
- 利用 Field Status 來檢查欄位的狀態。
{{{#!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
}}}