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

Pushbutton Inside ALV Grid

Former Member
0 Likes
936

How can I add a pushbutton inside ALV toolbar?

1 ACCEPTED SOLUTION
Read only

varma_narayana
Active Contributor
0 Likes
751

Hi

First Step:

Create a GUI Status : Tcode SE41

Gui Status: GUI_ALV1

To Get the Standard Functions of ALV into the GUI status:

menu path in SE41

<b>Extras -> Adjust Template</b>

Select <b>List Viewer</b>

Add the New Button with Function code

Eg: %NEW

<b>Check this Sample Code:</b>

type-pools SLIS.

data i_mat type table of mara WITH HEADER LINE.

DATA : G_REPID LIKE SY-REPID.

MOVE SY-REPID TO G_REPID.

select * from mara into table i_mat UP TO 100 ROWS.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = G_REPID

I_CALLBACK_PF_STATUS_SET = 'SET_GUI'

I_CALLBACK_USER_COMMAND = 'USER_COMMAND'

I_STRUCTURE_NAME = 'MARA'

TABLES

t_outtab = I_MAT

  • 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 SET_GUI USING EXTAB TYPE SLIS_T_EXTAB.

SET PF-STATUS 'GUI_ALV1' EXCLUDING EXTAB.

ENDFORM.

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM

RS_SELFIELD TYPE SLIS_SELFIELD.

CASE R_UCOMM.

WHEN '&NEW'. "BUTTON ADDED IN TOOLBAR

READ TABLE I_MAT INDEX RS_SELFIELD-TABINDEX. "cursorposit.

IF SY-SUBRC = 0.

ENDIF.

CLEAR R_UCOMM.

ENDCASE.

ENDFORM.

Reward if helpful.

5 REPLIES 5
Read only

Former Member
0 Likes
751

Hi,

This can be included into ALV by defining a GUI and setting that GUI using Set PF Status.

Check the below code for the same,

REPORT ZSPRENH069 NO STANDARD PAGE HEADING.

TYPE-POOLS : SLIS. "Global Type for ALV

************************************************************************

  • T Y P E S *

************************************************************************

TYPES:

BEGIN OF TY_VB_AKAP,

VBELN TYPE VBELN_VA, "Sales Document

KUNNR TYPE KUNAG, "Sold-to party

POSNR TYPE POSNR_VA, "Item Number

MATNR TYPE MATNR, "Material Number

PMATN TYPE PMATN, "Pricing Reference Material/Newly Created Material

KWMENG TYPE KWMENG, "Cumulative Order Qty. in Sales Units

VRKME TYPE VRKME, "Sales Unit

  • NETPR TYPE NETPR, "Net Price

KZWI1 TYPE KZWI1, "Sub Total 1 from pricing procedure for condition

VKAUS TYPE ABRVW, "Usage Indicator

END OF TY_VB_AKAP,

BEGIN OF TY_MARA,

MATNR TYPE MATNR, "Material Number

ZZTECHSPEC TYPE ZTECHSPEC, "Technical Specification

END OF TY_MARA,

BEGIN OF TY_MVKE,

MATNR TYPE MATNR, "Material Number

VKORG TYPE VKORG, "Sales Organization

VTWEG TYPE VTWEG, "Distribution Channel

KONDM TYPE KONDM, "Material Pricing Group

END OF TY_MVKE,

BEGIN OF TY_VBKD,

VBELN TYPE VBELN_VA, "Sales Document

POSNR TYPE POSNR_VA, "Item Number

BSTKD_E TYPE BSTKD_E, "Used to capture New Material Number

END OF TY_VBKD,

BEGIN OF TY_IHEADER,

SELECT(1) TYPE C, "Check Box

VBELN TYPE VBELN, "Sales Document

KUNNR TYPE KUNAG, "Sold-to Party

END OF TY_IHEADER,

BEGIN OF TY_MESSAGE1,

VKORG TYPE VKORG, "Sales Organization

VTWEG TYPE VTWEG, "Distribution Channel

KUNNR TYPE KUNAG, "Customer number

KONDM TYPE KONDM, "Material pricing group

ZCOUNT(2) TYPE N, "Zcount

MSGTYP(1) TYPE C, "Message type

TEXT(150) TYPE C, "Message text

END OF TY_MESSAGE1,

BEGIN OF TY_MESSAGE2,

VKORG TYPE VKORG, "Sales Organization

VTWEG TYPE VTWEG, "Distribution Channel

KUNNR TYPE KUNAG, "Customer number

MATNR TYPE MATNR, "Material Number

MSGTYP(1) TYPE C, "Message type

TEXT(150) TYPE C, "Message text

END OF TY_MESSAGE2,

BEGIN OF TY_IFINAL,

VBELN TYPE VBELN_VA, "Sales Document

KWMENG TYPE KWMENG, "Cumulative Order Qty. in Sales Units

POSNR TYPE POSNR_VA, "Item Number

KUNNR TYPE KUNAG, "Sold-to party

MATNR TYPE MATNR, "Material Number

VRKME TYPE VRKME, "Sales Unit

KZWI1 TYPE KZWI1, "Sub Total 1 from pricing procedure for condition

VKAUS TYPE ABRVW, "Usage Indicator

ZZTECHSPEC TYPE ZTECHSPEC, "Technical Specification

PMATN TYPE PMATN, "Pricing Reference Material/Newly Created Material

KONDM TYPE KONDM, "Material Pricing Group

END OF TY_IFINAL,

BEGIN OF TY_ACC1,

VBELN TYPE VBELN_VA, "Sales Document

KUNNR TYPE KUNAG, "Sold-to party

KONDM TYPE KONDM, "Material Pricing Group

ZCOUNT(2) TYPE N, "ZCount indicator

KSTBM TYPE KSTBM, "Quantity

VRKME TYPE VRKME, "Sales Unit

ZZTECHSPEC TYPE ZTECHSPEC, "Technical Specification

KZWI1 TYPE KZWI1, "Sub Total 1 from pricing procedure for condition

ERROR(1) TYPE N, "Error Field

END OF TY_ACC1,

BEGIN OF TY_ACC2,

VBELN TYPE VBELN_VA, "Sales Document

KUNNR TYPE KUNAG, "Sold-to party

MATNR TYPE MATNR, "Material Number

KSTBM TYPE KSTBM, "Cumulative Order Qty. in Sales Units

ZZTECHSPEC TYPE ZTECHSPEC, "Technical Specification

VRKME TYPE VRKME, "Sales Unit

KZWI1 TYPE KZWI1, "Sub Total 1 from pricing procedure for condition

ERROR(1) TYPE N, "Error field

END OF TY_ACC2.

************************************************************************

  • D A T A *

************************************************************************

  • Internal Table Declarations

*****************************

DATA: T_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV, "Fieldcatalog IT

T_EVENTS TYPE SLIS_T_EVENT, "Event IT

T_HEADER TYPE SLIS_T_LISTHEADER, "Header IT

T_VB_AKAP TYPE STANDARD TABLE OF TY_VB_AKAP, "To hold records from VBAK & VBAP Table

T_MARA TYPE STANDARD TABLE OF TY_MARA, "To hold records from MARA Table

T_MVKE TYPE STANDARD TABLE OF TY_MVKE, "To hold records from MVKE Table

T_VBKD TYPE STANDARD TABLE OF TY_VBKD, "To hold records from VBKD Table

T_IHEADER TYPE STANDARD TABLE OF TY_IHEADER, "To hold records from VBAK Table

T_IFINAL TYPE STANDARD TABLE OF TY_IFINAL, "To hold cumulative data for ALV

T_BDCDATA TYPE STANDARD TABLE OF BDCDATA, "IT for bdcdata

T_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL, "IT for error messages

T_MESSAGE1 TYPE STANDARD TABLE OF TY_MESSAGE1, "IT for conditions1 messages

T_MESSAGE2 TYPE STANDARD TABLE OF TY_MESSAGE2, "IT for conditions2 messages

T_ACC2 TYPE STANDARD TABLE OF TY_ACC2, "IT for holding data for Second Access Sequence Processing

T_ACC1 TYPE STANDARD TABLE OF TY_ACC1, "IT for holding data for First Access Sequence Processing

T_SELECT TYPE STANDARD TABLE OF RSPARAMS, "IT for holding data related to the selection screen

  • Work area Declarations

************************

W_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV, "Fieldcatalog WA

W_EVENT TYPE SLIS_ALV_EVENT, "Event WA

W_HEADER TYPE SLIS_LISTHEADER, "Header WA

W_LAYOUT TYPE SLIS_LAYOUT_ALV, "Layout WA

W_KEYINFO TYPE SLIS_KEYINFO_ALV, "Key Information WA

W_VB_AKAP TYPE TY_VB_AKAP, "To hold records from T_VB_AKAP

W_MARA TYPE TY_MARA, "To hold records from T_MARA

W_MVKE TYPE TY_MVKE, "To hold records from T_MVKE

W_VBKD TYPE TY_VBKD, "To hold records from T_VBKD

W_IHEADER TYPE TY_IHEADER, "To hold records from T_IHEADER

W_IFINAL TYPE TY_IFINAL, "To hold records from T_IFINAL

W_PARAMS TYPE CTU_PARAMS, "CTU Params

W_BDCDATA TYPE BDCDATA, "Work Area for BDCDATA

W_BDCMSGCOLL TYPE BDCMSGCOLL, "Work Area to collect BDC Messages

W_MESSAGE1 TYPE TY_MESSAGE1, "WA for price conditions1 messages

W_MESSAGE2 TYPE TY_MESSAGE2, "WA for price conditions2 messages

W_ACC2 TYPE TY_ACC2, "WA for holding records from T_ACC2

W_ACC1 TYPE TY_ACC1, "WA for holding records from T_ACC1

  • Variable declarations

***********************

G_AUDAT TYPE AUDAT, "Document Date (Date Received/Sent)

G_VBELN TYPE VBELN_VA, "Sales Document

G_KUNNR TYPE KUNAG, "Sold-to party

G_MATNR TYPE MATNR, "Material Number

G_REPID TYPE SY-REPID, "Program Name

G_MESSAGE(73) TYPE C, "To Capture Message

G_FLAG1(1) TYPE C, "Flag

G_ANSWER(1) TYPE C. "Optional Button

  • Constant declarations

***********************

CONSTANTS:

C_A(1) TYPE C VALUE 'A', "Constant Value A

C_S(1) TYPE C VALUE 'S', "Constant Value S

C_U(1) TYPE C VALUE 'U', "Constant Value U

C_X(1) TYPE C VALUE 'X', "Constant Value X

C_E(1) TYPE C VALUE 'E', "Constant Value E

C_I(1) TYPE C VALUE 'I', "Constant Value I

C_R(1) TYPE C VALUE 'R', "Constant Value R

C_B(1) TYPE C VALUE 'B', "Document Category is Quotation

C_HTNAME(10) TYPE C VALUE 'T_IHEADER', "Internal table for Header Data

C_ITNAME(10) TYPE C VALUE 'T_IFINAL', "Internal Table with processed data

C_Q2(2) TYPE C VALUE 'Q2', "Constant Order Reason Q2

C_100(3) TYPE C VALUE '100', "Popup screen

  • C_046(3) TYPE C VALUE '046', "Value 046

  • C_047(3) TYPE C VALUE '047', "Value 047

C_25(2) TYPE C VALUE '25', "Popup screen

C_5(1) TYPE C VALUE '5', "Popup screen

C_1 TYPE I VALUE 1, "Value 1 for Error Denotion

C_2 TYPE I VALUE 2, "Value 2 for Error Denotion

C_3 TYPE I VALUE 3, "Value 3 for BDC Error Denotion

C_1000(4) TYPE N VALUE 1000, "Value 1000

C_01(2) TYPE N VALUE '01', "Value 01 for Zcount

C_VK11(4) TYPE C VALUE 'VK11', "Transaction VK11

C_DYNBEGIN(1) TYPE C VALUE 'X', "Indicator

C_UPDATE(1) TYPE C VALUE 'S', "Update

C_DISMODE(1) TYPE C VALUE 'N', "Display

C_ZBPR(4) TYPE C VALUE 'ZBPR', "Condition Type ZBPR

C_ERROR(5) TYPE C VALUE 'ERROR'. "Error screen title

************************************************************************

  • S E L E C T O P T I O N S & P A R A M E T E R S *

************************************************************************

  • Selection-screen Block 1

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

PARAMETERS: P_VKORG TYPE VKORG OBLIGATORY, "Sales Organization

P_VTWEG TYPE VTWEG OBLIGATORY, "Distribution Channel

P_SPART TYPE SPART DEFAULT '00'. "Division

SELECTION-SCREEN END OF BLOCK BLK1.

SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.

SELECT-OPTIONS: S_AUDAT FOR G_AUDAT, "Document Date (Date Received/Sent)

S_VBELN FOR G_VBELN, "Sales Document

S_KUNNR FOR G_KUNNR, "Sold-to party

S_MATNR FOR G_MATNR. "Material Number

PARAMETERS: P_VKAUS(2) TYPE N. "Usage Indicator

SELECTION-SCREEN END OF BLOCK BLK2.

************************************************************************

  • I N I T I A L I Z A T I O N *

************************************************************************

INITIALIZATION.

CLEAR : G_REPID. "Program Name

G_REPID = SY-REPID. "Program Name

************************************************************************

  • A T S E L E C T I O N S C R E E N *

************************************************************************

AT SELECTION-SCREEN.

************************************************************************

  • S T A R T O F S E L E C T I O N *

************************************************************************

START-OF-SELECTION.

  • Data Selection

PERFORM DATA_RETRIEVAL.

  • Build Field Catalog

PERFORM BUILD_FIELDCATALOG.

  • Bulid layout

PERFORM BUILD_LAYOUT.

  • Build Events

PERFORM BUILD_EVENTS.

  • Captures the Values of Selection Screen

PERFORM CAPTURE_SCREEN.

************************************************************************

  • E N D O F S E L E C T I O N *

************************************************************************

END-OF-SELECTION.

  • Display List

PERFORM DISPLAY_ALV_REPORT.

************************************************************************

  • F O R M S *

************************************************************************

&----


*& Form DATA_RETRIEVAL

&----


  • Retrieves Data for ALV Display

----


FORM DATA_RETRIEVAL .

DATA : L_VKAUS TYPE VKAUS. "Variable to hold Usage Indicator

CLEAR L_VKAUS.

SELECT VBELN

KUNNR

INTO CORRESPONDING FIELDS OF TABLE T_IHEADER

FROM VBAK

WHERE VBELN IN S_VBELN

AND KUNNR IN S_KUNNR

AND VKORG EQ P_VKORG

AND AUDAT IN S_AUDAT

AND VTWEG EQ P_VTWEG

AND SPART EQ P_SPART

AND AUGRU EQ C_Q2

AND VBTYP EQ C_B.

IF NOT T_IHEADER IS INITIAL.

IF NOT P_VKAUS IS INITIAL OR P_VKAUS NE C_1.

CONCATENATE 'C' P_VKAUS INTO L_VKAUS.

SELECT A~VBELN

A~KUNNR

B~POSNR

B~MATNR

B~PMATN

B~KWMENG

B~VRKME

  • B~NETPR

B~KZWI1

B~VKAUS

INTO TABLE T_VB_AKAP

FROM VBAK AS A

JOIN VBAP AS B

ON A~VBELN EQ B~VBELN

FOR ALL ENTRIES IN T_IHEADER

WHERE A~VBELN EQ T_IHEADER-VBELN

AND B~MATNR IN S_MATNR

AND B~VKAUS EQ L_VKAUS.

ELSE.

SELECT A~VBELN

A~KUNNR

B~POSNR

B~MATNR

B~PMATN

B~KWMENG

B~VRKME

  • B~NETPR

B~KZWI1

B~VKAUS

INTO TABLE T_VB_AKAP

FROM VBAK AS A

JOIN VBAP AS B

ON A~VBELN EQ B~VBELN

FOR ALL ENTRIES IN T_IHEADER

WHERE A~VBELN EQ T_IHEADER-VBELN

AND B~MATNR IN S_MATNR.

ENDIF.

IF NOT T_VB_AKAP IS INITIAL.

SELECT VBELN

POSNR

BSTKD_E

INTO TABLE T_VBKD

FROM VBKD

FOR ALL ENTRIES IN T_VB_AKAP

WHERE VBELN EQ T_VB_AKAP-VBELN

AND POSNR EQ T_VB_AKAP-POSNR.

ENDIF.

SORT T_VBKD BY VBELN POSNR.

CLEAR W_VB_AKAP.

  • After much of coding was completed, Usage of PMATN was dropped and

  • the first eighteen characters of the field BSTKD was proposed for usage

  • Hence PMATN is overwritten by BSTKD value in the below loop

LOOP AT T_VB_AKAP INTO W_VB_AKAP.

CLEAR: W_VBKD,

W_VB_AKAP-PMATN.

READ TABLE T_VBKD INTO W_VBKD

WITH KEY VBELN = W_VB_AKAP-VBELN

POSNR = W_VB_AKAP-POSNR

BINARY SEARCH.

IF SY-SUBRC EQ 0.

W_VB_AKAP-PMATN = W_VBKD-BSTKD_E+0(18).

ENDIF.

MODIFY T_VB_AKAP FROM W_VB_AKAP TRANSPORTING PMATN.

CLEAR W_VB_AKAP.

ENDLOOP.

IF NOT T_VB_AKAP IS INITIAL.

SELECT MATNR

ZZTECHSPEC

INTO TABLE T_MARA

FROM MARA

FOR ALL ENTRIES IN T_VB_AKAP

WHERE MATNR EQ T_VB_AKAP-MATNR.

IF SY-SUBRC EQ 0.

SORT T_MARA BY MATNR.

ENDIF. "Checking SY-SUBRC for T_MARA

SELECT MATNR

ZZTECHSPEC

APPENDING TABLE T_MARA

FROM MARA

FOR ALL ENTRIES IN T_VB_AKAP

WHERE MATNR EQ T_VB_AKAP-PMATN.

IF SY-SUBRC EQ 0.

SORT T_MARA BY MATNR.

ENDIF. "Checking SY-SUBRC for T_MARA

SELECT MATNR

VKORG

VTWEG

KONDM

INTO TABLE T_MVKE

FROM MVKE

FOR ALL ENTRIES IN T_VB_AKAP

WHERE MATNR EQ T_VB_AKAP-PMATN.

IF SY-SUBRC EQ 0.

SORT T_MVKE BY MATNR VKORG VTWEG.

ENDIF. "Checking SY-SUBRC for T_MVKE

SELECT MATNR

VKORG

VTWEG

KONDM

APPENDING TABLE T_MVKE

FROM MVKE

FOR ALL ENTRIES IN T_VB_AKAP

WHERE MATNR EQ T_VB_AKAP-MATNR.

IF SY-SUBRC EQ 0.

SORT T_MVKE BY MATNR VKORG VTWEG.

ENDIF. "Checking SY-SUBRC for T_MVKE

ENDIF. " FOR T_VB_AKAP NOT INITIAL.

ENDIF. " FOR T_IHEADER NOT INITIAL.

CLEAR: W_VB_AKAP,

W_IFINAL.

LOOP AT T_VB_AKAP INTO W_VB_AKAP.

W_IFINAL-VBELN = W_VB_AKAP-VBELN.

W_IFINAL-KUNNR = W_VB_AKAP-KUNNR.

W_IFINAL-POSNR = W_VB_AKAP-POSNR.

W_IFINAL-MATNR = W_VB_AKAP-MATNR.

W_IFINAL-PMATN = W_VB_AKAP-PMATN.

W_IFINAL-KWMENG = W_VB_AKAP-KWMENG.

W_IFINAL-VRKME = W_VB_AKAP-VRKME.

  • W_IFINAL-NETPR = W_VB_AKAP-NETPR.

W_IFINAL-KZWI1 = ( W_VB_AKAP-KZWI1 / W_VB_AKAP-KWMENG ) * 1000.

W_IFINAL-VKAUS = W_VB_AKAP-VKAUS.

  • Populating Material Pricing Group from New Material Group, if such Group doesn't exist

  • Population of Material Pricing Group from Material Number is tried.

  • Similar condition does suit for Tech Spec too.

SORT: T_MVKE BY MATNR VKORG VTWEG,

T_MARA BY MATNR.

IF NOT W_VB_AKAP-PMATN IS INITIAL.

CLEAR W_MVKE.

READ TABLE T_MVKE

INTO W_MVKE

WITH KEY MATNR = W_VB_AKAP-PMATN

VKORG = P_VKORG

VTWEG = P_VTWEG

BINARY SEARCH.

IF SY-SUBRC EQ 0.

W_IFINAL-KONDM = W_MVKE-KONDM.

ENDIF.

READ TABLE T_MARA

INTO W_MARA

WITH KEY MATNR = W_VB_AKAP-PMATN

BINARY SEARCH.

IF SY-SUBRC EQ 0.

W_IFINAL-ZZTECHSPEC = W_MARA-ZZTECHSPEC.

ENDIF. " SY-SUBRC FOR READ TABLE T_MARA

  • IF W_MVKE-KONDM IS INITIAL.

ELSE.

  • SORT T_MVKE BY MATNR VKORG VTWEG.

CLEAR W_MVKE.

READ TABLE T_MVKE

INTO W_MVKE

WITH KEY MATNR = W_VB_AKAP-MATNR

VKORG = P_VKORG

VTWEG = P_VTWEG

BINARY SEARCH.

IF SY-SUBRC EQ 0.

W_IFINAL-KONDM = W_MVKE-KONDM.

ENDIF.

READ TABLE T_MARA

INTO W_MARA

WITH KEY MATNR = W_VB_AKAP-MATNR

BINARY SEARCH.

IF SY-SUBRC EQ 0.

W_IFINAL-ZZTECHSPEC = W_MARA-ZZTECHSPEC.

ENDIF. " SY-SUBRC FOR READ TABLE T_MARA

  • ELSE.

*

  • W_IFINAL-KONDM = W_MVKE-KONDM.

*

ENDIF. " IS INITIAL CHECK FOR W_MVKE-KONDM

APPEND W_IFINAL TO T_IFINAL.

CLEAR: W_VB_AKAP,

W_IFINAL.

ENDLOOP.

SORT T_IFINAL BY VBELN.

  • Checking whether if there are any header quotations which does not have items against them in item internal table

  • if such records exist then, ensuring that such records gets deleted from header too, so that inconsitency is removed.

CLEAR W_IHEADER.

LOOP AT T_IHEADER INTO W_IHEADER.

CLEAR W_IFINAL.

READ TABLE T_IFINAL INTO W_IFINAL WITH KEY VBELN = W_IHEADER-VBELN.

IF SY-SUBRC NE 0.

W_IHEADER-SELECT = C_X.

MODIFY T_IHEADER FROM W_IHEADER TRANSPORTING SELECT.

ENDIF.

ENDLOOP.

DELETE T_IHEADER WHERE SELECT = C_X.

SORT T_IFINAL BY VBELN.

ENDFORM. " DATA_RETRIEVAL

&----


*& Form build_layout

&----


  • To build ALV Layout

----


FORM BUILD_LAYOUT.

CLEAR : W_LAYOUT.

W_LAYOUT-COLWIDTH_OPTIMIZE = C_X.

W_LAYOUT-BOX_TABNAME = C_HTNAME. "tabname for checkbox

W_LAYOUT-BOX_FIELDNAME = 'SELECT'. "fieldname for checkbox

CLEAR : W_KEYINFO.

W_KEYINFO-HEADER01 = 'VBELN'. "Header1 key information

W_KEYINFO-ITEM01 = 'VBELN'. "Item1 key information

ENDFORM. "build_layout

&----


*& Form build_events

&----


  • To build ALV Events

----


FORM BUILD_EVENTS.

CONSTANTS: C_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

I_LIST_TYPE = 1

IMPORTING

ET_EVENTS = T_EVENTS

EXCEPTIONS

LIST_TYPE_WRONG = 1

OTHERS = 2.

IF SY-SUBRC = 0.

READ TABLE T_EVENTS INTO W_EVENT

WITH KEY NAME = C_TOP_OF_PAGE.

IF SY-SUBRC = 0.

MOVE C_TOP_OF_PAGE TO W_EVENT-FORM.

MODIFY T_EVENTS INDEX SY-TABIX

FROM W_EVENT

TRANSPORTING FORM.

ENDIF.

ELSE.

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

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

ENDIF.

ENDFORM. "build_events

&----


*& Form top_of_page

&----


  • To display top of page in ALV Report

----


FORM TOP_OF_PAGE. "#EC CALLED

DATA :

L_VKORG(35) TYPE C, "Sales Organization

L_VTWEG(35) TYPE C, "Distribution Channel

L_SPART(35) TYPE C. "Division

    • Title

  • CLEAR W_HEADER.

  • W_HEADER-TYP = C_H.

  • W_HEADER-INFO = TEXT-003.

  • APPEND W_HEADER TO T_HEADER.

  • Sales Organization

CLEAR W_HEADER.

W_HEADER-TYP = C_S.

CONCATENATE TEXT-004 P_VKORG INTO L_VKORG.

W_HEADER-INFO = L_VKORG.

APPEND W_HEADER TO T_HEADER.

  • Distribution Channel

CLEAR W_HEADER.

W_HEADER-TYP = C_S.

CONCATENATE TEXT-005 P_VTWEG INTO L_VTWEG.

W_HEADER-INFO = L_VTWEG.

APPEND W_HEADER TO T_HEADER.

  • Division

CLEAR W_HEADER.

W_HEADER-TYP = C_S.

CONCATENATE TEXT-006 P_SPART INTO L_SPART.

W_HEADER-INFO = L_SPART.

APPEND W_HEADER TO T_HEADER.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

IT_LIST_COMMENTARY = T_HEADER.

ENDFORM. "top_of_page

&----


*& Form pf_status

&----


  • To set PF-Status (user interface)

----


  • -->EXTAB The excluding table (function codes)

----


FORM PF_STATUS "#EC CALLED

USING T_EXTAB TYPE SLIS_T_EXTAB. "#EC NEEDED

SET PF-STATUS 'ZSTANDARD_FULLSCREEN'.

ENDFORM. "pf_status

&----


*& Form display_alv_report

&----


  • To display ALV report

----


FORM DISPLAY_ALV_REPORT.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

I_CALLBACK_PROGRAM = G_REPID

I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'

I_CALLBACK_USER_COMMAND = 'USER_COMMAND'

IS_LAYOUT = W_LAYOUT

IT_FIELDCAT = T_FIELDCATALOG

  • 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 = C_X

I_SAVE = C_A

  • IS_VARIANT =

IT_EVENTS = T_EVENTS[]

  • IT_EVENT_EXIT =

I_TABNAME_HEADER = 'T_IHEADER'

I_TABNAME_ITEM = 'T_IFINAL'

  • I_STRUCTURE_NAME_HEADER =

  • I_STRUCTURE_NAME_ITEM =

IS_KEYINFO = W_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 = T_IHEADER

T_OUTTAB_ITEM = T_IFINAL

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 BUILD_FIELDCATALOG

&----


  • To build ALV Field Catalog

----


FORM BUILD_FIELDCATALOG .

DATA: L_COUNT TYPE I VALUE 0.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_HTNAME.

W_FIELDCATALOG-FIELDNAME = 'SELECT'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C01.

W_FIELDCATALOG-CHECKBOX = C_X.

W_FIELDCATALOG-EDIT = C_X.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_HTNAME.

W_FIELDCATALOG-FIELDNAME = 'VBELN'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C02.

W_FIELDCATALOG-KEY = C_X. "Fixes the column for no-scroll

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_HTNAME.

W_FIELDCATALOG-FIELDNAME = 'KUNNR'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C04.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR L_COUNT.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

W_FIELDCATALOG-FIELDNAME = 'POSNR'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C03.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

W_FIELDCATALOG-FIELDNAME = 'KWMENG'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C06.

W_FIELDCATALOG-EMPHASIZE = 'C400'.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

W_FIELDCATALOG-FIELDNAME = 'VRKME'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C07.

W_FIELDCATALOG-JUST = C_R.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

  • W_FIELDCATALOG-FIELDNAME = 'NETPR'.

W_FIELDCATALOG-FIELDNAME = 'KZWI1'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C08.

W_FIELDCATALOG-EMPHASIZE = 'C400'.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

W_FIELDCATALOG-FIELDNAME = 'VKAUS'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C12.

W_FIELDCATALOG-JUST = C_R.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

W_FIELDCATALOG-FIELDNAME = 'ZZTECHSPEC'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C09.

W_FIELDCATALOG-EMPHASIZE = 'C400'.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

W_FIELDCATALOG-FIELDNAME = 'MATNR'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C05.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

W_FIELDCATALOG-FIELDNAME = 'PMATN'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C10.

W_FIELDCATALOG-EMPHASIZE = 'C400'.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

CLEAR W_FIELDCATALOG.

L_COUNT = L_COUNT + 1.

W_FIELDCATALOG-COL_POS = L_COUNT.

W_FIELDCATALOG-TABNAME = C_ITNAME.

W_FIELDCATALOG-FIELDNAME = 'KONDM'.

W_FIELDCATALOG-SELTEXT_M = TEXT-C11.

APPEND W_FIELDCATALOG TO T_FIELDCATALOG.

ENDFORM. " BUILD_FIELDCATALOG

&----


*& Form user_command

&----


  • EXIT routine for command handling

----


  • -->L_UCOMM Function code that PAI triggered

  • -->W_SELFIELD Information cursor position ALV

----


FORM USER_COMMAND USING L_UCOMM LIKE SY-UCOMM "#EC CALLED

W_SELFIELD TYPE SLIS_SELFIELD. "#EC NEEDED

  • Check function code

CASE L_UCOMM.

WHEN 'CREATE'.

SORT T_IHEADER BY SELECT.

READ TABLE T_IHEADER INTO W_IHEADER

WITH KEY SELECT = C_X

BINARY SEARCH.

IF SY-SUBRC <> 0.

MESSAGE I000(ZS) WITH TEXT-M01.

ELSE.

CLEAR : G_ANSWER.

  • Dialog box for save prompts

CALL FUNCTION 'POPUP_TO_CONFIRM'

EXPORTING

TEXT_QUESTION = TEXT-OP1

DISPLAY_CANCEL_BUTTON = ''

IMPORTING

ANSWER = G_ANSWER

EXCEPTIONS

TEXT_NOT_FOUND = 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.

ELSE.

IF G_ANSWER = 1.

SET PF-STATUS 'ZSTANDARD_SCREEN'.

PERFORM DATA_IDENTITY_4_ACCESS_SEQ.

PERFORM CREATE_CONDITIONS.

PERFORM DISPLAY_RESULT.

ENDIF.

ENDIF.

ENDIF.

WHEN '&REFRESH'.

SUBMIT ZSPRENH069 USING SELECTION-SCREEN 1000

WITH SELECTION-TABLE T_SELECT.

WHEN 'BACKTO'.

SUBMIT ZSPRENH069 USING SELECTION-SCREEN 1000

WITH SELECTION-TABLE T_SELECT.

ENDCASE.

ENDFORM. "user_command

&----


*& Form DATA_IDENTITY_4_ACCESS_SEQ

&----


  • Seperates the Available Data for processing for both Access Sequences

----


FORM DATA_IDENTITY_4_ACCESS_SEQ .

CLEAR : W_IFINAL,

W_ACC1,

W_ACC2.

SORT T_MVKE BY MATNR VKORG VTWEG.

LOOP AT T_IHEADER INTO W_IHEADER WHERE SELECT = C_X.

LOOP AT T_IFINAL INTO W_IFINAL WHERE VBELN EQ W_IHEADER-VBELN.

IF NOT W_IFINAL-PMATN IS INITIAL.

CLEAR W_MVKE.

READ TABLE T_MVKE

INTO W_MVKE

WITH KEY MATNR = W_IFINAL-PMATN

VKORG = P_VKORG

VTWEG = P_VTWEG

BINARY SEARCH.

IF W_MVKE-KONDM IS INITIAL.

IF NOT W_IFINAL-VKAUS IS INITIAL.

W_ACC2-ERROR = C_1.

ELSE.

CLEAR W_ACC2-ERROR.

ENDIF. " ZCOUNT exists for the material

W_ACC2-VBELN = W_IFINAL-VBELN.

W_ACC2-MATNR = W_IFINAL-PMATN.

W_ACC2-KUNNR = W_IFINAL-KUNNR.

W_ACC2-VRKME = W_IFINAL-VRKME.

W_ACC2-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.

W_ACC2-KSTBM = W_IFINAL-KWMENG.

W_ACC2-KZWI1 = W_IFINAL-KZWI1.

APPEND W_ACC2 TO T_ACC2.

ELSE. "Material Pricing Group exists for the records

W_ACC1-KONDM = W_MVKE-KONDM.

IF W_IFINAL-VKAUS IS INITIAL.

  • CLEAR W_ACC2-ERROR.

  • W_ACC2-VBELN = W_IFINAL-VBELN.

  • W_ACC2-MATNR = W_IFINAL-PMATN.

  • W_ACC2-KUNNR = W_IFINAL-KUNNR.

  • W_ACC2-VRKME = W_IFINAL-VRKME.

  • W_ACC2-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.

  • W_ACC2-KSTBM = W_IFINAL-KWMENG.

  • W_ACC2-KZWI1 = W_IFINAL-KZWI1.

  • APPEND W_ACC2 TO T_ACC2.

W_ACC1-ZCOUNT = C_01.

ELSE.

W_ACC1-ZCOUNT = W_IFINAL-VKAUS+1(2).

ENDIF.

CLEAR W_ACC1-ERROR.

W_ACC1-VBELN = W_IFINAL-VBELN.

W_ACC1-KUNNR = W_IFINAL-KUNNR.

W_ACC1-VRKME = W_IFINAL-VRKME.

W_ACC1-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.

W_ACC1-KSTBM = W_IFINAL-KWMENG.

W_ACC1-KZWI1 = W_IFINAL-KZWI1.

APPEND W_ACC1 TO T_ACC1.

ENDIF.

ELSE. "New Material Number doesn't exist

  • SORT T_MVKE BY MATNR VKORG VTWEG.

CLEAR W_MVKE.

READ TABLE T_MVKE

INTO W_MVKE

WITH KEY MATNR = W_IFINAL-MATNR

VKORG = P_VKORG

VTWEG = P_VTWEG

BINARY SEARCH.

IF W_MVKE-KONDM IS INITIAL.

IF NOT W_IFINAL-VKAUS IS INITIAL.

W_ACC2-ERROR = C_1.

ELSE.

CLEAR W_ACC2-ERROR.

ENDIF.

W_ACC2-VBELN = W_IFINAL-VBELN.

W_ACC2-MATNR = W_IFINAL-MATNR.

W_ACC2-KUNNR = W_IFINAL-KUNNR.

W_ACC2-VRKME = W_IFINAL-VRKME.

W_ACC2-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.

W_ACC2-KSTBM = W_IFINAL-KWMENG.

W_ACC2-KZWI1 = W_IFINAL-KZWI1.

APPEND W_ACC2 TO T_ACC2.

ELSE. "Material Pricing Group exists for the records

W_ACC1-KONDM = W_MVKE-KONDM.

IF W_IFINAL-VKAUS IS INITIAL.

  • CLEAR W_ACC2-ERROR.

  • W_ACC2-VBELN = W_IFINAL-VBELN.

  • W_ACC2-MATNR = W_IFINAL-MATNR.

  • W_ACC2-KUNNR = W_IFINAL-KUNNR.

  • W_ACC2-VRKME = W_IFINAL-VRKME.

  • W_ACC2-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.

  • W_ACC2-KSTBM = W_IFINAL-KWMENG.

  • W_ACC2-KZWI1 = W_IFINAL-KZWI1.

  • APPEND W_ACC2 TO T_ACC2.

W_ACC1-ZCOUNT = C_01.

ELSE.

W_ACC1-ZCOUNT = W_IFINAL-VKAUS+1(2).

ENDIF.

CLEAR W_ACC1-ERROR.

W_ACC1-VBELN = W_IFINAL-VBELN.

W_ACC1-KUNNR = W_IFINAL-KUNNR.

W_ACC1-VRKME = W_IFINAL-VRKME.

W_ACC1-ZZTECHSPEC = W_IFINAL-ZZTECHSPEC.

W_ACC1-KSTBM = W_IFINAL-KWMENG.

W_ACC1-KZWI1 = W_IFINAL-KZWI1.

APPEND W_ACC1 TO T_ACC1.

ENDIF.

ENDIF. " CHECK FOR W_IFINAL-PMATN

CLEAR: W_ACC1,

W_ACC2.

ENDLOOP. " T_IFINAL

ENDLOOP. " T_IHEADER

ENDFORM. " DATA_IDENTITY_4_ACCESS_SEQ

&----


*& Form CREATE_CONDITIONS

&----


  • Creates the Condition Records for first two access sequences

----


FORM CREATE_CONDITIONS .

DATA : L_ERROREXIST(1) TYPE C,

L_KONDM TYPE KONDM,

L_KSTBM(18) TYPE C,

L_KBETR(13) TYPE C,

L_FLAG_NEW(1) TYPE C,

L_UNAME TYPE SY-UNAME,

L_ACC1_VBELN TYPE VBELN_VA,

L_ACC2_VBELN TYPE VBELN_VA.

W_PARAMS-DISMODE = C_DISMODE. "Dispaly mode

W_PARAMS-UPDMODE = C_UPDATE. "Update mode

W_PARAMS-CATTMODE = SPACE. "CATT

W_PARAMS-DEFSIZE = C_DYNBEGIN. "Default Size

W_PARAMS-RACOMMIT = C_DYNBEGIN. "Commit

W_PARAMS-NOBINPT = SPACE. "No Batch Input

W_PARAMS-NOBIEND = SPACE. "BI END

    • code for the first access sequence..............................starts here

*

*

CLEAR: W_ACC1,

L_UNAME.

SORT T_ACC1 BY VBELN KUNNR KONDM ZCOUNT ASCENDING KSTBM DESCENDING.

LOOP AT T_ACC1 INTO W_ACC1.

CALL FUNCTION 'ENQUEUE_EVVBAKE' "#EC *

EXPORTING

VBELN = W_ACC1-VBELN

EXCEPTIONS

FOREIGN_LOCK = 2.

  • SYSTEM_FAILURE = 0

  • OTHERS = 0.

L_UNAME = SY-MSGV1.

IF SY-SUBRC EQ 2.

MESSAGE E042(V1) WITH W_ACC1-VBELN L_UNAME.

ELSE.

IF NOT W_ACC1-ERROR IS INITIAL.

W_MESSAGE1-VKORG = P_VKORG.

W_MESSAGE1-VTWEG = P_VTWEG.

W_MESSAGE1-KUNNR = W_ACC1-KUNNR.

W_MESSAGE1-KONDM = L_KONDM.

W_MESSAGE1-ZCOUNT = W_ACC1-ZCOUNT.

W_MESSAGE1-MSGTYP = W_BDCMSGCOLL-MSGTYP.

CONCATENATE TEXT-018 TEXT-016 W_ACC1-VBELN INTO W_MESSAGE1-TEXT.

APPEND W_MESSAGE1 TO T_MESSAGE1.

W_ACC1-ERROR = C_2. " 2 is the status which is used to indicate that this record is processed for error

" message and would be deleted from the internal table before processing the BDC.

MODIFY T_ACC1 FROM W_ACC1 TRANSPORTING ERROR.

ELSE.

  • DELETE T_ACC2 WHERE ERROR EQ C_2.

CLEAR: L_ERROREXIST,

L_FLAG_NEW.

AT NEW ZCOUNT.

L_FLAG_NEW = C_X.

ENDAT.

IF L_FLAG_NEW EQ C_X.

CLEAR L_FLAG_NEW.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '0100'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RV13A-KSCHL'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'RV13A-KSCHL'

C_ZBPR.

PERFORM BDC_DYNPRO USING 'SAPLV14A' '0100'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RV130-SELKZ(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=WEIT'.

PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'

C_X.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1950'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'KONP-KMEIN(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'KOMG-VKORG'

P_VKORG.

PERFORM BDC_FIELD USING 'KOMG-VTWEG'

P_VTWEG.

PERFORM BDC_FIELD USING 'KOMG-KUNNR'

W_ACC1-KUNNR.

PERFORM BDC_FIELD USING 'KOMG-KONDM' "Material Pricing Group

W_ACC1-KONDM.

PERFORM BDC_FIELD USING 'KONP-KMEIN(01)'

W_ACC1-VRKME.

PERFORM BDC_FIELD USING 'KONP-KPEIN(01)'

C_1000.

PERFORM BDC_FIELD USING 'KOMG-ZZCOUNT(01)'

W_ACC1-ZCOUNT.

PERFORM BDC_FIELD USING 'KOMG-ZZTECHSPEC(01)'

W_ACC1-ZZTECHSPEC.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1950'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'KOMG-ZZCOUNT(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=KTXT'.

PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'

C_X.

PERFORM BDC_DYNPRO USING 'SAPLV70T' '0101'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LV70T-LTX01(04)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=BACK'.

L_ACC1_VBELN = W_ACC1-VBELN.

SHIFT L_ACC1_VBELN LEFT DELETING LEADING '0'.

PERFORM BDC_FIELD USING 'LV70T-LTX01(04)'

L_ACC1_VBELN.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1950'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'KOMG-ZZCOUNT(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=PSTF'.

PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'

C_X.

ENDIF.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '0303'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'KONM-KBETR(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=EINF'.

CLEAR L_KSTBM.

L_KSTBM = W_ACC1-KSTBM.

PERFORM BDC_FIELD USING 'KONM-KSTBM(01)' L_KSTBM.

PERFORM BDC_FIELD USING 'RV13A-KONMS(01)' W_ACC1-VRKME.

CLEAR L_KBETR.

L_KBETR = W_ACC1-KZWI1.

PERFORM BDC_FIELD USING 'KONM-KBETR(01)' L_KBETR.

AT END OF ZCOUNT.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=SICH'.

CALL TRANSACTION C_VK11 USING T_BDCDATA "#EC CI_CALLTA

OPTIONS FROM W_PARAMS

MESSAGES INTO T_BDCMSGCOLL.

LOOP AT T_BDCMSGCOLL INTO W_BDCMSGCOLL.

IF W_BDCMSGCOLL-MSGTYP EQ C_E OR

W_BDCMSGCOLL-MSGTYP EQ C_I OR

W_BDCMSGCOLL-MSGTYP EQ C_A.

  • L_ERROREXIST = C_X.

W_ACC1-ERROR = C_3.

MODIFY T_ACC1 FROM W_ACC1 TRANSPORTING ERROR.

ENDIF.

CLEAR W_BDCMSGCOLL.

ENDLOOP.

  • IF L_ERROREXIST IS INITIAL.

*

  • PERFORM CHANGE_SALESDOCUMENT_STATUS USING W_ACC1-VBELN.

*

  • ENDIF.

  • Building the Internal Table to hold Success & Error Messages

CLEAR: W_BDCMSGCOLL,

G_MESSAGE.

LOOP AT T_BDCMSGCOLL INTO W_BDCMSGCOLL.

*Funtion module to output the error and sucess messages

CALL FUNCTION 'MESSAGE_TEXT_BUILD'

EXPORTING

MSGID = W_BDCMSGCOLL-MSGID

MSGNR = W_BDCMSGCOLL-MSGNR

MSGV1 = W_BDCMSGCOLL-MSGV1

MSGV2 = W_BDCMSGCOLL-MSGV2

MSGV3 = W_BDCMSGCOLL-MSGV3

MSGV4 = W_BDCMSGCOLL-MSGV4

IMPORTING

MESSAGE_TEXT_OUTPUT = G_MESSAGE.

  • W_MESSAGE1-VBELN = W_IHEADER-VBELN.

W_MESSAGE1-VKORG = P_VKORG.

W_MESSAGE1-VTWEG = P_VTWEG.

W_MESSAGE1-KUNNR = W_ACC1-KUNNR.

W_MESSAGE1-KONDM = W_ACC1-KONDM.

W_MESSAGE1-ZCOUNT = W_ACC1-ZCOUNT.

W_MESSAGE1-MSGTYP = W_BDCMSGCOLL-MSGTYP.

CONCATENATE G_MESSAGE TEXT-016 W_ACC1-VBELN INTO W_MESSAGE1-TEXT.

APPEND W_MESSAGE1 TO T_MESSAGE1.

CLEAR : W_BDCMSGCOLL,

G_MESSAGE,

W_MESSAGE1.

EXIT.

ENDLOOP.

REFRESH : T_BDCDATA,

T_BDCMSGCOLL.

ENDAT.

ENDIF.

CLEAR W_ACC1.

ENDIF.

CALL FUNCTION 'DEQUEUE_EVVBAKE'

EXPORTING

VBELN = W_ACC1-VBELN.

ENDLOOP.

  • code for the first access sequence...............................ends here

  • code for the second access sequence..............................starts here

CLEAR: W_ACC2,

L_UNAME.

SORT T_ACC2 BY VBELN KUNNR MATNR ASCENDING KSTBM DESCENDING.

LOOP AT T_ACC2 INTO W_ACC2. "Looping at the Second Access Sequence Data Table.

CALL FUNCTION 'ENQUEUE_EVVBAKE' "#EC *

EXPORTING

VBELN = W_ACC2-VBELN

EXCEPTIONS

FOREIGN_LOCK = 2.

L_UNAME = SY-MSGV1.

IF SY-SUBRC EQ 2.

MESSAGE E042(V1) WITH W_ACC2-VBELN L_UNAME.

ELSE.

IF NOT W_ACC2-ERROR IS INITIAL.

W_MESSAGE2-VKORG = P_VKORG.

W_MESSAGE2-VTWEG = P_VTWEG.

W_MESSAGE2-KUNNR = W_ACC2-KUNNR.

W_MESSAGE2-MATNR = W_ACC2-MATNR.

W_MESSAGE2-MSGTYP = C_E.

CONCATENATE TEXT-017 TEXT-016 W_ACC2-VBELN INTO W_MESSAGE2-TEXT.

APPEND W_MESSAGE2 TO T_MESSAGE2.

W_ACC2-ERROR = C_2. " 2 is the status which is used to indicate that this record is processed for error

" message and would be deleted from the internal table before processing the BDC.

MODIFY T_ACC2 FROM W_ACC2 TRANSPORTING ERROR.

ELSE.

  • ENDIF. " If this record does not have the ZCount inconsistency

*

  • CLEAR W_ACC2.

*

  • ENDLOOP.

*

  • LOOP AT T_ACC2 INTO W_ACC2.

*

  • IF W_ACC2-ERROR IS INITIAL.

  • Deletion from the Internal Table is done inorder to ensure that proper records get created.

  • And only those records which are already processed for Error Management are deleted.

  • DELETE T_ACC2 WHERE ERROR EQ C_2.

CLEAR: L_ERROREXIST,

L_FLAG_NEW.

AT NEW MATNR.

L_FLAG_NEW = C_X.

ENDAT.

IF L_FLAG_NEW EQ C_X.

CLEAR L_FLAG_NEW.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '0100'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RV13A-KSCHL'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'RV13A-KSCHL'

C_ZBPR.

PERFORM BDC_DYNPRO USING 'SAPLV14A' '0100'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'RV130-SELKZ(02)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=WEIT'.

PERFORM BDC_FIELD USING 'RV130-SELKZ(02)'

C_X.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1951'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'KOMG-VKORG'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'/00'.

PERFORM BDC_FIELD USING 'KOMG-VKORG'

P_VKORG.

PERFORM BDC_FIELD USING 'KOMG-VTWEG'

P_VTWEG.

PERFORM BDC_FIELD USING 'KOMG-KUNNR'

W_ACC2-KUNNR.

PERFORM BDC_FIELD USING 'KOMG-MATNR(01)'

W_ACC2-MATNR.

PERFORM BDC_FIELD USING 'KOMG-ZZTECHSPEC(01)'

W_ACC2-ZZTECHSPEC.

PERFORM BDC_FIELD USING 'KONP-KPEIN(01)'

C_1000.

PERFORM BDC_FIELD USING 'KONP-KMEIN(01)'

W_ACC2-VRKME.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1951'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'KOMG-MATNR(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=KTXT'.

PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'

C_X.

PERFORM BDC_DYNPRO USING 'SAPLV70T' '0101'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'LV70T-LTX01(04)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=BACK'.

L_ACC2_VBELN = W_ACC2-VBELN.

SHIFT L_ACC2_VBELN LEFT DELETING LEADING '0'.

PERFORM BDC_FIELD USING 'LV70T-LTX01(04)'

L_ACC2_VBELN.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '1951'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'KOMG-MATNR(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=PSTF'.

PERFORM BDC_FIELD USING 'RV130-SELKZ(01)'

C_X.

ENDIF.

PERFORM BDC_DYNPRO USING 'SAPMV13A' '0303'.

PERFORM BDC_FIELD USING 'BDC_CURSOR'

'KONM-KBETR(01)'.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=EINF'.

CLEAR L_KSTBM.

L_KSTBM = W_ACC2-KSTBM.

PERFORM BDC_FIELD USING 'KONM-KSTBM(01)' L_KSTBM.

PERFORM BDC_FIELD USING 'RV13A-KONMS(01)' W_ACC2-VRKME.

CLEAR L_KBETR.

L_KBETR = W_ACC2-KZWI1.

PERFORM BDC_FIELD USING 'KONM-KBETR(01)' L_KBETR.

*********END OF THE MATERIAL FOR A QUOTATION

AT END OF MATNR.

PERFORM BDC_FIELD USING 'BDC_OKCODE'

'=SICH'.

CALL TRANSACTION C_VK11 USING T_BDCDATA "#EC CI_CALLTA

OPTIONS FROM W_PARAMS

MESSAGES INTO T_BDCMSGCOLL.

LOOP AT T_BDCMSGCOLL INTO W_BDCMSGCOLL.

IF W_BDCMSGCOLL-MSGTYP EQ C_E OR

W_BDCMSGCOLL-MSGTYP EQ C_I OR

W_BDCMSGCOLL-MSGTYP EQ C_A.

  • L_ERROREXIST = C_X.

W_ACC2-ERROR = C_3.

MODIFY T_ACC2 FROM W_ACC2 TRANSPORTING ERROR.

ENDIF.

CLEAR W_BDCMSGCOLL.

ENDLOOP.

  • IF L_ERROREXIST IS INITIAL.

*

  • PERFORM CHANGE_SALESDOCUMENT_STATUS USING W_ACC2-VBELN.

*

  • ENDIF.

  • Building the Internal Table to hold Success & Error Messages

CLEAR: W_BDCMSGCOLL,

G_MESSAGE.

LOOP AT T_BDCMSGCOLL INTO W_BDCMSGCOLL.

CALL FUNCTION 'MESSAGE_TEXT_BUILD'

EXPORTING

MSGID = W_BDCMSGCOLL-MSGID

MSGNR = W_BDCMSGCOLL-MSGNR

MSGV1 = W_BDCMSGCOLL-MSGV1

MSGV2 = W_BDCMSGCOLL-MSGV2

MSGV3 = W_BDCMSGCOLL-MSGV3

MSGV4 = W_BDCMSGCOLL-MSGV4

IMPORTING

MESSAGE_TEXT_OUTPUT = G_MESSAGE.

  • W_MESSAGE2-VBELN = W_IHEADER-VBELN.

W_MESSAGE2-VKORG = P_VKORG.

W_MESSAGE2-VTWEG = P_VTWEG.

W_MESSAGE2-KUNNR = W_ACC2-KUNNR.

W_MESSAGE2-MATNR = W_ACC2-MATNR.

W_MESSAGE2-MSGTYP = W_BDCMSGCOLL-MSGTYP.

CONCATENATE G_MESSAGE TEXT-016 W_ACC2-VBELN INTO W_MESSAGE2-TEXT.

APPEND W_MESSAGE2 TO T_MESSAGE2.

CLEAR : W_BDCMSGCOLL,

G_MESSAGE,

W_MESSAGE2.

EXIT.

ENDLOOP.

REFRESH : T_BDCDATA,

T_BDCMSGCOLL.

ENDAT. "AT END OF MATNR

ENDIF. "IF W_ACC2-ERROR IS INITIAL / NOT.

CLEAR: W_ACC2.

ENDIF.

CALL FUNCTION 'DEQUEUE_EVVBAKE'

EXPORTING

VBELN = W_ACC2-VBELN.

ENDLOOP.

  • code for the second access sequence..............................ends here

  • Processing for Change of Sales Document starts here

CLEAR: W_IHEADER,

L_ERROREXIST.

LOOP AT T_IHEADER INTO W_IHEADER WHERE SELECT EQ C_X.

CALL FUNCTION 'ENQUEUE_EVVBAKE' "#EC *

EXPORTING

VBELN = W_IHEADER-VBELN

EXCEPTIONS

FOREIGN_LOCK = 2.

L_UNAME = SY-MSGV1.

IF SY-SUBRC EQ 2.

MESSAGE E042(V1) WITH W_IHEADER-VBELN L_UNAME.

ENDIF.

LOOP AT T_ACC1 INTO W_ACC1 WHERE VBELN = W_IHEADER-VBELN.

IF NOT W_ACC1-ERROR IS INITIAL.

L_ERROREXIST = C_X.

ENDIF.

ENDLOOP.

LOOP AT T_ACC2 INTO W_ACC2 WHERE VBELN = W_IHEADER-VBELN.

IF NOT W_ACC2-ERROR IS INITIAL.

L_ERROREXIST = C_X.

ENDIF.

ENDLOOP.

IF L_ERROREXIST IS INITIAL.

PERFORM CHANGE_SALESDOCUMENT_STATUS USING W_IHEADER-VBELN.

ENDIF.

CALL FUNCTION 'DEQUEUE_EVVBAKE'

EXPORTING

VBELN = W_IHEADER-VBELN.

CLEAR L_ERROREXIST.

ENDLOOP.

ENDFORM. " CREATE_CONDITIONS

&----


*& Form CHANGE_SALESDOCUMENT_STATUS

&----


  • Shall change the status of Order Reason for the given Quotation

----


  • --> P_VBELN Quotation Number

----


FORM CHANGE_SALESDOCUMENT_STATUS USING P_VBELN TYPE VBELN.

DATA :

W_ORDER_HEADER_IN TYPE BAPISDH1,

W_ORDER_HEADER_INX TYPE BAPISDH1X,

W_RETURN TYPE BAPIRET2, "#EC NEEDED

T_ORDER_HEADER_IN TYPE STANDARD TABLE OF BAPISDH1, "#EC NEEDED

T_ORDER_HEADER_INX TYPE STANDARD TABLE OF BAPISDH1X, "#EC NEEDED

T_RETURN TYPE STANDARD TABLE OF BAPIRET2.

CLEAR: W_ORDER_HEADER_IN,

W_ORDER_HEADER_INX.

  • LOOP AT T_IHEADER INTO W_IHEADER WHERE SELECT = C_X.

W_ORDER_HEADER_IN-ORD_REASON = 'Q3'.

APPEND W_ORDER_HEADER_IN TO T_ORDER_HEADER_IN.

W_ORDER_HEADER_INX-UPDATEFLAG = C_U.

W_ORDER_HEADER_INX-ORD_REASON = C_X.

APPEND W_ORDER_HEADER_INX TO T_ORDER_HEADER_INX.

*--Bapi to change status of open sales IHEADERs

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'

EXPORTING

SALESDOCUMENT = P_VBELN

ORDER_HEADER_IN = W_ORDER_HEADER_IN

ORDER_HEADER_INX = W_ORDER_HEADER_INX

TABLES

RETURN = T_RETURN.

CLEAR W_RETURN.

READ TABLE T_RETURN INTO W_RETURN WITH KEY TYPE = 'E'.

IF SY-SUBRC = 0.

CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY_OK'

EXPORTING

ENDPOS_COL = C_100

ENDPOS_ROW = C_25

STARTPOS_COL = C_5

STARTPOS_ROW = C_5

TITLETEXT = C_ERROR

TABLES

VALUETAB = T_RETURN

EXCEPTIONS

BREAK_OFF = 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.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = ' '.

ENDIF.

CLEAR: W_ORDER_HEADER_IN,

W_ORDER_HEADER_INX.

  • ENDLOOP.

ENDFORM. " CHANGE_SALESDOCUMENT_STATUS

&----


*& Form bdc_dynpro

&----


  • This form takes the program name and screen number

----


  • -->p_program Program Name

  • -->p_screen Screen Number

----


FORM BDC_DYNPRO USING P_PROGRAM TYPE BDCDATA-PROGRAM

P_SCREEN TYPE BDCDATA-DYNPRO.

W_BDCDATA-PROGRAM = P_PROGRAM.

W_BDCDATA-DYNPRO = P_SCREEN.

W_BDCDATA-DYNBEGIN = C_X.

APPEND W_BDCDATA TO T_BDCDATA.

CLEAR W_BDCDATA.

ENDFORM. " bdc_dynpro

&----


*& Form bdc_field

&----


  • This form takes the field name and field value

----


  • -->p_fnam Field Name

  • -->p_fval Field Value

----


FORM BDC_FIELD USING P_FNAM TYPE ANY

P_FVAL TYPE ANY.

W_BDCDATA-FNAM = P_FNAM.

W_BDCDATA-FVAL = P_FVAL.

APPEND W_BDCDATA TO T_BDCDATA.

CLEAR W_BDCDATA.

ENDFORM. " bdc_field

&----


*& Form DISPLAY_RESULT

&----


  • Displays all the messages regarding posting of Condition Records

----


FORM DISPLAY_RESULT .

  • Messages related to the First Access Sequence

IF T_MESSAGE1 IS NOT INITIAL.

WRITE : /70 TEXT-008.

SKIP 2.

SORT T_MESSAGE1 BY VKORG.

WRITE : /9 TEXT-010, 24 TEXT-011, 50 TEXT-012, 70 TEXT-013.

CLEAR G_FLAG1.

LOOP AT T_MESSAGE1 INTO W_MESSAGE1.

AT NEW VKORG.

G_FLAG1 = 'X'.

ENDAT.

AT NEW VTWEG.

G_FLAG1 = 'X'.

ENDAT.

AT NEW KUNNR.

G_FLAG1 = 'X'.

ENDAT.

AT NEW KONDM.

G_FLAG1 = 'X'.

ENDAT.

IF G_FLAG1 = 'X'.

SKIP 1.

WRITE : /9 W_MESSAGE1-VKORG, 24 W_MESSAGE1-VTWEG,

50 W_MESSAGE1-KUNNR, 70 W_MESSAGE1-KONDM.

SKIP 1.

WRITE: /9 TEXT-014, 23 TEXT-019, 45 TEXT-015.

ENDIF.

WRITE : /9 W_MESSAGE1-MSGTYP, 23 W_MESSAGE1-ZCOUNT, 45 W_MESSAGE1-TEXT.

CLEAR: G_FLAG1,

W_MESSAGE1.

ENDLOOP.

REFRESH T_MESSAGE1.

ENDIF.

  • Messages related to the Second Access Sequence

IF T_MESSAGE2 IS NOT INITIAL.

SKIP 2.

WRITE : /70 TEXT-009.

SKIP 2.

SORT T_MESSAGE2 BY VKORG.

WRITE : /9 TEXT-010, 24 TEXT-011, 50 TEXT-012.

CLEAR G_FLAG1.

LOOP AT T_MESSAGE2 INTO W_MESSAGE2.

AT NEW VKORG.

G_FLAG1 = 'X'.

ENDAT.

AT NEW VTWEG.

G_FLAG1 = 'X'.

ENDAT.

AT NEW KUNNR.

G_FLAG1 = 'X'.

ENDAT.

IF G_FLAG1 = 'X'.

SKIP 1.

WRITE : /9 W_MESSAGE2-VKORG, 24 W_MESSAGE2-VTWEG, 50 W_MESSAGE2-KUNNR.

SKIP 1.

WRITE: /9 TEXT-014, 23 TEXT-020, 45 TEXT-015.

ENDIF.

WRITE : /9 W_MESSAGE2-MSGTYP, 23 W_MESSAGE2-MATNR, 45 W_MESSAGE2-TEXT.

CLEAR: G_FLAG1,

W_MESSAGE2.

ENDLOOP.

REFRESH T_MESSAGE2.

ENDIF.

ENDFORM. " DISPLAY_RESULT

&----


*& Form CAPTURE_SCREEN

&----


  • Captures the Selection Screen Values of the present program

----


FORM CAPTURE_SCREEN .

DATA L_REPID TYPE SY-REPID.

REFRESH T_SELECT.

L_REPID = SY-REPID.

CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'

EXPORTING

CURR_REPORT = L_REPID

  • IMPORTING

  • SP =

TABLES

SELECTION_TABLE = T_SELECT

EXCEPTIONS

NOT_FOUND = 1

NO_REPORT = 2

OTHERS = 3

.

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. " CAPTURE_SCREEN

<b>Reward points if this helps,</b>

Kiran

Read only

Pawan_Kesari
Active Contributor
0 Likes
751

refer program BCALV_GRID_07

Read only

Former Member
0 Likes
751

Hi Lijo,

Go to sap standard alv program(eg:BALVBT01 ). In that there will be a pfstatus name 'STANDARD' will b there. copy tht pf-status to ur program. then add ur push button to that copied pf-status.

Regards,

Nikhil

Read only

varma_narayana
Active Contributor
0 Likes
752

Hi

First Step:

Create a GUI Status : Tcode SE41

Gui Status: GUI_ALV1

To Get the Standard Functions of ALV into the GUI status:

menu path in SE41

<b>Extras -> Adjust Template</b>

Select <b>List Viewer</b>

Add the New Button with Function code

Eg: %NEW

<b>Check this Sample Code:</b>

type-pools SLIS.

data i_mat type table of mara WITH HEADER LINE.

DATA : G_REPID LIKE SY-REPID.

MOVE SY-REPID TO G_REPID.

select * from mara into table i_mat UP TO 100 ROWS.

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = G_REPID

I_CALLBACK_PF_STATUS_SET = 'SET_GUI'

I_CALLBACK_USER_COMMAND = 'USER_COMMAND'

I_STRUCTURE_NAME = 'MARA'

TABLES

t_outtab = I_MAT

  • 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 SET_GUI USING EXTAB TYPE SLIS_T_EXTAB.

SET PF-STATUS 'GUI_ALV1' EXCLUDING EXTAB.

ENDFORM.

FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM

RS_SELFIELD TYPE SLIS_SELFIELD.

CASE R_UCOMM.

WHEN '&NEW'. "BUTTON ADDED IN TOOLBAR

READ TABLE I_MAT INDEX RS_SELFIELD-TABINDEX. "cursorposit.

IF SY-SUBRC = 0.

ENDIF.

CLEAR R_UCOMM.

ENDCASE.

ENDFORM.

Reward if helpful.

Read only

Former Member
0 Likes
751

yes it is possible ....

please see this program


report zalv_toolbar*********
INCLUDE <icon>.

DATA: ok_code LIKE sy-ucomm,
      gt_spfli   TYPE TABLE OF spfli,
      gt_sflight TYPE TABLE OF sflight,
      g_repid LIKE sy-repid,
      g_max type i value 100,
      gs_layout   TYPE lvc_s_layo,
      gs_toolbar  TYPE stb_button,
      cont_on_100   TYPE scrfname VALUE 'BCALVC_TOOLBAR_D100_C1',
      cont_on_200   TYPE scrfname VALUE 'BCALVC_TOOLBAR_D200_C1',
      grid1  TYPE REF TO cl_gui_alv_grid,
      grid2  TYPE REF TO cl_gui_alv_grid,
      custom_container1 TYPE REF TO cl_gui_custom_container,
      custom_container2 TYPE REF TO cl_gui_custom_container,
      event_receiver TYPE REF TO lcl_event_receiver.

* Set initial dynpro
SET SCREEN 100.

****************************************************************
* LOCAL CLASSES: Definition
****************************************************************
*===============================================================
* class lcl_event_receiver: local class to
*                         define and handle own functions.
*
* Definition:
* ~~~~~~~~~~~
CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.


    CLASS-METHODS:
     handle_toolbar
        FOR EVENT toolbar OF cl_gui_alv_grid
            IMPORTING e_object e_interactive,

     handle_menu_button
        FOR EVENT menu_button OF cl_gui_alv_grid
            IMPORTING e_object e_ucomm,

    handle_user_command
        FOR EVENT user_command OF cl_gui_alv_grid
            IMPORTING e_ucomm.

  PRIVATE SECTION.

ENDCLASS.
*
* lcl_event_receiver (Definition)
*===============================================================

****************************************************************
* LOCAL CLASSES: Implementation
****************************************************************
*===============================================================
* class lcl_event_receiver (Implementation)
*
*
CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD handle_toolbar.
* § 2.At event TOOLBAR define a toolbar element of type 2 by using
*    event paramenter E_OBJECT. Remember its function code.
*.......
* Part I: Define a menu button including a function code that
*         is evaluated in 'handle_MENU_BUTTON
*.......


* append a separator to normal toolbar
    CLEAR gs_toolbar.
    MOVE 3 TO gs_toolbar-butn_type.
    APPEND gs_toolbar TO e_object->mt_toolbar.

* append a menut o switch between detail levels.

    CLEAR gs_toolbar.
    MOVE 'DETAIL_MENU' TO gs_toolbar-function.
* --> This function code is evaluated in 'handle_menu_button'
    MOVE icon_detail TO gs_toolbar-icon.
    MOVE 'Switch to Table...'(101) TO gs_toolbar-quickinfo.
    MOVE 2 TO gs_toolbar-butn_type.
    MOVE space TO gs_toolbar-disabled.
    APPEND gs_toolbar TO e_object->mt_toolbar.

  ENDMETHOD.
*--------------------------------------------------------------------
  METHOD handle_menu_button.
* § 3.At event MENU_BUTTON query your function code and define a
*     menu in the same way as a context menu.
*..........
* Part II: Evaluate 'e_ucomm' to see which menu button of the toolbar
*          has been clicked on.
*          Define then the corresponding menu.
*          The menu contains function codes that are evaluated
*          in 'handle_user_command'.
*...........

* handle own menubuttons
    IF e_ucomm = 'DETAIL_MENU'.
      CALL METHOD e_object->add_function
                  EXPORTING fcode   = 'TO_SPFLI'
                            text    = text-100. "Overview
      CALL METHOD e_object->add_function
                  EXPORTING fcode   = 'TO_SFLIGHT'
                            text    = text-200. "Flights

    ENDIF.
  ENDMETHOD.
*---------------------------------------------------------------------
  METHOD handle_user_command.
* § 4.At event USER_COMMAND query the function code of each function
*     defined in step 3.
*.........
* Part III : Evaluate user command to invoke the corresponding
*            function.
*.........

    DATA: lt_rows TYPE lvc_t_row.

* get selected row
    CALL METHOD grid1->get_selected_rows
             IMPORTING et_index_rows = lt_rows.
    CALL METHOD cl_gui_cfw=>flush.
    IF sy-subrc ne 0.
* add your handling, for example
      CALL FUNCTION 'POPUP_TO_INFORM'
           EXPORTING
                titel = g_repid
                txt2  = sy-subrc
                txt1  = 'Error in Flush'(500).
    ENDIF.

* go to other table
    CASE e_ucomm.
      WHEN 'TO_SPFLI'.
        LEAVE TO SCREEN 100.
      WHEN 'TO_SFLIGHT'.
        PERFORM load_sflight_table TABLES lt_rows.
        CALL SCREEN 200.

    ENDCASE.
  ENDMETHOD.                           "handle_user_command
ENDCLASS.
*
* lcl_event_receiver (Implementation)
*===================================================================

*---------------------------------------------------------------------*
*       FORM EXIT_PROGRAM                                             *
*---------------------------------------------------------------------*
FORM exit_program.
* The instance custom_container2 is freed not until the program
* exits from the main screen.
* (It is created only once during the first selection of SFLIGHT,
* no matter how many times the second window is called).
*
  CALL METHOD custom_container1->free.
  IF not custom_container2 is initial.
    CALL METHOD custom_container2->free.
  ENDIF.

  CALL METHOD cl_gui_cfw=>flush.
  IF sy-subrc ne 0.
* add your handling, for example
    CALL FUNCTION 'POPUP_TO_INFORM'
         EXPORTING
              titel = g_repid
              txt2  = sy-subrc
              txt1  = 'Error in Flush'(500).
  ENDIF.
  LEAVE PROGRAM.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  PBO_100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pbo_100 OUTPUT.

  SET PF-STATUS 'MAIN100'.
  set titlebar 'MAIN100'.
  g_repid = sy-repid.
  IF custom_container1 is initial.
* select data from table SPFLI
    PERFORM select_table_spfli CHANGING gt_spfli.
* select data from table SFLIGHT
*    PERFORM SELECT_TABLE_SFLIGHT CHANGING GT_SFLIGHT.

* create a custom container control for our ALV Control
    CREATE OBJECT custom_container1
        EXPORTING
            container_name = cont_on_100.

* create an instance of alv control
    CREATE OBJECT grid1
           EXPORTING i_parent = custom_container1.

*
* Set a titlebar for the grid control
*
    gs_layout-grid_title = text-100.
    CALL METHOD grid1->set_table_for_first_display
         EXPORTING i_structure_name = 'SPFLI'
                   is_layout        = gs_layout
         CHANGING  it_outtab        = gt_spfli.

********
* ->Create Object to receive events and link them to handler methods.
* When the ALV Control raises the event
* the corresponding method is called FOR GRID1.
* (Complies to their definition as CLASS-METHODS).
*
    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handle_user_command
                event_receiver->handle_menu_button
                event_receiver->handle_toolbar for grid1.
*
********

* raise event TOOLBAR:
    CALL METHOD grid1->set_toolbar_interactive.
  ENDIF.
  CALL METHOD cl_gui_control=>set_focus EXPORTING control = grid1.

ENDMODULE.                             " PBO_100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  PAI_100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pai_100 INPUT.

  CASE ok_code.
    WHEN 'EXIT'.
      PERFORM exit_program.

  ENDCASE.
  CLEAR ok_code.
ENDMODULE.                             " PAI_100  INPUT
*&---------------------------------------------------------------------*
*&      Module  PBO_200  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pbo_200 OUTPUT.

  SET PF-STATUS 'MAIN100'.
  g_repid = sy-repid.
  IF custom_container2 is initial.
* data of sflight is already selected!

* create a custom container control for our ALV Control
    CREATE OBJECT custom_container2
        EXPORTING
            container_name = cont_on_200.

* create an instance of alv control
    CREATE OBJECT grid2
           EXPORTING i_parent = custom_container2.
*
* Set a titlebar for the grid control
*
    gs_layout-grid_title = text-200.
    CALL METHOD grid2->set_table_for_first_display
         EXPORTING i_structure_name = 'SFLIGHT'
                   is_layout        = gs_layout
         CHANGING  it_outtab        = gt_sflight.


********
* ->Create Object to receive events and link them to handler methods.
* When the ALV Control raises the event
* the corresponding method is called FOR GRID2.
* (Complies to their definition as CLASS-METHODS).
*
    SET HANDLER
                event_receiver->handle_user_command
                event_receiver->handle_menu_button
                event_receiver->handle_toolbar for grid2.
*
********

    CALL METHOD grid2->set_toolbar_interactive.

  ELSE.
* Since new data has been selected, 'grid2' must be refreshed!
    CALL METHOD grid2->refresh_table_display.
  ENDIF.
  CALL METHOD cl_gui_control=>set_focus EXPORTING control = grid2.

ENDMODULE.                             " PBO_200  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  PAI_200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pai_200 INPUT.

  CASE ok_code.
    WHEN 'EXIT'.
      PERFORM exit_program.

  ENDCASE.
  CLEAR ok_code.
ENDMODULE.                             " PAI_200  INPUT
*&---------------------------------------------------------------------*
*&      Form  SELECT_TABLE_SFLIGHT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_SFLIGHT  text
*----------------------------------------------------------------------*
FORM select_table_sflight USING    p_ls_spfli LIKE LINE OF gt_spfli
                          CHANGING p_gt_sflight LIKE gt_sflight[].
  SELECT * FROM sflight INTO TABLE p_gt_sflight up to g_max rows
              WHERE carrid = p_ls_spfli-carrid
              AND   connid = p_ls_spfli-connid.

ENDFORM.                               " SELECT_TABLE_SFLIGHT


*&---------------------------------------------------------------------*
*&      Form  SELECT_TABLE_SPFLI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_GT_SPFLI  text
*----------------------------------------------------------------------*
FORM select_table_spfli CHANGING p_gt_spfli LIKE gt_spfli[].
  SELECT * FROM spfli INTO TABLE p_gt_spfli.
ENDFORM.                               " SELECT_TABLE_SPFLI
*&---------------------------------------------------------------------*
*&      Form  load_sflight_table
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_ROWS  text
*----------------------------------------------------------------------*

FORM load_sflight_table TABLES p_et_index_rows STRUCTURE lvc_s_row.

  DATA: ls_selected_line LIKE lvc_s_row,
        lf_row_index TYPE lvc_index,
        ls_spfli LIKE LINE OF gt_spfli.

  CLEAR gt_sflight[].
  READ TABLE p_et_index_rows INDEX 1 INTO ls_selected_line.
  IF sy-subrc eq 0.
    lf_row_index = ls_selected_line-index.
* read selected row from internal table gt_sflight
    READ TABLE gt_spfli INDEX lf_row_index INTO ls_spfli.

* select corresponding lines of table sflight

    PERFORM select_table_sflight USING ls_spfli
                               CHANGING gt_sflight.
  ENDIF.

ENDFORM.                               " load_sflight_table

reward points if it is usefull .....

Girish