2015 Jul 02 5:33 AM
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.
2015 Jul 02 6:02 AM
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.
2015 Jul 02 6:20 AM
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.
2015 Jul 02 7:12 AM
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.
2015 Jul 02 7:12 AM
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.
2015 Jul 02 7:14 AM
Hi,
gd_layout-box_fieldname = 'SEL'. this single line help to track your selected record in final table
Hope this will help you
2015 Jul 02 8:02 AM
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.
2015 Jul 02 8:17 AM
Hi Chirag,
Can you provide your modified code. As per Dengyong Zhang solution, it should work.
Regards,
Praveer.
2015 Jul 02 8:35 AM
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.
2015 Jul 02 8:43 AM
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
2015 Jul 02 8:52 AM
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.
2015 Jul 02 9:01 AM
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
2015 Jul 02 9:04 AM
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.
2015 Jul 02 9:11 AM
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
2015 Jul 02 9:59 AM
2015 Jul 02 10:02 AM
Hi Chirag,
I already told you, you have to change the code with respect to given solution.
Regards,
Praveer,
2015 Jul 02 10:11 AM
Remove comment for :
CALL METHOD REF_GRID->CHECK_CHANGED_DATA.
and check.
Regards,
Hitesh
2015 Jul 02 10:08 AM
yes i changed the code that u given.
but when break point is on loop
it is not triggering.
2015 Jul 02 10:20 AM
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.
2015 Jul 02 10:34 AM
2015 Jul 02 10:53 AM
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.
2015 Jul 02 11:02 AM
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.
2015 Jul 02 11:58 AM
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
2015 Jul 02 12:06 PM
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
2015 Jul 02 12:38 PM
thank you to all for your reply.
i solved my problem.
and again thank you for helping me.
2015 Jul 02 1:01 PM
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.