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

push button in alv report

Former Member
0 Likes
8,964

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

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
3,453

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

10 REPLIES 10
Read only

Former Member
0 Likes
3,453

Hi,

Create a pf status , in that create a pushbutton and write the logic in user-command of user command module.

Read only

Former Member
0 Likes
3,453

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

Read only

Former Member
0 Likes
3,453

Hi,

Please check the below link it will help you.

[]

[]

Regards

Sunil

Read only

Former Member
0 Likes
3,453

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

Read only

Former Member
0 Likes
3,454

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

Read only

0 Likes
3,453

hi sakthi vel give one simple alv report with pushbutton.

Thanks and Regards,

Thirukumaran. R

Read only

0 Likes
3,453

Hi,

Check these threads.

[;

[;

[;

Hope it helps.

Thank you,

Pavan.

Read only

0 Likes
3,453

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

Read only

I355602
Product and Topic Expert
Product and Topic Expert
0 Likes
3,453

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

Read only

0 Likes
3,453

** 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.