Records in VBKD
Hi,
I want to know how records are stored in the table VBKD ?
Are the records stored per line item or are the records stored per header data? This confusion arose because when I create orders in our scenario, so for some orders, VBKD stored records line item wise and for some orders it stored just a header record (for POSNR = 0000).
So can anyone explain, why is it so ?
Regards,
ss
Table Lookup in Table VBKD
When you define a table lookup for the table VBKD (Sales
document: Business data), data does not have to be present
for every item in the sales document. If the item data is no
different than the header data, the system does not store it in
the item as well. In this case, you can find the valid values in
the header data, which is stored in table VBKD under the item
number "000000".
Thus, if you want to read characteristic values from VBKD, you
always need to define two table lookups.
1. First look up against VBKD table using the corresponding
sales document number and item number.
2. If such an entry does not exist, look up using the
corresponding sales document number and item number
as '000000'.
This rule causes the system to first try to read the item data. If
this information is not stored explicitly in VBKD table step 2 is
carried out, which reads the header data.
For more information, check the below link.
[http://help.sap.com/saphelp_47x200/helpdata/en/7a/4c39084a0111d1894c0000e829fbbd/frameset.htm|http://help.sap.com/saphelp_47x200/helpdata/en/7a/4c39084a0111d1894c0000e829fbbd/frameset.htm]
Hope this helps.
Thanks,
Balaji
Similar Messages
-
Hi Experts,
I am useing VBKD-INCO1 - Incoterms (part 1)
VBKD-INCO2 - Incoterms (part 2)
VBKD-ZTERM - Terms of payment key
for some of my report.In VBAP there are suppose 4 line item but in VBKD there is only one entry with line item no 000000 .
so I am not able to utilize this above mentioned fields.
can anyone guid me why there is no entry in VBKD and is there any other table from where I can take this above metioned field?
Thanks in advance
Thanks
SanujeetHi
The record with item 0 means header data:
The data stored in VBKD are valid for all items of sales document, so the system inserts one record only with the item equal to 0.
Only if the user changes some data of VBKD for a certain item, the system'll insert a new record for VBKD with item equal to the item where the modification was done.
So if you need to extract data from VBKD u should run the select twice:
DATA: POSNR TYPE VBAP-POSNR.
DATA: VBKD_H TYPE VBKD.
DATA: VBKD_P TYPE VBKD.
SELECT * FROM VBAP WHERE VBELN = .......
IF VBKD_H IS INITIAL.
SELECT SINGLE * FROM VBKD INTO VBKD_H
WHERE VBELN = VBAP-VBELN
AND POSNR = '000000'.
ENDIF.
SELECT SINGLE * FROM VBKD INTO VBKD_P
WHERE VBELN = VBAP-VBELN
AND POSNR = VBAP-POSNR.
IF SY-SUBRC <> 0.
VBKD_P = VBKD_H.
ENDIF.
ENDSELECT.
Anyway just as I said, the Sales Document: Business Data are generally the same for all items, so I think it''s rare u can find another record there except the header one.
Max -
Select Query Fetching same records multiple time
Hi ABAPers,
I have an issue where the select query is fetching the same records more than one time for particular sale order.
Kindly help to solve the issue.
Thanks in advance..
Here is the Select Query:-
SELECT VBAK~VKORG VBAK~VTWEG VBAK~VBELN VBAK~KUNNR
VBAK~ERDAT VBAK~LIFSK VBKD~INCO1 VBKD~INCO2
VBAP~MATNR VBAP~ARKTX VBAP~MATKL VBAK~BSTNK
VBAK~BSTDK VBAK~KNUMV VBAP~UEPOS VBAP~POSNR
VBAP~KWMENG VBAK~VDATU VBAP~VRKME VBAK~ERNAM VBAK~WAERK
INTO CORRESPONDING FIELDS OF TABLE IT_PENDING FROM VBAK
INNER JOIN VBAP ON VBAK~VBELN = VBAP~VBELN
INNER JOIN VBKD ON VBAK~VBELN = VBKD~VBELN
WHERE
VBAK~VBELN IN SO_VBELN AND
VBAK~ERDAT IN SO_ERDAT AND
( AUART EQ 'OR' OR AUART EQ 'ZEO' OR AUART EQ 'TA' OR AUART EQ 'LP' OR AUART EQ 'ZFOC' ) AND
VKORG IN SO_VKORG AND
VTWEG IN SO_VTWEG AND
SPART IN SO_SPART AND
KUNNR IN SO_KUNNR AND
MATNR IN SO_MATNR AND
MATKL IN SO_MATKL AND
ABGRU EQ '' AND LIFSK <> '35'.
Edited by: Suhas Saha on Jan 14, 2012 3:42 PMHello Suhale,
On retrospection, I found the query in my above response STILL HAS ONE ISSUE. When we are making a left outer join on vbkdposnr = vbapposnr we are only fetching vbkdinco1 and vbkdinco2 values where item level entries exist in VBKD which match with vbkdposnr = vbapposnr.
Actually we should bring inco1 and inco2 from vbkd when a matching entry exists in vbkd where vbkdposnr = vbapposnr and if there is no entry matching vbkdposnr = vbapposnr, then we should fetch inc01 and inco2 from VBKD where posnr = '000000' (i.e., from header).
This is how SAP behaves when you open an item in VA03 and look at inco1 and inco2. They come from the item if an entry corresponding to that item exists in VBKD otherwise they come from VBKD header record (where vbkd~posnr = '000000')
We can't use VBKD in the joins and still be able to do the above. So we need to fetch inco1, inco2 from VBKD separately like below.
FIELD-SYMBOLS: <fs_pending> LIKE LINE OF it_pending.
SELECT vbak~vkorg vbak~vtweg vbak~vbeln vbak~kunnr
vbak~erdat vbak~lifsk "vbkd~inco1 vbkd~inco2
vbap~matnr vbap~arktx vbap~matkl vbak~bstnk
vbak~bstdk vbak~knumv vbap~uepos vbap~posnr
vbap~kwmeng vbak~vdatu vbap~vrkme vbak~ernam vbak~waerk
INTO CORRESPONDING FIELDS OF TABLE it_pending
FROM vbak INNER JOIN vbap
ON vbak~vbeln = vbap~vbeln
WHERE vbak~vbeln IN so_vbeln AND
vbak~erdat IN so_erdat AND
( vbak~auart EQ 'OR' OR vbak~auart EQ 'ZEO' OR
vbak~auart EQ 'TA' OR vbak~auart EQ 'LP' OR
vbak~auart EQ 'ZFOC' ) AND
vbak~vkorg IN so_vkorg AND
vbak~vtweg IN so_vtweg AND
vbak~spart IN so_spart AND
vbak~kunnr IN so_kunnr AND
vbap~matnr IN so_matnr AND
vbap~matkl IN so_matkl AND
vbap~abgru EQ '' AND
vbak~lifsk NE '35'.
LOOP AT it_pending ASSIGNING <fs_pending>.
SELECT SINGLE inco1 inco2
FROM vbkd
INTO (<fs_pending>-inco1,<fs_pending>-inco2)
WHERE vbkd~vbeln = <fs_pending>-vbeln AND
vbkd~posnr = <fs_pending>-posnr.
IF sy-subrc NE 0.
SELECT SINGLE inco1 inco2
FROM vbkd
INTO (<fs_pending>-inco1, <fs_pending>-inco2)
WHERE vbkd~vbeln = <fs_pending>-vbeln AND
vbkd~posnr = '000000'.
ENDIF.
ENDLOOP.
Best regards,
Vishnu Tallapragada. -
Can any one please give me any test program for displaying checkboxes in the ALV Report Layout .
Points will be rewarded even for helpfull answers.
Thanks ,
Veerendranath Maddula.Hi Veerendranath,
below is the sample code for that,
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
WAERK TYPE WAERK, "SD Document Currency
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
*--Begin of changes for the change request 2007096--26th July 2007--
VRKME TYPE VRKME, "Sales Unit according to the Material Master
*--End of changes for the change request 2007096--26th July 2007--
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 TYPE STRING, "Message text
END OF TY_MESSAGE1,
*--Begin of changes for the change request 2007106--25th July 2007--
BEGIN OF TY_MESSAGE1_2,
VKORG TYPE VKORG, "Sales Organization
VTWEG TYPE VTWEG, "Distribution Channel
KUNNR TYPE KUNAG, "Customer number
KONDM TYPE KONDM, "Material pricin
MSGTYP(1) TYPE C, "Message type
TEXT TYPE STRING, "Message text
END OF TY_MESSAGE1_2,
*--End of changes for the change request 2007106--25th July 2007--
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 TYPE STRING, "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
*--Begin of changes for the change request 2007096--26th July 2007--
WAERK TYPE WAERK, "SD Document Currency
*--End of changes for the change request 2007096--26th July 2007--
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
*--Begin of changes for the change request 2007096--26th July 2007--
WAERK TYPE WAERK, "SD Document Currency
*--End of changes for the change request 2007096--26th July 2007--
END OF TY_ACC1,
Important Note : Earlier there were only three accesses and hence this below type was coded as TY_ACC2 depicting
the type for internal table as a holder of data for second access sequence, but later a new access sequence was
introduced and was introduced as the second access by itself and hence the sequence which was previously considered
as second access is going to be third access sequence in reality. The naming standards that are going to be followed
for the newly introduced access sequence would be XXX_1_2. (For Change request 2007106)
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
*--Begin of changes for the change request 2007096--26th July 2007--
WAERK TYPE WAERK, "SD Document Currency
*--End of changes for the change request 2007096--26th July 2007--
END OF TY_ACC2,
*--Begin of changes for the change request 2007106--24th July 2007--
BEGIN OF TY_ACC1_2,
VBELN TYPE VBELN_VA, "Sales Document
KUNNR TYPE KUNAG, "Sold-to party
KONDM TYPE KONDM, "Material Pricing Group
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
*--Begin of changes for the change request 2007096--26th July 2007--
WAERK TYPE WAERK, "SD Document Currency
*--End of changes for the change request 2007096--26th July 2007--
END OF TY_ACC1_2,
*--End of changes for the change request 2007106--24th July 2007--
*--Begin of changes for the change request 2007096--26th July 2007--
BEGIN OF TY_T006,
MSEHI TYPE MSEHI, "Unit of Measurement
ZAEHL TYPE DZAEHL, "Numerator for conversion to SI unit
NENNR TYPE NENNR, "Denominator for conversion into SI unit
END OF TY_T006,
*--End of changes for the change request 2007096--26th July 2007--
*--Begin of changes for the change request xxx--2nd Aug 2007--
*Types of MARM table
BEGIN OF TY_MARM,
MATNR TYPE MATNR, " Material Number
MEINH TYPE LRMEI, " Alternative Unit of Measure
UMREZ TYPE UMREZ, " Numerator for Conversion to Base UOM
UMREN TYPE UMREN, " Denominator for Conversion to Base UOM
END OF TY_MARM.
*--End of changes for the change request xxx--2nd Aug 2007--
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
*--Begin of changes for the change request 2007106--25th July 2007--
T_MESSAGE1_2 TYPE STANDARD TABLE OF TY_MESSAGE1_2,"ITfor conditions1_2 messages
*--End of changes for the change request 2007106--25th July 2007--
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
*--Begin of changes for the change request 2007106--24th July 2007--
T_ACC1_2 TYPE STANDARD TABLE OF TY_ACC1_2, "IT for holding data for new intermediate Access Sequence
*--End of changes for the change request 2007106--24th July 2007--
*--Begin of changes for the change request 2007096--26th July 2007--
T_T006 TYPE STANDARD TABLE OF TY_T006, "IT for holding T006 Entries
*--End of changes for the change request 2007096--26th July 2007--
*--Begin of changes for the change request xxx--2nd Aug 2007--
T_MARM TYPE STANDARD TABLE OF TY_MARM, "IT for holding entries from MARM
*--End of changes for the change request xxx--2nd Aug 2007--
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
*--Begin of changes for the change request 2007106--25th July 2007--
W_MESSAGE1_2 TYPE TY_MESSAGE1_2, "WA for price conditions1_2 messages
*--End of changes for the change request 2007106--25th July 2007--
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
*--Begin of changes for the change request 2007106--24th July 2007--
W_ACC1_2 TYPE TY_ACC1_2, "WA for holding records from T_ACC1_2
*--End of changes for the change request 2007106--24th July 2007--
*--Begin of changes for the change request 2007096--26th July 2007--
W_T006 TYPE TY_T006, "WA for holding T_T006 Entries
*--End of changes for the change request 2007096--26th July 2007--
*--Begin of changes for the change request xxx--2nd Aug 2007--
W_MARM TYPE TY_MARM, "WA for holding entries of T_MARM
*--End of changes for the change request xxx--2nd Aug 2007--
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
*--Begin of changes for the change request 2007096--26th July 2007--
G_NUM_SOURCE TYPE DZAEHL, "Holds Numerator value for Source Unit of Measure
G_NUM_TARGET TYPE DZAEHL, "Holds Numerator value for Target Unit of Measure
G_DEN_SOURCE TYPE NENNR, "Holds Denominator value for Source Unit of Measure
G_DEN_TARGET TYPE NENNR. "Holds Denominator value for Target Unit of Measure
*--End of changes for the change request 2007096--26th July 2007--
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
*--Begin of changes for the change request xxx--2nd Aug 2007--
C_ZBPN(4) TYPE C VALUE 'ZBPN', "Condition Type ZBPN
*--End of changes for the change request xxx--2nd Aug 2007--
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
*--Begin of changes for the change request 2007106--25th July 2007--
*--End of changes for the change request 2007106--25th July 2007--
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.
*--Begin of changes for the change request 2007106--25th July 2007--COMMENTED FROM HERE---
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 AVBELN EQ BVBELN
FOR ALL ENTRIES IN T_IHEADER
WHERE A~VBELN EQ T_IHEADER-VBELN
AND B~MATNR IN S_MATNR.
ELSE.
*--End of changes for the change request 2007106--25th July 2007--COMMENTED TILL HERE---
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
*--Begin of changes for the change request 2007096--26th July 2007--
A~WAERK
*--End of changes for the change request 2007096--26th July 2007--
INTO TABLE T_VB_AKAP
FROM VBAK AS A
JOIN VBAP AS B
ON AVBELN EQ BVBELN
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
*--Begin of changes for the change request 2007096--26th July 2007--
A~WAERK
*--End of changes for the change request 2007096--26th July 2007--
INTO TABLE T_VB_AKAP
FROM VBAK AS A
JOIN VBAP AS B
ON AVBELN EQ BVBELN
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.
Collecting all Material Numbers along with their Technical Spec data for all the materials available in T_VB_AKAP.
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
*--Begin of changes for the change request xxx--2nd Aug 2007--
Collecting information into T_MARM for all the available materials so that it could be used for conversion into Alternate UOM
SELECT MATNR " Material Number
MEINH " Alternate UOM
UMREZ " Numerator for conversion
UMREN " Denominator for conversion
FROM MARM
INTO TABLE T_MARM
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MATNR EQ T_VB_AKAP-MATNR.
IF SY-SUBRC = 0.
SORT T_MARM BY MATNR MEINH.
ENDIF. "Checking SY-SUBRC for T_MARM
SELECT MATNR " Material Number
MEINH " Alternate UOM
UMREZ " Numerator for conversion
UMREN " Denominator for conversion
FROM MARM
APPENDING TABLE T_MARM
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MATNR EQ T_VB_AKAP-PMATN.
IF SY-SUBRC = 0.
SORT T_MARM BY MATNR MEINH.
ENDIF. "Checking SY-SUBRC for T_MARM
*--End of changes for the change request xxx--2nd Aug 2007--
SELECT MATNR
VKORG
VTWEG
KONDM
*--Begin of changes for the change request 2007096--26th July 2007--
VRKME
*--End of changes for the change request 2007096--26th July 2007--
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
*--Begin of changes for the change request 2007096--26th July 2007--
VRKME
*--End of changes for the change request 2007096--26th July 2007--
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
*--Begin of changes for the change request 2007096--26th July 2007--
SELECT MSEHI
ZAEHL
NENNR
INTO TABLE T_T006
FROM T006
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MSEHI EQ T_VB_AKAP-VRKME.
IF SY-SUBRC EQ 0.
SORT T_T006 BY MSEHI.
ENDIF. "Checking SY-SUBRC for T_T006
IF NOT T_MVKE IS INITIAL.
SELECT MSEHI
ZAEHL
NENNR
APPENDING TABLE T_T006
FROM T006
FOR ALL ENTRIES IN T_MVKE
WHERE MSEHI EQ T_MVKE-VRKME.
IF SY-SUBRC EQ 0.
SORT T_T006 BY MSEHI.
ENDIF. "Checking SY-SUBRC for T_T006
ENDIF. "Checking for Initial status of internal table T_MVKE
*--End of changes for the change request 2007096--26th July 2007--
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.
*--Begin of changes for the change request 2007096--26th July 2007--
W_IFINAL-WAERK = W_VB_AKAP-WAERK.
*--End of changes for the change request 2007096--26th July 2007--
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.
*--Begin of changes for the change request 2007096--26th July 2007--
IF ( W_IFINAL-VRKME NE W_MVKE-VRKME ) AND ( NOT W_MVKE-VRKME IS INITIAL ).
*--Begin of changes for the change request xxx--2nd Aug 2007--
CLEAR: W_MARM,
G_NUM_SOURCE,
G_DEN_SOURCE,
G_NUM_TARGET,
G_DEN_TARGET.
READ TABLE T_MARM INTO W_MARM
WITH KEY MATNR = W_IFINAL-PMATN
MEINH = W_IFINAL-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_SOURCE = W_MARM-UMREZ.
G_DEN_SOURCE = W_MARM-UMREN.
CLEAR W_MARM.
READ TABLE T_MARM INTO W_MARM
WITH KEY MATNR = W_IFINAL-PMATN
MEINH = W_MVKE-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_TARGET = W_MARM-UMREZ.
G_DEN_TARGET = W_MARM-UMREN.
CLEAR W_MARM.
W_IFINAL-KWMENG = W_IFINAL-KWMENG * ( G_NUM_SOURCE / G_DEN_SOURCE ) * ( G_DEN_TARGET / G_NUM_TARGET ).
CLEAR W_IFINAL-KZWI1.
W_IFINAL-KZWI1 = ( W_VB_AKAP-KZWI1 / W_IFINAL-KWMENG ) * 1000.
W_IFINAL-VRKME = W_MVKE-VRKME.
ENDIF. "Check SY-SUBRC for W_MARM using W_MVKE-VRKME (Sales UOM)
ELSE.
*--End of changes for the change request xxx--2nd Aug 2007--
CLEAR: W_T006,
G_NUM_SOURCE,
G_DEN_SOURCE,
G_NUM_TARGET,
G_DEN_TARGET.
READ TABLE T_T006 INTO W_T006 WITH KEY MSEHI = W_IFINAL-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_SOURCE = W_T006-ZAEHL. "Numerator to convert specified UOM to SI UOM
G_DEN_SOURCE = W_T006-NENNR. "Denominator to convert specified UOM to SI UOM
CLEAR W_T006.
READ TABLE T_T006 INTO W_T006 WITH KEY MSEHI = W_MVKE-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_TARGET = W_T006-ZAEHL. "Numerator to convert specified UOM to SI UOM
G_DEN_TARGET = W_T006-NENNR. "Denominator to convert specified UOM to SI UOM
CLEAR W_T006.
W_IFINAL-KWMENG = W_IFINAL-KWMENG * ( G_NUM_SOURCE / G_DEN_SOURCE ) * ( G_DEN_TARGET / G_NUM_TARGET ).
CLEAR W_IFINAL-KZWI1.
W_IFINAL-KZWI1 = ( W_VB_AKAP-KZWI1 / W_IFINAL-KWMENG ) * 1000.
W_IFINAL-VRKME = W_MVKE-VRKME.
ENDIF. "Check for SY-SUBRC for READ TABLE T_T006 using W_MVKE-VRKME (Sales UOM)
ENDIF. "Check for SY-SUBRC for READ TABLE T_T006 using W_IFINAL-VRKME (Quotation UOM)
ENDIF. "Check SY-SUBRC for W_MARM using W_IFINAL-VRKME (Quotation UOM)
ENDIF. "Check for ( W_IFINAL-VRKME NE W_MVKE-VRKME ) AND ( NOT W_MVKE-VRKME IS INITIAL )
*--End of changes for the change request 2007096--26th July 2007--
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. -
Hi,
how we can create and display Footer for ALV Grid ,
pls give me with some exampleHi Chaaya,
Here is the example.
In the below code, TOP_OF_PAGE is used... similarly in your case END_OF_PAGE should be used. The way you define the event and handle it is similat to that of TOP_OF_PAGE event handled in the below code.
* Description : Automatic Condition records generation from Quotation*
* Packages : ZSPR *
* Table Updates : VBAK, KONP and KONM *
* Parameters : P_VKORG, P_VTWEG, P_SPART and P_VKAUS *
* Select Option : S_AUDAT, S_VBELN, S_KUNNR and S_MATNR *
* Input : NA *
* Output : NA *
* Return Codes : SY-SUBRC *
* Special Logic : NA *
* Includes : NA *
* H I S T O R Y O F R E V I S I O N S *
* Date Programmer Request # Description *
REPORT ZSPRENH069 LINE-SIZE 1023 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
WAERK TYPE WAERK, "SD Document Currency
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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
VRKME TYPE VRKME, "Sales Unit according to the Material Master
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
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 TYPE STRING, "Message text
END OF TY_MESSAGE1,
*-----------------Begin of changes for the change request 2007106------25th July 2007--------------------------------
BEGIN OF TY_MESSAGE1_2,
VKORG TYPE VKORG, "Sales Organization
VTWEG TYPE VTWEG, "Distribution Channel
KUNNR TYPE KUNAG, "Customer number
KONDM TYPE KONDM, "Material pricin
MSGTYP(1) TYPE C, "Message type
TEXT TYPE STRING, "Message text
END OF TY_MESSAGE1_2,
*-----------------End of changes for the change request 2007106------25th July 2007--------------------------------
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 TYPE STRING, "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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
WAERK TYPE WAERK, "SD Document Currency
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
WAERK TYPE WAERK, "SD Document Currency
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
END OF TY_ACC1,
* Important Note : Earlier there were only three accesses and hence this below type was coded as TY_ACC2 depicting
* the type for internal table as a holder of data for second access sequence, but later a new access sequence was
* introduced and was introduced as the second access by itself and hence the sequence which was previously considered
* as second access is going to be third access sequence in reality. The naming standards that are going to be followed
* for the newly introduced access sequence would be XXX_1_2. (For Change request 2007106)
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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
WAERK TYPE WAERK, "SD Document Currency
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
END OF TY_ACC2,
*-----------------Begin of changes for the change request 2007106------24th July 2007--------------------------------
BEGIN OF TY_ACC1_2,
VBELN TYPE VBELN_VA, "Sales Document
KUNNR TYPE KUNAG, "Sold-to party
KONDM TYPE KONDM, "Material Pricing Group
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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
WAERK TYPE WAERK, "SD Document Currency
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
END OF TY_ACC1_2,
*-----------------End of changes for the change request 2007106------24th July 2007--------------------------------
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
BEGIN OF TY_T006,
MSEHI TYPE MSEHI, "Unit of Measurement
ZAEHL TYPE DZAEHL, "Numerator for conversion to SI unit
NENNR TYPE NENNR, "Denominator for conversion into SI unit
END OF TY_T006,
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
*-----------------Begin of changes for the change request xxx------2nd Aug 2007--------------------------------
*Types of MARM table
BEGIN OF TY_MARM,
MATNR TYPE MATNR, " Material Number
MEINH TYPE LRMEI, " Alternative Unit of Measure
UMREZ TYPE UMREZ, " Numerator for Conversion to Base UOM
UMREN TYPE UMREN, " Denominator for Conversion to Base UOM
END OF TY_MARM.
*-----------------End of changes for the change request xxx------2nd Aug 2007--------------------------------
* 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
*-----------------Begin of changes for the change request 2007106------25th July 2007--------------------------------
T_MESSAGE1_2 TYPE STANDARD TABLE OF TY_MESSAGE1_2,"ITfor conditions1_2 messages
*-----------------End of changes for the change request 2007106------25th July 2007--------------------------------
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
*-----------------Begin of changes for the change request 2007106------24th July 2007--------------------------------
T_ACC1_2 TYPE STANDARD TABLE OF TY_ACC1_2, "IT for holding data for new intermediate Access Sequence
*-----------------End of changes for the change request 2007106------24th July 2007--------------------------------
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
T_T006 TYPE STANDARD TABLE OF TY_T006, "IT for holding T006 Entries
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
*-----------------Begin of changes for the change request xxx------2nd Aug 2007--------------------------------
T_MARM TYPE STANDARD TABLE OF TY_MARM, "IT for holding entries from MARM
*-----------------End of changes for the change request xxx------2nd Aug 2007--------------------------------
* 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
*-----------------Begin of changes for the change request 2007106------25th July 2007--------------------------------
W_MESSAGE1_2 TYPE TY_MESSAGE1_2, "WA for price conditions1_2 messages
*-----------------End of changes for the change request 2007106------25th July 2007--------------------------------
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
*-----------------Begin of changes for the change request 2007106------24th July 2007--------------------------------
W_ACC1_2 TYPE TY_ACC1_2, "WA for holding records from T_ACC1_2
*-----------------End of changes for the change request 2007106------24th July 2007--------------------------------
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
W_T006 TYPE TY_T006, "WA for holding T_T006 Entries
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
*-----------------Begin of changes for the change request xxx------2nd Aug 2007--------------------------------
W_MARM TYPE TY_MARM, "WA for holding entries of T_MARM
*-----------------End of changes for the change request xxx------2nd Aug 2007--------------------------------
* 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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
G_NUM_SOURCE TYPE DZAEHL, "Holds Numerator value for Source Unit of Measure
G_NUM_TARGET TYPE DZAEHL, "Holds Numerator value for Target Unit of Measure
G_DEN_SOURCE TYPE NENNR, "Holds Denominator value for Source Unit of Measure
G_DEN_TARGET TYPE NENNR. "Holds Denominator value for Target Unit of Measure
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
* 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_C(1) TYPE C VALUE 'C', "Constant Value C
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
*-----------------Begin of changes for the change request xxx------2nd Aug 2007--------------------------------
C_ZBPN(4) TYPE C VALUE 'ZBPN', "Condition Type ZBPN
*-----------------End of changes for the change request xxx------2nd Aug 2007--------------------------------
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
*-----------------Begin of changes for the change request 2007106------25th July 2007--------------------------------
*-----------------End of changes for the change request 2007106------25th July 2007--------------------------------
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.
*-----------------Begin of changes for the change request 2007106------25th July 2007------COMMENTED FROM HERE-----
* 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.
*-----------------End of changes for the change request 2007106------25th July 2007------COMMENTED TILL HERE-----
CONCATENATE C_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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
A~WAERK
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
A~WAERK
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
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.
* Collecting all Material Numbers along with their Technical Spec data for all the materials available in T_VB_AKAP.
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
*-----------------Begin of changes for the change request xxx------2nd Aug 2007--------------------------------
* Collecting information into T_MARM for all the available materials so that it could be used for conversion into Alternate UOM
SELECT MATNR " Material Number
MEINH " Alternate UOM
UMREZ " Numerator for conversion
UMREN " Denominator for conversion
FROM MARM
INTO TABLE T_MARM
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MATNR EQ T_VB_AKAP-MATNR.
IF SY-SUBRC = 0.
SORT T_MARM BY MATNR MEINH.
ENDIF. "Checking SY-SUBRC for T_MARM
SELECT MATNR " Material Number
MEINH " Alternate UOM
UMREZ " Numerator for conversion
UMREN " Denominator for conversion
FROM MARM
APPENDING TABLE T_MARM
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MATNR EQ T_VB_AKAP-PMATN.
IF SY-SUBRC = 0.
SORT T_MARM BY MATNR MEINH.
ENDIF. "Checking SY-SUBRC for T_MARM
*-----------------End of changes for the change request xxx------2nd Aug 2007--------------------------------
SELECT MATNR
VKORG
VTWEG
KONDM
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
VRKME
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
VRKME
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
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
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
SELECT MSEHI
ZAEHL
NENNR
INTO TABLE T_T006
FROM T006
FOR ALL ENTRIES IN T_VB_AKAP
WHERE MSEHI EQ T_VB_AKAP-VRKME.
IF SY-SUBRC EQ 0.
SORT T_T006 BY MSEHI.
ENDIF. "Checking SY-SUBRC for T_T006
IF NOT T_MVKE IS INITIAL.
SELECT MSEHI
ZAEHL
NENNR
APPENDING TABLE T_T006
FROM T006
FOR ALL ENTRIES IN T_MVKE
WHERE MSEHI EQ T_MVKE-VRKME.
IF SY-SUBRC EQ 0.
SORT T_T006 BY MSEHI.
ENDIF. "Checking SY-SUBRC for T_T006
ENDIF. "Checking for Initial status of internal table T_MVKE
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
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.
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
W_IFINAL-WAERK = W_VB_AKAP-WAERK.
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
* 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.
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
IF ( W_IFINAL-VRKME NE W_MVKE-VRKME ) AND ( NOT W_MVKE-VRKME IS INITIAL ).
*-----------------Begin of changes for the change request xxx------2nd Aug 2007--------------------------------
CLEAR: W_MARM,
G_NUM_SOURCE,
G_DEN_SOURCE,
G_NUM_TARGET,
G_DEN_TARGET.
READ TABLE T_MARM INTO W_MARM
WITH KEY MATNR = W_IFINAL-PMATN
MEINH = W_IFINAL-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_SOURCE = W_MARM-UMREZ.
G_DEN_SOURCE = W_MARM-UMREN.
CLEAR W_MARM.
READ TABLE T_MARM INTO W_MARM
WITH KEY MATNR = W_IFINAL-PMATN
MEINH = W_MVKE-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_TARGET = W_MARM-UMREZ.
G_DEN_TARGET = W_MARM-UMREN.
CLEAR W_MARM.
W_IFINAL-KWMENG = W_IFINAL-KWMENG * ( G_NUM_SOURCE / G_DEN_SOURCE ) * ( G_DEN_TARGET / G_NUM_TARGET ).
CLEAR W_IFINAL-KZWI1.
W_IFINAL-KZWI1 = ( W_VB_AKAP-KZWI1 / W_IFINAL-KWMENG ) * 1000.
W_IFINAL-VRKME = W_MVKE-VRKME.
ENDIF. "Check SY-SUBRC for W_MARM using W_MVKE-VRKME (Sales UOM)
ELSE.
*-----------------End of changes for the change request xxx------2nd Aug 2007--------------------------------
CLEAR: W_T006,
G_NUM_SOURCE,
G_DEN_SOURCE,
G_NUM_TARGET,
G_DEN_TARGET.
READ TABLE T_T006 INTO W_T006 WITH KEY MSEHI = W_IFINAL-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_SOURCE = W_T006-ZAEHL. "Numerator to convert specified UOM to SI UOM
G_DEN_SOURCE = W_T006-NENNR. "Denominator to convert specified UOM to SI UOM
CLEAR W_T006.
READ TABLE T_T006 INTO W_T006 WITH KEY MSEHI = W_MVKE-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_TARGET = W_T006-ZAEHL. "Numerator to convert specified UOM to SI UOM
G_DEN_TARGET = W_T006-NENNR. "Denominator to convert specified UOM to SI UOM
CLEAR W_T006.
W_IFINAL-KWMENG = W_IFINAL-KWMENG * ( G_NUM_SOURCE / G_DEN_SOURCE ) * ( G_DEN_TARGET / G_NUM_TARGET ).
CLEAR W_IFINAL-KZWI1.
W_IFINAL-KZWI1 = ( W_VB_AKAP-KZWI1 / W_IFINAL-KWMENG ) * 1000.
W_IFINAL-VRKME = W_MVKE-VRKME.
ENDIF. "Check for SY-SUBRC for READ TABLE T_T006 using W_MVKE-VRKME (Sales UOM)
ENDIF. "Check for SY-SUBRC for READ TABLE T_T006 using W_IFINAL-VRKME (Quotation UOM)
ENDIF. "Check SY-SUBRC for W_MARM using W_IFINAL-VRKME (Quotation UOM)
ENDIF. "Check for ( W_IFINAL-VRKME NE W_MVKE-VRKME ) AND ( NOT W_MVKE-VRKME IS INITIAL )
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
ENDIF.
CLEAR W_MARA.
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.
*-----------------Begin of changes for the change request 2007096------26th July 2007--------------------------------
IF ( W_IFINAL-VRKME NE W_MVKE-VRKME ) AND ( NOT W_MVKE-VRKME IS INITIAL ).
*-----------------Begin of changes for the change request xxx------2nd Aug 2007--------------------------------
CLEAR: W_MARM,
G_NUM_SOURCE,
G_DEN_SOURCE,
G_NUM_TARGET,
G_DEN_TARGET.
READ TABLE T_MARM INTO W_MARM
WITH KEY MATNR = W_IFINAL-MATNR
MEINH = W_IFINAL-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_SOURCE = W_MARM-UMREZ.
G_DEN_SOURCE = W_MARM-UMREN.
CLEAR W_MARM.
READ TABLE T_MARM INTO W_MARM
WITH KEY MATNR = W_IFINAL-MATNR
MEINH = W_MVKE-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_TARGET = W_MARM-UMREZ.
G_DEN_TARGET = W_MARM-UMREN.
CLEAR W_MARM.
W_IFINAL-KWMENG = W_IFINAL-KWMENG * ( G_NUM_SOURCE / G_DEN_SOURCE ) * ( G_DEN_TARGET / G_NUM_TARGET ).
CLEAR W_IFINAL-KZWI1.
W_IFINAL-KZWI1 = ( W_VB_AKAP-KZWI1 / W_IFINAL-KWMENG ) * 1000.
W_IFINAL-VRKME = W_MVKE-VRKME.
ENDIF. "Check SY-SUBRC for W_MARM using W_MVKE-VRKME (Sales UOM)
ELSE.
*-----------------End of changes for the change request xxx------2nd Aug 2007--------------------------------
CLEAR: W_T006,
G_NUM_SOURCE,
G_DEN_SOURCE,
G_NUM_TARGET,
G_DEN_TARGET.
READ TABLE T_T006 INTO W_T006 WITH KEY MSEHI = W_IFINAL-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_SOURCE = W_T006-ZAEHL. "Numerator to convert specified UOM to SI UOM
G_DEN_SOURCE = W_T006-NENNR. "Denominator to convert specified UOM to SI UOM
CLEAR W_T006.
READ TABLE T_T006 INTO W_T006 WITH KEY MSEHI = W_MVKE-VRKME
BINARY SEARCH.
IF SY-SUBRC EQ 0.
G_NUM_TARGET = W_T006-ZAEHL. "Numerator to convert specified UOM to SI UOM
G_DEN_TARGET = W_T006-NENNR. "Denominator to convert specified UOM to SI UOM
CLEAR W_T006.
W_IFINAL-KWMENG = W_IFINAL-KWMENG * ( G_NUM_SOURCE / G_DEN_SOURCE ) * ( G_DEN_TARGET / G_NUM_TARGET ).
CLEAR W_IFINAL-KZWI1.
W_IFINAL-KZWI1 = ( W_VB_AKAP-KZWI1 / W_IFINAL-KWMENG ) * 1000.
W_IFINAL-VRKME = W_MVKE-VRKME.
ENDIF. "Check for SY-SUBRC for READ TABLE T_T006 using W_MVKE-VRKME (Sales UOM)
ENDIF. "Check for SY-SUBRC for READ TABLE T_T006 using W_IFINAL-VRKME (Quotation UOM)
ENDIF. "Check SY-SUBRC for W_MARM using W_IFINAL-VRKME (Quotation UOM)
ENDIF. "Check for ( W_IFINAL-VRKME NE W_MVKE-VRKME ) AND ( NOT W_MVKE-VRKME IS INITIAL )
*-----------------End of changes for the change request 2007096------26th July 2007--------------------------------
ENDIF.
CLEAR W_MARA.
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
*-----------------Begin of changes for the change request 2007106------25th July 2007------COMMENTED FROM HERE-----
** 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.
*-----------------End of changes for the change request 2007106------25th July 2007------COMMENTED TILL HERE-----
APPEND W_IFINAL TO T_IFINAL.
* ENDIF. Commented for the change request 2007106-----25th July 2007
CLEAR: W_VB_AKAP,
W_IFINAL.
ENDLOOP.
SORT T_IFINAL BY VBELN POSNR.
* 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
BINARY SEARCH.
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 POSNR.
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
* W_LAYOUT-no_min_linesize = C_X.
* W_LAYOUT-min_linesize = 80.
* W_LAYOUT-max_linesize = 400.
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.
CLEAR W_EVENT.
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 -
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>
KiranHi 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
-
VA05 Performance issues & search indices
All,
We have a performance issue with transaction VA05 (list of sales orders). On searching SAP notes as well as all forums, no information relevant to our case could be found, so posting it here.
When we run VA05 with selection criteria - customer purchase order number (BSTKD), sales area (VKORG, VTWEG, SPART), the search takes about 5 min or more and times out for some selections. However when I terminate the transaction and rerun it by leaving VTWEG and SPART blank (or VTWEG alone blank), the search is surprisingly quicker - about 5 sec.
An input from our ABAP expert is that ideally VBKD data (based on BSTKD) should be read first and this data should be further filtered after reading VBAK; however transaction VA05 reads both tables independently, i.e. fetches handful records from VBKD for matching BSTKD and several thousands of records from VBAK (matching VKORG, VTWEG, SPART) and then does an 'intersection'. So it is this VBAK table that seems to cause the performance issue.
So we updated statistics of both tables, changed the estimate % from 1 to 10 still there is no improvement. What I don't understand is when only BSTKD and VKORG (VKORG is mandatory) are chosen, the search is much quicker though it is the same two tables relevant for search in both cases. It couldn't have always been this way because this dip in performance is a phenomenon identified only recently.
Can someone please throw some light on this or advise how performance can be improved with complete sales area in selection? (sales area is required in selection as VA05 is used by different businesses)
Thanks & Regards,
KC
SAP SD Analyst>
Krishna Chandika wrote:
> All,
> We have a performance issue with transaction VA05 (list of sales orders). On searching SAP notes as well as all forums, no information relevant to our case could be found, so posting it here.
What about note 878680?
If this doesn't help, you should send it to SAP. How can the forum help??
Rob -
How can I add a pushbutton inside ALV toolbar?
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 -
Updating Purchase Order data in VBKD table
Hello,
We are trying to update Purchase order data in VBKD table for Sales Order at Item level. When sales Order is created, VBKD has a default record with VBELN = 'sales order number' and Item = '00000'. We want to update BSTKD_E field with Purchase order number for VBELN= 'sales order number' and Item = '00010'.
We wrote our logic in USEREXIT_SAVE_DOCUMENT_PREPARE and USEREXIT_MOVE_FIELDS_TO_VBKD in MV50AFZZ to append new entries in XVBKD with VBELN= 'sales order number' and Item = '00010'. But in this case Sales order is not created with UPDATE TERMINATED message. We are not sure if we can append a new record in XVBKD.
wa_xvbkd = xvbkd.
wa_xvbkd-posnr = wa_xvbap-posnr. "00010
wa_xvbkd-bstkd_e = vbkd-bstkd. "PO no
wa_xvbkd-posex_e = wa_xvbap-posnr. "Purch. order item no
wa_xvbkd-updkz = C_I.
APPEND wa_xvbkd TO xvbkd.
CLEAR wa_xvbkd.
Please advice the suitable way to have a Purchase Order item level data in Sales Order.
Thanks
RohitHi,
You can try these FM to update info record.
ME_DB_UPDATE_INFORECORDS
ME_UPDATE_INFORECORD
ME_UPDATE_INFORECORD_COND
ME_UPDATE_INFORECORD_PD
Check the sample code on BAPI_PO_CHANGE
http://www.sap-img.com/abap/sample-abap-code-on-bapi-po-change.htm
Regards,
Shiva Kumar -
Updated record should come in txt file
Hi Friends,
My requirements like this way, any changes make in mara, mard, mbew, makt, vbak, vbap, vbrk and abrp table. that newly created data should come in .txt file of application server.
I have already developed a program for that. it is downloading data in every 3 hours slots. it is running in background. whatever changes made during these hours it will download.
now, my requirement has been changed, instance data should come in .txt file of app server. e.g. when newly created record save in database table, same time that record should come in .txt file with proper format.
is it possible? please let me know.
Thanks in advance,
ParagHi Parag,
To obtain changes you know you can get the details from the tables CDHDR and CDPOS.
Also you have questions about performance and so. SO here are some details.
- When you flag a data element for change document (is checked) it is ONLY a marker that allows for registration of this field's changes into CDHDR and CDPOS. The actual control is done on datafile level in its technical settings (Transaction SE11 with datafile name and then push button "Technical Settings" or CtrlShiftF9). Herein you will find a flag "Log data changes".
Within the CDHDR file and CDPOS file a field OBJECTCLAS is used. Only for existing OBJECTCLAS values the changes are logged.
- Now obvious this is the trick for standard SAP (as Subramanian has already pointed out you can find "OBJECTCLAS" values with transaction SCDO). If you want to know on how to create your own "OBJECTCLAS" values with working logging on your own designed fields follow Subramanian suggestion and read the documentation.
Now to your questions:
You gave some tables you need to track changes (and now also for initial creation) like MARA, MARD, MAKT and others.
To get changes for these tables use the following "OBJECTCLAS" values:
- MATERIAL (Tables MARA, MARC, MARD, MBEW, MFHM, MLGN, MLGT, MPGD, MPOP and MVKE). By-the-way, this object will be replaced by MATERIAL_N (available from release 4.6x).
- VERKBELEG (Tables VBAK, VBAP, VBEP, VBKD, VBLB, VBPA, VBPA2 and VBUK).
To collect changes (suggested by Andreas) you could use function module CHANGEDOCUMENT_READ. This is very usefull if also archiving is active for the objects you need to track changes for and your changes are scattered through time, but for your problem it is better to approach the log data directly.
1. First select the main change documents from CDHDR table for a given "OBJECTCLAS" and "OBJECTID". Here you can use additional filtering on DATE (field UDATE) and TIME (field (UTIME). Even filtering on a specific transaction is possible (field TCODE).
This gives you a number of change documents (field CHANGENR).
2a. Secondly select the specific field changes from table CDPOS by using the found fields from CDHDR and additionally fill TABNAME with the specific table and if required FNAME with the specific field name. 2b. Since in your case the values will not be known, you need to track changes, you have to be very carefull in your selections. If you track the object MATERIAL or MATERIAL_N, you best loop over the MARA table and for each MATNR fill the OBJECTID field of CDHDR with this MATNR value.
3. In order to find NEWLY created items you need to check the CHANGE_IND flag. When 'I' it is an new insert, when 'U' it is an update. Now this rule applies ONLY to key fields, since SAP first creates the key record (CHANGE_IND = 'I') and then the other fields (CHANGE_IND = 'U').
Finally the warning given by Andreas (runtime increases - you MUST select with OBJECTCLAS and OBJECTID) is very important. Not supplying OBJECTID will have a very heavy impact on the runtime.
Hope this gives you some clues on how to approach your problem.
Regards,
Rob. -
Values not updating in Condition records
Hi All,
Small question for you all -
We have a condition record for TAX (ZVAT) this has three access sequences on it, one of these feilds for access is the HT (OIHANTYP),
Nowe the problem is when HT = 01 then Vat should be calculated at the correct rate of which it does, but when you change the HT code to 02 then the Condition does not update, the only way around this is to carry out new pricing not ideal,
Also if after changing the HT code and saving the order the order still does not update.
Just as a side we also use scales and this works fine, if you amned the qty up then the rate chages automatically with these adjustments, it only seems to be when we change the HT that this problem occurs.
Also just notice we are also using split valuation items, so also the batch needs to be maintained, if you get the right combination of Batch and HT then the condition updates all o, any ideas where this maybe set?
Any help or comments are most welcome
Regards
Steve
Edited by: Steve Cane on May 20, 2009 12:32 PMHi Steve,
If the field is available in VBAP or VBKD, get in touch with an abapper and try the code in the below mentioned exits in MV45AFZB:
USEREXIT_NEW_PRICING_VBAP
Option for entry of preconditions for carrying out pricing again (e.g. changes made to a certain item field could be used as the precondition for pricing to be carried out again).
USEREXIT_NEW_PRICING_VBKD
Option for entry of preconditions for carrying out pricing again (e.g. changes to the customer group or price group could be set as the preconditions for the system to carry out pricing again).
Regards,
Naveen Aggarwal -
Hi Experts,
Could you please conform me when the VBKD table is update.I can see all the sales doc in this table with 000 line item and some with line item as 10 so can any one guid me why is it so?
Thansk in advance .
Thanks & Regards
SanujeetHi Sanujeet
VBKD table is the business data table and the same is updated as soon as VBAK is populated. When the order is first created VBKD has only one entry. The other entries that you see with the same sales document is related to any item level changes that may have been carried out after the sales order was saved. So suppose while first creating the order at the item level the PO number at header level is given, the same PO is captured at the item level. While saving this order VBAK and VBKD are both updated with one record. Now after saving the order if you change the PO number at the item level for one of the items, the business data related to the order (namely PO number) changes and as a result VBKD gets updated with item details. Hope this clarifies the issue. So whenever there is a difference in business data at header and item level VBKD gets updated with item level data.
Regards
Indranil -
VA02 Transaction VBAP & VBKD data sync
Dear Friends
VA02 Transaction, VBAP & VBKD data synchronization issue.
For printing invoice I am retrieving data from VBAP & VBKD For Example I have 18 Records in VBAP table the same time I have only 16 entries in VBKD table the field POSNR not matching with VBKD table. I am retrieving the field KDKG1 Customer Condition Group1. I could not see the relevant data for all line items. Only few of them are available.
Is there any other way to get the field KDKG1 having relationship for VBAP all line items.
Can anybody help me to solve the issue?
Ashok VengidapathyHello,
I think you want add to Additonal Tab A - You just need to add to VA01 no need to add VA02. FYI there is no screen exit given by SAP There fore direct SAP screen modifiction is required here same many persons in this forum is discussed.
1) add what ever fields you want to add to screen in VBAP as include structure.
2) go se51 by taking access add what ever fields you have added in VBAP to screen.
3) that's it you dont need any programming unless if u need any validations on those fields.
let me know if you want any clarification.
***********Poorna************ -
Suspect VBKD inconsistency.
Hi gurus
i have one question to ask . i tried to develop a adhoc report using QUERY and inforset.
i join both table VBAP and VBKD togther with the fields VBAP-VBELN VBAP-POSNR join with VBKD-VBELN VBKD-POSNR
after i search through the SE11 find out that VBKD records seem inconsistency.
Here how it goes ...
i have 2 sales order here 50003 and 50055
50003 got 1,2,3 items
50055 got 1,2,3,,,,,9,10 items
where i search VBAP table with both sales order , it shows out perfectly .
But when i search VBKD table sales order no 50055 only have one record which is VBKD-POSNR = 0000 .
why the VBKD table for sales order 50055 does not contain POSNR = 1 , POSNR = 2 ... POSNR=10
why this happen?
Thanks
WilsonHi MONIKA
Thanks for your reply. As i go through the checking the VBKD with few Sales Document No that.
Below are my analysis..
If the line item data is changed and is different from the header data then an entry for that line item will also be made in table VBKD.
I check with one sales order no XXX52 find out that there is a changes of quantity in the item no. This particular sales order got 5 items. Then in VBKD table got 6 records. I understand that.
But when i check another sales order XXX43 find out that no changes in the Sales Order either the data header or the item data. But VBKD table still got 5 records.
why this happen? i am confused.
Some Sales order i find out that changes in the item but in the VBKD not able to appear the item records . POSNR still = 000000.
Edited by: Wei Shen Wilson Low on Mar 25, 2009 7:30 AM -
Call Customer Exist Enhancement (EXIST_SAPLRSAP_001) CMOD with 11310 records
Hello Experts,
Extraction from 2lis_11_vaitm is taking longer time even there are only few records. Normally it takes 2-3 mins but sometimes it takes 2-3 hrs to complete. Even once it take 12 hrs. there is no idoc stuck in SM58. I've attached job log screenshot from ECC.. Please can any body siggess why this is happening.. if someone else face some issue.Hi
Please see codes below:
* 1.0 D11K967555 16/03/2011 Peter Phillips Original
* Begin D11K967555 Supply Chain Project
DATA: l_mvgr1 TYPE mvgr1,
l_noise_cat TYPE zsd_pressage_noise.
FIELD-SYMBOLS: <fs_data> TYPE mc11va0itm.
* SORDET data
* This method includes DTR SORDETs in table ZSD_OUT_SORDET, which is then
* used as a datasource in BW and SCM. DTR SORDETs correspond to quantities in sales order
* types ZRTS and ZRTR.
DATA: lo_sordet TYPE REF TO zcl_sd_sordet.
CREATE OBJECT lo_sordet.
lo_sordet->mass_load_dtr_supply_return(
EXPORTING
im_data = c_t_data[]
CHANGING
ch_errors = c_t_messages[]
* Processing for Field ZZMVGR1 (Title Group) ZZNOISE_CAT (Noise Category)
LOOP AT c_t_data ASSIGNING <fs_data>.
* Get Title Group from MVKE (Sales Data for Material)
SELECT SINGLE mvgr1 FROM mvke
INTO l_mvgr1
WHERE matnr = <fs_data>-matnr
AND vkorg = <fs_data>-vkorg
AND vtweg = <fs_data>-vtweg.
IF sy-subrc EQ 0.
<fs_data>-zzmvgr1 = l_mvgr1.
ENDIF.
* Get Noise Category from custom table ZSD_KNA1
* NB This must match the selection in APO for Info Provider Z_NOISE
IF <fs_data>-auart EQ zcl_sd_constants=>WHO_OTYPE_SPEC_ACCTS "ZWHN
OR <fs_data>-auart EQ zcl_sd_constants=>CSV_OTYPE_FOREIGN "ZWHF
or <fs_data>-auart EQ zcl_sd_constants=>DTC_OTYPE_PRIMARY. "ZWHZ
SELECT SINGLE noise_cat FROM zsd_kna1
INTO l_noise_cat
WHERE kunnr = <fs_data>-kunnr.
IF sy-subrc EQ 0.
<fs_data>-zznoise_cat = l_noise_cat.
ENDIF.
ENDIF.
ENDLOOP.
* End D11K967555 Supply Chain Project
* CENTRECORE ORDERS
*loop at c_t_data into l_s_MCVBAP . "4.7- Unicode
LOOP AT c_t_data. "4.7+ Unicode
MOVE-CORRESPONDING c_t_data TO l_s_mcvbap. "4.7+ Unicode
l_tabix = sy-tabix.
* Lookup the G/L account and Costcentre from the requisition
SELECT SINGLE *
INTO l_s_ebkn
FROM ebkn
WHERE banfn = l_s_mcvbap-vgbel
AND bnfpo = l_s_mcvbap-vgpos .
IF sy-subrc = 0.
MOVE l_s_ebkn-sakto TO l_s_mcvbap-submi .
MOVE l_s_ebkn-kostl TO l_s_mcvbap-kostl .
ELSE .
MOVE space TO l_s_mcvbap-submi .
ENDIF .
* Lookup the Approver from the ZCOREAPPROVAL table (workflow)
SELECT SINGLE uname
INTO t_uname
FROM zcoreapproval
WHERE quote = l_s_mcvbap-vgbel
AND action = 'A' .
IF sy-subrc = 0.
MOVE t_uname TO l_s_mcvbap-qmnum.
ELSE.
MOVE space TO l_s_mcvbap-qmnum.
ENDIF.
MOVE-CORRESPONDING l_s_mcvbap TO c_t_data.
"4.7+ Unicode
MODIFY c_t_data INDEX l_tabix.
"4.7+ Unicode
*modify c_t_data from l_s_mcvbap index l_tabix.
*"4.7- Unicode
ENDLOOP.
METHOD mass_load_dtr_supply_return.
TYPES: BEGIN OF ty_data_to_process,
kunnr TYPE kunnr,
prsdt TYPE prsdt,
vkorg TYPE vkorg,
END OF ty_data_to_process,
BEGIN OF ty_vbeln_to_process,
vbeln TYPE vbeln,
kunnr TYPE kunnr,
uadat TYPE audat,
prsdt TYPE prsdt,
END OF ty_vbeln_to_process.
DATA: le_exception TYPE REF TO zcx_edi_exception,
ls_message TYPE balmi,
lt_data_to_process TYPE SORTED TABLE OF ty_data_to_process WITH NON-UNIQUE KEY kunnr prsdt vkorg,
ls_data_to_process TYPE ty_data_to_process,
lt_dates TYPE STANDARD TABLE OF ty_data_to_process,
lt_data_buffer TYPE STANDARD TABLE OF ty_data_to_process,
lt_vbeln TYPE STANDARD TABLE OF ty_vbeln_to_process.
FIELD-SYMBOLS: <fs_data> TYPE mc11va0itm,
<fs_vbeln> TYPE ty_vbeln_to_process,
<fs_data_buffer> TYPE zsd_sales_doc_tab.
* Get all retailers
activate_retailer_buffer(
* im_refresh = ''
* im_ignore_deleted =
* im_no_pressage_id =
im_kunnr_only = abap_true
* Get Pressage deletes
dtr_get_mass_deletes( ).
LOOP AT im_data ASSIGNING <fs_data>.
IF <fs_data>-vkorg = c_dtr_sales_org.
ls_data_to_process-kunnr = <fs_data>-kunnr. " Customer Numbr
ls_data_to_process-prsdt = <fs_data>-prsdt. " Pricing Date
ls_data_to_process-vkorg = <fs_data>-vkorg. " Sales Org
COLLECT ls_data_to_process INTO lt_data_to_process.
ENDIF.
ENDLOOP.
IF me->dtr_deleted_items[] IS NOT INITIAL.
SELECT vbak~kunnr " Ship-to Customer
vbak~audat " Document Date
vbak~vkorg " Sales Org
INTO TABLE lt_data_buffer
FROM vbak
FOR ALL ENTRIES IN me->dtr_deleted_items[]
WHERE vbak~vbeln = me->dtr_deleted_items-vbeln.
LOOP AT lt_data_buffer INTO ls_data_to_process.
IF ls_data_to_process-vkorg = c_dtr_sales_org.
COLLECT ls_data_to_process INTO lt_data_to_process.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT lt_data_to_process INTO ls_data_to_process.
CLEAR: ls_data_to_process-kunnr, ls_data_to_process-vkorg.
COLLECT ls_data_to_process INTO lt_dates.
ENDLOOP.
SORT lt_dates.
CHECK lt_data_to_process[] IS NOT INITIAL.
* BEGIN of performance enhancement
IF lt_data_to_process[] IS NOT INITIAL.
SELECT vbak~vbeln
vbak~kunnr
vbak~audat
vbkd~prsdt
INTO TABLE lt_vbeln
FROM vbak INNER JOIN vbkd ON vbak~vbeln = vbkd~vbeln
FOR ALL ENTRIES IN lt_dates
WHERE prsdt = lt_dates-prsdt.
LOOP AT lt_vbeln ASSIGNING <fs_vbeln>.
READ TABLE lt_data_to_process WITH TABLE KEY kunnr = <fs_vbeln>-kunnr
prsdt = <fs_vbeln>-prsdt
vkorg = c_dtr_sales_org
TRANSPORTING NO FIELDS.
IF sy-subrc <> 0.
DELETE lt_vbeln.
ENDIF.
ENDLOOP.
ENDIF.
CHECK lt_vbeln[] IS NOT INITIAL.
* Get all Sale Doc Items by Customer and Issue Date
SELECT vbak~kunnr " Ship-to Customer
vbak~audat " Document Date
vbak~vbeln " Sales Document Number
vbak~auart " Sales Document Type
vbak~faksk " Billing Block
vbak~lifsk " Delivery Block
vbap~abgru " Reason for rejection
vbap~matnr " Material Number
vbap~kwmeng " Quantity
vbap~vrkme " Unit for quantity
vbkd~prsdt " Pricing Date
vbap~posnr " Sales Document Item Number
vbak~augru " Sales Order Reason
vbuk~gbstk " Sales Order overall Status
vbak~vkorg " Sales Org
vbap~pstyv " Item Category
INTO TABLE me->sales_doc_buffer_audat[]
FROM vbak
INNER JOIN vbuk ON vbuk~vbeln = vbak~vbeln
INNER JOIN vbap ON vbak~vbeln = vbap~vbeln
INNER JOIN vbkd ON vbak~vbeln = vbkd~vbeln
* INNER JOIN vbkd ON vbak~vbeln = vbkd~vbeln
** FOR ALL entries IN lt_dates
** WHERE vbak~kunnr = lt_data_to_process-kunnr
** AND vbak~audat = lt_data_to_process-datum
FOR ALL entries IN lt_vbeln
WHERE vbak~vbeln = lt_vbeln-vbeln .
* AND vbkd~posnr = '000000'. " 0000 = Pricing Date of Document, not items
* Fix for Billing - remove any orders with Order Reason D99
delete me->sales_doc_buffer_audat[] where augru = c_billing_fix_order_reason.
INSERT LINES OF me->sales_doc_buffer_audat[] INTO TABLE me->sales_doc_buffer_prsdt[].
* END OF Performance enhancement
LOOP AT lt_data_to_process INTO ls_data_to_process.
TRY.
dtr_load_supply_return(
im_issue_date = ls_data_to_process-prsdt
im_customer = ls_data_to_process-kunnr
* CR12,672 - want to include rejected orders for Sordet
im_ignore_rejected = ' '
CATCH zcx_edi_exception INTO le_exception.
CLEAR ls_message.
ls_message-msgty = 'E'.
ls_message-msgno = le_exception->message_no.
ls_message-msgid = sy-msgid.
ls_message-msgv1 = sy-msgv1.
ls_message-msgv2 = sy-msgv2.
ls_message-msgv3 = sy-msgv3.
ls_message-msgv4 = sy-msgv4.
APPEND ls_message TO ch_errors.
ENDTRY.
ENDLOOP.
* And do mass DB insert / update
mass_update_sordet( ).
** COMMIT WORK.
ENDMETHOD.
Maybe you are looking for
-
Home sharing with multiple accounts- trouble shooting question
I am currently having issues with the Home Sharing function. We all have seperate accounts but log on and are about to share music etc. but when logging on my work phone it sometimes saves my husbands apple id to my phone. In the setting it has the c
-
Hi EveryOne , I would like to know can I order CD's of 11g from Oracle support as we have license with Oracle on Metalink and that is it free of charge ? Thanks Edited by: user12010537 on 27/02/2011 02:32 ص Edited by: user12010537 on 27/02/2011 10:52
-
Gray box around images in PDF and when printing? Why?
Hi, I'm using CS5 and I'm getting a gray box around any image embedded in my document. The box comes if I click on it when a PDF and it prints around them. I can't seem to figure this one out. I'm not used to prepping files for print and I'm tryin
-
Hi guy's, This is the function modules for absolete. CALL FUNCTION 'WWW_USER_AUTH_MESSAGE' CALL FUNCTION 'DATA_INPUT_CUSTOMIZE' CALL FUNCTION 'FI_DOCUMENT_ARCH_READ_NEXT' Please help me for this solution.
-
Joining BT FON? will this slow my home WiFi?
If I activate BT Fon Hotspot around my residence by selecting to opt through my BT internet address on my BT Broadband Router (Home Hub 3) to activate BT FON hot spot, will it slow down my Home WiFi net work? What is the benifit in activating BT Fon