Reset Cleared Documents(FBRA) & Reverse Document (FB08) using Function Module

Input:



Code:

*&---------------------------------------------------------------------*
*& Report ZFI_RESET_REVERSE_CLR_DOC
*&---------------------------------------------------------------------*
*& Program        : ZFI_RESET_REVERSE_CLR_DOC
*& Author         : ??
*& Created on     : ??
*& Requested By   : ??
*& Project        : ??
*& Transport-No   : ??
*& Description    : Bapi For Cleared Documents Reset and Reversal
*& T-Code         : ??
*&---------------------------------------------------------------------*
REPORT zfi_reset_reverse_clr_doc.

INCLUDE zfi_reset_reverse_clr_doc_top.
INCLUDE zfi_reset_reverse_clr_doc_sel.
INCLUDE zfi_reset_reverse_clr_doc_f01.

START-OF-SELECTION.

*** File Upload
  PERFORM get_file_data.
*** Bapi Calling
  IF p_check NE abap_true.
    PERFORM doc_reset_reverse.
  ENDIF.
*** Display Data
  PERFORM display_data.


*&---------------------------------------------------------------------*
*& Include          ZFI_RESET_REVERSE_CLR_DOC_TOP
*&---------------------------------------------------------------------*
TABLESsscrfields.
TABLESbkpf,
        rfdt,
        t100.

TYPESBEGIN OF ty_str,
         sno     TYPE i,
         belnr   TYPE augbl,
         gjahr   TYPE gjahr,
         rev_res TYPE stgrd,
         budat   TYPE budat,
       END OF ty_str.

DATAlt_str TYPE TABLE OF ty_str,
      ls_str TYPE ty_str.

TYPESBEGIN OF ty_error,
         sno   TYPE i,
         type  TYPE char10,
         belnr TYPE augbl,
         msg   TYPE string,
       END OF ty_error.

DATAlt_error TYPE TABLE OF ty_error,
      ls_error TYPE ty_error.

DATA:i_tab_raw_data TYPE  truxs_t_text_data,
     i_filename     LIKE  rlgrap-filename.

DATA:e_xstor                 TYPE c,
     ev_reverse_needed_text1 TYPE  string,
     ev_reverse_needed_text2 TYPE  string,
     ev_reverse_needed_text3 TYPE  string.
DATA:it_accnt TYPE TABLE OF rf05r_acct,
     wa_accnt TYPE rf05r_acct.

DATA:e_budat LIKE  bkpf-budat,
     e_monat LIKE  bkpf-monat,
     e_xsofo.

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.


DATAmsg      LIKE bdcmsgcoll OCCURS WITH HEADER LINE,
      txt(100TYPE c.

*Declarations for ALV List.
DATAgt_outtab TYPE STANDARD TABLE OF bdcmsgcoll,  " Output Table
      gs_outtab TYPE bdcmsgcoll.                " Output Table Strc.

DATA :
  gt_fieldcat TYPE slis_t_fieldcat_alv,  " ALV Field Catalog Table
  gs_layout   TYPE slis_layout_alv,      " ALV Layout Structure
  gt_events   TYPE slis_t_event,         " ALV Events Table
  gv_repid    LIKE sy-repid,             " Report Id
  gc_outtab   TYPE slis_tabname  VALUE 'GT_OUTTAB'"Outtable con



gv_repid sy-repid.

*&---------------------------------------------------------------------*
*& Include          ZFI_RESET_REVERSE_CLR_DOC_SEL
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS p_file  TYPE rlgrap-filename OBLIGATORY,
               p_check AS CHECKBOX DEFAULT 'X'.
  PARAMETERS p_rb1 RADIOBUTTON GROUP rb1,
               p_rb2 RADIOBUTTON GROUP rb1.
SELECTION-SCREEN END OF BLOCK b1.

INITIALIZATION.

  SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
    SELECTION-SCREEN PUSHBUTTON 1(60cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
  SELECTION-SCREEN END OF BLOCK b2.

  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_RESET_REVERSE_CLR_DOC_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
FORM file_upload .

  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
*&---------------------------------------------------------------------*
FORM get_file_data .

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_line_header        'X'
      i_tab_raw_data       i_tab_raw_data
      i_filename           p_file
    TABLES
      i_tab_converted_data lt_str.

  IF lt_str IS INITIAL.
    MESSAGE 'No data uploaded' TYPE 'E'.
  ENDIF.

  IF p_check abap_true.
    LOOP AT lt_str INTO ls_str.

      SELECT belnr,
             stblg
             FROM bkpf
             INTO TABLE @DATA(lt_bkpf)
             FOR ALL ENTRIES IN @lt_str
             WHERE bukrs EQ '****'
               AND belnr EQ @lt_str-belnr
               AND gjahr EQ @ls_str-gjahr.

      READ TABLE lt_bkpf INTO DATA(ls_bkpfWITH KEY belnr ls_str-belnr.
      IF ls_bkpf-stblg IS NOT INITIAL.
        ls_error-sno ls_str-sno.
        ls_error-type icon_red_light.
        ls_error-belnr ls_str-belnr.
        ls_error-msg |This is not a Clearing Document|.
        APPENDls_error TO lt_error.
        CLEARls_error.

      ELSE.

        SELECT *
               FROM bseg
               INTO TABLE @DATA(lt_bseg)
               FOR ALL ENTRIES IN @lt_str
               WHERE bukrs EQ '****'
                 AND gjahr EQ @ls_str-gjahr
                 AND augbl EQ @lt_str-belnr.

        IF lt_bseg IS NOT INITIAL.
          ls_error-sno ls_str-sno.
          ls_error-type icon_red_light.
          ls_error-belnr ls_str-belnr.
          ls_error-msg |This is not a Clearing Document|.
          APPENDls_error TO lt_error.
          CLEARls_error.
        ENDIF.
      ENDIF.

    ENDLOOP.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form doc_reset_reverse
*&---------------------------------------------------------------------*
FORM doc_reset_reverse .

  IF p_rb1 'X'.

    LOOP AT lt_str INTO ls_str.

      CALL FUNCTION 'CALL_FBRA'
        EXPORTING
          i_bukrs                 '****' " Company Code
          i_augbl                 ls_str-belnr
          i_gjahr                 ls_str-gjahr
          i_xerlk                 'X'
          i_stodt                 ls_str-budat
          i_update                'S'
          i_mode                  'N'
        IMPORTING
          e_xstor                 e_xstor
          ev_reverse_needed_text1 ev_reverse_needed_text1
          ev_reverse_needed_text2 ev_reverse_needed_text2
          ev_reverse_needed_text3 ev_reverse_needed_text3
        TABLES
          t_accnt                 it_accnt
        EXCEPTIONS
          not_possible            1
          OTHERS                  2.

      IF sy-subrc 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait abap_true.
        WAIT UP TO SECONDS.

        ls_error-sno ls_str-sno.
        ls_error-type icon_green_light.
        ls_error-belnr ls_str-belnr.
        ls_error-msg |Clearing { ls_str-belnr } Reset .
        APPENDls_error TO lt_error.
        CLEARls_error.
      ELSE.
        ls_error-sno ls_str-sno.
        ls_error-type icon_red_light.
        ls_error-belnr ls_str-belnr.
        ls_error-msg |Document { ls_str-belnr } **** { ls_str-gjahr } is not a clearing document |.
        APPENDls_error TO lt_error.
        CLEAR:ls_error.
      ENDIF.

    ENDLOOP.

  ELSEIF p_rb2 'X'.

    LOOP AT lt_str INTO ls_str.

      CALL FUNCTION 'CALL_FBRA'
        EXPORTING
          i_bukrs                 '****'  " Company Code
          i_augbl                 ls_str-belnr
          i_gjahr                 ls_str-gjahr
          i_xerlk                 'X'
          i_stodt                 ls_str-budat
          i_update                'S'
          i_mode                  'N'
        IMPORTING
          e_xstor                 e_xstor
          ev_reverse_needed_text1 ev_reverse_needed_text1
          ev_reverse_needed_text2 ev_reverse_needed_text2
          ev_reverse_needed_text3 ev_reverse_needed_text3
        TABLES
          t_accnt                 it_accnt
        EXCEPTIONS
          not_possible            1
          OTHERS                  2.

      IF sy-subrc 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait abap_true.

        ls_error-sno ls_str-sno.
        ls_error-type icon_green_light.
        ls_error-belnr ls_str-belnr.
        ls_error-msg |Clearing { ls_str-belnr } Reset .
        APPENDls_error TO lt_error.
        CLEARls_error.

        CALL FUNCTION 'CALL_FB08'
          EXPORTING
            i_bukrs      '****'   " Company Code
            i_belnr      ls_str-belnr
            i_gjahr      ls_str-gjahr
            i_stgrd      ls_str-rev_res
            i_budat      ls_str-budat
            i_update     'A'
            i_mode       'N'
          IMPORTING
            e_budat      e_budat
            e_monat      e_monat
            e_xsofo      e_xsofo
          EXCEPTIONS
            not_possible 1
            OTHERS       2.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait abap_true.

        IF ls_str IS NOT INITIAL.
          SELECT SINGLE stblg
                 FROM bkpf
                 INTO @DATA(gv_stblg)
                 WHERE bukrs EQ '****' " Company Code
                   AND belnr EQ @ls_str-belnr
                   AND gjahr EQ @ls_str-gjahr.
        ENDIF.

        IF sy-subrc 0.
          ls_error-sno ls_str-sno.
          ls_error-type icon_green_light.
*        ls_error-belnr = ls_str-belnr.
          ls_error-belnr gv_stblg.
          ls_error-msg   |Document { gv_stblg } was posted in company code ****|.
          APPENDls_error TO lt_error.
          CLEARls_error.
        ENDIF.

      ELSE.
        ls_error-sno ls_str-sno.
        ls_error-type icon_red_light.
        ls_error-belnr ls_str-belnr.
        ls_error-msg |Document { ls_str-belnr } **** { ls_str-gjahr } is not a clearing document |.
        APPENDls_error TO lt_error.
        CLEAR:ls_error.
      ENDIF.
    ENDLOOP.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
FORM display_data .

  TYPE-POOLS:slis.
  DATA:ls_fieldcat TYPE slis_fieldcat_alv,
       ls_layout   TYPE slis_layout_alv.
  DATA:lt_fieldcat TYPE slis_t_fieldcat_alv.

  DATA:lv_program TYPE sy-repid.

  IF lt_error IS NOT INITIAL.

    APPEND VALUE #fieldname    'SNO'
                    col_pos      1
                    ref_tabname  'LT_ERROR'
                    seltext_m    'Serial No.' TO lt_fieldcat.

    APPEND VALUE #fieldname    'TYPE'
                    col_pos      2
                    ref_tabname  'LT_ERROR'
                    seltext_m    'Status' TO lt_fieldcat.

    APPEND VALUE #fieldname   'BELNR'
                    col_pos     3
                    ref_tabname 'LT_ERROR'
                    seltext_m   'Document No' TO lt_fieldcat.

    APPEND VALUE #fieldname    'MSG'
                    col_pos      4
                    ref_tabname  'LT_ERROR'
                    seltext_m    'Message' TO lt_fieldcat.

    CLEAR ls_layout.
    ls_layout-colwidth_optimize 'X'.
    ls_layout-zebra             'X'.

    lv_program sy-repid.

* display the final display
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program lv_program
        is_layout          ls_layout
        it_fieldcat        lt_fieldcat
      TABLES
        t_outtab           lt_error
      EXCEPTIONS
        program_error      1
        OTHERS             2.
  ELSE.
    MESSAGE 'No errors found' TYPE 'I'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form generate_template
*&---------------------------------------------------------------------*
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.

*** Error handle File
  PERFORM err_hdl.

* add a new workbook
  CALL METHOD OF
    h_mapl
      'Add' h_map.

*** Error handle File
  PERFORM err_hdl.

  PERFORM fill_cell USING:   1  'Sno',
                             2  'Document No',
                             3  'Year',
                             4  'Reversal Reason',
                             5  'Posting Date'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form err_hdl
*&---------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
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.

Template:





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)