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

Refreshing the GUI

Former Member
0 Likes
658

Hi Gurus,

I have built an interactive ALV GRID (Using REUSE_ALV_HIERSEQ_LIST_DISPLAY). After displaying the grid, I have given the user a provision to mark a few records using the checkboxes.

After selecting the checkboxes, the user performs BDC using the data from the rows that are selected. I am writing the results of this BDC on a new screen, after setting the PF STATUS to a new GUI.

Problem is that, the results are getting displayed upto 80 columns. i.e. half of the screen is viewable and the rest half is displayed as if it is cleaned. I am thinking that the screen is not getting refreshed. Please help me by giving some suggestion inorder to solve the problem.

<b>Important thing is, if I move the scroll bar on the half displayed screen, whole data gets displayed (probably the screen is getting refreshed).</b>

<b>Points would be rewarded for assistance,</b>

Kiran

3 REPLIES 3
Read only

Former Member
0 Likes
583

Hi Gurus,

Any solutions.... Plz....

Regards,

Kiran

Read only

Former Member
0 Likes
583

Hi Kiran,

Can you send your code?

Regards,

Ravi Bhatnagar

Read only

0 Likes
583

Hi Ravi,

Following is the code, please let me know about what can be done

REPORT ZSPRENH069 LINE-SIZE 300 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

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_VKORG TYPE VKORG, "Sales Organization

G_VTWEG TYPE VTWEG, "Distribution Channel

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_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_Q3(2) TYPE C VALUE 'Q3', "Quotation Approved

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 *

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

CLEAR: G_VKORG,

G_VTWEG.

AT SELECTION-SCREEN ON P_VKORG.

SELECT SINGLE VKORG INTO G_VKORG

FROM TVKO

WHERE VKORG EQ P_VKORG.

IF SY-SUBRC NE 0.

MESSAGE E000(ZS) WITH TEXT-021.

ENDIF.

AT SELECTION-SCREEN ON P_VTWEG.

SELECT SINGLE VTWEG INTO G_VTWEG

FROM TVKOV

WHERE VKORG EQ P_VKORG

AND VTWEG EQ P_VTWEG.

IF SY-SUBRC NE 0.

MESSAGE E000(ZS) WITH TEXT-022.

ENDIF.

CLEAR: G_VKORG,

G_VTWEG.

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

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

IF P_VKAUS EQ C_1. "IF Zcount is given as 1 then quotation without zcount should be picked

"for whom Material Pricing Group should be given.

SELECT A~VBELN

A~KUNNR

B~POSNR

B~MATNR

B~PMATN

B~KWMENG

B~VRKME

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.

ELSE.

CONCATENATE 'C' P_VKAUS INTO L_VKAUS.

SELECT A~VBELN

A~KUNNR

B~POSNR

B~MATNR

B~PMATN

B~KWMENG

B~VRKME

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.

ENDIF.

ELSE.

SELECT A~VBELN

A~KUNNR

B~POSNR

B~MATNR

B~PMATN

B~KWMENG

B~VRKME

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

ELSE.

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

ENDIF. " IS INITIAL CHECK FOR W_MVKE-KONDM

  • This logic is written to avoid records without Material Pricing group whose

  • Zcount is selected as 1.

IF P_VKAUS EQ C_1.

IF NOT W_IFINAL-KONDM IS INITIAL AND W_IFINAL-VKAUS IS INITIAL.

APPEND W_IFINAL TO T_IFINAL.

ENDIF.

ELSE.

APPEND W_IFINAL TO T_IFINAL.

ENDIF.

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

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

REFRESH T_EXTAB.

SET PF-STATUS 'ZSTANDARD_FULLSCREEN' EXCLUDING T_EXTAB.

ENDFORM. "pf_status

&----


*& Form display_alv_report

&----


  • To display ALV report

----


FORM DISPLAY_ALV_REPORT.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

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

I_DEFAULT = C_X

I_SAVE = C_A

IT_EVENTS = T_EVENTS[]

I_TABNAME_HEADER = 'T_IHEADER'

I_TABNAME_ITEM = 'T_IFINAL'

IS_KEYINFO = W_KEYINFO

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 = '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 TYPE 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.

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

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.

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.

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.

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.

W_ACC1-ERROR = C_3.

MODIFY T_ACC1 FROM W_ACC1 TRANSPORTING ERROR.

ENDIF.

CLEAR W_BDCMSGCOLL.

ENDLOOP.

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

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.

W_ACC2-ERROR = C_3.

MODIFY T_ACC2 FROM W_ACC2 TRANSPORTING ERROR.

ENDIF.

CLEAR W_BDCMSGCOLL.

ENDLOOP.

  • 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-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_RETURN TYPE STANDARD TABLE OF BAPIRET2.

CLEAR: W_ORDER_HEADER_IN,

W_ORDER_HEADER_INX.

W_ORDER_HEADER_IN-ORD_REASON = C_Q3.

W_ORDER_HEADER_INX-UPDATEFLAG = C_U.

W_ORDER_HEADER_INX-ORD_REASON = C_X.

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

IF NOT W_RETURN IS INITIAL.

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 = '3'.

ENDIF.

CLEAR: W_ORDER_HEADER_IN,

W_ORDER_HEADER_INX.

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

ENDAT.

AT NEW VTWEG.

G_FLAG1 = C_X.

ENDAT.

AT NEW KUNNR.

G_FLAG1 = C_X.

ENDAT.

AT NEW KONDM.

G_FLAG1 = C_X.

ENDAT.

IF G_FLAG1 = C_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 = C_X.

ENDAT.

AT NEW VTWEG.

G_FLAG1 = C_X.

ENDAT.

AT NEW KUNNR.

G_FLAG1 = C_X.

ENDAT.

IF G_FLAG1 = C_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

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>Points will be rewarded for assistance,</b>

Kiran