0% found this document useful (0 votes)
158 views36 pages

ZSMCP (Module Pool Program: ZMD - Kiabi - Main) .

This document contains code for a SAP report called ZMM_RETAIL_ARTICLE_REPROCESS. The report allows users to create and list retail articles. It contains code to define data structures, assign objects to screen fields and containers, and process user selections and commands. Key functions include retrieving and displaying article header and item data in ALV grids, and calling transactions for related tasks like article creation.

Uploaded by

Rakesh Kathuria
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
158 views36 pages

ZSMCP (Module Pool Program: ZMD - Kiabi - Main) .

This document contains code for a SAP report called ZMM_RETAIL_ARTICLE_REPROCESS. The report allows users to create and list retail articles. It contains code to define data structures, assign objects to screen fields and containers, and process user selections and commands. Key functions include retrieving and displaying article header and item data in ALV grids, and calling transactions for related tasks like article creation.

Uploaded by

Rakesh Kathuria
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 36

===================================================================

ZSMCP (mODULE POOL PROGRAM : ZMD_KIABI_MAIN)

PROGRAM zmd_kiabi_main.

DATA: gc_logo_container  TYPE REF TO cl_gui_docking_container,
      gc_picture_control TYPE REF TO cl_gui_picture.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
*Begin of change by EX_PAYALS on 17.07.2019
  IF sy-tcode = 'ZSMCP'.
    SET PF-STATUS 'ZSMCP_PFSTAT'.
  ELSE.
*end of change by EX_PAYALS on 17.07.2019
    SET PF-STATUS 'ZKIABI_PFSTAT'.
  ENDIF.                      "Added by EX_PAYALS on 17.07.2019
  SET TITLEBAR 'ZKIABI_TITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  DISPLAY_IMAGE  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE display_image OUTPUT.
  DATA: lv_mime_url       TYPE string,
        lv_return_code    TYPE w3param-ret_code,
        lv_content_type   TYPE w3param-cont_type,
        lv_content_length TYPE w3param-cont_len, " Content Length
        lv_pic_size       TYPE i,                " Picture Size
        lv_url(256)       TYPE c.                " URL

  DATA: lo_mr_api TYPE REF TO if_mr_api.

  DATA: BEGIN OF graphic_table OCCURS 0,
          line(255) TYPE x,
        END OF graphic_table.

  DATA: graphic_size TYPE i.

  DATA: graphic_url(255).

  DATA: image     TYPE REF TO cl_gui_picture.

  DATA: l_graphic_xstr TYPE xstring,
        l_graphic_conv TYPE i,
        l_graphic_offs TYPE i.

*  IF sy-tcode = 'ZKIABI'.                         "Commneted by EX_PAYAL
S on 31.07.2019

  lv_content_type = 'Picture'.
*  IF gs_ztm_vend_fcn-zimage IS NOT INITIAL.
  IF gc_picture_control IS INITIAL.
    CREATE OBJECT gc_picture_control
      EXPORTING
        parent = gc_logo_container.
    IF sy-subrc IS INITIAL.
* No Check
    ENDIF.
    IF sy-tcode = 'ZKIABI'.                                               "Ad
ded by EX_PAYALS on 31.07.2019
      CALL METHOD gc_picture_control->set_position
        EXPORTING
          height = 900
          left   = 5
          top    = 0
          width  = 4000.
*Begin of change by EX_PAYALS on 31.07.2019
    ELSEIF sy-tcode = 'ZSMCP'.
      CALL METHOD gc_picture_control->set_position
        EXPORTING
          height = 2000
          left   = 300
          top    = 60
          width  = 4000.
    ENDIF.
*End of change by EX_PAYALS on 31.07.2019
    IF lv_url IS INITIAL.
* This Folder is transported to Production, Hence it is static
      IF sy-tcode = 'ZKIABI'.                                               "
Added by EX_PAYALS on 31.07.2019
        lv_mime_url = 'sap/public/kiabi/KIABI.gif'   .
*Begin of change by EX_PAYALS on 31.07.2019
      ELSEIF sy-tcode = 'ZSMCP'.
        lv_mime_url = 'sap/public/SMCP/SMCP_logo.jpg'   .
      ENDIF.
*End of change by EX_PAYALS on 31.07.2019
      IF lo_mr_api IS INITIAL.
        lo_mr_api = cl_mime_repository_api=>if_mr_api~get_api( ).
      ENDIF.

      CALL METHOD lo_mr_api->get
        EXPORTING
          i_url              = lv_mime_url
        IMPORTING
          e_content          = l_graphic_xstr
        EXCEPTIONS
          parameter_missing  = 1
          error_occured      = 2
          not_found          = 3
          permission_failure = 4
          OTHERS             = 5.

*        current will hold the image in a xstring var

      CLEAR graphic_url.

      graphic_size = xstrlen( l_graphic_xstr ).
      CHECK graphic_size > 0.

      l_graphic_conv = graphic_size.
      l_graphic_offs = 0.

      WHILE l_graphic_conv > 255.
        graphic_table-line = l_graphic_xstr+l_graphic_offs(255).
        APPEND graphic_table.
        l_graphic_offs = l_graphic_offs + 255.
        l_graphic_conv = l_graphic_conv - 255.
      ENDWHILE.

      graphic_table-line = l_graphic_xstr+l_graphic_offs(l_graphic_conv).
      APPEND graphic_table.

      CALL FUNCTION 'DP_CREATE_URL'
        EXPORTING
          type    = text-004
          subtype = cndp_sap_tab_unknown
        TABLES
          data    = graphic_table
        CHANGING
          url     = lv_url
        EXCEPTIONS
          OTHERS  = 1.
      IF sy-subrc IS INITIAL.
* No Check
      ENDIF.

    ENDIF.

    CALL METHOD gc_picture_control->load_picture_from_url
      EXPORTING
        url = lv_url.

  ENDIF.
*ENDIF.                                                              
     "Commented by EX_PAYALS on 31.07.2019

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  DATA : gd_view    LIKE dd02v-tabname,
         gt_sellist TYPE vimsellist OCCURS 1 WITH HEADER LINE.

  CASE sy-ucomm.

    WHEN 'BACK'.
      LEAVE PROGRAM.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'I_MC_MAIN'.
      CALL TRANSACTION 'ZMATKLRP'.
    WHEN 'I_SALE_ERP'.
      CALL TRANSACTION 'ZSALERP'.
    WHEN 'O_INV'.
      CALL TRANSACTION 'ZSTOCKOUT'.
    WHEN 'O_PPREQ'.
      CALL TRANSACTION 'ZPRICEREQ'.
    WHEN 'O_SRETURN'.
      CALL TRANSACTION 'ZSALERET'.
    WHEN 'O_SRETURNE'.                 "EX_SATENDRAS 20/02/2019
      CALL TRANSACTION 'ZSALERET_ECOM'."EX_SATENDRAS 20/02/2019
    WHEN 'O_LABEL'.
      CALL TRANSACTION 'ZKIALABEL'.
    WHEN 'I_ART_REP'.
      CALL TRANSACTION 'ZART_REP'.
    WHEN 'I_KIA_SHIP'.
      CALL TRANSACTION 'ZKIASHIP'.
    WHEN 'C_VEND'.
      CALL TRANSACTION 'ZRETAILMAP'.

  ENDCASE.
ENDMODULE.

SCREEN :100 (CONTAINS a container)

PROCESS BEFORE OUTPUT.
  MODULE status_0100.
    MODULE display_image.
*
PROCESS AFTER INPUT.
  MODULE user_command_0100.
tcode: ZART_REP Program : ZMM_RETAIL_ARTICLE_REPROCESS (executable)

*&---------------------------------------------------------------------*
*& Report  ZMM_RETAIL_ARTICLE_REPROCESS
************************************************************************
* Name:                   Sreejith                                    
 *
* Date:                   14-Dec-2017                                  
*
* Change Request & MIL No:                                             
*
* Transaction Code :      ZART_REP                                     
*
* Description:            Create and List Article                      *
*                                                                   
   *
************************************************************************
* Change Control Information                                           
*
************************************************************************
* CR & SpecNo | Date  | Name   | Description                           *
*             |       |        |                                     
  *
************************************************************************

REPORT  zmm_retail_article_reprocess NO STANDARD PAGE HEADING.

TABLES: t001.

TYPES: BEGIN OF ty_header,
         bukrs        TYPE bukrs,
         fshnid       TYPE zfshn,
         reference    TYPE zevendordref, "order reference ID char18
         artcrtstatus TYPE zartstatus, "article creation status char1
         filename     TYPE zfilename2, "file name char60
       END OF ty_header.

DATA: go_header_cont TYPE REF TO cl_gui_custom_container,
      go_header_grid TYPE REF TO cl_gui_alv_grid,
      go_item_cont   TYPE REF TO cl_gui_custom_container,
      go_item_grid   TYPE REF TO cl_gui_alv_grid,
      go_msg_cont    TYPE REF TO cl_gui_custom_container,
      go_msg_grid    TYPE REF TO cl_gui_alv_grid,
      gt_header      TYPE STANDARD TABLE OF ty_header,
      gt_header_all  TYPE STANDARD TABLE OF ztm_retail_stage,
      gt_item        TYPE STANDARD TABLE OF ztm_retail_stage,
      gt_item_fm     TYPE STANDARD TABLE OF ztm_retail_stage,
      gt_item_pim    TYPE STANDARD TABLE OF ztm_kiabi_pim,
      gs_item_pim    TYPE ztm_kiabi_pim,
      gs_item        TYPE ztm_retail_stage,
      gs_header      TYPE ty_header,
      gt_row_no      TYPE lvc_t_roid,
      gs_row_no      LIKE LINE OF gt_row_no,
      gs_layo        TYPE lvc_s_layo,
      gs_i_layo      TYPE lvc_s_layo,
      gt_fcat        TYPE lvc_t_fcat,
      gt_i_fcat      TYPE lvc_t_fcat,
      gs_fcat        TYPE lvc_s_fcat,
      gs_i_fcat      TYPE lvc_s_fcat,
      gv_ind         TYPE sy-index,
      gv_fg          TYPE c,
      gv_bg          TYPE c.

DATA : gt_error TYPE TABLE OF ztm_error_stage.

FIELD-SYMBOLS : <ft_header> TYPE STANDARD TABLE,
                <ft_item>   TYPE STANDARD TABLE.

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
SELECT-OPTIONS: s_bukrs FOR t001-bukrs NO-EXTENSION NO INTERVALS OBLIGATORY,
                s_date  FOR sy-datum.
PARAMETERS:     p_brand TYPE zprocess_type OBLIGATORY,
                p_amode AS CHECKBOX. "SOC by EX_SANDEEPK for CR00004122
SELECTION-SCREEN: END OF BLOCK b1.

AT SELECTION-SCREEN.
  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
    ID 'BUKRS' FIELD s_bukrs-low
    ID 'ACTVT' FIELD '03' .
  IF sy-subrc <> 0.

    MESSAGE text-t26 TYPE 'E'.
  ENDIF.

*----------------------------------------------------------------------*
*       CLASS lcl_eventreceiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_eventreceiver DEFINITION.
  PUBLIC SECTION.

    METHODS handle_double_click FOR EVENT double_click
            OF cl_gui_alv_grid IMPORTING e_row e_column.

    METHODS: handle_err_disp FOR EVENT user_command
           OF cl_gui_alv_grid  IMPORTING e_ucomm,
            handle_toolbar FOR EVENT toolbar
             OF cl_gui_alv_grid IMPORTING e_object e_interactive.

ENDCLASS.                    "LCL_EVENTRECEIVER DEFINITION
*----------------------------------------------------------------------*
*       CLASS LCL_EVENTRECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_eventreceiver IMPLEMENTATION.

  METHOD handle_double_click.
    gv_ind =  e_row-index.

    READ TABLE gt_header INTO gs_header INDEX gv_ind.
    IF sy-subrc = 0.

      REFRESH:gt_item.

      SELECT *
        FROM ztm_retail_stage
        INTO TABLE gt_item
         WHERE bukrs    = gs_header-bukrs
           AND fshnid   = gs_header-fshnid
           AND reference = gs_header-reference
           AND filename = gs_header-filename.

      IF gt_item IS NOT INITIAL.
        IF p_amode IS NOT INITIAL.
          DELETE gt_item WHERE amode <> 'M'.
        ENDIF.

        SELECT * FROM ztm_kiabi_pim INTO TABLE gt_item_pim
           FOR ALL ENTRIES IN gt_item WHERE
                  bukrs = gt_item-bukrs
              AND fshnid = gt_item-fshnid
              AND idnlf = gt_item-idnlf
              AND reference = gt_item-reference
              AND model = gt_item-model
              AND color = gt_item-color
              AND size1 = gt_item-size1.

        IF go_item_grid IS BOUND AND go_item_cont IS BOUND.
*         Free the objects for new selection
          CALL METHOD go_item_grid->free.
          CALL METHOD go_item_cont->free.
        ENDIF.

        CREATE OBJECT go_item_cont
          EXPORTING
            container_name = text-t03.

        CREATE OBJECT go_item_grid
          EXPORTING
            i_parent = go_item_cont.

        SELECT SINGLE * FROM ztm_art_rep_map INTO @DATA(ls_art_map) WHERE
                                                bukrs IN @s_bukrs.

        IF sy-subrc <> 0.

          PERFORM fildcat_item.
          PERFORM layout_item.
          PERFORM displayitem.
        ELSE.
          PERFORM create_custom_item.
        ENDIF.

      ELSEIF go_item_cont IS NOT INITIAL.
        CALL METHOD go_item_grid->refresh_table_display.
      ENDIF.
    ENDIF.

  ENDMETHOD.                    "HANDLE_DOUBLE_CLICK

  METHOD handle_err_disp.
    DATA lref_data TYPE REF TO data.
*   To handle user command
    CASE e_ucomm.
      WHEN 'REFR'.

        IF gt_header_all[] IS NOT INITIAL.
          DATA(lt_header) = gt_header_all[].
          SELECT  * FROM
              ztm_retail_stage
             INTO  TABLE gt_header_all
             FOR ALL ENTRIES IN lt_header

             WHERE bukrs =  lt_header-bukrs
              AND  fshnid = lt_header-fshnid
              AND  reference = lt_header-reference
              AND  crdat = lt_header-crdat.

          SORT gt_header_all BY bukrs fshnid reference filename.
          DELETE ADJACENT DUPLICATES FROM gt_header_all COMPARING bukrs fshnid 
reference filename.

          IF <ft_header> IS ASSIGNED.
            REFRESH <ft_header>.
            CREATE DATA lref_data LIKE LINE OF <ft_header>.
            ASSIGN lref_data->* TO FIELD-SYMBOL(<fs_header>).
            IF <fs_header> IS ASSIGNED.
              LOOP AT gt_header_all INTO DATA(ls_header_all).
                MOVE-CORRESPONDING ls_header_all TO <fs_header>.
                APPEND <fs_header> TO <ft_header>.
              ENDLOOP.
            ENDIF.
          ENDIF.
        ENDIF.

        CALL METHOD go_header_grid->refresh_table_display.
      WHEN 'ERROR'.

        CALL METHOD go_header_grid->get_selected_rows
          IMPORTING
            et_row_no = gt_row_no.

        READ TABLE gt_row_no INTO gs_row_no INDEX 1.
        IF sy-subrc = 0.
          READ TABLE gt_header INTO gs_header INDEX gs_row_no-row_id.
          IF sy-subrc = 0.
            CALL SCREEN '0300'.
          ENDIF.
        ENDIF.

    ENDCASE.

  ENDMETHOD.

  METHOD handle_toolbar.
* add push button to the alv tool bar
    DATA ls_toolbar TYPE stb_button.
    CLEAR ls_toolbar.
    ls_toolbar-text = 'Refresh'.
    ls_toolbar-icon = '@42@'.
    MOVE 'REFR' TO ls_toolbar-function.
    MOVE 'Refresh' TO ls_toolbar-quickinfo.
    MOVE ' ' TO ls_toolbar-disabled.
    APPEND ls_toolbar TO e_object->mt_toolbar.
    ls_toolbar-text = 'Display Error'.
    ls_toolbar-icon = '@0A@'.
    MOVE 'ERROR' TO ls_toolbar-function.
    MOVE 'Display Error' TO ls_toolbar-quickinfo.
    MOVE ' ' TO ls_toolbar-disabled.
    APPEND ls_toolbar TO e_object->mt_toolbar.
  ENDMETHOD.                    "handle_toolbar

ENDCLASS.                    "LCL_EVENTRECEIVER IMPLEMENTATION

START-OF-SELECTION.

  DATA: gx_object TYPE REF TO lcl_eventreceiver.

* Call Screen 100
  CALL SCREEN 100.

  INCLUDE zmm_retail_article_reprocesi01.

==========================================================
*----------------------------------------------------------------------*
***INCLUDE ZMM_RETAIL_ARTICLE_REPROCESI01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.

  DATA lv_lines TYPE i.
  CASE sy-ucomm.

    WHEN 'REPROCESS'.

      IF gv_bg IS NOT INITIAL.
        PERFORM article_processing_bg.
        LEAVE TO SCREEN 0.
      ELSEIF gv_fg IS NOT INITIAL.
        PERFORM article_processing.
        LEAVE TO SCREEN 0.
      ENDIF.

    WHEN OTHERS.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  ARTICLE_PROCESSING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM article_processing .
  DATA: lt_return    TYPE bapiret2_tt,
        ls_return    TYPE bapiret2,
        ls_error     TYPE ztm_error_stage,
        ls_header    TYPE ztm_retail_stage,
        lv_error     TYPE char1,
        lv_reference TYPE zevendordref.

  DATA : lref_data TYPE REF TO data.

  FIELD-SYMBOLS : <fs_header> TYPE ztm_retail_stage.
  CLEAR lv_error.

  IF p_amode IS NOT INITIAL.
    lv_reference =  |{ gs_header-reference }| && |_M|.
  ELSE.
    lv_reference = gs_header-reference.
  ENDIF.
  DELETE FROM ztm_error_stage WHERE bukrs = gs_header-bukrs
                           AND reference = lv_reference.

  PERFORM remap_article_char CHANGING lv_error.

  CHECK gt_item_fm IS NOT INITIAL
   AND lv_error IS INITIAL.
* Create articles
  CALL FUNCTION 'ZMM_RETAIL_ARTICLE_CREATE'
    EXPORTING
      i_process_type = p_brand
    IMPORTING
      et_return      = lt_return
      ev_error       = lv_error
    TABLES
      t_art_data     = gt_item_fm
    EXCEPTIONS
      no_data        = 1
      OTHERS         = 2.

  READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
  IF sy-subrc = 0.
    LOOP AT lt_return INTO ls_return WHERE type = 'E'.
      MOVE-CORRESPONDING ls_return TO ls_error.
      ls_error-bukrs = gs_header-bukrs.
      ls_error-reference = lv_reference.
      ls_error-process = p_brand.
      ls_error-msgno = ls_return-number.
      APPEND ls_error TO gt_error.
    ENDLOOP.

    IF gt_error IS NOT INITIAL.
      DELETE FROM ztm_error_stage WHERE reference = lv_reference.
      COMMIT WORK.
      MODIFY ztm_error_stage FROM TABLE gt_error.
      COMMIT WORK.
    ENDIF.

    READ TABLE gt_header_all ASSIGNING <fs_header> WITH KEY bukrs = gs_header-
bukrs
                                                       reference = gs_header-
reference
                                                       filename = gs_header-
filename.
    IF <fs_header> IS ASSIGNED.
      <fs_header>-artcrtstatus = 'E'.
    ENDIF.

  ELSE.
    READ TABLE gt_header_all ASSIGNING <fs_header> WITH KEY bukrs = gs_header-
bukrs
                                                       reference = gs_header-
reference
                                                       filename = gs_header-
filename.
    IF <fs_header> IS ASSIGNED.
      <fs_header>-artcrtstatus = 'S'.
    ENDIF.
    DELETE FROM ztm_error_stage WHERE reference = lv_reference.
  ENDIF.

  MODIFY ztm_retail_stage FROM TABLE gt_item_fm.
  COMMIT WORK.

  IF <ft_header> IS ASSIGNED.
    REFRESH <ft_header>.
    CREATE DATA lref_data LIKE LINE OF <ft_header>.
    ASSIGN lref_data->* TO FIELD-SYMBOL(<fs_head_new>).
    IF <fs_head_new> IS ASSIGNED.
      LOOP AT gt_header_all INTO ls_header .
        MOVE-CORRESPONDING ls_header TO <fs_head_new>.
        APPEND <fs_head_new> TO <ft_header>.
      ENDLOOP.
    ENDIF.
  ELSE.
    READ TABLE gt_header ASSIGNING FIELD-SYMBOL(<fs_head>) WITH KEY bukrs = gs
_header-bukrs
                                                         reference = gs_header
-reference
                                                         filename = gs_header-
filename.
    IF sy-subrc = 0.
      READ TABLE gt_header_all INTO ls_header WITH KEY bukrs = gs_header-bukrs
                                                         reference = gs_header
-reference
                                                         filename = gs_header-
filename.
      IF sy-subrc = 0.
        <fs_head>-artcrtstatus = ls_header-artcrtstatus.
      ENDIF.
    ENDIF.
  ENDIF.

  IF <ft_item> IS ASSIGNED.
    REFRESH <ft_item>.
    CLEAR lref_data.
    CREATE DATA lref_data LIKE LINE OF <ft_item>.
    ASSIGN lref_data->* TO FIELD-SYMBOL(<fs_item>).
    IF <fs_item> IS ASSIGNED.
      LOOP AT gt_item INTO DATA(ls_item) WHERE bukrs = gs_header-bukrs
                                     AND    reference = gs_header-reference
                                      AND filename = gs_header-filename.

        READ TABLE gt_item_fm INTO DATA(ls_item_new) WITH KEY bukrs = gs_heade
r-bukrs
                                        reference = gs_header-reference
                                        filename = gs_header-filename
                                        itemno = ls_item-itemno.
        IF sy-subrc = 0.
          MOVE-CORRESPONDING ls_item_new TO <fs_item>.
        ELSE.
          MOVE-CORRESPONDING ls_item TO <fs_item>.
        ENDIF.
        APPEND <fs_item> TO <ft_item>.
      ENDLOOP.
    ENDIF.
  ENDIF.

  CALL METHOD go_header_grid->refresh_table_display.
  CALL METHOD go_item_grid->refresh_table_display.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.

  SET PF-STATUS 'ZPFS'.
  SET TITLEBAR 'ZTIT'.

  IF s_bukrs IS NOT INITIAL.

    IF go_header_grid IS NOT BOUND.
      CREATE OBJECT go_header_cont
        EXPORTING
          container_name = text-t02.

      CREATE OBJECT go_header_grid
        EXPORTING
          i_parent = go_header_cont.

      PERFORM get_data.

      IF gt_header[] IS NOT INITIAL.

        PERFORM layout_header.
        SELECT SINGLE * FROM ztm_art_rep_map INTO @DATA(ls_art_map) WHERE
                                                  bukrs IN @s_bukrs.

        IF sy-subrc <> 0.
          PERFORM fildcat_header.
          PERFORM displayheader.
        ELSE.
          PERFORM create_custom_header.
        ENDIF.
        PERFORM double_click.
        PERFORM get_change_data.

      ENDIF.
    ENDIF.
  ENDIF.

ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  CASE sy-ucomm.

    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      CALL METHOD go_header_grid->free.
      CALL METHOD go_header_cont->free.
      LEAVE TO SCREEN 0.

    WHEN 'REPROCESS'.
      PERFORM reprocessing.
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data.

  DATA: lt_header     TYPE TABLE OF ztm_retail_stage,
        ls_header     TYPE ztm_retail_stage,
        gs_header_all TYPE ztm_retail_stage.

  REFRESH: gt_header,lt_header,gt_header_all.

  IF p_amode IS NOT INITIAL.
    SELECT  *  "bukrs fshnid reference artcrtstatus filename
         FROM  ztm_retail_stage
         INTO  TABLE gt_header_all
         WHERE bukrs IN s_bukrs
          AND  fshnid = p_brand(3)
          AND  crdat IN s_date
          AND  amode EQ 'M'.
  ELSE.
    SELECT  *  "bukrs fshnid reference artcrtstatus filename
      FROM  ztm_retail_stage
      INTO  TABLE gt_header_all
      WHERE bukrs IN s_bukrs
       AND  fshnid = p_brand(3)
       AND  crdat IN s_date.
  ENDIF.

  lt_header[] = gt_header_all[].
  SORT gt_header_all BY bukrs fshnid reference filename.
  DELETE ADJACENT DUPLICATES FROM gt_header_all COMPARING bukrs fshnid referen
ce filename.

  LOOP AT gt_header_all ASSIGNING FIELD-SYMBOL(<fs_header>).
    READ TABLE lt_header INTO ls_header WITH KEY bukrs = <fs_header>-bukrs
                                                 fshnid = <fs_header>-fshnid
                                                 reference = <fs_header>-
reference
                                                 filename = <fs_header>-
filename
                                                 artcrtstatus = 'E'.

    IF sy-subrc = 0.
      <fs_header>-artcrtstatus = 'E'.
    ELSE.
      READ TABLE lt_header INTO ls_header WITH KEY bukrs = <fs_header>-bukrs
                                                      fshnid = <fs_header>-
fshnid
                                                      reference = <fs_header>-
reference
                                                      filename = <fs_header>-
filename
                                                      artcrtstatus = 'N'.
      IF sy-subrc EQ 0.
        <fs_header>-artcrtstatus = 'N'.
      ELSE.
        <fs_header>-artcrtstatus = 'S'.
      ENDIF.
    ENDIF.
    MOVE-CORRESPONDING <fs_header> TO gs_header.
    APPEND gs_header TO gt_header.
  ENDLOOP.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FILDCAT_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fildcat_item.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name = text-t04
    CHANGING
      ct_fieldcat      = gt_i_fcat[].

ENDFORM.                    " FILDCAT_HEADER
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM layout_header.

  CLEAR:gs_layo.
  gs_layo-sel_mode    = 'D'.
  gs_layo-zebra      = 'X'.
  gs_layo-col_opt    = 'X'.
  gs_layo-grid_title = text-t05.

ENDFORM.                    " LAYOUT_HEADER
*&---------------------------------------------------------------------*
*&      Form  DISPLAYHEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM displayheader.

  CALL METHOD go_header_grid->set_table_for_first_display
    EXPORTING
      is_layout       = gs_layo
    CHANGING
      it_outtab       = gt_header[]
      it_fieldcatalog = gt_fcat[].

ENDFORM.                    " DISPLAYHEADER
*&---------------------------------------------------------------------*
*&      Form  DOUBLE_CLICK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM double_click.

  CREATE OBJECT gx_object.
  SET HANDLER gx_object->handle_double_click FOR go_header_grid.
  SET HANDLER gx_object->handle_toolbar FOR go_header_grid.
  SET HANDLER gx_object->handle_err_disp FOR go_header_grid.

  CALL METHOD go_header_grid->set_toolbar_interactive.

ENDFORM.                    " DOUBLE_CLICK
*&---------------------------------------------------------------------*
*&      Form  GET_CHANGE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_change_data.
*
*  SET HANDLER gx_object->handle_data_changed FOR go_header_grid.
*  CALL METHOD go_header_grid->register_edit_event
*    EXPORTING
*      i_event_id = cl_gui_alv_grid=>mc_evt_enter.

ENDFORM.                    " GET_CHANGE_DATA
*&---------------------------------------------------------------------*
*&      Form  REPROCESSING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM reprocessing.

  CALL METHOD go_header_grid->get_selected_rows
    IMPORTING
      et_row_no = gt_row_no.

  REFRESH gt_item_fm.
  IF gt_row_no[] IS INITIAL.
    MESSAGE e398(00) WITH text-m02. "'Please select one line from Header tab
le to Re-Process'.
  ELSE.
    IF gt_item[] IS NOT INITIAL.
      CALL SCREEN '0200' STARTING AT '20' '10'.
*      PERFORM reprocess_mod_data.
    ELSE.
      MESSAGE e398(00) WITH text-m01." 'There is no Item data to reprocess,p
lease double click on the Header line'.
    ENDIF.
  ENDIF.

ENDFORM.                    " REPROCESSING

*&---------------------------------------------------------------------*
*&      Form  DISPLAYITEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM displayitem.

  CALL METHOD go_item_grid->set_table_for_first_display
    EXPORTING
      is_layout       = gs_i_layo
    CHANGING
      it_outtab       = gt_item[]
      it_fieldcatalog = gt_i_fcat[].

ENDFORM.                    " DISPLAYITEM
*&---------------------------------------------------------------------*
*&      Form  LAYOUT_ITEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM layout_item.

  CLEAR: gs_i_layo.
  gs_i_layo-zebra       = 'X'.
  gs_i_layo-col_opt     = 'X'.
  gs_i_layo-grid_title  = text-t06.

ENDFORM.                    " LAYOUT_ITEM
*&---------------------------------------------------------------------*
*&      Form  FILDCAT_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fildcat_header.

  gs_fcat-fieldname  = 'BUKRS'.
  gs_fcat-tabname    = 'GT_HEADER'.
  gs_fcat-outputlen  =  10.
  gs_fcat-key        = 'X'.
  gs_fcat-reptext    = text-t07." 'Company Code'.
  APPEND gs_fcat TO gt_fcat.

  gs_fcat-fieldname  = 'FSHNID'.
  gs_fcat-tabname    = 'GT_HEADER'.
  gs_fcat-outputlen  =  10.
  gs_fcat-key        = 'X'.
  gs_fcat-reptext    = text-t08. "'Brand ID'.
  APPEND gs_fcat TO gt_fcat.

  gs_fcat-fieldname  = 'ARTCRTSTATUS'.
  gs_fcat-tabname    = 'GT_HEADER'.
  gs_fcat-outputlen  =  3.
  gs_fcat-reptext    = text-t09. "'Article Creation Status'.
  APPEND gs_fcat TO gt_fcat.

  gs_fcat-fieldname  = 'FILENAME'.
  gs_fcat-tabname    = 'GT_HEADER'.
  gs_fcat-outputlen  =  60.
  gs_fcat-reptext    = text-t10. "'Filename from PI'.
  APPEND gs_fcat TO gt_fcat.
ENDFORM.                    " FILDCAT_HEADER
*&---------------------------------------------------------------------*
*&      Module  STATUS_0300  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0300 OUTPUT.

  TYPES :  BEGIN OF ty_error,
             bukrs   TYPE bukrs,
             fshnid  TYPE char3,
             type    TYPE bapi_mtype,
             message TYPE bapi_msg,
           END OF ty_error.

  DATA: ls_m_layo    TYPE lvc_s_layo,
        lt_disperror TYPE TABLE OF ty_error,
        ls_disperror TYPE ty_error,
        lv_reference TYPE zevendordref.

  SET PF-STATUS space.

  IF go_msg_cont IS INITIAL.
    CREATE OBJECT go_msg_cont
      EXPORTING
        container_name = 'ERROR_CONT'.
    CREATE OBJECT go_msg_grid
      EXPORTING
        i_parent = go_msg_cont.
  ENDIF.

  REFRESH lt_disperror.

  CALL METHOD go_header_grid->get_selected_rows
    IMPORTING
      et_row_no = gt_row_no.
  READ TABLE gt_row_no INTO gs_row_no INDEX 1.
  IF sy-subrc = 0.
    CLEAR gs_header.
    READ TABLE gt_header INTO gs_header INDEX gs_row_no-row_id.
    IF sy-subrc = 0 .
      IF p_amode IS NOT INITIAL.
        lv_reference = |{ gs_header-reference }| && |_M|.
      ELSE.
        lv_reference = gs_header-reference.
      ENDIF.
      SELECT * FROM ztm_error_stage INTO TABLE gt_error
                  WHERE  bukrs = gs_header-bukrs
                      AND reference = lv_reference "gs_header-reference
                      AND process = p_brand.
      IF sy-subrc = 0.
        LOOP AT gt_error INTO DATA(ls_error).
          MOVE-CORRESPONDING ls_error TO ls_disperror.
          ls_disperror-fshnid = gs_header-fshnid.
          ls_disperror-type = 'E'.
          IF ls_error-id = '00'.
            ls_error-message_v2 = ls_error-message.
          ENDIF.
          CALL FUNCTION 'BAPI_MESSAGE_GETDETAIL'
            EXPORTING
              id         = ls_error-id
              number     = ls_error-msgno
              language   = sy-langu
              textformat = 'TXT'
              message_v1 = ls_error-message_v1
              message_v2 = ls_error-message_v2
              message_v3 = ls_error-message_v3
              message_v4 = ls_error-message_v4
            IMPORTING
              message    = ls_disperror-message.

          APPEND ls_disperror TO lt_disperror.
        ENDLOOP.
      ENDIF.
    ENDIF.
  ENDIF.

  REFRESH gt_fcat.
  gs_fcat-fieldname  = 'BUKRS'.
  gs_fcat-tabname    = 'LT_DISPERROR'.
  gs_fcat-outputlen  =  10.
  gs_fcat-key        = 'X'.
  gs_fcat-reptext    = text-t07." 'Company Code'.
  APPEND gs_fcat TO gt_fcat.

  gs_fcat-fieldname  = 'FSHNID'.
  gs_fcat-tabname    = 'LT_DISPERROR'.
  gs_fcat-outputlen  =  10.
  gs_fcat-key        = 'X'.
  gs_fcat-reptext    = text-t08. "'Brand ID'.
  APPEND gs_fcat TO gt_fcat.

  gs_fcat-fieldname  = 'TYPE'.
  gs_fcat-tabname    = 'LT_DISPERROR'.
  gs_fcat-outputlen  =  1.
  gs_fcat-reptext    = text-t12. "'Article Creation Status'.
  APPEND gs_fcat TO gt_fcat.

  gs_fcat-fieldname  = 'MESSAGE'.
  gs_fcat-tabname    = 'LT_DISPERROR'.
  gs_fcat-outputlen  =  60.
  gs_fcat-reptext    = text-t13. "'Filename from PI'.
  APPEND gs_fcat TO gt_fcat.

* Calling the method to display the O/P
  CALL METHOD go_msg_grid->set_table_for_first_display
    EXPORTING
      is_layout       = ls_m_layo
    CHANGING
      it_outtab       = lt_disperror[]
      it_fieldcatalog = gt_fcat[].
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  ARTICLE_PROCESSING_BG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM article_processing_bg .
  DATA: lv_job_name         LIKE tbtco-jobname,
        lv_job_nr           LIKE tbtco-jobcount,
        lv_job_released     TYPE c,
        lv_immediate        TYPE btcchar1,
        lv_job_start_sofort TYPE c,
        lv_bukrs            TYPE bukrs,
        lv_error            TYPE c,
        lv_reference        TYPE zevendordref,
        lv_print_parameters TYPE pri_params.

  CONSTANTS : lc_prgrp TYPE zmi_prgrp VALUE 'RETAIL_ART',
              lc_param TYPE zmi_param VALUE 'JOB_IMMEDIATE'.

  CALL METHOD go_header_grid->get_selected_rows
    IMPORTING
      et_row_no = gt_row_no.

  READ TABLE gt_row_no INTO gs_row_no INDEX 1.
  IF sy-subrc = 0.
    READ TABLE gt_header INTO gs_header INDEX gs_row_no-row_id.
  ENDIF.
  IF gs_header IS NOT INITIAL.
    IF p_amode IS NOT INITIAL.
      lv_reference = |{ gs_header-reference }| && |_M|.
    ELSE.
      lv_reference =   gs_header-reference.
    ENDIF.
    DELETE FROM ztm_error_stage WHERE bukrs = gs_header-bukrs
                             AND reference = lv_reference.

    PERFORM remap_article_char CHANGING lv_error.
    IF lv_error IS INITIAL.
      lv_job_name = |ARTICLE| && |{ gs_header-reference }| && |{ sy-datum }|.

      SELECT SINGLE parav FROM zmi_parm INTO lv_immediate WHERE
                            prgrp = lc_prgrp
                        AND prrid = gs_header-bukrs
                        AND param = lc_param.

      CALL FUNCTION 'JOB_OPEN'
        EXPORTING
          jobname          = lv_job_name
        IMPORTING
          jobcount         = lv_job_nr
        EXCEPTIONS
          cant_create_job  = 1
          invalid_job_data = 2
          jobname_missing  = 3
          OTHERS           = 4.
      IF syst-subrc = 0.
        lv_bukrs = s_bukrs-low.
*submit job with all the selection screen params...
        SUBMIT zmm_retail_article_cr_bg
          WITH p_bukrs =  lv_bukrs
          WITH p_fshnid =  gs_header-fshnid
          WITH p_file = gs_header-filename
          WITH p_ref = gs_header-reference
          WITH p_proc = p_brand
          WITH p_amode = p_amode "SOC by EX_SANDEEPK
          USER sy-uname          " mandatory
          VIA JOB lv_job_name NUMBER lv_job_nr AND RETURN.

        IF sy-subrc = 0.
          CALL FUNCTION 'JOB_CLOSE'
            EXPORTING
              jobcount             = lv_job_nr
              jobname              = lv_job_name
              strtimmed            = lv_immediate "'X'
            IMPORTING
              job_was_released     = lv_job_released
            EXCEPTIONS
              cant_start_immediate = 1
              invalid_startdate    = 2
              jobname_missing      = 3
              job_close_failed     = 4
              job_nosteps          = 5
              job_notex            = 6
              lock_failed          = 7
              OTHERS               = 8.

          IF syst-subrc <> 0.
            MESSAGE text-t15 TYPE 'E'.
          ELSE.
            DATA(lv_message) = |{ text-t16 }| && |{ lv_job_name }|.
            MESSAGE lv_message TYPE 'I'.
          ENDIF.
        ELSE.
          MESSAGE text-t14 TYPE 'E'.
        ENDIF.
      ELSE.
        MESSAGE text-t14 TYPE 'E'.
      ENDIF.
    ELSE.
      MESSAGE text-t23 TYPE 'E'.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0300  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0300 INPUT.

  CASE sy-ucomm.
    WHEN 'BACK' OR 'RW' OR '%EX'.
      LEAVE TO SCREEN 0.
  ENDCASE.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  REMAP_ARTICLE_CHAR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM remap_article_char CHANGING pv_error.

  TYPES : BEGIN OF ty_mc,
            bukrs  TYPE bukrs,
            lifnr  TYPE lifnr,
            afgcmc TYPE matkl,
            zlegmc TYPE zlegmc,
          END OF ty_mc,
          BEGIN OF ty_color,
            bukrs TYPE bukrs,
            lifnr TYPE lifnr,
            zcafg TYPE zcafg,
            zcdec TYPE zcdec,
          END OF ty_color,
          BEGIN OF ty_size,
            bukrs TYPE bukrs,
            lifnr TYPE lifnr,
            zsafg TYPE zsafg,
            zscod TYPE zscod,
          END OF ty_size,
          BEGIN OF ty_hscode,
            bukrs        TYPE bukrs,
            lifnr        TYPE lifnr,
            source_wstaw TYPE zwstaw,
            destn_wsta   TYPE zwstaw,
          END OF ty_hscode,
          BEGIN OF ty_co,
            bukrs TYPE bukrs,
            lifnr TYPE lifnr,
            zerkl TYPE herkl,
            zcooc TYPE zcooc,
          END OF ty_co.

  DATA : lt_ret_stage   TYPE TABLE OF ztm_retail_stage,
         lt_mc_map      TYPE TABLE OF ty_mc,
         lt_size_map    TYPE TABLE OF ty_size,
         lt_season_map  TYPE TABLE OF ztm_season_map,
         lt_item_delete TYPE TABLE OF ztm_retail_stage,
         lt_hscode_map  TYPE TABLE OF ty_hscode,
         lt_vend_fcn    TYPE TABLE OF ztm_vend_fcn,
         lt_error       TYPE TABLE OF ztm_error_stage,
         lt_co_map      TYPE TABLE OF ty_co,
         ls_vend_fcn    TYPE ztm_vend_fcn,
         ls_error       TYPE ztm_error_stage,
         ls_item_delete TYPE ztm_retail_stage,
         lt_color_map   TYPE TABLE OF ty_color.

  DATA : lv_seqno TYPE numc4.

  REFRESH : lt_item_delete.

  READ TABLE gt_row_no INTO gs_row_no INDEX 1.
  IF sy-subrc = 0.
    READ TABLE gt_header INTO gs_header  INDEX  gs_row_no-row_id.
    IF sy-subrc = 0.
      IF gs_header-artcrtstatus = 'S'.
        MESSAGE text-t24 TYPE 'I'.
        RETURN.
      ENDIF.
      REFRESH gt_item.

      IF p_amode IS INITIAL.
        SELECT *
           FROM ztm_retail_stage
           INTO TABLE gt_item
            WHERE bukrs    = gs_header-bukrs
              AND fshnid   = gs_header-fshnid
              AND reference = gs_header-reference
              AND filename = gs_header-filename.
      ELSE.
        SELECT *
            FROM ztm_retail_stage
            INTO TABLE gt_item
             WHERE bukrs    = gs_header-bukrs
               AND fshnid   = gs_header-fshnid
               AND reference = gs_header-reference
               AND filename = gs_header-filename
               AND amode = 'M'.
      ENDIF.

      IF sy-subrc = 0.
        gt_item_fm[] = gt_item[].
        DELETE gt_item_fm WHERE artcrtstatus = 'S'.
        lt_ret_stage[] = gt_item_fm[].
        SORT lt_ret_stage BY bukrs lifnr.
        DELETE ADJACENT DUPLICATES FROM lt_ret_stage COMPARING bukrs lifnr.
        IF lt_ret_stage[] IS NOT INITIAL.
          SELECT * FROM ztm_vend_fcn INTO TABLE lt_vend_fcn
                              FOR ALL ENTRIES IN lt_ret_stage
                                        WHERE zbukrs = lt_ret_stage-bukrs
                                          AND lifnr = lt_ret_stage-lifnr
                                          AND proctyp = p_brand.
        ENDIF.
        LOOP AT lt_vend_fcn INTO ls_vend_fcn.
          IF ls_vend_fcn-mcmap  = 'X'.
            SELECT bukrs lifnr afgcmc zlegmc
               APPENDING TABLE lt_mc_map
                FROM ztm_mc_map
                FOR ALL ENTRIES IN lt_ret_stage
                WHERE bukrs  = lt_ret_stage-bukrs
                  AND lifnr  = lt_ret_stage-lifnr
                  AND zcatg  = 'MCCAT'.
          ENDIF.
*   Color Mapping
          IF ls_vend_fcn-colrmap = 'X'.
            SELECT bukrs lifnr zcafg zcdec
              APPENDING TABLE lt_color_map   FROM  ztm_color_map
              FOR ALL ENTRIES IN lt_ret_stage
             WHERE bukrs = lt_ret_stage-bukrs
               AND lifnr = lt_ret_stage-lifnr.
          ENDIF.

*   Size Mapping
          IF ls_vend_fcn-sizemap = 'X'.
            SELECT bukrs lifnr zsafg zscod
             APPENDING TABLE lt_size_map
              FROM ztm_size_map
              FOR ALL ENTRIES IN lt_ret_stage
              WHERE bukrs = lt_ret_stage-bukrs
                AND lifnr = lt_ret_stage-lifnr.
          ENDIF.

*   Season Mapping
          IF ls_vend_fcn-sesnmap = 'X'.
            SELECT *
              FROM ztm_season_map
                APPENDING TABLE lt_season_map FOR ALL ENTRIES IN lt_ret_stage
              WHERE bukrs = lt_ret_stage-bukrs
                  AND lifnr = lt_ret_stage-lifnr.
          ENDIF.

*   Country of origin Mapping
          IF ls_vend_fcn-coomap = 'X'.
            SELECT bukrs lifnr zerkl zcooc
               APPENDING TABLE lt_co_map
              FROM ztm_coo_map FOR ALL ENTRIES IN lt_ret_stage
                WHERE bukrs = lt_ret_stage-bukrs
                  AND lifnr = lt_ret_stage-lifnr.
          ENDIF.

*   HS Code Mapping
          IF ls_vend_fcn-hscdmap = 'X'.
            SELECT bukrs lifnr source_wstaw destn_wstaw
               APPENDING TABLE lt_hscode_map
              FROM ztm_hscode_map
              FOR ALL ENTRIES IN lt_ret_stage
                WHERE bukrs = lt_ret_stage-bukrs
                  AND lifnr = lt_ret_stage-lifnr..
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDIF.
  ENDIF.

  DATA(gt_item_original) = gt_item_fm[].

  LOOP AT gt_item_fm ASSIGNING FIELD-SYMBOL(<fs_retail_stage>).

    ls_error-id = '00'.
    ls_error-reference = <fs_retail_stage>-reference.
    ls_error-bukrs = <fs_retail_stage>-bukrs.
    ls_error-process = p_brand."lv_process_type.
    ls_error-msgno = '398'.
    lv_seqno = lv_seqno + 1.
    ls_error-seq_no = lv_seqno.
    READ TABLE lt_vend_fcn INTO ls_vend_fcn WITH KEY zbukrs = <fs_retail_stage
>-bukrs
                                                     lifnr = <fs_retail_stage>
-lifnr.
    IF sy-subrc = 0.
      IF ls_vend_fcn-mcmap = 'X'.
        READ TABLE lt_mc_map INTO DATA(ls_mc_map) WITH KEY
                                        bukrs = <fs_retail_stage>-bukrs
                                        lifnr = <fs_retail_stage>-lifnr
                                        zlegmc = <fs_retail_stage>-matkl_temp.
        IF sy-subrc = 0.
          IF <fs_retail_stage>-matkl <> ls_mc_map-afgcmc.
            <fs_retail_stage>-matkl = ls_mc_map-afgcmc.
          ENDIF.
        ELSE.
          lv_seqno = lv_seqno + 1.
          ls_error-seq_no = lv_seqno.

          ls_error-message = text-t17.
          ls_error-message_v1 = <fs_retail_stage>-matkl_temp.
          APPEND ls_error TO lt_error.

        ENDIF.
      ENDIF.

      IF ls_vend_fcn-coomap = 'X'.
        READ TABLE lt_co_map INTO DATA(ls_co_map) WITH KEY
                                        bukrs = <fs_retail_stage>-bukrs
                                        lifnr = <fs_retail_stage>-lifnr
                                        zcooc = <fs_retail_stage>-herkl_temp.
        IF sy-subrc = 0.
          IF <fs_retail_stage>-herkl <> ls_co_map-zerkl.
            <fs_retail_stage>-herkl = ls_co_map-zerkl.
          ENDIF.
        ELSE.
          lv_seqno = lv_seqno + 1.
          ls_error-seq_no = lv_seqno.

          ls_error-message = text-t20.
          ls_error-message_v1 = <fs_retail_stage>-herkl_temp.
          APPEND ls_error TO lt_error.
        ENDIF.
      ENDIF.

      IF ls_vend_fcn-hscdmap = 'X'.
        READ TABLE lt_hscode_map INTO DATA(ls_hscd_map) WITH KEY
                                        bukrs = <fs_retail_stage>-bukrs
                                        lifnr = <fs_retail_stage>-lifnr
                                        source_wstaw = <fs_retail_stage>-
wstaw_temp.
        IF sy-subrc = 0.
          IF <fs_retail_stage>-wstaw <> ls_hscd_map-destn_wsta.
            <fs_retail_stage>-wstaw = ls_hscd_map-destn_wsta.
          ENDIF.
        ELSE.
          lv_seqno = lv_seqno + 1.
          ls_error-seq_no = lv_seqno.

          ls_error-message = text-t21.
          ls_error-message_v1 = <fs_retail_stage>-wstaw_temp.
          APPEND ls_error TO lt_error.

        ENDIF.
      ENDIF.

      IF ls_vend_fcn-sesnmap = 'X'.
        READ TABLE lt_season_map INTO DATA(ls_season) WITH KEY
                                          bukrs = <fs_retail_stage>-bukrs
                                          lifnr = <fs_retail_stage>-lifnr
                                          zssoc = <fs_retail_stage>-
saiso_temp.
        IF sy-subrc EQ 0.
          IF <fs_retail_stage>-saiso <> ls_season-saiso.
            <fs_retail_stage>-saiso = ls_season-saiso.
            IF ls_season-saisj IS NOT INITIAL.
              <fs_retail_stage>-saisj = ls_season-saisj.
            ENDIF.
          ENDIF.
        ELSE.
          lv_seqno = lv_seqno + 1.
          ls_error-seq_no = lv_seqno.

          ls_error-message = text-t22.
          ls_error-message_v1 = <fs_retail_stage>-saiso_temp.
          APPEND ls_error TO lt_error.

        ENDIF.
      ENDIF.

      IF ls_vend_fcn-colrmap = 'X'.
        READ TABLE lt_color_map INTO DATA(ls_color_map) WITH KEY
                                      bukrs = <fs_retail_stage>-bukrs
                                      lifnr = <fs_retail_stage>-lifnr
                                      zcdec = <fs_retail_stage>-color_temp.
        IF sy-subrc = 0 .
          IF <fs_retail_stage>-color
                      <> ls_color_map-zcafg .
            <fs_retail_stage>-color = ls_color_map-zcafg.
            READ TABLE gt_item_original INTO ls_item_delete WITH KEY bukrs =  
<fs_retail_stage>-bukrs
                                                                     fshnid = 
<fs_retail_stage>-fshnid
                                                                     model = <
fs_retail_stage>-model
                                                                     reference 
= <fs_retail_stage>-reference
                                                                     itemno = 
<fs_retail_stage>-itemno.
            IF sy-subrc = 0.
              APPEND ls_item_delete TO lt_item_delete.
            ENDIF.

          ENDIF.
        ELSE.
          lv_seqno = lv_seqno + 1.
          ls_error-seq_no = lv_seqno.

          ls_error-message = text-t18.
          ls_error-message_v1 = <fs_retail_stage>-color_temp.
          APPEND ls_error TO lt_error.

        ENDIF.
      ENDIF.

      IF ls_vend_fcn-sizemap = 'X'.
        READ TABLE lt_size_map INTO DATA(ls_size_map) WITH KEY
                                           bukrs = <fs_retail_stage>-bukrs
                                           lifnr = <fs_retail_stage>-lifnr
                                           zscod = <fs_retail_stage>-
size1_temp.
        IF sy-subrc = 0 .
          IF <fs_retail_stage>-size1
                      <> ls_size_map-zsafg .
            <fs_retail_stage>-size1 = ls_size_map-zsafg.
            READ TABLE gt_item_original INTO ls_item_delete WITH KEY bukrs =  
<fs_retail_stage>-bukrs
                                                                     fshnid = 
<fs_retail_stage>-fshnid
                                                                     model = <
fs_retail_stage>-model
                                                                     reference 
= <fs_retail_stage>-reference
                                                                     itemno = 
<fs_retail_stage>-itemno.
            IF sy-subrc = 0.
              APPEND ls_item_delete TO lt_item_delete.
            ENDIF.
          ENDIF.
        ELSE.
          lv_seqno = lv_seqno + 1.
          ls_error-seq_no = lv_seqno.

          ls_error-message = text-t19.
          ls_error-message_v1 = <fs_retail_stage>-size1_temp.
          APPEND ls_error TO lt_error.
        ENDIF.

      ENDIF.
    ENDIF.

  ENDLOOP.

  MODIFY ztm_retail_stage FROM TABLE gt_item_fm.
  COMMIT WORK.

  IF lt_item_delete[] IS NOT INITIAL.
    SORT lt_item_delete BY reference itemno.
    DELETE ADJACENT DUPLICATES FROM lt_item_delete COMPARING reference itemno.
    DELETE ztm_retail_stage FROM TABLE lt_item_delete.
  ENDIF.

  IF lt_error[] IS NOT INITIAL.
    MODIFY ztm_error_stage FROM TABLE lt_error.
    pv_error = 'X'.
    MESSAGE text-t25 TYPE 'S'.
  ENDIF.
  COMMIT WORK.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREATE_CUSTOM_REPORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_custom_item .

  DATA : lt_details     TYPE abap_compdescr_tab,
         lt_details_new TYPE abap_compdescr_tab,
         ls_details     TYPE abap_compdescr.
  DATA : lref_table_des TYPE REF TO cl_abap_structdescr.
  DATA : lt_data TYPE REF TO data,
         ls_data TYPE REF TO data.
  DATA : lt_fcat_item TYPE lvc_t_fcat,
         ls_fcat_item TYPE lvc_s_fcat.
  FIELD-SYMBOLS : "<ft_item> TYPE STANDARD TABLE,
                  <fs_item> TYPE any.

  lref_table_des ?= cl_abap_typedescr=>describe_by_name( 'ZTM_RETAIL_STAGE' ).
  lt_details[] = lref_table_des->components[].

  lref_table_des ?= cl_abap_typedescr=>describe_by_name( 'ZTM_KIABI_PIM' ).
  lt_details_new[] = lref_table_des->components[].
  LOOP AT lt_details_new INTO ls_details.
    READ TABLE lt_details TRANSPORTING NO FIELDS WITH KEY name = ls_details-
name.
    IF sy-subrc <> 0.
      APPEND ls_details TO lt_details.
    ENDIF.
  ENDLOOP.

  REFRESH gt_i_fcat.

  SELECT * FROM ztm_art_rep_map INTO TABLE @DATA(lt_artmap)
                                    WHERE bukrs IN @s_bukrs
                                    AND fshnid = @p_brand(3).

  IF sy-subrc = 0.
    LOOP AT lt_artmap INTO DATA(ls_artmap).
      IF ls_artmap-fieldlevel = 'ITEM'.
        READ TABLE lt_details INTO ls_details WITH KEY name = ls_artmap-
fieldname.
        IF sy-subrc = 0.
          ls_fcat_item-fieldname = ls_artmap-fieldname.
          CASE ls_details-type_kind.
            WHEN 'C'.
              ls_fcat_item-datatype = 'CHAR'.
            WHEN 'N'.
              ls_fcat_item-datatype = 'NUMC'.
            WHEN 'D'.
              ls_fcat_item-datatype = 'DATE'.
            WHEN 'P'.
              ls_fcat_item-datatype = 'PACK'.
            WHEN OTHERS.
              ls_fcat_item-datatype = ls_details-type_kind.
          ENDCASE.
          ls_fcat_item-inttype = ls_details-type_kind.
          ls_fcat_item-intlen = ls_details-length.
          ls_fcat_item-decimals = ls_details-decimals.
          APPEND ls_fcat_item TO lt_fcat_item.
          PERFORM fill_fields USING ls_artmap-fieldname '<FT_ITEM>' ls_artmap-
description.
        ENDIF.
      ENDIF.
    ENDLOOP.

  ENDIF.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog           = lt_fcat_item
    IMPORTING
      ep_table                  = lt_data
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.

  ASSIGN lt_data->* TO <ft_item>.

  IF <ft_item> IS ASSIGNED.
    CREATE DATA ls_data LIKE LINE OF <ft_item>.
    ASSIGN ls_data->* TO <fs_item>.

    LOOP AT gt_item INTO gs_item.
      MOVE-CORRESPONDING gs_item TO <fs_item>.
      READ TABLE gt_item_pim INTO gs_item_pim WITH KEY bukrs = gs_item-bukrs
                                                       fshnid = gs_item-fshnid
                                                       idnlf = gs_item-idnlf
                                                       reference = gs_item-
reference
                                                       model = gs_item-model
                                                       color = gs_item-color
                                                       size1 = gs_item-size1.
      IF sy-subrc = 0.
        MOVE-CORRESPONDING gs_item_pim TO <fs_item>.
      ENDIF.
      APPEND <fs_item> TO <ft_item>.
    ENDLOOP.

    PERFORM layout_item.

    CALL METHOD go_item_grid->set_table_for_first_display
      EXPORTING
        is_layout       = gs_i_layo
      CHANGING
        it_outtab       = <ft_item>
        it_fieldcatalog = gt_i_fcat[].
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_FIELDS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LS_ARTMAP_FIELDNAME  text
*      -->P_2063   text
*      -->P_LS_ARTMAP_DESCRIPTION  text
*----------------------------------------------------------------------*
FORM fill_fields  USING    p_fieldname
                           p_tabname
                           p_seltext.

  CLEAR gs_i_fcat.
  gs_i_fcat-fieldname = p_fieldname.
  gs_i_fcat-tabname   = p_tabname.
  gs_i_fcat-seltext = p_seltext.
  gs_i_fcat-scrtext_l = p_seltext.
  APPEND gs_i_fcat TO gt_i_fcat.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREATE_CUSTOM_ITEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM create_custom_header .

  DATA : lt_details TYPE abap_compdescr_tab,
         ls_details TYPE abap_compdescr.
  DATA : lref_table_des TYPE REF TO cl_abap_structdescr.
  DATA : lt_data TYPE REF TO data,
         ls_data TYPE REF TO data.
  DATA : lt_fcat_header TYPE lvc_t_fcat,
         ls_fcat_header TYPE lvc_s_fcat.
  FIELD-SYMBOLS : "<ft_header> TYPE STANDARD TABLE,
                  <fs_header> TYPE any.

  lref_table_des ?= cl_abap_typedescr=>describe_by_name( 'ZTM_RETAIL_STAGE' ).
  lt_details[] = lref_table_des->components[].

  REFRESH gt_i_fcat.

  SELECT * FROM ztm_art_rep_map INTO TABLE @DATA(lt_artmap)
                                    WHERE bukrs IN @s_bukrs
                                    AND fshnid = @p_brand(3).

  IF sy-subrc = 0.
    LOOP AT lt_artmap INTO DATA(ls_artmap).
      IF ls_artmap-fieldlevel = 'HEADER'.
        READ TABLE lt_details INTO ls_details WITH KEY name = ls_artmap-
fieldname.
        IF sy-subrc = 0.
          ls_fcat_header-fieldname = ls_artmap-fieldname.
          CASE ls_details-type_kind.
            WHEN 'C'.
              ls_fcat_header-datatype = 'CHAR'.
            WHEN 'N'.
              ls_fcat_header-datatype = 'NUMC'.
            WHEN 'D'.
              ls_fcat_header-datatype = 'DATE'.
            WHEN 'P'.
              ls_fcat_header-datatype = 'PACK'.
            WHEN OTHERS.
              ls_fcat_header-datatype = ls_details-type_kind.
          ENDCASE.
          ls_fcat_header-inttype = ls_details-type_kind.
          ls_fcat_header-intlen = ls_details-length.
          ls_fcat_header-decimals = ls_details-decimals.
          APPEND ls_fcat_header TO lt_fcat_header.
          PERFORM fill_fields USING ls_artmap-fieldname '<FT_HEADER>' ls_artma
p-description.
        ENDIF.
      ENDIF.
    ENDLOOP.

  ENDIF.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog           = lt_fcat_header
    IMPORTING
      ep_table                  = lt_data
    EXCEPTIONS
      generate_subpool_dir_full = 1
      OTHERS                    = 2.

  ASSIGN lt_data->* TO <ft_header>.

  IF <ft_header> IS ASSIGNED.
    CREATE DATA ls_data LIKE LINE OF <ft_header>.
    ASSIGN ls_data->* TO <fs_header>.

    LOOP AT gt_header_all INTO DATA(ls_header_all).
      MOVE-CORRESPONDING ls_header_all TO <fs_header>.
      APPEND <fs_header> TO <ft_header>.
    ENDLOOP.

    CALL METHOD go_header_grid->set_table_for_first_display
      EXPORTING
        is_layout       = gs_layo
      CHANGING
        it_outtab       = <ft_header>
        it_fieldcatalog = gt_i_fcat[].
  ENDIF.
ENDFORM.

===================

Screen :100 Retail Article Reprocess screen


PROCESS BEFORE OUTPUT.
  MODULE status_0100.
PROCESS AFTER INPUT.
  MODULE user_command_0100.

===================

Screen :200 Re-Process


PROCESS BEFORE OUTPUT.
*  MODULE status_0200.

PROCESS AFTER INPUT.
  MODULE user_command_0200.

===================

Screen :300 Error Details


PROCESS BEFORE OUTPUT.
  MODULE status_0300.
*
PROCESS AFTER INPUT.
  MODULE user_command_0300.

-=========================================

tcode: ZKIASHIP Program : ZMD_RETAIL_REPROCESS_NEW (executable)

You might also like