Upload Tool For Document Change (FB02) BAPI
My requirement is to change the document header text, reference number, line item text, and line item assignment using an bapi upload program (FB02).
Input:
*& Report ZFI_FB02_DOC_CHANGE
*&---------------------------------------------------------------------*
* Program : ZFI_FB02_DOC_CHANGE
* Author : ?
* Created on : ?
* Requested By : ?
* Project :
* Transport-No :
* Description : Document Change in FB02 Upload Program
* T-Code :
*&---------------------------------------------------------------------*
REPORT ZFI_FB02_DOC_CHANGE.
INCLUDE zfi_fb02_doc_change_top.
INCLUDE zfi_fb02_doc_change_sel.
INCLUDE zfi_fb02_doc_change_f01.
START-OF-SELECTION.
PERFORM get_file_data.
IF p_check NE abap_true.
PERFORM change_doc.
ENDIF.
PERFORM display_data.
*&---------------------------------------------------------------------*
*& Include ZFI_DOC_CHANGE_TOP
*&---------------------------------------------------------------------*
DATA: t_accchg TYPE TABLE OF accchg,
wa_accchg TYPE accchg.
TYPES: BEGIN OF ty_file,
sno TYPE i,
belnr TYPE belnr_d,
year TYPE gjahr,
buzei TYPE buzei,
hkont TYPE hkont,
zuonr TYPE dzuonr,
sgtxt TYPE sgtxt,
xblnr type XBLNR1,
xref3 type xref3,
END OF ty_file.
DATA: lt_file TYPE TABLE OF ty_file.
TYPES:BEGIN OF ty_errors,
sno TYPE i,
type TYPE char1,
belnr TYPE belnr_d,
buzei TYPE buzei,
status TYPE string,
END OF ty_errors.
DATA: lt_error TYPE TABLE OF ty_errors,
ls_error TYPE ty_errors.
DATA: lv_account TYPE hkont.
DATA: lv_msg TYPE string.
DATA: lv_update TYPE string.
DATA: it_test TYPE STANDARD TABLE OF alsmex_tabline,
wa_test TYPE alsmex_tabline.
DATA:gs_lfbw TYPE lfbw,
gt_lfbw TYPE TABLE OF lfbw,
l_counter(3) TYPE c,
l_count(3) TYPE c,
l_count1(3) TYPE c,
l_text(40) TYPE c.
DATA: h_excel TYPE ole2_object, " Excel object
h_mapl TYPE ole2_object, " list of workbooks
h_map TYPE ole2_object, " workbook
h_zl TYPE ole2_object, " cell
h_f TYPE ole2_object, " font
h TYPE i.
*&---------------------------------------------------------------------*
*& Include ZFI_DOC_CHANGE_SEL
*&---------------------------------------------------------------------*
TABLES: sscrfields.
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-002.
PARAMETERS:p_file LIKE rlgrap-filename. " OBLIGATORY.
PARAMETERS: p_check AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK a1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
SELECTION-SCREEN PUSHBUTTON 1(60) cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b2.
INITIALIZATION.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = icon_xxl
text = 'Generate Template'
info = 'Generate Excel File Template'
IMPORTING
result = cmdgen
EXCEPTIONS
OTHERS = 0.
AT SELECTION-SCREEN.
CASE sscrfields.
WHEN 'A_GEN'.
PERFORM generate_template.
ENDCASE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
*** File Upload
PERFORM file_upload.
*&---------------------------------------------------------------------*
*& Include ZFI_DOC_CHANGE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM file_upload .
* F4 Functionality
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_file_data .
**** serial Number upload File
DATA: lt_raw TYPE truxs_t_text_data.
* Convert the XL file to Internal Table
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header = abap_true
i_tab_raw_data = lt_raw
i_filename = p_file
TABLES
i_tab_converted_data = lt_file
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'No Data File' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
DELETE ADJACENT DUPLICATES FROM lt_file COMPARING sno.
IF p_check = abap_true.
LOOP AT lt_file INTO DATA(ls_file).
SELECT SINGLE * FROM bseg INTO @DATA(lv_hkont)
WHERE bukrs EQ '****'
AND belnr EQ @ls_file-belnr
AND gjahr EQ @ls_file-year
AND buzei EQ @ls_file-buzei.
CLEAR:lv_account.
lv_account = |{ ls_file-hkont ALPHA = IN }|.
IF lv_hkont-hkont NE lv_account.
ls_error-sno = ls_file-sno.
ls_error-type = 'E'.
ls_error-belnr = ls_file-belnr.
ls_error-buzei = ls_file-buzei.
CLEAR: lv_msg.
CONCATENATE 'Does Not Match Gl account For this line item'
ls_error-buzei INTO lv_msg.
ls_error-status = lv_msg.
APPEND: ls_error TO lt_error.
CLEAR: ls_error.
ENDIF.
ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form change_doc
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM change_doc .
LOOP AT lt_file INTO DATA(ls_file).
SELECT SINGLE * FROM bkpf INTO @DATA(ls_bkpf)
WHERE bukrs EQ '****'
AND belnr EQ @ls_file-belnr
AND gjahr EQ @ls_file-year.
SELECT SINGLE * FROM bseg INTO @DATA(lv_hkont)
WHERE bukrs EQ '****'
AND belnr EQ @ls_file-belnr
AND gjahr EQ @ls_file-year
AND buzei EQ @ls_file-buzei.
CLEAR:lv_account.
lv_account = |{ ls_file-hkont ALPHA = IN }|.
IF lv_hkont-hkont EQ lv_account.
CLEAR t_accchg.
wa_accchg-fdname = 'ZUONR'.
IF ls_file-zuonr IS NOT INITIAL.
wa_accchg-newval = ls_file-zuonr.
ELSEIF ls_file-zuonr IS INITIAL.
wa_accchg-newval = lv_hkont-zuonr.
ENDIF.
APPEND: wa_accchg TO t_accchg.
CLEAR wa_accchg.
wa_accchg-fdname = 'SGTXT'.
IF ls_file-sgtxt IS NOT INITIAL.
wa_accchg-newval = ls_file-sgtxt.
ELSEIF ls_file-sgtxt IS INITIAL.
wa_accchg-newval = lv_hkont-sgtxt.
ENDIF.
APPEND: wa_accchg TO t_accchg.
CLEAR wa_accchg.
wa_accchg-fdname = 'XBLNR'.
IF ls_file-xblnr IS NOT INITIAL.
wa_accchg-newval = ls_file-xblnr.
ELSEIF ls_file-xblnr IS INITIAL.
wa_accchg-newval = ls_bkpf-xblnr.
ENDIF.
APPEND: wa_accchg TO t_accchg.
CLEAR wa_accchg.
wa_accchg-fdname = 'XREF3'.
IF ls_file-xref3 IS NOT INITIAL.
wa_accchg-newval = ls_file-xref3.
ELSEIF ls_file-xref3 IS INITIAL.
wa_accchg-newval = lv_hkont-xref3.
ENDIF.
APPEND: wa_accchg TO t_accchg.
CLEAR wa_accchg.
ls_file-belnr = |{ ls_file-belnr ALPHA = IN }|.
CALL FUNCTION 'FI_DOCUMENT_CHANGE'
EXPORTING
i_buzei = ls_file-buzei
i_bukrs = '****'
i_belnr = ls_file-belnr
i_gjahr = ls_file-year
TABLES
t_accchg = t_accchg
EXCEPTIONS
no_reference = 1
no_document = 2
many_documents = 3
wrong_input = 4
overwrite_creditcard = 5
OTHERS = 6.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
LOOP AT t_accchg INTO DATA(ls_accchg).
IF ls_accchg-fdname = 'ZUONR' AND ls_file-zuonr IS NOT INITIAL.
ls_error-sno = ls_file-sno.
ls_error-type = 'S'.
ls_error-belnr = ls_file-belnr.
ls_error-buzei = ls_file-buzei.
CLEAR: ls_error-status.
ls_error-status = |{ ls_error-belnr } Updated Successfully for Assignment|.
APPEND: ls_error TO lt_error.
CLEAR: ls_error.
ENDIF.
IF ls_accchg-fdname = 'SGTXT' AND ls_file-sgtxt IS NOT INITIAL.
ls_error-sno = ls_file-sno.
ls_error-type = 'S'.
ls_error-belnr = ls_file-belnr.
ls_error-buzei = ls_file-buzei.
CLEAR ls_error-status.
ls_error-status = |{ ls_error-belnr } Updated Successfully for Text|.
APPEND: ls_error TO lt_error.
CLEAR: ls_error.
ENDIF.
IF ls_accchg-fdname = 'XBLNR' AND ls_file-xblnr IS NOT INITIAL.
ls_error-sno = ls_file-sno.
ls_error-type = 'S'.
ls_error-belnr = ls_file-belnr.
ls_error-buzei = ls_file-buzei.
CLEAR ls_error-status.
ls_error-status = |{ ls_error-belnr } Updated Successfully for Reference|.
APPEND: ls_error TO lt_error.
CLEAR: ls_error.
ENDIF.
IF ls_accchg-fdname = 'XREF3' AND ls_file-xref3 IS NOT INITIAL.
ls_error-sno = ls_file-sno.
ls_error-type = 'S'.
ls_error-belnr = ls_file-belnr.
ls_error-buzei = ls_file-buzei.
CLEAR: lv_msg.
CLEAR: ls_error-status.
ls_error-status = |{ ls_error-belnr } Updated Successfully for Ref3|.
APPEND: ls_error TO lt_error.
CLEAR: ls_error.
ENDIF.
CLEAR: ls_error,ls_accchg.
ENDLOOP.
ENDIF.
ELSEIF lv_hkont-hkont NE lv_account.
ls_error-sno = ls_file-sno.
ls_error-type = 'E'.
ls_error-belnr = ls_file-belnr.
ls_error-buzei = ls_file-buzei.
CLEAR: lv_msg.
CONCATENATE 'Does Not Match Gl account For this line item'
ls_error-buzei INTO lv_msg SEPARATED BY space.
ls_error-status = lv_msg.
APPEND: ls_error TO lt_error.
CLEAR: ls_error.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM display_data .
DATA: lt_fcat TYPE slis_t_fieldcat_alv,
ls_fcat TYPE slis_fieldcat_alv.
APPEND VALUE #( fieldname = 'SNO'
col_pos = 1
ref_tabname = 'LT_ERROR'
seltext_m = 'SNO' ) TO lt_fcat.
APPEND VALUE #( fieldname = 'TYPE'
col_pos = 2
ref_tabname = 'LT_ERROR'
seltext_m = 'MTYPE' ) TO lt_fcat.
APPEND VALUE #( fieldname = 'BELNR'
col_pos = 3
ref_tabname = 'LT_ERROR'
seltext_m = 'Document Number' ) TO lt_fcat.
APPEND VALUE #( fieldname = 'BUZEI'
col_pos = 4
ref_tabname = 'LT_ERROR'
seltext_m = 'Line Item Number' ) TO lt_fcat.
APPEND VALUE #( fieldname = 'STATUS'
col_pos = 4
ref_tabname = 'LT_ERROR'
seltext_m = 'Status' ) TO lt_fcat.
IF lt_error IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = lt_fcat
TABLES
t_outtab = lt_error.
ELSE.
MESSAGE 'No Errors found' TYPE 'I'.
* EXIT.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form generate_template
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM generate_template .
* start Excel
CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
SET PROPERTY OF h_excel 'Visible' = 1.
* get list of workbooks, initially empty
CALL METHOD OF
h_excel
'Workbooks' = h_mapl.
PERFORM err_hdl.
* add a new workbook
CALL METHOD OF
h_mapl
'Add' = h_map.
PERFORM err_hdl.
PERFORM fill_cell USING: 1 1 0 'Sno',
1 2 0 'Document no',
1 3 0 'Year',
1 4 0 'Line Item',
1 5 0 'GL Account',
1 6 0 'Assignment',
1 7 0 'Text',
1 8 0 'Reference',
1 9 0 'Ref3'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form err_hdl
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM err_hdl .
IF sy-subrc <> 0.
CALL METHOD OF
h_excel
'QUIT'.
FREE OBJECT h_excel.
h_excel-handle = -1.
MESSAGE: 'Failed to generate template.' TYPE 'E'.
ENDIF.
ENDFORM.
FORM fill_cell USING i j bold val.
CALL METHOD OF
h_excel
'Cells' = h_zl
EXPORTING
#1 = i
#2 = j.
PERFORM err_hdl.
SET PROPERTY OF h_zl 'Value' = val .
PERFORM err_hdl.
GET PROPERTY OF h_zl 'Font' = h_f.
PERFORM err_hdl.
SET PROPERTY OF h_f 'Bold' = bold .
PERFORM err_hdl.
ENDFORM.
Comments
Post a Comment