SAP ABAP Build a Programs with nested-like Screens

SAP ABAP Build a Programs with nested-like Screens

well hello again fellas,

there are times when you really need your programs to be nested-like screens, what i mean is when you need to create many screen for your programs and you need them to navigate one onto another smoothly.

i currently developed a program which more like nested-like.

nuffsaid,

ZZMM_TKDNA5001

*&---------------------------------------------------------------------*
*& Report  ZZMM_TKDNA5001
*&
*&---------------------------------------------------------------------*
*&  Report Title       : Input TKDN A5001
*&  Project            : Persero
*&  Func. Designer     : Christophorus
*&  Programmer         : Fachreza Rifandi
*&  Created on         : 02.06.2021
*&---------------------------------------------------------------------*


REPORT ZZMM_TKDNA5001.

INCLUDE ZZMM_TKDNA5001TOP.
INCLUDE ZZMM_TKDNA5001F01.
INCLUDE ZZMM_TKDNA5001PBO.
INCLUDE ZZMM_TKDNA5001PAI.
INCLUDE ZZMM_TKDNA5001F02 .

START-OF-SELECTION.
*BREAK t_fachrezar.
call SCREEN 1001.
*call SCREEN 2002.

ZZMM_TKDNA5001TOP

*&---------------------------------------------------------------------*
*&  Include           ZZMM_TKDNA5001TOP
*&---------------------------------------------------------------------*
TABLES: ekko, ekpo, lfa1,ZMVISUMALL,ZMVIMST.
TYPES : BEGIN OF ty_input,
          tick           TYPE char1,
          Purch_doc      TYPE ekko-ebeln,      "Purchasing Document
          doc_type       TYPE ekko-bsart,      " Document TYpe
          COCD           TYPE ekko-bukrs,      " Company COde
          Vendor         TYPE Ekko-lifnr,      " Vendor
          Vendor_Nm      TYPE lfa1-name1,      " Vendor Name
          Judul          TYPE ekpo-txz01,      " Judul
          Tot_val        TYPE ekpo-brtwr,      " Total Value,
          PENAWAL        TYPE ekko-zmmpenawal, " Penawaran Awal,
          curr           TYPE ekko-waers,      "Currency
          Kom_TKDN       TYPE EKKO-ZZMMTKDN,    "Komitment TKDN
          Ch_Kom_TKDN    TYPE EKKO-ZZMMTKDN,    "Change Komitment TKDN
          MIN_TKDN       TYPE ekko-zbtsmintkdn,"Batas Minimum TKDN
          CAP_TKDN       TYPE ekko-zbtsmintkdn,"Capaian TKDN
          ZERO_TKDN      TYPE char1,           "Zero Capaian TKDN
          Sanksi_HTM     TYPE Char1,           "Sanksi Hitam
          Reference      TYPE ZTMM_TKDN-ZREF,          "Reference
          bstyp          TYPE ekko-bstyp,        "bstyp
*Dependent
          flag           TYPE c, "flag exist in ztmm_TKDN
          bsart          TYPE ekko-bsart,
          ekorg         TYPE ekko-ekorg,
          ekgrp         TYPE ekko-ekgrp,
          pstyp          TYPE ekpo-pstyp,
           bukrs          TYPE ekko-bukrs,
        END OF ty_input,
        BEGIN OF ty_review,
          bukrs          TYPE ekko-bukrs,
          Purch_doc      TYPE ekko-ebeln,      "Purchasing Document
          Vendor         TYPE Ekko-lifnr,      " Vendor
          Vendor_Nm      TYPE lfa1-name1,      " Vendor Name
          Kom_TKDN       TYPE EKKO-ZZMMTKDN,    "Komitment TKDN
          Ch_Kom_TKDN    TYPE EKKO-ZZMMTKDN,    "Change Komitment TKDN
          MIN_TKDN       TYPE ekko-zbtsmintkdn,"Batas Minimum TKDN
          CAP_TKDN       TYPE ekko-zbtsmintkdn,"Capaian TKDN
          CAP_KOM        TYPE int4,             "Capaian/ Komitmen (%)
          Result         TYPE char15,           "Result
          viol           type char4,            "violation/ Reward Code
          Reference      TYPE ZTMM_TKDN-ZREF,          "Reference
*****dependent
          ekorg         TYPE ekko-ekorg,
          ekgrp         TYPE ekko-ekgrp,
          pstyp          TYPE ekpo-pstyp,
          bsart          TYPE ekko-bsart,
        END OF ty_Review,
        BEGIN OF ty_report,
          Purch_doc      TYPE ekko-ebeln,      "Purchasing Document
          doc_type       TYPE ekko-bsart,      " Document TYpe
          COCD           TYPE ekko-bukrs,      " Company COde
          Vendor         TYPE Ekko-lifnr,      " Vendor
          Vendor_Nm      TYPE lfa1-name1,      " Vendor Name
          Judul          TYPE ekpo-txz01,      " Judul
          Tot_val        TYPE ekpo-brtwr,      " Total Value,
          PENAWAL        TYPE ekko-zmmpenawal, " Penawaran Awal,
          curr           TYPE ekko-waers,      "Currency
          Kom_TKDN       TYPE EKKO-ZZMMTKDN,    "Komitment TKDN
          Ch_Kom_TKDN    TYPE EKKO-ZZMMTKDN,    "Change Komitment TKDN
          MIN_TKDN       TYPE ekko-zbtsmintkdn,"Batas Minimum TKDN
          CAP_TKDN       TYPE ekko-zbtsmintkdn,"Capaian TKDN
          viol           type char4,            "violation/ Reward Code
          Reference      TYPE ZTMM_TKDN-ZREF,          "Reference
*Dependent
          bstyp          TYPE ekko-bstyp,        "bstyp
          flag           TYPE c, "flag exist in ztmm_TKDN
          bsart          TYPE ekko-bsart,
          ekorg         TYPE ekko-ekorg,
          ekgrp         TYPE ekko-ekgrp,
          pstyp          TYPE ekpo-pstyp,
           bukrs          TYPE ekko-bukrs,
        END OF ty_report.

 DATA : name LIKE  THEAD-TDNAME,
        lines TYPE TABLE OF TLINE,
        sline TYPE TLINE.

DATA : lt_zmmenhance TYPE TABLE OF zmm_enhance,
       ls_zmmenhance LIKE zmm_enhance,
       lt_tvarvc      TYPE TABLE OF tvarvc,
       ls_tvarvc       TYPE tvarvc,
       lt_ztmmtkdn    TYPE TABLE OF ztmm_tkdn,
       ls_ztmmtkdn    TYPE ztmm_tkdn,
       lt_ekko        TYPE TABLE OF ekko,
       lt_ekpo        TYPE TABLE OF ekpo,
       ls_ekko        TYPE ekko,
       ls_ekpo        TYPE ekpo,
       lt_lfa1        TYPE TABLE OF lfa1,
       ls_lfa1        TYPE lfa1,
       lv_value       TYPE ekpo-netwr.

DATA : ls_input TYPE ty_input,
       lt_input TYPE TABLE OF ty_input,
       lt_review TYPE TABLE OF ty_review,
       ls_review TYPE ty_review,
       lt_report TYPE TABLE OF ty_report,
       ls_report TYPE ty_report.


       DATA :v_point TYPE c LENGTH 7.
      DATA : lt_zmvimst TYPE TABLE OF zmvimst,
             ls_zmvimst TYPE zmvimst.

TYPES : BEGIN OF ty_selec,
        line TYPE string,
        END OF ty_selec.
DATA : lt_selec TYPE TABLE OF sy-ucomm,
       ls_selec TYPE sy-ucomm.
*SELECTION-SCREEN BEGIN OF SCREEN 2001.



*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_INPUT' ITSELF
CONTROLS: TC_INPUT TYPE TABLEVIEW USING SCREEN 2002.

*&SPWIZARD: LINES OF TABLECONTROL 'TC_INPUT'
DATA:     G_TC_INPUT_LINES  LIKE SY-LOOPC.

DATA:     OK_CODE LIKE SY-UCOMM.

*&SPWizard: Include inserted by SP Wizard. DO NOT CHANGE THIS LINE!
SELECTION-SCREEN BEGIN OF SCREEN 1002 as SUBSCREEN .
  SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE Text-F01.
  SELECT-OPTIONS : SO_EBELN FOR ekko-ebeln.
  SELECTION-SCREEN END OF BLOCK blk1.
SELECTION-SCREEN END OF SCREEN 1002.


SELECTION-SCREEN BEGIN OF SCREEN 2004 as SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-F02.
  SELECT-OPTIONS:
                  s_ebelnr FOR ekko-ebeln,
                  s_bukrs FOR ekko-bukrs,
                  s_bsart FOR ekko-bsart,
                  s_ekgrp FOR ekko-ekgrp,
                  s_vicode FOR ZMVIMST-vicode  NO INTERVALS,
                  s_erdat FOR ekko-aedat.
SELECTION-SCREEN END OF BLOCK blk2.
SELECTION-SCREEN END OF SCREEN 2004.

  AT SELECTION-SCREEN OUTPUT.
*BREAK-POINT.
*IF SY-DYNNR = 1001.
**  APPEND: 'PRIN' TO lt_selec,
**          'SPOS' TO lt_selec,
**          'REPORT' TO lt_selec,
**          'EXEC' TO lt_selec.
*  CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
*  EXPORTING
*  P_STATUS = 'STD_SELEC' "your status
*  TABLES
*  P_EXCLUDE = lt_selec[]
*  EXCEPTIONS
*  OTHERS = 1.
*ENDIF.


 at SELECTION-SCREEN ON VALUE-REQUEST FOR s_vicode-low.
 TYPES : BEGIN OF ty_vicode,
          vicode TYPE zmvimst-VICODE,
          videsc TYPE zmvimst-videsc,
         END OF ty_vicode.
 DATA : lt_vicode TYPE TABLE OF ty_vicode,
        ls_vicode TYPE ty_vicode,
        lt_return TYPE TABLE OF DDSHRETVAL,
        ls_return TYPE DDSHRETVAL.
 REFRESH : lt_vicode, lt_return.

 SELECT * FROM zmvimst INTO CORRESPONDING FIELDS OF TABLE lt_vicode
   WHERE vicode LIKE 'T%'.

 CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
   EXPORTING
*    DDIC_STRUCTURE         = ' '
     RETFIELD               = 'VICODE'
*    PVALKEY                = ' '
    DYNPPROG               = sy-cprog
    DYNPNR                 = sy-dynnr
*    DYNPROFIELD            = ' '
*    STEPL                  = 0
*    WINDOW_TITLE           =
*    VALUE                  = ' '
    VALUE_ORG              = 'S'
*    MULTIPLE_CHOICE        = ' '
*    DISPLAY                = ' '
*    CALLBACK_PROGRAM       = ' '
*    CALLBACK_FORM          = ' '
*    CALLBACK_METHOD        =
*    MARK_TAB               =
*  IMPORTING
*    USER_RESET             =
   TABLES
     VALUE_TAB              = lt_vicode
*    FIELD_TAB              =
    RETURN_TAB             = lt_Return[]
*    DYNPFLD_MAPPING        =
  EXCEPTIONS
    PARAMETER_ERROR        = 1
    NO_VALUES_FOUND        = 2
    OTHERS                 = 3
           .
IF lt_return[] is NOT INITIAL.
  READ TABLE lt_return INTO ls_return INDEX 1.
  IF sy-subrc eq 0.
    S_VICODE-low = ls_return-FIELDVAL.
  ENDIF.
ENDIF.

ZZMM_TKDNA5001F01

*&---------------------------------------------------------------------*
*&  Include           ZZMM_TKDNA5001F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  F_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM F_GET_DATA .
  REFRESH lt_ekko[].
**SELECT * FROM zmm_enhance INTO itab_tkdnbukrs WHERE progname = <nama program ini>.
**SELECT * FROM tvarvc INTO itab_tkdnbsart WHERE name = ‘ZTMM_TKDN_BSART’.
**SELECT * FROM ZTMM_TKDN INTO itab_tkdn WHERE ebeln IN s_ebeln.
**SELECT * FROM ekko INTO itab_ekko WHERE ebeln IN s_ebeln AND bukrs = itab_tkdnbukrs-bukrs AND bsart = itab_tkdnbsart AND (zzmmtkdn IS NOT INITIAL OR zzblank_achieve IS NOT INITIAL) AND (zbtsmintkdn IS NOT INITIAL OR zzbtsmintkdn IS NOT INITIAL).
**IF itab_ekko IS NOT INITIAL.
**SELECT * FROM ekpo INTO itab_ekpo WHERE ebeln = itab_ekko-ebeln AND LOEKZ = ‘’.
**ELSE.
**RAISE MESSAGE “PO / OA is not in the correct criteria for TKDN”.
**ENDIF.
**AUTHORITY-CHECK OBJECT ‘M_BEST_EKO’
**ID 'ACTVT' FIELD '03'
**ID 'EKORG' FIELD itab_ekko-ekorg.
**IF sy-subrc = 0.
**AUTHORITY-CHECK OBJECT ‘M_BEST_EKG’
**ID 'ACTVT' FIELD '03'
**ID 'EKGRP' FIELD itab_ekko-ekgrp.
**ENDIF.
*
* DATA : name LIKE  THEAD-TDNAME,
*        lines TYPE TABLE OF TLINE,
*        sline TYPE TLINE.
*
*DATA : lt_zmmenhance TYPE TABLE OF zmm_enhance,
*       ls_zmmenhance LIKE zmm_enhance,
*       lt_tvarvc      TYPE TABLE OF tvarvc,
*       ls_tvarvc       TYPE tvarvc,
*       lt_ztmmtkdn    TYPE TABLE OF ztmm_tkdn,
*       ls_ztmmtkdn    TYPE ztmm_tkdn,
*       lt_ekko        TYPE TABLE OF ekko,
*       lt_ekpo        TYPE TABLE OF ekpo,
*       ls_ekko        TYPE ekko,
*       ls_ekpo        TYPE ekpo,
*       lt_lfa1        TYPE TABLE OF lfa1,
*       ls_lfa1        TYPE lfa1,
*       lv_value       TYPE ekpo-netwr.

SELECT * FROM zmm_enhance INTO TABLE lt_zmmenhance WHERE progname = 'ZTMM_TKDN'.
SELECT * FROM tvarvc INTO TABLE lt_tvarvc WHERE name = 'ZTMM_TKDN_BSART'.
SELECT * FROM ZTMM_TKDN INTO TABLE lt_ztmmtkdn WHERE ebeln IN SO_EBELN.
SELECT * FROM ekko INTO TABLE lt_ekko
  FOR ALL ENTRIES IN lt_zmmenhance
     WHERE ebeln IN SO_EBELN
  AND bukrs = lt_zmmenhance-bukrs
*  AND bsart = itab_tkdnbsart
  AND ( zzmmtkdn ne space or ZZBLANK_CONTENT ne space )
*  AND ( zzmmtkdn ne space or zzblank_achieve ne space )
  AND ( zbtsmintkdn ne space OR zzbtsmintkdn ne space ).

  IF lt_ekko[] IS INITIAL.

  exit.
  ENDIF.

  AUTHORITY-CHECK OBJECT 'M_BEST_EKO'
    ID 'ACTVT' FIELD '03'
    ID 'EKORG' FIELD ekko-ekorg.
  IF sy-subrc = 0.
  AUTHORITY-CHECK OBJECT 'M_BEST_EKG'
    ID 'ACTVT' FIELD '03'
    ID 'EKGRP' FIELD ekko-ekgrp.
  ENDIF.

  SELECT * FROM lfa1 INTO TABLE lt_lfa1
    FOR ALL ENTRIES IN lt_ekko
    WHERE lifnr = lt_ekko-lifnr.

  SELECT * FROM ekpo INTO TABLE lt_ekpo
    FOR ALL ENTRIES IN lt_ekko
    WHERE ebeln = lt_ekko-ebeln AND LOEKZ = space.

  LOOP AT lt_ekko INTO ls_ekko.
    CLEAR ls_input.

    ls_input-bukrs = ls_ekko-bukrs.
    READ TABLE LT_ZTMMTKDN INTO LS_ZTMMTKDN WITH KEY ebeln = ls_ekko-ebeln.
    IF sy-subrc eq 0.
      ls_input-flag = 'X'.
    ENDIF.

    READ TABLE lt_tvarvc INTO ls_tvarvc WITH KEY low = ls_ekko-bsart.
    IF sy-subrc eq 0.
*      LOOP AT lt_ekpo INTO ls_ekpo WHERE ebeln = ls_ekko-ebeln.
        LS_INPUT-tick         = space.
        LS_INPUT-Purch_doc    = ls_ekko-ebeln.
        LS_INPUT-doc_type     = ls_ekko-bsart.
        LS_INPUT-COCD         = ls_ekko-bukrs.
        LS_INPUT-Vendor       = ls_ekko-lifnr.

        READ TABLE lt_lfa1 INTO ls_lfa1 WITH KEY lifnr = ls_ekko-lifnr.
        IF sy-subrc eq 0.
           LS_INPUT-Vendor_Nm    = ls_lfa1-name1.
        ENDIF.

        if ls_ekko-bstyp = 'F'.
        name = ls_ekko-ebeln.
        DATA : lv_lang TYPE THEAD-TDSPRAS VALUE 'En'.
        CALL FUNCTION 'READ_TEXT'
          EXPORTING
*           CLIENT                        = SY-MANDT
            ID                            = 'F02'
            LANGUAGE                      = lv_lang
            NAME                          = name
            OBJECT                        = 'EKKO'
*           ARCHIVE_HANDLE                = 0
*           LOCAL_CAT                     = ' '
*         IMPORTING
*           HEADER                        =
*           OLD_LINE_COUNTER              =
          TABLES
            LINES                         = LINES
         EXCEPTIONS
           ID                            = 1
           LANGUAGE                      = 2
           NAME                          = 3
           NOT_FOUND                     = 4
           OBJECT                        = 5
           REFERENCE_CHECK               = 6
           WRONG_ACCESS_TO_ARCHIVE       = 7
           OTHERS                        = 8
                  .
         READ TABLE lines INTO sline INDEX 1.
         IF  sy-subrc eq 0.
            LS_INPUT-Judul        = sline-TDLINE.
            IF ls_input-judul IS INITIAL.
              READ TABLE lt_ekpo INTO ls_ekpo WITH KEY ebeln = ls_ekko-ebeln.
              if sy-subrc eq 0.
              LS_INPUT-Judul = ls_ekpo-TXZ01.
            ENDIF.
            ENDIF.
         ENDIF.
        ELSEIF ls_ekko-bstyp = 'K'.
           name = ls_ekko-ebeln.
          CALL FUNCTION 'READ_TEXT'
          EXPORTING
*           CLIENT                        = SY-MANDT
            ID                            = 'K02'
            LANGUAGE                      = lv_lang
            NAME                          = name
            OBJECT                        = 'EKKO'
*           ARCHIVE_HANDLE                = 0
*           LOCAL_CAT                     = ' '
*         IMPORTING
*           HEADER                        =
*           OLD_LINE_COUNTER              =
          TABLES
            LINES                         = LINES
         EXCEPTIONS
           ID                            = 1
           LANGUAGE                      = 2
           NAME                          = 3
           NOT_FOUND                     = 4
           OBJECT                        = 5
           REFERENCE_CHECK               = 6
           WRONG_ACCESS_TO_ARCHIVE       = 7
           OTHERS                        = 8
                  .
          READ TABLE lines INTO sline INDEX 1.
         IF  sy-subrc eq 0.
            LS_INPUT-Judul        = sline-TDLINE.
            IF ls_input-judul IS INITIAL.
              READ TABLE lt_ekpo INTO ls_ekpo WITH KEY ebeln = ls_ekko-ebeln.
              if sy-subrc eq 0.
              LS_INPUT-Judul = ls_ekpo-TXZ01.
            ENDIF.
            ENDIF.
         ENDIF.
        endif.

        IF ls_ekko-bstyp eq 'F'.
        CLEAR lv_value.
        LOOP AT lt_ekpo INTO ls_ekpo WHERE ebeln = ls_ekko-ebeln.
            lv_value = lv_value + ls_ekpo-netwr.
        ENDLOOP.
        LS_INPUT-Tot_val = lv_value.
        ELSEIF ls_ekko-bstyp eq 'K'.
          LS_INPUT-Tot_val      = ls_ekko-KTWRT.
          IF  ls_input-tot_val IS INITIAL.
            CLEAR lv_value.
            LOOP AT lt_ekpo INTO ls_ekpo.
              lv_value = lv_value + ls_ekpo-brtwr.
            ENDLOOP.
          ENDIF.
        ENDIF.


        LS_INPUT-PENAWAL      = ls_ekko-ZMMPENAWAL.
        LS_INPUT-curr         = ls_ekko-waers.
        LS_INPUT-Kom_TKDN     = ls_ekko-zzmmtkdn.

        LS_INPUT-Ch_Kom_TKDN  = space.

        LS_INPUT-MIN_TKDN     = ls_ekko-ZBTSMINTKDN.
        LS_INPUT-CAP_TKDN     = space.
        LS_INPUT-ZERO_TKDN    = space.
        LS_INPUT-Sanksi_HTM   = space.
        LS_INPUT-Reference    = space.

        ls_input-bstyp = ls_ekko-bstyp.
        ls_input-bsart = ls_ekko-bsart.
        ls_input-ekorg = ls_ekko-ekorg.
        ls_input-ekgrp = ls_ekko-ekgrp.
        ls_input-pstyp = ls_ekpo-pstyp.


        append ls_input to lt_input.
        CLEAR ls_input.
*      ENDLOOP.
    ENDIF.
  ENDLOOP.


"dummy data
*     LS_INPUT-Purch_doc    = '00000001'.
*     append ls_input to lt_input.
*
*     LS_INPUT-Purch_doc    = '00000002'.
*     append ls_input to lt_input.


ENDFORM.                    " F_GET_DATA

FORM F_GET_DATA_report .
  REFRESH : lt_ekko[],
            LT_REPORT[].
*SELECT * FROM zmm_enhance INTO itab_tkdnbukrs WHERE progname = <nama program ini>.
*SELECT * FROM tvarvc INTO itab_tkdnbsart WHERE name = ‘ZTMM_TKDN_BSART’.
*SELECT * FROM ZTMM_TKDN INTO itab_tkdn WHERE ebeln IN s_ebeln.
*SELECT * FROM ekko INTO itab_ekko WHERE ebeln IN s_ebeln AND bukrs = itab_tkdnbukrs-bukrs AND bsart = itab_tkdnbsart AND (zzmmtkdn IS NOT INITIAL OR zzblank_achieve IS NOT INITIAL) AND (zbtsmintkdn IS NOT INITIAL OR zzbtsmintkdn IS NOT INITIAL).
*IF itab_ekko IS NOT INITIAL.
*SELECT * FROM ekpo INTO itab_ekpo WHERE ebeln = itab_ekko-ebeln AND LOEKZ = ‘’.
*ELSE.
*RAISE MESSAGE “PO / OA is not in the correct criteria for TKDN”.
*ENDIF.
*AUTHORITY-CHECK OBJECT ‘M_BEST_EKO’
*ID 'ACTVT' FIELD '03'
*ID 'EKORG' FIELD itab_ekko-ekorg.
*IF sy-subrc = 0.
*AUTHORITY-CHECK OBJECT ‘M_BEST_EKG’
*ID 'ACTVT' FIELD '03'
*ID 'EKGRP' FIELD itab_ekko-ekgrp.
*ENDIF.

 DATA : name LIKE  THEAD-TDNAME,
        lines TYPE TABLE OF TLINE,
        sline TYPE TLINE.

DATA : lt_zmmenhance TYPE TABLE OF zmm_enhance,
       ls_zmmenhance LIKE zmm_enhance,
       lt_tvarvc      TYPE TABLE OF tvarvc,
       ls_tvarvc       TYPE tvarvc,
       lt_ztmmtkdn    TYPE TABLE OF ztmm_tkdn,
       ls_ztmmtkdn    TYPE ztmm_tkdn,
       lt_ekko        TYPE TABLE OF ekko,
       lt_ekpo        TYPE TABLE OF ekpo,
       ls_ekko        TYPE ekko,
       ls_ekpo        TYPE ekpo,
       lt_lfa1        TYPE TABLE OF lfa1,
       ls_lfa1        TYPE lfa1,
       lv_value       TYPE ekpo-netwr.

SELECT * FROM zmm_enhance INTO TABLE lt_zmmenhance WHERE progname = 'ZTMM_TKDN'.
SELECT * FROM tvarvc INTO TABLE lt_tvarvc WHERE name = 'ZTMM_TKDN_BSART'.
SELECT * FROM ZTMM_TKDN INTO TABLE lt_ztmmtkdn
  WHERE ebeln IN S_EBELNR AND BUKRS in S_BUKRS AND
        vicode in s_vicode AND erdat in s_erdat.
SELECT * FROM ekko INTO TABLE lt_ekko
  FOR ALL ENTRIES IN lt_ztmmtkdn
     WHERE ebeln eq lt_ztmmtkdn-ebeln
*  AND bukrs = lt_zmmenhance-bukrs
  AND bsart in s_bsart.
*  AND ( zzmmtkdn ne space or zzblank_achieve ne space )
*  AND ( zbtsmintkdn ne space OR zzbtsmintkdn ne space ).

  IF lt_ekko[] IS INITIAL.

  exit.
  ENDIF.

  AUTHORITY-CHECK OBJECT 'M_BEST_EKO'
    ID 'ACTVT' FIELD '03'
    ID 'EKORG' FIELD ekko-ekorg.
  IF sy-subrc = 0.
  AUTHORITY-CHECK OBJECT 'M_BEST_EKG'
    ID 'ACTVT' FIELD '03'
    ID 'EKGRP' FIELD ekko-ekgrp.
  ENDIF.

  SELECT * FROM lfa1 INTO TABLE lt_lfa1
    FOR ALL ENTRIES IN lt_ekko
    WHERE lifnr = lt_ekko-lifnr.

  SELECT * FROM ekpo INTO TABLE lt_ekpo
    FOR ALL ENTRIES IN lt_ekko
    WHERE ebeln = lt_ekko-ebeln AND LOEKZ = space.

*  LOOP AT lt_ekko INTO ls_ekko.
loop at lt_ztmmtkdn INTO ls_ztmmtkdn.
    CLEAR :ls_report,ls_ekko.
    READ TABLE lt_ekko INTO ls_ekko WITH key ebeln = ls_ztmmtkdn-ebeln.
    CHECK ls_ekko IS NOT INITIAL.

    ls_input-bukrs = ls_ekko-bukrs.
*    READ TABLE LT_ZTMMTKDN INTO LS_ZTMMTKDN WITH KEY ebeln = ls_ekko-ebeln.
*    IF sy-subrc eq 0.
*      ls_input-flag = 'X'.
*    ENDIF.

    READ TABLE lt_tvarvc INTO ls_tvarvc WITH KEY low = ls_ekko-bsart.
    IF sy-subrc eq 0.
*      LOOP AT lt_ekpo INTO ls_ekpo WHERE ebeln = ls_ekko-ebeln.
*        LS_REPORT-tick         = space.
        LS_report-Purch_doc    = ls_ztmmtkdn-ebeln.
        LS_report-doc_type     = ls_ekko-bsart.
        LS_report-COCD         = ls_ekko-bukrs.
        LS_report-Vendor       = ls_ekko-lifnr.
        LS_REPORT-bstyp        = ls_ekko-bstyp.
        READ TABLE lt_lfa1 INTO ls_lfa1 WITH KEY lifnr = ls_ekko-lifnr.
        IF sy-subrc eq 0.
           LS_REPORT-Vendor_Nm    = ls_lfa1-name1.
        ENDIF.

        if LS_REPORT-bstyp = 'F'.
        name = ls_ekko-ebeln.
        DATA : lv_lang TYPE THEAD-TDSPRAS VALUE 'En'.
        CALL FUNCTION 'READ_TEXT'
          EXPORTING
*           CLIENT                        = SY-MANDT
            ID                            = 'F02'
            LANGUAGE                      = lv_lang
            NAME                          = name
            OBJECT                        = 'EKKO'
*           ARCHIVE_HANDLE                = 0
*           LOCAL_CAT                     = ' '
*         IMPORTING
*           HEADER                        =
*           OLD_LINE_COUNTER              =
          TABLES
            LINES                         = LINES
         EXCEPTIONS
           ID                            = 1
           LANGUAGE                      = 2
           NAME                          = 3
           NOT_FOUND                     = 4
           OBJECT                        = 5
           REFERENCE_CHECK               = 6
           WRONG_ACCESS_TO_ARCHIVE       = 7
           OTHERS                        = 8
                  .
         READ TABLE lines INTO sline INDEX 1.
         IF  sy-subrc eq 0.
            LS_REPORT-Judul        = sline-TDLINE.
            IF LS_REPORT-judul IS INITIAL.
              READ TABLE lt_ekpo INTO ls_ekpo WITH KEY ebeln = ls_ekko-ebeln.
              if sy-subrc eq 0.
              LS_REPORT-Judul = ls_ekpo-TXZ01.
            ENDIF.
            ENDIF.
         ENDIF.
        ELSEIF LS_REPORT-bstyp = 'K'.
           name = ls_ekko-ebeln.
          CALL FUNCTION 'READ_TEXT'
          EXPORTING
*           CLIENT                        = SY-MANDT
            ID                            = 'K02'
            LANGUAGE                      = lv_lang
            NAME                          = name
            OBJECT                        = 'EKKO'
*           ARCHIVE_HANDLE                = 0
*           LOCAL_CAT                     = ' '
*         IMPORTING
*           HEADER                        =
*           OLD_LINE_COUNTER              =
          TABLES
            LINES                         = LINES
         EXCEPTIONS
           ID                            = 1
           LANGUAGE                      = 2
           NAME                          = 3
           NOT_FOUND                     = 4
           OBJECT                        = 5
           REFERENCE_CHECK               = 6
           WRONG_ACCESS_TO_ARCHIVE       = 7
           OTHERS                        = 8
                  .
          READ TABLE lines INTO sline INDEX 1.
         IF  sy-subrc eq 0.
            LS_REPORT-Judul        = sline-TDLINE.
            IF LS_REPORT-judul IS INITIAL.
              READ TABLE lt_ekpo INTO ls_ekpo WITH KEY ebeln = ls_ekko-ebeln.
              if sy-subrc eq 0.
              LS_REPORT-Judul = ls_ekpo-TXZ01.
            ENDIF.
            ENDIF.
         ENDIF.
        endif.

        IF LS_REPORT-bstyp eq 'F'.
        CLEAR lv_value.
        LOOP AT lt_ekpo INTO ls_ekpo WHERE ebeln = ls_ekko-ebeln.
            lv_value = lv_value + ls_ekpo-netwr.
        ENDLOOP.
        LS_REPORT-Tot_val = lv_value.
        ELSEIF LS_REPORT-bstyp eq 'K'.
          LS_REPORT-Tot_val      = ls_ekko-KTWRT.
          IF  LS_REPORT-tot_val IS INITIAL.
            CLEAR lv_value.
            LOOP AT lt_ekpo INTO ls_ekpo.
              lv_value = lv_value + ls_ekpo-brtwr.
            ENDLOOP.
          ENDIF.
        ENDIF.


        LS_REPORT-PENAWAL      = ls_ekko-ZMMPENAWAL.
        LS_REPORT-curr         = ls_ekko-waers.
        LS_REPORT-Kom_TKDN     = ls_ztmmtkdn-ZZMTKDN.

        LS_REPORT-Ch_Kom_TKDN  = ls_ztmmtkdn-ZZMTKDN_CHG.

        LS_REPORT-MIN_TKDN     = ls_ztmmtkdn-ZBTSMINTKDN.
        LS_REPORT-CAP_TKDN     = ls_ztmmtkdn-ZZTKDN.
        LS_REPORT-VIOL         =  ls_ztmmtkdn-VICODE.
*        LS_REPORT-ZERO_TKDN    = space.
*        LS_REPORT-Sanksi_HTM   = space.
        LS_REPORT-Reference    = ls_ztmmtkdn-ZREF.

        LS_REPORT-bstyp = ls_ekko-bstyp.
        LS_REPORT-bsart = ls_ekko-bsart.
        LS_REPORT-ekorg = ls_ekko-ekorg.
        LS_REPORT-ekgrp = ls_ekko-ekgrp.
        LS_REPORT-pstyp = ls_ekpo-pstyp.


        append LS_REPORT to LT_REPORT.
        CLEAR LS_REPORT.
*      ENDLOOP.
    ENDIF.
  ENDLOOP.


endform.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_REVIEW' ITSELF
CONTROLS: TC_REVIEW TYPE TABLEVIEW USING SCREEN 2003.
*&---------------------------------------------------------------------*
*&      Module  MODIFY_DATA  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE MODIFY_DATA INPUT.
*BREAK t_fachrezar.
MODIFY lt_input FROM ls_input INDEX TC_INPUT-CURRENT_LINE. " WHERE ebeln = ls_input-ebeln .
ENDMODULE.                 " MODIFY_DATA  INPUT
*&---------------------------------------------------------------------*
*&      Form  F_SAVEALL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM F_SAVEALL .
  DATA : lt_ztmm TYPE TABLE OF ztmm_tkdn,
         ls_ztmm TYPE ztmm_tkdn,
         lt_zmvitrx TYPE TABLE OF zmvitrx,
         ls_zmvitrx TYPE zmvitrx,
         lt_zmvisum TYPE TABLE OF zmvisum,
         ls_zmvisum TYPE zmvisum,
         ls_zmvisumnew TYPE zmvisum,
         lt_zmvisumall TYPE TABLE OF zmvisumall,
         ls_zmvisumall TYPE zmvisumall,
         ls_zmvisumallnew TYPE zmvisumall,
         lt_regloc TYPE TABLE OF zreg_loc,
         ls_regloc TYPE zreg_loc.

    DATA : lt_zmvicdhkm TYPE TABLE OF zmvicdhkm,
           ls_zmvicdhkm TYPE zmvicdhkm.
    SELECT * FROM zmvicdhkm INTO TABLE lt_zmvicdhkm
      FOR ALL ENTRIES IN lt_review
      WHERE vicode = lt_review-VIOL.

    SELECT * FROM zmvisumall INTO TABLE lt_zmvisumall
      FOR ALL ENTRIES IN lt_review WHERE lifnr = lt_review-VENDOR AND REGGROUP = 'KORP'.
    SELECT * FROM ZREG_LOC INTO TABLE lt_regloc FOR ALL ENTRIES IN lt_review
      WHERE ekgrp = lt_review-ekgrp.

     SELECT * FROM zmvisum INTO TABLE lt_zmvisum
       FOR ALL ENTRIES IN lt_review WHERE lifnr = lt_review-vendor AND reggroup = 'KORP'.
LOOP AT lt_review INTO ls_review.
*ZTMM_TKDN
  ls_ztmm-ebeln = ls_review-PURCH_DOC.
  ls_ztmm-bukrs = ls_review-bukrs.
  ls_ztmm-zzmtkdn = ls_review-KOM_TKDN.
  ls_ztmm-zzmtkdn_chg = ls_review-CH_KOM_TKDN.
  ls_ztmm-zztkdn = ls_review-CAP_TKDN.
  ls_ztmm-zbtsmintkdn = ls_review-MIN_TKDN.
  ls_ztmm-vicode = ls_review-VIOL.
  ls_ztmm-zref = ls_review-REFERENCE.
  ls_ztmm-ernam = sy-uname.
  ls_ztmm-erdat = sy-datum.
  ls_ztmm-utime = sy-UZEIT.

  MODIFY ztmm_tkdn from ls_ztmm.
*ZMVITRX
  IF ls_review-bsart ne 'ZOA' or ls_review-bsart ne 'ZOAS'.
    LS_ZMVITRX-bukrs = ls_review-BUKrS.
    ls_zmvitrx-ekorg = ls_review-ekorg.
    ls_zmvitrx-reggroup = 'KORP'.

    READ TABLE lt_regloc INTO ls_regloc  WITH KEY ekgrp = ls_review-ekgrp.
    IF sy-subrc eq 0.
      ls_zmvitrx-zreg_loc = ls_regloc-zreg_loc.
    ENDIF.

    ls_zmvitrx-TRXDATE = sy-datum.
    ls_zmvitrx-GJAHR = sy-datum(4).
    ls_zmvitrx-LIFNR = ls_review-VENDOR.

    CASE  ls_review-pstyp.
      WHEN '9'.
        ls_zmvitrx-KNDPRO = 'S'.
      WHEN OTHERS.
        ls_zmvitrx-KNDPRO = 'M'.
    ENDCASE.

    ls_zmvitrx-vicode = ls_review-VIOL.
    ls_zmvitrx-viitem = '1'.
    ls_zmvitrx-REFNUM = ls_review-PURCH_DOC.
    ls_zmvitrx-DLTFLAG = space.
    ls_zmvitrx-TMTDATE = sy-datum.
    ls_zmvitrx-note = ls_review-REFERENCE.
    ls_zmvitrx-DOER = 'P'.
    ls_zmvitrx-AS4USER = sy-uname.
    ls_zmvitrx-AS4DATE = sy-datum.
    ls_zmvitrx-CRUSER = sy-uname.
    ls_zmvitrx-CRDATE = sy-datum.
    ls_zmvitrx-CRTIME = sy-uzeit.
    ls_zmvitrx-ZEILE = space.

    READ TABLE LT_ZMVISUMall INTO LS_ZMVISUMALL WITH KEY lifnr = ls_review-vendor.
    IF sy-subrc eq 0.
  ls_ZMVITRX-PREVPTM    = ls_zmvisumall-pointm.
  ls_ZMVITRX-PREVPTS    = ls_zmvisumall-points.
  ls_ZMVITRX-PREVPTT    = ls_zmvisumall-pointt.
  ls_ZMVITRX-PREVTMTDM  = ls_zmvisumall-tmtdatem.
  ls_ZMVITRX-PREVTMTDS  = ls_zmvisumall-tmtdates.
  ls_ZMVITRX-PREVTMTDT  = ls_zmvisumall-tmtdatet.
  ls_ZMVITRX-PREVCODEM  = ls_zmvisumall-pcodem.
  ls_ZMVITRX-PREVCODES  = ls_zmvisumall-pcodes.
  ls_ZMVITRX-PREVCODET  = ls_zmvisumall-pcodet.

  ENDIF.
  ENDIF.
  MODIFY zmvitrx FROM ls_zmvitrx.

*ZVISUM, ZVISUMALL
  IF ls_review-bsart ne 'ZOA' or ls_review-bsart ne 'ZOAS'.

    READ TABLE lt_zmvicdhkm INTO ls_zmvicdhkm WITH KEY vicode = ls_review-VIOL.
    IF sy-subrc eq 0 AND ls_zmvicdhkm-pcode IS NOT INITIAL.
        READ TABLE lt_zmvisumall INTO ls_zmvisumallnew WITH KEY lifnr = ls_review-vendor reggroup = 'KORP'.
        IF sy-subrc eq 0 .
           IF ls_zmvitrx-kndpro = 'S'.
             ls_zmvisumall-ocodes = ls_zmvisumall-pcodes.
             ls_zmvisumall-tmtolds = ls_zmvisumall-tmtdates.
             ls_zmvisumall-pcodes = ls_zmvicdhkm-pcode.
             ls_zmvisumall-tmtdates = sy-datum.
           ELSE.
             ls_zmvisumall-ocodem = ls_zmvisumall-pcodem.
             ls_zmvisumall-tmtoldm = ls_zmvisumall-tmtdatem.
             ls_zmvisumall-pcodem = ls_zmvicdhkm-pcode.
             ls_zmvisumall-tmtdatem = sy-datum.
           ENDIF.

             ls_zmvisumall-ocodet = ls_zmvisumall-pcodet.
             ls_zmvisumall-tmtoldt = ls_zmvisumall-tmtdatet.
             ls_zmvisumall-pcodes = ls_zmvicdhkm-pcode.
             ls_zmvisumall-tmtdatet = sy-datum.

             ls_zmvisumall-aedat = sy-datum.
             ls_zmvisumall-aetim = sy-UZEIT.
             ls_zmvisumall-aenam = sy-UNAME.

             LS_ZMVISUMALL-VICODE_HKM = ls_review-viol.
*             MODIFY lt_zmvisumall FROM ls_zmvisumall
*             TRANSPORTING OCODES TMTOLDS PCODES TMTDATES OCODEM TMTOLDM
*                          PCODEM TMTDATEM OCODET TMTOLDT PCODET TMTDATET
*                          aedat aetim aenam VICODE_HKM.
             MODIFY ZMVISUMALL FROM ls_zmvisumall.
        ELSE.
            ls_zmvisumall-lifnr = ls_review-vendor.
            ls_zmvisumall-reggroup = 'KORP'.

            IF ls_zmvitrx-kndpro = 'S'.
              ls_zmvisumall-pcodes = ls_zmvicdhkm-pcode.
              ls_zmvisumall-pcodem = 'G'.
            ELSE.
              ls_zmvisumall-pcodem = ls_zmvicdhkm-pcode.
              ls_zmvicdhkm-pcode = 'G'.
*              ls_zmvicdhkm-pcodes = 'G'.
            ENDIF.

            ls_zmvisumall-pcodet = ls_zmvicdhkm-pcode.
            ls_zmvisumall-tmtdatem = sy-datum.
            ls_zmvisumall-tmtdates = sy-datum.
            ls_zmvisumall-tmtdatet = sy-datum.
            ls_zmvisumall-trxdatem = sy-datum.
            ls_zmvisumall-trxdates = sy-datum.
            ls_zmvisumall-trxdatet = sy-datum.
            ls_zmvisumall-pointm = 0.
            ls_zmvisumall-points = 0.
            ls_zmvisumall-pointt = 0.
            ls_zmvisumall-preptm = 0.
            ls_zmvisumall-prepts = 0.
            ls_zmvisumall-preptt = 0.
            ls_zmvisumall-poinpm = 0.
            ls_zmvisumall-poinps = 0.
            ls_zmvisumall-poinpt = 0.
            ls_zmvisumall-tt_bl = 0.
            ls_zmvisumall-ttrfq = 0.
            ls_zmvisumall-tt_po = 0.
            ls_zmvisumall-bl_in = 0.
            ls_zmvisumall-aedat = sy-datum.
            ls_zmvisumall-aetim = sy-uzeit.
            ls_zmvisumall-aenam = 'SYSTEM'.

*            MODIFY lt_zmvisumall FROM ls_zmvisumall
*             TRANSPORTING OCODES TMTOLDS PCODES TMTDATES OCODEM TMTOLDM
*                          PCODEM TMTDATEM OCODET TMTOLDT PCODET TMTDATET
*                          aedat aetim aenam VICODE_HKM.
            MODIFY ZMVISUMALL FROM ls_zmvisumall.
        ENDIF.

    IF  lt_zmvisum[] IS NOT INITIAL.
      READ TABLE lt_zmvisum INTO ls_zmvisum WITH KEY lifnr = ls_review-vendor reggroup = 'KORP'.
      if sy-subrc eq 0.
      IF ls_ZMVITRX-KNDPRO = 'S'.
      ls_zmvisum-OCODES  = ls_zmvisum-PCODES.
      ls_zmvisum-TMTOLDS = ls_zmvisum-TMTDATES.
      ls_zmvisum-PCODES = ls_zmvicdhkm-pcode.
      ls_zmvisum-TMTDATES = sy-datum.

      ELSE.
      ls_zmvisum-OCODEM  = ls_zmvisum-PCODEM.
      ls_zmvisum-TMTOLDM = ls_zmvisum-TMTDATEM.
      ls_zmvisum-PCODEM = ls_zmvicdhkm-pcode.
      ls_zmvisum-TMTDATEM = sy-datum.
      ENDIF.

      ls_zmvisum-OCODET  = ls_zmvisum-PCODET.
      ls_zmvisum-TMTOLDT = ls_zmvisum-TMTDATET.
      ls_zmvisum-PCODET = ls_zmvicdhkm-pcode.
      ls_zmvisum-TMTDATET = sy-datum.

      ls_zmvisum-aedat = sy-datum.
      ls_zmvisum-aetim = sy-uzeit.
      ls_zmvisum-aenam = sy-uname.

      ls_zmvisum-VICODE_HKM = ls_review-VIOL.

*      MODIFY lt_zmvisum  FROM ls_zmvisum
*      TRANSPORTING OCODES TMTOLDS PCODES TMTDATES OCODEM TMTOLDM
*      PCODEM TMTDATEM OCODET TMTOLDT PCODET TMTDATET
*      aedat aetim aenam VICODE_HKM
*where lifnr = ls_zmvisum-lifnr.
      MODIFY ZMVISUM FROM ls_zmvisum.
*            TRANSPORTING OCODES TMTOLDS PCODES TMTDATES OCODEM TMTOLDM
*                   PCODEM TMTDATEM OCODET TMTOLDT PCODET TMTDATET
*                   aedat aetim aenam VICODE_HKM..


      ELSE.
      ls_zmvisum-lifnr = ls_review-VENDOR.
      ls_zmvisum-reggroup = 'KORP'.

      IF ls_ZMVITRX-KNDPRO = 'S'.
      ls_zmvisum-PCODES = ls_zmvicdhkm-pcode.
      ls_zmvisum-PCODEM = 'G'.
      ELSE.
      ls_zmvisum-PCODEM = ls_zmvicdhkm-pcode.
      ls_zmvisum-pcodes = 'G'.
      ENDIF.

      ls_zmvisum-pcodet = ls_zmvicdhkm-pcode..
      ls_zmvisum-tmtdatem = sy-datum.
      ls_zmvisum-tmtdates = sy-datum.
      ls_zmvisum-tmtdatet = sy-datum.
      ls_zmvisum-trxdatem = sy-datum.
      ls_zmvisum-trxdates = sy-datum.
      ls_zmvisum-trxdatet = sy-datum.
      ls_zmvisum-pointm = 0.
      ls_zmvisum-points = 0.
      ls_zmvisum-pointt = 0.
      ls_zmvisum-preptm = 0.
      ls_zmvisum-prepts = 0.
      ls_zmvisum-preptt = 0.
      ls_zmvisum-poinpm = 0.
      ls_zmvisum-poinps = 0.
      ls_zmvisum-poinpt = 0.
      ls_zmvisum-tt_bl = 0.
      ls_zmvisum-ttrfq = 0.
      ls_zmvisum-tt_po = 0.
      ls_zmvisum-bl_in = 0.
      ls_zmvisum-aedat = sy-datum.
      ls_zmvisum-aetim = sy-uzeit.
      ls_zmvisum-aenam = 'SYSTEM'.

*      MODIFY  lt_ZMVISUM FROM ls_zmvisum TRANSPORTING
*      OCODES TMTOLDS PCODES TMTDATES OCODEM TMTOLDM
*      PCODEM TMTDATEM OCODET TMTOLDT PCODET TMTDATET
*      aedat aetim aenam VICODE_HKM
*       where lifnr = ls_zmvisum-lifnr.
      MODIFY ZMVISUM FROM ls_zmvisum.
*      TRANSPORTING OCODES TMTOLDS PCODES TMTDATES OCODEM TMTOLDM
*                   PCODEM TMTDATEM OCODET TMTOLDT PCODET TMTDATET
*                   aedat aetim aenam VICODE_HKM.
      ENDIF.

    ENDIF.

    ENDIF.
  ENDIF.


ENDLOOP.
commit WORK.

DATA : v_count TYPE char2.
DATA : v_Message TYPE char30.
DESCRIBE TABLE lt_review LINES v_count.
CONCATENATE V_COUNT 'data has been process.' INTO v_message SEPARATED BY space.
MESSAGE v_message TYPE 'S'.
ENDFORM.                    " F_SAVEALL

*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_REPORT' ITSELF
CONTROLS: TC_REPORT TYPE TABLEVIEW USING SCREEN 2005.

*&SPWIZARD: LINES OF TABLECONTROL 'TC_REPORT'
DATA:     G_TC_REPORT_LINES  LIKE SY-LOOPC.

ZZMM_TKDNA5001PBO

*&---------------------------------------------------------------------*
*&  Include           ZZMM_TKDNA5001PBO
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_2002  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_2002 OUTPUT.
  SET PF-STATUS 'STD_INPUT'.
*  SET TITLEBAR 'xxx'.
CASE SY-UCOMM.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXEC'.
*      BREAK t_fachrezar.
      REFRESH LT_REVIEW[].
      REFRESH lt_zmvimst[].

      SELECT * FROM zmvimst INTO TABLE lt_zmvimst.

      LOOP AT lt_input INTO ls_input WHERE TICK IS NOT INITIAL .
        CLEAR v_point.

        ls_review-Purch_doc   = ls_input-Purch_doc   .
        ls_review-Vendor      = ls_input-Vendor      .
        ls_review-Vendor_Nm   = ls_input-Vendor_Nm   .
        ls_review-Kom_TKDN    = ls_input-Kom_TKDN    .
        ls_review-Ch_Kom_TKDN = ls_input-Ch_Kom_TKDN .
        ls_review-MIN_TKDN    = ls_input-MIN_TKDN    .
        ls_review-CAP_TKDN    = ls_input-CAP_TKDN    .
        ls_review-REFERENCE    = ls_input-REFERENCE    .


        ls_review-CAP_KOM   = ls_review-CAP_TKDN / ls_review-Kom_TKDN * 100.
        IF ls_review-cap_kom GE 100.
          ls_review-cap_kom = 100.
        ENDIF.

*        ls_review-Result
*        viol
*        Reference
        ls_review-bsart = ls_input-bsart.

        IF ls_review-bsart = 'ZOA' or ls_review-bsart = 'ZOAS'.
          ls_review-RESULT = 'RO Shown Only for Monitoring'.
          ls_review-VIOL = space.

        ELSE.
          IF ls_input-SANKSI_HTM = 'X'.
            ls_review-result = 'Sanksi Hitam'.
            ls_review-VIOL = 'T05P'.
          ELSE.
            IF LS_REVIEW-CAP_KOM LT ls_input-MIN_TKDN.
              ls_review-VIOL = 'T04P'.
              ls_review-result = 'Sanksi Merah'.
            ELSEIF ls_review-CAP_KOM GE '100'.
              ls_review-VIOL = 'T01R'.
              READ TABLE lt_zmvimst INTO ls_zmvimst WITH KEY vicode = ls_review-viol.
*              READ TABLE lt_zmvimst INTO ls_zmvimst WITH KEY vicode = ls_review-viol.
              if sy-subrc eq 0.
                move ls_zmvimst-VIPOINT to v_point.
                CONDENSE v_point.
                CONCATENATE 'Point +' v_point INTO ls_review-result SEPARATED BY space.
              ENDIF.
            ELSEIF ls_review-CAP_KOM ge '90' AND ls_review-CAP_KOM lt '100'.
               ls_review-VIOL = 'T02P'.
              READ TABLE lt_zmvimst INTO ls_zmvimst WITH KEY vicode = ls_review-viol.
*              READ TABLE lt_zmvimst INTO ls_zmvimst WITH KEY vicode = ls_review-viol.
              if sy-subrc eq 0.
                move ls_zmvimst-VIPOINT to v_point.
                CONDENSE v_point.
                CONCATENATE 'Point ' v_point INTO ls_review-result SEPARATED BY space.
              ENDIF.
            ELSEIF ls_review-CAP_KOM LT '90'.
              ls_review-VIOL = 'T03P'.
              ls_review-RESULT = 'Sanksi Merah'.
          ENDIF.
        ENDIF.
        ENDIF.

        ls_review-ekorg        = ls_input-ekorg.
        ls_review-ekgrp        = ls_input-ekgrp.
        ls_review-pstyp        = ls_input-pstyp.
        ls_review-bukrs        = ls_input-bukrs.




        APPEND ls_review to lt_review[].
      ENDLOOP.
      if lt_review[] IS NOT INITIAL.
      call SCREEN 2003.
      ENDIF.
  ENDCASE.
ENDMODULE.                 " STATUS_2002  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_2001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_2001 OUTPUT.
*  BREAK t_fachrezar.
  SET PF-STATUS 'STD_REPORT'.
*  SET TITLEBAR 'xxx'.
CASE SY-UCOMM.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'BACK'.
      CLEAR sy-ucomm.
      REFRESH lt_report.
      call SCREEN 1001.
    WHEN 'EXEC_REPOR'.
      PERFORM F_GET_DATA_REPORT.
      CHECK lt_report[] IS NOT INITIAL.
      CLEAR sy-ucomm.
      call SCREEN 2005.
  ENDCASE.
ENDMODULE.                 " STATUS_2001  OUTPUT

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_INPUT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_INPUT_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE LT_INPUT LINES TC_INPUT-lines.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_INPUT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_INPUT_GET_LINES OUTPUT.
  G_TC_INPUT_LINES = SY-LOOPC.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  CHANGE_CELL_PROP  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE CHANGE_CELL_PROP OUTPUT.
*BREAK T_Fachrezar.
LOOP AT screen.
  IF screen-name = 'LS_INPUT-PURCH_DOC' or
     screen-name = 'LS_INPUT-DOC_TYPE' OR
     screen-name = 'LS_INPUT-COCD' OR
     screen-name = 'LS_INPUT-VENDOR' OR
     screen-name = 'LS_INPUT-VENDOR_NM' OR
     screen-name = 'LS_INPUT-JUDUL' OR
     screen-name = 'LS_INPUT-TOT_VAL' OR
     screen-name = 'LS_INPUT-PENAWAL' OR
     screen-name = 'LS_INPUT-CURR' OR
     screen-name = 'LS_INPUT-KOM_TKDN' OR
     screen-name = 'LS_INPUT-CH_KOM_TKDN' OR
     screen-name = 'LS_INPUT-MIN_TKDN'.


    screen-input = '0'.

    IF screen-name = 'LS_INPUT-CH_KOM_TKDN'.
      IF ls_input-bstyp = 'F'.

    screen-input = '1'.
      ELSEIF ls_input-bstyp = 'K'.

    screen-input = '0'.
      ENDIF.
    ENDIF.
    ELSE.
    SCREEN-INPUT = '1'.

    IF ls_input-flag IS NOT INITIAL.
      screen-input = '0'.
    ENDIF.
  ENDIF.
  MODIFY SCREEN.
ENDLOOP.
ENDMODULE.                 " CHANGE_CELL_PROP  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_2003  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_2003 OUTPUT.
  SET PF-STATUS 'STD_REVIEW'.
*  SET TITLEBAR 'xxx'.
CASE SY-UCOMM.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'BACK'.
      REFRESH LT_REVIEW[].
      REFRESH CONTROL 'TC_REVIEW' FROM SCREEN '2003'.
      LEAVE TO SCREEN 2002.
    WHEN 'SAVE'.
DATA : lv_ques TYPE string,
       lv_ans  TYPE char4.
       lv_ques = 'Data yang sudah di-input tidak dapat diubah. Mohon pastikan angka yang anda input sudah tepat! Save?'.



      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
*         TITLEBAR                    = ' '
*         DIAGNOSE_OBJECT             = ' '
          TEXT_QUESTION               = lv_ques
         TEXT_BUTTON_1               = 'Save'(001)
         ICON_BUTTON_1               = 'ICON_SYSTEM_SAVE'
         TEXT_BUTTON_2               = 'Cancel'(002)
         ICON_BUTTON_2               = 'ICON_INCOMPLETE'
*         DEFAULT_BUTTON              = '1'
         DISPLAY_CANCEL_BUTTON       = ' '
*         USERDEFINED_F1_HELP         = ' '
*         START_COLUMN                = 25
*         START_ROW                   = 6
*         POPUP_TYPE                  =
*         IV_QUICKINFO_BUTTON_1       = ' '
*         IV_QUICKINFO_BUTTON_2       = ' '
       IMPORTING
         ANSWER                      = lv_ans
*       TABLES
*         PARAMETER                   =
       EXCEPTIONS
         TEXT_NOT_FOUND              = 1
         OTHERS                      = 2
                .
*      BREAK t_fachrezar.
      IF lv_ans eq '1'.
*proceed to save process
         PERFORM f_saveall.
      ENDIF.

  ENDCASE.
ENDMODULE.                 " STATUS_2003  OUTPUT

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_REVIEW'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_REVIEW_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE LT_REVIEW LINES TC_REVIEW-lines.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  F_CH_PROP_SCREEN  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE F_CH_PROP_SCREEN OUTPUT.
*LOOP AT screen.
*  IF screen-name = 'LS_INPUT-PURCH_DOC' or
*     screen-name = 'LS_INPUT-DOC_TYPE' OR
*     screen-name = 'LS_INPUT-COCD' OR
*     screen-name = 'LS_INPUT-VENDOR' OR
*     screen-name = 'LS_INPUT-VENDOR_NM' OR
*     screen-name = 'LS_INPUT-JUDUL' OR
*     screen-name = 'LS_INPUT-TOT_VAL' OR
*     screen-name = 'LS_INPUT-PENAWAL' OR
*     screen-name = 'LS_INPUT-CURR' OR
*     screen-name = 'LS_INPUT-KOM_TKDN' OR
*     screen-name = 'LS_INPUT-CH_KOM_TKDN' OR
*     screen-name = 'LS_INPUT-MIN_TKDN'.
*
*
*    screen-input = '0'.
*
*    IF screen-name = 'LS_INPUT-CH_KOM_TKDN'.
*      IF ls_input-bstyp = 'F'.
*
*    screen-input = '1'.
*      ELSEIF ls_input-bstyp = 'K'.
*
*    screen-input = '0'.
*      ENDIF.
*    ENDIF.
*    ELSE.
*    SCREEN-INPUT = '1'.
*  ENDIF.
*  MODIFY SCREEN.
*ENDLOOP.

ENDMODULE.                 " F_CH_PROP_SCREEN  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  F_PBO_1001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE F_PBO_1001 OUTPUT.

*  SET PF-STATUS 'STD_SELEC'.
**  SET TITLEBAR 'xxx'.
*CASE SY-UCOMM.
*    WHEN 'EXIT'.
*      LEAVE PROGRAM.
*    WHEN 'BACK'.
**      REFRESH LT_REVIEW[].
**      REFRESH CONTROL 'TC_REVIEW' FROM SCREEN '2003'.
**      LEAVE TO SCREEN 2002.
*      LEAVE SCREEN.
*ENDCASE.
ENDMODULE.                 " F_PBO_1001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_1001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_1001 OUTPUT.
*  SET PF-STATUS 'xxxxxxxx'.
*  SET TITLEBAR 'xxx'.
SET PF-STATUS 'STD_SELEC'.
*  SET TITLEBAR 'xxx'.
CASE SY-UCOMM.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'BACK'.

      LEAVE PROGRAM.
    WHEN 'EXEC'.

      PERFORM f_get_data.
      CLEAR SY-UCOMM.
      call SCREEN 2002.

    WHEN 'REPORT'.
      CLEAR SY-UCOMM.
*      BREAK t_Fachrezar.
      call SCREEN 2001.

ENDCASE.
ENDMODULE.                 " STATUS_1001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_2001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_2001 INPUT.

ENDMODULE.                 " USER_COMMAND_2001  INPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_2005  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_2005 OUTPUT.
  SET PF-STATUS 'STD_DISP_REPORT'.
*  SET TITLEBAR 'xxx'.

CASE SY-UCOMM.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'BACK'.
      CLEAR SY-UCOMM.
      call SCREEN 2001.
ENDCASE.
ENDMODULE.                 " STATUS_2005  OUTPUT

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_REPORT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_REPORT_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE LT_REPORT LINES TC_REPORT-lines.
ENDMODULE.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_REPORT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_REPORT_GET_LINES OUTPUT.
  G_TC_REPORT_LINES = SY-LOOPC.
ENDMODULE.

ZZMM_TKDNA5001PAI

*&---------------------------------------------------------------------*
*&  Include           ZZMM_TKDNA5001PAI
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_2002  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_2002 INPUT.

ENDMODULE.                 " USER_COMMAND_2002  INPUT

*&SPWIZARD: INPUT MODULE FOR TC 'TC_INPUT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_INPUT_USER_COMMAND INPUT.
  OK_CODE = SY-UCOMM.
  PERFORM USER_OK_TC USING    'TC_INPUT'
                              'LT_INPUT'
                              ' '
                     CHANGING OK_CODE.
  SY-UCOMM = OK_CODE.
ENDMODULE.



  MODULE TC_INPUT_USER_COMMAND_1001 INPUT.

    OK_CODE = SY-UCOMM.
  PERFORM USER_OK_TC USING    ''
                              ''
                              ' '
                     CHANGING OK_CODE.
  SY-UCOMM = OK_CODE.
  EndModule.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_2003  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_2003 INPUT.

ENDMODULE.                 " USER_COMMAND_2003  INPUT

*&SPWIZARD: INPUT MODULE FOR TC 'TC_REVIEW'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE TC_REVIEW_MODIFY INPUT.
  MODIFY LT_REVIEW
    FROM LS_REVIEW
    INDEX TC_REVIEW-CURRENT_LINE.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_1001 INPUT.

ENDMODULE.                 " USER_COMMAND_1001  INPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_2005  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_2005 INPUT.

ENDMODULE.                 " USER_COMMAND_2005  INPUT

*&SPWIZARD: INPUT MODULE FOR TC 'TC_REPORT'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_REPORT_USER_COMMAND INPUT.
  OK_CODE = SY-UCOMM.
  PERFORM USER_OK_TC USING    'TC_REPORT'
                              'LT_REPORT'
                              ' '
                     CHANGING OK_CODE.
  SY-UCOMM = OK_CODE.
ENDMODULE.

ZZMM_TKDNA5001F02

*&---------------------------------------------------------------------*
*&  Include           ZZMM_TKDNA5001F02
*&---------------------------------------------------------------------*

*----------------------------------------------------------------------*
*   INCLUDE TABLECONTROL_FORMS                                         *
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  USER_OK_TC                                               *
*&---------------------------------------------------------------------*
 FORM USER_OK_TC USING    P_TC_NAME TYPE DYNFNAM
                          P_TABLE_NAME
                          P_MARK_NAME
                 CHANGING P_OK      LIKE SY-UCOMM.

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
   DATA: L_OK              TYPE SY-UCOMM,
         L_OFFSET          TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

*&SPWIZARD: Table control specific operations                          *
*&SPWIZARD: evaluate TC name and operations                            *
   SEARCH P_OK FOR P_TC_NAME.
   IF SY-SUBRC <> 0.
     EXIT.
   ENDIF.
   L_OFFSET = STRLEN( P_TC_NAME ) + 1.
   L_OK = P_OK+L_OFFSET.
*&SPWIZARD: execute general and TC specific operations                 *
   CASE L_OK.
     WHEN 'INSR'.                      "insert row
       PERFORM FCODE_INSERT_ROW USING    P_TC_NAME
                                         P_TABLE_NAME.
       CLEAR P_OK.

     WHEN 'DELE'.                      "delete row
       PERFORM FCODE_DELETE_ROW USING    P_TC_NAME
                                         P_TABLE_NAME
                                         P_MARK_NAME.
       CLEAR P_OK.

     WHEN 'P--' OR                     "top of list
          'P-'  OR                     "previous page
          'P+'  OR                     "next page
          'P++'.                       "bottom of list
       PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
                                             L_OK.
       CLEAR P_OK.
*     WHEN 'L--'.                       "total left
*       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
*
*     WHEN 'L-'.                        "column left
*       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
*
*     WHEN 'R+'.                        "column right
*       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
*
*     WHEN 'R++'.                       "total right
*       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
*
     WHEN 'MARK'.                      "mark all filled lines
       PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME
                                         P_TABLE_NAME
                                         P_MARK_NAME   .
       CLEAR P_OK.

     WHEN 'DMRK'.                      "demark all filled lines
       PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
                                           P_TABLE_NAME
                                           P_MARK_NAME .
       CLEAR P_OK.

*     WHEN 'SASCEND'   OR
*          'SDESCEND'.                  "sort column
*       PERFORM FCODE_SORT_TC USING P_TC_NAME
*                                   l_ok.

   ENDCASE.

 ENDFORM.                              " USER_OK_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_INSERT_ROW                                         *
*&---------------------------------------------------------------------*
 FORM fcode_insert_row
               USING    P_TC_NAME           TYPE DYNFNAM
                        P_TABLE_NAME             .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
   DATA L_LINES_NAME       LIKE FELD-NAME.
   DATA L_SELLINE          LIKE SY-STEPL.
   DATA L_LASTLINE         TYPE I.
   DATA L_LINE             TYPE I.
   DATA L_TABLE_NAME       LIKE FELD-NAME.
   FIELD-SYMBOLS <TC>                 TYPE CXTAB_CONTROL.
   FIELD-SYMBOLS <TABLE>              TYPE STANDARD TABLE.
   FIELD-SYMBOLS <LINES>              TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

   ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
   CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
   ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

*&SPWIZARD: get looplines of TableControl                              *
   CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.
   ASSIGN (L_LINES_NAME) TO <LINES>.

*&SPWIZARD: get current line                                           *
   GET CURSOR LINE L_SELLINE.
   IF SY-SUBRC <> 0.                   " append line to table
     L_SELLINE = <TC>-LINES + 1.
*&SPWIZARD: set top line                                               *
     IF L_SELLINE > <LINES>.
       <TC>-TOP_LINE = L_SELLINE - <LINES> + 1 .
     ELSE.
       <TC>-TOP_LINE = 1.
     ENDIF.
   ELSE.                               " insert line into table
     L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1.
     L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1.
   ENDIF.
*&SPWIZARD: set new cursor line                                        *
   L_LINE = L_SELLINE - <TC>-TOP_LINE + 1.

*&SPWIZARD: insert initial line                                        *
   INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.
   <TC>-LINES = <TC>-LINES + 1.
*&SPWIZARD: set cursor                                                 *
   SET CURSOR LINE L_LINE.

 ENDFORM.                              " FCODE_INSERT_ROW

*&---------------------------------------------------------------------*
*&      Form  FCODE_DELETE_ROW                                         *
*&---------------------------------------------------------------------*
 FORM fcode_delete_row
               USING    P_TC_NAME           TYPE DYNFNAM
                        P_TABLE_NAME
                        P_MARK_NAME   .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
   DATA L_TABLE_NAME       LIKE FELD-NAME.

   FIELD-SYMBOLS <TC>         TYPE cxtab_control.
   FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.
   FIELD-SYMBOLS <WA>.
   FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

   ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
   CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
   ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

*&SPWIZARD: delete marked lines                                        *
   DESCRIBE TABLE <TABLE> LINES <TC>-LINES.

   LOOP AT <TABLE> ASSIGNING <WA>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
     ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

     IF <MARK_FIELD> = 'X'.
       DELETE <TABLE> INDEX SYST-TABIX.
       IF SY-SUBRC = 0.
         <TC>-LINES = <TC>-LINES - 1.
       ENDIF.
     ENDIF.
   ENDLOOP.

 ENDFORM.                              " FCODE_DELETE_ROW

*&---------------------------------------------------------------------*
*&      Form  COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*      -->P_OK       ok code
*----------------------------------------------------------------------*
 FORM COMPUTE_SCROLLING_IN_TC USING    P_TC_NAME
                                       P_OK.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
   DATA L_TC_NEW_TOP_LINE     TYPE I.
   DATA L_TC_NAME             LIKE FELD-NAME.
   DATA L_TC_LINES_NAME       LIKE FELD-NAME.
   DATA L_TC_FIELD_NAME       LIKE FELD-NAME.

   FIELD-SYMBOLS <TC>         TYPE cxtab_control.
   FIELD-SYMBOLS <LINES>      TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

   ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get looplines of TableControl                              *
   CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.
   ASSIGN (L_TC_LINES_NAME) TO <LINES>.


*&SPWIZARD: is no line filled?                                         *
   IF <TC>-LINES = 0.
*&SPWIZARD: yes, ...                                                   *
     L_TC_NEW_TOP_LINE = 1.
   ELSE.
*&SPWIZARD: no, ...                                                    *
     CALL FUNCTION 'SCROLLING_IN_TABLE'
          EXPORTING
               ENTRY_ACT             = <TC>-TOP_LINE
               ENTRY_FROM            = 1
               ENTRY_TO              = <TC>-LINES
               LAST_PAGE_FULL        = 'X'
               LOOPS                 = <LINES>
               OK_CODE               = P_OK
               OVERLAPPING           = 'X'
          IMPORTING
               ENTRY_NEW             = L_TC_NEW_TOP_LINE
          EXCEPTIONS
*              NO_ENTRY_OR_PAGE_ACT  = 01
*              NO_ENTRY_TO           = 02
*              NO_OK_CODE_OR_PAGE_GO = 03
               OTHERS                = 0.
   ENDIF.

*&SPWIZARD: get actual tc and column                                   *
   GET CURSOR FIELD L_TC_FIELD_NAME
              AREA  L_TC_NAME.

   IF SYST-SUBRC = 0.
     IF L_TC_NAME = P_TC_NAME.
*&SPWIZARD: et actual column                                           *
       SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.
     ENDIF.
   ENDIF.

*&SPWIZARD: set the new top line                                       *
   <TC>-TOP_LINE = L_TC_NEW_TOP_LINE.


 ENDFORM.                              " COMPUTE_SCROLLING_IN_TC

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
*       marks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_MARK_LINES USING P_TC_NAME
                               P_TABLE_NAME
                               P_MARK_NAME.
*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
  DATA L_TABLE_NAME       LIKE FELD-NAME.

  FIELD-SYMBOLS <TC>         TYPE cxtab_control.
  FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <WA>.
  FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
   CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
   ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

*&SPWIZARD: mark all filled lines                                      *
  LOOP AT <TABLE> ASSIGNING <WA>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
     ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

     <MARK_FIELD> = 'X'.
  ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines

*&---------------------------------------------------------------------*
*&      Form  FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
*       demarks all TableControl lines
*----------------------------------------------------------------------*
*      -->P_TC_NAME  name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
                                 P_TABLE_NAME
                                 P_MARK_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
  DATA L_TABLE_NAME       LIKE FELD-NAME.

  FIELD-SYMBOLS <TC>         TYPE cxtab_control.
  FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.
  FIELD-SYMBOLS <WA>.
  FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

  ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get the table, which belongs to the tc                     *
   CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
   ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

*&SPWIZARD: demark all filled lines                                    *
  LOOP AT <TABLE> ASSIGNING <WA>.

*&SPWIZARD: access to the component 'FLAG' of the table header         *
     ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

     <MARK_FIELD> = SPACE.
  ENDLOOP.
ENDFORM.                                          "fcode_tc_mark_lines

those were all the codes i use,

and for the screen and the gui Stat,

i would just drop it in here

As for the screens , i put them on the dropbox, see it below…

https://www.dropbox.com/sh/838hrcyt41p8qid/AACPW0Jv2VFe8TRDwwfgHrJSa?dl=0

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *