Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

calling smartform from alv

Former Member
0 Likes
4,635

hello experts,

i create an alv program with calling smartform.

when i select one record it print that one record, but when i select more than two records it print the all records from alv,

so my question is how to print records in smartform that i have selected from alv.

thanks in advance.

hello experts,

i create an alv program with calling smartform.

when i select one record it print that one record, but when i select more than two records it print the all records from alv,

so my question is how to print records in smartform that i have selected from alv.

thanks in advance.

25 REPLIES 25
Read only

sravya_ch
Participant
0 Likes
3,290

Hi,

Take the below code as the sample.

when 'POST'. button placed in the Application Toolbar for an event after selecting the required rows

     DATA:et_index_rows TYPE lvc_t_row,

  et_row_no TYPE lvc_t_roid,

  wa_et_row_no LIKE LINE OF et_row_no,

  n TYPE i,

  row_id TYPE i.

  DATA: alv_vbeln TYPE vbeln,

        mess_text(30) TYPE c,

        txt_vbeln(10) TYPE c.

    DATA : wa_acchd LIKE acchd.

  CLEAR:et_index_rows,et_row_no.

  CALL METHOD alv_grid_e->get_selected_rows

    IMPORTING

      et_index_rows = et_index_rows

      et_row_no     = et_row_no.

  DESCRIBE TABLE et_index_rows LINES n.

  IF n GT 0.

    LOOP AT et_row_no INTO wa_et_row_no.

       READ TABLE it_monthly INTO wa_monthly INDEX wa_et_row_no-row_id.

      IF sy-subrc = 0.

        PERFORM subroutine.

        endif.

        endloop.

        endif.

  ENDCASE.

Read only

Former Member
0 Likes
3,290

thanks for your reply.

but i cant understand your code.

here is my code. in this code it is printing the all records.

so how can i print the selected records.

FORM USER_COMMAND USING UCOMM  TYPE SY-UCOMM

                         SELFIELD TYPE SLIS_SELFIELD.

   CASE SY-UCOMM.

     WHEN 'PRINT'.

      LOOP AT I_FINAL INTO W_FINAL.

        READ TABLE I_FINAL INTO W_FINAL INDEX SELFIELD-TABINDEX.

        IF SY-SUBRC = 0.

         W_FINAL-SEL = 'X'.

         APPEND W_FINAL TO I_SMART.

        ENDIF.

      ENDLOOP.

       PERFORM PRINT_DATA.

Read only

Former Member
0 Likes
3,290

Hi Chirag,

From your code, definitely all the records will append to I_SMART itab. that SY-SUBRC always equals 0 after READ TABLE.

Try below code:

FORM USER_COMMAND USING UCOMM  TYPE SY-UCOMM

                         SELFIELD TYPE SLIS_SELFIELD.

CASE SY-UCOMM.

      WHEN 'PRINT'.

DATA:et_index_rows TYPE lvc_t_row,

  et_row_no TYPE lvc_t_roid,

  wa_et_row_no LIKE LINE OF et_row_no,

  n TYPE i,

  row_id TYPE i.

DATA:ref1 TYPE REF TO cl_gui_alv_grid.

CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

        IMPORTING

          e_grid = ref1.

CALL METHOD ref1->get_selected_rows

    IMPORTING

      et_index_rows = et_index_rows

      et_row_no     = et_row_no.

LOOP AT et_row_no INTO wa_et_row_no.

       READ TABLE I_FINAL INTO W_FINAL INDEX wa_et_row_no-row_id.

       IF sy-subrc = 0.

           APPEND W_FINAL TO I_SMART.

      ENDIF.

ENDLOOP.

PERFORM PRINT_DATA.


ENDCASE.


ENDFORM.

Read only

0 Likes
3,290

Hi

1.gd_layout-box_fieldname = 'SEL'.

2. call alv fm

3. in user command.

CASE SY-UCOMM.

     WHEN 'PRINT'.

        refresh I_SMART.

      LOOP AT I_FINAL INTO W_FINAL where sel = 'X'.

        READ TABLE I_FINAL INTO W_FINAL INDEX SELFIELD-TABINDEX.

        IF SY-SUBRC = 0.

         W_FINAL-SEL = 'X'.

         APPEND W_FINAL TO I_SMART.

        ENDIF.

      ENDLOOP.

       PERFORM PRINT_DATA.

Read only

0 Likes
3,290

Hi,

gd_layout-box_fieldname = 'SEL'. this single line help to track your selected record in final table

Hope this will help you

Read only

Former Member
0 Likes
3,290

thanks sravya, dengyong and swadhin for your reply.

but it is not working at loop time.

when came at loop then it is going endloop.

and i also did that swadhin write.

Read only

0 Likes
3,290

Hi Chirag,

Can you provide your modified code. As per Dengyong Zhang solution, it should work.

Regards,

Praveer.

Read only

0 Likes
3,290

Hi,

In user command put a break point and  check in internal table SEL field is X for selected record or not. Second I_SMART is a internal table .

Share PERFORM PRINT_DATA code.

Read only

Former Member
0 Likes
3,290

here is my code.

TABLES : VBRK, VBRP, KNA1.

*&---------------------------------------------------------------------*

*& Type-Pool Declaration

*&---------------------------------------------------------------------*

TYPE-POOLS: SLIS.

*&---------------------------------------------------------------------*

*& ALV Data Declaration

*&---------------------------------------------------------------------*

DATA: IT_FIELDCAT            TYPE SLIS_T_FIELDCAT_ALV.

DATA: WA_FIELDCAT            LIKE LINE OF IT_FIELDCAT.

DATA: T_LIST_TOP_OF_PAGE     TYPE SLIS_T_LISTHEADER.

DATA: IT_EVENTS              TYPE SLIS_T_EVENT WITH HEADER LINE.

DATA: G_SAVE                 TYPE C VALUE 'A'.

DATA: GT_SORT TYPE SLIS_T_SORTINFO_ALV.

DATA: GX_SAVE                TYPE C VALUE 'A'.

DATA: GX_VARIANT             TYPE DISVARIANT.

DATA: G_VARIANT              TYPE DISVARIANT.

DATA: GS_LAYOUT              TYPE SLIS_LAYOUT_ALV.

DATA: T_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.

DATA: T_I_EVENT              TYPE SLIS_ALV_EVENT.

*&---------------------------------------------------------------------*

*& External Table Declaration                                          *

*&---------------------------------------------------------------------*

TYPES : BEGIN OF S_VBRK,

         VBELN TYPE VBELN_VF,

         VKORG TYPE VKORG,

         VTWEG TYPE VTWEG,

         SPART TYPE SPART,

         FKART TYPE FKART,

         FKDAT TYPE FKDAT,

         KUNRG TYPE KUNRG,

     END OF S_VBRK.

TYPES : BEGIN OF S_KNA1,

         KUNNR TYPE KUNNR,

         NAME1 TYPE NAME1_GP,

         ORT01 TYPE ORT01_GP,

     END OF S_KNA1.

TYPES : BEGIN OF S_VBRP,

         VBELN TYPE VBELN,

         POSNR TYPE VBRP-POSNR,

         FKIMG TYPE FKIMG,

         VRKME TYPE VRKME,

         MATNR TYPE MATNR,

         ARKTX TYPE ARKTX,

         WERKS TYPE WERKS_D,

         WKREG TYPE WKREG,

         AUBEL TYPE VBELN_VA,

         AUPOS TYPE POSNR_VA,

         NETWR TYPE NETWR_FP,

         MWSBP TYPE MWSBP,

     END OF S_VBRP.

*&---------------------------------------------------------------------*

*& Internal Table Declaration                                          *

*&---------------------------------------------------------------------*

DATA : I_VBRK TYPE STANDARD TABLE OF S_VBRK WITH HEADER LINE.

DATA : W_VBRK TYPE S_VBRK.

DATA : I_KNA1 TYPE STANDARD TABLE OF S_KNA1 WITH HEADER LINE.

DATA : W_KNA1 TYPE S_KNA1.

DATA : I_VBRP TYPE STANDARD TABLE OF S_VBRP WITH HEADER LINE.

DATA : W_VBRP TYPE S_VBRP.

DATA : I_FINAL TYPE STANDARD TABLE OF ZCH_FINALS WITH HEADER LINE.

DATA : W_FINAL TYPE ZCH_FINALS.

DATA : I_SMART TYPE STANDARD TABLE OF ZCH_FINALS WITH HEADER LINE.

DATA : W_SMART TYPE ZCH_FINALS.

DATA : F_NAME TYPE RS38L_FNAM.

DATA : V_INDEX TYPE SY-TABIX.

DATA : V_COUNT TYPE I.

*&---------------------------------------------------------------------*

*& Variables Declaration                                               *

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*& Selection-screen                                                    *

*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-T01.

SELECT-OPTIONS : S_VBELN FOR VBRK-VBELN,

                  S_FKART FOR VBRK-VBELN,

                  S_KUNRG FOR VBRK-KUNRG,

                  S_FKDAT FOR VBRK-FKDAT OBLIGATORY,

                  S_VKORG FOR VBRK-VKORG,

                  S_VTWEG FOR VBRK-VTWEG.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN END   OF BLOCK BLK1.

*&---------------------------------------------------------------------*

*& At Selection Screen                                                 *

*&---------------------------------------------------------------------*

AT SELECTION-SCREEN.

*&---------------------------------------------------------------------*

*& Initialization Event                                                *

*&---------------------------------------------------------------------*

INITIALIZATION.

*&---------------------------------------------------------------------*

*& Start of Selection Event                                            *

*&---------------------------------------------------------------------*

START-OF-SELECTION.

   PERFORM GET_DATA.

   PERFORM ALV_FIELDCAT.

   PERFORM GET_EVENTS.

   PERFORM SUB_COMMENT_BUILD USING T_LIST_TOP_OF_PAGE.

   PERFORM ALV_DISPLAY.

*&---------------------------------------------------------------------*

*&      Form  get_data

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM GET_DATA.

   SELECT VBELN VKORG VTWEG SPART FKART FKDAT KUNRG

     FROM VBRK

     INTO TABLE I_VBRK

     WHERE VBELN IN S_VBELN AND

           FKART IN S_FKART AND

           KUNRG IN S_KUNRG AND

           FKDAT IN S_FKDAT AND

           VKORG IN S_VKORG AND

           VTWEG IN S_VTWEG.

   IF I_VBRK IS INITIAL.

     SORT I_VBRK BY VBELN.

     SELECT KUNNR NAME1 ORT01

       FROM KNA1

       INTO TABLE I_KNA1

       FOR ALL ENTRIES IN I_VBRK

       WHERE KUNNR = I_VBRK-KUNRG.

     SORT I_KNA1 BY NAME1.

   ENDIF.

   IF I_VBRK IS INITIAL.

     SORT I_VBRK BY VBELN.

     SELECT VBELN POSNR FKIMG VRKME MATNR ARKTX WERKS WKREG AUBEL AUPOS NETWR MWSBP

       FROM VBRP

       INTO TABLE I_VBRP

       FOR ALL ENTRIES IN I_VBRK

       WHERE VBELN = I_VBRK-VBELN.

     SORT I_VBRP BY MATNR.

   ENDIF.

   LOOP AT I_VBRP INTO W_VBRP.

     IF W_VBRP IS NOT INITIAL.

       W_FINAL-POSNR = W_VBRP-POSNR.

       W_FINAL-FKIMG = W_VBRP-FKIMG.

       W_FINAL-VRKME = W_VBRP-VRKME.

       W_FINAL-MATNR = W_VBRP-MATNR.

       W_FINAL-ARKTX = W_VBRP-ARKTX.

       W_FINAL-WERKS = W_VBRP-WERKS.

       W_FINAL-WKREG = W_VBRP-WKREG.

       W_FINAL-AUBEL = W_VBRP-AUBEL.

       W_FINAL-AUPOS = W_VBRP-AUPOS.

       W_FINAL-NETWR = W_VBRP-NETWR.

       W_FINAL-MWSBP = W_VBRP-MWSBP.

       READ TABLE I_VBRK INTO W_VBRK WITH KEY VBELN = W_VBRP-VBELN BINARY SEARCH.

       W_FINAL-VBELN = W_VBRK-VBELN.

       W_FINAL-VKORG = W_VBRK-VKORG.

       W_FINAL-VTWEG = W_VBRK-VTWEG.

       W_FINAL-SPART = W_VBRK-SPART.

       W_FINAL-FKART = W_VBRK-FKART.

       W_FINAL-FKDAT = W_VBRK-FKDAT.

       W_FINAL-KUNRG = W_VBRK-KUNRG.

       READ TABLE I_KNA1 INTO W_KNA1 WITH KEY KUNNR = W_VBRK-KUNRG BINARY SEARCH.

*      W_FINAL-KUNNR = W_KNA1-KUNNR.

       W_FINAL-NAME1 = W_KNA1-NAME1.

       W_FINAL-ORT01 = W_KNA1-ORT01.

     ENDIF.

     APPEND W_FINAL TO I_FINAL.

   ENDLOOP.

*  MESSAGE I000(ZSALES) WITH SY-DBCNT.

ENDFORM.                    "get_data

*&---------------------------------------------------------------------*

*&      Form  ALV_FIELDCAT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM ALV_FIELDCAT .

   DATA: COUNTER TYPE I.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'CHECK'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-CHECKBOX   = 'X'.

   WA_FIELDCAT-EDIT       = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'VBELN'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'INVOICE NO'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   WA_FIELDCAT-HOTSPOT    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'VKORG'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'SALES ORG.'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'VTWEG'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'DIS. CHANNEL'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'SPART'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'DIV.'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'FKART'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'BILLING TYPE'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'KUNRG'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'PAYER'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'NAME1'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'CUSTOMER NAME'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'ORT01'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'CITY'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'POSNR'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'BILLING ITEM'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'FKIMG'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'BILLED QTY.'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'VRKME'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'SALES UNIT'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'MATNR'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'MATERIAL NO'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'ARKTX'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'MATERIAL DESCR.'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'WERKS'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'PLANT'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'WKREG'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'REGION'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'AUBEL'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'SALES ORDER NO'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'AUPOS'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'SALES ORDER ITEM'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'NETWR'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'NET VALUE'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

   COUNTER = COUNTER + 1.

   WA_FIELDCAT-COL_POS    = COUNTER.

   WA_FIELDCAT-FIELDNAME  = 'MWSBP'.

   WA_FIELDCAT-TABNAME    = 'I_FINAL'.

   WA_FIELDCAT-SELTEXT_L  = 'TAX AMOUNT'.

   WA_FIELDCAT-NO_ZERO    = 'X'.

   APPEND WA_FIELDCAT TO IT_FIELDCAT.

   CLEAR WA_FIELDCAT.

ENDFORM.                    " ALV_FIELDCAT

*&---------------------------------------------------------------------*

*&      Form  ALV_DISPLAY

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM ALV_DISPLAY .

   GS_LAYOUT-ZEBRA                = 'X'.

   GS_LAYOUT-DETAIL_POPUP         = 'X'.

   GS_LAYOUT-DETAIL_INITIAL_LINES = 'X'.

   GS_LAYOUT-COLWIDTH_OPTIMIZE    = 'X'.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

     EXPORTING

       IT_FIELDCAT              = IT_FIELDCAT

       IT_EVENTS                = IT_EVENTS[]

       I_CALLBACK_PROGRAM       = SY-REPID

       IS_LAYOUT                = GS_LAYOUT

       IT_SORT                  = GT_SORT[]

       I_SAVE                   = G_SAVE

       IS_VARIANT               = GX_VARIANT

       I_CALLBACK_PF_STATUS_SET = 'ZSTANDARD'

       I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'

     TABLES

       T_OUTTAB                 = I_FINAL[].

   .

ENDFORM.                    " ALV_DISPLAY

*&---------------------------------------------------------------------*

*&      Form  user_command

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->UCOMM      text

*      -->SELFIELD   text

*----------------------------------------------------------------------*

FORM USER_COMMAND USING UCOMM  TYPE SY-UCOMM

                         SELFIELD TYPE SLIS_SELFIELD.

   DATA: GD_REPID LIKE SY-REPID,

         REF_GRID TYPE REF TO CL_GUI_ALV_GRID.

   IF REF_GRID IS INITIAL.

     CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

       IMPORTING

         E_GRID = REF_GRID.

   ENDIF.

*  IF NOT REF_GRID IS INITIAL.

*    CALL METHOD REF_GRID->CHECK_CHANGED_DATA.

*  ENDIF.

   DATA : FLAG TYPE I VALUE 0.

   CASE UCOMM.

     WHEN 'PRINT'.

       LOOP AT I_FINAL INTO W_FINAL.

           SELFIELD-REFRESH = 'X'.

           READ TABLE I_FINAL INTO W_FINAL INDEX SELFIELD-TABINDEX.

           APPEND W_FINAL TO I_SMART.

       ENDLOOP.

         PERFORM PRINT_DATA.

     ENDCASE.

   ENDFORM.                    "user_command

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->RT_EXTAB   text

*----------------------------------------------------------------------*

FORM ZSTANDARD USING RT_EXTAB TYPE SLIS_T_EXTAB.

*  BREAK-POINT.

   SET PF-STATUS 'ZSTANDARD'.

ENDFORM.                    "

*&---------------------------------------------------------------------*

*&      Form  print_data

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM PRINT_DATA.

   CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

     EXPORTING

       FORMNAME                 = 'ZCH_SMART'

*       VARIANT                  = ' '

*       DIRECT_CALL              = ' '

    IMPORTING

      FM_NAME                  = F_NAME

*     EXCEPTIONS

*       NO_FORM                  = 1

*       NO_FUNCTION_MODULE       = 2

*       OTHERS                   = 3

             .

   IF SY-SUBRC <> 0.

* Implement suitable error handling here

   ENDIF.

   CALL FUNCTION F_NAME

     TABLES

       I_SMART = I_SMART.

   IF SY-SUBRC <> 0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

   ENDIF.

ENDFORM.                    "print_data

Read only

0 Likes
3,290

Hi Chirag,

If you check Dengyong Zhang  solution, he provided to get the selected rows information.

And you applied to check the changes data.

Make the changes like

CALL METHOD REF_GRID->get_selected_rows

    IMPORTING

      et_index_rows = et_index_rows

      et_row_no     = et_row_no.

LOOP AT et_row_no INTO wa_et_row_no.

       READ TABLE I_FINAL INTO W_FINAL INDEX wa_et_row_no-row_id.

       IF sy-subrc = 0.

           APPEND W_FINAL TO I_SMART.

      ENDIF.

ENDLOOP.

It will work..

Regards,

praveer.

Read only

0 Likes
3,290

Hi Chirag,

Problem in you User command :

CASE UCOMM.

     WHEN 'PRINT'.

       LOOP AT I_FINAL INTO W_FINAL.

           SELFIELD-REFRESH = 'X'.

           READ TABLE I_FINAL INTO W_FINAL INDEX SELFIELD-TABINDEX.

           APPEND W_FINAL TO I_SMART.

       ENDLOOP.

         PERFORM PRINT_DATA.

     ENDCASE.

Instead of above write below code (Only Bold):

CASE UCOMM.

     WHEN 'PRINT'.

       LOOP AT I_FINAL INTO W_FINAL.

          IF W_FINAL-CHECK =  'X'.

                APPEND W_FINAL TO I_SMART.

          END IF.

       ENDLOOP.

         PERFORM PRINT_DATA.

     ENDCASE.


Regards,

Hitesh

Read only

Former Member
0 Likes
3,290

thank you for reply and thanks for your help.

when i put break point on case and when it came to loop, its not going into loop.

so problem is on loop.

Read only

0 Likes
3,290

Hi Chirag,

Glad to know that you have resolved your issue.

Please mark the helpful answers or Correct answer for everyone who has helped you reach the solution.

Regards,

Hitesh

Read only

Former Member
0 Likes
3,290

no problem is not solved.

loop is not triggered.

Read only

0 Likes
3,290

Hi Chirag,

I already told you, you have to change the code with respect to given solution.

Regards,

Praveer,

Read only

0 Likes
3,290

Remove comment for :


CALL METHOD REF_GRID->CHECK_CHANGED_DATA.


and check.


Regards,

Hitesh

Read only

Former Member
0 Likes
3,290

yes i changed the code that u given.

but when break point is on loop

it is not triggering.

Read only

Former Member
0 Likes
3,290

if i remove comment for CALL METHOD REF_GRID->CHECK_CHANGED_DATA.

it will through the error that 'field symbol is not assigned' 'getwa_not_assigned'.

for this reason i comment on that.

Read only

0 Likes
3,290

provide your entire code.

Read only

0 Likes
3,290

Hi Chirag,

Please find below code to write in USER_COMMAND.

FORM user_command USING ucomm  TYPE sy-ucomm

                         selfield TYPE slis_selfield.

  DATA: gd_repid      LIKE sy-repid,

        ref_grid      TYPE REF TO cl_gui_alv_grid,

        et_index_rows TYPE lvc_t_row,

        et_row_no     TYPE lvc_t_roid.

  IF ref_grid IS INITIAL.

    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

      IMPORTING

        e_grid = ref_grid.

  ENDIF.

  CALL METHOD ref_grid->get_selected_rows

    IMPORTING

      et_index_rows = et_index_rows

      et_row_no     = et_row_no.

  LOOP AT et_row_no INTO wa_et_row_no.

    READ TABLE i_final INTO w_final INDEX wa_et_row_no-row_id.

    IF sy-subrc = 0.

      APPEND w_final TO i_smart.

    ENDIF.

  ENDLOOP.

  PERFORM print_data.

ENDFORM.                    "user_command

replace with you code and check..

regards,

Praveer.

Read only

Former Member
0 Likes
3,290

i think there is an error in CALL METHOD REF_GRID->CHECK_CHANGED_DATA.

bcz when program is running it shows dump on this method that 'getwa_not_assigned'.

and when i debug the code sel field is not showing 'X'. so, i can not print the records.

Read only

0 Likes
3,290

Dummy code

REPORT zovh_alv_row_selection.

"Variables

DATA:

      BEGIN OF it_output OCCURS 0,

        select TYPE c,  "This variable stores the value when row selected

        bukrs  TYPE t001-bukrs,

        butxt  TYPE t001-butxt,

      END OF it_output.

TYPE-POOLS:slis.

DATA:

      it_events            TYPE STANDARD TABLE OF slis_alv_event,

      it_fieldcat          TYPE STANDARD TABLE OF slis_fieldcat_alv,

      wa_fieldcat          TYPE slis_fieldcat_alv,

      wa_events            TYPE slis_alv_event,

      wa_layout            TYPE slis_layout_alv.

DATA:g_program            TYPE sy-repid VALUE sy-repid.



START-OF-SELECTION.

  SELECT * FROM t001 INTO CORRESPONDING FIELDS OF TABLE it_output UP TO 100 ROWS.

  "Field Catalog creation

  DEFINE fieldcatalog.

    wa_fieldcat-fieldname = &1.

    wa_fieldcat-tabname   = &2.

    wa_fieldcat-seltext_l = &3.

    append wa_fieldcat to it_fieldcat.

    clear  wa_fieldcat.

  END-OF-DEFINITION.

  fieldcatalog: "Column table       col text

                'BUKRS' 'IT_OUTPUT' 'BUKRS',

                'BUTXT' 'IT_OUTPUT' 'BUTXT'.



  "Layout design

  wa_layout-box_fieldname     = 'SELECT'. "This has to be set to get selection

  wa_layout-colwidth_optimize = 'X'.

  "Events tables

*  wa_events-name              = 'PF_STATUS_SET'.

*  wa_events-form              = 'PF_STATUS_SET'.

*  APPEND wa_events TO it_events.

*  CLEAR wa_events.



  wa_events-name              = 'USER_COMMAND'.

  wa_events-form              = 'USER_COMMAND'.

  APPEND wa_events TO it_events.

  CLEAR wa_events.

  "Table Display in ALV format

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

    EXPORTING

      i_callback_program = g_program

      is_layout          = wa_layout

      it_fieldcat        = it_fieldcat

      it_events          = it_events

    TABLES

      t_outtab           = it_output.

*&---------------------------------------------------------------------*

*&      Form  PF_STATUS_SET

*&---------------------------------------------------------------------*

FORM pf_status_set USING rt_extab TYPE slis_t_extab.

*  SET PF-STATUS 'ZTEST'.

* 1. When you set Pf status ZTEST, standard application tools will be removed.

* 2. Goto SE41 give program 'SAPLKKBL' and status 'STANDARD_FULLSCREEN'.

* 3. Copy the status from those to ZTEST of our program. Now you will see all standard functions.

ENDFORM.                    "PF_STATUS_SET



*------------------------------------------------------------------*

*       FORM USER_COMMAND                                          *

*------------------------------------------------------------------*

FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.

* Check function code

  CASE r_ucomm.

    WHEN 'DISPLAY'"user presses SAVE

      LOOP AT it_output.

        IF it_output-select EQ 'X'.

          "Process records that have been selected

          WRITE:/ it_output.

        ENDIF.

      ENDLOOP.

  ENDCASE.

ENDFORM.

******-Maintain dummy Pf status

Read only

SwadhinGhatuary
Active Contributor
0 Likes
3,290

One more example

*&--------------------------------------------------------------*
*& Report  ZDEMO_ALVGRID_SELROW                                *
*&                                                             *
*&-------------------------------------------------------------*
*&                                                             *
*& Example of a simple ALV Grid Report                         *
*& ...................................                         *
*&                                                             *
*& The basic ALV grid, Enhanced to display capture each row a  *
*& user has selected                                           *
*&-------------------------------------------------------------*

REPORT  zdemo_alvgrid_selrow                 .

TABLES:     ekko.

type-pools: slis.                                 "ALV Declarations
*Data Declaration
*----------------
TYPES: BEGIN OF t_ekko,
  SEl,                         "stores which row user has selected
  ebeln TYPE ekpo-ebeln,
  ebelp TYPE ekpo-ebelp,
  statu TYPE ekpo-statu,
  aedat TYPE ekpo-aedat,
  matnr TYPE ekpo-matnr,
  menge TYPE ekpo-menge,
  meins TYPE ekpo-meins,
  netpr TYPE ekpo-netpr,
  peinh TYPE ekpo-peinh,
END OF t_ekko.

DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
      wa_ekko TYPE t_ekko.

*ALV data declarations
data: fieldcatalog type slis_t_fieldcat_alv with header line,
      gd_tab_group type slis_t_sp_group_alv,
      gd_layout    type slis_layout_alv,
      gd_repid     like sy-repid.


************************************************************************
*Start-of-selection.
START-OF-SELECTION.

perform data_retrieval.
perform build_fieldcatalog.
perform build_layout.
perform display_alv_report.


*&---------------------------------------------------------------------*
*&      Form  BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*       Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
form build_fieldcatalog.

* There are a number of ways to create a fieldcat.
* For the purpose of this example i will build the fieldcatalog manualy
* by populating the internal table fields individually and then
* appending the rows. This method can be the most time consuming but can
* also allow you  more control of the final product.

* Beware though, you need to ensure that all fields required are
* populated. When using some of functionality available via ALV, such as
* total. You may need to provide more information than if you were
* simply displaying the result
*               I.e. Field type may be required in-order for
*                    the 'TOTAL' function to work.

  fieldcatalog-fieldname   = 'EBELN'.
  fieldcatalog-seltext_m   = 'Purchase Order'.
  fieldcatalog-col_pos     = 0.
  fieldcatalog-outputlen   = 10.
  fieldcatalog-emphasize   = 'X'.
  fieldcatalog-key         = 'X'.
*  fieldcatalog-do_sum      = 'X'.
*  fieldcatalog-no_zero     = 'X'.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'EBELP'.
  fieldcatalog-seltext_m   = 'PO Item'.
  fieldcatalog-col_pos     = 1.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'STATU'.
  fieldcatalog-seltext_m   = 'Status'.
  fieldcatalog-col_pos     = 2.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'AEDAT'.
  fieldcatalog-seltext_m   = 'Item change date'.
  fieldcatalog-col_pos     = 3.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'MATNR'.
  fieldcatalog-seltext_m   = 'Material Number'.
  fieldcatalog-col_pos     = 4.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'MENGE'.
  fieldcatalog-seltext_m   = 'PO quantity'.
  fieldcatalog-col_pos     = 5.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'MEINS'.
  fieldcatalog-seltext_m   = 'Order Unit'.
  fieldcatalog-col_pos     = 6.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'NETPR'.
  fieldcatalog-seltext_m   = 'Net Price'.
  fieldcatalog-col_pos     = 7.
  fieldcatalog-outputlen   = 15.
  fieldcatalog-do_sum      = 'X'.        "Display column total
  fieldcatalog-datatype     = 'CURR'.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.

  fieldcatalog-fieldname   = 'PEINH'.
  fieldcatalog-seltext_m   = 'Price Unit'.
  fieldcatalog-col_pos     = 8.
  append fieldcatalog to fieldcatalog.
  clear  fieldcatalog.
endform.                    " BUILD_FIELDCATALOG


*&---------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&---------------------------------------------------------------------*
*       Build layout for ALV grid report
*----------------------------------------------------------------------*
form build_layout.
  gd_layout-box_fieldname     = 'SEL'.
                                 "set field name to store row selection
  gd_layout-edit              = 'X'. "makes whole ALV table editable
  gd_layout-zebra             = 'X'.
endform.                    " BUILD_LAYOUT


*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*       Display report using ALV grid
*----------------------------------------------------------------------*
form display_alv_report.
  gd_repid = sy-repid.
  call function 'REUSE_ALV_GRID_DISPLAY'
       exporting
            i_callback_program      = gd_repid
*            i_callback_top_of_page   = 'TOP-OF-PAGE'  "see FORM
            i_callback_user_command = 'USER_COMMAND'
*            i_grid_title           = outtext
            is_layout               = gd_layout
            it_fieldcat             = fieldcatalog[]
*            it_special_groups       = gd_tabgroup
*            IT_EVENTS                = GT_XEVENTS
            i_save                  = 'X'
*            is_variant              = z_template

       tables
            t_outtab                = it_ekko
       exceptions
            program_error           = 1
            others                  = 2.
  if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.
endform.                    " DISPLAY_ALV_REPORT


*&---------------------------------------------------------------------*
*&      Form  DATA_RETRIEVAL
*&---------------------------------------------------------------------*
*       Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
form data_retrieval.

select ebeln ebelp statu aedat matnr menge meins netpr peinh
up to 10 rows
  from ekpo
  into corresponding fields of table it_ekko.
endform.                    " DATA_RETRIEVAL


*------------------------------------------------------------------*
*       FORM USER_COMMAND                                          *
*------------------------------------------------------------------*
*       --> R_UCOMM                                                *
*       --> RS_SELFIELD                                            *
*------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
                  rs_selfield TYPE slis_selfield.

* Check function code
  CASE r_ucomm.
    WHEN '&IC1'.
*   Check field clicked on within ALVgrid report
    IF rs_selfield-fieldname = 'EBELN'.
*     Read data table, using index of row user clicked on
      READ TABLE it_ekko INTO wa_ekko INDEX rs_selfield-tabindex.
*     Set parameter ID for transaction screen field
      SET PARAMETER ID 'BES' FIELD wa_ekko-ebeln.
*     Sxecute transaction ME23N, and skip initial data entry screen
      CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
    ENDIF.

    WHEN '&DATA_SAVE'.  "user presses SAVE
    loop at it_ekko into wa_ekko.
      if wa_ekko-sel EQ 'X'.
*       Process records that have been selected
      endif.
    endloop.
  ENDCASE.
ENDFORM.

reff from --Row selection of ALV grid

Read only

Former Member
0 Likes
3,290

thank you to all for your reply.

i solved my problem.

and again thank you for helping me.

Read only

Former Member
0 Likes
3,290

now i have a question is how i can print alv records in smartforms different pages.

i mean i want print 1 record in one page in smartform and second record should be print in second page.