2009 Aug 25 8:04 AM
Dear Experts,
How to add pushbutton in alv report.....
*&---------------------------------------------------------------------*
*& Report ZTT_TEST_ALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTT_TEST_ALV.
*data declarations
type-pools : SLIS.
* data : BEGIN OF wa_kna1,
* kunnr type kunnr,
* name1 type name1,
* end of wa_kna1,
* it_kna1 like tABLE OF wa_kna1.
data : begin of wa_mara,
matnr type matnr,
end of wa_mara,
it_mara like table of wa_mara.
data : it_fcat type slis_t_fieldcat_alv,
wa_fcat like line of it_fcat.
*selection screen
SELECTION-SCREEN begin of block k with frame title text-001.
* select-OPTIONS : s_kunnr for wa_kna1-kunnr.
select-OPTIONS : s_matnr for wa_mara-matnr.
SELECTION-SCREEN end of block k.
*select auery
*SELECT kunnr name1 INTO table it_kna1 from kna1 where kunnr in s_kunnr.
select matnr into table it_mara from mara where matnr in s_matnr.
*for displaying fieldcatalog
PERFORM fcat using '1' 'MATNR' 'material Number' 'C410' '20'.
* PERFORM fcat using '2' 'NAME1' 'Customer Name' 'C410' '36'.
*for displaying output
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = ' '
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = 'Report for Customer Details'
* I_GRID_SETTINGS =
* IS_LAYOUT =
IT_FIELDCAT = it_fcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_mara.
* 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.
*CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
* EXPORTING
**** I_INTERFACE_CHECK = ' '
**** I_CALLBACK_PROGRAM =
**** I_CALLBACK_PF_STATUS_SET = ' '
**** I_CALLBACK_USER_COMMAND = ' '
**** IS_LAYOUT =
* IT_FIELDCAT = it_fcat
**** IT_EXCLUDING =
**** IT_SPECIAL_GROUPS =
**** IT_SORT =
**** IT_FILTER =
**** IS_SEL_HIDE =
**** I_SCREEN_START_COLUMN = 0
**** I_SCREEN_START_LINE = 0
**** I_SCREEN_END_COLUMN = 0
**** I_SCREEN_END_LINE = 0
**** I_DEFAULT = 'X'
**** I_SAVE = ' '
**** IS_VARIANT =
**** IT_EVENTS =
**** IT_EVENT_EXIT =
*** i_tabname_header =
*** i_tabname_item =
**** I_STRUCTURE_NAME_HEADER =
**** I_STRUCTURE_NAME_ITEM =
*** is_keyinfo =
**** IS_PRINT =
**** IS_REPREP_ID =
**** I_BYPASSING_BUFFER =
**** I_BUFFER_ACTIVE =
**** IR_SALV_HIERSEQ_ADAPTER =
**** IT_EXCEPT_QINFO =
**** I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
**** IMPORTING
**** E_EXIT_CAUSED_BY_CALLER =
**** ES_EXIT_CAUSED_BY_USER =
* tables
** t_outtab_header = it_
* t_outtab_item = it_kna1.
**** 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.
*
*&---------------------------------------------------------------------*
*& Form FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0052 text
* -->P_0053 text
* -->P_0054 text
*----------------------------------------------------------------------*
form FCAT using fp_col_pos
fp_fieldname
fp_seltext_m
fp_emphasize
fp_outputlen..
wa_fcat-col_pos = fp_col_pos.
wa_fcat-fieldname = fp_fieldname.
wa_fcat-seltext_m = fp_seltext_m.
wa_fcat-emphasize = fp_emphasize.
wa_fcat-outputlen = fp_outputlen.
append wa_fcat to it_fcat.
clear : wa_fcat.
endform. " FCAT
FORM SET_PF_STATUS .
SET PF-STATUS 'ZNEWSTATUS' .
"Copy of 'STANDARD' pf_status from fgroup SALV
endform.
i need one push button in alv output display.
Thanks and Regards,
Thirukumaran. R
2009 Aug 25 12:13 PM
Hi,
After populating the datas in to your internal table,
You have to call this FORM,
FORM PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'XXX'.
ENDFORM. " which is taken from standard
Then,
FORM YYY USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. "which is taken from standard
CASE R_UCOMM.
WHEN 'YYY'.
CALL TRANSACTION 'SE11'.
ENDCASE.
ENDFORM.
NOTE: YYY is your okcode or function code.
and while calling 'REUSE_ALV_GRID_DISPLAY' ,you havt to follow the below codes......
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
I_CALLBACK_USER_COMMAND = 'YYY'
IS_LAYOUT = LAYOUT "Layout
IT_FIELDCAT = FCAT "Fieldcatalog
I_DEFAULT = 'X'
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
Try this.
regards,
SAKTHIVEL.VT
Dear Experts,
How to add pushbutton in alv report.....
*&---------------------------------------------------------------------*
*& Report ZTT_TEST_ALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTT_TEST_ALV.
*data declarations
type-pools : SLIS.
* data : BEGIN OF wa_kna1,
* kunnr type kunnr,
* name1 type name1,
* end of wa_kna1,
* it_kna1 like tABLE OF wa_kna1.
data : begin of wa_mara,
matnr type matnr,
end of wa_mara,
it_mara like table of wa_mara.
data : it_fcat type slis_t_fieldcat_alv,
wa_fcat like line of it_fcat.
*selection screen
SELECTION-SCREEN begin of block k with frame title text-001.
* select-OPTIONS : s_kunnr for wa_kna1-kunnr.
select-OPTIONS : s_matnr for wa_mara-matnr.
SELECTION-SCREEN end of block k.
*select auery
*SELECT kunnr name1 INTO table it_kna1 from kna1 where kunnr in s_kunnr.
select matnr into table it_mara from mara where matnr in s_matnr.
*for displaying fieldcatalog
PERFORM fcat using '1' 'MATNR' 'material Number' 'C410' '20'.
* PERFORM fcat using '2' 'NAME1' 'Customer Name' 'C410' '36'.
*for displaying output
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
* I_CALLBACK_PROGRAM = ' '
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
* I_CALLBACK_USER_COMMAND = ' '
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
I_GRID_TITLE = 'Report for Customer Details'
* I_GRID_SETTINGS =
* IS_LAYOUT =
IT_FIELDCAT = it_fcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_mara.
* 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.
*CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
* EXPORTING
**** I_INTERFACE_CHECK = ' '
**** I_CALLBACK_PROGRAM =
**** I_CALLBACK_PF_STATUS_SET = ' '
**** I_CALLBACK_USER_COMMAND = ' '
**** IS_LAYOUT =
* IT_FIELDCAT = it_fcat
**** IT_EXCLUDING =
**** IT_SPECIAL_GROUPS =
**** IT_SORT =
**** IT_FILTER =
**** IS_SEL_HIDE =
**** I_SCREEN_START_COLUMN = 0
**** I_SCREEN_START_LINE = 0
**** I_SCREEN_END_COLUMN = 0
**** I_SCREEN_END_LINE = 0
**** I_DEFAULT = 'X'
**** I_SAVE = ' '
**** IS_VARIANT =
**** IT_EVENTS =
**** IT_EVENT_EXIT =
*** i_tabname_header =
*** i_tabname_item =
**** I_STRUCTURE_NAME_HEADER =
**** I_STRUCTURE_NAME_ITEM =
*** is_keyinfo =
**** IS_PRINT =
**** IS_REPREP_ID =
**** I_BYPASSING_BUFFER =
**** I_BUFFER_ACTIVE =
**** IR_SALV_HIERSEQ_ADAPTER =
**** IT_EXCEPT_QINFO =
**** I_SUPPRESS_EMPTY_DATA = ABAP_FALSE
**** IMPORTING
**** E_EXIT_CAUSED_BY_CALLER =
**** ES_EXIT_CAUSED_BY_USER =
* tables
** t_outtab_header = it_
* t_outtab_item = it_kna1.
**** 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.
*
*&---------------------------------------------------------------------*
*& Form FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0052 text
* -->P_0053 text
* -->P_0054 text
*----------------------------------------------------------------------*
form FCAT using fp_col_pos
fp_fieldname
fp_seltext_m
fp_emphasize
fp_outputlen..
wa_fcat-col_pos = fp_col_pos.
wa_fcat-fieldname = fp_fieldname.
wa_fcat-seltext_m = fp_seltext_m.
wa_fcat-emphasize = fp_emphasize.
wa_fcat-outputlen = fp_outputlen.
append wa_fcat to it_fcat.
clear : wa_fcat.
endform. " FCAT
FORM SET_PF_STATUS .
SET PF-STATUS 'ZNEWSTATUS' .
"Copy of 'STANDARD' pf_status from fgroup SALV
endform.
i need one push button in alv output display.
Thanks and Regards,
Thirukumaran. R
2009 Aug 25 8:10 AM
Hi,
Create a pf status , in that create a pushbutton and write the logic in user-command of user command module.
2009 Aug 25 8:16 AM
Create a PF status. Go to se41 and open the PF status in change mode and add a newbutton there. It will be displayed in application tool bar when the report is displayed.
or check this link
http://help-abap.blogspot.com/search/label/SALV%20Tutorial
Regards,
Pushkara
2009 Aug 25 8:19 AM
2009 Aug 25 8:24 AM
use command - SET PF-STATUS 'statusname'
now double click on statusname
now add a button and corrosponding code in statusname
save and activate it
write code for this code in 'at user command'
Edited by: mayank jain on Aug 25, 2009 9:24 AM
2009 Aug 25 12:13 PM
Hi,
After populating the datas in to your internal table,
You have to call this FORM,
FORM PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'XXX'.
ENDFORM. " which is taken from standard
Then,
FORM YYY USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD. "which is taken from standard
CASE R_UCOMM.
WHEN 'YYY'.
CALL TRANSACTION 'SE11'.
ENDCASE.
ENDFORM.
NOTE: YYY is your okcode or function code.
and while calling 'REUSE_ALV_GRID_DISPLAY' ,you havt to follow the below codes......
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
I_CALLBACK_USER_COMMAND = 'YYY'
IS_LAYOUT = LAYOUT "Layout
IT_FIELDCAT = FCAT "Fieldcatalog
I_DEFAULT = 'X'
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
Try this.
regards,
SAKTHIVEL.VT
2009 Aug 25 1:41 PM
hi sakthi vel give one simple alv report with pushbutton.
Thanks and Regards,
Thirukumaran. R
2009 Aug 25 1:59 PM
2009 Aug 26 4:39 AM
HI THIRU TRY FOLLOWING CODES:
&----
*& Report ZSAMPLE
*&
&----
*&
*&
&----
REPORT ZSAMPLE.
TABLES:MARA.
TYPE-POOLS: SLIS.
TYPES:BEGIN OF TY_ITAB,
MATNR LIKE MARA-MATNR,
ERSDA LIKE MARA-ERSDA,
END OF TY_ITAB.
DATA:ITAB TYPE STANDARD TABLE OF TY_ITAB WITH HEADER LINE.
DATA:FCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FCAT TYPE SLIS_FIELDCAT_ALV,
LAYOUT TYPE SLIS_LAYOUT_ALV,
WA_LAYOUT TYPE SLIS_LAYOUT_ALV.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_MATNR TYPE MARA-MATNR.
SELECTION-SCREEN END OF BLOCK B1.
START-OF-SELECTION.
PERFORM FIELDCAT.
LAYOUT-ZEBRA = 'X'.
PERFORM OUTPUT.
&----
*& Form PF_STATUS
&----
text
----
-->RT_EXTAB text
----
FORM PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'BUTT'.
ENDFORM. "PF_STATUS
&----
*& Form PUSH_BUTT1
&----
text
----
-->R_UCOMM text
-->RS_SELFIELD text
----
FORM GET USING R_UCOMM LIKE SY-UCOMM RS_SELFIELD TYPE SLIS_SELFIELD.
CASE R_UCOMM.
WHEN 'GET'.
IF SY-SUBRC EQ 0.
CALL TRANSACTION 'SE11'.
ELSE.
ENDIF.
WHEN 'EXIT' OR 'CANCEL' .
LEAVE PROGRAM.
ENDCASE.
ENDFORM. "PUSH_BUTT1
&----
*& Form FIELDCAT
&----
text
----
--> p1 text
<-- p2 text
----
FORM FIELDCAT .
WA_FCAT-SELTEXT_L = 'Select'.
WA_FCAT-COL_POS = '1'.
WA_FCAT-FIELDNAME = 'CHECK'.
WA_FCAT-CHECKBOX = 'X'.
WA_FCAT-TABNAME = 'ITAB'.
WA_FCAT-OUTPUTLEN = '4'.
WA_FCAT-INPUT(1) = 'X'.
WA_FCAT-EDIT_MASK(1) = 'X'.
WA_FCAT-EDIT(1) = 'X'.
APPEND WA_FCAT TO FCAT.
CLEAR WA_FCAT.
WA_FCAT-SELTEXT_L = 'Material Number'.
WA_FCAT-COL_POS = '2'.
WA_FCAT-FIELDNAME = 'MATNR'.
WA_FCAT-TABNAME = 'ITAB'.
WA_FCAT-OUTPUTLEN = '18'.
APPEND WA_FCAT TO FCAT.
CLEAR WA_FCAT.
WA_FCAT-SELTEXT_L = 'Date'.
WA_FCAT-COL_POS = '3'.
WA_FCAT-FIELDNAME = 'ERSDA'.
WA_FCAT-TABNAME = 'ITAB'.
WA_FCAT-OUTPUTLEN = '8'.
APPEND WA_FCAT TO FCAT.
CLEAR WA_FCAT.
ENDFORM. " FIELDCAT
&----
*& Form OUTPUT
&----
text
----
--> p1 text
<-- p2 text
----
FORM OUTPUT .
SELECT MATNR ERSDA FROM MARA
INTO TABLE ITAB
WHERE MATNR EQ P_MATNR.
IF SY-SUBRC EQ 0.
PERFORM GRID.
ELSE.
MESSAGE 'No Records Found' TYPE 'I'.
ENDIF.
ENDFORM. " OUTPUT
&----
*& Form GRID
&----
text
----
--> p1 text
<-- p2 text
----
FORM GRID .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
I_CALLBACK_USER_COMMAND = 'GET'
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FCAT
I_DEFAULT = 'X'
TABLES
T_OUTTAB = ITAB.
ENDFORM. " GRID
REGARDS,
SAKTHIVEL.VT
2009 Aug 26 5:00 AM
Hi,
Goto SE41, create a pf-status for your alv report program.
On the next screen, click menu EXTRAS --> click option ADJUST TEMPLATES and select radiobutton LIST VIEWER --> you will get all standard buttons of alv in the pf-status.
Delete the unwanted buttons and also you can add new buttons if reqd.
Activate pf-status --> and apply in alv program.
And set this PF-Status in the ALV Report as:-
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_rep_id " report id
i_callback_pf_status_set = 'PF' " for PF-STATUS
i_callback_user_command = 'USER_COMMAND' " for User-Command
is_layout = wa_layout " for layout
it_fieldcat = it_field " field catalog
it_sort = it_sort " sort info
TABLES
t_outtab = it_final " internal table
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.
*&---------------------------------------------------------------------*
*& Form pf
*&---------------------------------------------------------------------*
* SUB-ROUTINE PF IS USED TO SET THE PF-STATUS OF THE SCREEN
* ON WHICH THE ALV GRID IS DISPLAYED
*----------------------------------------------------------------------*
* -->RT_EXTAB
*----------------------------------------------------------------------*
FORM pf USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZTG_STAT'.
ENDFORM. "pf
Hope this helps you.
Regards,
Tarun
2023 Jul 20 11:19 AM
** Main Program**
REPORT znwm_rpt_nmo_randomizer.
" Includes
INCLUDE z_top.
INCLUDE z_sel.
INCLUDE z_f01.
" Start of selection event
START-OF-SELECTION.
DATA: lo_execute TYPE REF TO lcl_execute.
CREATE OBJECT lo_execute.
lo_execute->get_data( ).
lo_execute->display_output( ).
*** To include ****
" Tables
TABLES: linv, marc.
" Types
* Types Declaration
TYPES: BEGIN OF ltt_output,
sel,
matnr TYPE matnr,
maktg TYPE maktg,
abcin TYPE abcin,
lgnum TYPE lgnum,
lgort TYPE lgort_d,
lgtyp TYPE lgtyp,
lgpla TYPE lgpla,
idatu TYPE lqua_idatu,
END OF ltt_output.
" Data declaration
DATA: gi_output TYPE TABLE OF ltt_output,
r_ucomm TYPE sy-ucomm,
rs_selfield TYPE slis_selfield.
" Constants
CONSTANTS: c_e TYPE char1 VALUE 'E',
c_s TYPE char1 VALUE 'S'.
**** Selection Screen***
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETERS: p_aind TYPE i,
p_bind TYPE i,
p_cind TYPE i,
p_dind TYPE i,
p_max TYPE i OBLIGATORY.
SELECT-OPTIONS: s_cdat FOR sy-datum OBLIGATORY,
s_matnr FOR marc-matnr,
s_lgort FOR linv-lgort.
PARAMETERS: p_werks TYPE marc-werks OBLIGATORY,
p_lgnum TYPE linv-lgnum,
p_spart TYPE mara-spart.
SELECTION-SCREEN END OF BLOCK bl1.
* Input screen validation
AT SELECTION-SCREEN.
* Storage location validation from T001L
IF s_lgort IS NOT INITIAL.
SELECT COUNT(*)
FROM t001l
WHERE lgort EQ s_lgort.
IF sy-subrc NE 0.
MESSAGE text-e02 TYPE c_s DISPLAY LIKE c_e.
ENDIF.
ENDIF.
* Plant validation from T001W
IF p_werks IS NOT INITIAL.
SELECT COUNT(*)
FROM t001w
WHERE werks EQ p_werks.
IF sy-subrc NE 0.
MESSAGE text-e01 TYPE c_s DISPLAY LIKE c_e.
ENDIF.
ENDIF.
* Warehouse validation from T320 table
IF p_lgnum IS NOT INITIAL.
SELECT COUNT(*)
FROM t320
WHERE lgnum EQ p_lgnum.
IF sy-subrc NE 0.
MESSAGE text-e03 TYPE c_s DISPLAY LIKE c_e.
ENDIF.
ENDIF.
* Division validation from TSPA table
IF p_spart IS NOT INITIAL.
SELECT COUNT(*)
FROM tspa
WHERE spart EQ p_spart.
IF sy-subrc NE 0.
MESSAGE text-e04 TYPE c_s DISPLAY LIKE c_e.
ENDIF.
ENDIF.
**** F01 Include ******
CLASS lcl_execute DEFINITION.
PUBLIC SECTION.
METHODS: get_data,
display_output.
ENDCLASS.
CLASS lcl_execute IMPLEMENTATION.
METHOD get_data.
* Types declaration
TYPES: BEGIN OF ltt_ind,
aind TYPE i,
bind TYPE i,
cind TYPE i,
dind TYPE i,
max TYPE i,
END OF ltt_ind,
BEGIN OF ltt_main,
matnr TYPE matnr,
maktg TYPE maktg,
abcin TYPE abcin,
lgnum TYPE lgnum,
lgort TYPE lgort_d,
lgtyp TYPE lgtyp,
lgpla TYPE lgpla,
idatu TYPE lqua_idatu,
dlinl TYPE dlinl,
labst TYPE labst,
charg TYPE charg_d,
rflag TYPE flag,
END OF ltt_main.
* Data declaration
DATA: lwa_out TYPE ltt_output,
lwa_ind TYPE ltt_ind,
lv_random TYPE i,
lv_max TYPE i,
lwa_main TYPE ltt_main,
li_main TYPE TABLE OF ltt_main.
* Constants
CONSTANTS: lc_a TYPE char1 VALUE 'A',
lc_b TYPE char1 VALUE 'B',
lc_c TYPE char1 VALUE 'C',
lc_d TYPE char1 VALUE 'D'.
* Clearing variables and tables
CLEAR: lwa_out, lwa_ind, lv_max, lwa_main,
li_main[], lv_random, gi_output[].
* Indicators logic
IF p_aind IS NOT INITIAL OR
p_bind IS NOT INITIAL OR
p_cind IS NOT INITIAL OR
p_dind IS NOT INITIAL.
lv_max = p_aind + p_bind + p_cind + p_dind.
lwa_ind-aind = p_aind.
lwa_ind-bind = p_bind.
lwa_ind-cind = p_cind.
lwa_ind-dind = p_dind.
IF lv_max GT p_max.
MESSAGE text-e06 TYPE c_s DISPLAY LIKE c_e.
LEAVE LIST-PROCESSING.
ENDIF.
ELSE.
lwa_ind-aind = p_max * ( 20 / 100 ).
lwa_ind-bind = p_max * ( 20 / 100 ).
lwa_ind-cind = p_max * ( 30 / 100 ).
lwa_ind-dind = p_max * ( 30 / 100 ).
ENDIF.
* To get MARD entries
SELECT matnr,
werks,
lgort,
lvorm,
labst,
lgpbe,
dlinl
FROM mard
INTO TABLE @DATA(li_mard)
WHERE matnr IN @s_matnr
AND werks EQ @p_werks
AND lgort IN @s_lgort
AND lvorm NE @space.
IF sy-subrc EQ 0.
* To get MCHB entries
SELECT matnr,
werks,
lgort,
charg,
lvorm,
clabs,
chdll
FROM mchb
INTO TABLE @DATA(li_mchb)
FOR ALL ENTRIES IN @li_mard
WHERE matnr = @li_mard-matnr
AND werks = @li_mard-werks
AND lgort = @li_mard-lgort.
* To get MARC entries
DATA(li_mard_t) = li_mard[].
SORT li_mard_t[] BY matnr werks.
DELETE ADJACENT DUPLICATES FROM li_mard_t[]
COMPARING matnr werks.
SELECT matnr,
werks,
xchar,
abcin
FROM marc
INTO TABLE @DATA(li_marc)
FOR ALL ENTRIES IN @li_mard_t
WHERE matnr = @li_mard_t-matnr
AND werks = @li_mard_t-werks
AND abcin NE @space.
* To get T320 entries
CLEAR li_mard_t[].
li_mard_t[] = li_mard[].
SORT li_mard_t[] BY werks lgort.
DELETE ADJACENT DUPLICATES FROM li_mard_t[]
COMPARING werks lgort.
SELECT werks,
lgort,
lgnum
FROM t320
INTO TABLE @DATA(li_t320)
FOR ALL ENTRIES IN @li_mard_t
WHERE werks = @li_mard_t-werks
AND lgort = @li_mard_t-lgort.
ENDIF.
* To get LQUA entries
SELECT lgnum,
lqnum,
matnr,
werks,
charg,
lgtyp,
lgpla,
gesme,
idatu
FROM lqua
INTO TABLE @DATA(li_lqua)
WHERE lgnum EQ @p_lgnum
AND matnr IN @s_matnr
AND werks EQ @p_werks
AND lgort IN @s_lgort
AND idatu IN @s_cdat.
IF sy-subrc EQ 0.
DATA(li_lqua_t) = li_lqua[].
* To get MAKT entries
SORT li_lqua_t[] BY matnr.
DELETE ADJACENT DUPLICATES FROM li_lqua_t[]
COMPARING matnr.
IF li_lqua_t[] IS NOT INITIAL.
SELECT matnr,
spras,
maktx,
maktg
FROM makt
INTO TABLE @DATA(li_makt)
FOR ALL ENTRIES IN @li_lqua_t
WHERE matnr = @li_lqua_t-matnr
AND spras = @sy-langu.
ENDIF.
ENDIF.
* Looping MARD entries fro filling final table
LOOP AT li_mard INTO DATA(lwa_mard).
READ TABLE li_marc INTO DATA(lwa_marc)
WITH KEY matnr = lwa_mard-matnr
werks = lwa_mard-werks
BINARY SEARCH.
IF sy-subrc EQ 0.
IF lwa_marc-xchar EQ abap_true.
DATA(lv_mbatch_flag) = abap_true.
ENDIF.
READ TABLE li_t320 TRANSPORTING NO FIELDS
WITH KEY werks = lwa_mard-werks
lgort = lwa_mard-lgort
BINARY SEARCH.
IF sy-subrc EQ 0.
DATA(lv_wm_flag) = abap_true.
ENDIF.
ENDIF.
* When Material not in WM controlled SLOC and Material not batch managed
IF lv_wm_flag IS INITIAL AND
lv_mbatch_flag IS INITIAL.
lwa_main-dlinl = lwa_mard-dlinl.
lwa_main-labst = lwa_mard-labst.
* When Material not in WM controlled SLOC and Material is batch managed
ELSEIF lv_wm_flag IS INITIAL AND
lv_mbatch_flag IS NOT INITIAL.
READ TABLE li_mchb INTO DATA(lwa_mchb)
WITH KEY matnr = lwa_mard-matnr
werks = lwa_mard-werks
lgort = lwa_mard-lgort
BINARY SEARCH.
IF sy-subrc EQ 0.
lwa_main-dlinl = lwa_mchb-chdll.
lwa_main-labst = lwa_mchb-clabs.
lwa_main-charg = lwa_mchb-charg.
ENDIF.
* When Material not in WM controlled SLOC and Material not batch managed
ELSEIF lv_wm_flag IS NOT INITIAL.
READ TABLE li_lqua INTO DATA(lwa_lqua)
WITH KEY lgnum = p_lgnum
matnr = lwa_mard-matnr
werks = lwa_mard-werks.
IF sy-subrc EQ 0.
lwa_main-dlinl = lwa_lqua-idatu.
lwa_main-labst = lwa_lqua-gesme.
lwa_main-charg = lwa_lqua-charg.
ENDIF.
ENDIF.
* When last date counted is with in the range or blank
IF lwa_main-dlinl IS INITIAL OR
( ( lwa_main-dlinl LT s_cdat-low ) OR
( lwa_main-dlinl GT s_cdat-high ) ).
lwa_main-matnr = lwa_mard-matnr.
lwa_main-lgort = lwa_mard-lgort.
lwa_main-idatu = lwa_main-dlinl.
lwa_main-abcin = lwa_marc-abcin.
READ TABLE li_makt INTO DATA(lwa_makt)
WITH KEY matnr = lwa_lqua-matnr
spras = sy-langu
BINARY SEARCH.
IF sy-subrc EQ 0.
lwa_main-maktg = lwa_makt-maktg.
ENDIF.
CLEAR lwa_lqua.
READ TABLE li_lqua INTO lwa_lqua
WITH KEY lgnum = p_lgnum
matnr = lwa_mard-matnr
werks = lwa_mard-werks.
IF sy-subrc EQ 0.
lwa_main-lgnum = lwa_lqua-lgnum.
* When WM controlled
IF lv_wm_flag IS NOT INITIAL.
lwa_main-lgtyp = lwa_lqua-lgtyp.
lwa_main-lgpla = lwa_lqua-lgpla.
ELSE.
* When IM Controlled, LGTYP will be blank
lwa_main-lgpla = lwa_mard-lgpbe.
ENDIF.
ENDIF.
APPEND lwa_main TO li_main.
ENDIF.
CLEAR: lwa_main, lwa_mard, lwa_lqua, lwa_out,
lwa_makt, lwa_marc, lwa_mchb.
ENDLOOP.
* Logic to update the randomaizer flag
CLEAR: lwa_out.
DATA(li_main_t) = li_main[].
SORT li_main_t BY abcin.
* A Indicator
IF lwa_ind-aind IS NOT INITIAL.
DELETE li_main_t WHERE abcin NE lc_a.
LOOP AT li_main_t ASSIGNING FIELD-SYMBOL(<lfs_main>).
IF sy-tabix LE lwa_ind-aind.
CALL FUNCTION 'QF05_RANDOM_INTEGER'
EXPORTING
ran_int_min = 1
ran_int_max = lwa_ind-aind
IMPORTING
ran_int = lv_random.
IF lv_random IS NOT INITIAL.
<lfs_main>-rflag = abap_true.
MOVE-CORRESPONDING <lfs_main> TO lwa_out.
APPEND lwa_out TO gi_output.
ENDIF.
ELSE.
EXIT.
ENDIF.
CLEAR: lwa_main, lv_random.
ENDLOOP.
ENDIF.
* B Indicator
CLEAR: li_main_t[].
IF lwa_ind-bind IS NOT INITIAL.
li_main_t[] = li_main[].
SORT li_main_t BY abcin.
DELETE li_main_t WHERE abcin NE lc_b.
LOOP AT li_main_t ASSIGNING <lfs_main>.
IF sy-tabix LE lwa_ind-bind.
CALL FUNCTION 'QF05_RANDOM_INTEGER'
EXPORTING
ran_int_min = 1
ran_int_max = lwa_ind-bind
IMPORTING
ran_int = lv_random.
IF lv_random IS NOT INITIAL.
<lfs_main>-rflag = abap_true.
MOVE-CORRESPONDING <lfs_main> TO lwa_out.
APPEND lwa_out TO gi_output.
ENDIF.
ELSE.
EXIT.
ENDIF.
CLEAR: lwa_out, lv_random.
ENDLOOP.
ENDIF.
* C Indicator
CLEAR: li_main_t[].
IF lwa_ind-cind IS NOT INITIAL.
li_main_t[] = li_main[].
SORT li_main_t BY abcin.
DELETE li_main_t WHERE abcin NE lc_c.
LOOP AT li_main_t ASSIGNING <lfs_main>.
IF sy-tabix LE lwa_ind-cind.
CALL FUNCTION 'QF05_RANDOM_INTEGER'
EXPORTING
ran_int_min = 1
ran_int_max = lwa_ind-cind
IMPORTING
ran_int = lv_random.
IF lv_random IS NOT INITIAL.
<lfs_main>-rflag = abap_true.
MOVE-CORRESPONDING <lfs_main> TO lwa_out.
APPEND lwa_out TO gi_output.
ENDIF.
ELSE.
EXIT.
ENDIF.
CLEAR: lwa_out, lv_random.
ENDLOOP.
ENDIF.
* D Indicator
CLEAR: li_main_t[].
IF lwa_ind-dind IS NOT INITIAL.
li_main_t[] = li_main[].
SORT li_main_t BY abcin.
DELETE li_main_t WHERE abcin NE lc_d.
LOOP AT li_main_t ASSIGNING <lfs_main>.
IF sy-tabix LE lwa_ind-dind.
CALL FUNCTION 'QF05_RANDOM_INTEGER'
EXPORTING
ran_int_min = 1
ran_int_max = lwa_ind-dind
IMPORTING
ran_int = lv_random.
IF lv_random IS NOT INITIAL.
<lfs_main>-rflag = abap_true.
MOVE-CORRESPONDING <lfs_main> TO lwa_out.
APPEND lwa_out TO gi_output.
ENDIF.
ELSE.
EXIT.
ENDIF.
CLEAR: lwa_out, lv_random.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD display_output.
TYPE-POOLS: slis.
* Data Declaration
DATA: ti_fieldcat TYPE slis_t_fieldcat_alv,
lwa_fieldcat TYPE slis_fieldcat_alv,
lwa_layout TYPE slis_layout_alv.
* Clear
CLEAR: lwa_layout, lwa_fieldcat, ti_fieldcat.
* Layout
lwa_layout-colwidth_optimize = abap_true.
lwa_layout-box_fieldname = 'SEL'.
IF gi_output[] IS NOT INITIAL.
SORT gi_output[] BY lgort lgtyp lgpla.
lwa_fieldcat-fieldname = text-f01.
lwa_fieldcat-seltext_m = text-002.
APPEND lwa_fieldcat TO ti_fieldcat.
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = text-f02.
lwa_fieldcat-seltext_m = text-003.
APPEND lwa_fieldcat TO ti_fieldcat.
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = text-f03.
lwa_fieldcat-seltext_m = text-004.
APPEND lwa_fieldcat TO ti_fieldcat.
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = text-f04.
lwa_fieldcat-seltext_m = text-005.
APPEND lwa_fieldcat TO ti_fieldcat.
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = text-f06.
lwa_fieldcat-seltext_m = text-007.
APPEND lwa_fieldcat TO ti_fieldcat.
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = text-f07.
lwa_fieldcat-seltext_m = text-008.
APPEND lwa_fieldcat TO ti_fieldcat.
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = text-f08.
lwa_fieldcat-seltext_m = text-009.
APPEND lwa_fieldcat TO ti_fieldcat.
CLEAR lwa_fieldcat.
lwa_fieldcat-fieldname = text-f05.
lwa_fieldcat-seltext_m = text-006.
APPEND lwa_fieldcat TO ti_fieldcat.
CLEAR lwa_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
is_layout = lwa_layout
it_fieldcat = ti_fieldcat[]
TABLES
t_outtab = gi_output[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE text-e05 TYPE c_s DISPLAY LIKE c_e.
ENDIF.
ELSE.
MESSAGE text-e05 TYPE c_s DISPLAY LIKE c_e.
ENDIF.
ENDMETHOD.
ENDCLASS.
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'.
ENDFORM.
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'LICC'.
DATA(li_output) = gi_output[].
DELETE li_output WHERE sel EQ abap_false.
DATA: lr_matnr TYPE RANGE OF matnr.
IF li_output[] IS NOT INITIAL.
"write the column carrid of your internal table in your range
lr_matnr = VALUE #( FOR <fs_matnr> IN li_output
(
sign = 'I'
option = 'EQ'
low = <fs_matnr>-matnr
high = ''
) ).
* Calling LICC Tcode skipping first screen
SUBMIT rlinv060 WITH s1_lgnum = p_lgnum
WITH matnr IN lr_matnr.
ELSE.
MESSAGE text-e05 TYPE c_s DISPLAY LIKE c_e.
ENDIF.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDFORM.
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |