‎2007 Jul 30 11:24 AM
in selection screen i have the 3 screen fields plant, matnr and material group.
if i input plant how do i get the material number and material group based on palnt dynamically??????
explaing with example..........
‎2007 Jul 30 11:26 AM
Hi,
U can display matnr and material group corresponding to the plant entered by selecting the matnr and material group for entered plant in AT SELECTION SCREEN ON VALUE REQUEST EVENT.
Check below program...
REPORT Z_PURMATERIAL_ANALYSIS .
***********************************************************************
Report : Z_PURMATERIAL_ANALYSIS *
Author : AREEVES *
Date Written : 16.07.2007 *
Requested by : Jeanette *
Description : This report to pick up required data of materials to *
analyze purchasing performance and monitoring of stock and spend *
levels of the materials in the given date range for the invoice type*
'ZF2' *
----
Program Specifications: *
Mod date Programmer Reference Description *
----
----
16/07/2007 AREEVES EPUK903024 Initial Development *
***********************************************************************
***********************************************************************
Tables statement *
***********************************************************************
TABLES:
KNVH, " Customer Hierarchy
MARA, " Material Master
SSCRFIELDS. " Fields on selection screens
***********************************************************************
Structure declarations *
***********************************************************************
Structure for Corporate
DATA:
BEGIN OF FS_CORP,
KUNNR TYPE KNA1-KUNNR, " Corporate
END OF FS_CORP,
Structure for Soldto
BEGIN OF FS_SOLDTO,
SOLDTO TYPE KNA1-KUNNR, " Sold To Party
HKUNNR TYPE KNVH-HKUNNR, " Higher level customer
END OF FS_SOLDTO,
Billing Document header
BEGIN OF FS_VBRK,
VBELN TYPE VBRK-VBELN, " Billing Document
WAERK TYPE VBRK-WAERK, " Doc Currency
FKDAT TYPE VBRK-FKDAT, " Billing Document date
END OF FS_VBRK,
Invoice list orders
BEGIN OF FS_VBFA,
VBELN TYPE VBFA-VBELN, " Billing Document
END OF FS_VBFA,
Item data
BEGIN OF FS_ITEM,
MATNR TYPE VBRP-MATNR, " Material
MATKL TYPE VBRP-MATKL, " Material Group
FKDAT TYPE VBRK-FKDAT, " Billing date
FKIMG TYPE VBRP-FKIMG, " Usage
WAVWR TYPE VBRP-NETWR, " Cost
NETWR TYPE VBRP-NETWR, " Sell value
END OF FS_ITEM,
Material Data
BEGIN OF FS_MARA,
MATNR TYPE MARA-MATNR, " Material
LVORM TYPE MARA-LVORM, " Deletion Flag
MEINS TYPE MARA-MEINS, " UOM
BSTME TYPE MARA-BSTME, " Other Unit
PRDHA TYPE MARA-PRDHA, " Prodh Hierarchy
KZUMW TYPE MARA-KZUMW, " Environment
END OF FS_MARA,
Material Description
BEGIN OF FS_MAKT,
MATNR TYPE MARA-MATNR, " Material
MAKTX TYPE MAKT-MAKTX, " Material Description
END OF FS_MAKT,
Sales Data for Material
BEGIN OF FS_MVKE,
MATNR TYPE MVKE-MATNR, " Material
MTPOS TYPE MVKE-MTPOS, " Category
MVGR1 TYPE MVKE-MVGR1, " Material Grp1
MVGR2 TYPE MVKE-MVGR2, " Material Grp2
END OF FS_MVKE,
MRP Controller
BEGIN OF FS_MARC,
MATNR TYPE MARC-MATNR, " Material
DISPO TYPE MARC-DISPO, " Category
END OF FS_MARC,
Moving AVG price
BEGIN OF FS_MBEW,
MATNR TYPE MARA-MATNR, " Material
VERPR TYPE MBEW-VERPR, " Moving AVG Price
END OF FS_MBEW,
Product Supercession code
BEGIN OF FS_SCODE,
MATNR TYPE MARA-MATNR, " Substitute Material
MATWA TYPE MARA-MATNR, " Material
END OF FS_SCODE,
Purchase Order data
BEGIN OF FS_PODAT,
MATNR TYPE EINA-MATNR, " Material
DATLB TYPE EINE-DATLB, " Purchase Order date
POOUT TYPE EKPO-MENGE, " Out standing qty
POQTY TYPE EKBE-MENGE, " PO qty
POCOST TYPE EKPO-NETWR, " PO cost
END OF FS_PODAT,
Info record
BEGIN OF FS_KONP,
MATNR TYPE A017-MATNR, " Material
LIFNR TYPE A017-LIFNR, " Vendor
KBETR TYPE KONP-KBETR, " Rate
KONWA TYPE KONP-KONWA, " Currency
END OF FS_KONP,
Min and Max values
BEGIN OF FS_MARD,
MATNR TYPE MARD-MATNR, " Material
MINQTY TYPE MARD-LABST, " Minimum val
MAXQTY TYPE MARD-LABST, " Maximum val
END OF FS_MARD,
Six months used stock
BEGIN OF FS_FUSTOCK,
MATNR TYPE MARA-MATNR, " Material
MATKL TYPE VBRP-MATKL, " Material Group
MON1 TYPE VBRP-FKIMG, " First Month
MON2 TYPE VBRP-FKIMG, " Second Month
MON3 TYPE VBRP-FKIMG, " Third Month
MON4 TYPE VBRP-FKIMG, " Fourth Month
MON5 TYPE VBRP-FKIMG, " Fifth Month
MON6 TYPE VBRP-FKIMG, " Sixth Month
SFKIMG TYPE VBRP-FKIMG, " Six Months
YFKIMG TYPE VBRP-FKIMG, " Year Total
SNETWR TYPE VBRP-NETWR, " Six Months
YNETWR TYPE VBRP-NETWR, " Year Total
SWAVWR TYPE VBRP-NETWR, " Six Months
YWAVWR TYPE VBRP-NETWR, " Year Total
END OF FS_FUSTOCK,
Months
BEGIN OF FS_MONTH,
MONTH(2) TYPE N, " Month
YEAR(4) TYPE C, " Year
END OF FS_MONTH,
Month names
BEGIN OF FS_MNAME,
MONTH(2) TYPE N, " Month
TXT(3) TYPE C, " Text
END OF FS_MNAME,
Final Table
BEGIN OF FS_FINAL,
MATNR TYPE MARA-MATNR, " Material
MAKTX TYPE MAKT-MAKTX, " Desc
MTPOS TYPE MVKE-MTPOS, " Category
MATKL TYPE MARA-MATKL, " Material group
PRDHA1 TYPE MARA-PRDHA, " Product Heirarchy1
PRDHA2 TYPE MARA-PRDHA, " Product Heirarchy2
KZUMW TYPE MARA-KZUMW, " Environment
MVGR1 TYPE MVKE-MVGR1, " Material Group1
MVGR2 TYPE MVKE-MVGR2, " Material Group2
DISPO TYPE MARC-DISPO, " MRP Controller
BSTME TYPE MARA-BSTME, " Purchase Unit
KBETR TYPE KONP-KBETR, " Cost Info
KONWA TYPE KONP-KONWA, " Currency
VERPR TYPE MBEW-VERPR, " Moving Avg Price
LIFNR TYPE A017-LIFNR, " Current Vendor
MON1 TYPE VBRP-FKIMG, " Sixth Mon
MON2 TYPE VBRP-FKIMG, " Fifth Mon
MON3 TYPE VBRP-FKIMG, " Fourth Mon
MON4 TYPE VBRP-FKIMG, " Third Mon
MON5 TYPE VBRP-FKIMG, " Second Mon
MON6 TYPE VBRP-FKIMG, " Current Mon
SFKIMG TYPE VBRP-FKIMG, " Total 6 Mons
YFKIMG TYPE VBRP-FKIMG, " Year
SNETWR TYPE VBRP-NETWR, " Total 6 Mons
YNETWR TYPE VBRP-NETWR, " Year
SWAVWR TYPE VBRP-NETWR, " Total 6 Mons
YWAVWR TYPE VBRP-NETWR, " Year
MINQTY TYPE MARD-LABST, " Min Stock
MAXQTY TYPE MARD-LABST, " Max Stock
MATWA TYPE VBAP-MATWA, " Material Entered
DATLB TYPE EINE-DATLB, " PO date
POQTY TYPE EKPO-MENGE, " PO qty
POCOST TYPE EKPO-NETWR, " PO cost
POOUT TYPE EKPO-MENGE, " PO out standing
LVORM TYPE MARA-LVORM, " Deletion flag
END OF FS_FINAL,
Filed catalog
FS_FLDCAT TYPE LVC_S_FCAT,
Layout in Grid
FS_LAYOUT TYPE LVC_S_LAYO.
***********************************************************************
Internal tables *
***********************************************************************
DATA:
Corporates under division
T_CORP LIKE STANDARD TABLE OF FS_CORP,
Sold to parties
T_SOLDTO LIKE STANDARD TABLE OF FS_SOLDTO,
Billing Document header
T_VBRK LIKE STANDARD TABLE OF FS_VBRK,
Invoice list orders
T_VBFA LIKE STANDARD TABLE OF FS_VBFA,
Item data
T_ITEM LIKE STANDARD TABLE OF FS_ITEM,
Temp Item Data
T_TITEM LIKE STANDARD TABLE OF FS_ITEM,
Material Data
T_MARA LIKE STANDARD TABLE OF FS_MARA,
Material descriptions
T_MAKT LIKE STANDARD TABLE OF FS_MAKT,
Sales Data for Material
T_MVKE LIKE STANDARD TABLE OF FS_MVKE,
MRP Controller
T_MARC LIKE STANDARD TABLE OF FS_MARC,
Moving AVG price
T_MBEW LIKE STANDARD TABLE OF FS_MBEW,
Supercession code
T_SCODE LIKE STANDARD TABLE OF FS_SCODE,
Purchase Order data
T_PODAT LIKE STANDARD TABLE OF FS_PODAT,
Info Record
T_KONP LIKE STANDARD TABLE OF FS_KONP,
Min and Max stock values
T_MARD LIKE STANDARD TABLE OF FS_MARD,
Used Stock
T_FUSTOCK LIKE STANDARD TABLE OF FS_FUSTOCK,
Months tables
T_MONTH LIKE STANDARD TABLE OF FS_MONTH,
Month names
T_MNAME LIKE STANDARD TABLE OF FS_MNAME,
Final table
T_FINAL LIKE STANDARD TABLE OF FS_FINAL,
Field Catalog table
T_FLDCAT TYPE LVC_T_FCAT.
***********************************************************************
Data declarations and constants *
***********************************************************************
DATA:
W_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
" Container class
W_GRID TYPE REF TO CL_GUI_ALV_GRID,
" Grid class
W_MYCONTAINER TYPE SCRFNAME " Container Name
VALUE 'CONTAINER',
W_OKCODE TYPE SY-UCOMM, " Ok Code
W_DATE TYPE SY-DATUM, " Date
W_VARIANT TYPE DISVARIANT. " Variant
***********************************************************************
Constants *
***********************************************************************
Constants
CONSTANTS:
C_HITYP TYPE KNVH-HITYP " Customer hierarchy type
VALUE 'E',
C_VKORG TYPE KNVH-VKORG " Sales Organization
VALUE '1000',
C_VTWEG TYPE KNVH-VTWEG " Distribution channel
VALUE '01',
C_NOSYS TYPE C VALUE 'X', " Non System generated
C_WERKS TYPE WERKS VALUE '1000', " Plant
C_A TYPE C VALUE 'A'. " Constant 'A'
***********************************************************************
Selection screen *
***********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
Parameters
PARAMETERS:
P_DIV TYPE SPART OBLIGATORY, " Division
P_CORP TYPE KNVH-KUNNR OBLIGATORY. " Corporate
Select options
SELECT-OPTIONS:
S_MATGR FOR MARA-MATKL " Material group
NO INTERVALS NO-EXTENSION,
S_DATE FOR SY-DATUM, " Date
S_MATNR FOR MARA-MATNR NO-DISPLAY. " Material
SELECTION-SCREEN SKIP 1.
Optional Buttons
Materials
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
PARAMETERS:
P_SYS RADIOBUTTON GROUP RAD " System generated materials
USER-COMMAND SYS DEFAULT 'X',
P_NOSYS RADIOBUTTON GROUP RAD, " Non-System generated materials
P_SPR RADIOBUTTON GROUP RAD, " Spicer materials
P_ALL RADIOBUTTON GROUP RAD. " All
SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-037.
PARAMETERS:
P_VARI TYPE LTDX-VARIANT. " Variant
SELECTION-SCREEN END OF BLOCK B3.
SELECTION-SCREEN END OF BLOCK B1.
***********************************************************************
Initialization *
***********************************************************************
INITIALIZATION.
S_DATE-HIGH = SY-DATUM.
S_DATE-LOW = SY-DATUM.
S_DATE-LOW0(4) = SY-DATUM0(4) - 1.
S_DATE-SIGN = 'I'.
S_DATE-OPTION = 'BT'.
APPEND S_DATE.
Get Alpha numeric materials
PERFORM APPEND_MATNR.
***********************************************************************
At Selection Screen events *
***********************************************************************
AT SELECTION-SCREEN ON P_DIV.
Validate the Division
PERFORM VALIDATE_DIV.
AT SELECTION-SCREEN ON P_CORP.
Validate the Corporate
PERFORM VALIDATE_CORP.
AT SELECTION-SCREEN ON S_MATGR.
IF S_MATGR IS NOT INITIAL.
Validate the Material Group
PERFORM VALIDATE_MATGR.
ENDIF. " IF S_MATGR
AT SELECTION-SCREEN ON P_VARI.
Validates the display variant
IF P_VARI IS NOT INITIAL.
PERFORM VALIDATE_VARIANT.
ENDIF. " IF P_VARI IS NOT INITIAL
***********************************************************************
At Selection Screen on value request *
***********************************************************************
F4 help for Corporate
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_CORP.
Get Corporates for selected division
PERFORM GET_CORP.
PERFORM F4HELP_CORP.
F4 help for variant
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
To get the existing values for the display variant
PERFORM F4_ON_DISPLAY_VARIANT CHANGING P_VARI.
***********************************************************************
Start of Selection *
***********************************************************************
START-OF-SELECTION.
Get the required data
PERFORM FETCH_REQUIREDDATA.
***********************************************************************
End of Selection *
***********************************************************************
END-OF-SELECTION.
IF T_FUSTOCK[] IS NOT INITIAL.
Prepare Final data
PERFORM PREPARE_FINALDATA.
Build field catalog
PERFORM PREPARE_FIELDCAT.
Display Data on grid
CALL SCREEN 100.
ENDIF. " IF T_FUSTOCK[] IS..
&----
*& Form APPEND_MATNR
&----
Fill select-option to get alpha numeric materials
----
There are no interface parameters to be passed to this routine
----
FORM APPEND_MATNR .
S_MATNR-OPTION = 'CP'.
S_MATNR-SIGN = 'I'.
S_MATNR-LOW = 'A'.
APPEND S_MATNR.
S_MATNR-LOW = 'B'.
APPEND S_MATNR.
S_MATNR-LOW = 'C'.
APPEND S_MATNR.
S_MATNR-LOW = 'D'.
APPEND S_MATNR.
S_MATNR-LOW = 'E'.
APPEND S_MATNR.
S_MATNR-LOW = 'F'.
APPEND S_MATNR.
S_MATNR-LOW = 'G'.
APPEND S_MATNR.
S_MATNR-LOW = 'H'.
APPEND S_MATNR.
S_MATNR-LOW = 'I'.
APPEND S_MATNR.
S_MATNR-LOW = 'J'.
APPEND S_MATNR.
S_MATNR-LOW = 'K'.
APPEND S_MATNR.
S_MATNR-LOW = 'L'.
APPEND S_MATNR.
S_MATNR-LOW = 'M'.
APPEND S_MATNR.
S_MATNR-LOW = 'N'.
APPEND S_MATNR.
S_MATNR-LOW = 'O'.
APPEND S_MATNR.
S_MATNR-LOW = 'P'.
APPEND S_MATNR.
S_MATNR-LOW = 'Q'.
APPEND S_MATNR.
S_MATNR-LOW = 'R'.
APPEND S_MATNR.
S_MATNR-LOW = 'S'.
APPEND S_MATNR.
S_MATNR-LOW = 'T'.
APPEND S_MATNR.
S_MATNR-LOW = 'U'.
APPEND S_MATNR.
S_MATNR-LOW = 'V'.
APPEND S_MATNR.
S_MATNR-LOW = 'W'.
APPEND S_MATNR.
S_MATNR-LOW = 'X'.
APPEND S_MATNR.
S_MATNR-LOW = 'Y'.
APPEND S_MATNR.
S_MATNR-LOW = 'Z'.
APPEND S_MATNR.
ENDFORM. " APPEND_MATNR
&----
*& Form VALIDATE_DIV
&----
Validate the division
----
There are no interface parameters to be passed to this routine
----
FORM VALIDATE_DIV .
DATA:
LV_SPART TYPE SPART. " Division
MOVE SY-UCOMM TO SSCRFIELDS-UCOMM.
SELECT SINGLE SPART " Division
FROM TSPA
INTO LV_SPART
WHERE SPART EQ P_DIV.
IF SY-SUBRC NE 0.
CLEAR: SSCRFIELDS.
MESSAGE E127(/ISDFPS/MM).
ENDIF. " IF SY-SUBRC EQ 0
ENDFORM. " FORM VALIDATE_DIV
&----
*& Form VALIDATE_CORP
&----
Validate the corporate
----
There are no interface parameters to be passed to this routine
----
FORM VALIDATE_CORP .
DATA:
LV_KUNNR TYPE KNA1-KUNNR. " Corporate
CONSTANTS:
LV_KTOKD LIKE KNA1-KTOKD " Corporate Acc
VALUE 'Z012'.
SELECT SINGLE KUNNR " Customer Number
FROM KNA1
INTO LV_KUNNR
WHERE KUNNR EQ P_CORP
AND KTOKD EQ LV_KTOKD.
IF SY-SUBRC NE 0.
CLEAR: SSCRFIELDS,LV_KUNNR.
MESSAGE E100(RA) WITH TEXT-038.
ELSE.
CLEAR LV_KUNNR.
SELECT KUNNR " Customer Number
UP TO 1 ROWS
FROM KNVH
INTO LV_KUNNR
WHERE HITYP EQ C_HITYP
AND KUNNR EQ P_CORP
AND VKORG EQ C_VKORG
AND VTWEG EQ C_VTWEG
AND SPART EQ P_DIV
AND DATAB LE SY-DATUM
AND DATBI GE SY-DATUM.
ENDSELECT. " SELECT KUNNR
IF SY-SUBRC NE 0.
CLEAR: SSCRFIELDS.
MESSAGE E531(0U) WITH TEXT-003.
ENDIF. " IF SY-SUBRC NE 0
ENDIF. " IF SY-SUBRC NE 0
ENDFORM. " VALIDATE_CORP
&----
*& Form VALIDATE_MATGR
&----
Validate the Material Group
----
There are no interface parameters to be passed to this routine
----
FORM VALIDATE_MATGR .
DATA:
LV_MATGR TYPE MARA-MATKL. " Material group
MOVE SY-UCOMM TO SSCRFIELDS-UCOMM.
SELECT MATKL " Material group
FROM T023
UP TO 1 ROWS
INTO LV_MATGR
WHERE MATKL IN S_MATGR.
ENDSELECT.
IF SY-SUBRC NE 0.
CLEAR: SSCRFIELDS.
MESSAGE E292(MW).
ENDIF. " IF SY-SUBRC EQ 0
ENDFORM. " VALIDATE_MATGR
&----
*& Form GET_CORP
&----
Get the corporates for the selected division
----
There are no interface parameters to be passed to this routine
----
FORM GET_CORP .
Table for conglomerate
DATA:
LT_CONG LIKE STANDARD TABLE OF FS_CORP,
Fields of current screen
LFS_DYNPREAD TYPE DYNPREAD,
Table for current Screen fields
LT_DYNPREAD LIKE STANDARD TABLE OF LFS_DYNPREAD.
LFS_DYNPREAD-FIELDNAME = 'P_DIV'.
APPEND LFS_DYNPREAD TO LT_DYNPREAD.
Get selection screen value for division
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-REPID
DYNUMB = SY-DYNNR
TABLES
DYNPFIELDS = LT_DYNPREAD
EXCEPTIONS
INVALID_ABAPWORKAREA = 1
INVALID_DYNPROFIELD = 2
INVALID_DYNPRONAME = 3
INVALID_DYNPRONUMMER = 4
INVALID_REQUEST = 5
NO_FIELDDESCRIPTION = 6
INVALID_PARAMETER = 7
UNDEFIND_ERROR = 8
DOUBLE_CONVERSION = 9
STEPL_NOT_FOUND = 10
OTHERS = 11.
IF SY-SUBRC EQ 0.
READ TABLE LT_DYNPREAD INTO LFS_DYNPREAD INDEX 1.
IF SY-SUBRC EQ 0.
P_DIV = LFS_DYNPREAD-FIELDVALUE.
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF SY-SUBRC EQ 0
REFRESH T_CORP.
Get the conglomerate for the selected division
SELECT KUNNR " Conglomerate
FROM KNVH
INTO TABLE LT_CONG
WHERE HITYP EQ C_HITYP
AND VKORG EQ C_VKORG
AND VTWEG EQ C_VTWEG
AND SPART EQ P_DIV
AND DATAB LE SY-DATUM
AND DATBI GE SY-DATUM
AND HKUNNR EQ SPACE.
IF SY-SUBRC EQ 0.
SORT LT_CONG BY KUNNR.
DELETE ADJACENT DUPLICATES FROM LT_CONG
COMPARING KUNNR.
Get the corporates for the selected conglomerates
SELECT KUNNR " Customer Number
FROM KNVH
INTO TABLE T_CORP
FOR ALL ENTRIES IN LT_CONG
WHERE HITYP EQ C_HITYP
AND VKORG EQ C_VKORG
AND VTWEG EQ C_VTWEG
AND SPART EQ P_DIV
AND DATAB LE SY-DATUM
AND DATBI GE SY-DATUM
AND HKUNNR EQ LT_CONG-KUNNR.
IF SY-SUBRC NE 0.
CLEAR: SSCRFIELDS.
MESSAGE I531(0U) WITH TEXT-005.
STOP.
ENDIF. " IF SY-SUBRC NE 0
ELSE.
CLEAR: SSCRFIELDS.
MESSAGE I531(0U) WITH TEXT-004.
STOP.
ENDIF. " IF SY-SUBRC EQ 0
ENDFORM. " GET_CORP
&----
*& Form F4HELP_CORP
&----
F4 help for corporate
----
There are no interface parameters to be passed to this routine
----
FORM F4HELP_CORP .
F4 help for corporate
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'KUNNR'
DYNPPROG = 'Z_EXCESS_USAGE'
DYNPNR = '1000'
DYNPROFIELD = 'P_CORP'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = T_CORP
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC EQ 0.
Do nothing
ENDIF. " IF SY-SUBRC EQ 0
ENDFORM. " F4HELP_CORP
&----
*& Form FETCH_REQUIREDDATA
&----
Get the required details like invoice details, material details, stock
and cost details, minimum and maximum stock, purchase order details,
moving avg price
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_REQUIREDDATA .
Constants
CONSTANTS:
LC_FKART TYPE VBRK-FKART " Document type
VALUE 'ZF2',
LC_VBTYP TYPE VBFA-VBTYP_N " Doc Category of subseq doc
VALUE '3'.
Fetch required data
Get the sold-to party details
SELECT KUNNR " Sold-to
HKUNNR " Higher level customer
FROM KNVH
INTO TABLE T_SOLDTO
WHERE HITYP EQ C_HITYP
AND DATAB LE SY-DATUM
AND DATBI GE SY-DATUM
AND HKUNNR EQ P_CORP.
IF SY-SUBRC EQ 0.
SORT T_SOLDTO BY SOLDTO.
DELETE ADJACENT DUPLICATES FROM T_SOLDTO.
Get Billing documents
SELECT VBELN " Billing Document
WAERK " Doc currency
FKDAT " Billing date
FROM VBRK
INTO TABLE T_VBRK
FOR ALL ENTRIES IN T_SOLDTO
WHERE FKART EQ LC_FKART
AND FKDAT IN S_DATE
AND KUNAG EQ T_SOLDTO-SOLDTO.
IF SY-SUBRC EQ 0.
SORT T_VBRK BY VBELN.
SELECT VBELV " Sales document
FROM VBFA
INTO TABLE T_VBFA
FOR ALL ENTRIES IN T_VBRK
WHERE VBELV EQ T_VBRK-VBELN
AND VBTYP_N EQ LC_VBTYP.
IF SY-SUBRC EQ 0.
SORT T_VBFA BY VBELN.
Get Last Six month date
PERFORM GOBACK_MONTH CHANGING W_DATE.
Get Item Data
PERFORM FETCH_ITEMDATA.
Get Used stock
PERFORM FETCH_USEDSTOCK.
Get Material Data
PERFORM FETCH_MATDATA.
Get Moving Avg Price
PERFORM FETCH_AVGPRICE.
Get Supersession code
PERFORM FETCH_SOCDE.
Get Purchase order data
PERFORM FETCH_PODATA.
Get Current Vendor
PERFORM FETCH_VENDOR.
Get Min and Max Stock level
PERFORM FETCH_STOCK.
Prepare dates
PERFORM FETCH_MONTHS.
ELSE.
MESSAGE I026(8I).
STOP.
ENDIF. " IF SY-SUBRC EQ 0
ELSE.
MESSAGE I026(8I).
STOP.
ENDIF. " IF SY-SUBRC EQ 0
ELSE.
MESSAGE I531(0U) WITH TEXT-006.
STOP.
ENDIF. " IF SY-SUBRC EQ 0
ENDFORM. " FORM FETCH_REQUIREDDATA
&----
*& Form FETCH_ITEMDATA
&----
Get the item details for the selected order and radio button chosen
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_ITEMDATA .
DATA:
Item details
BEGIN OF LFS_VBRP,
VBELN TYPE VBRP-VBELN, " Sales Doc
POSNR TYPE VBRP-POSNR, " Item Number
FKIMG TYPE VBRP-FKIMG, " Actual Invoiced Quantity
VRKME TYPE VBRP-VRKME, " Sales Unit
MEINS TYPE VBRP-MEINS, " Base Unit of measure
NETWR TYPE VBRP-NETWR, " Net value
MATNR TYPE VBRP-MATNR, " Material
MATKL TYPE VBRP-MATKL, " Material Group
WAVWR TYPE VBRP-NETWR, " Cost in document currency
END OF LFS_VBRP,
Table Item details
LT_VBRP LIKE STANDARD TABLE OF LFS_VBRP,
LT_TVBRP LIKE STANDARD TABLE OF LFS_VBRP.
Constants
CONSTANTS:
LC_SP TYPE MARA-MATNR " Material
VALUE 'SP%',
LC_GBP TYPE VBRK-WAERK " Currency
VALUE 'GBP'.
Get Item data for Non-System generated materials
IF P_NOSYS EQ C_NOSYS.
SELECT VBELN " Sales Doc
POSNR " Item Number
FKIMG " Actual Invoiced Quantity
VRKME " Sales Unit
MEINS " Base Unit of measure
NETWR " Net value
MATNR " Material
MATKL " Material Group
WAVWR " Cost in document currency
FROM VBRP
INTO TABLE LT_VBRP
FOR ALL ENTRIES IN T_VBFA
WHERE VBELN EQ T_VBFA-VBELN
AND MATNR IN S_MATNR
AND MATKL IN S_MATGR.
IF SY-SUBRC EQ 0.
SORT LT_VBRP BY VBELN POSNR.
Remove Spicer materials
LOOP AT LT_VBRP INTO LFS_VBRP.
IF NOT ( LFS_VBRP-MATNR CP 'SP*' ).
APPEND LFS_VBRP TO LT_TVBRP.
CLEAR LFS_VBRP.
ENDIF. " IF NOT LFS_VBRP_MATNR
ENDLOOP. " LOOP AT LT_VBRP
REFRESH LT_VBRP.
LT_VBRP[] = LT_TVBRP[].
FREE LT_TVBRP.
SORT LT_VBRP BY VBELN POSNR.
ENDIF. " IF SY-SUBRC EQ 0
Get Item data for System generated materials
ELSEIF P_SYS EQ C_NOSYS.
SELECT VBELN " Sales Doc
POSNR " Item Number
FKIMG " Actual Invoiced Quantity
VRKME " Sales Unit
MEINS " Base Unit of measure
NETWR " Net value
MATNR " Material
MATKL " Material Group
WAVWR " Cost in document currency
FROM VBRP
INTO TABLE LT_VBRP
FOR ALL ENTRIES IN T_VBFA
WHERE VBELN EQ T_VBFA-VBELN
AND MATNR NOT IN S_MATNR
AND MATKL IN S_MATGR.
IF SY-SUBRC EQ 0.
SORT LT_VBRP BY VBELN POSNR.
ENDIF. " IF SY-SUBRC EQ 0
Get Item data for Spicer materials
ELSEIF P_SPR EQ C_NOSYS.
SELECT VBELN " Sales Doc
POSNR " Item Number
FKIMG " Actual Invoiced Quantity
VRKME " Sales Unit
MEINS " Base Unit of measure
NETWR " Net value
MATNR " Material
MATKL " Material Group
WAVWR " Cost in document currency
FROM VBRP
INTO TABLE LT_VBRP
FOR ALL ENTRIES IN T_VBFA
WHERE VBELN EQ T_VBFA-VBELN
AND MATNR LIKE LC_SP
AND MATKL IN S_MATGR.
IF SY-SUBRC EQ 0.
SORT LT_VBRP BY VBELN POSNR.
ENDIF. " IF SY-SUBRC EQ 0
Get Item data for All materials
ELSEIF P_ALL EQ C_NOSYS .
SELECT VBELN " Sales Doc
POSNR " Item Number
FKIMG " Actual Invoiced Quantity
VRKME " Sales Unit
MEINS " Base Unit of measure
NETWR " Net value
MATNR " Material
MATKL " Material Group
WAVWR " Cost in document currency
FROM VBRP
INTO TABLE LT_VBRP
FOR ALL ENTRIES IN T_VBFA
WHERE VBELN EQ T_VBFA-VBELN
AND MATKL IN S_MATGR.
IF SY-SUBRC EQ 0.
SORT LT_VBRP BY VBELN POSNR.
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " P_NOSYS EQ C_NOSYS
Segregate the item data
IF LT_VBRP[] IS INITIAL.
MESSAGE I109(WP).
STOP.
ELSE.
LOOP AT LT_VBRP INTO LFS_VBRP.
READ TABLE T_VBFA INTO FS_VBFA WITH KEY
VBELN = LFS_VBRP-VBELN BINARY SEARCH.
IF SY-SUBRC EQ 0.
READ TABLE T_VBRK INTO FS_VBRK WITH KEY
VBELN = FS_VBFA-VBELN BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE:
FS_VBRK-FKDAT TO FS_ITEM-FKDAT,
LFS_VBRP-MATNR TO FS_ITEM-MATNR,
LFS_VBRP-MATKL TO FS_ITEM-MATKL.
IF FS_VBRK-WAERK NE LC_GBP.
Convert Cost and Cell value to Local Currency
PERFORM CURRENCY_CONVERSION USING LFS_VBRP-NETWR
FS_VBRK-WAERK
LC_GBP
FS_VBRK-FKDAT
CHANGING FS_ITEM-NETWR.
PERFORM CURRENCY_CONVERSION USING LFS_VBRP-WAVWR
FS_VBRK-WAERK
LC_GBP
FS_VBRK-FKDAT
CHANGING FS_ITEM-WAVWR.
ELSE.
MOVE: LFS_VBRP-NETWR TO FS_ITEM-NETWR,
LFS_VBRP-WAVWR TO FS_ITEM-WAVWR.
ENDIF. " IF FS_VBRK-WAERK
IF LFS_VBRP-VRKME NE LFS_VBRP-MEINS.
Convert Usage to Base Unit
PERFORM UNIT_CONVERSION USING LFS_VBRP-MATNR
LFS_VBRP-FKIMG
LFS_VBRP-VRKME
LFS_VBRP-MEINS
CHANGING FS_ITEM-FKIMG.
ELSE.
MOVE LFS_VBRP-FKIMG TO FS_ITEM-FKIMG.
ENDIF. " IF FS_VBRP-VRKME..
APPEND FS_ITEM TO T_ITEM.
CLEAR: FS_ITEM,LFS_VBRP,FS_VBRK,FS_VBFA.
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF SY-SUBRC EQ 0
ENDLOOP. " LOOP AT T_VBRP[]
T_TITEM[] = T_ITEM[].
ENDIF. " IF LT_VBRP[] IS INITIAL
ENDFORM. " FETCH_ITEMDATA
&----
*& Form UNIT_CONVERSION
&----
Convert free stock of the material into pallets
----
-->P_LFS_VBRP_MATNR Material
-->P_LFS_VBRP_FKIMG Usage
-->P_LFS_VBRP_VRKME Sales Unit
-->P_LFS_VBRP-MEINS Base Unit of measure
<--P_LFS_VBRP-FKIMG Usage
----
FORM UNIT_CONVERSION USING P_LFS_VBRP_MATNR TYPE VBRP-MATNR
P_LFS_VBRP_FKIMG TYPE VBRP-FKIMG
P_LFS_VBRP_VRKME TYPE VBRP-VRKME
P_LFS_VBRP_MEINS TYPE VBRP-MEINS
CHANGING P_LFS_VBRP_CFKIMG TYPE VBRP-FKIMG.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = P_LFS_VBRP_MATNR
I_IN_ME = P_LFS_VBRP_VRKME
I_OUT_ME = P_LFS_VBRP_MEINS
I_MENGE = P_LFS_VBRP_FKIMG
IMPORTING
E_MENGE = P_LFS_VBRP_CFKIMG
EXCEPTIONS
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
IF SY-SUBRC NE 0.
CLEAR P_LFS_VBRP_CFKIMG.
ENDIF. " IF SY-SUBRC NE 0
ENDFORM. " UNIT_CONVERSION
&----
*& Form CURRENCY_CONVERSION
&----
Convert free stock of the material into pallets
----
-->P_LFS_VBRP_NETWR Sell value/Cost
-->P_LFS_VBRK_WAERS Currency
-->P_LC_GBP Local Currency
-->P_LFS_VBRK_FKDAT Billing Date
<--P_LFS_VBRP_CNETWR Sell value/Cost
----
FORM CURRENCY_CONVERSION USING P_LFS_VBRP_NETWR TYPE VBRP-NETWR
P_LFS_VBRK_WAERK TYPE VBRK-WAERK
P_LC_GBP TYPE VBRK-WAERK
P_FS_VBRK_FKDAT TYPE SY-DATUM
CHANGING P_LFS_VBRP_CNETWR TYPE VBRP-NETWR.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
DATE = P_FS_VBRK_FKDAT
FOREIGN_AMOUNT = P_LFS_VBRP_NETWR
FOREIGN_CURRENCY = P_LFS_VBRK_WAERK
LOCAL_CURRENCY = P_LC_GBP
IMPORTING
LOCAL_AMOUNT = P_LFS_VBRP_CNETWR
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
IF SY-SUBRC NE 0.
CLEAR P_LFS_VBRP_CNETWR.
ENDIF. " IF SY-SUBRC NE 0
ENDFORM. " FORM CURRENCY_CONVERSION
&----
*& Form FETCH_MATDATA
&----
Get the materials details and description for the selected materials
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_MATDATA .
SORT T_TITEM BY MATNR.
DELETE ADJACENT DUPLICATES FROM T_TITEM COMPARING MATNR.
IF T_TITEM[] IS NOT INITIAL.
Material Details
SELECT MATNR " Material
LVORM " Deletion Flag
MEINS " UOM
BSTME " Order Unit
PRDHA " Prdh Hier
KZUMW " Environment
FROM MARA
INTO TABLE T_MARA
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR.
IF SY-SUBRC EQ 0.
SORT T_MARA BY MATNR.
ENDIF. " IF SY-SUBRC EQ 0
Material Description
SELECT MATNR " Material
MAKTX " Material Desc
FROM MAKT
INTO TABLE T_MAKT
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR
AND SPRAS EQ SY-LANGU.
IF SY-SUBRC EQ 0.
SORT T_MAKT BY MATNR.
ENDIF. " IF SY-SUBRC EQ 0
Sales Data for Material
SELECT MATNR " Material
MTPOS " Category
MVGR1 " Material Grp1
MVGR2 " Material Grp2
FROM MVKE
INTO TABLE T_MVKE
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR.
IF SY-SUBRC EQ 0.
SORT T_MVKE BY MATNR.
ENDIF. " IF SY-SUBRC EQ 0
MRP Controller
SELECT MATNR " Material
DISPO " MRP Controller
FROM MARC
INTO TABLE T_MARC
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR
AND WERKS EQ C_WERKS.
IF SY-SUBRC EQ 0.
SORT T_MARC BY MATNR.
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF T_TITEM[]..
ENDFORM. " FETCH_MATDESC
&----
*& Form FETCH_AVGPRICE
&----
Get the Moving Average Price of the material
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_AVGPRICE .
CONSTANTS:
LC_BWKEY TYPE MBEW-BWKEY " Valuation area
VALUE '1000'.
Moving Avg Price
SELECT MATNR " Material Number
VERPR " Moving Average Price
FROM MBEW
INTO TABLE T_MBEW
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR
AND BWKEY EQ LC_BWKEY.
IF SY-SUBRC EQ 0.
SORT T_MBEW BY MATNR.
ENDIF. " IF SY-SUBRC EQ 0
ENDFORM. " FETCH_AVGPRICE
&----
*& Form FETCH_SOCDE
&----
Fetch Supercession code for the selected materials
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_SOCDE .
Structure for Material substitution
DATA:
BEGIN OF LFS_KONDD,
KNUMH TYPE KONDD-KNUMH, " Condition Record
MATNR TYPE KONDD-SMATN, " Substitute Material
END OF LFS_KONDD,
Structure for Conditions
BEGIN OF LFS_KOTD001,
MATWA TYPE KOTD001-MATWA, " Material Entered
KNUMH TYPE KONDD-KNUMH, " Condition Record
END OF LFS_KOTD001,
Structure for Material
BEGIN OF LFS_SMATN,
MATNR TYPE KONDD-SMATN, " Substitute Material
MATWA TYPE KOTD001-MATWA, " Material Entered
END OF LFS_SMATN,
LT_KONDD LIKE STANDARD TABLE OF LFS_KONDD,
LT_KOTD001 LIKE STANDARD TABLE OF LFS_KOTD001,
LT_SMATN LIKE STANDARD TABLE OF LFS_SMATN,
LV_CNT TYPE I. " Counter
Constants
CONSTANTS:
LC_KAPPL TYPE KOTD001-KAPPL " Application
VALUE 'V',
LC_KSCHL TYPE KOTD001-KSCHL " Material det type
VALUE 'A001',
LC_ONE TYPE C VALUE '1'. " One
Get substitute materials
SELECT KNUMH " Condition record
SMATN " Material
FROM KONDD
INTO TABLE LT_KONDD
FOR ALL ENTRIES IN T_TITEM
WHERE SMATN EQ T_TITEM-MATNR.
IF SY-SUBRC EQ 0.
Get Condition records
SORT LT_KONDD BY KNUMH.
SELECT MATWA " Material Entered
KNUMH " Condition record
FROM KOTD001
INTO TABLE LT_KOTD001
FOR ALL ENTRIES IN LT_KONDD
WHERE KAPPL EQ LC_KAPPL
AND KSCHL EQ LC_KSCHL
AND DATBI GE SY-DATUM
AND DATAB LE SY-DATUM
AND KNUMH EQ LT_KONDD-KNUMH.
IF SY-SUBRC EQ 0.
SORT LT_KOTD001 BY KNUMH.
LOOP AT LT_KOTD001 INTO LFS_KOTD001.
READ TABLE LT_KONDD INTO LFS_KONDD WITH KEY
KNUMH = LFS_KOTD001-KNUMH BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE: LFS_KONDD-MATNR TO LFS_SMATN-MATNR,
LFS_KOTD001-MATWA TO LFS_SMATN-MATWA.
APPEND LFS_SMATN TO LT_SMATN.
CLEAR:LFS_SMATN,LFS_KONDD.
ENDIF. " IF SY-SUBRC EQ 0
ENDLOOP. " LOOP AT LT_KTODD01
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF SY-SUBRC EQ 0
SORT LT_SMATN BY MATNR MATWA.
DELETE ADJACENT DUPLICATES FROM LT_SMATN
COMPARING MATNR MATWA.
LOOP AT LT_SMATN INTO LFS_SMATN.
LV_CNT = LV_CNT + 1.
MOVE LFS_SMATN-MATWA TO FS_SCODE-MATWA.
AT END OF MATNR.
IF LV_CNT EQ LC_ONE.
MOVE LFS_SMATN-MATNR TO FS_SCODE-MATNR.
APPEND FS_SCODE TO T_SCODE.
CLEAR: FS_SCODE,LV_CNT.
ENDIF. " IF LC_CNT EQ 1
ENDAT. " AT END OF MATNR
ENDLOOP. " LOOP AT LT_SMATN
ENDFORM. " FETCH_SOCDE
&----
*& Form FETCH_PODATA
&----
Get the purchase order data for selected materials
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_PODATA .
DATA:
Info records for materials
BEGIN OF LFS_EINA,
INFNR TYPE EINA-INFNR, " Info record
MATNR TYPE EINA-MATNR, " Material
END OF LFS_EINA,
Purchase orders for inforecords
BEGIN OF LFS_EINE,
INFNR TYPE EINE-INFNR, " Info record
EBELN TYPE EINE-EBELN, " Purchase order
DATLB TYPE EINE-DATLB, " Purchase Order date
END OF LFS_EINE,
Purchase Order item details
BEGIN OF LFS_EKPO,
EBELN TYPE EKPO-EBELN, " PO Doc
EBELP TYPE EKPO-EBELP, " Item
MATNR TYPE EKPO-MATNR, " Material
MENGE TYPE EKPO-MENGE, " Quantity
NETWR TYPE EKPO-NETWR, " Cost
END OF LFS_EKPO,
Purchase and material data
BEGIN OF LFS_PODAT,
MATNR TYPE EINA-MATNR, " Material
DATLB TYPE EINE-DATLB, " Purchase Order date
EBELN TYPE EINE-EBELN, " Purchase order
END OF LFS_PODAT,
PGI data for Purchase orders
BEGIN OF LFS_EKBE,
EBELN TYPE EKBE-EBELN, " PO Doc
EBELP TYPE EKBE-EBELP, " Item
ZEKKN TYPE EKBE-ZEKKN, " Seq Num
VGABE TYPE EKBE-VGABE, " Transaction/event type
GJAHR TYPE EKBE-GJAHR, " Mat Doc Year
BELNR TYPE EKBE-BELNR, " Num of Mat Doc
BUZEI TYPE EKBE-BUZEI, " Item of Mat Doc
MENGE TYPE EKBE-MENGE, " Quantity
END OF LFS_EKBE,
Purchase Order item details
BEGIN OF LFS_FEKPO,
EBELN TYPE EKPO-EBELN, " PO Doc
MATNR TYPE EKPO-MATNR, " Material
MENGE TYPE EKPO-MENGE, " Quantity
NETWR TYPE EKPO-NETWR, " Cost
END OF LFS_FEKPO,
Purchase Order item details
BEGIN OF LFS_FEKBE,
EBELN TYPE EKBE-EBELN, " PO Doc
MATNR TYPE EKPO-MATNR, " Material
MENGE TYPE EKBE-MENGE, " Quantity
END OF LFS_FEKBE,
LT_EINA LIKE STANDARD TABLE OF LFS_EINA,
LT_EINE LIKE STANDARD TABLE OF LFS_EINE,
LT_EKPO LIKE STANDARD TABLE OF LFS_EKPO,
LT_PODAT LIKE STANDARD TABLE OF LFS_PODAT,
LT_EKBE LIKE STANDARD TABLE OF LFS_EKBE,
LT_FEKBE LIKE STANDARD TABLE OF LFS_FEKBE,
LT_FEKPO LIKE STANDARD TABLE OF LFS_FEKPO.
Constants:
CONSTANTS:
LC_BWART TYPE EKBE-BWART " Movement Type
VALUE '101',
LC_LOEKZ TYPE EKPO-LOEKZ " Deletion Flag
VALUE 'L'.
Get Info records for the selected materials
SELECT INFNR " Info record
MATNR " Material
FROM EINA
INTO TABLE LT_EINA
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR.
IF SY-SUBRC EQ 0.
Get Last purchase orders for the selected info records
SORT LT_EINA BY INFNR.
SELECT INFNR " Info record
EBELN " Purchase order
DATLB " Purchase Order date
FROM EINE
INTO TABLE LT_EINE
FOR ALL ENTRIES IN LT_EINA
WHERE INFNR EQ LT_EINA-INFNR
AND EBELN NE SPACE.
IF SY-SUBRC EQ 0.
LOOP AT LT_EINA INTO LFS_EINA.
READ TABLE LT_EINE INTO LFS_EINE WITH KEY
INFNR = LFS_EINA-INFNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE: LFS_EINA-MATNR TO LFS_PODAT-MATNR,
LFS_EINE-EBELN TO LFS_PODAT-EBELN,
LFS_EINE-DATLB TO LFS_PODAT-DATLB.
APPEND LFS_PODAT TO LT_PODAT.
CLEAR: LFS_PODAT,LFS_EINE.
ENDIF. " IF SY-SUBRC EQ 0
ENDLOOP. " LOOP AT LT_EINA
SORT LT_PODAT BY MATNR ASCENDING DATLB DESCENDING.
DELETE ADJACENT DUPLICATES FROM LT_PODAT
COMPARING MATNR.
Get Purchase order details
SELECT EBELN " PO Doc
EBELP " Item
MATNR " Material
MENGE " Quantity
NETWR " Cost
FROM EKPO
INTO TABLE LT_EKPO
FOR ALL ENTRIES IN LT_PODAT
WHERE EBELN EQ LT_PODAT-EBELN
AND LOEKZ NE LC_LOEKZ
AND MATNR EQ LT_PODAT-MATNR.
IF SY-SUBRC EQ 0.
SORT: LT_EKPO BY EBELN EBELP.
Get PGI Qty of PO
SELECT EBELN " PO doc
EBELP " Item
ZEKKN " Seq Num
VGABE " Transaction/event type
GJAHR " Mat Doc Year
BELNR " Num of Mat Doc
BUZEI " Item of Mat Doc
MENGE " Quantity
FROM EKBE
INTO TABLE LT_EKBE
FOR ALL ENTRIES IN LT_EKPO
WHERE EBELN EQ LT_EKPO-EBELN
AND EBELP EQ LT_EKPO-EBELP
AND BWART EQ LC_BWART.
IF SY-SUBRC EQ 0.
SORT LT_EKBE BY EBELN EBELP.
LOOP AT LT_EKBE INTO LFS_EKBE.
READ TABLE LT_EKPO INTO LFS_EKPO WITH KEY
EBELN = LFS_EKBE-EBELN
EBELP = LFS_EKBE-EBELP
BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE: LFS_EKBE-EBELN TO LFS_FEKBE-EBELN,
LFS_EKPO-MATNR TO LFS_FEKBE-MATNR,
LFS_EKBE-MENGE TO LFS_FEKBE-MENGE .
COLLECT LFS_FEKBE INTO LT_FEKBE.
CLEAR LFS_FEKBE.
ENDIF. " IF SY-SUBRC EQ 0
ENDLOOP. " LOOP AT LT_EKBE
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF SY-SUBRC EQ 0
LOOP AT LT_EKPO INTO LFS_EKPO.
MOVE: LFS_EKPO-EBELN TO LFS_FEKPO-EBELN,
LFS_EKPO-MATNR TO LFS_FEKPO-MATNR,
LFS_EKPO-MENGE TO LFS_FEKPO-MENGE,
LFS_EKPO-NETWR TO LFS_FEKPO-NETWR.
COLLECT LFS_FEKPO INTO LT_FEKPO.
CLEAR LFS_FEKPO.
ENDLOOP. " LOOP AT LT_EKPO
Final PO data
SORT: LT_FEKPO BY MATNR,
LT_FEKBE BY MATNR.
LOOP AT LT_PODAT INTO LFS_PODAT.
MOVE: LFS_PODAT-MATNR TO FS_PODAT-MATNR,
LFS_PODAT-DATLB TO FS_PODAT-DATLB.
READ TABLE LT_FEKPO INTO LFS_FEKPO WITH KEY
MATNR = LFS_PODAT-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
READ TABLE LT_FEKBE INTO LFS_FEKBE WITH KEY
MATNR = LFS_PODAT-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE LFS_FEKBE-MENGE TO FS_PODAT-POOUT.
CLEAR LFS_FEKBE.
ENDIF. " IF SY-SYBRC EQ 0
MOVE: LFS_FEKPO-MENGE TO FS_PODAT-POQTY,
LFS_FEKPO-NETWR TO FS_PODAT-POCOST.
FS_PODAT-POOUT = FS_PODAT-POQTY - FS_PODAT-POOUT.
APPEND FS_PODAT TO T_PODAT.
CLEAR: LFS_FEKPO,FS_PODAT.
ENDIF. " IF SY-SYBRC EQ 0
ENDLOOP. " LOOP AT LT_PODAT
ENDFORM. " FETCH_PODATA
&----
*& Form FETCH_VENDOR
&----
Get the Current Vendor,Purchase info record and conditional
value(Rate)
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_VENDOR .
Purchasing Source List
DATA:
BEGIN OF LFS_EORD,
MATNR TYPE MARA-MATNR, " Material
LIFNR TYPE EORD-LIFNR, " Vendor
END OF LFS_EORD,
Material Info Record (Plant-Specific)
BEGIN OF LFS_A017,
LIFNR TYPE EORD-LIFNR, " Vendor
MATNR TYPE MARA-MATNR, " Material
DATAB TYPE A017-DATAB, " Validity Start date
KNUMH TYPE A017-KNUMH, " Condition Record
END OF LFS_A017,
Materials
BEGIN OF LFS_MATNR,
MATNR TYPE MARA-MATNR, " Material
END OF LFS_MATNR,
Info Records
BEGIN OF LFS_KONP,
KNUMH TYPE KONP-KNUMH, " Condition record
KBETR TYPE KONP-KBETR, " Price
KONWA TYPE KONP-KONWA, " Currency
END OF LFS_KONP,
LT_EORD LIKE STANDARD TABLE OF LFS_EORD,
LT_A017 LIKE STANDARD TABLE OF LFS_A017,
LT_MATNR LIKE STANDARD TABLE OF LFS_MATNR,
LT_KONP LIKE STANDARD TABLE OF LFS_KONP.
Constants
CONSTANTS:
LC_KAPPL TYPE A017-KAPPL " Application
VALUE 'M',
LC_KSCHL TYPE A017-KSCHL " Condition Type
VALUE 'PB00',
LC_EKORG TYPE A017-EKORG " Sales Org
VALUE '1000'.
Get Purchase Info records
SELECT MATNR " Material Number
LIFNR " Vendor Number
FROM EORD
INTO TABLE LT_EORD
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR
AND WERKS EQ C_WERKS
AND FLIFN EQ C_NOSYS.
IF SY-SUBRC EQ 0.
Fetch the info records for the material
SELECT LIFNR " Vendor
MATNR " Material
DATAB " Validity Start date
KNUMH " Condition Record
FROM A017
INTO TABLE LT_A017
FOR ALL ENTRIES IN LT_EORD
WHERE KAPPL EQ LC_KAPPL
AND KSCHL EQ LC_KSCHL
AND LIFNR EQ LT_EORD-LIFNR
AND MATNR EQ LT_EORD-MATNR
AND EKORG EQ LC_EKORG
AND WERKS EQ C_WERKS
AND DATBI GE SY-DATUM
AND DATAB LE SY-DATUM.
ENDIF. " IF SY-SUBRC EQ 0
SORT LT_A017 BY MATNR.
LOOP AT T_TITEM INTO FS_ITEM.
READ TABLE LT_A017 INTO LFS_A017 WITH KEY
MATNR = FS_ITEM-MATNR BINARY SEARCH.
IF SY-SUBRC NE 0.
MOVE FS_ITEM-MATNR TO LFS_MATNR-MATNR.
APPEND LFS_MATNR TO LT_MATNR.
CLEAR: LFS_MATNR,LFS_A017.
ENDIF. " IF SY-SUBRC NE 0
ENDLOOP. " LOOP AT T_TITEM
Fetch the info records for the material
IF LT_MATNR[] IS NOT INITIAL.
SORT LT_MATNR BY MATNR.
SELECT LIFNR " Vendor
MATNR " Material
DATAB " Validate Start Date
KNUMH " Condition Record
FROM A017
APPENDING TABLE LT_A017
FOR ALL ENTRIES IN LT_MATNR
WHERE KAPPL EQ LC_KAPPL
AND KSCHL EQ LC_KSCHL
AND MATNR EQ LT_MATNR-MATNR
AND EKORG EQ LC_EKORG
AND WERKS EQ C_WERKS
AND DATBI GE SY-DATUM
AND DATAB LE SY-DATUM.
ENDIF. " IF LT_MATNR[] IS ..
Get Cost from Info record
IF LT_A017[] IS NOT INITIAL.
SORT LT_A017 BY LIFNR MATNR ASCENDING
DATAB DESCENDING.
DELETE ADJACENT DUPLICATES FROM LT_A017
COMPARING LIFNR MATNR DATAB.
SORT LT_A017 BY KNUMH.
SELECT KNUMH " Condition record
KBETR " Price
KONWA " Currency
FROM KONP
INTO TABLE LT_KONP
FOR ALL ENTRIES IN LT_A017
WHERE KNUMH EQ LT_A017-KNUMH
AND KAPPL EQ LC_KAPPL
AND LOEVM_KO NE C_NOSYS.
IF SY-SUBRC EQ 0.
SORT: LT_A017 BY MATNR,
LT_KONP BY KNUMH.
LOOP AT LT_A017 INTO LFS_A017.
READ TABLE LT_KONP INTO LFS_KONP WITH KEY
KNUMH = LFS_A017-KNUMH BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE:LFS_A017-MATNR TO FS_KONP-MATNR,
LFS_A017-LIFNR TO FS_KONP-LIFNR,
LFS_KONP-KBETR TO FS_KONP-KBETR,
LFS_KONP-KONWA TO FS_KONP-KONWA.
APPEND FS_KONP TO T_KONP.
CLEAR:FS_KONP,LFS_A017.
ENDIF. " IF SY-SUBRC EQ 0
ENDLOOP. " LOOP AT LT_A017
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF SY-SUBRC EQ 0
ENDFORM. " FETCH_VENDOR
&----
*& Form FETCH_STOCK
&----
Get Minimum and Maximum stock values for the selected Materials
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_STOCK .
Material Stock data
DATA:
BEGIN OF LFS_MARD,
MATNR TYPE MARD-MATNR, " Material
LFGJA TYPE MARD-LFGJA, " Year
LFMON TYPE MARD-LFMON, " Period
LABST TYPE MARD-LABST, " Unrestricted Stock
END OF LFS_MARD,
LT_MARD LIKE STANDARD TABLE OF LFS_MARD,
LT_MARD1 LIKE STANDARD TABLE OF LFS_MARD.
Local Variables
DATA:
LV_FLAG TYPE C. " Flag
Get Material Data
SELECT MATNR " Material
LFGJA " Year
LFMON " Period
LABST " Unrestricted Stock
FROM MARD
INTO TABLE LT_MARD
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR
AND WERKS EQ C_WERKS
AND LFGJA BETWEEN W_DATE(4) AND SY-DATUM(4)
AND LFMON BETWEEN W_DATE4(2) AND SY-DATUM4(2).
IF SY-SUBRC EQ 0.
LOOP AT LT_MARD INTO LFS_MARD.
COLLECT LFS_MARD INTO LT_MARD1.
CLEAR LFS_MARD.
ENDLOOP. " LOOP AT LT_MARD
REFRESH LT_MARD.
Perious Stock data
SELECT MATNR " Material
LFGJA " Year
LFMON " Period
LABST " Unrestricted Stock
FROM MARDH
INTO TABLE LT_MARD
FOR ALL ENTRIES IN T_TITEM
WHERE MATNR EQ T_TITEM-MATNR
AND WERKS EQ C_WERKS
AND LFGJA BETWEEN W_DATE(4) AND SY-DATUM(4)
AND LFMON BETWEEN W_DATE4(2) AND SY-DATUM4(2).
IF SY-SUBRC EQ 0.
LOOP AT LT_MARD INTO LFS_MARD.
COLLECT LFS_MARD INTO LT_MARD1.
CLEAR LFS_MARD.
ENDLOOP. " LOOP AT LT_MARD
ENDIF. " IF SY-SUBRC EQ 0
Min and Max values of the material
SORT LT_MARD1 BY MATNR LABST.
LOOP AT LT_MARD1 INTO LFS_MARD.
AT NEW MATNR.
LV_FLAG = C_NOSYS.
ENDAT. " AT NEW MATNR
IF LV_FLAG EQ C_NOSYS.
MOVE LFS_MARD-LABST TO FS_MARD-MINQTY.
CLEAR LV_FLAG.
ENDIF. " IF LV_FLAG..
MOVE LFS_MARD-LABST TO FS_MARD-MAXQTY.
AT END OF MATNR.
MOVE LFS_MARD-MATNR TO FS_MARD-MATNR.
APPEND FS_MARD TO T_MARD.
CLEAR: FS_MARD.
ENDAT. " AT END OF MATNR
ENDLOOP. " LOOP AT LT_MARD1
ENDIF. " IF SY-SUBRC EQ 0
ENDFORM. " FETCH_STOCK
&----
*& Form GOBACK_MONTH
&----
Get the last sixth month date
----
<--P_W_DATE Date
----
FORM GOBACK_MONTH CHANGING P_W_DATE TYPE SY-DATUM.
CALL FUNCTION 'CCM_GO_BACK_MONTHS'
EXPORTING
CURRDATE = SY-DATUM
BACKMONTHS = 5
IMPORTING
NEWDATE = P_W_DATE.
ENDFORM. " GOBACK_MONTH
&----
*& Form FETCH_USEDSTOCK
&----
Segregate the used stock monthly
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_USEDSTOCK .
Variables
DATA:
LV_MON2(6) TYPE C, " Second month
LV_MON3(6) TYPE C, " Third month
LV_MON4(6) TYPE C, " Fourth month
LV_MON5(6) TYPE C, " Fifth month
LV_MON6(6) TYPE C. " Sixth month
Internal tables
DATA:
BEGIN OF LFS_MITEM,
MATNR TYPE VBRP-MATNR, " Material
MATKL TYPE VBRP-MATKL, " Material Group
MONTH(6) TYPE C, " Month
FKIMG TYPE VBRP-FKIMG, " Usage
WAVWR TYPE VBRP-WAVWR, " Cost
NETWR TYPE VBRP-NETWR, " Sell Value
END OF LFS_MITEM,
LT_MITEM LIKE STANDARD TABLE OF LFS_MITEM.
Get Monthly stock usage
SORT T_ITEM BY MATNR MATKL FKDAT.
LOOP AT T_ITEM INTO FS_ITEM.
LFS_MITEM-FKIMG = LFS_MITEM-FKIMG + FS_ITEM-FKIMG.
LFS_MITEM-WAVWR = LFS_MITEM-WAVWR + FS_ITEM-WAVWR.
LFS_MITEM-NETWR = LFS_MITEM-NETWR + FS_ITEM-NETWR.
AT END OF FKDAT(6).
MOVE: FS_ITEM-MATNR TO LFS_MITEM-MATNR,
FS_ITEM-MATKL TO LFS_MITEM-MATKL,
FS_ITEM-FKDAT(6) TO LFS_MITEM-MONTH.
APPEND LFS_MITEM TO LT_MITEM.
CLEAR LFS_MITEM.
ENDAT. " AT END OF FKDAT.
ENDLOOP. " LOOP AT T_ITEM
SORT LT_MITEM BY MATNR MATKL MONTH.
Get last six months stock
PERFORM CLC_MONTH USING W_DATE
CHANGING LV_MON2
LV_MON3
LV_MON4
LV_MON5
LV_MON6.
Prepare Monthly data
LOOP AT LT_MITEM INTO LFS_MITEM.
IF LFS_MITEM-MONTH EQ W_DATE(6).
FS_FUSTOCK-MON1 = FS_FUSTOCK-MON1 + LFS_MITEM-FKIMG.
FS_FUSTOCK-SFKIMG = FS_FUSTOCK-SFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-YFKIMG = FS_FUSTOCK-YFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-SNETWR = FS_FUSTOCK-SNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-YNETWR = FS_FUSTOCK-YNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-SWAVWR = FS_FUSTOCK-SWAVWR + LFS_MITEM-WAVWR.
FS_FUSTOCK-YWAVWR = FS_FUSTOCK-YWAVWR + LFS_MITEM-WAVWR.
ELSEIF LFS_MITEM-MONTH EQ LV_MON2.
FS_FUSTOCK-MON2 = FS_FUSTOCK-MON2 + LFS_MITEM-FKIMG.
FS_FUSTOCK-SFKIMG = FS_FUSTOCK-SFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-YFKIMG = FS_FUSTOCK-YFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-SNETWR = FS_FUSTOCK-SNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-YNETWR = FS_FUSTOCK-YNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-SWAVWR = FS_FUSTOCK-SWAVWR + LFS_MITEM-WAVWR.
FS_FUSTOCK-YWAVWR = FS_FUSTOCK-YWAVWR + LFS_MITEM-WAVWR.
ELSEIF LFS_MITEM-MONTH EQ LV_MON3.
FS_FUSTOCK-MON3 = FS_FUSTOCK-MON3 + LFS_MITEM-FKIMG.
FS_FUSTOCK-SFKIMG = FS_FUSTOCK-SFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-YFKIMG = FS_FUSTOCK-YFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-SNETWR = FS_FUSTOCK-SNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-YNETWR = FS_FUSTOCK-YNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-SWAVWR = FS_FUSTOCK-SWAVWR + LFS_MITEM-WAVWR.
FS_FUSTOCK-YWAVWR = FS_FUSTOCK-YWAVWR + LFS_MITEM-WAVWR.
ELSEIF LFS_MITEM-MONTH EQ LV_MON4.
FS_FUSTOCK-MON4 = FS_FUSTOCK-MON4 + LFS_MITEM-FKIMG.
FS_FUSTOCK-SFKIMG = FS_FUSTOCK-SFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-YFKIMG = FS_FUSTOCK-YFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-SNETWR = FS_FUSTOCK-SNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-YNETWR = FS_FUSTOCK-YNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-SWAVWR = FS_FUSTOCK-SWAVWR + LFS_MITEM-WAVWR.
FS_FUSTOCK-YWAVWR = FS_FUSTOCK-YWAVWR + LFS_MITEM-WAVWR.
ELSEIF LFS_MITEM-MONTH EQ LV_MON5.
FS_FUSTOCK-MON5 = FS_FUSTOCK-MON5 + LFS_MITEM-FKIMG.
FS_FUSTOCK-SFKIMG = FS_FUSTOCK-SFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-YFKIMG = FS_FUSTOCK-YFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-SNETWR = FS_FUSTOCK-SNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-YNETWR = FS_FUSTOCK-YNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-SWAVWR = FS_FUSTOCK-SWAVWR + LFS_MITEM-WAVWR.
FS_FUSTOCK-YWAVWR = FS_FUSTOCK-YWAVWR + LFS_MITEM-WAVWR.
ELSEIF LFS_MITEM-MONTH EQ LV_MON6.
FS_FUSTOCK-MON6 = FS_FUSTOCK-MON6 + LFS_MITEM-FKIMG.
FS_FUSTOCK-SFKIMG = FS_FUSTOCK-SFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-YFKIMG = FS_FUSTOCK-YFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-SNETWR = FS_FUSTOCK-SNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-YNETWR = FS_FUSTOCK-YNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-SWAVWR = FS_FUSTOCK-SWAVWR + LFS_MITEM-WAVWR.
FS_FUSTOCK-YWAVWR = FS_FUSTOCK-YWAVWR + LFS_MITEM-WAVWR.
ELSE.
FS_FUSTOCK-YFKIMG = FS_FUSTOCK-YFKIMG + LFS_MITEM-FKIMG.
FS_FUSTOCK-YNETWR = FS_FUSTOCK-YNETWR + LFS_MITEM-NETWR.
FS_FUSTOCK-YWAVWR = FS_FUSTOCK-YWAVWR + LFS_MITEM-WAVWR.
ENDIF. " IF LFS_MITEM
AT END OF MATKL.
MOVE:LFS_MITEM-MATKL TO FS_FUSTOCK-MATKL,
LFS_MITEM-MATNR TO FS_FUSTOCK-MATNR.
APPEND FS_FUSTOCK TO T_FUSTOCK.
CLEAR FS_FUSTOCK.
ENDAT. " AT END OF MATNR
ENDLOOP. " LOOP AT LT_MITEM
ENDFORM. " FETCH_USEDSTOCK
&----
*& Form CLC_MONTH
&----
Calculate month values from last six month to current month
----
-->P_LV_DATUM Month
<--P_LV_MON2 Fifth month
<--P_LV_MON3 Fourth month
<--P_LV_MON4 Third month
<--P_LV_MON5 Second month
<--P_LV_MON6 Current month
----
FORM CLC_MONTH USING P_LV_DATUM TYPE SY-DATUM
CHANGING P_LV_MON2 TYPE C
P_LV_MON3 TYPE C
P_LV_MON4 TYPE C
P_LV_MON5 TYPE C
P_LV_MON6 TYPE C.
Local Variables
DATA: LV_MON(2) TYPE N, " Month
LV_YEAR(4) TYPE N. " Year
Constants
CONSTANTS:
LC_ONE(2) TYPE C VALUE '01', " One
LC_TWO(2) TYPE C VALUE '02', " Two
LC_THREE(2) TYPE C VALUE '03', " Three
LC_FOUR(2) TYPE C VALUE '04', " Four
LC_FIVE(2) TYPE C VALUE '05', " Five
LC_EONE(2) TYPE C VALUE '13', " Mon val
LC_ETWO(2) TYPE C VALUE '14', " Mon val
LC_ETHREE(2) TYPE C VALUE '15', " Mon val
LC_EFOUR(2) TYPE C VALUE '16', " Mon val
LC_EFIVE(2) TYPE C VALUE '17'. " Mon val
LV_MON = P_LV_DATUM+4(2) + LC_ONE.
LV_YEAR = P_LV_DATUM(4) + 1.
IF LV_MON = LC_EONE.
CONCATENATE LV_YEAR LC_ONE INTO P_LV_MON2.
ELSE.
CONCATENATE P_LV_DATUM(4) LV_MON INTO P_LV_MON2.
ENDIF. " IF LV_MON = 13
LV_MON = P_LV_DATUM+4(2) + LC_TWO.
IF LV_MON = LC_EONE.
CONCATENATE LV_YEAR LC_ONE INTO P_LV_MON3.
ELSEIF LV_MON = LC_ETWO.
CONCATENATE LV_YEAR LC_TWO INTO P_LV_MON3.
ELSE.
CONCATENATE P_LV_DATUM(4) LV_MON INTO P_LV_MON3.
ENDIF. " IF LV_MON = 14
LV_MON = P_LV_DATUM+4(2) + LC_THREE.
IF LV_MON = LC_EONE.
CONCATENATE LV_YEAR LC_ONE INTO P_LV_MON4.
ELSEIF LV_MON = LC_ETWO.
CONCATENATE LV_YEAR LC_TWO INTO P_LV_MON4.
ELSEIF LV_MON = LC_ETHREE.
CONCATENATE LV_YEAR LC_THREE INTO P_LV_MON4.
ELSE.
CONCATENATE P_LV_DATUM(4) LV_MON INTO P_LV_MON4.
ENDIF. " IF LV_MON = 15
LV_MON = P_LV_DATUM+4(2) + LC_FOUR.
IF LV_MON = LC_EONE.
CONCATENATE LV_YEAR LC_ONE INTO P_LV_MON5.
ELSEIF LV_MON = LC_ETWO.
CONCATENATE LV_YEAR LC_TWO INTO P_LV_MON5.
ELSEIF LV_MON = LC_ETHREE.
CONCATENATE LV_YEAR LC_THREE INTO P_LV_MON5.
ELSEIF LV_MON = LC_EFOUR.
CONCATENATE LV_YEAR LC_FOUR INTO P_LV_MON5.
ELSE.
CONCATENATE P_LV_DATUM(4) LV_MON INTO P_LV_MON5.
ENDIF. " IF LV_MON = 16
LV_MON = P_LV_DATUM+4(2) + LC_FIVE.
IF LV_MON = LC_EONE.
CONCATENATE LV_YEAR LC_ONE INTO P_LV_MON6.
ELSEIF LV_MON = LC_ETWO.
CONCATENATE LV_YEAR LC_TWO INTO P_LV_MON6.
ELSEIF LV_MON = LC_ETHREE.
CONCATENATE LV_YEAR LC_THREE INTO P_LV_MON6.
ELSEIF LV_MON = LC_EFOUR.
CONCATENATE LV_YEAR LC_FOUR INTO P_LV_MON6.
ELSEIF LV_MON = LC_EFIVE.
CONCATENATE LV_YEAR LC_FIVE INTO P_LV_MON6.
ELSE.
CONCATENATE P_LV_DATUM(4) LV_MON INTO P_LV_MON6.
ENDIF. " IF LV_MON = 17
ENDFORM. " CLC_MONTH
&----
*& Form FETCH_MONTHS
&----
Get the last six months from current date
----
There are no interface parameters to be passed to this routine
----
FORM FETCH_MONTHS .
DATA:
LV_MONTH(2) TYPE N, " Month
LV_YEAR(4) TYPE C, " Year
LV_TEMP TYPE I. " Rem
MOVE W_DATE+4(2) TO FS_MONTH-MONTH.
MOVE W_DATE(4) TO FS_MONTH-YEAR.
APPEND FS_MONTH TO T_MONTH.
LV_MONTH = W_DATE+4(2).
LV_YEAR = W_DATE(4).
DO 5 TIMES.
LV_MONTH = LV_MONTH + 1.
LV_TEMP = LV_MONTH MOD 12 .
IF LV_TEMP EQ 1.
MOVE '01' TO LV_MONTH.
LV_YEAR = LV_YEAR + 1.
ENDIF. " IF LV_TEMP EQ 1
MOVE LV_MONTH TO FS_MONTH-MONTH.
MOVE LV_YEAR TO FS_MONTH-YEAR.
APPEND FS_MONTH TO T_MONTH.
CLEAR FS_MONTH.
ENDDO. " DO 5 TIMES
IF T_MONTH[] IS NOT INITIAL.
SELECT MONUM " Month number
MONAM " Month name
FROM T015M
INTO TABLE T_MNAME
FOR ALL ENTRIES IN T_MONTH
WHERE MONUM EQ T_MONTH-MONTH
AND SPRAS EQ SY-LANGU.
IF SY-SUBRC EQ 0.
SORT T_MNAME BY MONTH.
ENDIF. " IF SY-SUBRC EQ 0
ENDIF. " IF T_MONTH[].
ENDFORM. " FETCH_MONTHS
&----
*& Form PREPARE_FINALDATA
&----
Prepare final data in the specified order to display on grid
----
There are no interface parameters to be passed to this routine
----
FORM PREPARE_FINALDATA .
SORT:T_SCODE BY MATNR,
T_PODAT BY MATNR,
T_KONP BY MATNR,
T_MARD BY MATNR,
T_FUSTOCK BY MATNR.
LOOP AT T_FUSTOCK INTO FS_FUSTOCK.
Get Used Stock
MOVE:
FS_FUSTOCK-MATNR TO FS_FINAL-MATNR,
FS_FUSTOCK-MATKL TO FS_FINAL-MATKL,
FS_FUSTOCK-MON1 TO FS_FINAL-MON1,
FS_FUSTOCK-MON2 TO FS_FINAL-MON2,
FS_FUSTOCK-MON3 TO FS_FINAL-MON3,
FS_FUSTOCK-MON4 TO FS_FINAL-MON4,
FS_FUSTOCK-MON5 TO FS_FINAL-MON5,
FS_FUSTOCK-MON6 TO FS_FINAL-MON6,
FS_FUSTOCK-SFKIMG TO FS_FINAL-SFKIMG,
FS_FUSTOCK-YFKIMG TO FS_FINAL-YFKIMG,
FS_FUSTOCK-SNETWR TO FS_FINAL-SNETWR,
FS_FUSTOCK-YNETWR TO FS_FINAL-YNETWR,
FS_FUSTOCK-SWAVWR TO FS_FINAL-SWAVWR,
FS_FUSTOCK-YWAVWR TO FS_FINAL-YWAVWR.
Read Material Data
READ TABLE T_MARA INTO FS_MARA WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE:FS_MARA-LVORM TO FS_FINAL-LVORM,
FS_MARA-PRDHA(5) TO FS_FINAL-PRDHA1,
FS_MARA-PRDHA+5(5) TO FS_FINAL-PRDHA2,
FS_MARA-KZUMW TO FS_FINAL-KZUMW.
IF FS_MARA-BSTME IS INITIAL.
MOVE FS_MARA-MEINS TO FS_FINAL-BSTME.
ELSE.
MOVE FS_MARA-BSTME TO FS_FINAL-BSTME.
ENDIF. " IF FS_MARA-BSTME
ENDIF. " IF SY_SUBRC EQ 0
Read Material Description
READ TABLE T_MAKT INTO FS_MAKT WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE FS_MAKT-MAKTX TO FS_FINAL-MAKTX.
ENDIF. " IF SY_SUBRC EQ 0
Read Sales data for Material
READ TABLE T_MVKE INTO FS_MVKE WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE:FS_MVKE-MTPOS TO FS_FINAL-MTPOS,
FS_MVKE-MVGR1 TO FS_FINAL-MVGR1,
FS_MVKE-MVGR2 TO FS_FINAL-MVGR2.
ENDIF. " IF SY_SUBRC EQ 0
Read MRP Controller
READ TABLE T_MARC INTO FS_MARC WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE FS_MARC-DISPO TO FS_FINAL-DISPO.
ENDIF. " IF SY_SUBRC EQ 0
Read Moving Avg Price
READ TABLE T_MBEW INTO FS_MBEW WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE FS_MBEW-VERPR TO FS_FINAL-VERPR.
ENDIF. " IF SY_SUBRC EQ 0
Read Product Supercession Code
READ TABLE T_SCODE INTO FS_SCODE WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE FS_SCODE-MATWA TO FS_FINAL-MATWA.
ENDIF. " IF SY_SUBRC EQ 0
Read Purchase Order Data
READ TABLE T_PODAT INTO FS_PODAT WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE: FS_PODAT-DATLB TO FS_FINAL-DATLB,
FS_PODAT-POOUT TO FS_FINAL-POOUT,
FS_PODAT-POQTY TO FS_FINAL-POQTY,
FS_PODAT-POCOST TO FS_FINAL-POCOST.
ENDIF. " IF SY_SUBRC EQ 0
Read Info Record
READ TABLE T_KONP INTO FS_KONP WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE: FS_KONP-LIFNR TO FS_FINAL-LIFNR,
FS_KONP-KBETR TO FS_FINAL-KBETR,
FS_KONP-KONWA TO FS_FINAL-KONWA.
ENDIF. " IF SY_SUBRC EQ 0
Read Min And Max Stocks
READ TABLE T_MARD INTO FS_MARD WITH KEY
MATNR = FS_FUSTOCK-MATNR BINARY SEARCH.
IF SY-SUBRC EQ 0.
MOVE: FS_MARD-MINQTY TO FS_FINAL-MINQTY,
FS_MARD-MAXQTY TO FS_FINAL-MAXQTY.
ENDIF. " IF SY_SUBRC EQ 0
APPEND FS_FINAL TO T_FINAL.
CLEAR:FS_FINAL,FS_MARD,FS_KONP,FS_PODAT,FS_SCODE,
FS_MBEW,FS_MARC,FS_MVKE,FS_MARA,FS_MAKT.
ENDLOOP. " LOOP AT T_FUSTOCK
REFRESH: T_CORP,T_SOLDTO,T_VBRK,T_VBFA,T_ITEM,T_TITEM,
T_MARA,T_MAKT,T_MVKE,T_MARC,T_SCODE,T_PODAT,T_KONP,
T_MARD,T_FUSTOCK.
ENDFORM. " PREPARE_FINALDATA
&----
*& Form PREPARE_FIELDCAT
&----
Prepare field catalog data for final table
----
There are no interface parameters to be passed to this routine
----
FORM PREPARE_FIELDCAT .
CONSTANTS:
LC_SEP(1) TYPE C VALUE '-'. " Separator
DATA:
LV_TEXT(7) TYPE C. " Text
Material
PERFORM BUILD_FIELD_CATALOG USING
'MATNR' TEXT-007 'T_FINAL' '' 'X' 'X'.
Desc
PERFORM BUILD_FIELD_CATALOG USING
'MAKTX' TEXT-008 'T_FINAL' '' '' ''.
Category
PERFORM BUILD_FIELD_CATALOG USING
'MTPOS' TEXT-009 'T_FINAL' '' '' ''.
Material Group
PERFORM BUILD_FIELD_CATALOG USING
'MATKL' TEXT-010 'T_FINAL' '' '' ''.
Product Heirarchy1
PERFORM BUILD_FIELD_CATALOG USING
'PRDHA1' TEXT-011 'T_FINAL' '' '' ''.
Product Heirarchy2
PERFORM BUILD_FIELD_CATALOG USING
'PRDHA2' TEXT-012 'T_FINAL' '' '' ''.
Environment
PERFORM BUILD_FIELD_CATALOG USING
'KZUMW' TEXT-013 'T_FINAL' '' '' ''.
Material Group1
PERFORM BUILD_FIELD_CATALOG USING
'MVGR1' TEXT-014 'T_FINAL' '' '' ''.
Material Group2
PERFORM BUILD_FIELD_CATALOG USING
'MVGR2' TEXT-015 'T_FINAL' '' '' ''.
MRP Controller
PERFORM BUILD_FIELD_CATALOG USING
'DISPO' TEXT-016 'T_FINAL' '' '' ''.
Purchase Unit
PERFORM BUILD_FIELD_CATALOG USING
'BSTME' TEXT-017 'T_FINAL' '' '' ''.
Cost Info
PERFORM BUILD_FIELD_CATALOG USING
'KBETR' TEXT-018 'T_FINAL' 'R' 'X' ''.
Currency
PERFORM BUILD_FIELD_CATALOG USING
'KONWA' TEXT-034 'T_FINAL' '' '' ''.
Moving Avg price
PERFORM BUILD_FIELD_CATALOG USING
'VERPR' TEXT-019 'T_FINAL' 'R' 'X' ''.
Current Vendor
PERFORM BUILD_FIELD_CATALOG USING
'LIFNR' TEXT-020 'T_FINAL' '' 'X' ''.
Months Data
LOOP AT T_MONTH INTO FS_MONTH.
CASE SY-TABIX.
WHEN 1.
READ TABLE T_MNAME INTO FS_MNAME WITH KEY
MONTH = FS_MONTH-MONTH.
Sixth Mon
IF SY-SUBRC EQ 0.
CONCATENATE FS_MNAME-TXT FS_MONTH-YEAR+2(2)
INTO LV_TEXT SEPARATED BY LC_SEP.
CLEAR FS_FLDCAT.
FS_FLDCAT-FIELDNAME = 'MON1'.
FS_FLDCAT-COLTEXT = LV_TEXT.
FS_FLDCAT-TABNAME = 'T_FINAL' .
FS_FLDCAT-JUST = 'R'.
FS_FLDCAT-NO_ZERO = 'X'.
FS_FLDCAT-KEY = SPACE.
APPEND FS_FLDCAT TO T_FLDCAT.
ENDIF. " IF SY-SUBRC EQ 0
WHEN 2.
READ TABLE T_MNAME INTO FS_MNAME WITH KEY
MONTH = FS_MONTH-MONTH.
Fifth Mon
IF SY-SUBRC EQ 0.
CONCATENATE FS_MNAME-TXT FS_MONTH-YEAR+2(2)
INTO LV_TEXT SEPARATED BY LC_SEP.
CLEAR FS_FLDCAT.
FS_FLDCAT-FIELDNAME = 'MON2'.
FS_FLDCAT-COLTEXT = LV_TEXT.
FS_FLDCAT-TABNAME = 'T_FINAL' .
FS_FLDCAT-JUST = 'R'.
FS_FLDCAT-NO_ZERO = 'X'.
FS_FLDCAT-KEY = SPACE.
APPEND FS_FLDCAT TO T_FLDCAT.
ENDIF. " IF SY-SUBRC EQ 0
WHEN 3.
READ TABLE T_MNAME INTO FS_MNAME WITH KEY
MONTH = FS_MONTH-MONTH.
Fourth Mon
IF SY-SUBRC EQ 0.
CONCATENATE FS_MNAME-TXT FS_MONTH-YEAR+2(2)
INTO LV_TEXT SEPARATED BY LC_SEP.
CLEAR FS_FLDCAT.
FS_FLDCAT-FIELDNAME = 'MON3'.
FS_FLDCAT-COLTEXT = LV_TEXT.
FS_FLDCAT-TABNAME = 'T_FINAL' .
FS_FLDCAT-JUST = 'R'.
FS_FLDCAT-NO_ZERO = 'X'.
FS_FLDCAT-KEY = SPACE.
APPEND FS_FLDCAT TO T_FLDCAT.
ENDIF. " IF SY-SUBRC EQ 0
WHEN 4.
READ TABLE T_MNAME INTO FS_MNAME WITH KEY
MONTH = FS_MONTH-MONTH.
Third Month
IF SY-SUBRC EQ 0.
CONCATENATE FS_MNAME-TXT FS_MONTH-YEAR+2(2)
INTO LV_TEXT SEPARATED BY LC_SEP.
CLEAR FS_FLDCAT.
FS_FLDCAT-FIELDNAME = 'MON4'.
FS_FLDCAT-COLTEXT = LV_TEXT.
FS_FLDCAT-TABNAME = 'T_FINAL' .
FS_FLDCAT-JUST = 'R'.
FS_FLDCAT-NO_ZERO = 'X'.
FS_FLDCAT-KEY = SPACE.
APPEND FS_FLDCAT TO T_FLDCAT.
ENDIF. " IF SY-SUBRC EQ 0
WHEN 5.
READ TABLE T_MNAME INTO FS_MNAME WITH KEY
MONTH = FS_MONTH-MONTH.
Second Mon
IF SY-SUBRC EQ 0.
CONCATENATE FS_MNAME-TXT FS_MONTH-YEAR+2(2)
INTO LV_TEXT SEPARATED BY LC_SEP.
CLEAR FS_FLDCAT.
FS_FLDCAT-FIELDNAME = 'MON5'.
FS_FLDCAT-COLTEXT = LV_TEXT.
FS_FLDCAT-TABNAME = 'T_FINAL' .
FS_FLDCAT-JUST = 'R'.
FS_FLDCAT-NO_ZERO = 'X'.
FS_FLDCAT-KEY = SPACE.
APPEND FS_FLDCAT TO T_FLDCAT.
ENDIF. " IF SY-SUBRC EQ 0
WHEN 6.
READ TABLE T_MNAME INTO FS_MNAME WITH KEY
MONTH = FS_MONTH-MONTH.
First Mon
IF SY-SUBRC EQ 0.
CONCATENATE FS_MNAME-TXT FS_MONTH-YEAR+2(2)
INTO LV_TEXT SEPARATED BY LC_SEP.
CLEAR FS_FLDCAT.
FS_FLDCAT-FIELDNAME = 'MON6'.
FS_FLDCAT-COLTEXT = LV_TEXT.
FS_FLDCAT-TABNAME = 'T_FINAL' .
FS_FLDCAT-JUST = 'R'.
FS_FLDCAT-NO_ZERO = 'X'.
FS_FLDCAT-KEY = SPACE.
APPEND FS_FLDCAT TO T_FLDCAT.
ENDIF. " IF SY-SUBRC EQ 0
ENDCASE. " CASE SY-TABIX
ENDLOOP. " LOOP AT T_MONTH
Six Months Usage
PERFORM BUILD_FIELD_CATALOG USING
'SFKIMG' TEXT-021 'T_FINAL' 'R' 'X' ''.
Six Months Cost
PERFORM BUILD_FIELD_CATALOG USING
'SWAVWR' TEXT-022 'T_FINAL' 'R' 'X' ''.
Six Months Net Value
PERFORM BUILD_FIELD_CATALOG USING
'SNETWR' TEXT-023 'T_FINAL' 'R' 'X' ''.
One Year Usage
PERFORM BUILD_FIELD_CATALOG USING
'YFKIMG' TEXT-024 'T_FINAL' 'R' 'X' ''.
One Year Cost
PERFORM BUILD_FIELD_CATALOG USING
'YWAVWR' TEXT-025 'T_FINAL' 'R' 'X' ''.
One Year Net Value
PERFORM BUILD_FIELD_CATALOG USING
'YNETWR' TEXT-026 'T_FINAL' 'R' 'X' ''.
Min Stock
PERFORM BUILD_FIELD_CATALOG USING
'MINQTY' TEXT-027 'T_FINAL' 'R' 'X' ''.
Max Stock
PERFORM BUILD_FIELD_CATALOG USING
'MAXQTY' TEXT-028 'T_FINAL' 'R' 'X' ''.
Product Supercession code
PERFORM BUILD_FIELD_CATALOG USING
'MATWA' TEXT-029 'T_FINAL' '' 'X' ''.
PO Date
PERFORM BUILD_FIELD_CATALOG USING
'DATLB' TEXT-030 'T_FINAL' '' '' ''.
PO Qty
PERFORM BUILD_FIELD_CATALOG USING
'POQTY' TEXT-031 'T_FINAL' 'R' 'X' ''.
PO Cost
PERFORM BUILD_FIELD_CATALOG USING
'POCOST' TEXT-032 'T_FINAL' 'R' 'X' ''.
PO Outstand
PERFORM BUILD_FIELD_CATALOG USING
'POOUT' TEXT-033 'T_FINAL' 'R' 'X' ''.
Deletion Flag
PERFORM BUILD_FIELD_CATALOG USING
'LVORM' TEXT-035 'T_FINAL' '' '' ''.
REFRESH: T_MONTH,T_MNAME.
ENDFORM. " PREPARE_FIELDCAT
" STATUS_0100
Regards,
Sankar
‎2007 Jul 30 11:29 AM
Hi,
You need to write the code at the event block
AT SELECTION-SCREEN ON VALUE REQUEST FOR plant_num.
Here you get the value for other fields and then assing them the data using SELECT query.
Or you can do this in AT SELECTION-SCREEN ON plant_num.
Or you can create search help which exports all these three fields and use this search help.
Regards,
Sesh
‎2007 Jul 30 11:56 AM
u can create search help option for the remaining fields for which u want data to be entered dynamically at ddic level giving base table name and
use this statement
selection screen on value request
if u want u can give f4 help for these fields also by calling function in at selection screen event.