‎2007 Jul 16 12:31 PM
‎2007 Jul 16 12:46 PM
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.
‎2007 Jul 16 12:34 PM
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
‎2007 Jul 16 12:38 PM
‎2007 Jul 16 12:41 PM
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
‎2007 Jul 16 12:46 PM
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.
‎2007 Jul 16 1:17 PM
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_tablereward points if it is usefull .....
Girish