sap abap editable alv report

Objective : Create a editable alv report , to stored the transportation information against the VF01 invoice number.
                   Invoice Number will be the primary key, this stored data further to be use in other link report.



Steps 1 : Create Z table with the required fields
Step   2 : Create Alv report
               select data from billing table VBRK
               select data from z table
               display data on alv editable mode
               give a confirmation pop up before saving
               while saving data along with data update created by, created n and time.

Table : ZSD_TRANSPORT




 abap code
____________________________________

*&---------------------------------------------------------------------*
*& Report ZSD_TRANSPORTATION_DETAILS
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZSD_TRANSPORTATION_DETAILS.

"for output display table
types begin of tp_list.
         INCLUDE STRUCTURE zsd_transport.  "this structure is of data base to stored the data
types :  sel,
        end of tp_list.

data gt_list  type STANDARD TABLE OF tp_list,
       gs_list  type tp_list,
       gt_list1 type STANDARD TABLE OF tp_list,
       gs_list1 type tp_list,
       gs_transport type zsd_transport.

"ALV fieldcatalog
DATA:  GT_FCAT    TYPE LVC_T_FCAT,               "slis_t_fieldcat_alv,
       GS_FCAT    LIKE LINE OF GT_FCAT,
       GS_LAYOUT  TYPE LVC_S_LAYO,               "slis_layout_alv,
       GS_VARIANT TYPE DISVARIANT,               "For Save Variant
       GS_GRID    TYPE LVC_S_GLAY,
       gv_cnt type i.

data gv_ans,
       gv_flag type flag.

data gv_vbeln type vbrk-vbeln,
       gv_fkart type vbrk-fkart,
       gv_fkdat type vbrk-fkdat,
       gv_kunag type vbrk-kunag.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
  select-OPTIONS s_vbeln for gv_vbeln,
                   s_fkart for gv_fkart,
                   s_fkdat for gv_fkdat,
                   s_kunag for gv_kunag.
SELECTION-SCREEN end of BLOCK b1.

START-OF-SELECTION.
     perform get_data.
     perform display_data.

end-of-SELECTION.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM get_data.

"select billing header data
     select a~vbelna~fkarta~fkdata~kunagb~name1
     from vbrk as a INNER JOIN kna1 as b
     on a~kunag b~kunnr WHERE a~vbeln in @s_vbeln
                            and a~fkart in @s_fkart
                            and a~kunag in @s_kunag
                            and a~fkdat in @s_fkdat
     INTO TABLE @data(gt_vbrk).

     if gt_vbrk[] is NOT INITIAL.

"read existing saved trasnport details
    select from zsd_transport into TABLE @data(gt_transport)
    FOR ALL ENTRIES IN @gt_vbrk WHERE vbeln @gt_vbrk-vbeln.

     endif.

    clear gt_list[]gs_list.

    sort gt_vbrk by vbeln.
    sort gt_transport by vbeln.

    loop at gt_vbrk into data(gs_vbrk).

    clear gs_list.
    MOVE-CORRESPONDING gs_vbrk to gs_list.

    read TABLE gt_transport into data(gs_transportwith key vbeln gs_vbrk BINARY SEARCH.
    if sy-subrc 0.  "parallel cursor method
    loop at gt_transport into gs_transport from sy-tabix.
    if gs_transport-vbeln ne gs_vbrk-vbeln.
       exit.
    endif.
    MOVE-CORRESPONDING gs_transport to gs_list.

    clear  gs_transport.
    endloop.

    endif.
     append gs_list to gt_list.

    clear gs_vbrk.
    endloop.

    gt_list1[] gt_list[].

ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display_data.

  CLEAR GV_CNTGT_FCAT[]GS_FCAT.

  GS_LAYOUT-CWIDTH_OPT 'X'.
  GS_LAYOUT-BOX_FNAME  'SEL'.
  GS_VARIANT-REPORT    SY-REPID.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'VBELN'.
  GS_FCAT-HOTSPOT   'X'.
  GS_FCAT-EMPHASIZE 'C5'.
  GS_FCAT-no_zero   'X'.
  GS_FCAT-COLTEXT 'Invoice No.'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'FKART'.
  GS_FCAT-COLTEXT   'Invoice Type'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'FKDAT'.
  GS_FCAT-COLTEXT   'Invoice Date'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'KUNAG'.
  GS_FCAT-no_zero   'X'.
  GS_FCAT-COLTEXT   'Payer'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'NAME1'.
  GS_FCAT-COLTEXT   'Sold To party'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'TRANSACTIONTYPE'.
  GS_FCAT-COLTEXT   'Transactiontype'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'TRANSACTIONTYPE'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'SUBSUPPLYTYPE'.
  GS_FCAT-COLTEXT   'Subsupplytype'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'SUBSUPPLYTYPE'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'OTHERSUPPLYTYPEDES'.
  GS_FCAT-COLTEXT   'Othersupplytypedes'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'OTHERSUPPLYTYPEDES'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'TRANSPORTERID'.
  GS_FCAT-COLTEXT   'Transporterid'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'TRANSPORTERID'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'TRANSPORTERNAME'.
  GS_FCAT-COLTEXT   'Transportername'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'TRANSPORTERNAME'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'TRANSPORTMODE'.
  GS_FCAT-COLTEXT   'Transportmode'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'TRANSPORTMODE'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'TRANSPORTDOCNO'.
  GS_FCAT-COLTEXT   'Transportdocno'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'TRANSPORTDOCNO'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'TRANSPORTDOCDATE'.
  GS_FCAT-COLTEXT   'Transportdocdate'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'TRANSPORTDOCDATE'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'DISTANCE'.
  GS_FCAT-COLTEXT   'Distance'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'DISTANCE'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'VEHICLENO'.
  GS_FCAT-COLTEXT   'Vehicleno'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'VEHICLENO'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'VEHICLETYPE'.
  GS_FCAT-COLTEXT   'Vehicletype'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'VEHICLETYPE'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'RETURNPERIOD'.
  GS_FCAT-COLTEXT   'RETURNPERIOD'.
  gs_fcat-edit      'X'.
  GS_FCAT-ref_table 'ZSD_TRANSPORT'.
  GS_FCAT-ref_field 'RETURNPERIOD'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       SY-REPID
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
*      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
*      I_CALLBACK_TOP_OF_PAGE   = 'TOP-OF-PAGE'
*  I_CALLBACK_HTML_TOP_OF_PAGE = 'HTML_TOP_OF_PAGE'
      IS_LAYOUT_LVC            GS_LAYOUT
      IT_FIELDCAT_LVC          gt_fcat[]
*     I_GRID_SETTINGS          = gs_grid
*     IT_EVENTS                = lt_evts[]
*      IT_EVENTS          = I_EVENTS
      I_DEFAULT                'X'
      I_SAVE                   'A'
      IS_VARIANT               GS_VARIANT
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER  =
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      T_OUTTAB                 GT_LIST[]
    EXCEPTIONS
      PROGRAM_ERROR            1
      OTHERS                   2.

  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


ENDFORM.

FORM PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
*  SET PF-STATUS 'ZPF1'.
*  SET PF-STATUS 'ZSTANDARD'.
ENDFORM.

FORM USER_COMMAND  USING R_UCOMM LIKE SY-UCOMM
                         RS_SELFIELD TYPE SLIS_SELFIELD.


DATA G_GRID_I TYPE REF TO CL_GUI_ALV_GRID.
DATA LV_REFRESH TYPE FLAG.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
*   EXPORTING
*     IR_SALV_FULLSCREEN_ADAPTER       =
   IMPORTING
*     ET_EXCLUDING                     =
*     E_REPID                          =
*     E_CALLBACK_PROGRAM               =
*     E_CALLBACK_ROUTINE               =
     E_GRID                           G_GRID_I
*     ET_FIELDCAT_LVC                  =
*     ER_TRACE                         =
*     E_FLG_NO_HTML                    =
*     ES_LAYOUT_KKBLO                  =
*     ES_SEL_HIDE                      =
*     ET_EVENT_EXIT                    =
*     ER_FORM_TOL                      =
*     ER_FORM_EOL                      =
            .

   if G_GRID_I is NOT INITIAL.
      LV_REFRESH 'X'.

    CALL METHOD G_GRID_I->CHECK_CHANGED_DATA
      CHANGING
        C_REFRESH LV_REFRESH.

   endif.

  CASE R_UCOMM.
   WHEN '&DATA_SAVE' or 'SAVE'.

      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          text_question 'Do you want to SAVE'
        IMPORTING
          answer        gv_ans.

      IF sy-subrc <> 0.
      ENDIF.

      IF gv_ans '2' OR gv_ans 'A'.
      ELSE.
        PERFORM save.
      ENDIF.

   when '&IC1'.
     clear gs_list.
     read TABLE gt_list into gs_list INDEX rs_selfield-tabindex.
     if gs_list-vbeln is NOT INITIAL.
        set PARAMETER ID 'VF' FIELD gs_list-vbeln.
        call TRANSACTION 'VF03' AND SKIP FIRST SCREEN.

     endif.

   ENDCASE.

    rs_selfield-refresh    'X'.
    rs_selfield-row_stable 'X'.
    rs_selfield-col_stable 'X'.

 CLEAR SY-UCOMM.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SAVE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM save.

"clear flag, if any chnage record found update and set flag = 'X' and give success msg

   loop at gt_list into gs_list.

   try.
   clear gs_list1.
   gs_list1 gt_list1[ vbeln gs_list-vbeln ].   "read table to compare if data change
   CATCH cx_root.
   ENDTRY.

   if gs_list1 ne gs_list.  "if old and new record not macth then update data els.e go to next record
   clear gs_transport.
   MOVE-CORRESPONDING gs_list to gs_transport.
   "add the date and time of creation
   gs_transport-CREATEDBY  sy-uname.
   gs_transport-CREATEDON  sy-datum.
   gs_transport-TIME       sy-uzeit.
   modify zsd_transport from gs_transport.

   gv_flag 'X'.

   endif.

   clear gs_list.
   endloop.

   if gv_flag 'X'.
      message 'Data saved successfully' TYPE 'I'.
      gt_list1[] gt_list[].      "pass new record to old record
   else.
      message 'No record change' TYPE 'I'.
   endif.

ENDFORM.


********
selection screen




Output :


On save data get stored in data base table zsd_transport



Post a Comment

0 Comments

Total Pageviews