Use of CS_BOM_EXPL_MAT_V2 fro BOM explosion on plant basis
hello ,
I dont have any documentation for this FM and need to use it for BOM explosion on plant basis plz let me knw how to use it?
Try something like this :
* Tables "call CS_BOM_EXPL_MAT_V2 "
DATA: BEGIN OF t_stb OCCURS 0.
INCLUDE STRUCTURE stpox.
DATA: END OF t_stb.
DATA: BEGIN OF matcat OCCURS 50.
INCLUDE STRUCTURE cscmat.
DATA: END OF matcat.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
auskz = ' '
capid = 'PP01'
datuv = sy-datum
emeng = '1.000'
stlan = '1'
stlal = mast-stlal
mtnrv = matnr
mehrs = 'X'
mmory = '1'
stpst = '0'
werks = werks
IMPORTING
topmat = selpool
dstst = dstst_flg
TABLES
stb = stb
matcat = matcat
EXCEPTIONS
material_not_found = 4
no_plant_data = 8
no_bom_found = 12
no_suitable_bom_found = 16.
Hope this helps,
Erwan
Similar Messages
-
Adding new items in ME21N using USEREXIT/BADI with BOM explosion
I have following business scenario. There is purchase requisition consisting just one material. In ME21N we are creating new purchase order. This purchase order needs to consist that item (we drag&drop this item from purchase requisition).
The problem is, that this item is in fact BOM, so we would like to explode it and select just some entries from them basing on some Z* configuration and we can't use standard BOM explosion from ME21N.
The idea to solve that issue is following:
1. Explode there BOM for material;
2. Filter out not needed items from that explosion using Z-config table;
3. Copy filtered items using USER-EXIT / BADI , ENHANCEMENT-SPOT into purchase order items.
The best, if this USER-EXIT / BADI, ENHANCEMENT-SPOT will be used only when drag&drop purchase requisition item into new purchase order.
The point is that I'm not able to find out such USER-EXIT, BADI or ENHANCEMENT-SPOT.
P.S. There is for instance exit "MM06E007 Change document for requisitions upon conversion into PO", but interface of that exit completely doesn't fit my needs.
Any ideas?Hello Tomasz Suchanek ,
There is no BADI/ Enhancement Spots / User Exits that you can use for this requirement.
You are trying to change the SAP standard Functionality.
You need to contact SAP for consulting .
Thanks,
Greetson -
What is the functionality of Bom explosion individual/collective in MRP 4 View
Hi Experts.Please give idea about what is the use of functionality of BOM explosion Individual/collective in MRP view 4.How this function will work in strategy 10 and 20.
thanks in advance.Hi,
This is a very generic question...If you explore in forum or net you will get lot of information...
This is normally used in make to order strategies like 20, 50 etc...
The individual/collective indicator in the material master record determines
whether a component is procured for a special customer requirement in the
individual segment.
The indicator "1" for individual requirements means that the material is being
specially manufactured or procured for a sales order. A special individual segment
is created for each requirement. An individual requirement is only created if the
higher-level material does not create a collective requirement.
The indicator "2" for collective requirements means that the material is produced
or procured for various requirements. You can find these requirements in the net
requirements segment.
The indicator "blank" means that the component is to be planned in the same way
as the higher-level assembly.
In the above example, two individual segments are created for the shaft for sales
orders A and B.
Thanks
Kumar -
BOM Explosion using Function 'CS_BOM_EXPL_MAT_V2 '
Hi Gurus,
I am working on BOM and exploding the multilevel BOM using function CS_BOM_EXPL_MAT_V2.
I want to know what does 'field-RNDKZ' do in that.
Thanks!Using Function module CS_BOM_EXPL_MAT_V2
As already has been said, the RNDKZ field is used for rounding. If you fill with '1', it will never round.
Example (the problem I had):
Material A consist of et al. 0.008 piece Material AA.
Material AA consist of 1.0 pice Material AAA,
of 7.0 piece Material AAB,
of 6.0 piece Material AAC,
of 12.0 piece Material AAD.
CASE 1: You fill RNDKZ field with '1':
You get the correct result which is:
You need for producing 1 piece of Material A
0.008 piece Material AA,
0.008 * 1 = 0.008 piece of Material AAA,
0.008 * 7.0 = 0,056 piece of Material AAB,
0.008 * 6.0 = 0,048 piece of Material AAC.
0.008 * 12.0 = 0,096 piece of Material AAD.
CASE 2: You let RNDKZ field blank.
In your user profile for BOM field "Round of" is set to blank (table field TCSPR-AMEKZ, TA S_ALR_87004496).
You get following result (which is wrong)
You need for producing 1 piece of Material A
1 piece Material AA,
1.0 *1.0 = 1.0 piece of Material AAA,
1.0 * 7.0 = 7.0 piece of Material AAB,
1.0 * 6.0 = 6.0 piece of Material AAC.
1.0 * 12.0 = 12.0 piece of Material AAD.
The number of decimals is seen depends as well from how many decimals is set for unit of measurement. In this case the number of decimals for "piece" was set to zero. (TA CUNI).
If you let the field RNDKZ field blank, the user profile field "Round of" (table field TCSPR-AMEKZ) is used. -
BOM explosion using CS_BOM_EXLP_MAT_V2.
Hi All,
i am using FM :- CS_BOM_EXLP_MAT_V2 for the BOM explosion, but the problem is when the material is exploid i get the component of that material according to the plant but the some component which i get have no more list component in the same plant,but that component have the list component in the other like with other component, so i am not able to list out how much deep i have to go in the hierarchy .
Thanks in advance.
Regards,
Ritesh JhaHi All,
i am using FM :- CS_BOM_EXLP_MAT_V2 for the BOM explosion, but the problem is when the material is exploid i get the component of that material according to the plant but the some component which i get have no more list component in the same plant,but that component have the list component in the other like with other component, so i am not able to list out how much deep i have to go in the hierarchy .
Thanks in advance.
Regards,
Ritesh Jha -
How to restrict other plant material assigned to SA BOM explosion
Dear Experts
One of our client havea issue of assigning wrong material to the scheduling agreement BOM explosion.
Actually there are two different plant code one for manufacturing plant and another one trading.Subcontractor activity will be carried out in trading plant , but users assigning the BOM components from manufacturing plant material.
So they are sending material to vendor from manufacturing plant and receiving material to trading plant.But finance guy don't want do like that.
How to restrict other material (material not part of SA plant)assignment to SA BOM explosion
Thanks in advance
Regards
SSThanks for your reply.
In BOM creation CS01 , if plant is differ from header to line item system will give error message M3 351
"Material &&&&&& not maintained in plant &&&&".
Like that i want to make it in ME38 BOM explosion also.If plant is differ from scheduling agreement line item to BOM line item system should give error message.
For the above scenario I need the solution
SS -
BOM Explosion (CS_BOM_EXPL_MAT_V2) - inactive alternative BOM
Hi,
I need to display the alternative BOM entered in the selection screen even if the entered alternative is inactive. i.e. status is inactive. i have used FM - CS_BOM_EXPL_MAT_V2.
Kindly advise.
Regards.Using Function module CS_BOM_EXPL_MAT_V2
As already has been said, the RNDKZ field is used for rounding. If you fill with '1', it will never round.
Example (the problem I had):
Material A consist of et al. 0.008 piece Material AA.
Material AA consist of 1.0 pice Material AAA,
of 7.0 piece Material AAB,
of 6.0 piece Material AAC,
of 12.0 piece Material AAD.
CASE 1: You fill RNDKZ field with '1':
You get the correct result which is:
You need for producing 1 piece of Material A
0.008 piece Material AA,
0.008 * 1 = 0.008 piece of Material AAA,
0.008 * 7.0 = 0,056 piece of Material AAB,
0.008 * 6.0 = 0,048 piece of Material AAC.
0.008 * 12.0 = 0,096 piece of Material AAD.
CASE 2: You let RNDKZ field blank.
In your user profile for BOM field "Round of" is set to blank (table field TCSPR-AMEKZ, TA S_ALR_87004496).
You get following result (which is wrong)
You need for producing 1 piece of Material A
1 piece Material AA,
1.0 *1.0 = 1.0 piece of Material AAA,
1.0 * 7.0 = 7.0 piece of Material AAB,
1.0 * 6.0 = 6.0 piece of Material AAC.
1.0 * 12.0 = 12.0 piece of Material AAD.
The number of decimals is seen depends as well from how many decimals is set for unit of measurement. In this case the number of decimals for "piece" was set to zero. (TA CUNI).
If you let the field RNDKZ field blank, the user profile field "Round of" (table field TCSPR-AMEKZ) is used. -
Hi Friends,
*Component Backflush + MFBF Functionality:*
Go to MFBF --> Select the radio button COMPONENT BACKFLUSH --> and click on
COMPONENT SCRAP (application toolbar).
Now select the radio button NO BOM EXPLOSION(manual comp. entry).
Enter the Material Number and Production Version.
Now click on PROCESS COMPONENT LIST (application toolbar).
Enter Material, Quantity, UOM, Storage Location, Reason Code and press ENTER.
By default the movement type will be '551'.
Now when you click on SAVE button on the top. It will give you a material
document number.
I have created a new FM according to the standard component backflush functionality and called the BAPI BAPI_REPMANCONF1_CREATE_MTS in my Z FM. But the functionality of the standard BAPI is not giving expected results.
I would appreciate if someone who had gone thru the same situaton could help me. I have done my research in different ways. But ended up finding none. Is there any other BAPI or procedure to achieve the above scenario.
Thanks.Hi Keshav,
Thanks for getting back to me.
Below is how I populated the data.
"I am not populating Backflush quantity and UOM because according to my
"standard MFBF functionality I have choose NO BOM EXPLOSION(manual comp. entry)
FLAGS-BCKFLTYPE = '12'.
FLAGS-COMPONENTS_TYPE = '1'.
GENDATA-POSTDATE = SY-DATUM.
GENDATA-DOCDATE = SY-DATUM.
GENDATA-MATERIALNR = MATERIAL.
GENDATA-PRODPLANT = PLANT.
GENDATA-PRODVERSION = VERSION.
"Z_IMPORT_TABLES is the custom structure which I have declared at TABLES in FM
"I_GOODS is of type BAPI2017_GM_ITEM_CREATE
LOOP AT Z_IMPORT_TABLES.
WA_GOODS-MATERIAL = Z_IMPORT_TABLES-MATERIAL.
WA_GOODS-PLANT = Z_IMPORT_TABLES-PLANT.
WA_GOODS-STGE_LOC = Z_IMPORT_TABLES-STGE_LOC.
WA_GOODS-MOVE_TYPE = Z_IMPORT_TABLES-MOVE_TYPE.
WA_GOODS-ENTRY_QNT = Z_IMPORT_TABLES-ENTRY_QNT.
WA_GOODS-ENTRY_UOM = Z_IMPORT_TABLES-ENTRY_UOM.
WA_GOODS-MOVE_REAS = Z_IMPORT_TABLES-MOVE_REAS.
APPEND WA_GOODS TO I_GOODS.
ENDLOOP.
CALL FUNCTION 'BAPI_REPMANCONF1_CREATE_MTS'
EXPORTING
BFLUSHFLAGS = FLAGS
BFLUSHDATAGEN = GENDATA
IMPORTING
CONFIRMATION = CONFIRMATION
RETURN = RETURN ---------> error in this parameter
TABLES
GOODSMOVEMENTS = I_GOODS.
When I execute this in debug mode, it is giving me an error in my RETURN parameter asking me to enter the backflush quantity and UOM which doesn't suits my scenario.
Appreciate if you could let me know where I am doing wrong in my code and guide me in a better way to achieve this.
Thanks. -
How to get STPOV structure values using BOM number and Plant number
hello All,
could you please help me out
'How to get STPOV structure values using BOM number and Plant number'
is there any function module where can i give input as bom and plant number .
waiting for your response.
regards
srinivasI did a quick where-used lookup in SE11 on the structure STPOV in function module interfaces and came up with the following:
Function Module Short Description
CK_F_TOTALCOST_COMPUTE
CS_ALT_SELECT_COUPLED_PRODUCT
CS_WHERE_USED_CLA Bills of material; class use
CS_WHERE_USED_CLA_ANY Bills of material; direct class use or via other class
CS_WHERE_USED_CLA_VIA_CLA Bills of material; class use via classes
CS_WHERE_USED_COP
CS_WHERE_USED_DOC Bills of material; document use
CS_WHERE_USED_DOC_ANY:Bills of material; direct and (indirectly) document use via
CS_WHERE_USED_DOC_VIA_CLA Bills of material; document use via classes
CS_WHERE_USED_KNO Bills of material; use object dependency
CS_WHERE_USED_MAT Bills of material; where-used list
CS_WHERE_USED_MAT_ANY:Bills of material; where-used list as article or class item
CS_WHERE_USED_MAT_VIA_CLA Bills of material; where-used list via classes
EXIT_SAPMC29M_001 BOM; Article Where-Used List
It appears that this structure is primarily used for where-used look-ups for components within the BOM. I don't know if any of these are what you're in need of.
Hope this helps,
Mark Schwendinger -
Routing details with bom explosion
hi friends
i have developend the report for pp,in routing details
how to get the details of bom explosion with workcenter and routing operations
If procurement type is E or X, system has to check the routing through CA03.
If procurement type if F, leave this field as blank and then fetch the relevant vendor
CS_BOM_EXPL_MAT_V2 - using this fm to get the bom explosion
after that how to relate between workcenter and routing details.
input is material number
plant
1.operator
2.material - i got through fm
3.material description i got through fm
4.workcenter
5.vendor
6.operation description
7.uom -i got through fm
8.qty - i got through fm
9.uom
10.setuptime
11.processingtime
12.deliverytime
code for review.
TABLES : MAST
DATA: BEGIN OF ISTPO OCCURS 1000.
INCLUDE STRUCTURE STPOX.
DATA: END OF ISTPO.
DATA: BEGIN OF MATCAT OCCURS 1000.
INCLUDE STRUCTURE CSCMAT.
DATA: END OF MATCAT.
DATA: W_TOPMAT LIKE CSTMAT.
SELECT-OPTIONS : P_MATNR FOR MAST-MATNR.
PARAMETERS : P_WERKS TYPE MAST-WERKS.
DATA : BEGIN OF ITAB OCCURS 0,
MATNR LIKE MAST-MATNR,
WERKS LIKE MAST-WERKS,
END OF ITAB.
DATA: IT_STB LIKE ISTPO OCCURS 0 WITH HEADER LINE.
data : istpotemp like stpox occurs 0 with header line.
data : istpofinal like stpox occurs 0 with header line.
START-OF-SELECTION.
CLEAR ISTPO. REFRESH ISTPO.
SELECT MATNR WERKS FROM MAST INTO TABLE ITAB
WHERE MATNR IN P_MATNR AND WERKS = P_WERKS.
LOOP AT ITAB.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
CAPID = 'PP01'
MEHRS = 'X'
MMAPS = ' '
MDMPS = ' '
BREMS = 'X'
DISMM = ' '
LIFNR = ' '
WEBAZ = ' '
DATUV = SY-DATUM
MTNRV = ITAB-MATNR
WERKS = P_WERKS
EMENG = '1'
STKKZ = ' '
FBSTP = ' '
FTREL = ' '
IMPORTING
TOPMAT = W_TOPMAT
TABLES
STB = ISTPO
MATCAT = MATCAT
EXCEPTIONS
ALT_NOT_FOUND = 1
CALL_INVALID = 2
MATERIAL_NOT_FOUND = 3
MISSING_AUTHORIZATION = 4
NO_BOM_FOUND = 5
NO_PLANT_DATA = 6
NO_SUITABLE_BOM_FOUND = 7
OTHERS = 8.
WRITE: / W_TOPMAT-MATNR UNDER TEXT-H00 COLOR COL_HEADING,
W_TOPMAT-MAKTX UNDER TEXT-H01 COLOR COL_HEADING.
sort istpo by index descending.
loop at istpo.
WRITE :/ ISTPO-POSNR,
ISTPO-IDNRK,
ISTPO-OJTXP,
ISTPO-MENGE,
ISTPO-MEINS,
endloop.
refresh istpo.
endloop.HI,
i got the workcenter also,but i need to classify
if the material procurment type is E OR X CHECK FOR routing details
or else if its F THEN pick the vendor and uom -PLPO-VGE01,PLPO-PLIFZ.
how shall i implement this
Regards
ds -
Hi All,
I am using one Function Module "CS_BOM_EXPL_MAT_V2" for multilevel BOM
explosion.
Input parameters for Function Module..
1. Finished Goods(Material)
2. Application.
3. Explosion Date
4.Plant
5.BOM Usage.
6. Alternate BOM.
Output we are intresetd in
1.MNGKO..Our assumption was this qty is the final actual qty .....which comes after multiplicatio at all level...
But in some case we find this qty as 0...
Can any one please help in understanding the standard FM ..
Tausif.Hi All,
I am using one Function Module "CS_BOM_EXPL_MAT_V2" for multilevel BOM
explosion.
Input parameters for Function Module..
1. Finished Goods(Material)
2. Application.
3. Explosion Date
4.Plant
5.BOM Usage.
6. Alternate BOM.
Output we are intresetd in
1.MNGKO..Our assumption was this qty is the final actual qty .....which comes after multiplicatio at all level...
But in some case we find this qty as 0...
Can any one please help in understanding the standard FM ..
Tausif. -
Hi,
For multilevel BOM explode I have to use the "Functional Module" CS_BOM_EXPL_MAT_V2. I checked it in system but I didnt understand which input parameters I need to give (Which are mandatory) as ther are lot of input fields available.
Please suggest whether this Functional Module is fine OR there is any other way? also suggest about the input field data.Dear
Function module CS_BOM_EXPL_MAT_V2 is used for BOM explosion for a given material. It belongs to function group CSS4 u2013 BOM explosions. This function module can explose multi-level BOM with a given validation date.
You need to specify necessary input parameters to call this function module, such as CAPID u2013 App ID, DATUV u2013 Validation date, MEHRS u2013 Multi-level, MTNRV u2013 Material number, STLAL u2013 alternate, STLAN u2013 BOM usage.
Some useful tables you can provide to your ABAPer and discuss the same .
TABLES: MARA, "Master Data
MAKT, "Matl Desc.
MARC, "Plant Data for Matl.
MAST, "Bom to material link
STKO, "Bom Header
STPO. "Bom Item
Refer : Multi-level BOM explosion using CS_BOM_EXPL_MAT_V2
Regards
JH
Edited by: Jiaul Haque on Jan 3, 2011 10:24 PM -
BOM Explosion for Multiple Process Orders
Hi,
I hope someone can assist me with the following: Is there a report I can run or transaction I can do to have BOM explosion for multiple Process Orders? I would like to input process orders for a week and see the BOM details per PO.
ThanksDear Sukendar,
1.For this requirement you have to go for a Z report and you can give the Functional Spec's to prepare
this report to your ABAP consultant.Prepare the input format,logic of the program and the output format.
In the logic part you can make use of this Functional Modules's CSAP_MAT_BOM_READ or
CSEP_MAT_BOM_READ or CS_BOM_EXPLOSION or CS_BOM_EXPL_MAT_V2 .
2.Using CEWB helps you to identify all the material that's having the BOM,but here the report does not
shows you the level by level by BOM for a FERT.
Check and revert back.
Regards
Mangalraj.S -
MRP RUN- KIT BOM explosion not working
We setup one layer BOM’s for our maintenance KITs as parent material and components as child material. For example KIT is TS10000-K1 and components are TS10001, TS10002 etc setup as next layer with in the BOM. Both KITS and components are defined as material types ERSA (Spare parts). These one layers BOMs are setup as production BOMs and expected to create purchase requisitions for KITS and components by exploding BOMs during MRP runs. We use purchase requisitions and convert them into POs to procure both KITS and components. We DO NOT USE Panned orders and Production orders.
The safety stocks / reorder point are considered as demand for KITS and components as we do not have any external demand for KITS and components.
MRP run is creating purchase requisitions automatically for both KITS and components as per safety stocks and reorder point defined in MRP Views of Material Master. This is working as expected.
The issue is: KIT BOM’s are not exploding to generate purchase requisitions for the dependent components of KIT BOM. Please suggest the way to resolve this issue.
Split valuation: Also we plan to use split valued KITS with both new and refurbished. So we need BOM explosion for split valued KITS
also (after the 1st issue is resolved).
I verified the following items to make sure the required configuration and data setup is defined correctly.
1) Planning file activated Plant - OMDU
2) Executed MRP run with Total Planning - MDBT and MD02 (single item, multiple levels)
3) BOM explosion for MRP activated- OS23
4) MRP type in MRP1 view- PD and VB (I tried both separately but BOM is not exploding).
5) Procurement type “F” (MRP 2 view) and lot size “EX”
6) Planning strategy in MRP 3 view (tested w/o planning strategy and with strategies 10 and 40. But BOM is not exploded)
7) BOM status and usage (status is active and usage is for production-CS02 and OS20)
8) BOM Validity date (Valid)
9) BOM structure in CS12 (BOM is exploding in CS11)
10) Availability check
11) Selection of BON ID to have BOM usage indicator assign (OS31).
12) No alternate BOMs or production versions or work scheduling view are used.
Please review the above 2 issues and suggest any workable solution. Thanks in advance!
NOTE: I extensively used MRP with multi-level BOM explosion in my earlier projects without any issue. However the above issue is a bit strange why one layer BOM is not exploded in this case.
Regards
SriniHi
Thanks for your response. I reviewed all SAP notes and none of them are applicable to my scenario.
1808396 - BOM changes not considered by MRP: I have not changed BOMs.
1781324 - MD11: Valid BOM alternative is not found. We do not have alternative BOMs.
1791009 - No BOM explosion after changing production version: We am not using production versions.
Our Material KITS are PM spare assemblies set up as BOMs and consists of individual spare parts as components. We are creating purchase requisitions and not planned orders. We are not using PP functionality/Production orders.
MRP is generating purchase requisitions for KITS and components as per ROP and safety stocks. In other words it is working as expected. The issue is BOMs which are parent assemblies are not exploding to the next lower level components.
Please note that I am not getting any error messages when MRP is executed.
Regards
Srini. -
How about this implementation of BOM Explosion(simulate stack)
REPORT YZWX00301_06 LINE-SIZE 142
LINE-COUNT 65
MESSAGE-ID YM1
NO STANDARD PAGE HEADING .
INCLUDE
INCLUDE: YXXI00050.
*TABLES use table define
TABLES: MARA, " Material General Table
MARC, " Plant Data for Material
MDMA, " MRP Area table
EORD, " Vendor table
A018, " Vendor material mapping table
KONP, " Vendor condition table
MAST, " Material BOM table
STPO, " Material BOM Component table
STAS. " Material BOM Component table detail
*CONSTANTS define
CONSTANTS:
C_DAT_X TYPE C VALUE 'X',
C_MODE LIKE dxfields-fileoper VALUE 'R',
C_MASK LIKE dxfields-filemask VALUE '.',
C_FLG_LOCATION TYPE C VALUE 'A',
C_DFPATH(15) TYPE C VALUE '\bmwx\'.
Work Area Define
---- build stack structure -
DATA: BEGIN OF WK_STACK,
LEVEL(1) TYPE C, "Save Level
QUANT TYPE I, "Save Quantity
END OF WK_STACK.
---- BOM work area -
DATA: BEGIN OF WK_BOM,
LEVEL(1) TYPE C, "BOM LEVEL
MATNR LIKE MARC-MATNR, "MATERIAL 18
POSTP LIKE STPO-POSTP, "ITEM CATEGORY 1
MENGE LIKE STPO-MENGE, "BOM COMPONENT 13
DATUV LIKE STPO-DATUV, "VALID FROM 10
DATUB LIKE STPO-DATUV, "VALID TO 10
END OF WK_BOM.
---- DATA work area -
DATA: BEGIN OF DATAITEM,
LEVEL(1) TYPE C, "BOM LEVEL
MATNR LIKE MARC-MATNR, "MATERIAL
POSTP LIKE STPO-POSTP, "ITEM CATEGORY
MENGE LIKE STPO-MENGE, "BOM COMPONENT
DATUV LIKE STPO-DATUV, "VALID FROM!!!
DATUB LIKE STPO-DATUV, "VALID TO
EKGRP LIKE MARC-EKGRP, "PURCHASE ORG
LIFNR LIKE EORD-LIFNR, "Vendor code 10
MARK(1) TYPE C, "Mark
KBETR LIKE KONP-KBETR, "Rate price 11
KONWA LIKE KONP-KONWA, "Currency 5
KPEIN LIKE KONP-KPEIN, "Unit Qty 5
KMEIN LIKE KONP-KMEIN, "Condition Unit 3
DATAB LIKE A018-DATAB, "Condition from 10
DATBI LIKE A018-DATBI, "Condition to 10
END OF DATAITEM.
---- File Line work area -
DATA: BEGIN OF LINE,
WERKS(4) TYPE C, "Plaint 4
MATNR(18) TYPE C, "Material Number 18
EKGRP(3) TYPE C, "Purchase Group 3
LIFNR(10) TYPE C, "Vendor code 10
VDATU LIKE EORD-VDATU, "Vendor valid from 10
BDATU LIKE EORD-BDATU, "Vendor valid to 10
MARK(1) TYPE C, "Mark
KSCHL(4) TYPE C, "Condition type 4
KBETR(18) TYPE C, "Rate price 11
KPEIN(5) TYPE C, "Rate unit 5
KONWA(5) TYPE C, "Currency 5
KMEIN(3) TYPE C, "Condition Unit 3
DATAB LIKE A018-DATAB, "Condition from 10
DATBI LIKE A018-DATBI, "Condition to 10
END OF LINE.
*Local Data Object Define
DATA: WK_CNT TYPE I, "Count variable
WK_LVL TYPE I, "BOM level
WK_QTY TYPE I. "BOM component qty
DATA: WK_LIFNR LIKE EORD-LIFNR,
WK_MATNR LIKE MARC-MATNR.
*Internal Table define
DATA TAB_STACK LIKE STANDARD TABLE OF WK_STACK. "STACK TABLE
DATA TAB_BOM LIKE STANDARD TABLE OF WK_BOM. "FOR BOM
DATA TAB_DATA LIKE STANDARD TABLE OF DATAITEM. "FOR ALL
Parameter in Block1
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME. "TITLE TEXT-001.
PARAMETERS:
P_WERKS LIKE MARC-WERKS DEFAULT 'WX01', "Plant
P_STLTY LIKE STPO-STLTY DEFAULT 'M', "BOM Category
P_MATNR LIKE MARC-MATNR OBLIGATORY, "Material
P_STDAT LIKE EORD-VDATU OBLIGATORY DEFAULT SY-DATUM. "Standard Date
SELECTION-SCREEN END OF BLOCK B1.
Parameter in Block2
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: P_SCREEN RADIOBUTTON GROUP R1. "Screen output
SELECTION-SCREEN COMMENT 03(21) TEXT-001.
SELECTION-SCREEN POSITION 32.
PARAMETERS: P_FILE RADIOBUTTON GROUP R1. "NTFILE output
SELECTION-SCREEN COMMENT 34(17) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.
Parameter in Block3
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME.
PARAMETERS:
P_NTFILE(45) TYPE C LOWER CASE OBLIGATORY.
P_PCFILE LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK B3.
INITIALIZATION
INITIALIZATION .
CLEAR : WK_CNT,
WK_LVL,
WK_QTY,
WK_MATNR,
WK_STACK,
WK_BOM,
DATAITEM.
WK_LVL = 0.
WK_QTY = 1.
REFRESH: TAB_STACK,
TAB_DATA,
TAB_BOM.
*& AT SELECTION-SCREE ON VALUE-REQUEST
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_NTFILE.
PERFORM F_SHOW_FILE_POPUP CHANGING P_NTFILE. "Popup display
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_PCFILE.
PERFORM F_FILENAME_GET USING P_PCFILE
CHANGING P_PCFILE.
*& Form F_FILENAME_GET
--> ST_DAT_PATH : Preset path
<-- ST_DAT_FILENAME : Selected file name
FORM F_FILENAME_GET USING st_dat_path
CHANGING st_dat_filename.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = SPACE
def_path = st_dat_path
mask = ',.,.,'
mode = '0'
title = 'TXT-file select'
IMPORTING
filename = st_dat_filename
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE s002(yf1) WITH 'F_FILENAME_GET' sy-subrc.
ENDIF.
ENDFORM. "F_FILENAME_GET
MAIN PROCESS
START-OF-SELECTION.
---- Check material -
PERFORM CHECK_PROD.
---- get vendor data -
PERFORM GET_VENDOR_DATA.
---- output screen/file -
IF P_SCREEN = 'X'.
PERFORM SET_OUTPUT. "Output to screen directly
ELSEIF P_FILE = 'X'.
IF P_PCFILE <> ''.
PERFORM DOWNLOAD_DATA. "Write data into ntfile
ELSE.
MESSAGE E007(00) WITH 'P_PCFILE'.
ENDIF.
ENDIF.
END-OF-SELECTION.
ULINE (142).
WRITE: /002 'Component Material Count:', WK_CNT.
TOP-OF-PAGE
TOP-OF-PAGE.
WRITE: /002 'Product:', 013 P_MATNR,
030 '****** BOM Price List ******',
070 SY-DATUM,
095 'PAGE:',
100 SY-PAGNO.
ULINE (142).
WRITE: /001 '|Level',
007 '|Material',
026 '|Cat',
030 '|Quantity',
044 '|From',
055 '|To',
066 '|PurG',
071 '|Vendor',
082 '|MK',
085 '|Price',
101 '|Crncy',
107 '|UnitQty',
115 '|Unit',
120 '|From',
131 '|To',
142 '|'.
ULINE (142).
*&FORM CHECK_PROD
text
-->p1 text
<--p2 text
FORM CHECK_PROD.
SELECT SINGLE * FROM MARC
WHERE WERKS = P_WERKS " Plant
AND MATNR = P_MATNR " Material
AND DISPR IN ('F100','F200'). " Product
IF SY-SUBRC = 0.
PERFORM CHECK_BOM1 USING MARC-MATNR MARC-WERKS. " CHECK_BOM1
ELSE.
MESSAGE E022.
ENDIF.
ENDFORM. " CHECK_PROD
*&FORM CHECK_BOM1
text
-->p1 text
<--p2 text
FORM CHECK_BOM1 USING VALUE(FP_MATNR) VALUE(FP_WERKS).
SELECT SINGLE * FROM MAST
WHERE MATNR = FP_MATNR AND "Material
WERKS = FP_WERKS. "Plant
IF SY-SUBRC = 0.
PERFORM PUSH_STACK USING WK_LVL WK_QTY. "Save parent attribute
PERFORM CHECK_BOM2 USING MAST-STLNR. "Check BOM2
ENDIF.
ENDFORM. "CHECK_BOM1
*&FORM CHECK_BOM2
text
-->p1 text
<--p2 text
FORM CHECK_BOM2 USING VALUE(FP_STLNR).
SELECT * FROM STPO
WHERE STLTY = P_STLTY AND "BOM category
STLNR = FP_STLNR. "BOM number
PERFORM POPOUT_WK. "Pop out to work area
WK_BOM-LEVEL = WK_LVL. "Current BOM level
WK_BOM-MATNR = STPO-IDNRK. "Material number
WK_BOM-POSTP = STPO-POSTP. "ITEM Category
WK_QTY = STPO-MENGE * WK_QTY. "For Stack
WK_BOM-MENGE = WK_QTY. "BOM Component qty
PERFORM CHECK_BOM3 USING STPO-STLTY STPO-STLNR STPO-STLKN.
PERFORM CHECK_BOM1 USING STPO-IDNRK P_WERKS.
ENDSELECT.
PERFORM POPOUT_STACK.
ENDFORM. "CHECK_BOM2
*&FORM CHECK_BOM3
text
-->p1 text
<--p2 text
FORM CHECK_BOM3 USING VALUE(FP_STLTY) VALUE(FP_STLNR) VALUE(FP_STLKN).
SELECT SINGLE * FROM STAS
WHERE STLTY = FP_STLTY "BOM category
AND STLNR = FP_STLNR "BOM number
AND STLKN = FP_STLKN "BOM item
AND DATUV <= P_STDAT "Valid from
AND LKENZ = ' ' . "Valid
IF SY-SUBRC = 0.
WK_BOM-DATUV = STAS-DATUV. "Valid from
ENDIF.
SELECT SINGLE * FROM STAS
WHERE STLTY = FP_STLTY "BOM category
AND STLNR = FP_STLNR "BOM number
AND STLKN = FP_STLKN "BOM item
AND DATUV > P_STDAT "Valid from
AND LKENZ = 'X' . "Invalid
IF SY-SUBRC = 0.
SELECT SINGLE * FROM STAS
WHERE STLTY = FP_STLTY "BOM category
AND STLNR = FP_STLNR "BOM number
AND STLKN = FP_STLKN "BOM item
AND DATUV > P_STDAT "Valid from
AND LKENZ = 'X' . "Invalid
IF SY-SUBRC = 0.
WK_BOM-DATUB = STAS-DATUV. "Valid to
APPEND WK_BOM TO TAB_BOM.
ENDIF.
ELSE.
WK_BOM-DATUB = '99991231'. "Manul input
APPEND WK_BOM TO TAB_BOM.
ENDIF.
ENDFORM. "CHECK_BOM3
*&FORM PUSH_STACK
text
-->p1 text
<--p2 text
FORM PUSH_STACK USING VALUE(FP_LVL) VALUE(FP_QTY).
WK_STACK-LEVEL = FP_LVL + 1.
WK_STACK-QUANT = FP_QTY.
APPEND WK_STACK TO TAB_STACK. "Push stack
SORT TAB_STACK BY LEVEL. "Sort table by level
ENDFORM. "PUSH_STACK
*&FORM PUSH_STACK
text
-->p1 text
<--p2 text
FORM POPOUT_STACK.
DESCRIBE TABLE TAB_STACK LINES WK_CNT.
IF WK_CNT > 0.
DELETE TAB_STACK INDEX WK_CNT. "Popout stack
SORT TAB_STACK BY LEVEL. "Sort table by level
ENDIF.
ENDFORM. "POPOUT_STACK
*&FORM POPOUT_WK
text
-->p1 text
<--p2 text
FORM POPOUT_WK.
DESCRIBE TABLE TAB_STACK LINES WK_CNT.
IF WK_CNT > 0.
READ TABLE TAB_STACK INTO WK_STACK INDEX WK_CNT. "Popout stack
IF SY-SUBRC = 0.
WK_LVL = WK_STACK-LEVEL. "Current Level
WK_QTY = WK_STACK-QUANT. "Parent Qty
ENDIF.
ENDIF.
ENDFORM. "POPOUT_WK
*&FORM DOWNLOAD_DATA
text
-->p1 text
<--p2 text
FORM DOWNLOAD_DATA.
DATA: L_RETURN TYPE SY-SUBRC.
PERFORM GUI_DOWNLOAD
TABLES
TAB_DATA
USING
P_PCFILE
'X'
CHANGING
L_RETURN.
IF L_RETURN <> 0.
MESSAGE S020.
ELSE.
MESSAGE S021.
ENDIF.
ENDFORM. " DOWNLOAD_DATA
*&FORM GET_VENDOR_DATA
text
-->p1 text
<--p2 text
FORM GET_VENDOR_DATA.
LOOP AT TAB_BOM INTO WK_BOM.
CLEAR DATAITEM.
SELECT * FROM MARC
WHERE WERKS = P_WERKS "Plant
AND MATNR = WK_BOM-MATNR. "Material
DATAITEM-EKGRP = MARC-EKGRP.
SELECT SINGLE * FROM MARA
WHERE MATNR = MARC-MATNR AND "Material number
MTART IN ('1211','1221').
IF SY-SUBRC = 0.
SELECT COUNT(*) FROM EORD
INTO (WK_CNT)
WHERE WERKS = P_WERKS AND "Plaint
MATNR = WK_BOM-MATNR AND "Material
VDATU <= P_STDAT AND "Valid-From
BDATU > P_STDAT. "Valid-To
IF WK_CNT > 1.
DATAITEM-MARK = '*'.
ELSEIF WK_CNT = 0.
MOVE-CORRESPONDING WK_BOM TO DATAITEM.
APPEND DATAITEM TO TAB_DATA.
ENDIF.
SELECT * FROM EORD
WHERE WERKS = P_WERKS AND "Plaint
MATNR = WK_BOM-MATNR AND "Material
VDATU <= P_STDAT AND "Valid-From
BDATU > P_STDAT. "Valid-To
MOVE-CORRESPONDING WK_BOM TO DATAITEM.
DATAITEM-LIFNR = EORD-LIFNR. "Vendor code
SELECT * FROM A018
WHERE LIFNR = EORD-LIFNR AND "Vendor code
MATNR = EORD-MATNR AND "Material
EKORG = EORD-EKORG AND "Purchase org
DATAB <= P_STDAT AND "Valid-from
DATBI > P_STDAT. "Valid-to
DATAITEM-DATAB = A018-DATAB. "Condition From
DATAITEM-DATBI = A018-DATBI. "Condition To
IF SY-SUBRC = 0.
SELECT * FROM KONP
WHERE KNUMH = A018-KNUMH AND "Cnd Number
KSCHL = A018-KSCHL AND "Cnd Type
KAPPL = A018-KAPPL. "Cnd Cat
DATAITEM-KBETR = KONP-KBETR. "Price
DATAITEM-KONWA = KONP-KONWA. "Currency
DATAITEM-KPEIN = KONP-KPEIN. "Price Unit
DATAITEM-KMEIN = KONP-KMEIN. "Unit of Material
APPEND DATAITEM TO TAB_DATA. "Append TAB_DATA
ENDSELECT.
ENDIF.
ENDSELECT.
ENDSELECT.
ELSE.
MOVE-CORRESPONDING WK_BOM TO DATAITEM.
APPEND DATAITEM TO TAB_DATA.
ENDIF.
ENDSELECT.
IF SY-SUBRC <> 0.
MOVE-CORRESPONDING WK_BOM TO DATAITEM.
APPEND DATAITEM TO TAB_DATA.
ENDIF.
ENDLOOP.
ENDFORM. "GET_DATA
*& Form SET_OUTPUT
text
--> p1 text
<-- p2 text
FORM SET_OUTPUT .
CLEAR WK_CNT.
LOOP AT TAB_DATA INTO DATAITEM.
WRITE: /001 '|', 002 DATAITEM-LEVEL, "Material Number
007 '|', 008 DATAITEM-MATNR, "Purchase Grp
026 '|', 027 DATAITEM-POSTP, "Item category
030 '|', 031 DATAITEM-MENGE, "BOM Component qty
044 '|', 045 DATAITEM-DATUV, "BOM valid from
055 '|', 056 DATAITEM-DATUB, "BOM valid to
066 '|', 067 DATAITEM-EKGRP, "Purchase Org
071 '|', 072 DATAITEM-LIFNR, "Vendor
082 '|', 083 DATAITEM-MARK, "Mark flag
085 '|', 086 DATAITEM-KBETR, "Price
101 '|', 102 DATAITEM-KONWA, "Currency
107 '|', 108 DATAITEM-KPEIN, "Unit Qty
115 '|', 116 DATAITEM-KMEIN, "Unit OM
120 '|', 121 DATAITEM-DATAB, "Cnd From
131 '|', 132 DATAITEM-DATBI, "Cnd To
142 '|'.
WK_CNT = WK_CNT + 1.
ENDLOOP.
ENDFORM. " SET_OUTPUTPrabhu Peram,
Thanks very much.
I want to show an idea of BOM explosion by constructing a stack.
BOM explosion uses first-root-searching and pushes the "root" material into stack.If the "root" has no left-child,pops out the "root" material and searchs the right-child....and completes the entire BOM explosion.
Message was edited by:
Mic chen
Message was edited by:
Mic chen
Maybe you are looking for
-
Display error messages in Visual Composer if Input Data is not valid
Hi, We developed a small iView with a single input field FO (Factory Order). The output is a table with some fields corresponding to the given FO. My requirement is if the given FO (Factory Order) has no data then the table should not be displayed, i
-
I am traveling to Japan next week and want to be able to use my iphone over there. Someone told me that the "roaming" or something needs to be changed...? I'm really not too sure what is required so my phone will work there so I can make and receive
-
SharePoint OOB Item level Permission under List Settings
Users & Roles: Authors: User with author role can create a new item but can only edit/delete their own items and not other user items. They should not modify or view the list settings(Permission level - Contribute) Editor: User with Editor role can c
-
HAving problem with this HP Desktop no video
Ok here is the computer that was purchased HP Debranded TS-0006P-AMDX605. It was bought from newegg, and here is the product page. http://www.neweggbusiness.com/Product/Product.aspx?Item=N82E16883148037 Operating system is windows 7 home premium 64b
-
Lightroom printing issue with print server
I have a DP-G310 print server set up. It works fine with every programme but Adobe Lightroom. When I click print after a while I get the message failed to print. All my other programmes print ok, IE Word, Wordpad, Indesign CS3, Photoshop CS3, Illustr