Wednesday 29 November 2017

TO CREATE CSV FILE FOR CURRENT MB52 TRANSACTION

*&---------------------------------------------------------------------*
*& Report  ZMM_FIFO
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZMM_FIFO NO STANDARD PAGE HEADING.


TYPESBEGIN OF TY_FINAL,
        MATNR  TYPE MATNR,       " Material Number
        WERKS  TYPE WERKS_D,     " Plant
        LGORT  TYPE LGORT_D,     " Storage Location
        CHARG  TYPE CHARG_D,     " Batch Number
        CLABS  TYPE STRING,      " Valuated Unrestricted-Use Stock
        MEINS  TYPE MEINS,       " Base Unit of Measure
        MAKTX  TYPE MAKTX,       " Material Description (Short Text)
       END OF TY_FINAL,

       BEGIN OF TY_MARA,
        MATNR  TYPE MATNR,       " Material Number
        MEINS  TYPE MEINS,       " Base Unit of Measure
       END OF TY_MARA,

       BEGIN OF TY_MAKT,
        MATNR  TYPE MATNR,       " Material Number
        SPRAS  TYPE SPRAS,       " Language Key
        MAKTX TYPE MAKTX,       " Material Description (Short Text)
       END OF TY_MAKT,

       BEGIN OF TY_MCHB,
        MATNR  TYPE MATNR,       " Material Number
        WERKS  TYPE WERKS_D,     " Plant
        LGORT  TYPE LGORT_D,     " Storage Location
        CHARG  TYPE CHARG_D,     " Batch Number
        CLABS  TYPE LABST,       " Valuated Unrestricted-Use Stock
       END OF TY_MCHB,

       BEGIN OF LT_ERROR,
          TIME(8),
          DATE(8),
          MSG1(50),
          MSG2(50),
          MSG3(50),
          MSG4(50),
          TEXT(220),
        END OF LT_ERROR.

DATAIT_FINAL  TYPE TABLE OF TY_FINAL,
      IT_FINAL1 TYPE TABLE OF TY_FINAL,
      IT_MARA   TYPE TABLE OF TY_MARA,
      IT_MAKT   TYPE TABLE OF TY_MAKT,
      IT_MCHB   TYPE TABLE OF TY_MCHB,
      WA_FINAL1 TYPE TY_FINAL,
      WA_FINAL  TYPE TY_FINAL,
      WA_MARA   TYPE TY_MARA,
      WA_MAKT   TYPE TY_MAKT,
      WA_MCHB   TYPE TY_MCHB.
*
*DATA: IT_TAB TYPE STANDARD TABLE OF TY_FINAL,
*      WA_TAB TYPE ALSMEX_TABLINE.

DATAP_FILE   TYPE   STRING,
      E_FILE   TYPE   STRING,
      FV_TEXT  TYPE   STRING,
      SV_TEXT  TYPE   STRING,
      TEXT     TYPE   STRING.

DATAV_DIR_PATH      LIKE EPSF-EPSDIRNAM VALUE '\\192.168.0.22\TUBECUTTING\GRIN\UPLOAD',
      E_DIR_PATH      LIKE EPSF-EPSDIRNAM VALUE '\\192.168.0.22\TUBECUTTING\GRIN\UPLOAD',
      V_DIR_NAME      LIKE EPSF-EPSDIRNAM,
      V_FILE_COUNTER  LIKE EPSF-EPSFILSIZ,
      V_ERROR_COUNTER LIKE EPSF-EPSFILSIZ,
      T_DIR_LIST      LIKE TABLE OF EPSFILI,
      W_DIR_LIST      TYPE EPSFILI,
      LV0TEXT         TYPE STRING.


SELECTION-SCREENBEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS P_WERKS TYPE MCHB-WERKS,
             P_LGORT TYPE MCHB-LGORT.
SELECTION-SCREENEND OF BLOCK B1.


START-OF-SELECTION.

  PERFORM GET_DATA.

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .

  SELECT MATNR
         WERKS
         LGORT
         CHARG
         CLABS
    FROM MCHB
    INTO TABLE IT_MCHB
    WHERE WERKS EQ P_WERKS
      AND LGORT EQ P_LGORT
      AND CLABS IS NOT NULL.
  IF SY-SUBRC EQ 0.
    SELECT MATNR
           MEINS
      FROM MARA
      INTO TABLE IT_MARA
      FOR ALL ENTRIES IN IT_MCHB
      WHERE MATNR EQ IT_MCHB-MATNR.
    IF SY-SUBRC EQ 0.
    ENDIF.

    SELECT MATNR
           SPRAS
           MAKTX
      FROM MAKT
      INTO TABLE IT_MAKT
      FOR ALL ENTRIES IN IT_MCHB
      WHERE MATNR EQ IT_MCHB-MATNR
        AND SPRAS EQ 'EN'.
    IF SY-SUBRC EQ 0.
    ENDIF.
  ENDIF.

  IF IT_MCHB IS NOT INITIAL.
    LOOP AT IT_MCHB INTO WA_MCHB.
      WA_FINAL-MATNR  WA_MCHB-MATNR.            "Material Number
      WA_FINAL-WERKS  WA_MCHB-WERKS.            "Plant
      WA_FINAL-LGORT  WA_MCHB-LGORT.            "Storage Location
      WA_FINAL-CHARG  WA_MCHB-CHARG.            "Batch Number
      WA_FINAL-CLABS  WA_MCHB-CLABS.            "Valuated Unrestricted-Use Stock

      READ TABLE IT_MARA INTO WA_MARA WITH KEY MATNR WA_MCHB-MATNR.
      IF SY-SUBRC EQ 0.
        WA_FINAL-MEINS  WA_MARA-MEINS.          "Base Unit of Measure
      ENDIF.

      READ TABLE IT_MAKT INTO WA_MAKT WITH KEY MATNR WA_MCHB-MATNR.
      IF SY-SUBRC EQ 0.
        WA_FINAL-MAKTX  WA_MAKT-MAKTX.          "Material Description (Short Text)
      ENDIF.

      APPEND WA_FINAL TO IT_FINAL.
      CLEARWA_FINALWA_MAKTWA_MARAWA_MCHB.
    ENDLOOP.
  ENDIF.

  CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
    EXPORTING
      DIR_NAME               V_DIR_PATH
    IMPORTING
      DIR_NAME               V_DIR_NAME
      FILE_COUNTER           V_FILE_COUNTER
      ERROR_COUNTER          V_ERROR_COUNTER
    TABLES
      DIR_LIST               T_DIR_LIST
    EXCEPTIONS
      INVALID_EPS_SUBDIR     1
      SAPGPARAM_FAILED       2
      BUILD_DIRECTORY_FAILED 3
      NO_AUTHORIZATION       4
      READ_DIRECTORY_FAILED  5
      TOO_MANY_READ_ERRORS   6
      EMPTY_DIRECTORY_LIST   7
      OTHERS                 8.

  FV_TEXT SY-DATUM.
  CONCATENATE FV_TEXT 'TEST' '.csv' INTO FV_TEXT.
  READ TABLE T_DIR_LIST INTO W_DIR_LIST WITH KEY NAME FV_TEXT.
  IF SY-SUBRC EQ 0.
    CONCATENATE V_DIR_PATH '\' W_DIR_LIST-NAME INTO P_FILE.
    OPEN DATASET P_FILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.
    IF SY-SUBRC NE 0.
      MESSAGE 'error' TYPE 'E'.
      EXIT.
    ELSE.
      DO.
        READ DATASET P_FILE INTO LV0TEXT.
        IF SY-SUBRC <> 0.
          EXIT.
        ELSE.
          IF SY-TABIX NE 1.
            SPLIT LV0TEXT AT ',' INTO WA_FINAL-MATNR
                                      WA_FINAL-WERKS
                                      WA_FINAL-LGORT
                                      WA_FINAL-CHARG
                                      WA_FINAL-CLABS
                                      WA_FINAL-MEINS
                                      WA_FINAL-MAKTX.
            APPEND WA_FINAL TO IT_FINAL.
          ENDIF.
        ENDIF.
      ENDDO.
      CLEAR WA_FINAL.
    ENDIF.

    CLOSE DATASET P_FILE.
    CONCATENATE V_DIR_PATH '\' FV_TEXT INTO P_FILE.
    OPEN DATASET P_FILE FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
    IF SY-SUBRC 0.
      LOOP AT IT_FINAL INTO WA_FINAL.
        CONCATENATE WA_FINAL-MATNR
                    WA_FINAL-WERKS
                    WA_FINAL-LGORT
                    WA_FINAL-CHARG
                    WA_FINAL-CLABS
                    WA_FINAL-MEINS
                    WA_FINAL-MAKTX
               INTO LV0TEXT SEPARATED BY ','.
        TRANSFER LV0TEXT TO P_FILE.
        CLEARWA_FINAL,
               LV0TEXT.
      ENDLOOP.
    ENDIF.
    CLOSE DATASET P_FILE.
  ELSE.
    CONCATENATE V_DIR_PATH '\' FV_TEXT INTO P_FILE.
    OPEN DATASET P_FILE FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
    IF SY-SUBRC 0.
      CONCATENATE 'Material Number'
                  'Plant'
                  'Storage Location'
                  'Batch Number'
                  'Valuated Unrestricted-Use Stock'
                  'Base Unit of Measure'
                  'Material Description'
             INTO LV0TEXT SEPARATED BY ','.
      TRANSFER LV0TEXT TO P_FILE.
      CLEAR LV0TEXT.

      LOOP AT IT_FINAL INTO WA_FINAL.
        CONCATENATE WA_FINAL-MATNR
                    WA_FINAL-WERKS
                    WA_FINAL-LGORT
                    WA_FINAL-CHARG
                    WA_FINAL-CLABS
                    WA_FINAL-MEINS
                    WA_FINAL-MAKTX
               INTO LV0TEXT SEPARATED BY ','.
        TRANSFER LV0TEXT TO P_FILE.
        CLEARWA_FINAL,
               LV0TEXT.
      ENDLOOP.
    ENDIF.
    CLOSE DATASET P_FILE.
  ENDIF.
ENDFORM.                    " GET_DATA

ASSET REGISTER FI





REPORT zinfir_asset_history.
************************************************************************
* PROGRAM TITLE : ZINFIR_ASSET_HISTORY
* MODULE : FI
* PROGRAM TYPE : Report
* INPUT  : Company code and report run date
* OUTPUT : Asset history for current year
* CREATED BY : PRATIK PRAKASH KAMBLE
* CREATION DATE : 29.11.2017
*-----------------------------------------------------------------------
* DESCRIPTION : 50053C
************************************************************************
* Modification history:
* ----------------------------------------------------------------------
*   DATE     | User ID   | TR
* 29.11.2017 | ABAP_YASH | E7DK918824
* ----------------------------------------------------------------------
DATA: lv_tcode TYPE sy-tcode,
      lv_date  TYPE sy-datum,
      lv_bukrs TYPE bukrs,
      s_anlkl  TYPE RANGE OF anlkl WITH HEADER LINE,
      lv_anlkl TYPE anlkl.

DATA: bukrs     TYPE RANGE OF bukrs WITH HEADER LINE,
      it_asset1 TYPE TABLE OF fiaa_salvtab_ragitt,
      it_asset2 TYPE TABLE OF fiaa_salvtab_ragitt,
      it_asset3 TYPE TABLE OF fiaa_salvtab_ragitt,
      it_asset4 TYPE TABLE OF fiaa_salvtab_ragitt,
      it_asset5 TYPE TABLE OF fiaa_salvtab_ragitt,
      it_asset6 TYPE TABLE OF fiaa_salvtab_ragitt,
      fs_asset  TYPE          fiaa_salvtab_ragitt,
      fs_asset1 TYPE          fiaa_salvtab_ragitt.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_date TYPE sy-datum.
SELECT-OPTIONS: s_bukrs FOR lv_bukrs.
SELECTION-SCREEN END OF BLOCK b1.

FIELD-SYMBOLS <lt_pay_data1>   TYPE ANY TABLE.
FIELD-SYMBOLS <lt_pay_data2>   TYPE ANY TABLE.
FIELD-SYMBOLS <lt_pay_data3>   TYPE ANY TABLE.
DATA lr_pay_data              TYPE REF TO data.

DATA: lv_gjahr  TYPE gjahr,
      lv_gjahr1 TYPE gjahr,
      lv_gjahr2 TYPE gjahr,
      lv_date1  TYPE sy-datum,
      lv_date2  TYPE sy-datum,
      lv_date3  TYPE sy-datum.

DATA : gr_layout      TYPE REF TO cl_salv_layout,
       gr_layout_key  TYPE salv_s_layout_key,
       ls_layout      TYPE salv_s_layout,
       lt_layout_info TYPE salv_t_layout_info.

DATA : gr_display TYPE REF TO cl_salv_display_settings,
       lv_title   TYPE lvc_title.
DATA : gr_sort    TYPE REF TO cl_salv_sorts.
DATA : gr_select  TYPE REF TO cl_salv_selections.
DATA : gr_aggr    TYPE REF TO cl_salv_aggregations.
DATA : gr_table TYPE REF TO cl_salv_table.
DATA: gr_coloumns TYPE REF TO cl_salv_columns_table,
      gr_column   TYPE REF TO cl_salv_column_table.
DATA : gr_functions TYPE REF TO cl_salv_functions_list.


lv_gjahr1 = p_date+0(4).
lv_gjahr2 = p_date+0(4) - 1.

CONCATENATE lv_gjahr1 '03' '31' INTO lv_date1.
CONCATENATE lv_gjahr2 '12' '31' INTO lv_date2.
CONCATENATE lv_gjahr2 '03' '31' INTO lv_date3.


cl_salv_bs_runtime_info=>set(
  EXPORTING display  = abap_false
            metadata = abap_false
            data     = abap_true ).

SUBMIT ragitt_alv01 WITH bukrs IN s_bukrs
                    WITH so_anlkl IN s_anlkl
                    WITH berdatum EQ lv_date1
                    WITH bereich1 EQ '01'
                    WITH srtvr EQ '0007'
                    WITH xeinzel EQ 'X'
                    WITH summb EQ ' '
                    WITH p_grid EQ 'X'
                    WITH pa_gitvs EQ 'DK01'
                    WITH pa_xgbaf EQ 'X'
                    EXPORTING LIST TO MEMORY AND RETURN.

TRY.
    cl_salv_bs_runtime_info=>get_data_ref(
      IMPORTING r_data = lr_pay_data ).
    ASSIGN lr_pay_data->* TO <lt_pay_data1>.
  CATCH cx_salv_bs_sc_runtime_info.
    MESSAGE 'Unable to retrieve ALV data' TYPE 'E'.
ENDTRY.

CLEAR lr_pay_data.
CALL METHOD cl_salv_bs_runtime_info=>clear_all.
cl_salv_bs_runtime_info=>set(
  EXPORTING display  = abap_false
            metadata = abap_false
            data     = abap_true ).

SUBMIT ragitt_alv01 WITH bukrs IN s_bukrs
                    WITH so_anlkl IN s_anlkl
                    WITH berdatum EQ lv_date2
                    WITH bereich1 EQ '01'
                    WITH srtvr EQ '0007'
                    WITH xeinzel EQ 'X'
                    WITH summb EQ ' '
                    WITH p_grid EQ 'X'
                    WITH pa_gitvs EQ 'DK01'
                    WITH pa_xgbaf EQ 'X'
                    EXPORTING LIST TO MEMORY AND RETURN.

TRY.
    cl_salv_bs_runtime_info=>get_data_ref(
      IMPORTING r_data = lr_pay_data ).
    ASSIGN lr_pay_data->* TO <lt_pay_data2>.
  CATCH cx_salv_bs_sc_runtime_info.
    MESSAGE 'Unable to retrieve ALV data' TYPE 'E'.
ENDTRY.

CLEAR lr_pay_data.
CALL METHOD cl_salv_bs_runtime_info=>clear_all.
cl_salv_bs_runtime_info=>set(
  EXPORTING display  = abap_false
            metadata = abap_false
            data     = abap_true ).

SUBMIT ragitt_alv01 WITH bukrs IN s_bukrs
                    WITH so_anlkl IN s_anlkl
                    WITH berdatum EQ lv_date3
                    WITH bereich1 EQ '01'
                    WITH srtvr EQ '0007'
                    WITH xeinzel EQ 'X'
                    WITH summb EQ ' '
                    WITH p_grid EQ 'X'
                    WITH pa_gitvs EQ 'DK01'
                    WITH pa_xgbaf EQ 'X'
                    EXPORTING LIST TO MEMORY AND RETURN.

TRY.
    cl_salv_bs_runtime_info=>get_data_ref(
      IMPORTING r_data = lr_pay_data ).
    ASSIGN lr_pay_data->* TO <lt_pay_data3>.
  CATCH cx_salv_bs_sc_runtime_info.
    MESSAGE 'Unable to retrieve ALV data' TYPE 'E'.
ENDTRY.
IF <lt_pay_data1> IS ASSIGNED.
  LOOP AT <lt_pay_data1> ASSIGNING FIELD-SYMBOL(<fs_data>).

    ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <fs_data> TO FIELD-SYMBOL(<field>).
    IF <field> IS ASSIGNED.
      fs_asset-bukrs = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLN1' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anln1 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLN2' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anln2 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLKL' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anlkl = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'TXT50' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-txt50 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'AKTIV' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-aktiv = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'WAERS' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-waers = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR1' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr1 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR2' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr2 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR3' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr3 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR4' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr4 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR5' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr5 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR6' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr6 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR7' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr7 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR8' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr8 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR9' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr9 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR10' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr10 = <field>.
      UNASSIGN <field>.
    ENDIF.

    APPEND fs_asset TO it_asset1.
    CLEAR fs_asset.
*  UNASSIGN <fs_data>.
  ENDLOOP.
ENDIF.
IF <lt_pay_data2> IS ASSIGNED.
  LOOP AT <lt_pay_data2> ASSIGNING <fs_data>.

    ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-bukrs = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLN1' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anln1 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLN2' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anln2 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLKL' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anlkl = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'TXT50' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-txt50 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'AKTIV' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-aktiv = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'WAERS' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-waers = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR1' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr1 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR2' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr2 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR3' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr3 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR4' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr4 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR5' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr5 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR6' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr6 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR7' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr7 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR8' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr8 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR9' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr9 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR10' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr10 = <field>.
      UNASSIGN <field>.
    ENDIF.

    APPEND fs_asset TO it_asset2.
    CLEAR fs_asset.
*  UNASSIGN <fs_data>.
  ENDLOOP.
ENDIF.
IF <lt_pay_data3> IS ASSIGNED.
  LOOP AT <lt_pay_data3> ASSIGNING <fs_data>.

    ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-bukrs = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLN1' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anln1 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLN2' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anln2 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'ANLKL' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-anlkl = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'TXT50' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-txt50 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'AKTIV' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-aktiv = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'WAERS' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-waers = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR1' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr1 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR2' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr2 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR3' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr3 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR4' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr4 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR5' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr5 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR6' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr6 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR7' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr7 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR8' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr8 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR9' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr9 = <field>.
      UNASSIGN <field>.
    ENDIF.
    ASSIGN COMPONENT 'BTR10' OF STRUCTURE <fs_data> TO <field>.
    IF <field> IS ASSIGNED.
      fs_asset-btr10 = <field>.
      UNASSIGN <field>.
    ENDIF.

    APPEND fs_asset TO it_asset3.
    CLEAR fs_asset.
*  UNASSIGN <fs_data>.
  ENDLOOP.
ENDIF.

LOOP AT it_asset1 INTO fs_asset.

  READ TABLE it_asset2 INTO fs_asset1 WITH KEY anln1 = fs_asset-anln1
                                               anln2 = fs_asset-anln2.
  IF sy-subrc EQ 0.
    fs_asset-btr1 = fs_asset-btr1 - fs_asset1-btr1.
    fs_asset-btr2 = fs_asset-btr2 - fs_asset1-btr2.
    fs_asset-btr3 = fs_asset-btr3 - fs_asset1-btr3.
    fs_asset-btr4 = fs_asset-btr4 - fs_asset1-btr4.
    fs_asset-btr5 = fs_asset-btr5 - fs_asset1-btr5.
    fs_asset-btr6 = fs_asset-btr6 - fs_asset1-btr6.
    fs_asset-btr7 = fs_asset-btr7 - fs_asset1-btr7.
    fs_asset-btr8 = fs_asset-btr8 - fs_asset1-btr8.
    fs_asset-btr9 = fs_asset-btr9 - fs_asset1-btr9.
    fs_asset-btr10 = fs_asset-btr10 - fs_asset1-btr10.
  ENDIF.
  APPEND fs_asset TO it_asset4.
  CLEAR: fs_asset,
         fs_asset1.
ENDLOOP.

LOOP AT it_asset2 INTO fs_asset.

  READ TABLE it_asset3 INTO fs_asset1 WITH KEY anln1 = fs_asset-anln1
                                               anln2 = fs_asset-anln2.
  IF sy-subrc EQ 0.
    fs_asset-btr1 = fs_asset-btr1 - fs_asset1-btr1.
    fs_asset-btr2 = fs_asset-btr2 - fs_asset1-btr2.
    fs_asset-btr3 = fs_asset-btr3 - fs_asset1-btr3.
    fs_asset-btr4 = fs_asset-btr4 - fs_asset1-btr4.
    fs_asset-btr5 = fs_asset-btr5 - fs_asset1-btr5.
    fs_asset-btr6 = fs_asset-btr6 - fs_asset1-btr6.
    fs_asset-btr7 = fs_asset-btr7 - fs_asset1-btr7.
    fs_asset-btr8 = fs_asset-btr8 - fs_asset1-btr8.
    fs_asset-btr9 = fs_asset-btr9 - fs_asset1-btr9.
    fs_asset-btr10 = fs_asset-btr10 - fs_asset1-btr10.
  ENDIF.
  APPEND fs_asset TO it_asset5.
  CLEAR: fs_asset,
         fs_asset1.
ENDLOOP.

LOOP AT it_asset4 INTO fs_asset.

  READ TABLE it_asset5 INTO fs_asset1 WITH KEY anln1 = fs_asset-anln1
                                               anln2 = fs_asset-anln2.
  IF sy-subrc EQ 0.
    fs_asset-btr1 = fs_asset-btr1 + fs_asset1-btr1.
    fs_asset-btr2 = fs_asset-btr2 + fs_asset1-btr2.
    fs_asset-btr3 = fs_asset-btr3 + fs_asset1-btr3.
    fs_asset-btr4 = fs_asset-btr4 + fs_asset1-btr4.
    fs_asset-btr5 = fs_asset-btr5 + fs_asset1-btr5.
    fs_asset-btr6 = fs_asset-btr6 + fs_asset1-btr6.
    fs_asset-btr7 = fs_asset-btr7 + fs_asset1-btr7.
    fs_asset-btr8 = fs_asset-btr8 + fs_asset1-btr8.
    fs_asset-btr9 = fs_asset-btr9 + fs_asset1-btr9.
    fs_asset-btr10 = fs_asset-btr10 + fs_asset1-btr10.
  ENDIF.
  APPEND fs_asset TO it_asset6.
  CLEAR: fs_asset,
         fs_asset1.
ENDLOOP.

CALL METHOD cl_salv_bs_runtime_info=>clear_all.

TRY.
    CALL METHOD cl_salv_table=>factory
      EXPORTING
        list_display = if_salv_c_bool_sap=>false
*       r_container  =
*       container_name =
      IMPORTING
        r_salv_table = gr_table
      CHANGING
        t_table      = it_asset6.
  CATCH cx_salv_msg .
ENDTRY.

CALL METHOD gr_table->get_columns
  RECEIVING
    value = gr_coloumns.

TRY.
    gr_column ?= gr_coloumns->get_column( 'INDEX' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S1' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S2' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S3' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S4' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S5' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S1_TEXT' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S2_TEXT' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S3_TEXT' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S4_TEXT' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'S5_TEXT' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'FLG_PICK_UP' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'RANGE' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'HLP_LEVEL' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'EXPAND' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'MANDT' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'ANLN0' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'GSBER' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE01' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE02' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE03' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE04' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE05' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE06' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE07' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE08' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE09' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'DSPACE10' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'KTANSW' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'KANSW' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'KUMAFA' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BUCHWERT' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'AFABE' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'KTANSW' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'ERGSO' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'XANLGR' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR11' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR12' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR13' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR14' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR15' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR16' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR17' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR18' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR19' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR20' ).
    gr_column->set_visible( if_salv_c_bool_sap=>false ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'ANLN1' ).
    gr_column->set_short_text( 'Asset' ).
    gr_column->set_medium_text( 'Asset').
    gr_column->set_long_text( 'Asset').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'ANLN2' ).
    gr_column->set_short_text( 'Sub.No' ).
    gr_column->set_medium_text( 'Asset Sub.No').
    gr_column->set_long_text( 'Asset Sub.No').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR1' ).
    gr_column->set_medium_text( 'APC Tot.Apr.1').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR2' ).
    gr_column->set_medium_text( 'Acquis.curr.yr' ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR3' ).
    gr_column->set_medium_text( 'Retmt.curr.yr' ).
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR4' ).
    gr_column->set_medium_text( 'APC Tot.Mar.31').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR5' ).
    gr_column->set_medium_text( 'Reval./wr-up').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR6' ).
    gr_column->set_medium_text( 'Dep.Apr.1').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR7' ).
    gr_column->set_medium_text( 'Dep.retir.').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR8' ).
    gr_column->set_medium_text( 'Dep.curr.yr').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR9' ).
    gr_column->set_medium_text( 'Dep.Mar31').
  CATCH cx_salv_not_found.
ENDTRY.
TRY.
    gr_column ?= gr_coloumns->get_column( 'BTR10' ).
    gr_column->set_medium_text( 'Bookval.Mar31').
  CATCH cx_salv_not_found.
ENDTRY.

gr_functions = gr_table->get_functions( ).
gr_functions->set_all( if_salv_c_bool_sap=>true ).

CLEAR : gr_layout, gr_layout_key.
MOVE sy-repid TO gr_layout_key-report.

gr_layout = gr_table->get_layout( ).
gr_layout->set_key( gr_layout_key ).
gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
gr_layout->set_default( if_salv_c_bool_sap=>true ).


CLEAR : gr_display.
MOVE 'Asset History Sheet Based on Posted Depreciation - 01 Local Area ' TO lv_title.
gr_display = gr_table->get_display_settings( ).
gr_display->set_striped_pattern( if_salv_c_bool_sap=>true ).
gr_display->set_list_header( lv_title ).


gr_aggr = gr_table->get_aggregations( ).
gr_sort = gr_table->get_sorts( ).
IF gr_sort IS NOT INITIAL.
  TRY.
      gr_sort->add_sort( columnname = 'ANLKL'
                         position = 1
                         sequence   = if_salv_c_sort=>sort_up
                         subtotal   = if_salv_c_bool_sap=>true
                         group      = if_salv_c_sort=>group_none
                         obligatory = if_salv_c_bool_sap=>false ).
    CATCH cx_salv_not_found .
    CATCH cx_salv_existing .
    CATCH cx_salv_data_error .
  ENDTRY.
ENDIF.
CALL METHOD gr_table->display.

Thursday 26 October 2017

How to Debug a Completed SAP Background Job?

How to Debug a Completed SAP Background Job?


It is easy to debug an error job to find out the cause of the error. To debug the background job, go to transaction code SM37 and display the jobs.

First we need to keep a break-point in the program, so that the control stops at the break-point when the debugger is switched on. To find the name of the program, select the job that we want to debug and press step in the application toolbar.



Display the program by using the Menu Goto –> Program.

Keep a break-point in the program and go back to Job overview screen.


Again select the job that we want to debug and enter JDBG in the command field and press enter.


Once JDBG is entered in the command field the debugger will get switched on. Now press F8 to reach the break-point in the program.


Now we can analyze the program for the cause of the error.

Monday 16 October 2017

BDC PROGRAM FOR FB75 TRANSACTION


*************************************************************************
* PROGRAM TITLE   : ZBDC_FB75
* MODULE          : FI
* PROGRAM TYPE    : BDC PROGRAM
* INPUT           : EXCEL FILE
* OUTPUT          : STANDARD TRANSACTION
* CREATED BY      : PRATIK PRAKASH KAMBLE
* CREATION DATE   : 14.10.2017
*-----------------------------------------------------------------------
* DESCRIPTION : FB75 TRANSACTION BDC PROGRAM
************************************************************************
* Modification history:
* ----------------------------------------------------------------------
* DATE |User ID |TS
* ----------------------------------------------------------------------
************************************************************************


REPORT ZFB75_TESTS NO STANDARD PAGE HEADING LINE-SIZE 255.

INCLUDE ZFB75_TOP.

INCLUDE ZFB75_FORMS.


START-OF-SELECTION.

  PERFORM UPLOAD_FILE.

  PERFORM CALL_BDC.


*&---------------------------------------------------------------------*
*&  Include           ZFB75_TOP
*&---------------------------------------------------------------------*


DATATEXT(4096TYPE OCCURS 0.

DATA:   BDCDATA          LIKE BDCDATA OCCURS WITH HEADER LINE.
DATA:   MESSTAB         TYPE STANDARD TABLE OF BDCMSGCOLL,
             GT_MESSTAB  TYPE STANDARD TABLE OF BDCMSGCOLL,
             GV_STRING     TYPE STRING,
             LV_CHAR          TYPE CHAR1250,
             LV_CHAR1        TYPE CHAR1250,
             LS_CTU             TYPE CTU_PARAMS.

FIELD-SYMBOLS <LS_MESSTAB> TYPE BDCMSGCOLL.           "FOR MESSAGE

*&---------------------------------------------------------------------*
*& DATA DECLARATION
*&---------------------------------------------------------------------*
TYPESBEGIN OF ST_MESSAGE,
        SR_NO     TYPE I,
        LV_MSGTYP TYPE STRING,
        LV_CRSTXT TYPE CHAR1250,
       END OF ST_MESSAGE.

TYPESBEGIN OF TY_FB70,
        SERIAL    TYPE I,
        ACCNT     TYPE INVFO-ACCNT,                  "Customer No.
        BLDAT(10TYPE C,                                       "Doc Date
        XBLNR     TYPE INVFO-XBLNR,                   "Reference
        WAERS     TYPE INVFO-WAERS,                 "Currency Key
        BUPLA     TYPE INVFO-BUPLA,                   "Business Place
        SECCO     TYPE INVFO-SECCO,                 "Section Code
        SGTXT     TYPE INVFO-SGTXT,                   "item text
        HKONT     TYPE ACGL_ITEM-HKONT,         "G/L Account
        WRBTR    TYPE ACGL_ITEM-WRBTR,         "Amount in Document Currency
        MWSKZ     TYPE ACGL_ITEM-MWSKZ,        "Sale Taxes
        SGTXT1    TYPE ACGL_ITEM-SGTXT,          "Item Text
        GSBER1    TYPE ACGL_ITEM-GSBER,         "Business Area
        PRCTR     TYPE ACGL_ITEM-PRCTR,           "Profit Center
        HSN_SAC   TYPE ACGL_ITEM-HSN_SAC,    "HSN or SAC Code
      END OF TY_FB70.


DATAIT_FB75 TYPE TABLE OF TY_FB70 WITH HEADER LINE,
           WA_FB75 TYPE TY_FB70.


DATAIT_FB75_0 TYPE TABLE OF TY_FB70 WITH HEADER LINE,
           WA_FB75_0 TYPE TY_FB70.

DATAIT_EXLOAD LIKE ALSMEX_TABLINE  OCCURS WITH HEADER LINE.

DATALV_TABIX TYPE SY-TABIX,
           LV_ERR   TYPE C.

DATAGT_MSG    TYPE TABLE OF ST_MESSAGE,
      GS_MSG    TYPE ST_MESSAGE,
      GT_FCAT   TYPE SLIS_T_FIELDCAT_ALV,
      GS_FCAT   TYPE SLIS_FIELDCAT_ALV,
      GS_LAYOUT TYPE SLIS_LAYOUT_ALV.

DATAWA_COUNT  TYPE N,
      WA_COUNT1 TYPE STRING,
      LV_TAX_AMOUNT TYPE DMBTR,
      TAX_AMOUNT TYPE DMBTR.

DATAGT_TAX1 TYPE STANDARD TABLE OF RTAX1U15,
      GS_TAX1 TYPE  RTAX1U15.

DATA  LS_CTU_PARAMS TYPE CTU_PARAMS.
      LS_CTU_PARAMS-DISMODE 'A'.
      LS_CTU_PARAMS-UPDMODE 'S'.
      LS_CTU_PARAMS-NOBINPT ' '.

*&---------------------------------------------------------------------*
* SELECTION SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREENBEGIN OF BLOCK B1 WITH FRAME.
PARAMETERSP_FILE TYPE RLGRAP-FILENAME.              "File path
PARAMETERSW_BEGIN TYPE OBLIGATORY,                "Excel sheet start row
            W_END   TYPE OBLIGATORY.                "Excel sheet end row
SELECTION-SCREENEND OF BLOCK B1.

*&---------------------------------------------------------------------*
* SELECTION SCREEN VALIDATION AND INPUT.
*&---------------------------------------------------------------------*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      PROGRAM_NAME  SYST-CPROG
      DYNPRO_NUMBER SYST-DYNNR
    IMPORTING
      FILE_NAME     P_FILE.


*&---------------------------------------------------------------------*
*&  Include           ZFB75_FORMS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_FILE
*&---------------------------------------------------------------------*
* CALL EXCEL SHEET FROM SELECTION SCREEN AND UPLOAD IN INTERNAL TABLE
*----------------------------------------------------------------------*


FORM UPLOAD_FILE.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                P_FILE
      I_BEGIN_COL             '0001'
      I_BEGIN_ROW             W_BEGIN
      I_END_COL               '0012'
      I_END_ROW               W_END
    TABLES
      INTERN                  IT_EXLOAD
    EXCEPTIONS
      INCONSISTENT_PARAMETERS 1
      UPLOAD_OLE              2
      OTHERS                  3.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  IF IT_EXLOAD IS NOT INITIAL.
    LOOP AT IT_EXLOAD.
      CASE IT_EXLOAD-COL.
        WHEN '0001'.
          IT_FB75-SERIAL    IT_EXLOAD-VALUE.
        WHEN '0002'.
          IT_FB75-ACCNT     IT_EXLOAD-VALUE.
        WHEN '0003'.
          IT_FB75-BLDAT     IT_EXLOAD-VALUE.
        WHEN '0004'.
          IT_FB75-XBLNR     IT_EXLOAD-VALUE.
        WHEN '0005'.
          IT_FB75-WAERS     IT_EXLOAD-VALUE.
        WHEN '0006'.
          IT_FB75-SGTXT     IT_EXLOAD-VALUE.
        WHEN '0007'.
          IT_FB75-HKONT     IT_EXLOAD-VALUE.
        WHEN '0008'.
          IT_FB75-WRBTR     IT_EXLOAD-VALUE.
        WHEN '0009'.
          IT_FB75-MWSKZ     IT_EXLOAD-VALUE.
        WHEN '0010'.
          IT_FB75-SGTXT1    IT_EXLOAD-VALUE.
        WHEN '0011'.
          IT_FB75-PRCTR     IT_EXLOAD-VALUE.
        WHEN '0012'.
          IT_FB75-HSN_SAC   IT_EXLOAD-VALUE.
      ENDCASE.

      AT END OF ROW.
        APPEND IT_FB75.
        CLEAR IT_FB75.
      ENDAT.
    ENDLOOP.

    IT_FB75_0[] IT_FB75[].
    SORT IT_FB75 BY ACCNT.
    DELETE ADJACENT DUPLICATES FROM IT_FB75 COMPARING ACCNT XBLNR.

  ENDIF.
ENDFORM.                    " UPLOAD_FILE
*&---------------------------------------------------------------------*
*&      Form  CALL_BDC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_BDC .

  LOOP AT IT_FB75 INTO WA_FB75.

    PERFORM BDC_DYNPRO      USING 'SAPMF05A'         '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '/00'.
    PERFORM BDC_FIELD       USING 'RF05A-BUSCS'       'G'.
    PERFORM BDC_FIELD       USING 'INVFO-ACCNT'       WA_FB75-ACCNT.
    PERFORM BDC_FIELD       USING 'INVFO-BLDAT'        WA_FB75-BLDAT.
    PERFORM BDC_FIELD       USING 'INVFO-XBLNR'        WA_FB75-XBLNR.
    PERFORM BDC_FIELD       USING 'INVFO-WAERS'       WA_FB75-WAERS.
    PERFORM BDC_FIELD       USING 'INVFO-BUPLA'        'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SECCO'       'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SGTXT'    WA_FB75-SGTXT.
    PERFORM BDC_FIELD   USING 'BDC_CURSOR'  'ACGL_ITEM-HSN_SAC(01)'.

    LOOP AT IT_FB75_0 INTO WA_FB75_0 WHERE ACCNT EQ WA_FB75-ACCNT
                                       AND XBLNR EQ WA_FB75-XBLNR.
      WA_COUNT WA_COUNT + 1.
      CONCATENATE 'ACGL_ITEM-HKONT' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1   WA_FB75_0-HKONT.
      CLEAR WA_COUNT1.

      CONCATENATE 'ACGL_ITEM-WRBTR' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1   WA_FB75_0-WRBTR.
      CLEAR WA_COUNT1.

      CONCATENATE 'ACGL_ITEM-MWSKZ' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1  WA_FB75_0-MWSKZ.
      CLEAR WA_COUNT1.

**** To Tax calculate
      IF WA_FB75_0-MWSKZ IS NOT INITIAL.
        TAX_AMOUNT TAX_AMOUNT + WA_FB75_0-WRBTR.
        CLEAR GT_TAX1.
        CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
          EXPORTING
            I_BUKRS '2012'
            I_MWSKZ WA_FB75_0-MWSKZ
            I_WAERS 'INR'
            I_WRBTR WA_FB75_0-WRBTR
          TABLES
            T_MWDAT GT_TAX1.
        LOOP AT GT_TAX1 INTO GS_TAX1.
          LV_TAX_AMOUNT LV_TAX_AMOUNT + GS_TAX1-WMWST.
        ENDLOOP.
      ENDIF.

      CONCATENATE 'ACGL_ITEM-SGTXT' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1   WA_FB75_0-SGTXT.
      CLEAR WA_COUNT1.

      CONCATENATE 'ACGL_ITEM-PRCTR' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1   WA_FB75_0-PRCTR.
      CLEAR WA_COUNT1.

      CONCATENATE 'ACGL_ITEM-HSN_SAC' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1 WA_FB75_0-HSN_SAC.
      CLEARWA_FB75_0WA_COUNT1.
    ENDLOOP.

    WA_FB75-WRBTR =  TAX_AMOUNT + LV_TAX_AMOUNT.

    PERFORM BDC_FIELD   USING 'BDC_CURSOR'   'ACGL_ITEM-HKONT(02)'.
    PERFORM BDC_DYNPRO      USING 'SAPMF05A'        '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=DUMMY'.
    PERFORM BDC_FIELD       USING 'RF05A-BUSCS'    'G'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'     'INVFO-XMWST'.
    PERFORM BDC_FIELD       USING 'INVFO-ACCNT'       WA_FB75-ACCNT.
    PERFORM BDC_FIELD       USING 'INVFO-XBLNR'      WA_FB75-XBLNR.
    PERFORM BDC_FIELD       USING 'INVFO-BUPLA'      'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SECCO'       'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SGTXT'      WA_FB75-SGTXT.
    PERFORM BDC_DYNPRO      USING 'SAPMF05A'        '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=BS'.
    PERFORM BDC_FIELD       USING 'RF05A-BUSCS'    'G'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'        'INVFO-WRBTR'.
    PERFORM BDC_FIELD       USING 'INVFO-ACCNT'       WA_FB75-ACCNT.
    PERFORM BDC_FIELD       USING 'INVFO-XBLNR'       WA_FB75-XBLNR.
    PERFORM BDC_FIELD       USING 'INVFO-WRBTR'     WA_FB75-WRBTR.
    PERFORM BDC_FIELD       USING 'INVFO-XMWST'       'X'.
    PERFORM BDC_FIELD       USING 'INVFO-BUPLA'     'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SECCO'      'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SGTXT'     WA_FB75-SGTXT.
    PERFORM BDC_DYNPRO      USING 'SAPMSSY0'         '0120'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=BU'.

    CALL TRANSACTION 'FB75' USING BDCDATA
                            MODE 'N'
                            UPDATE 'S'
                            MESSAGES INTO MESSTAB.

    LOOP AT MESSTAB ASSIGNING <LS_MESSTAB>.
      IF <LS_MESSTAB>-MSGTYP EQ 'E' OR <LS_MESSTAB>-MSGTYP EQ 'S' .
        GS_MSG-SR_NO WA_FB75-SERIAL.
        IF LV_ERR IS INITIAL.
          IF <LS_MESSTAB>-MSGTYP EQ 'S' AND <LS_MESSTAB>-MSGNR EQ '060'.
            GS_MSG-LV_MSGTYP 'Error'.
            LV_ERR 'X'.
          ELSEIF <LS_MESSTAB>-MSGTYP EQ 'E' .
            GS_MSG-LV_MSGTYP 'Error'.
            LV_ERR 'X'.
          ELSEIF <LS_MESSTAB>-MSGTYP EQ 'S'.
            GS_MSG-LV_MSGTYP 'Success'.
          ELSE.
            GS_MSG-LV_MSGTYP <LS_MESSTAB>-MSGTYP.
          ENDIF.
        ENDIF.

        CALL FUNCTION 'FORMAT_MESSAGE'
          EXPORTING
            ID        <LS_MESSTAB>-MSGID
            LANG      SY-LANGU
            NO        <LS_MESSTAB>-MSGNR
            V1        <LS_MESSTAB>-MSGV1
            V2        <LS_MESSTAB>-MSGV2
            V3        <LS_MESSTAB>-MSGV3
            V4        <LS_MESSTAB>-MSGV4
          IMPORTING
            MSG       LV_CHAR1
          EXCEPTIONS
            NOT_FOUND 1
            OTHERS    2.
        IF SY-SUBRC <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.

        DATA CHAR(1TYPE VALUE ' '.
        CONCATENATE GS_MSG-LV_CRSTXT LV_CHAR1 '/' INTO GS_MSG-LV_CRSTXT SEPARATED BY CHAR.
        CLEAR LV_CHAR1,CHAR.
        AT LAST .
          APPEND GS_MSG TO GT_MSG.
          CLEAR :GS_MSG.
        ENDAT.
      ENDIF.
    ENDLOOP.
    CLEARGS_MSG ,LS_CTU_PARAMS ,LV_TABIXLV_ERR,WA_FB75WA_COUNTTAX_AMOUNTLV_TAX_AMOUNT.
    REFRESHBDCDATA MESSTAB.
  ENDLOOP.

  DELETE GT_MSG WHERE LV_MSGTYP EQ 'W'.
  SORT GT_MSG  BY SR_NO.

*  PERFORM FCAT USING '1' 'SR_NO'     'Excel Row No' 'GT_MSG'  ' '.
  PERFORM FCAT USING '2' 'LV_MSGTYP' 'Message Type' 'GT_MSG'  ' '.
  PERFORM FCAT USING '5' 'LV_CRSTXT' 'Message'      'GET_MSG' ' '.

  GS_LAYOUT-ZEBRA             'X'.
  GS_LAYOUT-COLWIDTH_OPTIMIZE 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM SY-REPID
      IS_LAYOUT          GS_LAYOUT
      IT_FIELDCAT        GT_FCAT
    TABLES
      T_OUTTAB           GT_MSG
    EXCEPTIONS
      PROGRAM_ERROR      1
      OTHERS             2.
  IF SY-SUBRC <> 0.
  ENDIF.

ENDFORM.                    "CALL_BDC
"CALL_BDC

*&---------------------------------------------------------------------*
*&      Form  FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM FCAT USING P_COL
                P_FIELDNAME
                P_DESCRIPTION
                P_TABNAME
                P_KEY.
  GS_FCAT-COL_POS     P_COL.
  GS_FCAT-FIELDNAME   P_FIELDNAME.
  GS_FCAT-SELTEXT_L   P_DESCRIPTION.
  GS_FCAT-TABNAME     P_TABNAME.
  GS_FCAT-KEY         P_KEY.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.
ENDFORM.                    "fcat


*&---------------------------------------------------------------------*
*&      Form  bdc_dynpro
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO  USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  PROGRAM.
  BDCDATA-DYNPRO   DYNPRO.
  BDCDATA-DYNBEGIN 'X'.
  APPEND BDCDATA.

ENDFORM.                    " BDC_DYNPRO
*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*----------------------------------------------------------------------*
FORM BDC_FIELD  USING FNAM FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM FNAM.
  BDCDATA-FVAL FVAL.
  SHIFT BDCDATA-FVAL LEFT DELETING LEADING SPACE.
  APPEND BDCDATA.

ENDFORM.                    "bdc_field