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
*&---------------------------------------------------------------------*

DATAt_accchg  TYPE TABLE OF  accchg,
      wa_accchg TYPE accchg.

TYPESBEGIN 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.

DATAlt_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.

DATAlt_error TYPE TABLE OF ty_errors,
      ls_error TYPE ty_errors.

DATAlv_account TYPE hkont.
DATAlv_msg TYPE string.
DATAlv_update TYPE string.

DATAit_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(3TYPE c,
     l_count(3)   TYPE c,
     l_count1(3)  TYPE c,
     l_text(40)   TYPE c.


DATAh_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
*&---------------------------------------------------------------------*

TABLESsscrfields.

SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-002.
  PARAMETERS:p_file  LIKE rlgrap-filename" OBLIGATORY.
  PARAMETERSp_check AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END  OF BLOCK a1.

 SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
  SELECTION-SCREEN PUSHBUTTON 1(60cmdgen 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.
        CLEARlv_msg.
        CONCATENATE 'Does Not Match Gl account For this line item'
                    ls_error-buzei INTO lv_msg.
        ls_error-status  lv_msg.
        APPENDls_error TO lt_error.
        CLEARls_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.
      APPENDwa_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.
      APPENDwa_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.
      APPENDwa_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.
      APPENDwa_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.

            CLEARls_error-status.
            ls_error-status |{ ls_error-belnr } Updated Successfully for Assignment|.
            APPENDls_error TO lt_error.
            CLEARls_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|.
            APPENDls_error TO lt_error.
            CLEARls_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|.
            APPENDls_error TO lt_error.
            CLEARls_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.

            CLEARlv_msg.
            CLEARls_error-status.

            ls_error-status |{ ls_error-belnr } Updated Successfully for Ref3|.
            APPENDls_error TO lt_error.
            CLEARls_error.
          ENDIF.
          CLEARls_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.
      CLEARlv_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.
      APPENDls_error TO lt_error.
      CLEARls_error.
    ENDIF.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display_data .

  DATAlt_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'Sno',
                           'Document no',
                           'Year',
                           'Line Item',
                           'GL Account',
                           'Assignment',
                           'Text',
                           'Reference',
                           '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 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

Popular posts from this blog

PO rejection notification & rejection comments for Fiori

FB60 Vendor Invoice Post using BAPI

Service Invoice Upload For FB70 (BAPI)