Code listing for: ZPROCESSORDVAR Description: Process Order Variance Report *&---------------------------------------------------------------------* * Report: : ZPROCESSORD * AUTHOR : Aveek Ghose * * SUPPLIER : * *======================================================================* * CHANGE HISTORY LOG * *----------------------------------------------------------------------* * MOD. NO.| DATE | NAME | CORRECTION NUMBER | CHANGE REFERENCE #* *----------------------------------------------------------------------* * MOD-001 |DD/MM/YYYY| XXXXXX | XXXXXXXXXX | XXXXXXXXX * * DESCRIPTION: * *----------------------------------------------------------------------* * MOD-002 |DD/MM/YYYY| XXXXXX | XXXXXXXXXX | XXXXXXXXX * * DESCRIPTION: * *----------------------------------------------------------------------* ****** Top Include for Declarations * include ZPROCESSORDTOP. *&---------------------------------------------------------------------* *& Include ZPROCESSORDTOP *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Include ZPROCESSORDTOP *&---------------------------------------------------------------------* REPORT ZPROCESSORD LINE-SIZE 125 MESSAGE-ID ZDEV. include: %LTsymbol%GT, %LTicon%GT, %LTline%GT, %LTctldef%GT, cnt4defs. type-pools: stree. DATA : wa_afko TYPE afko, " Order header data PP orders wa_cssl TYPE cssl. " Cost Center / Activity Type *---------------------Ranges ------------------------------------------* TYPES: BEGIN OF ty_r_bwart, sign TYPE char1, option TYPE char2, low TYPE bwart, high TYPE bwart, END OF ty_r_bwart. DATA: i_r_bwart TYPE STANDARD TABLE OF ty_r_bwart INITIAL SIZE 0, wa_bwart TYPE ty_r_bwart. TYPES : ty_stprs TYPE p LENGTH 8 DECIMALS 2, "MOD-101 * ty_stprs TYPE p LENGTH 8 DECIMALS 3, "MOD-101 ty_stprs1 TYPE p LENGTH 8 DECIMALS 2, "MOD-101 ty_menge TYPE p LENGTH 8 DECIMALS 6, "MOD-101 ty_vgwrt(9) TYPE p DECIMALS 3. "MOD-101 *-------------------Constants Declaration------------------------------* CONSTANTS: c_x TYPE char1 VALUE 'X', " Constant X c_objtyp TYPE cr_objty VALUE 'A', " Object Type c_txt_dlv TYPE char4 VALUE 'DLV', " Order Status Delivered c_txt_cnf TYPE char4 VALUE 'CNF', " Order status confirmed c_back TYPE syucomm VALUE 'BACK'," Back c_trde TYPE syucomm VALUE 'TRDE'," Order Details c_trpi TYPE syucomm VALUE 'TRPI'," Choose c_trsl TYPE syucomm VALUE 'TRSL'," Choose c_sums TYPE syucomm VALUE 'SUMS'," Summary Report c_qty TYPE syucomm VALUE 'QTY', " Quantities c_fisc TYPE syucomm VALUE 'FISC'," Fiscal Values c_kgm TYPE syucomm VALUE 'KGM', " KGM c_ordu TYPE syucomm VALUE 'ORDU'," Order UOM c_zero TYPE syucomm VALUE 'ZERO'," Zero Loss c_std TYPE syucomm VALUE 'STD', " Non Zero Loss c_sign TYPE char1 VALUE 'I', " Range Sign c_option TYPE char2 VALUE 'EQ', " Range Option c_movm_low_261 TYPE bwart VALUE '261', " Range-low value OF movement c_movm_low_262 TYPE bwart VALUE '262', " Range-low value OF movement c_movm_low_531 TYPE bwart VALUE '531', " Range-low value OF movement c_movm_low_532 TYPE bwart VALUE '532', " Range-low value OF movement c_tlevel_2 TYPE char2 VALUE '02', " Tree level c_plus TYPE char15 VALUE 'SYM_PLUS_FOLDER', c_minus TYPE char16 VALUE 'SYM_MINUS_FOLDER', c_text1 TYPE char14 VALUE 'NODELIST-TEXT1', c_trep TYPE syucomm VALUE 'TREP'," Expand subtree c_trcm TYPE syucomm VALUE 'TRCM'," Collapse subtree c_exit TYPE syucomm VALUE '&F15', "Exit c_101 TYPE bwart VALUE '101', "Movement type c_102 TYPE bwart VALUE '102', "Movement type c_teco TYPE char4 VALUE 'TECO', c_s TYPE shkzg VALUE 'S', "Debit/Credit Indicator c_0 TYPE char1 VALUE '0', c_100 TYPE int4 VALUE 100, c_perc TYPE char1 VALUE '%', c_brac TYPE char1 VALUE ')', *" BEGIN OF MOD-101 c_zeroval TYPE ty_vgwrt VALUE '0.000', c_detl TYPE syucomm VALUE 'DETL'," Detail Report c_phas TYPE syucomm VALUE 'PHAS'," Phase Report c_tlevel_3 TYPE char2 VALUE '03', " Tree level c_tlevel_4 TYPE char2 VALUE '04', " Tree level c_40 TYPE int4 VALUE 40, c_1 TYPE int4 VALUE 1, c_2 TYPE int4 VALUE 2, c_3 TYPE int4 VALUE 3, c_4 TYPE int4 VALUE 4, c_5 TYPE int4 VALUE 5, c_6 TYPE int4 VALUE 6, c_8 TYPE int4 VALUE 8, c_10 TYPE int4 VALUE 10, c_12 TYPE int4 VALUE 12, c_14 TYPE int4 VALUE 14, c_18 TYPE int4 VALUE 18, c_20 TYPE int4 VALUE 20, c_22 TYPE int4 VALUE 22, c_24 TYPE int4 VALUE 24, c_25 TYPE int4 VALUE 25, c_26 TYPE int4 VALUE 26, c_30 TYPE int4 VALUE 30, c_33 TYPE int4 VALUE 33, c_35 TYPE int4 VALUE 35, c_37 TYPE int4 VALUE 37, c_42 TYPE int4 VALUE 42, c_45 TYPE int4 VALUE 45, c_1_1 TYPE char3 VALUE '1_1', c_2_1 TYPE char3 VALUE '2_1', c_2_2 TYPE char3 VALUE '2_2', c_3_1 TYPE char3 VALUE '3_1', c_3_2 TYPE char3 VALUE '3_2', c_3_3 TYPE char3 VALUE '3_3', c_3_4 TYPE char3 VALUE '3_4', c_4_1 TYPE char3 VALUE '4_1', c_4_2 TYPE char3 VALUE '4_2', c_5_1 TYPE char3 VALUE '5_1', c_5_2 TYPE char3 VALUE '5_2', c_6_1 TYPE char3 VALUE '6_1', c_6_2 TYPE char3 VALUE '6_2', * c_1_1 TYPE char3 VALUE '1_1', * c_1 TYPE int4 VALUE 1, * c_40 TYPE int4 VALUE 40, * c_2_1 TYPE char3 VALUE '2_1', * c_3_1 TYPE char3 VALUE '3_1', * c_2 TYPE int4 VALUE 2, * c_22 TYPE int4 VALUE 22, * c_15 TYPE int4 VALUE 15, * c_25 TYPE int4 VALUE 25, * c_20 TYPE int4 VALUE 20, * c_3 TYPE int4 VALUE 3, * c_4 TYPE int4 VALUE 4, * c_2_2 TYPE char3 VALUE '2_2', * c_3_3 TYPE char3 VALUE '3_3', * c_3_4 TYPE char3 VALUE '3_4', * c_6_1 TYPE char3 VALUE '6_1', * c_3_2 TYPE char3 VALUE '3_2', * C_35 TYPE int4 VALUE 32, * C_36 TYPE int4 VALUE 36, * c_4_1 TYPE char3 VALUE '4_1', * c_18 TYPE int4 VALUE 18, * c_30 TYPE int4 VALUE 30, * c_35_1 TYPE int4 VALUE 35, * c_6 TYPE int4 VALUE 6, * c_19 TYPE int4 VALUE 19, * c_29 TYPE int4 VALUE 29, * c_21 TYPE int4 VALUE 21, * c_12 TYPE int4 VALUE 12, * c_33 TYPE int4 VALUE 30, "33, * c_37 TYPE int4 VALUE 37, * c_10 TYPE int4 VALUE 10, * c_42 TYPE int4 VALUE 42, * c_3_5 TYPE char3 VALUE '3_5', * c_45 TYPE int4 VALUE 45, * c_44 TYPE int4 VALUE 44, * c_3_6 TYPE char3 VALUE '3_6', * c_26 TYPE int4 VALUE 26, * c_5 TYPE int4 VALUE 5, *"END OF MOD-101 c_m TYPE char1 VALUE 'M', c_y TYPE char1 VALUE 'Y', c_hyp TYPE char1 VALUE '-', c_a TYPE char1 VALUE 'A', "Object type c_000 TYPE versn VALUE '000', "Version c_prog TYPE sycprog VALUE '/EUR/RGBPTR_PRO_ORDER_VARIANCE'. *-------------------Data Declaration-----------------------------------* DATA: v_waers TYPE waers, " Currency Key v_uom TYPE char5, v_msehi TYPE msehi VALUE 'SGL', v_werks TYPE werks_d, "#EC NEEDED v_output_text(60) TYPE c, v_plant_effic(3) TYPE n, v_dummy(4) TYPE c, " Dummy variable for Ord. Status flg_color(1) TYPE c, ***Begin of MOD-001 v_ucomm TYPE syucomm, v_ucomm1 TYPE syucomm, v_stat1 TYPE j_istat, v_stat2 TYPE j_istat, v_conv_rc TYPE char1, v_rep TYPE syucomm, v_oldf TYPE char3, v_newf TYPE char3, v_prs TYPE ty_stprs1, ****End of MOD-001 ****mod-03. v_meins TYPE msehi. "to store c_kgm value. ****mod-03. *------------------- Types Declaration --------------------------------* TYPES: * Type for Work Center Header BEGIN OF ty_crhd, objid TYPE cr_objid, " Object ID of the resource arbpl TYPE arbpl, " Work center vgwts TYPE vorgschl, " Std. Value Key "MOD-101 END OF ty_crhd, * Type for Cost Center Master Data BEGIN OF ty_csks, kokrs TYPE kokrs, " Controlling Area kostl TYPE kostl, " Cost Center END OF ty_csks, * Type for Assignment of Work Center to Cost Center BEGIN OF ty_crco, objty TYPE cr_objty, objid TYPE cr_objid, kokrs TYPE kokrs, kostl TYPE kostl, lstar TYPE lstar, "MOD-101 END OF ty_crco, * Type for process order with order status text BEGIN OF ty_order_status_text, aufnr TYPE aufnr, sttxt(100) TYPE c, END OF ty_order_status_text, * Type for Order status texts BEGIN OF ty_tj02t, istat TYPE j_istat, " Status number " MOD-101+ txt04 TYPE j_txt04, END OF ty_tj02t, * Type for plant Materials BEGIN OF ty_marc, matnr TYPE matnr, werks TYPE werks_d, kausf TYPE kausf, END OF ty_marc, *" BEGIN OF MOD-101 * Type for Orders BEGIN OF ty_orders, aufnr TYPE aufnr, " Order Number werks TYPE werks_d, " Plant kokrs TYPE kokrs, " Controlling Area objnr TYPE j_objnr, " Object number gltrp TYPE sydatum, " Date gstrp TYPE co_gstrp, " Basic start Date rsnum TYPE rsnum, " Reservation number gamng TYPE gamng, " Total order quantity gmein TYPE meins, " order uom plnbez TYPE matnr, " Material Number plnty TYPE plnty, " Task list type plnnr TYPE plnnr, " Key for task list group plnal TYPE plnal, " Group counter stlst TYPE stlst, " BOM Status stlty TYPE stlty, " BOM category stlnr TYPE stnum, " Bill of material sdatv TYPE datuv, " Valid-From Date stlal TYPE stalt, " Alternative BOM stlan TYPE stlan, " BOM Usage aufpl TYPE co_aufpl, " Routing no for operations in order zaehl TYPE cim_count, " Internal counter rueck TYPE co_rueck, " Confirmation number of operation auart TYPE aufart, " Order Type ** Begin of change on 31-05-2005 aufld TYPE co_aufld, " Date of BOM Explosion/Routing Transfer ** End of change on 31-05-2005 capid TYPE capid, " BOM Application menge TYPE menge_d, " Quantity erfmg TYPE erfmg, " Quantity lmnga TYPE ru_lmnga, " Yield currently to be confirmed maktx TYPE maktx, " Material Description bmeng TYPE basmn, " Base Quantity bmein TYPE basme, " Base unit of measure for BOM kausf TYPE kausf, " Component scrap in percent * Qty in base UoM blmnga TYPE ru_lmnga, " Yield currently to be confirmed bmenge TYPE menge_d, " GR Quantity bgamng TYPE gamng, " Total Order Qty bbmeng TYPE basmn, " Base Quantity in Base UoM * UoM gruom TYPE meins, " gr uom cfuom TYPE meins, " conf uom bsuom TYPE meins, " base uom gewei TYPE gewei, " weight uom ntgew TYPE ntgew, del, END OF ty_orders, * Type for BOM Appln BEGIN OF ty_bomapp, werks TYPE werks_d, " Plant auart TYPE aufart, " Order Type capid TYPE capid, " BOM Appln END OF ty_bomapp, * Type for Operation within an order BEGIN OF ty_afvc, aufpl TYPE co_aufpl, aplzl TYPE co_aplzl, ltxa1 TYPE ltxa1, plnkn TYPE plnkn, plnty TYPE plnty, plnnr TYPE plnnr, zaehl TYPE cim_count, vornr TYPE vornr, steus TYPE steus, arbid TYPE cr_objid, rueck TYPE co_rueck, phflg TYPE phflg, sumnr TYPE sumkntnr, vgwts TYPE vorgschl, lar01 TYPE lstar, lar02 TYPE lstar, lar03 TYPE lstar, lar04 TYPE lstar, lar05 TYPE lstar, lar06 TYPE lstar, aufnr TYPE aufnr, lmnga TYPE lmnga, cfuom TYPE meins, gmein TYPE meins, END OF ty_afvc, * Type for quantities/dates/values in the operations BEGIN OF ty_afvv, aufpl TYPE co_aufpl, " Routing number of operations in the order aplzl TYPE co_aplzl, " General counter for order meinh TYPE vorme, " Activity unit of measure bmsch TYPE bmsch, " Base Quantity umren TYPE cp_umren, umrez TYPE cp_umrez, vge01 TYPE vgwrteh, " Unit of measure for the standard value vgw01 TYPE vgwrt, " Standard value vge02 TYPE vgwrteh, " Unit of measure for the standard value vgw02 TYPE vgwrt, " Standard value vge03 TYPE vgwrteh, " Unit of measure for the standard value vgw03 TYPE vgwrt, " Standard value vge04 TYPE vgwrteh, " Unit of measure for the standard value vgw04 TYPE vgwrt, " Standard value vge05 TYPE vgwrteh, " Unit of measure for the standard value vgw05 TYPE vgwrt, " Standard value vge06 TYPE vgwrteh, " Unit of measure for the standard value vgw06 TYPE vgwrt, " Standard value mgvrg TYPE mgvrg, " Operation Quantity lmnga TYPE lmnga, " Total Yield Confirmed gmnga TYPE gmnga, " Yield Confirmed in order UoM ism01 TYPE co_rumng, " Previously confirmed activity ism02 TYPE co_rumng, " Previously confirmed activity ism03 TYPE co_rumng, " Previously confirmed activity ism04 TYPE co_rumng, " Previously confirmed activity ism05 TYPE co_rumng, " Previously confirmed activity ism06 TYPE co_rumng, " Previously confirmed activity ssavd TYPE ssavd, " Latest scheduled start: Execution (date) gamng TYPE gamng, bbmsch TYPE bmsch, prduom TYPE meins, bsuom TYPE vorme, END OF ty_afvv, * Type for Document Segment: Material BEGIN OF ty_mseg, aufnr TYPE aufnr, aufpl TYPE co_aufpl, aplzl TYPE co_aplzl, matnr TYPE matnr, mblnr TYPE mblnr, mjahr TYPE mjahr, zeile TYPE mblpo, bwart TYPE bwart, werks TYPE werks_d, lgort TYPE lgort_d, charg TYPE charg_d, menge TYPE menge_d, meins TYPE meins, erfmg TYPE erfmg, erfme TYPE erfme, rsnum TYPE rsnum, rspos TYPE rspos, rsart TYPE rsart, bmenge TYPE menge_d, bmeins TYPE meins, gewei TYPE gewei, ntgew TYPE ntgew, END OF ty_mseg, * Type for Document Segment: Material - Sum of Qtys BEGIN OF ty_mseg_sum, aufnr TYPE aufnr, aufpl TYPE co_aufpl, aplzl TYPE co_aplzl, matnr TYPE matnr, meins TYPE meins, erfmg TYPE erfmg, erfmg1 TYPE erfmg, erfmg2 TYPE erfmg, erfmg5 TYPE erfmg, erfme TYPE erfme, bmenge TYPE menge_d, bmenge1 TYPE menge_d, bmenge2 TYPE menge_d, bmenge5 TYPE menge_d, bmeins TYPE meins, gewei TYPE gewei, bwart TYPE bwart, "23-06-2005 END OF ty_mseg_sum, * Type for Order completion confirmations BEGIN OF ty_afru, aufnr TYPE aufnr, rueck TYPE co_rueck, gmnga TYPE ru_gmnga, lmnga TYPE ru_lmnga, gmein TYPE meins, meinh TYPE ru_vorme, meilr TYPE meilr, stokz TYPE co_stokz, rueck_mst TYPE co_rueck, aufpl TYPE co_aufpl, aplzl TYPE co_aplzl, END OF ty_afru, * Type for Reservation/dependent requirements BEGIN OF ty_resb, rsnum TYPE rsnum, rspos TYPE rspos, rsart TYPE rsart, xloek TYPE xloek, matnr TYPE matnr, werks TYPE werks_d, bdmng TYPE bdmng, meins TYPE meins, shkzg TYPE shkzg, aufnr TYPE aufnr, dumps TYPE dumps, aufpl TYPE co_aufpl, vornr TYPE vornr, aplzl TYPE co_aplzl, postp TYPE postp, kzkup TYPE kzkup, rgekz TYPE rgekz, ausch TYPE cs_e_ausch, stlty TYPE stlty, stlnr TYPE stnum, stlkn TYPE stlkn, stpoz TYPE cim_count, bwart TYPE bwart, "Neel 30/06/2005 bbdmng TYPE bdmng, bmeins TYPE meins, flagp TYPE char1, " MOD-GT1+ END OF ty_resb, * Individual materials for production order. BEGIN OF ty_ordmats, aufnr TYPE aufnr, " Order number aufpl TYPE co_aufpl, aplzl TYPE co_aplzl, matnr TYPE matnr, " Component material mtart TYPE mtart, " material type stufe TYPE histu, *%GT%GTNEEL 4/6/2005 wegxx TYPE cs_e_vwegx, ttidx TYPE ttidx, vwegx TYPE wegxx, *%LT%LTNEEL 4/6/2005 ojtxb TYPE ojtxb, " parent object text ojtxp TYPE ojtxp, " object text menge TYPE menge_d, " component qty menges TYPE menge_d, " component qty with scrap mengez TYPE menge_d, " component qty with zero loss meins TYPE meins, " component uom xmeng TYPE cs_e_xbmng, " BoM Base Qty (Next Level) xmengs TYPE cs_e_xbmng, " BoM Base Qty (Next Level) w scrap xmengz TYPE cs_e_xbmng, " BoM Base Qty (Next Level) w zero loss xmein TYPE cs_e_xbmen, " BoM Base UoM (Next Level) mnglg TYPE cs_e_mnglg, " Calc. Comp. Qty in Base UoM mnglgs TYPE cs_e_mnglg, " Calc.Comp.Qty in Base UoM w scrap mnglgz TYPE cs_e_mnglg, " Calc.Comp.Qty in Base UoM w zero loss mmein TYPE meins, " base UoM stprs TYPE stprs, " std price peinh TYPE peinh, " price unit postp TYPE postp, " Item category ( BOM ) msign TYPE cs_e_msign, " +/- sign rgekz TYPE rgekz, " back flush indicator ausch TYPE cs_e_ausch, " component scrap kausf TYPE cs_e_kausf, " component scrap % * yyzero TYPE /glb/rgtpt_yyzero, " Zero loss conversion factor bom TYPE char1, bomd TYPE char1, byprod TYPE char1, " by product indicator stlty TYPE stlty, stlnr TYPE stnum, stlkn TYPE stlkn, stpoz TYPE cim_count, END OF ty_ordmats, * Type for Material Production unit BEGIN OF ty_marc1, matnr TYPE matnr, werks TYPE werks_d, frtme TYPE frtme, END OF ty_marc1, * Type for Material Production unit BEGIN OF ty_mara, matnr TYPE matnr, mtart TYPE mtart, meins TYPE meins, gewei TYPE gewei, ntgew TYPE ntgew, END OF ty_mara, * Type for parameter ID BEGIN OF ty_param, vgwts TYPE vorgschl, par01 TYPE paramid, par02 TYPE paramid, par03 TYPE paramid, par04 TYPE paramid, par05 TYPE paramid, par06 TYPE paramid, END OF ty_param, * Type for keyword for parameter ID BEGIN OF ty_param_key, parid TYPE paramid, txtlg TYPE paraltxt, END OF ty_param_key, BEGIN OF ty_mbew1, matnr TYPE matnr, bwkey TYPE bwkey, stprs TYPE stprs, peinh TYPE peinh, END OF ty_mbew1, BEGIN OF ty_hier_order, aufnr TYPE aufnr, " Order number * Dates gltrp TYPE sydatum, gstrp TYPE sydatum, * Material plnbez TYPE matnr, " Material Number maktx TYPE maktx, " Material desc * Bottleneck Resource botlnck TYPE arbpl, " bottleneck resorc resdesc TYPE ktext, " resorc desc * Efficiencies el_effc TYPE vgwrt, " expected line effic ac_effc TYPE vgwrt, " actual line effic * Qty prdqty TYPE gamng, " PO qty displayed prduom TYPE meins, " PO UoM displayed bprdqty TYPE gamng, lmnga TYPE ru_lmnga, " Yield currently to be confirmed menge TYPE menge_d, " GR Quantity erfmg TYPE erfmg, " GR Quantity gamng TYPE gamng, " Total Order Qty bmeng TYPE basmn, " Base Quantity in BOM * Qty in base UoM blmnga TYPE ru_lmnga, " Yield currently to be confirmed bmenge TYPE menge_d, " GR Quantity bgamng TYPE gamng, " Total Order Qty bbmeng TYPE basmn, " Base Quantity in Base UoM * Std price cstprs TYPE stprs, " Calc Price stprs TYPE stprs, " Std Price peinh TYPE peinh, " Price unit * UoM gruom TYPE meins, " gr uom cfuom TYPE meins, " conf uom bsuom TYPE meins, " base uom frtme TYPE frtme, " production unit gewei TYPE gewei, " weight uom ntgew TYPE ntgew, END OF ty_hier_order, BEGIN OF ty_hier_phase, aufnr TYPE aufnr, aufpl TYPE co_aufpl, aplzl TYPE co_aplzl, vornr TYPE vornr, ltxa1 TYPE ltxa1, steus TYPE steus, rueck TYPE co_rueck, arbid TYPE arbid, arbpl TYPE arbpl, ktext TYPE cr_ktext, el_effc TYPE vgwrt, ac_effc TYPE vgwrt, vgwts TYPE vorgschl, lmnga TYPE lmnga, gmnga TYPE gmnga, blmnga TYPE lmnga, bgmnga TYPE gmnga, prdqty TYPE gamng, prduom TYPE meins, bprdqty TYPE gamng, cfuom TYPE meins, bsuom TYPE meins, gewei TYPE gewei, ntgew TYPE ntgew, runtime, END OF ty_hier_phase, BEGIN OF ty_hier_act, aufnr TYPE aufnr, parxx TYPE paramid, aufpl TYPE co_aufpl, aplzl TYPE co_aplzl, vornr TYPE vornr, vgwts TYPE vorgschl, mgvrg TYPE mgvrg, bmsch TYPE bmsch, meinh TYPE vorme, bmgvrg TYPE mgvrg, bbmsch TYPE bmsch, bmeinh TYPE vorme, txtxx TYPE paraltxt, * actual usage ismxx TYPE ru_ismng, ilexx TYPE co_ismngeh, * std usage vgexx TYPE vgwrteh, vgwxx TYPE ty_vgwrt, tkgxx TYPE tkgxxx, tkexx TYPE tkexxx, togxx TYPE togxxx, toexx TYPE toexxx, actu TYPE ty_stprs, stdu TYPE ty_stprs, varu TYPE ty_stprs, stdvar TYPE ty_vgwrt, varper TYPE co_rumng, cstprs TYPE stprs, stprs TYPE stprs, peinh TYPE peinh, END OF ty_hier_act, BEGIN OF ty_hier_mat, aufnr TYPE aufnr, matnr TYPE matnr, byprod TYPE char1, aufpl TYPE co_aufpl, aplzl TYPE co_aplzl, vornr TYPE vornr, maktx TYPE maktx, actusg TYPE menge_d, stdusg TYPE menge_d, stdusgs TYPE menge_d, stdusgz TYPE menge_d, stdvar TYPE menge_d, varper TYPE menge_d, kausf TYPE kausf, * yyzero TYPE /glb/rgtpt_yyzero, bsuom TYPE meins, gruom TYPE meins, gewei TYPE gewei, ntgew TYPE ntgew, bomuom TYPE meins, cstprs TYPE stprs, vstprs TYPE ty_stprs, stprs TYPE stprs, peinh TYPE peinh, sumi TYPE char1, bwart TYPE bwart, "23-05-2005 END OF ty_hier_mat, BEGIN OF ty_hier_act_sum, parxx TYPE paramid, txtxx TYPE paraltxt, ismxx TYPE ru_ismng, ilexx TYPE co_ismngeh, vgexx TYPE vgwrteh, vgwxx TYPE ty_vgwrt, actu TYPE ty_stprs, stdu TYPE ty_stprs, varu TYPE ty_stprs, stdvar TYPE ty_vgwrt, varper TYPE co_rumng, END OF ty_hier_act_sum, BEGIN OF ty_hier_mat_sum, matnr TYPE matnr, maktx TYPE maktx, actusg TYPE menge_d, actuom TYPE meins, stdusg TYPE menge_d, stduom TYPE meins, stdvar TYPE menge_d, varuom TYPE meins, astprs TYPE ty_stprs, sstprs TYPE ty_stprs, varprs TYPE ty_stprs, varper TYPE menge_d, END OF ty_hier_mat_sum, * Type for Order confirmations BEGIN OF ty_ord_conf, rueck TYPE co_rueck, rmzhl TYPE co_rmzhl, ism01 TYPE ru_ismng, ile01 TYPE co_ismngeh, ism02 TYPE ru_ismng, ile02 TYPE co_ismngeh, ism03 TYPE ru_ismng, ile03 TYPE co_ismngeh, ism04 TYPE ru_ismng, ile04 TYPE co_ismngeh, ism05 TYPE ru_ismng, ile05 TYPE co_ismngeh, ism06 TYPE ru_ismng, ile06 TYPE co_ismngeh, stokz TYPE co_stokz, END OF ty_ord_conf, * Type for Parameters BEGIN OF ty_par, parxx TYPE paramid, END OF ty_par, * Type for selection parameters for reading PLPO BEGIN OF ty_plpo_sel, plnty TYPE plnty, plnnr TYPE plnnr, plnkn TYPE plnkn, zaehl TYPE cim_count, END OF ty_plpo_sel, * Type for selection parameters for reading AFRU BEGIN OF ty_afru_sel, rueck TYPE co_rueck, END OF ty_afru_sel, * Type for Control Keys BEGIN OF ty_ckey, plnaw TYPE plnaw, steus TYPE steus, kalkz TYPE ck_kalkz, END OF ty_ckey, * Type for object statuses BEGIN OF ty_obj_stat, objnr TYPE j_objnr, " Object number stat TYPE j_istat, " Status number END OF ty_obj_stat, ty_t_stb TYPE STANDARD TABLE OF stpox WITH NON-UNIQUE DEFAULT KEY, * Type for BOM data, BEGIN OF ty_bomdat, capid TYPE capid, " BOM Application datuv TYPE datuv, " Valid-From Date mtnrv TYPE matnr, " Material stlal TYPE stalt, " Alternative BOM stlan TYPE stlan, " BOM Usage werks TYPE werks_d, " Plant tmat TYPE cstmat, stb TYPE ty_t_stb, END OF ty_bomdat, ty_t_bomdat TYPE SORTED TABLE OF ty_bomdat WITH UNIQUE KEY capid datuv mtnrv stlal stlan werks, ** Type for Orders * BEGIN OF ty_orders, * aufnr TYPE aufnr, " Order Number * werks TYPE werks_d, " Plant * kokrs TYPE kokrs, " Controlling Area * objnr TYPE j_objnr, " Object number * gltrp TYPE sydatum, " Date * rsnum TYPE rsnum, " Reservation number * gamng TYPE gamng, " Total order quantity * gmein TYPE meins, " order uom * plnbez TYPE matnr, " Material Number * plnty TYPE plnty, " Task list type * plnnr TYPE plnnr, " Key for task list group * plnal TYPE plnal, " Group counter * stlst TYPE stlst, " BOM Status " MOD-001 * stlty TYPE stlty, " BOM category * stlnr TYPE stnum, " Bill of material * stlal TYPE stalt, " Alternative BOM * aufpl TYPE co_aufpl, " Routing no for operations in order * zaehl TYPE cim_count, " Internal counter * rueck TYPE co_rueck, " Confirmation number of operation * END OF ty_orders, * ** Type for Process orders details * BEGIN OF ty_pro_orders, * aufnr TYPE aufnr, " Order Number * werks TYPE werks_d, " Plant * kokrs TYPE kokrs, " Controlling Area * objnr TYPE j_objnr, " Object number * gltrp TYPE sydatum, " Date * rsnum TYPE rsnum, " Reservation number * gamng TYPE gamng, " Total order quantity * gmein TYPE meins, " order uom * plnbez TYPE matnr, " Material Number * plnty TYPE plnty, " Task list type * plnnr TYPE plnnr, " Key for task list group * plnal TYPE plnal, " Group counter * stlst TYPE stlst, " BOM Status " MOD-001 * stlty TYPE stlty, " BOM category * stlnr TYPE stnum, " Bill of material * stlal TYPE stalt, " Alternative BOM * aufpl TYPE co_aufpl, " Routing no for operations in order * zaehl TYPE cim_count, " Internal counter * rueck TYPE co_rueck, " Confirmation number of operation * wdate TYPE sydatum, " System date * dayflg(1) TYPE n, " Day flag * pos1(3) TYPE n, " position * arbpl TYPE arbpl, " Work center * sttxt(100) TYPE c, " Status text * menge TYPE menge_d, " Quantity * lmnga TYPE ru_lmnga, " Yield currently to be confirmed * arbid TYPE objektid, " Object ID * plnkn TYPE plnkn, " Number of the task list node * pl_efic(3) TYPE n, " Plant effic * gruom TYPE meins, " gr uom * cfuom TYPE meins, " conf uom * END OF ty_pro_orders, ** Type for Operation within an order * BEGIN OF ty_afvc, * aufpl TYPE co_aufpl, * aplzl TYPE co_aplzl, * plnkn TYPE plnkn, * plnty TYPE plnty, * plnnr TYPE plnnr, * zaehl TYPE cim_count, * vornr TYPE vornr, * arbid TYPE cr_objid, * rueck TYPE co_rueck, * steus TYPE steus, * phflg TYPE phflg, * END OF ty_afvc, * ** Type for quantities/dates/values in the operations * BEGIN OF ty_afvv, * aufpl TYPE co_aufpl, " Routing number of operations in the order * aplzl TYPE co_aplzl, " General counter for order * bmsch TYPE bmsch, " Base Quantity * vgw02 TYPE vgwrt, " Standard value * lmnga TYPE lmnga, " Total Yield Confirmed * ism02 TYPE co_rumng, " Previously confirmed activity * ssavd TYPE ssavd, " Latest scheduled start: Execution (date) * END OF ty_afvv, * ** Type for Order Operatons * BEGIN OF ty_ordops, * aufnr TYPE aufnr, * aufpl TYPE co_aufpl, * aplzl TYPE co_aplzl, * plnkn TYPE plnkn, * plnty TYPE plnty, * plnnr TYPE plnnr, * zaehl TYPE cim_count, * vornr TYPE vornr, * arbid TYPE cr_objid, * rueck TYPE co_rueck, * ssavd TYPE ssavd, * plt_effic(3) TYPE n, * arbpl TYPE arbpl, ***********MOD-005*************** * lmnga TYPE lmnga, * cfuom TYPE meins, **********MOD-005*************** * END OF ty_ordops, * ** Type for Document Segment: Material * BEGIN OF ty_mseg, * aufnr TYPE aufnr, * mblnr TYPE mblnr, * mjahr TYPE mjahr, * zeile TYPE mblpo, * matnr TYPE matnr, * bwart TYPE bwart, * menge TYPE menge_d, * meins TYPE meins, ** sjahr TYPE mjahr, ** smbln TYPE mblnr, ** smblp TYPE mblpo, * rsnum TYPE rsnum, * rspos TYPE rspos, * rsart TYPE rsart, ****** Mod-002*********** * erfmg TYPE erfmg, * erfme TYPE erfme, ***** Mod-002************ * END OF ty_mseg, * ** Type for Order completion confirmations * BEGIN OF ty_afru, * aufnr TYPE aufnr, * rueck TYPE co_rueck, * gmnga TYPE ru_gmnga, * lmnga TYPE ru_lmnga, * gmein TYPE meins, * meinh TYPE ru_vorme, * meilr TYPE meilr, * stokz TYPE co_stokz, * rueck_mst TYPE co_rueck, * END OF ty_afru, * ** Type for Document Segment material * BEGIN OF ty_doc_segment, * aufnr TYPE aufnr, * mblnr TYPE mblnr, * mjahr TYPE mjahr, * zeile TYPE mblpo, * matnr TYPE matnr, * bwart TYPE bwart, * menge TYPE menge_d, * meins TYPE meins, ** sjahr TYPE mjahr, ** smbln TYPE mblnr, ** smblp TYPE mblpo, * rsnum TYPE rsnum, * rspos TYPE rspos, * rsart TYPE rsart, * END OF ty_doc_segment, * ** Type for linked documents prev_doc * BEGIN OF ty_prev_doc, * mblnr TYPE mblnr, * mjahr TYPE mjahr, * zeile TYPE mblpo, * sjahr TYPE mjahr, * smbln TYPE mblnr, * smblp TYPE mblpo, * rsnum TYPE rsnum, * rspos TYPE rspos, * rsart TYPE rsart, * END OF ty_prev_doc, * ** Type for Issued materials * BEGIN OF ty_issued_mat, * aufnr TYPE aufnr, * rsnum TYPE rsnum, * rspos TYPE rspos, * rsart TYPE rsart, * matnr TYPE matnr, * menge TYPE menge_d, * meins TYPE meins, * stprs TYPE stprs, "std price * peinh TYPE peinh, "price uom * END OF ty_issued_mat, * ** Type for Reservation/dependent requirements * BEGIN OF ty_reservations, * rsnum TYPE rsnum, * rspos TYPE rspos, * rsart TYPE rsart, * xloek TYPE xloek, * matnr TYPE matnr, * werks TYPE werks_d, * bdmng TYPE bdmng, * meins TYPE meins, * shkzg TYPE shkzg, * aufnr TYPE aufnr, * dumps TYPE dumps, * vornr TYPE vornr, * rgekz TYPE rgekz, * stlty TYPE stlty, * stlnr TYPE stnum, * stlkn TYPE stlkn, * stpoz TYPE cim_count, * END OF ty_reservations, * ** Individual materials for production order. * BEGIN OF ty_ordmats, * aufnr TYPE aufnr, "Order number * matnr TYPE matnr, "Component material * vornr TYPE vornr, "Phase number * rsnum TYPE rsnum, "Reservation number * rspos TYPE rspos, "Reservation position * rsart TYPE rsart, * bdmng TYPE bdmng, "Component qty * menge TYPE menge_d, "Issued qty * stdqy TYPE bdmng, "component std qty * zloss TYPE bdmng, "comp zero loss qty * amein TYPE meins, "used uom * meins TYPE meins, "std uom * stprs TYPE stprs, "std price * peinh TYPE peinh, "price uom * END OF ty_ordmats, * ** Type for BOM Item * BEGIN OF ty_stpo, * stlty TYPE stlty, * stlnr TYPE stnum, * stlkn TYPE stlkn, * stpoz TYPE cim_count, * meins TYPE kmpme, * menge TYPE kmpmg, * ausch TYPE kausf, * yyzero TYPE /glb/rgtpt_yyzero, * END OF ty_stpo, ** Type for Material Valuation * BEGIN OF ty_mat_valuation, * matnr TYPE matnr, * bwkey TYPE bwkey, * stprs TYPE stprs, * peinh TYPE peinh, * END OF ty_mat_valuation, ** Type for Order confirmations * BEGIN OF ty_ord_conf, * rueck TYPE co_rueck, * rmzhl TYPE co_rmzhl, * ism01 TYPE ru_ismng, * ism02 TYPE ru_ismng, * ism03 TYPE ru_ismng, * ism04 TYPE ru_ismng, * ism05 TYPE ru_ismng, * ism06 TYPE ru_ismng, * stokz TYPE co_stokz, * END OF ty_ord_conf, ** Type for activities *BEGIN OF ty_sum_activity, * lar TYPE lstar, * afru_ism TYPE ru_ismng, * ism_should TYPE ru_ismng, * ism_var TYPE ru_ismng, * costd(8) TYPE p DECIMALS 2, * coact(8) TYPE p DECIMALS 2, * covar(8) TYPE p DECIMALS 2, *END OF ty_sum_activity, ** Type for Summary Order Materials * BEGIN OF ty_sum_ordmats, * matnr TYPE matnr, " material number * num(6) TYPE n, " count * menge TYPE menge_d, " used qty * stdqy TYPE menge_d, " std qty * zloss TYPE menge_d, " zero loss qty * amein TYPE meins, " used uom * meins TYPE meins, " std uom * stprs TYPE stprs, " std price * peinh TYPE peinh, " price uom * END OF ty_sum_ordmats, *"END OF MOD-101 * Type for Materials BEGIN OF ty_material_no, matnr TYPE matnr, bwart TYPE bwart, END OF ty_material_no, * Type for Materials Descriptions BEGIN OF ty_material_des, matnr TYPE matnr, maktx TYPE maktx, END OF ty_material_des, * Type for Object Id and text BEGIN OF ty_wc_text, objid TYPE cr_objid, ktext TYPE cr_ktext, END OF ty_wc_text, * Type for System Function Codes BEGIN OF ty_fcode, fcode TYPE syucomm, END OF ty_fcode. **START OF MOD-03. *type definition for ty_mtart. TYPES:BEGIN OF ty_mtart, matnr TYPE matnr, mtart TYPE mtart, END OF ty_mtart. **END OF MOD-03. DATA: BEGIN OF struct_activity. INCLUDE STRUCTURE ttl_activ. DATA: END OF struct_activity. *" BEGIN OF MOD-101+ DATA: * Internal table for Work Center Header i_crhd TYPE STANDARD TABLE OF ty_crhd, wa_crhd TYPE ty_crhd, * Internal table for Cost Center Master Data i_csks TYPE STANDARD TABLE OF ty_csks, wa_csks TYPE ty_csks, "#EC NEEDED * Internal table for Assignment of Work Center to Cost Center i_crco TYPE STANDARD TABLE OF ty_crco, wa_crco TYPE ty_crco, * Internal table for status texts i_tj02t TYPE STANDARD TABLE OF ty_tj02t, wa_tj02t TYPE ty_tj02t, * Internal table for View "Order Headers PP/CO" i_orders TYPE STANDARD TABLE OF ty_orders, wa_orders TYPE ty_orders, * Internal table for Operation within an order i_afvc TYPE STANDARD TABLE OF ty_afvc, i_afvc1 TYPE STANDARD TABLE OF ty_afvc, i_afvc2 TYPE STANDARD TABLE OF ty_afvc, wa_afvc TYPE ty_afvc, wa_afvc1 TYPE ty_afvc, * Internal table for quantities/dates/values in the operations i_afvv TYPE STANDARD TABLE OF ty_afvv, i_afvv1 TYPE STANDARD TABLE OF ty_afvv, wa_afvv TYPE ty_afvv, wa_afvv1 TYPE ty_afvv, * Internal table for Document Segment: Material i_mseg TYPE STANDARD TABLE OF ty_mseg, i_mseg1 TYPE STANDARD TABLE OF ty_mseg, wa_mseg TYPE ty_mseg, * Internal table for Document Segment: Material - Sum i_msegs TYPE STANDARD TABLE OF ty_mseg_sum, i_msegs1 TYPE STANDARD TABLE OF ty_mseg_sum, wa_msegs TYPE ty_mseg_sum, i_issued_mat TYPE STANDARD TABLE OF ty_mseg, wa_issued_mat TYPE ty_mseg, i_stbtmp TYPE STANDARD TABLE OF stpox, wa_stb TYPE stpox, i_cmat TYPE STANDARD TABLE OF cscmat, wa_tmat TYPE cstmat, i_bomdat TYPE ty_t_bomdat, wa_bomdat TYPE ty_bomdat, i_h_ord TYPE STANDARD TABLE OF ty_hier_order, wa_h_ord TYPE ty_hier_order, i_h_phs TYPE STANDARD TABLE OF ty_hier_phase, wa_h_phs TYPE ty_hier_phase, i_h_act TYPE STANDARD TABLE OF ty_hier_act, wa_h_act TYPE ty_hier_act, i_h_mat TYPE STANDARD TABLE OF ty_hier_mat, wa_h_mat TYPE ty_hier_mat, wa_acts TYPE ty_hier_act_sum, wa_mats TYPE ty_hier_mat_sum, i_afru TYPE STANDARD TABLE OF ty_afru, i_afru1 TYPE STANDARD TABLE OF ty_afru, wa_afru TYPE ty_afru, wa_afru1 TYPE ty_afru, * Internal table for Reservation/dependent requirements i_resb TYPE STANDARD TABLE OF ty_resb, wa_resb TYPE ty_resb, i_marc1 TYPE STANDARD TABLE OF ty_marc1, wa_marc1 TYPE ty_marc1, i_mara TYPE STANDARD TABLE OF ty_mara, wa_mara TYPE ty_mara, i_param TYPE STANDARD TABLE OF ty_param, wa_param TYPE ty_param, i_param_key TYPE STANDARD TABLE OF ty_param_key, wa_param_key TYPE ty_param_key, i_mbew1 TYPE STANDARD TABLE OF ty_mbew1, wa_mbew1 TYPE ty_mbew1, i_ordmats TYPE STANDARD TABLE OF ty_ordmats, wa_ordmats TYPE ty_ordmats, i_plpo TYPE STANDARD TABLE OF plpo, wa_plpo TYPE plpo, i_plpo1 TYPE STANDARD TABLE OF plpo, wa_plpo1 TYPE plpo, i_plpo2 TYPE STANDARD TABLE OF plpo, wa_plpo2 TYPE plpo, i_ord_conf TYPE STANDARD TABLE OF ty_ord_conf, wa_ord_conf TYPE ty_ord_conf, i_ord_conf1 TYPE STANDARD TABLE OF ty_ord_conf, wa_ord_conf1 TYPE ty_ord_conf, * Internal table for Additional Information for Hierarchy Nodes i_nodestab TYPE STANDARD TABLE OF snodetext, wa_nodestab TYPE snodetext, i_material_des TYPE STANDARD TABLE OF ty_material_des, wa_material_des TYPE ty_material_des, i_wc_text TYPE STANDARD TABLE OF ty_wc_text, wa_wc_text TYPE ty_wc_text, i_plpo_sel TYPE STANDARD TABLE OF ty_plpo_sel, wa_plpo_sel TYPE ty_plpo_sel, i_afru_sel TYPE STANDARD TABLE OF ty_afru_sel, wa_afru_sel TYPE ty_afru_sel, i_fcode TYPE STANDARD TABLE OF ty_fcode, wa_fcode TYPE ty_fcode, i_mtart TYPE STANDARD TABLE OF ty_mtart, wa_mtart TYPE ty_mtart, i_matn TYPE STANDARD TABLE OF ty_material_no, wa_matn TYPE ty_material_no, i_parn TYPE STANDARD TABLE OF ty_par, wa_parn TYPE ty_par, i_ckey TYPE STANDARD TABLE OF ty_ckey, wa_ckey TYPE ty_ckey, i_obj_stat TYPE STANDARD TABLE OF ty_obj_stat, wa_obj_stat TYPE ty_obj_stat, r_steus TYPE RANGE OF steus, wa_steus LIKE LINE OF r_steus. ****** Include for Selection Screen * include ZPROCESSORDTOPVARSEL. *&---------------------------------------------------------------------* *& Include ZPROCESSORDTOPVARSEL *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Include ZPROCESSORDTOPVARSEL *&---------------------------------------------------------------------* *------------------- Selection Screen --------------------------------- SELECTION-SCREEN BEGIN OF BLOCK sel WITH FRAME TITLE text-001. SELECT-OPTIONS: s_aufnr FOR wa_afko-aufnr MEMORY ID br1, "Process Order number s_datuv FOR sy-datum MEMORY ID dat. " Selection Date Range SELECT-OPTIONS: s_arbpl FOR wa_crhd-arbpl MATCHCODE OBJECT cram MEMORY ID agr, "Resource s_fevor FOR wa_afko-fevor. "Production Scheduler "MOD-101+ PARAMETERS: p_werks TYPE werks_d OBLIGATORY, "MEMORY ID wrk, " Plant p_usage LIKE mast-stlan OBLIGATORY DEFAULT '1'. " BOM usage SELECT-OPTIONS: s_steus FOR wa_plpo-steus MEMORY ID aat. " Control Key PARAMETERS: *WORT TYPE C LENGTH 4 DEFAULT 'WORT'. * p_machs TYPE lstar MEMORY ID lar," Activity Type "MOD-101- * p_kokrs TYPE cssl-kokrs OBLIGATORY MEMORY ID cac, p_kokrs TYPE cssl-kokrs MEMORY ID cac, " Controlling Area - MOD IB like cssl-kokrs p_mtart TYPE mara-mtart MEMORY ID mta. " Material Type SELECT-OPTIONS: s_matnr FOR wa_mara-matnr MATCHCODE OBJECT mat1 MEMORY ID mat, " Material s_kostl FOR wa_cssl-kostl MATCHCODE OBJECT kost MEMORY ID kos. " Cost center *" START OF MOD-101 *s_stats FOR v_dummy MATCHCODE OBJECT /eur/rgbpte_ordstat. " Order *Status SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT (28) text-071. SELECTION-SCREEN POSITION 33. PARAMETERS: p_stats1 TYPE char4 MATCHCODE OBJECT /eur/rgbpte_ordstat. SELECTION-SCREEN POSITION 39. PARAMETERS: p_s1_chk AS CHECKBOX. SELECTION-SCREEN COMMENT 41(5) text-072. SELECTION-SCREEN COMMENT 51(4) text-073. SELECTION-SCREEN POSITION 58. PARAMETERS: p_stats2 TYPE char4 MATCHCODE OBJECT /eur/rgbpte_ordstat. SELECTION-SCREEN POSITION 64. PARAMETERS: p_s2_chk AS CHECKBOX. SELECTION-SCREEN COMMENT 66(5) text-072. SELECTION-SCREEN END OF LINE. *" END OF MOD-101 SELECTION-SCREEN SKIP 1. SELECTION-SCREEN COMMENT 32(40) text-020. SELECTION-SCREEN END OF BLOCK sel. SELECTION-SCREEN BEGIN OF BLOCK typ WITH FRAME TITLE text-021. *detail, summary or phase SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: rb_detl RADIOBUTTON GROUP rad1. SELECTION-SCREEN COMMENT (20) text-003 FOR FIELD rb_detl. SELECTION-SCREEN POSITION 30. PARAMETERS: rb_summ RADIOBUTTON GROUP rad1. SELECTION-SCREEN COMMENT (20) text-004 FOR FIELD rb_summ. SELECTION-SCREEN POSITION 60. PARAMETERS: rb_phase RADIOBUTTON GROUP rad1. SELECTION-SCREEN COMMENT (20) text-005 FOR FIELD rb_phase. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK typ. SELECTION-SCREEN BEGIN OF BLOCK out WITH FRAME TITLE text-002. *fiscal or quantity SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: rb_fiscl RADIOBUTTON GROUP rad2. SELECTION-SCREEN COMMENT (20) text-006 FOR FIELD rb_fiscl. SELECTION-SCREEN POSITION 30. PARAMETERS: rb_quant RADIOBUTTON GROUP rad2. SELECTION-SCREEN COMMENT (20) text-007 FOR FIELD rb_quant. SELECTION-SCREEN END OF LINE. *actual or planned production SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: rb_actl RADIOBUTTON GROUP rad3. SELECTION-SCREEN COMMENT (20) text-008 FOR FIELD rb_actl. SELECTION-SCREEN POSITION 30. PARAMETERS: rb_pland RADIOBUTTON GROUP rad3. SELECTION-SCREEN COMMENT (20) text-009 FOR FIELD rb_pland. SELECTION-SCREEN END OF LINE. *produced or confirmed quantity SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: rb_prod RADIOBUTTON GROUP rad4. SELECTION-SCREEN COMMENT (20) text-010 FOR FIELD rb_prod. SELECTION-SCREEN POSITION 30. PARAMETERS: rb_conf RADIOBUTTON GROUP rad4. SELECTION-SCREEN COMMENT (20) text-011 FOR FIELD rb_conf. SELECTION-SCREEN END OF LINE. *all components or non b/flushed only SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: rb_bflsh RADIOBUTTON GROUP rad5. SELECTION-SCREEN COMMENT (20) text-013 FOR FIELD rb_bflsh. SELECTION-SCREEN POSITION 30. PARAMETERS: rb_nflsh RADIOBUTTON GROUP rad5. SELECTION-SCREEN COMMENT (20) text-012 FOR FIELD rb_nflsh. SELECTION-SCREEN END OF LINE. *include/exclude zero production SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: rb_ezero RADIOBUTTON GROUP rad6. SELECTION-SCREEN COMMENT (20) text-014 FOR FIELD rb_ezero. SELECTION-SCREEN POSITION 30. PARAMETERS: rb_izero RADIOBUTTON GROUP rad6. SELECTION-SCREEN COMMENT (20) text-015 FOR FIELD rb_izero. SELECTION-SCREEN END OF LINE. *standard planned or zero loss planned SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: rb_stdpl RADIOBUTTON GROUP rad7. SELECTION-SCREEN COMMENT (20) text-016 FOR FIELD rb_stdpl. SELECTION-SCREEN POSITION 30. PARAMETERS: rb_zloss RADIOBUTTON GROUP rad7. SELECTION-SCREEN COMMENT (20) text-017 FOR FIELD rb_zloss. SELECTION-SCREEN END OF LINE. *order uom or kgm SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: rb_order RADIOBUTTON GROUP rad8. SELECTION-SCREEN COMMENT (20) text-018 FOR FIELD rb_order. SELECTION-SCREEN POSITION 30. PARAMETERS: rb_kgm RADIOBUTTON GROUP rad8. SELECTION-SCREEN COMMENT (20) text-019 FOR FIELD rb_kgm. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK out. *** Initialization Event INITIALIZATION. PERFORM fill_movement_types. *******BEGIN OF MOD-003. **"Validate BOM usage *AT SELECTION-SCREEN ON p_usage. * PERFORM validate_stlan. *"Validate control key *at selection-screen on s_steus. *perform validate_steus. *"validate machine hours indicator. *at selection-screen on p_machs. *perform validate_lstar. ******END OF MOD-003. *"BEGIN OF MOD-101 AT SELECTION-SCREEN ON s_steus. *"Validate control key PERFORM validate_steus. *"END OF MOD-101. *** At Selection Screen Event AT SELECTION-SCREEN. * Checking the plant and get currency PERFORM get_currency. * Checking Materials, material type. PERFORM check_materials . *** Start of Selection Event START-OF-SELECTION. SET PF-STATUS 'MAIN'. * Setup Control Key selection range CLEAR : s_steus, s_steus[]. s_steus-sign = 'I'. s_steus-option = 'EQ'. LOOP AT i_ckey INTO wa_ckey. s_steus-low = wa_ckey-steus. APPEND s_steus. ENDLOOP. *"END OF MOD-101 * Retrieve Order status * PERFORM get_status . "MOD-101- * Retrieve work center * PERFORM get_work_center. "MOD-101- * Retrieve Cost center PERFORM get_cost_center. * Retrieve Order Headers PP/CO PERFORM get_orders. * Orders are exists according to the selection * then retrieve Operations, Material segment and bom details IF NOT i_orders[] IS INITIAL. PERFORM get_operations. PERFORM get_mat_segment. PERFORM get_bom_info. ELSE. MESSAGE s007. ENDIF. *** End of Selection Event END-OF-SELECTION. * Displaying output only for +ve records IF NOT i_orders IS INITIAL. * Displaying output by selection ( Detail, Summary or Phase report ) PERFORM build_output_tabs. PERFORM output. PERFORM list_display. ELSE. MESSAGE s007. LEAVE LIST-PROCESSING. ENDIF. ****** Include for Forms * include ZPROCESSORDVARF01. *&---------------------------------------------------------------------* *& Include ZPROCESSORDVARF01 *&---------------------------------------------------------------------* **&--------------------------------------------------------------------- * ** Report: : ZPROCESSORD ** AUTHOR : Aveek Ghose * ** SUPPLIER : * **====================================================================== * ** CHANGE HISTORY LOG * **---------------------------------------------------------------------- * ** MOD. NO.| DATE | NAME | CORRECTION NUMBER | CHANGE REFERENCE **---------------------------------------------------------------------- * ** MOD-001 |DD/MM/YYYY| XXXXXX | XXXXXXXXXX | XXXXXXXXX * ** DESCRIPTION: * **---------------------------------------------------------------------- * ** MOD-002 |DD/MM/YYYY| XXXXXX | XXXXXXXXXX | XXXXXXXXX * ** DESCRIPTION: * **---------------------------------------------------------------------- * **&--------------------------------------------------------------------- * **& Include ZPROCESSORDVARF01 **&--------------------------------------------------------------------- * * *FORM fill_movement_types . * * REFRESH i_r_bwart. * ** wa_bwart-sign = c_sign. ** wa_bwart-option = c_option. ** wa_bwart-low = '101'. ** APPEND wa_bwart TO i_r_bwart. ** CLEAR wa_bwart. ** ** wa_bwart-sign = c_sign. ** wa_bwart-option = c_option. ** wa_bwart-low = '102'. ** APPEND wa_bwart TO i_r_bwart. ** CLEAR wa_bwart. * * wa_bwart-sign = c_sign. * wa_bwart-option = c_option. * wa_bwart-low = c_movm_low_261. * APPEND wa_bwart TO i_r_bwart. * CLEAR wa_bwart. * * wa_bwart-sign = c_sign. * wa_bwart-option = c_option. * wa_bwart-low = c_movm_low_262. * APPEND wa_bwart TO i_r_bwart. * CLEAR wa_bwart. * * wa_bwart-sign = c_sign. * wa_bwart-option = c_option. * wa_bwart-low = c_movm_low_531. * APPEND wa_bwart TO i_r_bwart. * CLEAR wa_bwart. * * wa_bwart-sign = c_sign. * wa_bwart-option = c_option. * wa_bwart-low = c_movm_low_532. * APPEND wa_bwart TO i_r_bwart. * CLEAR wa_bwart. *ENDFORM. " fill_movement_types * **&--------------------------------------------------------------------- * **& Form get_currency **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM get_currency. * *****Begin of MOD-001 * DATA : l_bukrs TYPE bukrs, * l_waers TYPE waers. * * CLEAR : v_waers. * * IF NOT p_werks IS INITIAL. * SELECT SINGLE werks FROM t001w INTO v_werks * WHERE werks = p_werks. * IF sy-subrc %LT%GT 0. * MESSAGE e001 WITH p_werks. " Invalid Plant * ENDIF. * ENDIF. ** **Retrieve the company code * SELECT SINGLE bukrs * FROM t001k * INTO l_bukrs * WHERE bwkey = p_werks. * * IF sy-subrc = 0. * **Get the currence at company * SELECT SINGLE waers * FROM t001 * INTO v_waers * WHERE bukrs = l_bukrs. * * ENDIF. * ** SELECT SINGLE waers ** FROM tka01 INTO l_waers ** WHERE kokrs = p_kokrs. ** ** IF sy-subrc %LT%GT 0. ** MESSAGE e046. " Invalid Controlling area entered. ** ** ELSEIF v_waers IS INITIAL. ***If the currency is not maintained at companmy level ** v_waers = l_waers. ** ENDIF. *******************MOD-004******************************* * AUTHORITY-CHECK OBJECT 'C_AFKO_AWK' * ID 'WERKS' FIELD p_werks * ID 'AUFART' DUMMY. * IF sy-subrc %LT%GT 0. * MESSAGE e000 WITH * 'You do not have authorisation to display report'(070). * ENDIF. *****************MOD-004************************************* * ** IF NOT p_werks IS INITIAL. ** SELECT SINGLE werks FROM t001w INTO v_werks ** WHERE werks = p_werks. ** IF sy-subrc %LT%GT 0. ** MESSAGE e001 WITH p_werks. " Invalid Plant ** ENDIF. ** ENDIF. ***********End of MOD-001. *ENDFORM. " get_currency * **&--------------------------------------------------------------------- * **& Form check_materials **&--------------------------------------------------------------------- * ** text - Checking material number and material type values **---------------------------------------------------------------------- * *FORM check_materials. * DATA : l_matnr TYPE matnr, "#EC NEEDED * l_mtart TYPE mtart. "#EC NEEDED * ** Checking material(s) valid or not * IF NOT ( s_matnr[] IS INITIAL ). ** Checking at leaset one material is valid for select-options material. * SELECT SINGLE matnr * FROM mara * INTO l_matnr * WHERE matnr IN s_matnr. "#EC * * IF sy-subrc %LT%GT 0. * MESSAGE e000 WITH 'Material(s) not found for this selection'(062) . * ENDIF. * ENDIF. * ** Checking material type valid or not * IF NOT ( p_mtart IS INITIAL ). * SELECT SINGLE mtart * FROM t134 INTO l_mtart "MOD IB mara-mtart * WHERE mtart = p_mtart. * IF sy-subrc %LT%GT 0. * MESSAGE e000 WITH 'Incorrect Material Type'(063). * ENDIF. * ENDIF. * ** Checking material number and type valid or not. * IF NOT ( s_matnr[] IS INITIAL ) AND * NOT ( p_mtart IS INITIAL ). ** Checking at leaset one material is valid for select-options material ** and for material type * * CLEAR l_matnr. * SELECT SINGLE matnr * FROM mara * INTO l_matnr * WHERE matnr IN s_matnr AND * mtart = p_mtart. "#EC * * IF sy-subrc %LT%GT 0. * MESSAGE e000 * WITH 'Incorrect material number & type combination'(064). * ENDIF. * ENDIF. *ENDFORM. " check_materials * **&--------------------------------------------------------------------- * **& Form get_status **&--------------------------------------------------------------------- * ** text -- Retreving System status texts from table TJ02T **---------------------------------------------------------------------- * *FORM get_status USING fp_txt04 TYPE j_txt04 * CHANGING fp_stat TYPE j_istat. *** %GT%GT%GT%GT MOD-101+ * CLEAR : fp_stat. * SELECT SINGLE istat * FROM tj02t * INTO fp_stat * WHERE txt04 = fp_txt04 * AND spras = sy-langu. "#EC CI_SGLSELECT **** if select fails stat is returned empty, so no check required. * *** %LT%LT%LT%LT MOD-101+ ** REFRESH i_tj02t. ** CLEAR wa_tj02t. ** IF NOT ( s_stats[] IS INITIAL ). ** SELECT txt04 ** FROM tj02t INTO TABLE i_tj02t ** WHERE txt04 IN s_stats ** AND spras = sy-langu. "#EC CI_SGLSELECT *** IF sy-subrc = 0. **** The check is not required here since the **** system status text is not mandatory *** ENDIF. ** ENDIF. ** ** IF rb_ezero = c_x. ** IF rb_prod = c_x. ** wa_tj02t-txt04 = c_txt_dlv. ** ENDIF. ** ** IF rb_conf = c_x. ** wa_tj02t-txt04 = c_txt_cnf. ** ENDIF. ** APPEND wa_tj02t TO i_tj02t. ** CLEAR wa_tj02t. ** ENDIF. ** SORT i_tj02t BY txt04 AS TEXT. " MOD IB (SORT i_tj02t) ** DELETE ADJACENT DUPLICATES FROM i_tj02t. *ENDFORM. " get_status * **&--------------------------------------------------------------------- * **& Form get_status_info **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM get_status_info USING fp_l_orders_objnr TYPE j_objnr * fp_l_sttxt TYPE any. * * DATA: l_text(4) TYPE c, * l_stsma TYPE j_stsma, * ** START MOD IB * i_status TYPE STANDARD TABLE OF jstat INITIAL SIZE 0, * wa_status TYPE jstat. ** END MOD IB * REFRESH i_status. * ** Get all active statuses for the order * CALL FUNCTION 'STATUS_READ' * EXPORTING * objnr = fp_l_orders_objnr * only_active = c_x * IMPORTING * stsma = l_stsma * TABLES * status = i_status. * * CLEAR: fp_l_sttxt. * * LOOP AT i_status INTO wa_status. ** Get the text for each status * CALL FUNCTION 'STATUS_NUMBER_CONVERSION' * EXPORTING * language = sy-langu * status_number = wa_status-stat * stsma = l_stsma * IMPORTING * txt04 = l_text. ** Add status text found to current list * CONCATENATE fp_l_sttxt l_text INTO fp_l_sttxt. * CLEAR : wa_status. * ENDLOOP. *ENDFORM. " get_status_info * **&--------------------------------------------------------------------- * **& Form get_work_center **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM get_work_center. * CLEAR: wa_crhd. * REFRESH: i_crhd. * * SELECT objid * arbpl * FROM crhd INTO TABLE i_crhd * WHERE objty = c_objtyp * AND werks = p_werks * AND arbpl IN s_arbpl. ** IF sy-subrc = 0. *** sy-subrc check is not required, there must be atleast one record for *** this selection. ** ENDIF. *ENDFORM. " get_work_center * **&--------------------------------------------------------------------- * **& Form get_cost_center **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM get_cost_center. * IF NOT ( s_kostl[] IS INITIAL ). * CLEAR : i_csks. * SELECT kokrs kostl * FROM csks * INTO TABLE i_csks * WHERE kokrs = p_kokrs * AND kostl IN s_kostl. * IF sy-subrc = 0. * SORT i_csks BY kokrs kostl. * ENDIF. * ENDIF. *ENDFORM. " get_cost_center * ***** ***** BEGIN OF MOD-101 ***** **&--------------------------------------------------------------------- * **& Form get_orders **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM get_orders. * * DATA: l_sttxt(100) TYPE c, * flg_status(1) TYPE c. * FIELD-SYMBOLS : %LTfs_orders%GT TYPE ty_orders. * * MOVE 'Extracting Process Orders'(022) TO v_output_text. * PERFORM inform_user_of_progress. * * IF NOT p_mtart IS INITIAL. **"selection filter on material type * SELECT matnr "material number * mtart "material type * INTO TABLE i_mtart * FROM mara * WHERE matnr IN s_matnr * AND mtart = p_mtart. * IF sy-subrc = c_0. ** refill S_MATNR with I_MTART values * REFRESH : s_matnr. * * s_matnr-sign = c_sign. * s_matnr-option = c_option. * LOOP AT i_mtart INTO wa_mtart. * s_matnr-low = wa_mtart-matnr. * APPEND s_matnr. * ENDLOOP. * * ELSE. ** No data was selected for material type * MESSAGE i072 WITH p_mtart. * LEAVE LIST-PROCESSING. * ENDIF. * ENDIF. * * SELECT aufnr * * werks * kokrs * objnr * * gltrp * gstrp * * rsnum * * gamng * gmein * plnbez * * plnty * plnnr * plnal * * stlst * stlty * stlnr * sdatv * stlal * stlan * * aufpl * zaehl * rueck * * auart * * aufld "31-05-2005 * * INTO TABLE i_orders FROM caufv * WHERE aufnr IN s_aufnr * AND werks = p_werks ** AND kokrs = p_kokrs * AND fevor IN s_fevor * AND plnbez IN s_matnr ** AND stlan = p_usage * AND ( gstrp IN s_datuv OR * gltrp IN s_datuv ). * IF sy-subrc %LT%GT 0. * MESSAGE s007. * LEAVE LIST-PROCESSING. * ENDIF. * * SORT i_orders BY aufnr. * ** Take status txt from sel screen and get status number * IF NOT p_stats1 IS INITIAL. * PERFORM get_status USING p_stats1 CHANGING v_stat1. * ENDIF. * * IF NOT p_stats2 IS INITIAL. * PERFORM get_status USING p_stats2 CHANGING v_stat2. * ENDIF. * ** get object numbers and statuses for orders * CLEAR : i_obj_stat. * SELECT objnr * stat * FROM jest * INTO TABLE i_obj_stat * FOR ALL ENTRIES IN i_orders * WHERE objnr = i_orders-objnr * AND stat IN (v_stat1,v_stat2). * ** cull orders * LOOP AT i_orders ASSIGNING %LTfs_orders%GT. * IF NOT v_stat1 IS INITIAL. * READ TABLE i_obj_stat INTO wa_obj_stat * WITH KEY objnr = %LTfs_orders%GT-objnr * stat = v_stat1. * IF sy-subrc = 0 AND p_s1_chk EQ c_x. * %LTfs_orders%GT-del = c_x. * ELSEIF sy-subrc NE 0 AND p_s1_chk NE c_x. * %LTfs_orders%GT-del = c_x. * ENDIF. * ENDIF. * * IF NOT v_stat2 IS INITIAL. * READ TABLE i_obj_stat INTO wa_obj_stat * WITH KEY objnr = %LTfs_orders%GT-objnr * stat = v_stat2. * IF sy-subrc = 0 AND p_s2_chk EQ c_x. * %LTfs_orders%GT-del = c_x. * ELSEIF sy-subrc NE 0 AND p_s2_chk NE c_x. * %LTfs_orders%GT-del = c_x. * ENDIF. * ENDIF. * ENDLOOP. * **MOD-004*********************************** * DELETE i_orders WHERE del = c_x. **MOD-004*********************************** ** LOOP AT i_orders INTO wa_orders. ** IF NOT i_tj02t[] IS INITIAL . ** PERFORM get_status_info USING wa_orders-objnr l_sttxt. ** ** CLEAR: flg_status, wa_tj02t. ** LOOP AT i_tj02t INTO wa_tj02t. ** IF l_sttxt NS wa_tj02t-txt04. ** CLEAR flg_status. ** EXIT. ** ELSE. ** flg_status = c_x. ** CONTINUE. ** ENDIF. ** CLEAR : wa_tj02t. ** ENDLOOP. ** ** IF flg_status %LT%GT c_x. ** DELETE i_orders. ** CONTINUE. ** ENDIF. ** ENDIF. ** ENDLOOP. *ENDFORM. " get_orders * **&--------------------------------------------------------------------- * **& Form get_operations **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM get_operations. * * DATA l_tabix TYPE sytabix. * ** Let the user know whats up * MOVE 'Extracting Phase Information'(023) TO v_output_text. * PERFORM inform_user_of_progress. * ** select process order item lines * SELECT aufpl * aplzl * * ltxa1 * * plnkn * plnty * plnnr * zaehl * * vornr * steus * arbid * rueck * * phflg * sumnr * vgwts * * lar01 * lar02 * lar03 * lar04 * lar05 * lar06 * INTO TABLE i_afvc * FROM afvc * FOR ALL ENTRIES IN i_orders * WHERE aufpl = i_orders-aufpl * AND steus IN s_steus * AND phflg = c_x. * * IF sy-subrc = 0. ** select process order item values * SELECT aufpl * aplzl * * meinh * bmsch * * umren * umrez * * vge01 * vgw01 * vge02 * vgw02 * vge03 * vgw03 * vge04 * vgw04 * vge05 * vgw05 * vge06 * vgw06 * * mgvrg * lmnga * gmnga * * ism01 * ism02 * ism03 * ism04 * ism05 * ism06 * * ssavd * FROM afvv INTO TABLE i_afvv * FOR ALL ENTRIES IN i_afvc * WHERE aufpl = i_afvc-aufpl * AND aplzl = i_afvc-aplzl * AND ssavd IN s_datuv. * IF sy-subrc = 0. * SORT i_afvv BY aufpl aplzl. * ENDIF. * ** select process order related work centre data * SELECT objty * objid * kokrs * kostl * lstar * FROM crco * INTO TABLE i_crco * FOR ALL ENTRIES IN i_afvc * WHERE objty = c_objtyp * AND objid = i_afvc-arbid * AND kostl IN s_kostl. * IF sy-subrc = 0. * SORT i_crco BY objty objid kostl. * ENDIF. * ** Retrieve work center details * SELECT objid * arbpl * vgwts * FROM crhd * APPENDING TABLE i_crhd * FOR ALL ENTRIES IN i_afvc * WHERE objty = c_objtyp * AND objid = i_afvc-arbid * AND werks = p_werks * AND arbpl IN s_arbpl. * * SORT i_crhd BY objid. * SORT i_orders BY aufpl. * SORT i_afvc BY aufpl vornr DESCENDING. * * LOOP AT i_afvc INTO wa_afvc. * l_tabix = sy-tabix. * **** link PrO number to phase through the routing number * CLEAR : wa_orders. * READ TABLE i_orders INTO wa_orders WITH KEY aufpl = wa_afvc-aufpl . * IF sy-subrc = 0. * wa_afvc-aufnr = wa_orders-aufnr. * MODIFY i_afvc FROM wa_afvc INDEX l_tabix TRANSPORTING aufnr. * **** check cost centre of phase * IF NOT ( s_kostl[] IS INITIAL ). * READ TABLE i_crco INTO wa_crco WITH KEY objty = c_objtyp * objid = wa_afvc-arbid * BINARY SEARCH. * IF sy-subrc = 0. **** see if cost centre of phase is valid * READ TABLE i_csks INTO wa_csks * WITH KEY kostl = wa_crco-kostl. * IF sy-subrc %LT%GT 0. **** delete invalid phases * DELETE i_afvv WHERE aufpl = wa_afvc-aufpl * AND aplzl = wa_afvc-aplzl. * DELETE i_afvc INDEX l_tabix. * CONTINUE. * ENDIF. * ENDIF. * ENDIF. * **** Check work centre details with resource * IF NOT ( s_arbpl[] IS INITIAL ). * READ TABLE i_crhd INTO wa_crhd * WITH KEY objid = wa_afvc-arbid. * IF sy-subrc %LT%GT 0. * DELETE i_afvv WHERE aufpl = wa_afvc-aufpl * AND aplzl = wa_afvc-aplzl. * DELETE i_afvc INDEX l_tabix. * CONTINUE. * ENDIF. * * ENDIF. * CLEAR: wa_crco, wa_crhd, l_tabix. * * ELSE. **** if routing number is not linked to any valid order **** delete phase * DELETE i_afvc INDEX l_tabix. * ENDIF. * ENDLOOP. * ENDIF. * ** Begin of MOD-002++ * LOOP AT i_orders INTO wa_orders. * CLEAR: wa_afvc, l_tabix. * l_tabix = sy-tabix. * READ TABLE i_afvc INTO wa_afvc WITH KEY aufpl = wa_orders-aufpl. **MOD-004********************************* ** IF sy-subrc NE 0. ** DELETE i_orders INDEX l_tabix. ** ENDIF. ***MOD-004******************************** * ENDLOOP. ** End of MOD-002++ * *ENDFORM. " get_operations * **&--------------------------------------------------------------------* **& Form get_order_mats **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM get_order_mats. * * DATA : l_v_erfme TYPE erfme, * l_v_chec TYPE char1, * l_bwart TYPE bwart. * ** get materials issued/receipt against order * SELECT aufnr aufpl aplzl matnr mblnr mjahr zeile bwart * werks lgort charg * menge meins erfmg erfme * rsnum rspos rsart * FROM aufm * INTO TABLE i_mseg1 * FOR ALL ENTRIES IN i_orders * WHERE aufnr = i_orders-aufnr. * IF sy-subrc = 0. * **** get base UoM for all materials * CLEAR: i_mara. * SELECT matnr * mtart * meins * gewei * ntgew * FROM mara * APPENDING TABLE i_mara * FOR ALL ENTRIES IN i_mseg1 * WHERE matnr = i_mseg1-matnr. * * SORT i_mseg1 BY aufnr aufpl aplzl matnr. **** get material qty in base UoM and summarize material data * LOOP AT i_mseg1 INTO wa_mseg. * CLEAR : wa_mara. **** read material master for base UoM * READ TABLE i_mara INTO wa_mara WITH KEY matnr = wa_mseg-matnr. * IF sy-subrc = 0. * IF wa_mseg-meins %LT%GT wa_mara-meins. * CLEAR : wa_mseg-bmenge. **** convert GR quant into base units * PERFORM conv_to_from_base USING 'X' * wa_mseg-matnr * wa_mseg-menge * wa_mseg-meins * wa_mara-meins * CHANGING wa_mseg-bmenge * v_conv_rc. * ELSE. * wa_mseg-bmenge = wa_mseg-menge. * ENDIF. * * wa_mseg-bmeins = wa_mara-meins. * wa_mseg-gewei = wa_mara-gewei. * wa_mseg-ntgew = wa_mara-ntgew. * MODIFY i_mseg1 FROM wa_mseg TRANSPORTING bmenge bmeins. * ENDIF. * * wa_msegs-aufnr = wa_mseg-aufnr. * wa_msegs-aufpl = wa_mseg-aufpl. * wa_msegs-aplzl = wa_mseg-aplzl. * wa_msegs-matnr = wa_mseg-matnr. * wa_msegs-meins = wa_mseg-meins. * wa_msegs-bmeins = wa_mseg-bmeins. * wa_msegs-gewei = wa_mseg-gewei. ** Begin of MOD-002++ * IF ( wa_mseg-bwart %LT%GT 'ZU1' ) AND ( wa_mseg-bwart %LT%GT 'ZU2' ). * wa_msegs-erfme = wa_mseg-erfme. * ENDIF. ** End of MOD-002++ * * AT NEW matnr. * l_v_erfme = wa_msegs-erfme. * CLEAR : l_v_chec. * ENDAT. * * IF l_v_erfme %LT%GT wa_mseg-erfme. **** set flag if different GR mvts have diff. GR UoM * l_v_chec = c_x. * ENDIF. * **** Sum up material qtys based on movement * CASE wa_mseg-bwart. * WHEN '101'. **** GR of material * wa_msegs-bmenge1 = wa_msegs-bmenge1 + wa_mseg-bmenge. * wa_msegs-erfmg1 = wa_msegs-erfmg1 + wa_mseg-erfmg. * wa_msegs-erfme = wa_mseg-erfme. * l_bwart = '101'. "23-05-2005 * * WHEN '261'. **** Consumption of material * wa_msegs-bmenge2 = wa_msegs-bmenge2 + wa_mseg-bmenge. * wa_msegs-erfmg2 = wa_msegs-erfmg2 + wa_mseg-erfmg. * l_bwart = '261'. "23-05-2005 * * * WHEN '532'. **** reversal of 531 * wa_msegs-bmenge5 = wa_msegs-bmenge5 + wa_mseg-bmenge. * wa_msegs-erfmg5 = wa_msegs-erfmg5 + wa_mseg-erfmg. * * WHEN '102'. **** reversal of 101 * wa_msegs-bmenge1 = wa_msegs-bmenge1 - wa_mseg-bmenge. * wa_msegs-erfmg1 = wa_msegs-erfmg1 + wa_mseg-erfmg. * * WHEN '262'. **** reversal of 261 * wa_msegs-bmenge2 = wa_msegs-bmenge2 - wa_mseg-bmenge. * wa_msegs-erfmg2 = wa_msegs-erfmg2 + wa_mseg-erfmg. * * WHEN '531'. **** By-product material mvt * wa_msegs-bmenge5 = wa_msegs-bmenge5 - wa_mseg-bmenge. * wa_msegs-erfmg5 = wa_msegs-erfmg5 + wa_mseg-erfmg. * l_bwart = '531'. "23-05-2005 * * ENDCASE. * **** If the diff. GR qtys have different UoM then do not cumulate **** actual qty values * IF l_v_chec = c_x. * CLEAR : wa_msegs-erfmg1, wa_msegs-erfmg2 , wa_msegs-erfmg5. * ENDIF. * * AT END OF matnr. * wa_msegs-bmenge = wa_msegs-bmenge1 + wa_msegs-bmenge2 + * wa_msegs-bmenge5. * wa_msegs-erfmg = wa_msegs-erfmg1 + wa_msegs-erfmg2 + * wa_msegs-erfmg5. * wa_msegs-bwart = l_bwart . * * APPEND wa_msegs TO i_msegs. * CLEAR : wa_msegs, * l_bwart. * ENDAT. * ENDLOOP. * ENDIF. *ENDFORM. "get_order_mats * **&--------------------------------------------------------------------- * **& Form get_mat_segment **&--------------------------------------------------------------------- * *FORM get_mat_segment. * DATA: l_tabix TYPE sytabix. * * FIELD-SYMBOLS : %LTl_fs_orders%GT TYPE ty_orders, * %LTl_fs_afvc%GT TYPE ty_afvc. * * IF NOT ( i_orders[] IS INITIAL ). **** get material master data for PO materials * CLEAR: i_mara , i_mseg , i_mseg1 , i_msegs , i_msegs1. * SELECT matnr * mtart * meins * gewei * ntgew * FROM mara * INTO TABLE i_mara * FOR ALL ENTRIES IN i_orders * WHERE matnr = i_orders-plnbez. * * IF NOT ( rb_prod IS INITIAL ). **** Tell user we are Extracting goods receipt information * MOVE 'Extracting Goods Receipt Information'(024) TO v_output_text . * PERFORM inform_user_of_progress. * **** get the materials to process * PERFORM get_order_mats. * **** create alternate working tables for mat. mvts * i_mseg = i_mseg1. * i_msegs1 = i_msegs. * **** retain only order material in internal table and get order qty in **** base UoM * LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. * **** retain mat. mvts only for the main material of the PrO * DELETE i_mseg WHERE aufnr = %LTl_fs_orders%GT-aufnr * AND matnr %LT%GT %LTl_fs_orders%GT-plnbez. * * DELETE i_msegs1 WHERE aufnr = %LTl_fs_orders%GT-aufnr * AND matnr %LT%GT %LTl_fs_orders%GT-plnbez. * **** read material master for base UoM of material * CLEAR : wa_mara. * READ TABLE i_mara INTO wa_mara * WITH KEY matnr = %LTl_fs_orders%GT-plnbez. * IF sy-subrc = 0. * IF wa_mara-meins %LT%GT %LTl_fs_orders%GT-gmein. **** convert order quantity to base UoM * PERFORM conv_to_from_base USING 'X' * %LTl_fs_orders%GT-plnbez * %LTl_fs_orders%GT-gamng * %LTl_fs_orders%GT-gmein * wa_mara-meins * CHANGING %LTl_fs_orders%GT-bgamng * v_conv_rc. * ELSE. * %LTl_fs_orders%GT-bgamng = wa_orders-gamng. * ENDIF. * * %LTl_fs_orders%GT-bsuom = wa_mara-meins. * %LTl_fs_orders%GT-gewei = wa_mara-gewei. * %LTl_fs_orders%GT-ntgew = wa_mara-ntgew. * ENDIF. * ENDLOOP. * * SORT i_mseg BY aufnr. * SORT i_msegs1 BY aufnr. * SORT i_orders BY aufnr. * **** Calculatin the quantity according to the movement type and **** assign the value to i_orders internal table * LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. * CLEAR : wa_msegs. * READ TABLE i_msegs1 INTO wa_msegs * WITH KEY aufnr = %LTl_fs_orders%GT-aufnr * matnr = %LTl_fs_orders%GT-plnbez. * IF rb_ezero EQ c_x AND wa_msegs-bmenge1 = 0. **** Don't want zero production orders * DELETE i_afvc WHERE aufnr = %LTl_fs_orders%GT-aufnr. **MOD-004***************************************************** ** DELETE i_orders WHERE aufnr = %LTl_fs_orders%GT-aufnr. **MOD-004***************************************************** * CONTINUE. * ENDIF. * * %LTl_fs_orders%GT-erfmg = wa_msegs-erfmg1. * %LTl_fs_orders%GT-bmenge = wa_msegs-bmenge1. * %LTl_fs_orders%GT-gruom = wa_msegs-erfme. * ENDLOOP. * * ELSE. **** Here we're Extracting confirmation information * MOVE 'Extracting Confirmation Information'(025) TO v_output_text. * PERFORM inform_user_of_progress. * **** get order qty in base UoM and get base UoM and weight UoM * LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. * * CLEAR : wa_mara. * READ TABLE i_mara INTO wa_mara * WITH KEY matnr = %LTl_fs_orders%GT-plnbez. * * IF sy-subrc = 0. * IF wa_mara-meins %LT%GT wa_orders-gmein. **** convert order quantity to base UoM * PERFORM conv_to_from_base USING 'X' * %LTl_fs_orders%GT-plnbez * %LTl_fs_orders%GT-gamng * %LTl_fs_orders%GT-gmein * wa_mara-meins * CHANGING %LTl_fs_orders%GT-bgamng * v_conv_rc. * ELSE. * %LTl_fs_orders%GT-bgamng = %LTl_fs_orders%GT-gamng. * ENDIF. * * %LTl_fs_orders%GT-bsuom = wa_mara-meins. * %LTl_fs_orders%GT-gewei = wa_mara-gewei. * %LTl_fs_orders%GT-ntgew = wa_mara-ntgew. * ENDIF. * ENDLOOP. * **** Select confirmations using operation confirmation number instead of **** order number * CLEAR : i_afvv1 , i_afvc1 , i_afru , i_afru1. **** get 'bottleneck' phases * LOOP AT i_afvc INTO wa_afvc WHERE steus = 'YBN1' * AND phflg = c_x. * APPEND wa_afvc TO i_afvc1. **** get 'bottleneck' phase values * LOOP AT i_afvv INTO wa_afvv WHERE aufpl = wa_afvc-aufpl * AND aplzl = wa_afvc-aplzl. * APPEND wa_afvv TO i_afvv1. * ENDLOOP. * ENDLOOP. * * IF NOT i_afvc1 IS INITIAL. * SORT i_afvc1 BY aufpl aplzl plnkn plnty plnnr. **** get confirmations for the various phases * SELECT aufnr * rueck * gmnga * lmnga * gmein * meinh * meilr * stokz * rueck_mst * aufpl * aplzl * INTO TABLE i_afru * FROM afru * FOR ALL ENTRIES IN i_afvc * WHERE rueck = i_afvc-rueck * AND werks = p_werks * AND aufpl = i_afvc-aufpl * AND aplzl = i_afvc-aplzl. * * SORT i_afru BY aufnr rueck aufpl aplzl. * * LOOP AT i_afvc1 INTO wa_afvc. * LOOP AT i_afru INTO wa_afru * WHERE aufnr = wa_afvc-aufnr * AND rueck = wa_afvc-rueck * AND aufpl = wa_afvc-aufpl * AND aplzl = wa_afvc-aplzl. **** get 'bottleneck' related confirmations * APPEND wa_afru TO i_afru1. * ENDLOOP. * ENDLOOP. * * IF NOT i_afvv1 IS INITIAL. * SORT i_afvv1 BY aufpl aplzl. * **** get total confirmation on order for 'bottleneck' phases, **** this will be the confirmed qty for whole order * LOOP AT i_afvc ASSIGNING %LTl_fs_afvc%GT. * * wa_afvc = %LTl_fs_afvc%GT. **** ensuring the phase is related to a valid PrO * CLEAR : wa_orders. * READ TABLE i_orders INTO wa_orders * WITH KEY aufnr = wa_afvc-aufnr. * IF sy-subrc = 0. **** is it a bottleneck phase? * READ TABLE i_afvc1 INTO wa_afvc1 * WITH KEY aufpl = wa_orders-aufpl * plnty = wa_afvc-plnty * plnnr = wa_afvc-plnnr * plnkn = wa_afvc-plnkn * zaehl = wa_afvc-zaehl. * IF sy-subrc = 0. **** get phase operation values * READ TABLE i_afvv1 INTO wa_afvv1 * WITH KEY aufpl = wa_afvc1-aufpl * aplzl = wa_afvc1-aplzl * BINARY SEARCH. * IF sy-subrc = 0. **** does the phase have any std runtime m/c confirmations * CHECK wa_afvv1-vgw02 NE 0. * **** get actual bottleneck phase confirmations * PERFORM get_confirmation_qty_new * USING wa_orders-aufnr * wa_afvc1-rueck * wa_afvc1-aufpl * wa_afvc1-aplzl * CHANGING * wa_afvc-lmnga * wa_afvc-cfuom. **** save confirmation values against phase * %LTl_fs_afvc%GT-lmnga = wa_afvc-lmnga. * %LTl_fs_afvc%GT-cfuom = wa_afvc-cfuom. * ENDIF. * ENDIF. * ENDIF. * ENDLOOP. * ENDIF. * ENDIF. * **** retain only bottleneck related confirmation phases, **** as this gives confirmation qty for order * i_afvc2 = i_afvc. * IF rb_ezero = c_x. **** no zero confirmation qty phases wanted * DELETE i_afvc2 WHERE lmnga EQ 0. * ENDIF. * DELETE ADJACENT DUPLICATES FROM i_afvc2 * COMPARING aufnr * aufpl * aplzl * plnkn * plnty * plnnr * zaehl * vornr. * **** get order qty in base UoM and get base UoM and weight UoM * LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. * **** get confirmed qty * READ TABLE i_afvc2 INTO wa_afvc * WITH KEY aufnr = %LTl_fs_orders%GT-aufnr. * IF sy-subrc = 0. * %LTl_fs_orders%GT-lmnga = wa_afvc-lmnga. * %LTl_fs_orders%GT-cfuom = wa_afvc-cfuom. * * IF %LTl_fs_orders%GT-cfuom %LT%GT %LTl_fs_orders%GT-bsuom. **** convert confirmation quantity to base UoM * PERFORM conv_to_from_base USING 'X' * %LTl_fs_orders%GT-plnbez * %LTl_fs_orders%GT-lmnga * %LTl_fs_orders%GT-cfuom * %LTl_fs_orders%GT-bsuom * CHANGING %LTl_fs_orders%GT-blmnga * v_conv_rc. * ELSE. * %LTl_fs_orders%GT-blmnga = %LTl_fs_orders%GT-lmnga. * ENDIF. * * ELSE. **** if the order has no confirmed qty against it, remove it **** from further processing * %LTl_fs_orders%GT-del = c_x. * ENDIF. * ENDLOOP. **MOD-004********************************** * DELETE i_orders WHERE del = c_x. **MOD-004********************************** * ENDIF. * ENDIF. *ENDFORM. " get_mat_segment * **&--------------------------------------------------------------------- * **& Form get_confirmation_qty_new **&--------------------------------------------------------------------- * *FORM get_confirmation_qty_new USING fp_aufnr TYPE aufnr * fp_rueck TYPE co_rueck * fp_aufpl TYPE co_aufpl * fp_aplzl TYPE co_aplzl * CHANGING fp_lmnga TYPE ru_lmnga * fp_cfuom TYPE meins. * * DATA: last_lmnga TYPE ru_lmnga, * last_lmnga1 TYPE ru_lmnga, * last_lmnga2 TYPE ru_lmnga, * * l_v_meinh TYPE ru_vorme. * * CLEAR: last_lmnga. * ** Check this record. If there is no link to another confirmation and ** a quantity has been confirmed and it is a milestone confirmation ** then we want to select all of the confirmations for it. * LOOP AT i_afru1 INTO wa_afru1 WHERE aufnr = fp_aufnr * AND rueck = fp_rueck * AND aufpl = fp_aufpl * AND aplzl = fp_aplzl. * CHECK wa_afru1-lmnga NE 0. * * IF l_v_meinh IS INITIAL. * l_v_meinh = wa_afru1-meinh. * ENDIF. * * last_lmnga1 = wa_afru1-lmnga. * * IF l_v_meinh %LT%GT wa_afru1-meinh. * CLEAR : last_lmnga2. * PERFORM conv_to_from_base USING 'X' * wa_orders-plnbez * wa_afru1-lmnga * wa_afru1-meinh * wa_orders-bsuom * CHANGING last_lmnga2 * v_conv_rc. * * PERFORM conv_to_from_base USING ' ' * wa_orders-plnbez * last_lmnga2 * l_v_meinh * wa_orders-bsuom * CHANGING last_lmnga1 * v_conv_rc. * * ENDIF. * * IF wa_afru1-stokz IS INITIAL. * last_lmnga = last_lmnga + last_lmnga1. * ELSE. * last_lmnga = last_lmnga - last_lmnga1. * ENDIF. * ENDLOOP. * * MOVE last_lmnga TO fp_lmnga. * fp_cfuom = l_v_meinh. * *ENDFORM. " get_confirmation_qty_new * **&--------------------------------------------------------------------- * **& Form get_bom_info **&--------------------------------------------------------------------- * *FORM get_bom_info. * DATA: l_tabix TYPE sytabix, * * l_v_kausf TYPE kausf, * * l_v_dmeng TYPE ty_menge, * l_v_dmengs TYPE ty_menge, * l_v_dmengz TYPE ty_menge, * * l_v_menge TYPE kmpmg, * * l_v_mnglg TYPE cs_e_mnglg, * l_v_mnglgs TYPE cs_e_mnglg, * l_v_mnglgz TYPE cs_e_mnglg, * * l_i_bomapp TYPE STANDARD TABLE OF ty_bomapp, * l_wa_bomapp TYPE ty_bomapp, * * l_idx TYPE ttidx. "NEEL 4/6/2005 * * FIELD-SYMBOLS : %LTl_fs_orders%GT TYPE ty_orders, * %LTl_fs_ordmats%GT TYPE ty_ordmats. * * IF NOT i_orders[] IS INITIAL. ** this tells users whats happening * MOVE 'Extracting BOM Information'(026) TO v_output_text. * PERFORM inform_user_of_progress. * ** Get order related bom appln * CLEAR : l_i_bomapp. * * SELECT werks * auart * capid * FROM t399x * INTO TABLE l_i_bomapp * FOR ALL ENTRIES IN i_orders * WHERE werks = i_orders-werks * AND auart = i_orders-auart. * * SORT l_i_bomapp BY werks auart. * ** Get issued materials for all process orders * IF i_mseg1 IS INITIAL. ** get materials to process * PERFORM get_order_mats. * * i_mseg = i_mseg1. * i_msegs1 = i_msegs. * ENDIF. * * LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. * DELETE i_mseg WHERE aufnr = %LTl_fs_orders%GT-aufnr * AND matnr %LT%GT %LTl_fs_orders%GT-plnbez. * * DELETE i_msegs1 WHERE aufnr = %LTl_fs_orders%GT-aufnr * AND matnr %LT%GT %LTl_fs_orders%GT-plnbez. * * * CLEAR : l_wa_bomapp. **** Assign a default in case read fails * l_wa_bomapp-capid = 'PI01'. * READ TABLE l_i_bomapp INTO l_wa_bomapp * WITH KEY werks = %LTl_fs_orders%GT-werks * auart = %LTl_fs_orders%GT-auart * BINARY SEARCH. **** Get BOM application id * %LTl_fs_orders%GT-capid = l_wa_bomapp-capid. * **** Get list of materials that have been issued * LOOP AT i_mseg1 INTO wa_issued_mat * WHERE aufnr = %LTl_fs_orders%GT-aufnr * AND bwart IN i_r_bwart. * APPEND wa_issued_mat TO i_issued_mat. * ENDLOOP. * ENDLOOP. * * CLEAR : i_bomdat. ** do BOM explosion and get related BOM data for the materials * LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. **** build key table for later selection from table PLPO, **** the master recipe table * wa_plpo_sel-plnty = %LTl_fs_orders%GT-plnty. * wa_plpo_sel-plnnr = %LTl_fs_orders%GT-plnnr. * wa_plpo_sel-zaehl = %LTl_fs_orders%GT-zaehl. * APPEND wa_plpo_sel TO i_plpo_sel. * **** build key table for later selection from table AFRU, **** the confirmations table * wa_afru_sel-rueck = %LTl_fs_orders%GT-rueck. * APPEND wa_afru_sel TO i_afru_sel. * * l_tabix = sy-tabix. * * CLEAR : wa_tmat , i_stbtmp , wa_bomdat. **** check if same BOM has been retrieved before * READ TABLE i_bomdat INTO wa_bomdat * WITH KEY capid = %LTl_fs_orders%GT-capid * datuv = %LTl_fs_orders%GT-sdatv * mtnrv = %LTl_fs_orders%GT-plnbez * stlal = %LTl_fs_orders%GT-stlal * stlan = %LTl_fs_orders%GT-stlan * werks = %LTl_fs_orders%GT-werks. * IF sy-subrc = 0. **** if yes then use it * wa_tmat = wa_bomdat-tmat. * i_stbtmp = wa_bomdat-stb. * * ELSE. **** if no then get BOM explosion * CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' * EXPORTING * aumgb = 'X' * capid = %LTl_fs_orders%GT-capid ** datuv = %LTl_fs_orders%GT-sdatv **** Begin of change on 31-05-2005 * datuv = %LTl_fs_orders%GT-aufld * " 31-05-2005 **** End of change on 31-05-2005 * mbwls = 'X' * mehrs = 'X' * mtnrv = %LTl_fs_orders%GT-plnbez * stlal = %LTl_fs_orders%GT-stlal * stlan = %LTl_fs_orders%GT-stlan * werks = %LTl_fs_orders%GT-werks * IMPORTING * topmat = wa_tmat * TABLES * stb = i_stbtmp ** matcat = i_cmat * 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 * conversion_error = 8 * OTHERS = 9. * IF sy-subrc = 0. **** add to BOM buffer table * wa_bomdat-capid = %LTl_fs_orders%GT-capid. * wa_bomdat-datuv = %LTl_fs_orders%GT-sdatv. * wa_bomdat-mtnrv = %LTl_fs_orders%GT-plnbez. * wa_bomdat-stlal = %LTl_fs_orders%GT-stlal. * wa_bomdat-stlan = %LTl_fs_orders%GT-stlan. * wa_bomdat-werks = %LTl_fs_orders%GT-werks. * wa_bomdat-tmat = wa_tmat. * wa_bomdat-stb = i_stbtmp. * * INSERT wa_bomdat INTO TABLE i_bomdat. * * DELETE i_stbtmp WHERE schgt = c_x. * ENDIF. * ENDIF. * * * IF NOT i_stbtmp IS INITIAL. **** First get the primary level values from the exploded BOM * LOOP AT i_stbtmp INTO wa_stb WHERE stlal = %LTl_fs_orders%GT-stlal * AND stlan = %LTl_fs_orders%GT-stlan * AND stlty = %LTl_fs_orders%GT-stlty * AND stlnr = %LTl_fs_orders%GT-stlnr. * * CHECK wa_stb-postp %LT%GT 'N'. * * CLEAR : wa_ordmats. * wa_ordmats-aufnr = %LTl_fs_orders%GT-aufnr. * wa_ordmats-matnr = wa_stb-idnrk. * wa_ordmats-mtart = wa_stb-mtart. * wa_ordmats-stufe = wa_stb-stufe. **%GT%GTNEEL 4/6/2005 * wa_ordmats-wegxx = wa_stb-wegxx. * wa_ordmats-ttidx = wa_stb-ttidx. * wa_ordmats-vwegx = wa_stb-vwegx. **%LT%LTNEEL 4/6/2005 * wa_ordmats-ojtxb = wa_stb-ojtxb. * wa_ordmats-ojtxp = wa_stb-ojtxp. * * wa_ordmats-ausch = wa_stb-ausch. ** wa_ordmats-yyzero = wa_stb-yyzero. * * IF NOT wa_stb-ausch IS INITIAL. * l_v_kausf = 1 + ( wa_stb-ausch / 100 ). * ELSE. * l_v_kausf = 1 + ( wa_stb-kausf / 100 ). * ENDIF. * * wa_ordmats-kausf = l_v_kausf. * * wa_ordmats-menge = wa_stb-menge. * wa_ordmats-menges = wa_stb-menge * wa_ordmats-kausf. ** wa_ordmats-mengez = wa_stb-menge * wa_ordmats-yyzero. * wa_ordmats-meins = wa_stb-meins. * * wa_ordmats-xmeng = wa_stb-xmeng. * wa_ordmats-xmengs = wa_stb-xmeng * wa_ordmats-kausf. ** wa_ordmats-xmengz = wa_stb-xmeng * wa_ordmats-yyzero. * * wa_ordmats-xmein = wa_stb-xmein. * * wa_ordmats-mnglg = wa_stb-mnglg. * wa_ordmats-mnglgs = wa_stb-mnglg. * wa_ordmats-mnglgz = wa_stb-mnglg. * wa_ordmats-mmein = wa_stb-mmein. * wa_ordmats-msign = wa_stb-msign. * wa_ordmats-postp = wa_stb-postp. * * IF wa_stb-kzkup = space AND wa_stb-msign = '-'. * wa_ordmats-byprod = c_x. * ENDIF. * * wa_ordmats-stprs = wa_stb-stprs. * wa_ordmats-peinh = wa_stb-preih. * * wa_ordmats-bom = c_x. * * wa_ordmats-stlty = wa_stb-stlty. * wa_ordmats-stlnr = wa_stb-stlnr. * wa_ordmats-stlkn = wa_stb-stlkn. * wa_ordmats-stpoz = wa_stb-stpoz. * * APPEND wa_ordmats TO i_ordmats. * ENDLOOP. * **** now recurse into exploded BOM to get lower level details * LOOP AT i_ordmats ASSIGNING %LTl_fs_ordmats%GT WHERE bomd %LT%GT c_x. * * IF %LTl_fs_ordmats%GT-xmeng %GT 0. * l_v_dmeng = %LTl_fs_ordmats%GT-menge / %LTl_fs_ordmats%GT-xmeng. * l_v_dmengs = %LTl_fs_ordmats%GT-menges / %LTl_fs_ordmats%GT-xmeng. * l_v_dmengz = %LTl_fs_ordmats%GT-mengez / %LTl_fs_ordmats%GT-xmeng. * * ELSE. * l_v_dmeng = 1. * l_v_dmengs = 1. * l_v_dmengz = 1. * ENDIF. * * * l_idx = %LTl_fs_ordmats%GT-stufe + 1. "NEEL 4/6/2005++ * LOOP AT i_stbtmp INTO wa_stb ** WHERE ojtxb = %LTl_fs_ordmats%GT-ojtxp. NEEL-- * WHERE ttidx = l_idx "NEEL 4/6/2005 * AND vwegx = %LTl_fs_ordmats%GT-wegxx. * CLEAR : wa_ordmats. * wa_ordmats-aufnr = %LTl_fs_orders%GT-aufnr. * wa_ordmats-matnr = wa_stb-idnrk. * wa_ordmats-mtart = wa_stb-mtart. * wa_ordmats-stufe = wa_stb-stufe. **%GT%GTNEEL 4/6/2005 * wa_ordmats-wegxx = wa_stb-wegxx. * wa_ordmats-ttidx = wa_stb-ttidx. * wa_ordmats-vwegx = wa_stb-vwegx. **%LT%LTNEEL 4/6/2005 * wa_ordmats-ojtxb = wa_stb-ojtxb. * wa_ordmats-ojtxp = wa_stb-ojtxp. * * wa_ordmats-ausch = wa_stb-ausch. ** wa_ordmats-yyzero = wa_stb-yyzero. * * IF NOT wa_stb-ausch IS INITIAL. * l_v_kausf = 1 + ( wa_stb-ausch / 100 ). * ELSE. * l_v_kausf = 1 + ( wa_stb-kausf / 100 ). * ENDIF. * wa_ordmats-kausf = l_v_kausf. * * l_v_menge = wa_stb-menge * l_v_dmengs. * wa_ordmats-menges = l_v_menge * wa_ordmats-kausf. * * l_v_menge = wa_stb-menge * l_v_dmengz. ** wa_ordmats-mengez = l_v_menge * wa_ordmats-yyzero. * * l_v_menge = wa_stb-menge * l_v_dmeng. * wa_ordmats-menge = l_v_menge. * * wa_ordmats-meins = wa_stb-meins. * * l_v_mnglg = wa_ordmats-menge. * l_v_mnglgs = wa_ordmats-menges. * l_v_mnglgz = wa_ordmats-mengez. * * IF wa_stb-meins = wa_stb-mmein. * wa_ordmats-mnglg = l_v_mnglg. * wa_ordmats-mnglgs = l_v_mnglgs. * wa_ordmats-mnglgz = l_v_mnglgz. * * ELSE. ** convert BOM quantity to base UoM * PERFORM conv_to_from_base USING 'X' * wa_ordmats-matnr * l_v_mnglg * wa_ordmats-meins * wa_ordmats-mmein * CHANGING wa_ordmats-mnglg * v_conv_rc. * * PERFORM conv_to_from_base USING 'X' * wa_ordmats-matnr * l_v_mnglgs * wa_ordmats-meins * wa_ordmats-mmein * CHANGING wa_ordmats-mnglgs * v_conv_rc. * * PERFORM conv_to_from_base USING 'X' * wa_ordmats-matnr * l_v_mnglgz * wa_ordmats-meins * wa_ordmats-mmein * CHANGING wa_ordmats-mnglgz * v_conv_rc. * ENDIF. * wa_ordmats-mmein = wa_stb-mmein. * wa_ordmats-msign = wa_stb-msign. * * wa_ordmats-xmeng = wa_stb-xmeng. * wa_ordmats-xmengs = wa_stb-xmeng * wa_ordmats-kausf. ** wa_ordmats-xmengz = wa_stb-xmeng * wa_ordmats-yyzero. * * wa_ordmats-xmein = wa_stb-xmein. * * wa_ordmats-stprs = wa_stb-stprs. * wa_ordmats-peinh = wa_stb-preih. ** wa_ordmats-yyzero = wa_stb-yyzero. * wa_ordmats-bom = c_x. * * wa_ordmats-stlty = wa_stb-stlty. * wa_ordmats-stlnr = wa_stb-stlnr. * wa_ordmats-stlkn = wa_stb-stlkn. * wa_ordmats-stpoz = wa_stb-stpoz. * * APPEND wa_ordmats TO i_ordmats. * ENDLOOP. * * %LTl_fs_ordmats%GT-bomd = c_x. * ENDLOOP. * * %LTl_fs_orders%GT-maktx = wa_tmat-maktx. * %LTl_fs_orders%GT-bmeng = wa_tmat-bmeng. * %LTl_fs_orders%GT-bmein = wa_tmat-bmein. * %LTl_fs_orders%GT-kausf = wa_tmat-kausf. * * IF %LTl_fs_orders%GT-bmein %LT%GT %LTl_fs_orders%GT-bsuom. ** convert BOM base quantity to base UoM * PERFORM conv_to_from_base USING 'X' * %LTl_fs_orders%GT-plnbez * %LTl_fs_orders%GT-bmeng * %LTl_fs_orders%GT-bmein * %LTl_fs_orders%GT-bsuom * CHANGING %LTl_fs_orders%GT-bbmeng * v_conv_rc. * ELSE. * %LTl_fs_orders%GT-bbmeng = %LTl_fs_orders%GT-bmeng. * ENDIF. * ENDIF. * ENDLOOP. * * SORT i_ordmats BY aufnr matnr. * ** Selecting reservations for order * SELECT rsnum rspos rsart xloek matnr werks bdmng meins shkzg * aufnr dumps aufpl vornr aplzl * postp kzkup rgekz ausch * stlty stlnr stlkn stpoz bwart * FROM resb INTO TABLE i_resb * FOR ALL ENTRIES IN i_orders * WHERE rsnum = i_orders-rsnum ** AND xloek = ' ' * AND aufnr = i_orders-aufnr * AND bdmng %GT 0 * AND dumps = space * AND postp %LT%GT 'N' * AND schgt = space. * * LOOP AT i_resb INTO wa_resb. * READ TABLE i_issued_mat INTO wa_issued_mat * WITH KEY matnr = wa_resb-matnr. * CHECK sy-subrc %LT%GT 0. **** If a material was issued but is not part of the PrO **** reservations, add it to list * CLEAR : wa_issued_mat. * wa_issued_mat-matnr = wa_resb-matnr. * wa_issued_mat-werks = wa_resb-werks. * APPEND wa_issued_mat TO i_issued_mat. * ENDLOOP. * ** we just need the issued mat numbers not captured by BOM explosion * SORT i_issued_mat BY matnr. * DELETE ADJACENT DUPLICATES FROM i_issued_mat COMPARING matnr. * * IF NOT i_issued_mat IS INITIAL. ** get material master data * SELECT matnr * mtart * meins * gewei * FROM mara * APPENDING TABLE i_mara * FOR ALL ENTRIES IN i_issued_mat * WHERE matnr = i_issued_mat-matnr. * ** getting pricing data * CLEAR : i_mbew1 , i_material_des. * SELECT matnr bwkey stprs peinh * FROM mbew * INTO TABLE i_mbew1 * FOR ALL ENTRIES IN i_issued_mat * WHERE matnr = i_issued_mat-matnr * AND bwkey = i_issued_mat-werks. * ** Selecting material descriptions * SELECT matnr maktx * FROM makt * INTO TABLE i_material_des * FOR ALL ENTRIES IN i_issued_mat * WHERE spras = sy-langu * AND matnr = i_issued_mat-matnr. * ENDIF. * ** prepare selection table for selecting from AFRU * LOOP AT i_afvc INTO wa_afvc. * wa_plpo_sel-plnty = wa_afvc-plnty. * wa_plpo_sel-plnnr = wa_afvc-plnnr. * wa_plpo_sel-plnkn = wa_afvc-plnkn. * wa_plpo_sel-zaehl = wa_afvc-zaehl. * APPEND wa_plpo_sel TO i_plpo_sel. * * wa_afru_sel-rueck = wa_afvc-rueck. * APPEND wa_afru_sel TO i_afru_sel. * ENDLOOP. * * SORT : i_plpo_sel , i_afru_sel. * * DELETE ADJACENT DUPLICATES FROM i_plpo_sel. * DELETE ADJACENT DUPLICATES FROM i_afru_sel. * ** Retrieve task list information of operations/activity from PLPO table * SELECT * * FROM plpo * INTO TABLE i_plpo * FOR ALL ENTRIES IN i_plpo_sel * WHERE plnty = i_plpo_sel-plnty * AND plnnr = i_plpo_sel-plnnr * AND zaehl = i_plpo_sel-zaehl. * IF sy-subrc = 0. * SORT i_plpo BY plnty plnnr plnkn datuv DESCENDING. * ENDIF. ** get confirmation data for order and its items * SELECT rueck * rmzhl * ism01 * ile01 * ism02 * ile02 * ism03 * ile03 * ism04 * ile04 * ism05 * ile05 * ism06 * ile06 * stokz * FROM afru * INTO TABLE i_ord_conf * FOR ALL ENTRIES IN i_afru_sel * WHERE rueck = i_afru_sel-rueck. * ENDIF. * * IF NOT i_afvc IS INITIAL. * LOOP AT i_afvc INTO wa_afvc. **** get master recipe records for selected phases * LOOP AT i_plpo INTO wa_plpo WHERE plnty = wa_afvc-plnty * AND plnnr = wa_afvc-plnnr * AND plnkn = wa_afvc-plnkn * AND zaehl = wa_afvc-zaehl. * APPEND wa_plpo TO i_plpo1. * ENDLOOP. * **** get confirmation records for selected phases * LOOP AT i_ord_conf INTO wa_ord_conf WHERE rueck = wa_afvc-rueck. * APPEND wa_ord_conf TO i_ord_conf1. * ENDLOOP. * ENDLOOP. * * SORT i_plpo1 BY plnty plnnr plnkn zaehl datuv DESCENDING. * ENDIF. * * UNASSIGN : %LTl_fs_orders%GT. *ENDFORM. " get_bom_info * **&--------------------------------------------------------------------* **& Form build_output_tabs **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM build_output_tabs. * DATA : l_qty TYPE gamng, * l_effic TYPE vgwrt, * l_tmp TYPE vgwrt, * l_tmp1 TYPE vgwrt, * * l_lmnga TYPE lmnga, * * l_v_rc TYPE char1, * l_v_kausf TYPE kausf, * l_v_sumi TYPE char1, * * l_v_smeng TYPE ty_menge, * l_v_smengs TYPE ty_menge, * l_v_smengz TYPE ty_menge, * * l_wa_afvv TYPE ty_afvv. * * FIELD-SYMBOLS : %LTl_fs_resb%GT TYPE ty_resb. * * MOVE 'Formatting Output'(027) TO v_output_text. * PERFORM inform_user_of_progress. * * CLEAR: i_marc1. * SELECT matnr * werks * frtme * FROM marc * INTO TABLE i_marc1 * FOR ALL ENTRIES IN i_orders * WHERE matnr = i_orders-plnbez * AND werks = i_orders-werks. ** Not required to handle, ok if prod unit not found * ** get parameter IDs * SELECT vgwts * par01 * par02 * par03 * par04 * par05 * par06 * FROM tc21 * INTO TABLE i_param * FOR ALL ENTRIES IN i_afvc * WHERE vgwts = i_afvc-vgwts. * * IF sy-subrc = 0. ** get parameter ID texts * SELECT parid * txtlg * FROM tc20t * INTO TABLE i_param_key * FOR ALL ENTRIES IN i_param * WHERE spras = sy-langu * AND ( parid = i_param-par01 * OR parid = i_param-par02 * OR parid = i_param-par03 * OR parid = i_param-par04 * OR parid = i_param-par05 * OR parid = i_param-par06 ). * ENDIF. * ** Selecting Work centers descriptions * SELECT objid ktext * FROM crtx * INTO TABLE i_wc_text * FOR ALL ENTRIES IN i_afvc * WHERE objty = c_objtyp * AND objid = i_afvc-arbid * AND spras = sy-langu. **Work centers descriptions are optional * * SELECT matnr bwkey stprs peinh * FROM mbew * APPENDING TABLE i_mbew1 * FOR ALL ENTRIES IN i_orders * WHERE matnr = i_orders-plnbez * AND bwkey = i_orders-werks. * * LOOP AT i_orders INTO wa_orders. **** **** Build Order Table **** * wa_h_ord-aufnr = wa_orders-aufnr. * * wa_h_ord-gltrp = wa_orders-gltrp. * wa_h_ord-gstrp = wa_orders-gstrp. * * wa_h_ord-plnbez = wa_orders-plnbez. * wa_h_ord-maktx = wa_orders-maktx. * * wa_h_ord-lmnga = wa_orders-lmnga. * wa_h_ord-blmnga = wa_orders-blmnga. * wa_h_ord-bmenge = wa_orders-bmenge. * wa_h_ord-bgamng = wa_orders-bgamng. * wa_h_ord-bbmeng = wa_orders-bbmeng. * * wa_h_ord-gruom = wa_orders-gruom. * wa_h_ord-cfuom = wa_orders-cfuom. * wa_h_ord-bsuom = wa_orders-bsuom. * * CLEAR : wa_marc1. * READ TABLE i_marc1 INTO wa_marc1 WITH KEY matnr = wa_orders-plnbez * werks = wa_orders-werks. * wa_h_ord-frtme = wa_marc1-frtme. * wa_h_ord-gewei = wa_orders-gewei. * wa_h_ord-ntgew = wa_orders-ntgew. * * IF rb_pland = c_x. ** Planned Production Quantities * wa_h_ord-prduom = wa_h_ord-frtme. * wa_h_ord-prdqty = wa_h_ord-bgamng. * ELSE. ** Actual Production Quantities * IF rb_prod = c_x. **** Produced Qty * wa_h_ord-prdqty = wa_h_ord-bmenge. * wa_h_ord-prduom = wa_h_ord-gruom. * ELSE. **** Confirmed Qty * wa_h_ord-prdqty = wa_h_ord-blmnga. * wa_h_ord-prduom = wa_h_ord-cfuom. * ENDIF. * ENDIF. * * wa_h_ord-bprdqty = wa_h_ord-prdqty. * * IF wa_h_ord-prduom %LT%GT wa_h_ord-bsuom. * l_qty = wa_h_ord-prdqty. * PERFORM conv_to_from_base USING ' ' * wa_h_ord-plnbez * l_qty * wa_h_ord-prduom * wa_h_ord-bsuom * CHANGING wa_h_ord-prdqty * v_conv_rc. * IF v_conv_rc = 'X'. * wa_h_ord-prdqty = l_qty. * wa_h_ord-prduom = wa_h_ord-bsuom. * ENDIF. * ENDIF. * ** Resource Information * CLEAR : wa_afvc , wa_crhd , wa_wc_text. * READ TABLE i_afvc INTO wa_afvc WITH KEY aufpl = wa_orders-aufpl * steus = 'YBN1'. * IF sy-subrc = 0. * READ TABLE i_crhd INTO wa_crhd WITH KEY objid = wa_afvc-arbid. * READ TABLE i_wc_text INTO wa_wc_text WITH KEY objid = * wa_afvc-arbid. * ENDIF. * * wa_h_ord-botlnck = wa_crhd-arbpl. * wa_h_ord-resdesc = wa_wc_text-ktext. * ** Expected Line Efficiency * CLEAR : i_plpo2 , l_effic. * LOOP AT i_plpo1 INTO wa_plpo WHERE plnty = wa_orders-plnty * AND plnnr = wa_orders-plnnr * AND steus = 'YBN1'. * IF NOT wa_plpo-vgw02 IS INITIAL. * l_effic = wa_plpo-usr04. * * wa_plpo2 = wa_plpo. * APPEND wa_plpo2 TO i_plpo2. * ENDIF. * ENDLOOP. * * wa_h_ord-el_effc = l_effic. * ** Actual Line Efficiency * CLEAR : l_tmp , l_tmp1 , l_effic. * LOOP AT i_plpo2 INTO wa_plpo2. * CLEAR: wa_afvc, wa_afvv , l_effic. * READ TABLE i_afvc INTO wa_afvc WITH KEY plnty = wa_plpo2-plnty * plnnr = wa_plpo2-plnnr * plnkn = wa_plpo2-plnkn * zaehl = wa_plpo2-zaehl * aufpl = wa_orders-aufpl. * IF sy-subrc = 0. * READ TABLE i_afvv INTO wa_afvv WITH KEY aufpl = wa_afvc-aufpl * aplzl = wa_afvc-aplzl. * IF wa_plpo2-vgw02 %LT%GT 0. * l_tmp = wa_plpo2-bmsch / wa_plpo2-vgw02. * * IF l_tmp %LT%GT 0. * l_tmp1 = wa_afvv-lmnga / l_tmp. * * IF wa_afvv-ism02 %LT%GT 0. * l_tmp1 = ( l_tmp1 / wa_afvv-ism02 ) * 100. * MOVE l_tmp1 TO l_effic. * ENDIF. * ENDIF. * ENDIF. * ENDIF. * ENDLOOP. * * wa_h_ord-ac_effc = l_effic. * * CLEAR : wa_mbew1. * READ TABLE i_mbew1 INTO wa_mbew1 WITH KEY matnr = wa_orders-plnbez * bwkey = wa_orders-werks. * wa_h_ord-stprs = wa_mbew1-stprs. * wa_h_ord-peinh = wa_mbew1-peinh. * * APPEND wa_h_ord TO i_h_ord. * **** **** Build Phase Table **** * LOOP AT i_afvc INTO wa_afvc WHERE aufnr = wa_orders-aufnr * AND aufpl = wa_orders-aufpl. * CLEAR : wa_h_phs. * * wa_h_phs-aufnr = wa_afvc-aufnr. * wa_h_phs-aufpl = wa_afvc-aufpl. * wa_h_phs-aplzl = wa_afvc-aplzl. * wa_h_phs-vornr = wa_afvc-vornr. * * wa_h_phs-steus = wa_afvc-steus. * wa_h_phs-rueck = wa_afvc-rueck. * wa_h_phs-vgwts = wa_afvc-vgwts. * wa_h_phs-ltxa1 = wa_afvc-ltxa1. * * IF wa_afvc-cfuom IS INITIAL. * CLEAR : wa_afvv, l_lmnga. * LOOP AT i_afvv INTO l_wa_afvv WHERE aufpl = wa_afvc-aufpl * AND aplzl = wa_afvc-aplzl. * wa_h_phs-lmnga = wa_h_phs-lmnga + l_wa_afvv-lmnga. * ENDLOOP. * wa_h_phs-cfuom = l_wa_afvv-meinh. * * ELSE. * wa_h_phs-lmnga = wa_afvc-lmnga. * wa_h_phs-cfuom = wa_afvc-cfuom. * ** afvv contains std vals for operation qty * CLEAR : l_wa_afvv. * READ TABLE i_afvv INTO l_wa_afvv * WITH KEY aufpl = wa_afvc-aufpl * aplzl = wa_afvc-aplzl. * ENDIF. * * wa_h_phs-bsuom = wa_h_ord-bsuom. * wa_h_phs-gewei = wa_h_ord-gewei. * wa_h_phs-ntgew = wa_h_ord-ntgew. * * IF wa_h_phs-cfuom %LT%GT wa_h_phs-bsuom. * l_lmnga = wa_h_phs-lmnga. * PERFORM conv_to_from_base USING 'X' * wa_h_ord-plnbez * l_lmnga * wa_h_phs-cfuom * wa_h_phs-bsuom * CHANGING wa_h_phs-blmnga * v_conv_rc. * IF v_conv_rc = 'X'. * CLEAR : wa_h_phs-blmnga. * ENDIF. * * ELSE. * wa_h_phs-blmnga = wa_h_phs-lmnga. * ENDIF. * * IF rb_actl = c_x AND rb_conf = c_x. * wa_h_phs-prduom = wa_h_ord-cfuom. * wa_h_phs-prdqty = wa_h_ord-lmnga. * wa_h_phs-bprdqty = wa_h_ord-blmnga. * * ELSE. * wa_h_phs-prduom = wa_h_ord-prduom. * wa_h_phs-prdqty = wa_h_ord-prdqty. * wa_h_phs-bprdqty = wa_h_ord-bprdqty. * ENDIF. * * wa_h_phs-arbid = wa_afvc-arbid. * * CLEAR : wa_crhd , wa_wc_text. * READ TABLE i_crhd INTO wa_crhd WITH KEY objid = wa_afvc-arbid. * * READ TABLE i_wc_text INTO wa_wc_text * WITH KEY objid = wa_afvc-arbid. * * wa_h_phs-arbpl = wa_crhd-arbpl. * wa_h_phs-ktext = wa_wc_text-ktext. * * IF wa_h_phs-steus = 'YBN1'. ** Expected Line Efficiency * CLEAR : i_plpo2 , l_effic. * LOOP AT i_plpo1 INTO wa_plpo WHERE plnty = wa_afvc-plnty * AND plnnr = wa_afvc-plnnr * AND plnkn = wa_afvc-plnkn * AND zaehl = wa_afvc-zaehl * AND steus = 'YBN1'. * IF NOT wa_plpo-vgw02 IS INITIAL. * l_effic = wa_plpo-usr04. * * wa_plpo2 = wa_plpo. * APPEND wa_plpo2 TO i_plpo2. * ENDIF. * ENDLOOP. * * wa_h_phs-el_effc = l_effic. * ** Actual Line Efficiency * CLEAR : l_tmp , l_tmp1 , l_effic. * LOOP AT i_plpo2 INTO wa_plpo2. * CLEAR: l_effic. * IF wa_plpo2-vgw02 %LT%GT 0. * l_tmp = wa_plpo2-bmsch / wa_plpo2-vgw02. * * IF l_tmp %LT%GT 0. * l_tmp1 = l_wa_afvv-lmnga / l_tmp. * * IF l_wa_afvv-ism02 %LT%GT 0. * l_tmp1 = ( l_tmp1 / l_wa_afvv-ism02 ) * 100. * MOVE l_tmp1 TO l_effic. * * wa_h_phs-runtime = c_x. * ENDIF. * ENDIF. * ENDIF. * ENDLOOP. * * wa_h_phs-ac_effc = l_effic. * ENDIF. **** **** Build Phase-Activity Table **** * CLEAR : l_v_rc. * PERFORM build_act_tab USING wa_orders-aufnr wa_orders-plnbez * wa_h_phs-bprdqty wa_h_phs-bsuom * wa_orders-gmein * wa_h_phs-el_effc wa_afvc * l_wa_afvv * CHANGING l_v_rc. * IF l_v_rc = c_x. * APPEND wa_h_phs TO i_h_phs. * ENDIF. **** **** Build Material-Phase Table **** * LOOP AT i_resb ASSIGNING %LTl_fs_resb%GT * WHERE aufnr = wa_orders-aufnr. * * IF %LTl_fs_resb%GT-aufpl = wa_afvc-aufpl AND * %LTl_fs_resb%GT-vornr = wa_afvc-vornr AND * %LTl_fs_resb%GT-aplzl = wa_afvc-aplzl. * * CLEAR : wa_resb. * PERFORM build_mat_tab USING %LTl_fs_resb%GT. * %LTl_fs_resb%GT-flagp = c_y. * * ELSEIF %LTl_fs_resb%GT-flagp IS INITIAL. * %LTl_fs_resb%GT-flagp = 'N'. * ENDIF. * ENDLOOP. * ENDLOOP. * ***** ***** Add Extra Materials to Material-Phase Table ***** * LOOP AT i_resb ASSIGNING %LTl_fs_resb%GT * WHERE aufnr = wa_orders-aufnr * AND flagp = 'N'. * CLEAR : wa_resb. * PERFORM build_mat_tab USING %LTl_fs_resb%GT. * ENDLOOP. * ENDLOOP. * * SORT i_h_ord BY aufnr. * SORT i_h_mat BY aufnr aufpl aplzl matnr byprod. * * SORT i_h_phs BY aufnr vornr. * SORT i_h_act BY aufnr vornr. * * LOOP AT i_h_mat INTO wa_h_mat. * CLEAR : l_v_sumi. * * AT END OF byprod. * l_v_sumi = c_x. * ENDAT. * * wa_h_mat-sumi = l_v_sumi. * * MODIFY i_h_mat FROM wa_h_mat TRANSPORTING sumi. * ENDLOOP. * *ENDFORM. "build_output_tabs * * **&--------------------------------------------------------------------* **& Form build_mat_tab **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM build_mat_tab USING fp_resb TYPE ty_resb. * * DATA : l_v_kausf TYPE kausf, * * l_v_smeng TYPE ty_menge, * l_v_smengs TYPE ty_menge, * l_v_smengz TYPE ty_menge. * * wa_resb = fp_resb. * * CLEAR : wa_h_mat , l_v_smeng , l_v_smengs , * l_v_smengz. * * CHECK wa_resb-postp %LT%GT 'N' AND * NOT ( wa_resb-kzkup = c_x AND * wa_resb-matnr = wa_h_ord-plnbez ). * * wa_h_mat-aufnr = wa_resb-aufnr. * wa_h_mat-aufpl = wa_resb-aufpl. * wa_h_mat-aplzl = wa_resb-aplzl. * wa_h_mat-vornr = wa_resb-vornr. * * wa_h_mat-matnr = wa_resb-matnr. * * CLEAR : wa_mara. * READ TABLE i_mara INTO wa_mara WITH KEY matnr = wa_h_mat-matnr. * * CLEAR : wa_msegs. * READ TABLE i_msegs INTO wa_msegs WITH KEY aufnr = wa_h_mat-aufnr * matnr = wa_h_mat-matnr * bwart = wa_resb-bwart. * IF sy-subrc %LT%GT 0. * READ TABLE i_msegs INTO wa_msegs WITH KEY aufnr = wa_h_mat-aufnr * matnr = wa_h_mat-matnr. * ENDIF. * * CLEAR : wa_ordmats. * READ TABLE i_ordmats INTO wa_ordmats * WITH KEY aufnr = wa_resb-aufnr * matnr = wa_resb-matnr * stlty = wa_resb-stlty * stlnr = wa_resb-stlnr * stlkn = wa_resb-stlkn * stpoz = wa_resb-stpoz. * IF sy-subrc = 0. * wa_h_mat-maktx = wa_ordmats-ojtxp. * * wa_h_mat-stprs = wa_ordmats-stprs. * wa_h_mat-peinh = wa_ordmats-peinh. * * wa_h_mat-bomuom = wa_ordmats-meins. * * IF wa_orders-bbmeng %LT%GT 0. * l_v_smeng = wa_ordmats-mnglg / wa_orders-bbmeng. * l_v_smengs = wa_ordmats-mnglgs / wa_orders-bbmeng. * l_v_smengz = wa_ordmats-mnglgz / wa_orders-bbmeng. * ENDIF. * * wa_h_mat-byprod = wa_ordmats-byprod. * ELSE. * CLEAR : wa_mbew1. * READ TABLE i_mbew1 INTO wa_mbew1 * WITH KEY matnr = wa_h_mat-matnr * bwkey = p_werks. * CLEAR : wa_material_des. * READ TABLE i_material_des INTO wa_material_des * WITH KEY matnr = wa_h_mat-matnr. * * wa_h_mat-maktx = wa_material_des-maktx. * * wa_h_mat-stprs = wa_mbew1-stprs. * wa_h_mat-peinh = wa_mbew1-peinh. * * wa_h_mat-bomuom = wa_resb-meins. * * wa_resb-bmeins = wa_mara-meins. * IF wa_mara-meins %LT%GT wa_resb-meins. * PERFORM conv_to_from_base USING 'X' * wa_resb-matnr * wa_resb-bdmng * wa_resb-meins * wa_mara-meins * CHANGING wa_resb-bbdmng * v_conv_rc. * IF v_conv_rc = 'X'. * CLEAR : wa_resb-bbdmng. * ENDIF. * * ELSE. * wa_resb-bbdmng = wa_resb-bdmng. * ENDIF. * * wa_ordmats-rgekz = wa_resb-rgekz. * ENDIF. * * IF rb_nflsh %LT%GT c_x OR wa_ordmats-rgekz EQ c_x. * wa_h_mat-stdusg = l_v_smeng * wa_h_ord-bprdqty. * wa_h_mat-stdusgs = l_v_smengs * wa_h_ord-bprdqty. * wa_h_mat-stdusgz = l_v_smengz * wa_h_ord-bprdqty. * ELSE. * CLEAR : wa_h_mat-stdusg. * ENDIF. * * IF wa_h_mat-byprod = c_x. * wa_h_mat-actusg = wa_msegs-bmenge5. * * ELSEIF wa_resb-kzkup = c_x. * wa_h_mat-actusg = 0 - wa_msegs-bmenge1. * * ELSE. * wa_h_mat-actusg = wa_msegs-bmenge2. * ENDIF. * * wa_h_mat-bsuom = wa_mara-meins. * wa_h_mat-gewei = wa_mara-gewei. * wa_h_mat-ntgew = wa_mara-ntgew. * * IF wa_h_mat-actusg %LT%GT 0. * wa_h_mat-gruom = wa_msegs-erfme. * ENDIF. * * wa_h_mat-bwart = wa_resb-bwart. "NEEL 30/06/2005 * * APPEND wa_h_mat TO i_h_mat. * * wa_matn-matnr = wa_h_mat-matnr. * wa_matn-bwart = wa_h_mat-bwart. "23-06-2005 * * COLLECT wa_matn INTO i_matn. * *ENDFORM. "build_mat_tab * **&--------------------------------------------------------------------* **& Form build_act_tab **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM build_act_tab USING fp_aufnr TYPE aufnr * fp_matnr TYPE matnr * fp_bqty TYPE gamng * fp_buom TYPE meins * fp_gmein TYPE meins * fp_effic TYPE vgwrt * fp_afvc TYPE ty_afvc * fp_afvv TYPE ty_afvv * CHANGING fp_rc TYPE char1. * * DATA : l_ism01 TYPE ru_ismng, * l_ile01 TYPE co_ismngeh, * l_ism02 TYPE ru_ismng, * l_ile02 TYPE co_ismngeh, * l_ism03 TYPE ru_ismng, * l_ile03 TYPE co_ismngeh, * l_ism04 TYPE ru_ismng, * l_ile04 TYPE co_ismngeh, * l_ism05 TYPE ru_ismng, * l_ile05 TYPE co_ismngeh, * l_ism06 TYPE ru_ismng, * l_ile06 TYPE co_ismngeh, * * l_effic TYPE vgwrt, * * l_v_bmsch TYPE bmsch, * l_pqty TYPE gamng. * * DATA: l_vgw01 TYPE vgwrt, * l_vgw02 TYPE vgwrt, * l_vgw03 TYPE vgwrt, * l_vgw04 TYPE vgwrt, * l_vgw05 TYPE vgwrt, * l_vgw06 TYPE vgwrt. * * * * CLEAR : wa_h_act. * * wa_h_act-aufnr = fp_aufnr. * wa_h_act-aufpl = fp_afvc-aufpl. * wa_h_act-aplzl = fp_afvc-aplzl. * wa_h_act-vornr = fp_afvc-vornr. * * wa_h_act-vgwts = fp_afvc-vgwts. * * l_effic = fp_effic / 100. * IF l_effic = 0. * l_effic = 1. * ENDIF. * * wa_afvv = fp_afvv. * CHECK NOT wa_afvv IS INITIAL. * * wa_h_act-mgvrg = wa_afvv-mgvrg. * wa_h_act-meinh = wa_afvv-meinh. * wa_h_act-bmsch = wa_afvv-bmsch. * * CLEAR : wa_param. * READ TABLE i_param INTO wa_param WITH KEY vgwts = wa_h_act-vgwts. * ** Actual Usage * CLEAR : wa_ord_conf1. * LOOP AT i_ord_conf1 INTO wa_ord_conf1 WHERE rueck = fp_afvc-rueck. * IF wa_ord_conf1-stokz IS INITIAL. * l_ism01 = l_ism01 + wa_ord_conf1-ism01. * l_ism02 = l_ism02 + wa_ord_conf1-ism02. * l_ism03 = l_ism03 + wa_ord_conf1-ism03. * l_ism04 = l_ism04 + wa_ord_conf1-ism04. * l_ism05 = l_ism05 + wa_ord_conf1-ism05. * l_ism06 = l_ism06 + wa_ord_conf1-ism06. * ELSE. * l_ism01 = l_ism01 - wa_ord_conf1-ism01. * l_ism02 = l_ism02 - wa_ord_conf1-ism02. * l_ism03 = l_ism03 - wa_ord_conf1-ism03. * l_ism04 = l_ism04 - wa_ord_conf1-ism04. * l_ism05 = l_ism05 - wa_ord_conf1-ism05. * l_ism06 = l_ism06 - wa_ord_conf1-ism06. * ENDIF. * ENDLOOP. * * l_ile01 = wa_ord_conf1-ile01. * l_ile02 = wa_ord_conf1-ile02. * l_ile03 = wa_ord_conf1-ile03. * l_ile04 = wa_ord_conf1-ile04. * l_ile05 = wa_ord_conf1-ile05. * l_ile06 = wa_ord_conf1-ile06. * * CLEAR : fp_rc , l_pqty. * * l_pqty = fp_bqty. * l_v_bmsch = wa_afvv-bmsch. * * IF wa_afvv-umren %GT 0. * l_v_bmsch = l_v_bmsch * ( wa_afvv-umrez / wa_afvv-umren ). * ENDIF. * * IF wa_afvv-meinh %LT%GT fp_buom. * PERFORM conv_to_from_base USING 'X' * fp_matnr * l_v_bmsch * wa_afvv-meinh * fp_buom * CHANGING wa_afvv-bmsch * v_conv_rc. * IF v_conv_rc = 'X'. * wa_afvv-bmsch = l_v_bmsch. * ENDIF. * **** Begin of Change on 25-05-2005 * * IF fp_afvc-vgwts+0(3) = 'YGE'. * PERFORM conv_to_from_base USING 'X' * fp_matnr * wa_afvv-vgw01 * wa_afvv-meinh * fp_buom * CHANGING l_vgw01 * v_conv_rc. * IF v_conv_rc = space. * wa_afvv-vgw01 = l_vgw01. * ENDIF. * ENDIF. * * PERFORM conv_to_from_base USING 'X' * fp_matnr * wa_afvv-vgw02 * wa_afvv-meinh * fp_buom * CHANGING l_vgw02 * v_conv_rc. * IF v_conv_rc = space. * wa_afvv-vgw02 = l_vgw02. * ENDIF. * * IF fp_afvc-vgwts+0(3) = 'YGE'. * PERFORM conv_to_from_base USING 'X' * fp_matnr * wa_afvv-vgw03 * wa_afvv-meinh * fp_buom * CHANGING l_vgw03 * v_conv_rc. * IF v_conv_rc = space. * wa_afvv-vgw03 = l_vgw03. * ENDIF. * ENDIF. * * PERFORM conv_to_from_base USING 'X' * fp_matnr * wa_afvv-vgw04 * wa_afvv-meinh * fp_buom * CHANGING l_vgw04 * v_conv_rc. * IF v_conv_rc = space. * wa_afvv-vgw04 = l_vgw04. * ENDIF. * * PERFORM conv_to_from_base USING 'X' * fp_matnr * wa_afvv-vgw05 * wa_afvv-meinh * fp_buom * CHANGING l_vgw05 * v_conv_rc. * IF v_conv_rc = space. * wa_afvv-vgw05 = l_vgw05. * ENDIF. * * PERFORM conv_to_from_base USING 'X' * fp_matnr * wa_afvv-vgw06 * wa_afvv-meinh * fp_buom * CHANGING l_vgw06 * v_conv_rc. * IF v_conv_rc = space. * wa_afvv-vgw06 = l_vgw06. * ENDIF. **** End of Change on 25-05-2005 * * * ENDIF. * * IF NOT fp_afvc-lar01 IS INITIAL OR NOT fp_afvc-lar02 IS INITIAL OR * NOT fp_afvc-lar03 IS INITIAL OR NOT fp_afvc-lar04 IS INITIAL OR * NOT fp_afvc-lar05 IS INITIAL OR NOT fp_afvc-lar06 IS INITIAL. * * IF NOT fp_afvc-lar01 IS INITIAL OR * NOT wa_afvv-vgw01 IS INITIAL. * CLEAR : wa_param_key. * READ TABLE i_param_key INTO wa_param_key * WITH KEY parid = wa_param-par01. * * wa_h_act-parxx = wa_param-par01. * wa_h_act-txtxx = wa_param_key-txtlg. * wa_h_act-ismxx = l_ism01. * wa_h_act-ilexx = l_ile01. * * IF fp_afvc-sumnr = 0. * wa_h_act-vgwxx = wa_afvv-vgw01. * wa_h_act-vgexx = wa_afvv-vge01. * ELSE. * wa_h_act-vgwxx = wa_afvv-vgw01 * ( l_pqty / wa_afvv-bmsch ). * wa_h_act-vgexx = wa_afvv-vge01. * ENDIF. * * wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. * * PERFORM get_act_cost USING fp_afvc-arbid * fp_afvc-lar01 * CHANGING wa_h_act-togxx * wa_h_act-toexx. * APPEND wa_h_act TO i_h_act. * * wa_parn-parxx = wa_h_act-parxx. * COLLECT wa_parn INTO i_parn. * * fp_rc = c_x. * ENDIF. * * IF NOT fp_afvc-lar02 IS INITIAL OR * NOT wa_afvv-vgw02 IS INITIAL. * CLEAR : wa_param_key. * READ TABLE i_param_key INTO wa_param_key * WITH KEY parid = wa_param-par02. * * wa_h_act-parxx = wa_param-par02. * wa_h_act-txtxx = wa_param_key-txtlg. * wa_h_act-ismxx = l_ism02. * wa_h_act-ilexx = l_ile02. ** Begin of MOD-002++ ** wa_h_act-vgwxx = wa_afvv-vgw02 * ( l_pqty / wa_afvv-bmsch ). ** wa_h_act-vgwxx = wa_h_act-vgwxx / l_effic. * wa_h_act-vgwxx = * ( wa_afvv-vgw02 * l_pqty / wa_afvv-bmsch ) / l_effic. ** End of MOD-002++ * wa_h_act-vgexx = wa_afvv-vge02. * * wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. * * PERFORM get_act_cost USING fp_afvc-arbid * fp_afvc-lar02 * CHANGING wa_h_act-togxx * wa_h_act-toexx. * * APPEND wa_h_act TO i_h_act. * * wa_parn-parxx = wa_h_act-parxx. * COLLECT wa_parn INTO i_parn. * * fp_rc = c_x. * ENDIF. * * IF NOT fp_afvc-lar03 IS INITIAL OR * NOT wa_afvv-vgw03 IS INITIAL. * CLEAR : wa_param_key. * READ TABLE i_param_key INTO wa_param_key * WITH KEY parid = wa_param-par03. * * wa_h_act-parxx = wa_param-par03. * wa_h_act-txtxx = wa_param_key-txtlg. * wa_h_act-ismxx = l_ism03. * wa_h_act-ilexx = l_ile03. * * IF fp_afvc-sumnr = 0. * wa_h_act-vgwxx = wa_afvv-vgw03. * wa_h_act-vgexx = wa_afvv-vge03. * ELSE. * wa_h_act-vgwxx = wa_afvv-vgw03 * ( l_pqty / wa_afvv-bmsch ). * wa_h_act-vgexx = wa_afvv-vge03. * ENDIF. * * wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. * * PERFORM get_act_cost USING fp_afvc-arbid * fp_afvc-lar03 * CHANGING wa_h_act-togxx * wa_h_act-toexx. * * APPEND wa_h_act TO i_h_act. * * wa_parn-parxx = wa_h_act-parxx. * COLLECT wa_parn INTO i_parn. * * fp_rc = c_x. * ENDIF. * * IF NOT fp_afvc-lar04 IS INITIAL OR * NOT wa_afvv-vgw04 IS INITIAL. * CLEAR : wa_param_key. * READ TABLE i_param_key INTO wa_param_key * WITH KEY parid = wa_param-par04. * * wa_h_act-parxx = wa_param-par04. * wa_h_act-txtxx = wa_param_key-txtlg. * wa_h_act-ismxx = l_ism04. * wa_h_act-ilexx = l_ile04. ** Begin of MOD-002++ ** wa_h_act-vgwxx = wa_afvv-vgw04 * ( l_pqty / wa_afvv-bmsch ). ** wa_h_act-vgwxx = wa_h_act-vgwxx / l_effic. * wa_h_act-vgwxx = * ( wa_afvv-vgw04 * l_pqty / wa_afvv-bmsch ) / l_effic. ** End of MOD-002++ * * wa_h_act-vgexx = wa_afvv-vge04. * * wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. * * PERFORM get_act_cost USING fp_afvc-arbid * fp_afvc-lar04 * CHANGING wa_h_act-togxx * wa_h_act-toexx. * * APPEND wa_h_act TO i_h_act. * * wa_parn-parxx = wa_h_act-parxx. * COLLECT wa_parn INTO i_parn. * * fp_rc = c_x. * ENDIF. * * IF NOT fp_afvc-lar05 IS INITIAL OR * NOT wa_afvv-vgw05 IS INITIAL. * CLEAR : wa_param_key. * READ TABLE i_param_key INTO wa_param_key * WITH KEY parid = wa_param-par05. * * wa_h_act-parxx = wa_param-par05. * wa_h_act-txtxx = wa_param_key-txtlg. * wa_h_act-ismxx = l_ism05. * wa_h_act-ilexx = l_ile05. * wa_h_act-vgwxx = wa_afvv-vgw05 * ( l_pqty / wa_afvv-bmsch ). * wa_h_act-vgexx = wa_afvv-vge05. * * wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. * * PERFORM get_act_cost USING fp_afvc-arbid * fp_afvc-lar05 * CHANGING wa_h_act-togxx * wa_h_act-toexx. * * APPEND wa_h_act TO i_h_act. * * wa_parn-parxx = wa_h_act-parxx. * COLLECT wa_parn INTO i_parn. * * fp_rc = c_x. * ENDIF. * * IF NOT fp_afvc-lar06 IS INITIAL OR * NOT wa_afvv-vgw06 IS INITIAL. * CLEAR : wa_param_key. * READ TABLE i_param_key INTO wa_param_key * WITH KEY parid = wa_param-par06. * * wa_h_act-parxx = wa_param-par06. * wa_h_act-txtxx = wa_param_key-txtlg. * wa_h_act-ismxx = l_ism06. * wa_h_act-ilexx = l_ile06. * wa_h_act-vgwxx = wa_afvv-vgw06 * ( l_pqty / wa_afvv-bmsch ). * wa_h_act-vgexx = wa_afvv-vge06. * * wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. * * PERFORM get_act_cost USING fp_afvc-arbid * fp_afvc-lar06 * CHANGING wa_h_act-togxx * wa_h_act-toexx. * * APPEND wa_h_act TO i_h_act. * * wa_parn-parxx = wa_h_act-parxx. * COLLECT wa_parn INTO i_parn. * * fp_rc = c_x. * ENDIF. * ENDIF. *ENDFORM. "build_act_tab * **&--------------------------------------------------------------------* **& Form get_act_cost **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM get_act_cost USING fp_arbid TYPE cr_objid * fp_larxx TYPE lstar * CHANGING fp_tog001 TYPE togxxx * fp_toe001 TYPE toexxx. * DATA: l_kokrs TYPE kokrs, * l_kostl TYPE kostl, * l_objnr TYPE j_objnr. * * CLEAR: l_kokrs, l_kostl, l_objnr, * fp_tog001. * * fp_toe001 = 1. * * SELECT SINGLE kokrs kostl * FROM crco * INTO (l_kokrs, l_kostl) * WHERE objty = c_a * AND objid = fp_arbid * AND lstar = fp_larxx. * IF sy-subrc = 0. * * SELECT SINGLE objnr * FROM cssl * INTO l_objnr * WHERE kokrs = l_kokrs * AND kostl = l_kostl * AND lstar = fp_larxx * AND gjahr = sy-datum(4). * IF sy-subrc = 0. * * SELECT SINGLE tog001 toe001 * FROM cost * INTO (fp_tog001, fp_toe001) * WHERE objnr = l_objnr * AND gjahr = sy-datum(4) * AND versn = c_000. * * fp_tog001 = fp_tog001 / 10. * fp_toe001 = fp_toe001 / 10. * * IF fp_toe001 = 0. * fp_toe001 = 1. * ENDIF. * * ENDIF. * ENDIF. *ENDFORM. "get_act_cost * **&--------------------------------------------------------------------- * **& Form output **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM output. * CASE c_x. * WHEN rb_detl. * v_rep = c_detl. * PERFORM display_detail_report. * * WHEN rb_summ. * v_rep = c_sums. * PERFORM display_summary_report. * * WHEN rb_phase. * v_rep = c_phas. * PERFORM display_phase_report. * ENDCASE. * * PERFORM tree_rebuild. *ENDFORM. " output * **&--------------------------------------------------------------------* **& Form display_detail_report **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM display_detail_report. * DATA : l_date_low TYPE char10, * l_date_high TYPE char10, * * l_prdqty TYPE gamng, * l_wprdqty TYPE menge_d, * * l_prduom TYPE meins, * l_uom TYPE meins, * l_prdq(20), * * l_effic TYPE char16, * * l_act TYPE char16, * l_std TYPE char16, * * l_amenge TYPE menge_d, * l_smenge TYPE menge_d, * l_menge TYPE menge_d, * * l_aqty TYPE char18, * l_sqty TYPE char18, * l_svar TYPE char18, * l_svarp TYPE char18, * * l_aqtys TYPE char18, * l_sqtys TYPE char18, * l_svars TYPE char18, * * l_aqtyg TYPE char18, * l_sqtyg TYPE char18, * l_svarg TYPE char18, * * l_matuom TYPE meins, * l_stduom TYPE meins, * l_varuom TYPE meins, * * l_astprs TYPE ty_stprs, * l_sstprs TYPE ty_stprs, * l_stprs TYPE ty_stprs, * * l_total1 TYPE char1, * l_total2 TYPE char1, * l_total3 TYPE char1, * * l_totalg1 TYPE char1, * l_totalg2 TYPE char1, * l_totalg3 TYPE char1, * * l_aplzl TYPE co_aplzl, * * l_wa_act TYPE ty_hier_act, * l_wa_mat TYPE ty_hier_mat_sum, * l_wa_matg TYPE ty_hier_mat_sum. * * PERFORM pfstatus. * SET PF-STATUS 'MAIN' EXCLUDING i_fcode. * SET TITLEBAR 'VARI' WITH text-066. * * MOVE 'Display Detail Report'(028) TO v_output_text. * PERFORM inform_user_of_progress. * ** Clearing local variables * CLEAR wa_nodestab. * REFRESH i_nodestab. * * wa_nodestab-id = c_1_1. * wa_nodestab-tlevel = c_1. * wa_nodestab-text = 'Production Variances'(031). * wa_nodestab-tlength = c_20. * wa_nodestab-compress = c_x. * APPEND wa_nodestab TO i_nodestab. * * CLEAR : l_wa_matg , l_sqtyg , l_aqtyg , l_svarg, * l_totalg1 , l_totalg2 , l_totalg3. * LOOP AT i_h_ord INTO wa_h_ord. * CLEAR: wa_nodestab, l_date_low, l_date_high, l_prdqty, l_prduom. * * wa_nodestab-id = c_2_1. * wa_nodestab-tlevel = c_2. * wa_nodestab-parent = c_1_1. * ** Order Number text * wa_nodestab-text = 'Order Num:'(032). * wa_nodestab-tlength = c_12. * wa_nodestab-tcolor = c_1. * ** Order number * WRITE wa_h_ord-aufnr TO wa_nodestab-text1 NO-ZERO. * wa_nodestab-tlength1 = c_12. * wa_nodestab-tcolor1 = c_1. * ** Date Range * WRITE wa_h_ord-gstrp TO l_date_low. * WRITE wa_h_ord-gltrp TO l_date_high. * CONCATENATE l_date_low c_hyp l_date_high INTO wa_nodestab-text2 * SEPARATED BY space. * wa_nodestab-tlength2 = c_25. * wa_nodestab-tcolor2 = c_1. * ** Material Number * WRITE wa_h_ord-plnbez TO wa_nodestab-text3 NO-ZERO. * wa_nodestab-tlength3 = c_18. * wa_nodestab-tcolor3 = c_1. * ** Material Description * wa_nodestab-text4 = wa_h_ord-maktx. * wa_nodestab-tlength4 = c_33. * wa_nodestab-tcolor4 = c_1. * ** Produced Quantity / Confirmed Quantity * l_prdqty = wa_h_ord-prdqty. * l_prduom = wa_h_ord-prduom. * ** convert to KG? * IF rb_kgm = c_x AND l_prduom %LT%GT 'KG'. * IF wa_h_ord-bsuom %LT%GT 'KG'. * PERFORM convert_to_kg USING wa_h_ord-plnbez wa_h_ord-bsuom * wa_h_ord-gewei wa_h_ord-ntgew * wa_h_ord-bprdqty * CHANGING l_wprdqty * v_conv_rc. * IF v_conv_rc %LT%GT 'X'. * l_prdqty = l_wprdqty. * l_prduom = 'KG'. * ENDIF. * * ELSE. * l_prdqty = wa_h_ord-bprdqty. * l_prduom = 'KG'. * ENDIF. * ENDIF. * * WRITE l_prdqty TO l_prdq UNIT l_prduom. * WRITE l_prduom TO l_uom. * **** text for Order Qty * IF rb_pland = c_x. *** Planned Production * CONCATENATE 'Plan Qty:'(076) l_prdq l_uom * INTO wa_nodestab-text5 SEPARATED BY space. * ELSE. *** Actual Production * IF rb_prod = c_x. ** Produced * CONCATENATE 'Prod Qty:'(033) l_prdq l_uom * INTO wa_nodestab-text5 SEPARATED BY space. * ELSE. ** Confirmed * CONCATENATE 'Conf Qty:'(034) l_prdq l_uom * INTO wa_nodestab-text5 SEPARATED BY space. * ENDIF. * ENDIF. * * CONDENSE : wa_nodestab-text5. * * wa_nodestab-tlength5 = c_35. * wa_nodestab-tcolor5 = c_1. * * APPEND wa_nodestab TO i_nodestab. * ** Resource Information * CLEAR : wa_nodestab , l_effic. * wa_nodestab-id = c_3_1. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_1. * * wa_nodestab-text = 'Resource:'(035). * wa_nodestab-tlength = c_14. * wa_nodestab-tcolor = c_4. * * wa_nodestab-text1 = wa_h_ord-botlnck. * wa_nodestab-tlength1 = c_8. * wa_nodestab-tcolor1 = c_4. * * wa_nodestab-text2 = wa_h_ord-resdesc. * wa_nodestab-tlength2 = c_37. * wa_nodestab-tcolor2 = c_4. * * l_effic = wa_h_ord-el_effc. * CONCATENATE 'Exp. Line Eff.'(036) l_effic c_perc * INTO wa_nodestab-text3 SEPARATED BY space. * CONDENSE wa_nodestab-text3. * wa_nodestab-tlength3 = c_30. * wa_nodestab-tcolor3 = c_4. * * l_effic = wa_h_ord-ac_effc. * CONCATENATE 'Act. Line Eff.'(037) l_effic c_perc * INTO wa_nodestab-text4 SEPARATED BY space. * CONDENSE wa_nodestab-text4. * wa_nodestab-tlength4 = c_30. * wa_nodestab-tcolor4 = c_4. * * APPEND wa_nodestab TO i_nodestab. * ** Phase Information * READ TABLE i_h_act INTO wa_h_act WITH KEY aufnr = wa_h_ord-aufnr. * IF sy-subrc = 0. * CLEAR : wa_nodestab. * * wa_nodestab-id = c_3_2. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_1. * * wa_nodestab-text = 'Phase'(038). * wa_nodestab-tlength = c_8. * wa_nodestab-tcolor = c_4. * * wa_nodestab-tlength1 = c_42. ** wa_nodestab-tcolor1 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Actual Usage'(040) v_waers * INTO wa_nodestab-text2 SEPARATED BY space. * ELSE. * CONCATENATE 'Actual Usage'(040) 'UoM' * INTO wa_nodestab-text2 SEPARATED BY space. * ENDIF. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage'(041) v_waers * INTO wa_nodestab-text3 SEPARATED BY space. * ELSE. * CONCATENATE 'Standard Usage'(041) 'UoM' * INTO wa_nodestab-text3 SEPARATED BY space. * ENDIF. * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage Var'(042) v_waers * INTO wa_nodestab-text4 SEPARATED BY space. * ELSE. * CONCATENATE 'Standard Usage Var'(042) 'UoM' * INTO wa_nodestab-text4 SEPARATED BY space. * ENDIF. * wa_nodestab-tlength4 = c_24. * wa_nodestab-tcolor4 = c_4. * * CONCATENATE 'Standard Usage Var'(042) c_perc * INTO wa_nodestab-text5 SEPARATED BY space. * wa_nodestab-tlength5 = c_20. * wa_nodestab-tcolor5 = c_4. * * APPEND wa_nodestab TO i_nodestab. * **** Activities * CLEAR : flg_color, l_act , l_std , l_svar , l_svarp , * l_wa_act , l_total1 , l_total2 , l_aplzl. * LOOP AT i_h_act INTO wa_h_act WHERE aufnr = wa_h_ord-aufnr. * * IF l_aplzl %LT%GT wa_h_act-aplzl. * CLEAR : wa_afvc. * READ TABLE i_h_phs INTO wa_h_phs WITH KEY aufnr = * wa_h_act-aufnr * aufpl = * wa_h_act-aufpl * aplzl = * wa_h_act-aplzl. * l_aplzl = wa_h_act-aplzl. * ENDIF. * * CLEAR wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * wa_nodestab-text = wa_h_act-vornr. * wa_nodestab-tlength = c_4. * * CONCATENATE wa_h_phs-steus wa_h_phs-arbpl * wa_h_act-txtxx INTO wa_nodestab-text1 * SEPARATED BY ' '. * wa_nodestab-tlength1 = c_42. * * IF rb_quant = c_x. * WRITE : wa_h_act-ismxx TO l_act UNIT wa_h_act-ilexx * NO-GROUPING, * wa_h_act-ilexx TO l_uom. * CONCATENATE l_act l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * wa_nodestab-tlength2 = c_20. * * WRITE : wa_h_act-vgwxx TO l_std UNIT wa_h_act-vgexx * NO-GROUPING, * wa_h_act-vgexx TO l_uom. * CONCATENATE l_std l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * wa_nodestab-tlength3 = c_20. * * WRITE : wa_h_act-stdvar TO l_svar UNIT wa_h_act-vgexx * NO-GROUPING, * wa_h_act-vgexx TO l_uom. * CONCATENATE l_svar l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * wa_nodestab-tlength4 = c_24. * * IF wa_h_act-ismxx %LT%GT 0. * IF l_total2 %LT%GT c_x. * l_total2 = c_x. * l_wa_act-ilexx = wa_h_act-ilexx. * ENDIF. * * IF l_wa_act-ilexx = wa_h_act-ilexx. * * l_wa_act-ismxx = l_wa_act-ismxx + wa_h_act-ismxx. * l_wa_act-ilexx = wa_h_act-ilexx. * * ELSEIF wa_h_act-ismxx %LT%GT 0. * CLEAR : l_wa_act-ismxx , l_wa_act-ilexx. * ENDIF. * ENDIF. * * IF wa_h_act-vgwxx %LT%GT 0. * IF l_total1 %LT%GT c_x. * l_total1 = c_x. * l_wa_act-vgexx = wa_h_act-vgexx. * ENDIF. * * IF l_wa_act-vgexx = wa_h_act-vgexx. * l_wa_act-vgwxx = l_wa_act-vgwxx + wa_h_act-vgwxx. * l_wa_act-stdvar = l_wa_act-stdvar + wa_h_act-stdvar. * l_wa_act-vgexx = wa_h_act-vgexx. * * ELSEIF wa_h_act-vgwxx %LT%GT 0. * CLEAR : l_wa_act-vgwxx , l_wa_act-vgexx, l_wa_act-stdvar. * ENDIF. * ENDIF. * * IF wa_h_act-vgwxx %LT%GT 0. * wa_h_act-varper = ( wa_h_act-stdvar / wa_h_act-vgwxx ) * 100 * . * ENDIF. * * ELSE. * wa_h_act-actu = wa_h_act-ismxx * * ( wa_h_act-togxx / wa_h_act-toexx ). * * WRITE : wa_h_act-actu TO l_act CURRENCY v_waers NO-GROUPING, * v_waers TO l_uom. * CONCATENATE l_act l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * wa_nodestab-tlength2 = c_20. * * wa_h_act-stdu = wa_h_act-vgwxx * * ( wa_h_act-togxx / wa_h_act-toexx ). * * WRITE : wa_h_act-stdu TO l_std CURRENCY v_waers NO-GROUPING. * CONCATENATE l_std l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * wa_nodestab-tlength3 = c_20. * * wa_h_act-varu = wa_h_act-stdvar * * ( wa_h_act-togxx / wa_h_act-toexx ). * * WRITE wa_h_act-varu TO l_svar CURRENCY v_waers NO-GROUPING. * CONCATENATE l_svar l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * wa_nodestab-tlength4 = c_24. * * l_wa_act-actu = l_wa_act-actu + wa_h_act-actu. * l_wa_act-stdu = l_wa_act-stdu + wa_h_act-stdu. * l_wa_act-varu = l_wa_act-varu + wa_h_act-varu. * * IF wa_h_act-stdu %LT%GT 0. * wa_h_act-varper = ( wa_h_act-varu / wa_h_act-stdu ) * 100. * ENDIF. * ENDIF. * * WRITE wa_h_act-varper TO l_svarp NO-GROUPING DECIMALS 2. * CONCATENATE l_svarp c_perc INTO wa_nodestab-text5 * SEPARATED BY space. * wa_nodestab-tlength5 = c_20. * * IF flg_color = c_x. * CLEAR flg_color. * wa_nodestab-tcolor = c_3. * wa_nodestab-tcolor1 = c_3. * wa_nodestab-tcolor2 = c_3. * wa_nodestab-tcolor3 = c_3. * wa_nodestab-tcolor4 = c_3. * wa_nodestab-tcolor5 = c_3. * wa_nodestab-tcolor6 = c_3. * wa_nodestab-tcolor7 = c_3. * wa_nodestab-tcolor8 = c_3. * ELSE. * flg_color = c_x. * wa_nodestab-tcolor = c_2. * wa_nodestab-tcolor1 = c_2. * wa_nodestab-tcolor2 = c_2. * wa_nodestab-tcolor3 = c_2. * wa_nodestab-tcolor4 = c_2. * wa_nodestab-tcolor5 = c_2. * wa_nodestab-tcolor6 = c_2. * wa_nodestab-tcolor7 = c_2. * wa_nodestab-tcolor8 = c_2. * ENDIF. * APPEND wa_nodestab TO i_nodestab. * ENDLOOP. **** Displaying Activity Subtotals * CLEAR wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * wa_nodestab-text = 'Activity Totals'(074). * wa_nodestab-tlength = c_20. * wa_nodestab-tcolor = c_6. * * wa_nodestab-text1 = space. * wa_nodestab-tlength1 = c_26. * wa_nodestab-tcolor1 = c_6. * * IF rb_quant = c_x. * WRITE : l_wa_act-ismxx TO l_act UNIT l_wa_act-ilexx * NO-GROUPING, * l_wa_act-vgwxx TO l_std UNIT l_wa_act-vgexx * NO-GROUPING, * l_wa_act-stdvar TO l_svar UNIT l_wa_act-vgexx * NO-GROUPING, * wa_h_act-ilexx TO l_uom. * * CONCATENATE l_act l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * WRITE : wa_h_act-vgexx TO l_uom. * CONCATENATE l_std l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * CONCATENATE l_svar l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * ELSE. * WRITE : l_wa_act-actu TO l_act CURRENCY v_waers NO-GROUPING, * l_wa_act-stdu TO l_std CURRENCY v_waers NO-GROUPING, * l_wa_act-varu TO l_svar CURRENCY v_waers NO-GROUPING, * v_waers TO l_uom. * * CONCATENATE l_act l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * CONCATENATE l_std l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * CONCATENATE l_svar l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * ENDIF. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_6. * * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_6. * * wa_nodestab-tlength4 = c_24. * wa_nodestab-tcolor4 = c_6. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. * ENDIF. * ** Material Information * READ TABLE i_h_mat INTO wa_h_mat WITH KEY aufnr = wa_h_ord-aufnr. * CHECK sy-subrc = 0. * * CLEAR : wa_nodestab. * wa_nodestab-id = c_3_3. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_1. * PERFORM material_header USING wa_nodestab. * * APPEND wa_nodestab TO i_nodestab. * * CLEAR : wa_nodestab , l_menge , l_stprs , * l_wa_mat , * l_total1 , l_total2 , l_total3 , * l_aqtys , l_sqtys , l_svars . * LOOP AT i_h_mat INTO wa_h_mat WHERE aufnr = wa_h_ord-aufnr. * * l_smenge = l_menge. * l_sstprs = l_stprs. * PERFORM do_mat_calc CHANGING wa_h_mat * l_aqty l_matuom * l_sqty l_stduom * l_svar l_varuom * l_svarp * l_amenge l_smenge * l_astprs l_sstprs. * l_menge = l_menge + l_smenge. * l_stprs = l_stprs + l_sstprs. * * CHECK wa_h_mat-sumi = c_x. * * CLEAR: wa_nodestab , l_menge , l_stprs. * wa_nodestab-id = c_4_2. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_3. * ** Material Number * WRITE wa_h_mat-matnr TO wa_nodestab-text NO-ZERO. ** Material Description * wa_nodestab-text1 = wa_h_mat-maktx. * * wa_nodestab-tlength = c_18. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tlength2 = c_22. * wa_nodestab-tlength3 = c_22. * wa_nodestab-tlength4 = c_24. * wa_nodestab-tlength5 = c_20. * * IF l_matuom %LT%GT v_waers. * WRITE : l_matuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_aqty l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * IF l_stduom %LT%GT v_waers. * WRITE : l_stduom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_sqty l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * IF l_varuom %LT%GT v_waers. * WRITE : l_varuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_svar l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * * CONCATENATE l_svarp c_perc INTO wa_nodestab-text5 * SEPARATED BY space. * * wa_nodestab-tcolor = c_3. * wa_nodestab-tcolor1 = c_3. * wa_nodestab-tcolor2 = c_3. * wa_nodestab-tcolor3 = c_3. * wa_nodestab-tcolor4 = c_3. * wa_nodestab-tcolor5 = c_3. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. * * IF l_aqty CA '123456789'. * IF l_total1 %LT%GT c_x. * l_total1 = c_x. * l_wa_mat-actuom = l_matuom. * ENDIF. * * IF l_wa_mat-actuom %LT%GT l_matuom. * CLEAR : l_wa_mat-actusg, l_wa_mat-astprs, l_wa_mat-actuom, * l_aqtys, l_amenge, * l_wa_matg-actusg, l_wa_matg-astprs, l_wa_matg-actuom, * l_aqtyg, l_astprs. * ENDIF. * ENDIF. * * IF l_sqty CA '123456789'. * IF l_total2 %LT%GT c_x. * l_total2 = c_x. * l_wa_mat-stduom = l_stduom. * ENDIF. * * IF l_wa_mat-stduom %LT%GT l_stduom. * CLEAR : l_wa_mat-stdusg, l_wa_mat-sstprs, l_wa_mat-stduom, * l_sqtys, l_smenge, l_wa_matg-stdusg, * l_wa_matg-sstprs, l_wa_matg-stduom, * l_sqtyg, l_sstprs. * ENDIF. * ENDIF. * * IF l_svar CA '123456789'. * IF l_total3 %LT%GT c_x. * l_total3 = c_x. * l_wa_mat-varuom = l_varuom. * ENDIF. * * IF l_wa_mat-varuom %LT%GT l_varuom. * CLEAR : l_wa_mat-stdvar , l_wa_mat-varprs , l_wa_mat-varuom * l_svars, wa_h_mat-stdvar, * l_wa_matg-stdvar, l_wa_matg-varprs , l_wa_matg-varuom * l_svarg, wa_h_mat-vstprs. * ENDIF. * ENDIF. * * CASE c_x. * WHEN rb_quant. * l_wa_mat-actusg = l_wa_mat-actusg + l_amenge. * WRITE l_wa_mat-actusg TO l_aqtys UNIT l_wa_mat-actuom * NO-GROUPING. * * l_wa_mat-stdusg = l_wa_mat-stdusg + l_smenge. * WRITE l_wa_mat-stdusg TO l_sqtys UNIT l_wa_mat-stduom * NO-GROUPING. * * l_wa_mat-stdvar = l_wa_mat-stdvar + wa_h_mat-stdvar. * WRITE : l_wa_mat-stdvar TO l_svars UNIT l_wa_mat-stduom * NO-GROUPING. * * WHEN rb_fiscl. * l_wa_mat-astprs = l_wa_mat-astprs + l_astprs. * v_prs = l_wa_mat-astprs. * WRITE v_prs TO l_aqtys CURRENCY v_waers NO-GROUPING. * * l_wa_mat-varprs = l_wa_mat-varprs + wa_h_mat-vstprs. * v_prs = l_wa_mat-varprs. * WRITE v_prs TO l_svars CURRENCY v_waers NO-GROUPING. * * l_wa_mat-sstprs = l_wa_mat-sstprs + l_sstprs. * v_prs = l_wa_mat-sstprs. * WRITE v_prs TO l_sqtys CURRENCY v_waers NO-GROUPING. * ENDCASE. * ENDLOOP. * **** Displaying Material Subtotals * CLEAR wa_nodestab. * wa_nodestab-id = c_4_2. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_3. * * wa_nodestab-text = 'Material Totals'(043). * wa_nodestab-text1 = space. * * wa_nodestab-tlength = c_18. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tlength2 = c_22. * wa_nodestab-tlength3 = c_22. * wa_nodestab-tlength4 = c_24. * * IF l_wa_mat-actuom %LT%GT v_waers. * WRITE : l_wa_mat-actuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_aqtys l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * IF l_wa_mat-stduom %LT%GT v_waers. * WRITE : l_wa_mat-stduom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_sqtys l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * IF l_wa_mat-varuom %LT%GT v_waers. * WRITE : l_wa_mat-varuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_svars l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * wa_nodestab-tcolor = c_6. * wa_nodestab-tcolor1 = c_6. * wa_nodestab-tcolor2 = c_6. * wa_nodestab-tcolor3 = c_6. * wa_nodestab-tcolor4 = c_6. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. * * IF l_aqtys CA '123456789'. * IF l_totalg1 %LT%GT c_x. * l_totalg1 = c_x. * l_wa_matg-actuom = l_wa_mat-actuom. * ENDIF. * * IF l_wa_matg-actuom %LT%GT l_wa_mat-actuom. * CLEAR : l_wa_matg-actusg , l_wa_matg-astprs , l_wa_matg-actuom, * l_aqtyg, l_wa_mat-actusg, l_wa_mat-astprs. * ENDIF. * ENDIF. * * IF l_sqtys CA '123456789'. * IF l_totalg2 %LT%GT c_x. * l_totalg2 = c_x. * l_wa_matg-stduom = l_wa_mat-stduom. * ENDIF. * * IF l_wa_matg-stduom %LT%GT l_wa_mat-stduom. * CLEAR : l_wa_matg-stdusg , l_wa_matg-stduom , l_wa_matg-sstprs * l_sqtyg, l_wa_mat-stdusg, l_wa_mat-sstprs. * ENDIF. * ENDIF. * * IF l_svars CA '123456789'. * IF l_totalg3 %LT%GT c_x. * l_totalg3 = c_x. * l_wa_matg-varuom = l_wa_mat-varuom. * ENDIF. * * IF l_wa_matg-varuom %LT%GT l_wa_mat-varuom. * CLEAR : l_wa_matg-stdvar, l_wa_matg-varprs , l_wa_matg-varuom, * l_svarg, l_wa_mat-stdvar, l_wa_mat-varprs. * ENDIF. * ENDIF. * * CASE c_x. * WHEN rb_quant. * l_wa_matg-actusg = l_wa_matg-actusg + l_wa_mat-actusg. * WRITE : l_wa_matg-actusg TO l_aqtyg UNIT l_wa_mat-actuom * NO-GROUPING. * * l_wa_matg-stdusg = l_wa_matg-stdusg + l_wa_mat-stdusg. * WRITE : l_wa_matg-stdusg TO l_sqtyg UNIT l_wa_mat-stduom * NO-GROUPING. * * l_wa_matg-stdvar = l_wa_matg-stdvar + l_wa_mat-stdvar. * WRITE : l_wa_matg-stdvar TO l_svarg UNIT l_wa_mat-varuom * NO-GROUPING. * * WHEN rb_fiscl. * l_wa_matg-astprs = l_wa_matg-astprs + l_wa_mat-astprs * + l_wa_act-actu. ** + l_wa_act-actu * 10. "NEEL++ 13/07/2005++ * v_prs = l_wa_matg-astprs. * WRITE v_prs TO l_aqtyg CURRENCY v_waers NO-GROUPING. * * l_wa_matg-sstprs = l_wa_matg-sstprs + l_wa_mat-sstprs * + l_wa_act-stdu. ** + l_wa_act-stdu * 10. "NEEL++ 13/07/2005++ * * v_prs = l_wa_matg-sstprs. * WRITE v_prs TO l_sqtyg CURRENCY v_waers NO-GROUPING. * * l_wa_matg-varprs = l_wa_matg-varprs + l_wa_mat-varprs * + l_wa_act-varu. ** + l_wa_act-varu * 10. "NEEL++ 13/07/2005++ * * v_prs = l_wa_matg-varprs. * WRITE v_prs TO l_svarg CURRENCY v_waers NO-GROUPING. * ENDCASE. * * CLEAR : l_sqtys , l_aqtys , l_svars. * **** Displaying Grand Total * AT LAST. * CLEAR wa_nodestab. * wa_nodestab-id = c_2_2. * wa_nodestab-tlevel = c_2. * wa_nodestab-parent = c_1_1. * * wa_nodestab-text = 'Process Order Totals'(044). * wa_nodestab-text1 = space. * * wa_nodestab-tlength = c_26. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tlength2 = c_22. * wa_nodestab-tlength3 = c_22. * wa_nodestab-tlength4 = c_24. * * IF l_wa_matg-actuom %LT%GT v_waers. * WRITE : l_wa_matg-actuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_aqtyg l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * IF l_wa_matg-stduom %LT%GT v_waers. * WRITE : l_wa_matg-stduom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_sqtyg l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * IF l_wa_matg-varuom %LT%GT v_waers. * WRITE : l_wa_matg-varuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_svarg l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * wa_nodestab-tcolor = c_5. * wa_nodestab-tcolor1 = c_5. * wa_nodestab-tcolor2 = c_5. * wa_nodestab-tcolor3 = c_5. * wa_nodestab-tcolor4 = c_5. * * APPEND wa_nodestab TO i_nodestab. * ENDAT. * ENDLOOP. *ENDFORM. " DISPLAY_DETAIL_REPORT * **&--------------------------------------------------------------------* **& Form display_phase_report **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM display_phase_report. * * DATA: l_date_low(10) TYPE c, * l_date_high(10) TYPE c, * * l_effic TYPE char16, * l_arbpl TYPE arbpl, * * l_prdqty TYPE gamng, * l_prdq TYPE char18, * l_wprdqty TYPE menge_d, * l_prduom TYPE meins, * * l_act TYPE char16, * l_std TYPE char16, * * l_amenge TYPE menge_d, * l_smenge TYPE menge_d, * l_menge TYPE menge_d, * * l_aqty TYPE char18, * l_sqty TYPE char18, * l_svar TYPE char18, * l_svarp TYPE char18, * * l_aqtys TYPE char18, * l_sqtys TYPE char18, * l_svars TYPE char18, * * l_matuom TYPE meins, * l_stduom TYPE meins, * l_varuom TYPE meins, * l_uom TYPE meins, * * l_astprs TYPE ty_stprs, * l_sstprs TYPE ty_stprs, * l_stprs TYPE ty_stprs, * * l_total1 TYPE char1, * l_total2 TYPE char1, * l_total3 TYPE char1, * * l_wa_act TYPE ty_hier_act, * l_wa_mat TYPE ty_hier_mat_sum, * l_wa_phs TYPE ty_hier_phase, * l_i_phs TYPE STANDARD TABLE OF ty_hier_phase. * * PERFORM pfstatus. * SET PF-STATUS 'MAIN' EXCLUDING i_fcode. * SET TITLEBAR 'VARI' WITH text-068. * * l_i_phs = i_h_phs. * * SORT i_h_phs BY aufnr arbpl vornr. * * CLEAR wa_nodestab. * REFRESH i_nodestab. * * MOVE 'Display Phase Report'(030) TO v_output_text. * PERFORM inform_user_of_progress. * * CLEAR wa_nodestab. * wa_nodestab-id = c_1_1. * wa_nodestab-tlevel = c_1. * wa_nodestab-text = 'Production Variances'(031). * wa_nodestab-tlength = c_20. * wa_nodestab-compress = c_x. * APPEND wa_nodestab TO i_nodestab. * * LOOP AT i_h_ord INTO wa_h_ord. * * CLEAR: wa_nodestab, l_date_low, l_date_high. * * wa_nodestab-id = c_2_1. * wa_nodestab-tlevel = c_2. * wa_nodestab-parent = c_1_1. * ** Order Number text * wa_nodestab-text = 'Order Num:'(032). * wa_nodestab-tlength = c_12. * wa_nodestab-tcolor = c_1. * ** Order number * WRITE wa_h_ord-aufnr TO wa_nodestab-text1 NO-ZERO. * wa_nodestab-tlength1 = c_12. * wa_nodestab-tcolor1 = c_1. * ** Date Range * WRITE wa_h_ord-gstrp TO l_date_low. * WRITE wa_h_ord-gltrp TO l_date_high. * CONCATENATE l_date_low c_hyp l_date_high INTO wa_nodestab-text2 * SEPARATED BY space. * wa_nodestab-tlength2 = c_25. * wa_nodestab-tcolor2 = c_1. * ** Material Number * WRITE wa_h_ord-plnbez TO wa_nodestab-text3 NO-ZERO. * wa_nodestab-tlength3 = c_18. * wa_nodestab-tcolor3 = c_1. * ** Material Description * wa_nodestab-text4 = wa_h_ord-maktx. * wa_nodestab-tlength4 = c_33. * wa_nodestab-tcolor4 = c_1. * * APPEND wa_nodestab TO i_nodestab. * * CLEAR : l_aqtys, l_sqtys, l_svars, l_arbpl. * LOOP AT i_h_phs INTO wa_h_phs WHERE aufnr = wa_h_ord-aufnr. * l_wa_phs = wa_h_phs. * * IF l_arbpl %LT%GT wa_h_phs-arbpl. * CLEAR : wa_h_phs. * READ TABLE i_h_phs INTO wa_h_phs * WITH KEY aufnr = wa_h_ord-aufnr * arbpl = l_wa_phs-arbpl * steus = 'YBN1' * runtime = c_x. ** Resource Information * CLEAR : wa_nodestab. * wa_nodestab-id = c_3_1. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_1. * * wa_nodestab-text = 'Resource:'(035). * wa_nodestab-tlength = c_14. * wa_nodestab-tcolor = c_4. * * wa_nodestab-text1 = l_wa_phs-arbpl. * wa_nodestab-tlength1 = c_8. * wa_nodestab-tcolor1 = c_4. * * wa_nodestab-text2 = l_wa_phs-ktext. * wa_nodestab-tlength2 = c_37. * wa_nodestab-tcolor2 = c_4. * * IF l_wa_phs-steus = 'YBN1'. * l_effic = wa_h_phs-el_effc. * CONCATENATE 'Exp. Line Eff.'(036) l_effic c_perc * INTO wa_nodestab-text3 SEPARATED BY space. * CONDENSE wa_nodestab-text3. * wa_nodestab-tlength3 = c_30. * wa_nodestab-tcolor3 = c_4. * * l_effic = wa_h_phs-ac_effc. * CONCATENATE 'Act. Line Eff.'(037) l_effic c_perc * INTO wa_nodestab-text4 SEPARATED BY space. * CONDENSE wa_nodestab-text4. * wa_nodestab-tlength4 = c_30. * wa_nodestab-tcolor4 = c_4. * ENDIF. * APPEND wa_nodestab TO i_nodestab. * * l_arbpl = l_wa_phs-arbpl. * wa_h_phs = l_wa_phs. * ENDIF. * * CLEAR : wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_1. *** Phase Number * wa_nodestab-text = 'Phase'(038). * wa_nodestab-tlength = c_10. * wa_nodestab-tcolor = c_4. * * CONCATENATE wa_h_phs-vornr wa_h_phs-steus * wa_h_phs-ltxa1 * INTO wa_nodestab-text1 * SEPARATED BY space. * wa_nodestab-tlength1 = c_40. * wa_nodestab-tcolor1 = c_4. * *** PO Quantity ** l_prdqty = wa_h_phs-lmnga. * l_prdqty = wa_h_phs-prdqty. * l_prduom = wa_h_phs-prduom. * * IF rb_kgm = c_x AND l_prduom %LT%GT 'KG'. * IF wa_h_phs-bsuom %LT%GT 'KG'. * PERFORM convert_to_kg USING wa_h_ord-plnbez wa_h_phs-bsuom * wa_h_phs-gewei wa_h_phs-ntgew * wa_h_phs-bprdqty * CHANGING l_wprdqty * v_conv_rc. * IF v_conv_rc %LT%GT 'X'. * l_prdqty = l_wprdqty. * l_prduom = 'KG'. * ENDIF. * * ELSE. * l_prdqty = wa_h_phs-bprdqty. * l_prduom = 'KG'. * ENDIF. * ENDIF. * * WRITE : l_prdqty TO l_prdq UNIT l_prduom NO-GROUPING, * l_prduom TO l_uom. * **** text for Order Qty * IF rb_pland = c_x. *** Planned Production * CONCATENATE 'Plan Qty:'(076) l_prdq l_uom * INTO wa_nodestab-text2 SEPARATED BY space. * ELSE. *** Actual Production * IF rb_prod = c_x. ** Produced * CONCATENATE 'Prod Qty:'(033) l_prdq l_uom * INTO wa_nodestab-text2 SEPARATED BY space. * ELSE. ** Confirmed * CONCATENATE 'Conf Qty:'(034) l_prdq l_uom * INTO wa_nodestab-text2 SEPARATED BY space. * ENDIF. * ENDIF. * * CONDENSE : wa_nodestab-text2. * * wa_nodestab-tlength2 = 32. * wa_nodestab-tcolor2 = c_4. * APPEND wa_nodestab TO i_nodestab. **** **** Activity Information **** * CLEAR wa_nodestab. * wa_nodestab-id = c_5_1. * wa_nodestab-tlevel = c_5. * wa_nodestab-parent = c_4_1. * * wa_nodestab-text = 'Activity'(052). * wa_nodestab-tlength = 34. * * wa_nodestab-text1 = 'Actual Usage'(040). * wa_nodestab-tlength1 = c_20. * * wa_nodestab-text2 = 'Standard Usage'(041). * wa_nodestab-tlength2 = c_20. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage Var'(042) v_waers * INTO wa_nodestab-text3 SEPARATED BY space. * ELSE. * CONCATENATE 'Standard Usage Var'(042) 'UoM' * INTO wa_nodestab-text3 SEPARATED BY space. * ENDIF. * wa_nodestab-tlength3 = c_24. * * CONCATENATE 'Standard Usage Var'(042) c_perc * INTO wa_nodestab-text4 SEPARATED BY space. * wa_nodestab-tlength4 = c_20. * * wa_nodestab-tcolor = c_4. * wa_nodestab-tcolor1 = c_4. * wa_nodestab-tcolor2 = c_4. * wa_nodestab-tcolor3 = c_4. * wa_nodestab-tcolor4 = c_4. * * APPEND wa_nodestab TO i_nodestab. * * CLEAR : flg_color , l_act , l_std , l_svar , l_svarp , l_wa_act, * l_total1 , l_total2. * LOOP AT i_h_act INTO wa_h_act WHERE aufnr = wa_h_phs-aufnr * AND aufpl = wa_h_phs-aufpl * AND aplzl = wa_h_phs-aplzl * AND vornr = wa_h_phs-vornr. * CLEAR : wa_nodestab. * wa_nodestab-id = c_6_1. * wa_nodestab-tlevel = c_6. * wa_nodestab-parent = c_5_1. * * wa_nodestab-text = wa_h_act-txtxx. * wa_nodestab-tlength = c_30. * wa_nodestab-tlength1 = c_20. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tlength3 = c_24. * wa_nodestab-tlength4 = c_20. * * IF rb_quant = c_x. * WRITE : wa_h_act-ismxx TO l_act UNIT wa_h_act-ilexx * NO-GROUPING, * wa_h_act-ilexx TO l_uom. * CONCATENATE l_act l_uom INTO wa_nodestab-text1 * SEPARATED BY space. * * WRITE : wa_h_act-vgwxx TO l_std UNIT wa_h_act-vgexx * NO-GROUPING, * wa_h_act-vgexx TO l_uom. * CONCATENATE l_std l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * WRITE wa_h_act-stdvar TO l_svar UNIT wa_h_act-vgexx * NO-GROUPING. * CONCATENATE l_svar l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * IF wa_h_act-ismxx %LT%GT 0. * IF l_total2 %LT%GT c_x. * l_total2 = c_x. * l_wa_act-ilexx = wa_h_act-ilexx. * ENDIF. * * IF l_wa_act-ilexx = wa_h_act-ilexx. * l_wa_act-ismxx = l_wa_act-ismxx + wa_h_act-ismxx. * l_wa_act-ilexx = wa_h_act-ilexx. * * ELSEIF wa_h_act-ismxx %LT%GT 0. * CLEAR : l_wa_act-ismxx , l_wa_act-ilexx. * ENDIF. * ENDIF. * * IF wa_h_act-vgwxx %LT%GT 0. * IF l_total1 %LT%GT c_x. * l_total1 = c_x. * l_wa_act-vgexx = wa_h_act-vgexx. * ENDIF. * * IF l_wa_act-vgexx = wa_h_act-vgexx. * l_wa_act-vgwxx = l_wa_act-vgwxx + wa_h_act-vgwxx. * l_wa_act-stdvar = l_wa_act-stdvar + wa_h_act-stdvar. * l_wa_act-vgexx = wa_h_act-vgexx. * * ELSEIF wa_h_act-vgwxx %LT%GT 0. * CLEAR : l_wa_act-vgwxx , l_wa_act-vgexx, l_wa_act-stdvar. * ENDIF. * ENDIF. * * IF wa_h_act-vgwxx %LT%GT 0. * wa_h_act-varper = ( wa_h_act-stdvar / wa_h_act-vgwxx ) * 100 * . * ENDIF. * * ELSE. * * wa_h_act-actu = wa_h_act-ismxx * ( wa_h_act-togxx / * wa_h_act-toexx ). * * WRITE : wa_h_act-actu TO l_act CURRENCY v_waers NO-GROUPING, * v_waers TO l_uom. * CONCATENATE l_act l_uom INTO wa_nodestab-text1 * SEPARATED BY space. * * wa_h_act-stdu = wa_h_act-vgwxx * * ( wa_h_act-togxx / wa_h_act-toexx ). * * WRITE wa_h_act-stdu TO l_std CURRENCY v_waers NO-GROUPING. * CONCATENATE l_std l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * wa_h_act-varu = wa_h_act-stdvar * * ( wa_h_act-togxx / wa_h_act-toexx ). * * WRITE wa_h_act-varu TO l_svar CURRENCY v_waers NO-GROUPING. * CONCATENATE l_svar l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * IF wa_h_act-stdu %LT%GT 0. * wa_h_act-varper = ( wa_h_act-varu / wa_h_act-stdu ) * 100. * ENDIF. * * l_wa_act-actu = l_wa_act-actu + wa_h_act-actu. * l_wa_act-stdu = l_wa_act-stdu + wa_h_act-stdu. * l_wa_act-varu = l_wa_act-varu + wa_h_act-varu. * ENDIF. * * WRITE wa_h_act-varper TO l_svarp NO-GROUPING DECIMALS 2. * CONCATENATE l_svarp c_perc INTO wa_nodestab-text4 * SEPARATED BY space. * IF flg_color = c_x. * CLEAR flg_color. * wa_nodestab-tcolor = c_3. * wa_nodestab-tcolor1 = c_3. * wa_nodestab-tcolor2 = c_3. * wa_nodestab-tcolor3 = c_3. * wa_nodestab-tcolor4 = c_3. * wa_nodestab-tcolor5 = c_3. * wa_nodestab-tcolor6 = c_3. * wa_nodestab-tcolor7 = c_3. * wa_nodestab-tcolor8 = c_3. * ELSE. * flg_color = c_x. * wa_nodestab-tcolor = c_2. * wa_nodestab-tcolor1 = c_2. * wa_nodestab-tcolor2 = c_2. * wa_nodestab-tcolor3 = c_2. * wa_nodestab-tcolor4 = c_2. * wa_nodestab-tcolor5 = c_2. * wa_nodestab-tcolor6 = c_2. * wa_nodestab-tcolor7 = c_2. * wa_nodestab-tcolor8 = c_2. * ENDIF. * * APPEND wa_nodestab TO i_nodestab. * ENDLOOP. **** Displaying Activity Subtotals * CLEAR wa_nodestab. * wa_nodestab-id = c_6_1. * wa_nodestab-tlevel = c_6. * wa_nodestab-parent = c_5_1. * * wa_nodestab-text = 'Activity Totals'(074). * wa_nodestab-tlength = c_30. * wa_nodestab-tcolor = c_6. * * IF rb_quant = c_x. * WRITE : l_wa_act-ismxx TO l_act UNIT l_wa_act-ilexx NO-GROUPING * l_wa_act-ilexx TO l_uom. * CONCATENATE l_act l_uom INTO wa_nodestab-text1 * SEPARATED BY space. * * WRITE : l_wa_act-vgwxx TO l_std UNIT l_wa_act-vgexx NO-GROUPING * l_wa_act-vgexx TO l_uom. * CONCATENATE l_std l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * WRITE : l_wa_act-stdvar TO l_svar UNIT l_wa_act-vgexx * NO-GROUPING. * CONCATENATE l_svar l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * ELSE. * WRITE : l_wa_act-actu TO l_act CURRENCY v_waers NO-GROUPING, * v_waers TO l_uom. * CONCATENATE l_act l_uom INTO wa_nodestab-text1 * SEPARATED BY space. * * WRITE : l_wa_act-stdu TO l_std CURRENCY v_waers NO-GROUPING. * CONCATENATE l_std l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * WRITE : l_wa_act-varu TO l_svar UNIT l_wa_act-vgexx NO-GROUPING . * CONCATENATE l_svar l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * ENDIF. * * wa_nodestab-tlength1 = c_20. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tlength3 = c_24. * * wa_nodestab-tcolor1 = c_6. * wa_nodestab-tcolor2 = c_6. * wa_nodestab-tcolor3 = c_6. * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. * **** **** Material Information **** * READ TABLE i_h_mat INTO wa_h_mat WITH KEY aufnr = wa_h_phs-aufnr * aufpl = wa_h_phs-aufpl * aplzl = wa_h_phs-aplzl * vornr = wa_h_phs-vornr. * CHECK sy-subrc = 0. * * CLEAR : wa_nodestab. * wa_nodestab-id = c_5_2. * wa_nodestab-tlevel = c_5. * wa_nodestab-parent = c_4_1. * PERFORM material_header USING wa_nodestab. * * APPEND wa_nodestab TO i_nodestab. * * CLEAR : wa_nodestab , l_menge , l_stprs , * l_total1 , l_total2 , l_total3 , * l_wa_mat , l_aqtys , l_sqtys , l_svars. * LOOP AT i_h_mat INTO wa_h_mat WHERE aufnr = wa_h_phs-aufnr * AND aufpl = wa_h_phs-aufpl * AND aplzl = wa_h_phs-aplzl * AND vornr = wa_h_phs-vornr. * l_smenge = l_menge. * l_sstprs = l_stprs. * PERFORM do_mat_calc CHANGING wa_h_mat * l_aqty l_matuom * l_sqty l_stduom * l_svar l_varuom * l_svarp * l_amenge l_smenge * l_astprs l_sstprs. * l_menge = l_menge + l_smenge. * l_stprs = l_stprs + l_sstprs. * * CHECK wa_h_mat-sumi = c_x. * * CLEAR: wa_nodestab , l_menge , l_stprs. * wa_nodestab-id = c_6_2. * wa_nodestab-tlevel = c_6. * wa_nodestab-parent = c_5_2. ** Material Number * WRITE wa_h_mat-matnr TO wa_nodestab-text NO-ZERO. ** Material Description * wa_nodestab-text1 = wa_h_mat-maktx. * * wa_nodestab-tlength = c_18. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tlength2 = c_22. * wa_nodestab-tlength3 = c_22. * wa_nodestab-tlength4 = c_24. * wa_nodestab-tlength5 = c_20. * * IF l_matuom %LT%GT v_waers. * WRITE : l_matuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_aqty l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * IF l_stduom %LT%GT v_waers. * WRITE : l_stduom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_sqty l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * IF l_varuom %LT%GT v_waers. * WRITE : l_varuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_svar l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * * CONCATENATE l_svarp c_perc INTO wa_nodestab-text5 * SEPARATED BY space. * wa_nodestab-tcolor = c_3. * wa_nodestab-tcolor1 = c_3. * wa_nodestab-tcolor2 = c_3. * wa_nodestab-tcolor3 = c_3. * wa_nodestab-tcolor4 = c_3. * wa_nodestab-tcolor5 = c_3. * * APPEND wa_nodestab TO i_nodestab. * * IF l_aqty CA '123456789'. * IF l_total1 %LT%GT c_x. * l_total1 = c_x. * l_wa_mat-actuom = l_matuom. * ENDIF. * * IF l_wa_mat-actuom %LT%GT l_matuom. * CLEAR : l_wa_mat-actusg , l_wa_mat-astprs , l_wa_mat-actuom * l_aqtys, l_amenge , l_astprs. * ENDIF. * ENDIF. * * IF l_sqty CA '123456789'. * IF l_total2 %LT%GT c_x. * l_total2 = c_x. * l_wa_mat-stduom = l_stduom. * ENDIF. * * IF l_wa_mat-stduom %LT%GT l_stduom. * CLEAR : l_wa_mat-stdusg , l_wa_mat-sstprs , * l_wa_mat-stduom , * l_sqtys, l_smenge , l_sstprs. * ENDIF. * ENDIF. * * IF l_svar CA '123456789'. * IF l_total3 %LT%GT c_x. * l_total3 = c_x. * l_wa_mat-varuom = l_varuom. * ENDIF. * * IF l_wa_mat-varuom %LT%GT l_varuom. * CLEAR : l_wa_mat-stdvar, l_wa_mat-varprs , l_wa_mat-varuom, * l_svars, wa_h_mat-vstprs , wa_h_mat-stdvar. * ENDIF. * ENDIF. * * CASE c_x. * WHEN rb_quant. * l_wa_mat-actusg = l_wa_mat-actusg + l_amenge. * WRITE l_wa_mat-actusg TO l_aqtys UNIT l_wa_mat-actuom * NO-GROUPING. * * l_wa_mat-stdusg = l_wa_mat-stdusg + l_smenge. * WRITE l_wa_mat-stdusg TO l_sqtys UNIT l_wa_mat-stduom * NO-GROUPING. * * l_wa_mat-stdvar = l_wa_mat-stdvar + wa_h_mat-stdvar. * WRITE : l_wa_mat-stdvar TO l_svars UNIT l_wa_mat-stduom * NO-GROUPING. * * WHEN rb_fiscl. * l_wa_mat-astprs = l_wa_mat-astprs + l_astprs. * v_prs = l_wa_mat-astprs. * WRITE v_prs TO l_aqtys CURRENCY v_waers NO-GROUPING. * * l_wa_mat-sstprs = l_wa_mat-sstprs + l_sstprs. * v_prs = l_wa_mat-sstprs. * WRITE v_prs TO l_sqtys CURRENCY v_waers NO-GROUPING. * * l_wa_mat-varprs = l_wa_mat-varprs + wa_h_mat-vstprs. * v_prs = l_wa_mat-varprs. * WRITE v_prs TO l_svars CURRENCY v_waers NO-GROUPING. * ENDCASE. * ENDLOOP. **** Displaying Material Subtotals * CLEAR wa_nodestab. * wa_nodestab-id = c_6_2. * wa_nodestab-tlevel = c_6. * wa_nodestab-parent = c_5_2. * * wa_nodestab-text = 'Material Totals'(043). * wa_nodestab-text1 = space. * * wa_nodestab-tlength = c_18. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tlength2 = c_22. * wa_nodestab-tlength3 = c_22. * wa_nodestab-tlength4 = c_24. * * IF l_wa_mat-actuom %LT%GT v_waers. * WRITE : l_wa_mat-actuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_aqtys l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * IF l_wa_mat-stduom %LT%GT v_waers. * WRITE : l_wa_mat-stduom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_sqtys l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * IF l_wa_mat-varuom %LT%GT v_waers. * WRITE : l_wa_mat-varuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_svars l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * wa_nodestab-tcolor = c_6. * wa_nodestab-tcolor1 = c_6. * wa_nodestab-tcolor2 = c_6. * wa_nodestab-tcolor3 = c_6. * wa_nodestab-tcolor4 = c_6. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab, l_aqtys, l_sqtys, l_svars. * ENDLOOP. * ENDLOOP. * * i_h_phs = l_i_phs. *ENDFORM. " DISPLAY_PHASE_REPORT * **&--------------------------------------------------------------------* **& Form display_summary_report **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM display_summary_report. * * DATA: l_prdqty TYPE gamng, * l_prdq TYPE char18, * l_wprdqty TYPE menge_d, * l_tprdqty TYPE menge_d, * l_prduom TYPE meins, * * l_act TYPE char16, * l_std TYPE char16, * * l_actt TYPE char16, * l_stdt TYPE char16, * l_svart TYPE char18, * * l_amenge TYPE menge_d, * l_smenge TYPE menge_d, * l_menge TYPE menge_d, * * l_astprs TYPE ty_stprs, * l_sstprs TYPE ty_stprs, * l_stprs TYPE ty_stprs, * l_stprsq TYPE ty_stprs, * l_varprsq TYPE ty_stprs, * * l_matuom TYPE meins, * l_stduom TYPE meins, * l_varuom TYPE meins, * l_uom TYPE meins, * * l_aqty TYPE char18, * l_sqty TYPE char18, * l_svar TYPE char18, * l_svarp TYPE char18, * l_svarq TYPE char18, * * l_aqtyv TYPE char18, * l_sqtyv TYPE char18, * l_svarv TYPE char18, * l_svarpv TYPE char18, * * l_aqtyg TYPE char18, * l_sqtyg TYPE char18, * l_svarg TYPE char18, * l_svargq TYPE char18, * * l_aqtys TYPE char18, * l_sqtys TYPE char18, * l_svars TYPE char18, * * l_total1 TYPE char1, * l_total2 TYPE char1, * l_total3 TYPE char1, * * l_totalg1 TYPE char1, * l_totalg2 TYPE char1, * l_totalg3 TYPE char1, * * l_wa_acts TYPE ty_hier_act_sum, * l_wa_mats TYPE ty_hier_mat_sum. * * PERFORM pfstatus. * SET PF-STATUS 'MAIN' EXCLUDING i_fcode. * SET TITLEBAR 'VARI' WITH text-067. * * REFRESH : i_nodestab. * * MOVE 'Display Summary Report'(029) TO v_output_text. * PERFORM inform_user_of_progress. * * CLEAR wa_nodestab. * wa_nodestab-id = c_1_1. * wa_nodestab-tlevel = c_1. * wa_nodestab-text = 'Production Variances'(031). * wa_nodestab-tlength = c_20. * wa_nodestab-compress = c_x. * APPEND wa_nodestab TO i_nodestab. * * CLEAR: wa_nodestab. * wa_nodestab-id = c_2_1. * wa_nodestab-tlevel = c_2. * wa_nodestab-parent = c_1_1. * * CONCATENATE 'Summary of Orders for'(046) 'Plant:'(047) p_werks * INTO wa_nodestab-text SEPARATED BY space. * wa_nodestab-tlength = c_45. * wa_nodestab-tcolor = c_1. * * IF r_steus IS INITIAL. * wa_nodestab-text1 = 'Control Key : ALL'(075). * ELSE. * CLEAR : wa_steus. * READ TABLE r_steus INTO wa_steus INDEX 1. * CONCATENATE 'Control Key:'(048) wa_steus-low 'TO' wa_steus-high * INTO wa_nodestab-text1 SEPARATED BY space. * ENDIF. * wa_nodestab-tlength1 = c_25. * wa_nodestab-tcolor1 = c_1. * * IF s_arbpl[] IS INITIAL. * wa_nodestab-text2 = 'Resources: All'(049). * ELSE. * CONCATENATE 'Resources:'(065) s_arbpl-low c_hyp s_arbpl-high * INTO wa_nodestab-text2 SEPARATED BY space. * ENDIF. * wa_nodestab-tlength2 = c_25. * wa_nodestab-tcolor2 = c_1. * * APPEND wa_nodestab TO i_nodestab. * * CLEAR : l_tprdqty. * LOOP AT i_h_ord INTO wa_h_ord. ** convert to KG * CLEAR : l_wprdqty. * IF wa_h_ord-bsuom %LT%GT 'KG'. * PERFORM convert_to_kg USING wa_h_ord-plnbez wa_h_ord-bsuom * wa_h_ord-gewei wa_h_ord-ntgew * wa_h_ord-bprdqty * CHANGING l_wprdqty * v_conv_rc. * IF v_conv_rc %LT%GT 'X'. * l_prdqty = l_wprdqty. * l_prduom = 'KG'. * ELSE. * CLEAR : l_wprdqty. * ENDIF. * * ELSE. * l_prdqty = wa_h_ord-bprdqty. * l_prduom = 'KG'. * ENDIF. * * l_tprdqty = l_tprdqty + l_prdqty. * ENDLOOP. * * WRITE : l_tprdqty TO l_prdq UNIT 'KG' NO-GROUPING. * * CLEAR : wa_nodestab. * wa_nodestab-id = c_3_1. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_1. * **** text for Order Qty * IF rb_pland = c_x. *** Planned Production * CONCATENATE 'Plan Qty:'(076) l_prdq 'KG' * INTO wa_nodestab-text SEPARATED BY space. * ELSE. *** Actual Production * IF rb_prod = c_x. ** Produced * CONCATENATE 'Prod Qty:'(033) l_prdq 'KG' * INTO wa_nodestab-text SEPARATED BY space. * ELSE. ** Confirmed * CONCATENATE 'Conf Qty:'(034) l_prdq 'KG' * INTO wa_nodestab-text SEPARATED BY space. * ENDIF. * ENDIF. * * CONDENSE : wa_nodestab-text. * * wa_nodestab-tlength = c_35. * wa_nodestab-tcolor = c_1. * * APPEND wa_nodestab TO i_nodestab. * **** **** Activity Summary **** * CLEAR : wa_nodestab. * wa_nodestab-id = c_3_2. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_1. * * wa_nodestab-text = 'Activity'(052). * wa_nodestab-tlength = 34. * * wa_nodestab-tlength1 = c_20. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tlength3 = c_24. * wa_nodestab-tlength4 = c_20. * * IF rb_fiscl = c_x. * CONCATENATE 'Actual Usage'(040) v_waers * INTO wa_nodestab-text1 SEPARATED BY space. * * CONCATENATE 'Standard Usage'(041) v_waers * INTO wa_nodestab-text2 SEPARATED BY space. * * CONCATENATE 'Standard Usage Var'(042) v_waers * INTO wa_nodestab-text3 SEPARATED BY space. * * ELSE. * CONCATENATE 'Actual Usage'(040) 'UoM' * INTO wa_nodestab-text1 SEPARATED BY space. * * CONCATENATE 'Standard Usage'(041) 'UoM' * INTO wa_nodestab-text2 SEPARATED BY space. * * CONCATENATE 'Standard Usage Var'(042) 'UoM' * INTO wa_nodestab-text3 SEPARATED BY space. * * ENDIF. * * CONCATENATE 'Standard Usage Var'(042) c_perc * INTO wa_nodestab-text4 SEPARATED BY space. * * wa_nodestab-tcolor = c_4. * wa_nodestab-tcolor1 = c_4. * wa_nodestab-tcolor2 = c_4. * wa_nodestab-tcolor3 = c_4. * wa_nodestab-tcolor4 = c_4. * APPEND wa_nodestab TO i_nodestab. * * CLEAR : flg_color , l_actt , l_stdt , l_svart , l_svarp, * l_wa_acts. * LOOP AT i_parn INTO wa_parn. * CLEAR : wa_acts, flg_color , l_act , l_std , l_svar , l_svarp. * LOOP AT i_h_act INTO wa_h_act WHERE parxx = wa_parn-parxx. * wa_acts-parxx = wa_h_act-parxx. * wa_acts-txtxx = wa_h_act-txtxx. * * IF rb_quant EQ c_x. * wa_acts-ilexx = wa_h_act-ilexx. * wa_acts-ismxx = wa_acts-ismxx + wa_h_act-ismxx. * wa_acts-vgexx = wa_h_act-vgexx. * wa_acts-vgwxx = wa_acts-vgwxx + wa_h_act-vgwxx. * wa_acts-stdvar = wa_acts-stdvar + wa_h_act-stdvar. * * IF wa_acts-ilexx IS INITIAL AND NOT wa_acts-vgexx IS INITIAL. * wa_acts-ilexx = wa_acts-vgexx. * * ELSEIF NOT wa_acts-ilexx IS INITIAL AND * wa_acts-vgexx IS INITIAL. * wa_acts-vgexx = wa_acts-ilexx. * ENDIF. * * ELSE. * * IF wa_h_act-toexx %LT%GT 0. * wa_acts-actu = wa_acts-actu + wa_h_act-ismxx * * ( wa_h_act-togxx / wa_h_act-toexx ). * wa_acts-stdu = wa_acts-stdu + wa_h_act-vgwxx * * ( wa_h_act-togxx / wa_h_act-toexx ). * wa_acts-varu = wa_acts-varu + wa_h_act-stdvar * * ( wa_h_act-togxx / wa_h_act-toexx ). * ENDIF. * ENDIF. * ENDLOOP. * * CLEAR : wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * wa_nodestab-text = wa_acts-txtxx. * wa_nodestab-tlength = c_30. * wa_nodestab-tlength1 = c_20. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tlength3 = c_24. * wa_nodestab-tlength4 = c_20. * * IF rb_quant = c_x. * WRITE : wa_acts-ismxx TO l_act UNIT wa_acts-ilexx NO-GROUPING, * wa_acts-ilexx TO l_uom. * CONCATENATE l_act l_uom INTO wa_nodestab-text1 * SEPARATED BY space. * * WRITE : wa_acts-vgwxx TO l_std UNIT wa_acts-vgexx NO-GROUPING, * wa_acts-vgexx TO l_uom. * CONCATENATE l_std l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * WRITE : wa_acts-stdvar TO l_svar UNIT wa_acts-vgexx NO-GROUPING. * CONCATENATE l_svar l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * IF wa_acts-vgwxx %LT%GT 0. * wa_acts-varper = ( wa_acts-stdvar / wa_acts-vgwxx ) * 100. * ENDIF. * * WRITE wa_acts-varper TO l_svarp DECIMALS 2 NO-GROUPING. * CONCATENATE l_svarp c_perc INTO wa_nodestab-text4 * SEPARATED BY space. * IF wa_acts-ismxx %LT%GT 0. * IF l_total2 %LT%GT c_x. * l_total2 = c_x. * l_wa_acts-ilexx = wa_acts-ilexx. * ENDIF. * * IF l_wa_acts-ilexx = wa_acts-ilexx AND NOT l_wa_acts-ilexx IS * INITIAL. * l_wa_acts-ismxx = l_wa_acts-ismxx + wa_acts-ismxx. * l_wa_acts-ilexx = wa_acts-ilexx. * * ELSEIF wa_acts-ismxx %LT%GT 0. * CLEAR : l_wa_acts-ismxx , l_wa_acts-ilexx, l_actt. * ENDIF. * ENDIF. * * IF wa_acts-vgwxx %LT%GT 0. * IF l_total1 %LT%GT c_x. * l_total1 = c_x. * l_wa_acts-vgexx = wa_acts-vgexx. * ENDIF. * * IF l_wa_acts-vgexx = wa_acts-vgexx AND NOT l_wa_acts-vgexx IS * INITIAL. * l_wa_acts-vgwxx = l_wa_acts-vgwxx + wa_acts-vgwxx. * l_wa_acts-stdvar = l_wa_acts-stdvar + wa_acts-stdvar. * l_wa_acts-vgexx = wa_acts-vgexx. * * ELSEIF wa_acts-vgwxx %LT%GT 0. * CLEAR : l_wa_acts-vgwxx , l_wa_acts-vgexx, l_wa_acts-stdvar, * l_stdt, l_svart. * ENDIF. * ENDIF. * * WRITE l_wa_acts-ismxx TO l_actt * UNIT l_wa_acts-ilexx NO-GROUPING * . * WRITE l_wa_acts-vgwxx TO l_stdt * UNIT l_wa_acts-vgexx NO-GROUPING * . * WRITE l_wa_acts-stdvar TO l_svart * UNIT l_wa_acts-vgexx NO-GROUPING * . * * ELSE. * WRITE : wa_acts-actu TO l_act CURRENCY v_waers NO-GROUPING. ** l_act = wa_acts-actu. * CONCATENATE l_act v_waers INTO wa_nodestab-text1 * SEPARATED BY space. * * WRITE : wa_acts-stdu TO l_std CURRENCY v_waers NO-GROUPING. ** l_std = wa_acts-stdu. * CONCATENATE l_std v_waers INTO wa_nodestab-text2 * SEPARATED BY space. * * WRITE : wa_acts-varu TO l_svar CURRENCY v_waers NO-GROUPING. ** l_svar = wa_acts-varu. * CONCATENATE l_svar v_waers INTO wa_nodestab-text3 * SEPARATED BY space. * * IF wa_acts-stdu %LT%GT 0. * wa_acts-varper = ( wa_acts-varu / wa_acts-stdu ) * 100. * ENDIF. * l_svarp = wa_acts-varper. * CONCATENATE l_svarp c_perc INTO wa_nodestab-text4 * SEPARATED BY space. * * l_wa_acts-actu = l_wa_acts-actu + wa_acts-actu. * l_wa_acts-stdu = l_wa_acts-stdu + wa_acts-stdu. * l_wa_acts-varu = l_wa_acts-varu + wa_acts-varu. * * WRITE l_wa_acts-actu TO l_actt CURRENCY v_waers NO-GROUPING. * WRITE l_wa_acts-stdu TO l_stdt CURRENCY v_waers NO-GROUPING. * WRITE l_wa_acts-varu TO l_svart CURRENCY v_waers NO-GROUPING. * l_wa_acts-ilexx = v_waers. * l_wa_acts-vgexx = v_waers. * ENDIF. * * IF flg_color = c_x. * CLEAR flg_color. * wa_nodestab-tcolor = c_3. * wa_nodestab-tcolor1 = c_3. * wa_nodestab-tcolor2 = c_3. * wa_nodestab-tcolor3 = c_3. * wa_nodestab-tcolor4 = c_3. * ELSE. * flg_color = c_x. * wa_nodestab-tcolor = c_2. * wa_nodestab-tcolor1 = c_2. * wa_nodestab-tcolor2 = c_2. * wa_nodestab-tcolor3 = c_2. * wa_nodestab-tcolor4 = c_2. * ENDIF. * APPEND wa_nodestab TO i_nodestab. * ENDLOOP. ** Displaying Activity Subtotals * CLEAR wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * wa_nodestab-text = 'Activity Totals'(074). * wa_nodestab-tlength = c_30. * wa_nodestab-tlength1 = c_20. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tlength3 = c_24. * * IF l_wa_acts-ilexx %LT%GT v_waers. * WRITE : l_wa_acts-ilexx TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_actt l_uom INTO wa_nodestab-text1 * SEPARATED BY space. * * IF l_wa_acts-vgexx %LT%GT v_waers. * WRITE : l_wa_acts-vgexx TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_stdt l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * CONCATENATE l_svart l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * wa_nodestab-tcolor = c_6. * wa_nodestab-tcolor1 = c_6. * wa_nodestab-tcolor2 = c_6. * wa_nodestab-tcolor3 = c_6. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. * **** **** Material Information **** * READ TABLE i_h_mat INTO wa_h_mat INDEX 1. * IF sy-subrc = 0. * * CLEAR : wa_nodestab. * wa_nodestab-id = c_3_3. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_1. * PERFORM material_header USING wa_nodestab. * * APPEND wa_nodestab TO i_nodestab. * * CLEAR : wa_nodestab , l_amenge , l_smenge , l_wa_mats, * l_totalg1 , l_totalg2 , l_totalg3 , * l_sqtyg , l_aqtyg , l_svarg , * l_svargq , l_stprsq. * * LOOP AT i_matn INTO wa_matn. * CLEAR : wa_mats , l_sqty , l_aqty , l_svar , l_svarp, * l_svarq , l_varprsq, * l_total1 , l_total2 , l_total3, l_menge , l_stprs. * * LOOP AT i_h_mat INTO wa_h_mat WHERE matnr = wa_matn-matnr * AND bwart = wa_matn-bwart. * "28/06/2005++ * CLEAR : l_amenge , l_astprs , l_smenge , l_sstprs. * * l_sstprs = l_stprs. * l_smenge = l_menge. * PERFORM do_mat_calc CHANGING wa_h_mat * l_aqtyv l_matuom * l_sqtyv l_stduom * l_svarv l_varuom * l_svarpv * l_amenge l_smenge * l_astprs l_sstprs. * l_stprs = l_stprs + l_sstprs. * l_menge = l_menge + l_smenge. * * CHECK wa_h_mat-sumi = c_x. * CLEAR : l_menge , l_stprs. * * IF rb_quant EQ c_x. * IF l_matuom IS INITIAL OR l_matuom EQ l_stduom. * wa_h_mat-stdvar = l_smenge - l_amenge. * ENDIF. * * IF l_amenge %LT%GT 0. * IF l_total1 %LT%GT c_x. * l_total1 = c_x. * wa_mats-actuom = l_matuom. * ENDIF. * * IF wa_mats-actuom = l_matuom. * wa_mats-actusg = wa_mats-actusg + l_amenge. * ELSE. * CLEAR : wa_mats-actusg , wa_mats-actuom, l_aqty , * wa_mats-actuom. * ENDIF. * ENDIF. * * IF l_smenge %LT%GT 0. * IF l_total2 %LT%GT c_x. * l_total2 = c_x. * wa_mats-stduom = l_stduom. * ENDIF. * * IF wa_mats-stduom = l_stduom. * wa_mats-stdusg = wa_mats-stdusg + l_smenge. * ELSE. * CLEAR : wa_mats-stdusg , wa_mats-stduom, l_sqty , * wa_mats-stduom. * ENDIF. * ENDIF. * * IF wa_h_mat-stdvar %LT%GT 0. * IF l_total3 %LT%GT c_x. * l_total3 = c_x. * wa_mats-varuom = l_stduom. * ENDIF. * * IF wa_mats-varuom = l_stduom. * wa_mats-stdvar = wa_mats-stdvar + wa_h_mat-stdvar. * ELSE. * CLEAR : wa_mats-stdvar, wa_mats-varuom, l_svar. * ENDIF. * ENDIF. * * WRITE : wa_mats-actusg TO l_aqty UNIT wa_mats-actuom * NO-GROUPING. * WRITE : wa_mats-stdusg TO l_sqty UNIT wa_mats-stduom * NO-GROUPING. * WRITE : wa_mats-stdvar TO l_svar UNIT wa_mats-stduom * NO-GROUPING. * * wa_mats-astprs = wa_mats-astprs + l_astprs. * wa_mats-sstprs = wa_mats-sstprs + l_sstprs. * wa_mats-varprs = wa_mats-varprs + l_sstprs - l_astprs. * * v_prs = wa_mats-varprs. * WRITE : v_prs TO l_svarq CURRENCY v_waers NO-GROUPING. * ELSE. * * wa_mats-astprs = wa_mats-astprs + l_astprs. * wa_mats-sstprs = wa_mats-sstprs + l_sstprs. * wa_mats-varprs = wa_mats-varprs + l_sstprs - l_astprs. * * wa_mats-actuom = v_waers. * wa_mats-stduom = v_waers. * wa_mats-varuom = v_waers. * * v_prs = wa_mats-astprs. * WRITE : v_prs TO l_aqty CURRENCY v_waers NO-GROUPING. * v_prs = wa_mats-sstprs. * WRITE : v_prs TO l_sqty CURRENCY v_waers NO-GROUPING. * v_prs = wa_mats-varprs. * WRITE : v_prs TO l_svar CURRENCY v_waers NO-GROUPING. * ENDIF. * * wa_mats-matnr = wa_h_mat-matnr. * wa_mats-maktx = wa_h_mat-maktx. * * l_varprsq = wa_mats-varprs. * ENDLOOP. * * IF wa_mats-stduom = wa_mats-actuom OR wa_mats-actuom IS INITIAL. * CASE c_x. * WHEN rb_quant. * IF wa_mats-stdusg %GT 0. * wa_mats-varper = ( wa_mats-stdvar / wa_mats-stdusg ) * * 100. * ELSE. * wa_mats-varper = 0. * ENDIF. * * WHEN rb_fiscl. * IF wa_mats-sstprs %GT 0. * wa_mats-varper = ( wa_mats-varprs / wa_mats-sstprs ) * * 100. * ELSE. * wa_mats-varper = 0. * ENDIF. * ENDCASE. * ENDIF. * WRITE wa_mats-varper TO l_svarp DECIMALS 2 NO-GROUPING. * * IF l_aqty CA '123456789'. * IF l_totalg1 %LT%GT c_x. * l_totalg1 = c_x. * l_wa_mats-actuom = wa_mats-actuom. * ENDIF. * * IF l_wa_mats-actuom %LT%GT wa_mats-actuom. * CLEAR : l_wa_mats-actusg , l_wa_mats-astprs , l_aqtyg , * l_wa_mats-actuom , wa_mats-actusg , wa_mats-astprs. * ENDIF. * ENDIF. * * IF l_sqty CA '123456789'. * IF l_totalg2 %LT%GT c_x. * l_totalg2 = c_x. * l_wa_mats-stduom = wa_mats-stduom. * ENDIF. * * IF l_wa_mats-stduom %LT%GT wa_mats-stduom. * CLEAR : l_wa_mats-stdusg , l_wa_mats-sstprs , l_sqtyg , * l_wa_mats-stduom , wa_mats-stdusg , wa_mats-sstprs . * ENDIF. * ENDIF. * * IF l_svar CA '123456789'. * IF l_totalg3 %LT%GT c_x. * l_totalg3 = c_x. * l_wa_mats-varuom = wa_mats-varuom. * ENDIF. * * IF l_wa_mats-varuom %LT%GT wa_mats-varuom. * CLEAR : l_wa_mats-stdvar, l_wa_mats-varprs , l_svarg , * l_wa_mats-varuom, wa_mats-stdvar , wa_mats-varprs. * ENDIF. * ENDIF. * * CASE c_x. * WHEN rb_quant. * l_wa_mats-actusg = l_wa_mats-actusg + wa_mats-actusg. * WRITE : l_wa_mats-actusg TO l_aqtyg UNIT l_wa_mats-actuom * NO-GROUPING. * * l_wa_mats-stdusg = l_wa_mats-stdusg + wa_mats-stdusg. * WRITE : l_wa_mats-stdusg TO l_sqtyg UNIT l_wa_mats-stduom * NO-GROUPING. * * l_wa_mats-stdvar = l_wa_mats-stdvar + wa_mats-stdvar. * WRITE : l_wa_mats-stdvar TO l_svarg UNIT l_wa_mats-varuom * NO-GROUPING. * * l_stprsq = l_stprsq + l_varprsq. * v_prs = l_stprsq. * WRITE : v_prs TO l_svargq CURRENCY v_waers NO-GROUPING. * * WHEN rb_fiscl. * l_wa_mats-astprs = l_wa_mats-astprs + wa_mats-astprs. * v_prs = l_wa_mats-astprs. * WRITE : v_prs TO l_aqtyg CURRENCY v_waers NO-GROUPING. * * l_wa_mats-sstprs = l_wa_mats-sstprs + wa_mats-sstprs. * v_prs = l_wa_mats-sstprs. * WRITE : v_prs TO l_sqtyg CURRENCY v_waers NO-GROUPING. * * l_wa_mats-varprs = l_wa_mats-varprs + wa_mats-varprs. * v_prs = l_wa_mats-varprs. * WRITE : v_prs TO l_svarg CURRENCY v_waers NO-GROUPING. * ENDCASE. * * CLEAR: wa_nodestab. * wa_nodestab-id = c_4_2. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_3. * * wa_nodestab-tcolor = c_3. * wa_nodestab-tcolor1 = c_3. * wa_nodestab-tcolor2 = c_3. * wa_nodestab-tcolor3 = c_3. * wa_nodestab-tcolor4 = c_3. * wa_nodestab-tcolor5 = c_3. * * wa_nodestab-tlength = c_18. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tlength2 = c_22. * wa_nodestab-tlength3 = c_22. * wa_nodestab-tlength4 = c_24. * wa_nodestab-tlength5 = c_20. * ** Material Number * WRITE wa_mats-matnr TO wa_nodestab-text NO-ZERO. ** Material Description * wa_nodestab-text1 = wa_mats-maktx. * * IF wa_mats-actuom %LT%GT v_waers. * WRITE : wa_mats-actuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_aqty l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * IF wa_mats-stduom %LT%GT v_waers. * WRITE : wa_mats-stduom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_sqty l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * IF wa_mats-varuom %LT%GT v_waers. * WRITE : wa_mats-varuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_svar l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * * CONCATENATE l_svarp c_perc INTO wa_nodestab-text5 * SEPARATED BY space. * * IF rb_quant = c_x. * wa_nodestab-tcolor6 = c_3. * wa_nodestab-tlength6 = c_24. * CONCATENATE l_svarq v_waers INTO wa_nodestab-text6 * SEPARATED BY space. * ENDIF. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. * ENDLOOP. * **** Displaying Material Subtotals * CLEAR wa_nodestab. * wa_nodestab-id = c_4_2. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_3. * * wa_nodestab-text = 'Material Totals'(043). * wa_nodestab-text1 = space. * * wa_nodestab-tlength = c_18. * wa_nodestab-tlength2 = c_22. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tlength3 = c_22. * wa_nodestab-tlength4 = c_24. * wa_nodestab-tlength5 = c_20. * * IF l_wa_mats-actuom %LT%GT v_waers. * WRITE : l_wa_mats-actuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_aqtyg l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * IF l_wa_mats-stduom %LT%GT v_waers. * WRITE : l_wa_mats-stduom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_sqtyg l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * IF l_wa_mats-varuom %LT%GT v_waers. * WRITE : l_wa_mats-varuom TO l_uom. * ELSE. * WRITE : v_waers TO l_uom. * ENDIF. * CONCATENATE l_svarg l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * * IF rb_quant = c_x. * wa_nodestab-tcolor6 = c_6. * wa_nodestab-tlength6 = c_24. * CONCATENATE l_svargq v_waers INTO wa_nodestab-text6 * SEPARATED BY space. * ENDIF. * * wa_nodestab-tcolor = c_6. * wa_nodestab-tcolor2 = c_6. * wa_nodestab-tcolor3 = c_6. * wa_nodestab-tcolor4 = c_6. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. * ENDIF. * **** Displaying Summary totals * IF rb_fiscl = c_x. ** l_astprs = l_wa_acts-actu * 10 + l_wa_mats-astprs. ** l_sstprs = l_wa_acts-stdu * 10 + l_wa_mats-sstprs. * l_astprs = l_wa_acts-actu + l_wa_mats-astprs. * l_sstprs = l_wa_acts-stdu + l_wa_mats-sstprs. * * l_stprs = l_sstprs - l_astprs. * * v_prs = l_astprs. * WRITE : v_prs TO l_aqtys CURRENCY v_waers NO-GROUPING. * v_prs = l_sstprs. * WRITE : v_prs TO l_sqtys CURRENCY v_waers NO-GROUPING. * v_prs = l_stprs. * WRITE : v_prs TO l_svars CURRENCY v_waers NO-GROUPING. * * CLEAR wa_nodestab. * wa_nodestab-id = c_3_4. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_1. * * wa_nodestab-text = 'Summary Totals'. * wa_nodestab-text1 = space. * * wa_nodestab-tlength = c_18. * wa_nodestab-tlength2 = c_22. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tlength3 = c_22. * wa_nodestab-tlength4 = c_24. * * WRITE : v_waers TO l_uom. * CONCATENATE l_aqtys l_uom INTO wa_nodestab-text2 * SEPARATED BY space. * * CONCATENATE l_sqtys l_uom INTO wa_nodestab-text3 * SEPARATED BY space. * * CONCATENATE l_svars l_uom INTO wa_nodestab-text4 * SEPARATED BY space. * wa_nodestab-tcolor = c_5. * wa_nodestab-tcolor1 = c_5. * wa_nodestab-tcolor2 = c_5. * wa_nodestab-tcolor3 = c_5. * wa_nodestab-tcolor4 = c_5. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. * ENDIF. * *ENDFORM. " DISPLAY_SUMMARY_REPORT * **&--------------------------------------------------------------------* **& Form material_header **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM material_header USING fp_nodestab TYPE snodetext. * * fp_nodestab-text = 'Material'(058). * fp_nodestab-tlength = c_22. * fp_nodestab-tcolor = c_4. * fp_nodestab-propfaw = c_x. * * fp_nodestab-text1 = 'Description'(059). * fp_nodestab-tlength1 = c_30. * fp_nodestab-tcolor1 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Actual Usage'(040) v_waers INTO fp_nodestab-text2 * SEPARATED BY space. * ELSE. * CONCATENATE 'Actual Usage'(040) 'UoM' INTO fp_nodestab-text2 * SEPARATED BY space. * ENDIF. * fp_nodestab-tlength2 = c_22. * fp_nodestab-tcolor2 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage'(041) v_waers INTO fp_nodestab-text3 * SEPARATED BY space. * ELSE. * CONCATENATE 'Standard Usage'(041) 'UoM' INTO fp_nodestab-text3 * SEPARATED BY space. * ENDIF. * fp_nodestab-tlength3 = c_22. * fp_nodestab-tcolor3 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage Var'(042) * v_waers INTO fp_nodestab-text4 * SEPARATED BY space. * ELSE. * CONCATENATE 'Standard Usage Var'(042) 'UoM' INTO fp_nodestab-text4 * SEPARATED BY space. * ENDIF. * fp_nodestab-tlength4 = c_24. * fp_nodestab-tcolor4 = c_4. * * CONCATENATE 'Standard Usage Var'(042) c_perc INTO fp_nodestab-text5 * SEPARATED BY space. * fp_nodestab-tlength5 = c_20. * fp_nodestab-tcolor5 = c_4. * * IF rb_summ = c_x AND rb_quant = c_x. * CONCATENATE 'Standard Usage Var'(042) * v_waers INTO fp_nodestab-text6 * SEPARATED BY space. * fp_nodestab-tlength6 = c_24. * fp_nodestab-tcolor6 = c_4. * ENDIF. * *ENDFORM. " MATERIAL_HEADER * ***&-------------------------------------------------------------------- *** ***& Form get_orders ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** **FORM get_orders. ** ** DATA: l_sttxt(100) TYPE c, ** flg_status(1) TYPE c. ** ** ** MOVE 'Extracting Process Orders'(022) TO v_output_text. ** ** PERFORM inform_user_of_progress. ** ** ****START OF MOD-003. ** IF NOT p_mtart IS INITIAL. ***"selection filter on material type ** SELECT matnr "material number ** mtart "material type ** INTO TABLE i_mtart ** FROM mara ** WHERE matnr IN s_matnr ** AND mtart = p_mtart. ** ** IF sy-subrc %LT%GT 0. " if no corresponding data is found ** ** MESSAGE i072 WITH p_mtart. ** "No data was selected for material type ** LEAVE LIST-PROCESSING. ** ** ENDIF. ** ENDIF. ** ** ** IF NOT i_mtart IS INITIAL. ** SELECT aufnr ** werks ** kokrs ** objnr ** gltrp ** rsnum ** gamng ** gmein ** plnbez ** plnty ** plnnr ** plnal ** stlst "mod-001 ** stlty ** stlnr ** stlal ** aufpl ** zaehl ** rueck ** INTO TABLE i_orders FROM caufv ** FOR ALL ENTRIES IN i_mtart "*----MOD-003 ** WHERE aufnr IN s_aufnr AND ** werks = p_werks AND ** kokrs = p_kokrs AND ** stlan = p_usage AND ** plnbez = i_mtart-matnr AND "*----MOD-003 ** ( gstrp IN s_datuv OR gltrp IN s_datuv ). ****END OF MOD-003. ** ** ELSE. "----MOD-003 ** SELECT aufnr ** werks ** kokrs ** objnr ** gltrp ** rsnum ** gamng ** gmein ** plnbez ** plnty ** plnnr ** plnal ** stlst " MOD-001 ** stlty ** stlnr ** stlal ** aufpl ** zaehl ** rueck ** INTO TABLE i_orders FROM caufv ** WHERE aufnr IN s_aufnr AND ** werks = p_werks AND ** kokrs = p_kokrs AND ** plnbez IN s_matnr AND ** stlan = p_usage AND ** ( gstrp IN s_datuv OR gltrp IN s_datuv ). ** ** ENDIF. "----MOD-003 ** ** ** IF sy-subrc %LT%GT 0. ** MESSAGE s007. ** LEAVE LIST-PROCESSING. ** ENDIF. ** ** SORT i_orders BY aufnr. ** ** LOOP AT i_orders INTO wa_orders. ** ** IF NOT i_tj02t[] IS INITIAL . ** PERFORM get_status_info USING wa_orders-objnr l_sttxt. ** ** CLEAR: flg_status, wa_tj02t. ** LOOP AT i_tj02t INTO wa_tj02t. ** IF l_sttxt NS wa_tj02t-txt04. ** CLEAR flg_status. ** EXIT. ** ELSE. ** flg_status = c_x. ** CONTINUE. ** ENDIF. ** CLEAR : wa_tj02t. ** ENDLOOP. ** ** IF flg_status %LT%GT c_x. ** DELETE i_orders. ** CONTINUE. ** ENDIF. ** ** wa_order_status_text-aufnr = wa_orders-aufnr. ** wa_order_status_text-sttxt = l_sttxt. ** APPEND wa_order_status_text TO i_order_status_text. ** CLEAR wa_order_status_text. ** ENDIF. ** ** CLEAR : wa_orders. ** ** ENDLOOP. ** *** ENDIF. ** **ENDFORM. " get_orders ***&-------------------------------------------------------------------- *** ***& Form get_operations ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- ** ***--------------------------------------------------------------------- ** **FORM get_operations. ** ** DATA l_tabix TYPE sytabix. ** ** MOVE 'Extracting Phase Information'(023) TO v_output_text. ** PERFORM inform_user_of_progress. ** ** SELECT aufpl ** aplzl ** plnkn ** plnty ** plnnr ** zaehl ** vornr ** arbid ** rueck ** steus ** phflg ** INTO TABLE i_afvc ** FROM afvc ** FOR ALL ENTRIES IN i_orders ** WHERE aufpl = i_orders-aufpl AND ** steus IN s_steus AND ** phflg = c_x. ** ** IF sy-subrc = 0. ** SELECT aufpl ** aplzl ** bmsch ** vgw02 ** lmnga ** ism02 ** ssavd ** FROM afvv INTO TABLE i_afvv ** FOR ALL ENTRIES IN i_afvc ** WHERE aufpl = i_afvc-aufpl AND ** aplzl = i_afvc-aplzl AND ** ssavd IN s_datuv. ** ** IF sy-subrc = 0. ** SORT i_afvv BY aufpl aplzl. ** ENDIF. ** IF NOT ( s_kostl[] IS INITIAL ). ** ** SELECT objty objid kokrs kostl ** FROM crco INTO TABLE i_crco ** FOR ALL ENTRIES IN i_afvc ** WHERE objty = c_objtyp ** AND objid = i_afvc-arbid. ** IF sy-subrc = 0. ** SORT i_crco BY kostl. ** ENDIF. ** ENDIF. ** ** SORT i_crhd BY objid. ** SORT i_orders BY aufpl. ** ** SORT i_afvc BY aufpl vornr DESCENDING. ** ** LOOP AT i_afvc INTO wa_afvc. ** ** l_tabix = sy-tabix. ** ** IF NOT ( s_kostl[] IS INITIAL ). ** READ TABLE i_crco INTO wa_crco ** WITH KEY objty = c_objtyp ** objid = wa_afvc-arbid ** BINARY SEARCH. ** IF sy-subrc = 0. ** READ TABLE i_csks INTO wa_csks ** WITH KEY kostl = wa_crco-kostl. ** IF sy-subrc %LT%GT 0. ** DELETE i_afvv WHERE aufpl = wa_afvc-aufpl ** AND aplzl = wa_afvc-aplzl. ** DELETE i_afvc INDEX l_tabix. ** CONTINUE. ** ENDIF. ** ENDIF. ** ENDIF. ** *** Check work centre details with resource ** IF NOT ( s_arbpl[] IS INITIAL ). ** READ TABLE i_crhd INTO wa_crhd ** WITH KEY objid = wa_afvc-arbid BINARY SEARCH. ** IF sy-subrc %LT%GT 0. ** DELETE i_afvv WHERE aufpl = wa_afvc-aufpl ** AND aplzl = wa_afvc-aplzl. ** DELETE i_afvc INDEX l_tabix. ** CONTINUE. ** ELSE. ** PERFORM move_data2_ordops. ** ENDIF. ** ELSE. ** READ TABLE i_crhd INTO wa_crhd ** WITH KEY objid = wa_afvc-arbid BINARY SEARCH. ** PERFORM move_data2_ordops. ** ENDIF. ** CLEAR: wa_crco, wa_crhd, l_tabix, wa_afvc. ** ENDLOOP. ** ** ENDIF. ** **ENDFORM. " get_operations ***&-------------------------------------------------------------------- *** ***& Form get_mat_segment ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM get_mat_segment. ** DATA: l_menge TYPE menge_d, ** l_gamng type menge_d, ** v_menge type menge_d, ** l_meins TYPE meins, ** struct_mara type mara, ** struct_marc type marc. ** DATA: l_lmnga TYPE LMNGA, ** L_CFUOM type meins. ** ** IF NOT ( i_pro_orders[] IS INITIAL ). ** IF NOT ( rb_prod IS INITIAL ). ** *** Extracting goods receipt information **MOVE 'Extracting Goods Receipt Information'(024) TO v_output_text. ** PERFORM inform_user_of_progress. ******** Mod-002******************************************************* ** SELECT aufnr mblnr mjahr zeile matnr bwart menge meins ** " sjahr smbln smblp ** rsnum rspos rsart erfmg erfme ** FROM aufm "Table : Goods movements for order ** INTO TABLE i_mseg1 ** FOR ALL ENTRIES IN i_pro_orders ** WHERE aufnr = i_pro_orders-aufnr. *** AND matnr = i_pro_orders-plnbez. ********Mod-002********************************************************* ** IF sy-subrc = 0. ** ***Addition ** i_mseg = i_mseg1. ** LOOP AT i_pro_orders INTO wa_pro_orders. ** DELETE i_mseg WHERE aufnr = wa_pro_orders-aufnr ** AND matnr %LT%GT wa_pro_orders-plnbez. ** ENDLOOP. ***End of addition *************************Mod-002**************************************** * ** ** clear: struct_marc. ** select single * ** into struct_marc ** from marc ** where matnr = wa_pro_orders-plnbez and ** werks = wa_pro_orders-werks. ** ** clear: struct_mara. ** select single * ** into struct_mara ** from mara ** where matnr = wa_pro_orders-plnbez. ** ****************MOD-002************************************************* * ** ** SORT i_mseg BY aufnr. ** SORT i_pro_orders BY aufnr. *** Calculatin the quantity according to the movement type and *** assign the value to i_pro_orders internal table ** ** LOOP AT i_mseg INTO wa_mseg. ** AT NEW aufnr. ** CLEAR: l_menge, l_meins, v_menge. ** ENDAT. ** IF wa_mseg-bwart = c_101. ** if struct_marc-frtme is initial. *** l_menge = l_menge + wa_mseg-menge. *** l_meins = wa_mseg-erfme. ** if wa_mseg-erfme = struct_mara-meins. ** l_menge = l_menge + wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** else. ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-plnbez ** i_in_me = wa_mseg-erfme ** i_out_me = struct_mara-meins ** i_menge = wa_mseg-erfmg ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** wa_mseg-erfmg = v_menge. ** ENDIF. ** l_menge = l_menge + wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** endif. ** ELSEIF struct_marc-frtme is not initial. ** if ( struct_marc-frtme = struct_mara-meins ) and ** ( wa_mseg-erfme = struct_marc-frtme ). ** l_menge = l_menge + wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** elseif ( struct_marc-frtme = struct_mara-meins ) and ** ( wa_mseg-erfme ne struct_marc-frtme ). ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-plnbez ** i_in_me = wa_mseg-erfme ** i_out_me = struct_marc-frtme ** i_menge = wa_mseg-erfmg ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** wa_mseg-erfmg = v_menge. ** ENDIF. ** l_menge = l_menge + wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** elseif ( struct_marc-frtme ne struct_mara-meins ) and ** ( wa_mseg-erfme ne struct_marc-frtme ). ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-plnbez ** i_in_me = wa_mseg-erfme ** i_out_me = struct_marc-frtme ** i_menge = wa_mseg-erfmg ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** wa_mseg-erfmg = v_menge. ** ENDIF. ** l_menge = l_menge + wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** else. ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-plnbez ** i_in_me = wa_mseg-erfme ** i_out_me = struct_marc-frtme ** i_menge = wa_mseg-erfmg ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** wa_mseg-erfmg = v_menge. ** ENDIF. ** l_menge = l_menge + wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** ** endif. ** endif. ** ELSEIF wa_mseg-bwart = c_102. ** if struct_marc-frtme is initial. *** l_menge = l_menge - wa_mseg-menge. *** l_meins = wa_mseg-erfme. ** ** if wa_mseg-erfme = struct_mara-meins. ** l_menge = l_menge - wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** else. ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-plnbez ** i_in_me = wa_mseg-erfme ** i_out_me = struct_mara-meins ** i_menge = wa_mseg-erfmg ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** wa_mseg-erfmg = v_menge. ** ENDIF. ** l_menge = l_menge - wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** endif. ** ELSEIF struct_marc-frtme is not initial. ** if ( struct_marc-frtme = struct_mara-meins ) and ** ( wa_mseg-erfme = struct_marc-frtme ). ** l_menge = l_menge - wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** elseif ( struct_marc-frtme = struct_mara-meins ) and ** ( wa_mseg-erfme ne struct_marc-frtme ). ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-plnbez ** i_in_me = wa_mseg-erfme ** i_out_me = struct_marc-frtme ** i_menge = wa_mseg-erfmg ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** wa_mseg-erfmg = v_menge. ** ENDIF. ** l_menge = l_menge - wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** elseif ( struct_marc-frtme ne struct_mara-meins ) and ** ( wa_mseg-erfme ne struct_marc-frtme ). ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-plnbez ** i_in_me = wa_mseg-erfme ** i_out_me = struct_marc-frtme ** i_menge = wa_mseg-erfmg ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** wa_mseg-erfmg = v_menge. ** ENDIF. ** l_menge = l_menge - wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** else. ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-plnbez ** i_in_me = wa_mseg-erfme ** i_out_me = struct_marc-frtme ** i_menge = wa_mseg-erfmg ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** wa_mseg-erfmg = v_menge. ** ENDIF. ** l_menge = l_menge - wa_mseg-erfmg. ** l_meins = wa_mseg-erfme. ** endif. ** endif. *** l_menge = l_menge - wa_mseg-menge.* ** ENDIF. *** l_meins = wa_mseg-meins. ** ******** End of MOD-002**************************************** ** ** AT END OF aufnr. ***********Mod-002********************************************* *** Don't want zero production orders ** IF NOT ( rb_ezero IS INITIAL ) AND l_menge = 0. ** DELETE i_ordops WHERE aufnr = wa_mseg-aufnr. ** DELETE i_pro_orders WHERE aufnr = wa_mseg-aufnr. ** CONTINUE. ** ENDIF. ** READ TABLE i_pro_orders INTO wa_pro_orders ** WITH KEY aufnr = wa_mseg-aufnr. ** wa_pro_orders-menge = l_menge. ** wa_pro_orders-gruom = l_meins. ** IF wa_pro_orders-gruom NE wa_pro_orders-gmein. ** CLEAR l_menge. ** *** If no conversion possible just use gr qty ** CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' ** EXPORTING ** kzmeinh = c_x ** input = wa_pro_orders-menge ** matnr = wa_pro_orders-plnbez ** meinh = wa_pro_orders-gmein ** meins = wa_pro_orders-gruom ** IMPORTING ** output = l_menge ** EXCEPTIONS ** conversion_not_found = 1 ** input_invalid = 2 ** material_not_found = 3 ** meinh_not_found = 4 ** meins_missing = 5 ** no_meinh = 6 ** output_invalid = 7 ** overflow = 8 ** OTHERS = 9. ** IF sy-subrc = 0. ** wa_pro_orders-menge = l_menge. ** ENDIF. *************************MOD-003*************************************** ** clear: l_gamng. ** ** CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' ** EXPORTING ** kzmeinh = c_x ** input = wa_pro_orders-gamng ** matnr = wa_pro_orders-plnbez ** meinh = wa_pro_orders-gmein ** meins = wa_pro_orders-gruom ** IMPORTING ** output = l_gamng ** EXCEPTIONS ** conversion_not_found = 1 ** input_invalid = 2 ** material_not_found = 3 ** meinh_not_found = 4 ** meins_missing = 5 ** no_meinh = 6 ** output_invalid = 7 ** overflow = 8 ** OTHERS = 9. ** IF sy-subrc = 0. ** wa_pro_orders-gamng = l_gamng. ** ENDIF. ***************************MOD-003************************************** * *** ** ENDIF. ** MODIFY i_pro_orders FROM wa_pro_orders ** TRANSPORTING menge gruom gamng ** WHERE aufnr = wa_mseg-aufnr. ** ENDAT. **************************MOD-003*************************************** ** CLEAR : wa_mseg. **************************MOD-003*************************************** ** ** ENDLOOP. ** ENDIF. **********************MOD-008******************************************* ***** Select confirmations using operation confirmation * number instead of ***** order number *** SELECT aufpl *** aplzl *** plnkn *** plnty *** plnnr *** zaehl *** vornr *** arbid *** rueck *** steus *** phflg *** INTO TABLE i_afvc1 *** FROM afvc *** FOR ALL ENTRIES IN i_ordops *** WHERE aufpl = I_ORDOPS-aufpl AND *** steus = 'YBN1' AND *** phflg = c_x. *** *** IF sy-subrc = 0. *** SORT I_AFVC1 BY aufpl *** aplzl *** plnkn *** plnty *** plnnr. *** *** SELECT aufpl *** aplzl *** bmsch *** vgw02 *** lmnga *** ism02 *** ssavd *** FROM afvv INTO TABLE i_afvv1 *** FOR ALL ENTRIES IN i_afvc1 *** WHERE aufpl = i_afvc1-aufpl AND *** aplzl = i_afvc1-aplzl. *** *** IF SY-SUBRC = 0. *** SORT I_AFVV1 BY AUFPL APLZL. *** ENDIF. *** ENDIF. ** **********************MOD-008******************************************* ** ELSE. *** Extracting confirmation information **MOVE 'Extracting Confirmation Information'(025) TO v_output_text. ** PERFORM inform_user_of_progress. ** *** SELECT aufnr rueck gmnga lmnga gmein meinh *** meilr stokz rueck_mst *** FROM afru INTO TABLE i_afru *** FOR ALL ENTRIES IN i_pro_orders *** WHERE rueck = i_pro_orders-rueck AND **** MOD-001- Begin of change *** lmnga NE c_0. " AND **** meilr NE space. **** MOD-001- End of change *** IF sy-subrc = 0. *** SORT i_afru BY aufnr . **************MOD-002************************************************* ** ** *******************MOD-004********************************************** *** *** LOOP AT I_ORDOPS INTO WA_ORDOPS. *** SELECT SINGLE * *** INTO WA_PLPO3 *** FROM plpo *** WHERE plnty = WA_ordops-plnty and *** plnnr = wa_ordops-plnnr and *** PLNKN = wa_ordops-plnkn and *** ZAEHL = wa_ordops-zaehl. *** IF SY-SUBRC = 0. *** APPEND WA_PLPO3 TO I_PLPO3. *** ENDIF. *** ENDLOOP. **** and steus = 'YBN1'. *** *******************MOD-005********************************************** * **** LOOP AT I_PRO_ORDERS into WA_PRO_ORDERS. ************************mod-004***************************************** **** READ TABLE I_PLPO3 INTO WA_PLPO3 WITH KEY **** plnty = wa_pro_orders-plnty **** plnnr = wa_pro_orders-plnnr **** plnkn = wa_pro_orders-plnkn **** zaehl = wa_pro_orders-zaehl. ***** steus = 'YBN1'. **********************MOD-004******************************************* * *** *** *******************************MOD-005******************************** *** LOOP AT I_ORDOPS INTO WA_ORDOPS. *******************************MOD-005******************************* **** READ table i_afvc into wa_afvc with key ***** aufpl = wa_pro_orders-aufpl **** aufpl = wa_ordops-aufpl binary search. **** steus = 'YBN1' **** phflg = c_x binary search. *** ************************MOD-005************************************** *** ***********************MOD-006************************************** *** CLEAR: WA_PLPO3. *** READ TABLE I_PLPO3 INTO WA_PLPO3 WITH KEY *** plnty = wa_ordops-plnty *** plnnr = wa_ordops-plnnr **** plnkn = wa_ordops-plnkn **** zaehl = wa_ordops-zaehl *** steus = 'YBN1' binary search. **** vornr = wa_ordops-vornr **** werks = p_werks binary search. *** ***********************MOD-006************************************** *** IF SY-SUBRC = 0. **** READ table i_afvc into wa_afvc with key **** aufpl = wa_ordops-aufpl **** aplzl = wa_ordops-aplzl **** plnkn = wa_ordops-plnkn **** plnty = wa_ordops-plnty **** plnnr = wa_ordops-plnnr **** zaehl = wa_ordops-zaehl BINARY SEARCH. ********************mod-006******************************************** *** check wa_plpo3-vgw02 IS NOT INITIAL. *** clear: wa_afvc. *** READ TABLE i_afvc INTO wa_afvc *** WITH KEY plnty = wa_plpo3-plnty *** plnnr = wa_plpo3-plnnr *** plnkn = wa_plpo3-plnkn *** zaehl = wa_plpo3-zaehl *** aufpl = wa_ordops-aufpl. ************************MOD-006************************************** *** if sy-subrc = 0. *********************mod-004******************************************** * *** *** CLEAR: WA_AFVV. *** READ TABLE I_AFVV into wa_afvv with key *** aufpl = wa_afvc-aufpl *** aplzl = wa_afvc-aplzl binary search. *** if sy-subrc = 0. *** CLEAR: I_AFRU. *** SELECT aufnr rueck gmnga lmnga gmein meinh *** meilr stokz rueck_mst *** FROM afru INTO TABLE i_afru *** WHERE rueck = wa_afvc-rueck AND **** WHERE rueck = wa_ordops-rueck AND **** aufnr = wa_pro_orders-aufnr. *** aufnr = wa_ordops-aufnr. *** *** if sy-subrc = 0. *** SORT i_afru BY aufnr RUECK. *** LOOP AT i_afru INTO wa_afru. **** READ TABLE i_pro_orders INTO wa_pro_orders **** WITH KEY aufnr = wa_afru-aufnr. *** IF sy-subrc = 0. *** l_lmnga = l_lmnga + wa_afru-lmnga. *** l_cfuom = wa_afru-gmein. **** wa_pro_orders-lmnga = wa_afru-lmnga. **** wa_pro_orders-cfuom = wa_afru-gmein. **** MODIFY i_pro_orders FROM wa_pro_orders **** TRANSPORTING lmnga cfuom **** WHERE aufnr = wa_afru-aufnr. *** ENDIF. *** ENDLOOP. *** endif. **************************MOD-005*************************************** *** wa_ordops-lmnga = l_lmnga. *** wa_ordops-cfuom = l_cfuom. *** MODIFY i_ordops FROM wa_ordops *** TRANSPORTING lmnga cfuom *******************************MOD-006********************************* *** where plnty = wa_ordops-plnty and *** plnnr = wa_ordops-plnnr and **** plnkn = wa_ordops-plnkn and **** zaehl = wa_ordops-zaehl and *** aufpl = wa_ordops-aufpl. *****************************MOD-006********************************** *** ********************MOD-003******************************************* *** clear: l_lmnga, l_cfuom. ********************mod-003*************************************** *** ENDIF. *** ENDIF. **** clear: wa_pro_orders. ******************************mod-004********************************* *** ENDIF. *** clear: wa_ordops. *** ENDLOOP. ***************************MOD-005************************************** *** *** i_ordops1[] = i_ordops[]. *** delete i_ordops1 where lmnga eq 0. *** *** LOOP AT I_PRO_ORDERS INTO WA_PRO_ORDERS. *** read table i_ordops1 into wa_ordops1 with key *** aufnr = wa_pro_orders-aufnr binary search. *** IF SY-SUBRC = 0. *** wa_pro_orders-lmnga = wa_ordops1-lmnga. *** wa_pro_orders-cfuom = wa_ordops1-cfuom. *** if wa_pro_orders-menge is initial. *** wa_pro_orders-menge = wa_pro_orders-gamng. *** endif. *** MODIFY i_pro_orders FROM wa_pro_orders *** TRANSPORTING lmnga cfuom menge *** where aufnr = wa_ordops1-aufnr. *** ENDIF. *** ENDLOOP. *** endif. **********************************MOD-007******************************* ** **** Select confirmations using operation confirmation number instead of **** order number ** SELECT aufpl ** aplzl ** plnkn ** plnty ** plnnr ** zaehl ** vornr ** arbid ** rueck ** steus ** phflg ** INTO TABLE i_afvc1 ** FROM afvc ** FOR ALL ENTRIES IN i_ordops ** WHERE aufpl = I_ORDOPS-aufpl AND ** steus = 'YBN1' AND ** phflg = c_x. ** ** IF sy-subrc = 0. ** SORT I_AFVC1 BY aufpl ** aplzl ** plnkn ** plnty ** plnnr. ** ** SELECT aufpl ** aplzl ** bmsch ** vgw02 ** lmnga ** ism02 ** ssavd ** FROM afvv INTO TABLE i_afvv1 ** FOR ALL ENTRIES IN i_afvc1 ** WHERE aufpl = i_afvc1-aufpl AND ** aplzl = i_afvc1-aplzl. ** ** IF SY-SUBRC = 0. ** SORT I_AFVV1 BY AUFPL APLZL. ** ** LOOP AT I_ORDOPS INTO WA_ORDOPS. ** READ TABLE I_PRO_ORDERS INTO WA_PRO_ORDERS WITH KEY ** AUFNR = WA_ORDOPS-AUFNR ** BINARY SEARCH. ** IF SY-SUBRC = 0. ** READ table i_afvc1 into wa_afvc1 with key ** plnty = wa_ORDOPS-plnty ** plnnr = wa_ORDOPS-plnnr ** plnkn = wa_ORDOPS-plnkn ** zaehl = wa_ORDOPS-zaehl ** aufpl = wa_pro_orders-aufpl. ** IF SY-SUBRC = 0. ** READ TABLE I_AFVV1 into wa_afvv1 with key ** aufpl = wa_afvc1-aufpl ** aplzl = wa_afvc1-aplzl binary search. ** IF SY-SUBRC = 0. ** CHECK WA_AFVV1-VGW02 NE 0. ** select aufnr ** rueck ** gmnga ** lmnga ** gmein ** meinh ** meilr ** stokz ** rueck_mst ** INTO TABLE I_AFRU1 ** from afru ** where rueck = wa_afvc1-rueck AND ** werks = p_werks and ** aufnr = WA_PRO_ORDERS-aufnr and ** AUFPL = WA_AFVC1-AUFPL AND ** APLZL = WA_AFVC1-APLZL. ** ** IF SY-SUBRC = 0. ** ** perform get_confirmation_qty_new using ** wa_ordops-lmnga ** wa_ordops-cfuom. ** ** MODIFY i_ordops FROM wa_ordops ** TRANSPORTING lmnga cfuom. ** ENDIF. ** ENDIF. ** ENDIF. ** ENDIF. ** ** ENDLOOP. ** ENDIF. ** ENDIF. ** ** i_ordops1[] = i_ordops[]. ** delete i_ordops1 where lmnga eq 0. ** delete adjacent duplicates from i_ordops1 comparing ** aufnr ** aufpl ** aplzl ** plnkn ** plnty ** plnnr ** zaehl ** vornr. ** ** ** LOOP AT I_PRO_ORDERS INTO WA_PRO_ORDERS. ** read table i_ordops1 into wa_ordops1 with key ** aufnr = wa_pro_orders-aufnr binary search. ** IF SY-SUBRC = 0. ** wa_pro_orders-lmnga = wa_ordops1-lmnga. ** wa_pro_orders-cfuom = wa_ordops1-cfuom. ** if wa_pro_orders-menge is initial. ** wa_pro_orders-menge = wa_pro_orders-gamng. ** endif. ** MODIFY i_pro_orders FROM wa_pro_orders ** TRANSPORTING lmnga cfuom menge ** where aufnr = wa_ordops1-aufnr. ** ENDIF. ** ENDLOOP. ** endif. ** endif. **********MOD-007******************************************************* ** ** **ENDFORM. " get_mat_segment ***&-------------------------------------------------------------------- *** ***& Form get_bom_info ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM get_bom_info. ** DATA: wa_doc_segment1 TYPE ty_doc_segment, ** l_qty TYPE bdmng, ** l_per TYPE p DECIMALS 3, ** l_tabix TYPE sytabix, ** v_menge like ekpo-menge. ** DATA: STRUCT_MARC TYPE MARC, ** STRUCT_MARA TYPE MARA. ** ***- Begin of MOD-001 ** ** TYPES: BEGIN OF l_ty_bom_header, ** stlty TYPE stlty, " BOM category ** stlnr TYPE stnum, " Bill of material ** stlal TYPE stalt, " Alternative BOM ** bmein TYPE basme, " Base unit of measure for BOM ** bmeng TYPE basmn, " Base Quantity ** END OF l_ty_bom_header. ** ** DATA: l_i_bom_header TYPE STANDARD TABLE OF l_ty_bom_header ** INITIAL SIZE 0, ** ** l_wa_bom_header TYPE l_ty_bom_header. ** ***- End of MOD-001 ** ** IF NOT i_pro_orders[] IS INITIAL. ** MOVE 'Extracting BOM Information'(026) TO v_output_text. ** PERFORM inform_user_of_progress. ** *** Get issued materials for all process orders ** ***Begin of addition ** ** IF i_mseg1 IS INITIAL. ***** Mod-002******************************************************** ** SELECT aufnr mblnr mjahr zeile matnr bwart menge meins ** rsnum rspos rsart erfmg erfme ** FROM aufm "Table : Goods movements for order ** INTO TABLE i_mseg1 ** FOR ALL ENTRIES IN i_pro_orders ** WHERE aufnr = i_pro_orders-aufnr. *** AND matnr = i_pro_orders-plnbez. ******* Mod-002**************************************************** ** ENDIF. ** ** LOOP AT i_pro_orders INTO wa_pro_orders. ** ** LOOP AT i_mseg1 INTO wa_doc_segment ** WHERE mjahr = wa_pro_orders-wdate+0(4) ** AND bwart IN i_r_bwart ** AND aufnr = wa_pro_orders-aufnr. ** ** APPEND wa_doc_segment TO i_doc_segment. ** ** CLEAR : wa_doc_segment. ** ENDLOOP. ** CLEAR : wa_pro_orders. ** ENDLOOP. ** ** IF NOT i_doc_segment IS INITIAL. ** ** SELECT mblnr mjahr zeile sjahr smbln smblp rsnum rspos rsart ** FROM mseg INTO TABLE i_prev_doc ** FOR ALL ENTRIES IN i_doc_segment ** WHERE mblnr = i_doc_segment-mblnr ** AND mjahr = i_doc_segment-mjahr ** AND zeile = i_doc_segment-zeile. ** ** ENDIF. ** ** IF NOT i_doc_segment IS INITIAL. ** ***End of addition ** ** SORT i_doc_segment BY aufnr. ** ** LOOP AT i_doc_segment INTO wa_doc_segment1. ** ** wa_issued_mat-aufnr = wa_doc_segment1-aufnr. ** *** No reservation number so see if any other link exists ** ** IF wa_doc_segment1-rsnum IS INITIAL. ** *** Try to find any linked previous movements ** READ TABLE i_prev_doc INTO wa_prev_doc ** WITH KEY mblnr = wa_doc_segment1-mblnr ** mjahr = wa_doc_segment1-mjahr ** zeile = wa_doc_segment1-zeile. ** ENDIF. ** ** IF wa_doc_segment1-rsnum IS INITIAL AND ** wa_prev_doc-smbln NE space. ** ** READ TABLE i_prev_doc INTO wa_prev_doc ** WITH KEY mblnr = wa_prev_doc-smbln ** mjahr = wa_prev_doc-sjahr ** zeile = wa_prev_doc-smblp. ** ** IF sy-subrc = 0 AND NOT ( wa_doc_segment1-rsnum IS INITIAL ) . *** found a previous record ** wa_issued_mat-rsnum = wa_prev_doc-rsnum. ** wa_issued_mat-rspos = wa_prev_doc-rspos. ** wa_issued_mat-rsart = wa_prev_doc-rsart. ** ENDIF. ** ** ELSE. ** wa_issued_mat-rsnum = wa_doc_segment1-rsnum. ** wa_issued_mat-rspos = wa_doc_segment1-rspos. ** wa_issued_mat-rsart = wa_doc_segment1-rsart. ** ENDIF. ** wa_issued_mat-matnr = wa_doc_segment1-matnr. ** IF wa_doc_segment1-bwart = c_movm_low_262 ** OR wa_doc_segment1-bwart = c_movm_low_531. ** wa_issued_mat-menge = wa_doc_segment1-menge * -1. ** ELSE. ** wa_issued_mat-menge = wa_doc_segment1-menge. ** ENDIF. ** wa_issued_mat-meins = wa_doc_segment1-meins. ** COLLECT wa_issued_mat INTO i_issued_mat. ** CLEAR : wa_doc_segment1, wa_prev_doc. ** ENDLOOP. ** ENDIF. ** *** Selecting reservations ** SELECT rsnum rspos rsart xloek matnr werks bdmng ** meins shkzg aufnr dumps vornr rgekz ** stlty stlnr stlkn stpoz ** FROM resb INTO TABLE i_reservations ** FOR ALL ENTRIES IN i_pro_orders ** WHERE rsnum = i_pro_orders-rsnum AND ** aufnr = i_pro_orders-aufnr ** AND bdmng %GT 0 ** AND dumps = space. ** IF sy-subrc = 0. ** SORT i_reservations. *** Selecting material standard price and price unit *** SELECT stlty stlnr stlkn stpoz ausch " MOD-001 -- ** SELECT stlty stlnr stlkn stpoz ** meins menge ausch yyzero"MOD-001++ ** FROM stpo INTO TABLE i_stpo ** FOR ALL ENTRIES IN i_reservations ** WHERE stlty = i_reservations-stlty ** AND stlnr = i_reservations-stlnr ** AND stlkn = i_reservations-stlkn ** AND stpoz = i_reservations-stpoz. ** ** IF sy-subrc = 0. ***Not required to handle as Component scrap in percent is optional ** ENDIF. ** ** SELECT matnr werks kausf ** FROM marc INTO TABLE i_marc ** FOR ALL ENTRIES IN i_reservations ** WHERE matnr = i_reservations-matnr ** AND werks = i_reservations-werks. ** ** IF sy-subrc = 0. ***Not required to handle as Component scrap in percent (plant level) is ***optional ** ENDIF. ** ** SELECT matnr bwkey stprs peinh ** FROM mbew INTO TABLE i_mat_valuation ** FOR ALL ENTRIES IN i_reservations ** WHERE matnr = i_reservations-matnr ** AND bwkey = i_reservations-werks. ** ** IF sy-subrc = 0. ***Not required to handle Standard Price and ** Price Unit are not mandatory ** ENDIF. ***- Begin of MOD-001 ** SELECT stlty stlnr stlal bmein bmeng ** INTO TABLE l_i_bom_header ** FROM stko ** FOR ALL ENTRIES IN i_pro_orders ** WHERE stlty = i_pro_orders-stlty ** AND stlnr = i_pro_orders-stlnr ** AND stlal = i_pro_orders-stlal. ** ** IF sy-subrc = 0. *** There must be at least one record for process order. ** ENDIF. ** ***- End of MOD-001 ** ** LOOP AT i_reservations INTO wa_reservations. ** CLEAR: wa_order_status_text. ** l_tabix = sy-tabix. ** ** IF wa_reservations-xloek NE space. ** READ TABLE i_order_status_text INTO wa_order_status_text ** WITH KEY aufnr = wa_reservations-aufnr. ** IF sy-subrc = 0 ** AND wa_order_status_text-sttxt NS c_teco. ** DELETE i_issued_mat WHERE rsnum = wa_reservations-rsnum ** AND rspos = wa_reservations-rspos ** AND rsart = wa_reservations-rsart. ** DELETE i_reservations INDEX l_tabix. ** CONTINUE. ** ENDIF. ** ENDIF. ** ** IF NOT ( rb_nflsh IS INITIAL ) ** AND wa_reservations-rgekz NE space. ** DELETE i_issued_mat WHERE rsnum = wa_reservations-rsnum ** AND rspos = wa_reservations-rspos ** AND rsart = wa_reservations-rsart. ** DELETE i_reservations INDEX l_tabix. ** CONTINUE. ** ENDIF. ** wa_ordmats-aufnr = wa_reservations-aufnr. ** wa_ordmats-matnr = wa_reservations-matnr. ** wa_ordmats-vornr = wa_reservations-vornr. ** wa_ordmats-rsnum = wa_reservations-rsnum. ** wa_ordmats-rspos = wa_reservations-rspos. ** wa_ordmats-rsart = wa_reservations-rsart. ** wa_ordmats-bdmng = wa_reservations-bdmng. ** wa_ordmats-meins = wa_reservations-meins. ** ** READ TABLE i_issued_mat INTO wa_issued_mat ** WITH KEY rsnum = wa_reservations-rsnum ** rspos = wa_reservations-rspos ** rsart = wa_reservations-rsart. ** IF sy-subrc = 0. ** wa_ordmats-menge = wa_ordmats-menge + wa_issued_mat-menge. ** wa_ordmats-amein = wa_issued_mat-meins. ** ELSE. ** wa_ordmats-amein = wa_reservations-meins. ** ENDIF. *** Use the reservation quantity as the standard planned quantity *** If material is by-product need to turn it into a negative number . ** IF wa_reservations-shkzg = c_s. ** wa_ordmats-bdmng = wa_ordmats-bdmng * -1. ** ENDIF. ** ** READ TABLE i_pro_orders INTO wa_pro_orders ** WITH KEY aufnr = wa_reservations-aufnr. ****************MOD-003************************************** ** clear: l_qty. ****************MOD-003************************************** ** IF rb_prod IS INITIAL. ** l_qty = wa_pro_orders-lmnga. "confirmed qty *****************MOD-003************************************* ** ELSEIF ( rb_prod is not initial ) and ( rb_actl is initial ). ** l_qty = wa_pro_orders-gamng. ** ELSEIF ( RB_PROD IS NOT INITIAL ) and ** ( RB_ACTL is not initial ). ** l_qty = wa_pro_orders-menge. "goods receipt qty ** ENDIF. ** *** Calculate the standard quantity *********************MOD-003***************************** *** IF NOT rb_actl IS INITIAL. *********************MOD-003***************************** ** **********************mod-007****************************** ** IF L_QTY IS INITIAL. ** SELECT aufnr rueck gmnga lmnga gmein meinh ** meilr stokz rueck_mst ** FROM afru INTO TABLE i_afru ** FOR ALL ENTRIES IN i_pro_orders ** WHERE rueck = i_pro_orders-rueck AND ** lmnga NE c_0. ** ** READ TABLE i_pro_orders INTO wa_pro_orders ** WITH KEY aufnr = wa_reservations-aufnr. ** IF SY-SUBRC = 0. ** READ table i_afvc into wa_afvc with key ** aufpl = wa_pro_orders-aufpl ** steus = 'YBN1' ** phflg = c_x binary search. ** IF SY-SUBRC = 0. ** READ TABLE I_AFVV into wa_afvv with key ** aufpl = wa_afvc-aufpl ** aplzl = wa_afvc-aplzl binary search. ** if sy-subrc = 0. ** SORT i_afru BY aufnr RUECK. ** LOOP AT i_afru INTO wa_afru ** WHERE AUFNR = WA_PRO_ORDERS-AUFNR AND ** RUECK = WA_AFVC-RUECK. ** IF sy-subrc = 0. ** l_QTY = l_QTY + wa_afru-lmnga. ** ENDIF. ** ENDLOOP. ** check wa_pro_orders-gamng ne 0. ** clear: wa_ordmats-stdqy. ** wa_ordmats-stdqy = ( l_qty / wa_pro_orders-gamng ) * ** wa_ordmats-bdmng ** ** endif. ** ENDIF. ** ENDIF. ***********************************MOD-007****************************** ** ELSE. ** check wa_pro_orders-gamng ne 0. ** clear: wa_ordmats-stdqy. ** wa_ordmats-stdqy = ( l_qty / wa_pro_orders-gamng ) * ** wa_ordmats-bdmng. ** ENDIF. *********************MOD-006************************ ** *** check wa_pro_orders-gamng ne 0. *** clear: wa_ordmats-stdqy. *** wa_ordmats-stdqy = ( l_qty / wa_pro_orders-gamng ) * *** wa_ordmats-bdmng. *********************mod-006************************* *** ELSE. **********MOD-002***************************************** **** check wa_pro_orders-menge ne 0. **** wa_ordmats-stdqy = ( l_qty / wa_pro_orders-menge ) * **** wa_ordmats-bdmng. *** check wa_pro_orders-gamng ne 0. *** wa_ordmats-stdqy = ( l_qty / wa_pro_orders-gamng ) * *** wa_ordmats-bdmng. *** ENDIF. *********MOD-002******************************************** ***********************MOD-003******************************** ** ** *** gets the zero loss figure from the bom ** ***- Begin of MOD-001 ** *** READ TABLE i_stpo INTO wa_stpo *** WITH KEY stlty = wa_reservations-stlty *** stlnr = wa_reservations-stlnr *** stlkn = wa_reservations-stlkn *** stpoz = wa_reservations-stpoz. *** IF sy-subrc = 0 AND NOT ( wa_stpo-ausch IS INITIAL ). *** l_per = ( wa_stpo-ausch / c_100 ) * wa_ordmats-stdqy. *** ELSE. *** READ TABLE i_marc INTO wa_marc *** WITH KEY matnr = wa_reservations-matnr *** werks = wa_reservations-werks. *** IF sy-subrc = 0 AND NOT ( wa_marc-kausf IS INITIAL ). *** l_per = ( wa_marc-kausf / c_100 ) * wa_ordmats-stdqy. *** ELSE. *** MOVE c_0 TO l_per. *** ENDIF. *** ENDIF. ** *** wa_ordmats-zloss = wa_ordmats-stdqy - l_per. ** ** CLEAR l_qty. ** IF rb_actl IS INITIAL. ** l_qty = wa_pro_orders-gamng. ** ELSEIF rb_pland IS INITIAL. ** l_qty = wa_pro_orders-menge. ** ENDIF. ** ** READ TABLE l_i_bom_header INTO l_wa_bom_header ** WITH KEY stlty = wa_pro_orders-stlty ** stlnr = wa_pro_orders-stlnr ** stlal = wa_pro_orders-stlal. ** ** IF sy-subrc IS INITIAL. ****************mod-002*************************************** ** IF L_WA_BOM_HEADER-BMEIN NE WA_PRO_ORDERS-GMEIN. ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = wa_pro_orders-PLNBEZ ** i_in_me = wa_pro_orders-gmein ** i_out_me = l_wa_bom_header-bmein ** i_menge = l_qty ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** l_qty = v_menge. ** ENDIF. ** ENDIF. ** ** **************mod-002****************************************** ** IF l_wa_bom_header-bmeng IS NOT INITIAL. ** ** READ TABLE i_stpo INTO wa_stpo ** WITH KEY stlty = wa_reservations-stlty ** stlnr = wa_reservations-stlnr ** stlkn = wa_reservations-stlkn ** stpoz = wa_reservations-stpoz. ** ** l_per = wa_stpo-menge * ** ( l_qty / l_wa_bom_header-bmeng ). ** ** wa_ordmats-zloss = l_per * wa_stpo-yyzero. ** ** ENDIF. ** ** ENDIF. ** ***- End of MOD-001 ** READ TABLE i_mat_valuation INTO wa_mat_valuation ** WITH KEY matnr = wa_reservations-matnr ** bwkey = wa_reservations-werks. ** IF sy-subrc = 0. ** wa_ordmats-stprs = wa_mat_valuation-stprs. ** wa_ordmats-peinh = wa_mat_valuation-peinh. ** ENDIF. ** *** Adding material number to I_MATERIAL_NO internal table ** wa_material_no-matnr = wa_reservations-matnr. ** ** APPEND: wa_ordmats TO i_ordmats, ** wa_material_no TO i_material_no. ** CLEAR: wa_ordmats, l_qty, l_per, wa_stpo, wa_marc, ** wa_issued_mat, wa_pro_orders, wa_mat_valuation, ** wa_material_no, l_tabix, wa_reservations. ** ** ENDLOOP. *** Now we need to see if any of the materials issued to the order *** are not on the BOM (ie replacement materials) *** First summarise the data ** SORT i_ordmats BY aufnr matnr rsnum. ** LOOP AT i_issued_mat INTO wa_issued_mat. ** READ TABLE i_ordmats INTO wa_ordmats ** WITH KEY aufnr = wa_issued_mat-aufnr ** matnr = wa_issued_mat-matnr ** rsnum = wa_issued_mat-rsnum ** BINARY SEARCH. ** IF sy-subrc GE 4. *** material not on bom table so add it ** CLEAR: wa_ordmats. *** Get the standard price info for costing purposes in output ** READ TABLE i_mat_valuation INTO wa_mat_valuation ** WITH KEY matnr = wa_issued_mat-matnr ** bwkey = p_werks. ** wa_issued_mat-stprs = wa_mat_valuation-stprs. ** wa_issued_mat-peinh = wa_mat_valuation-peinh. ** MODIFY i_issued_mat FROM wa_issued_mat. ** wa_ordmats-stprs = wa_mat_valuation-stprs. ** wa_ordmats-peinh = wa_mat_valuation-peinh. ** MOVE: wa_issued_mat-aufnr TO wa_ordmats-aufnr, ** wa_issued_mat-matnr TO wa_ordmats-matnr, ** wa_issued_mat-menge TO wa_ordmats-menge, ** wa_issued_mat-meins TO wa_ordmats-meins, ** wa_issued_mat-meins TO wa_ordmats-amein. ** COLLECT wa_ordmats INTO i_ordmats. ** ** ELSE. *** material is on bom table so delete from sum_msegi ** DELETE i_issued_mat. " FROM wa_issued_mat. ** ENDIF. ** CLEAR : wa_issued_mat. ** ENDLOOP. ** ** CLEAR wa_issued_mat. ** *** Retrieve task list information of operations/activity ** from PLPO table ** SELECT * FROM plpo INTO TABLE i_plpo ** FOR ALL ENTRIES IN i_pro_orders ** WHERE plnty = i_pro_orders-plnty ** AND plnnr = i_pro_orders-plnnr ** AND plnkn = i_pro_orders-plnkn ** AND zaehl = i_pro_orders-zaehl. ** ** IF sy-subrc = 0. ***Not required to handle ***Task list - operation/activity information is optional ** ENDIF. ** ** SELECT rueck rmzhl ism01 ism02 ism03 ism04 ism05 ism06 stokz ** FROM afru INTO TABLE i_ord_conf ** FOR ALL ENTRIES IN i_pro_orders ** WHERE rueck = i_pro_orders-rueck. ** ** ** IF sy-subrc = 0. ***Not required to handle ***Order Confirmations information is not mandatiory ** ENDIF. ** ENDIF. ** ** IF NOT i_ordops[] IS INITIAL. ** ** SELECT * FROM plpo INTO TABLE i_plpo1 ** FOR ALL ENTRIES IN i_ordops ** WHERE plnty = i_ordops-plnty ** AND plnnr = i_ordops-plnnr ** AND plnkn = i_ordops-plnkn ** AND zaehl = i_ordops-zaehl. ** ** IF sy-subrc = 0. ***Not required to handle ***operations information is optional. ** ENDIF. ** ** SELECT rueck rmzhl ism01 ism02 ism03 ism04 ism05 ism06 stokz ** FROM afru INTO TABLE i_ord_conf1 ** FOR ALL ENTRIES IN i_ordops ** WHERE rueck = i_ordops-rueck. ** ** IF sy-subrc = 0. ***Not required to handle ***Order Confirmations information is not mandatiory ** ENDIF. ** ** ENDIF. ** ENDIF. **ENDFORM. " get_bom_info ** ***&-------------------------------------------------------------------- *** ***& Form output ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM output. ** ** MOVE 'Formatting Output'(027) TO v_output_text. ** PERFORM inform_user_of_progress. ** *** Selecting material descriptions ** SELECT matnr maktx ** FROM makt INTO TABLE i_material_des ** FOR ALL ENTRIES IN i_material_no ** WHERE spras = sy-langu ** AND matnr = i_material_no-matnr. ** ** IF sy-subrc = 0. ***Not required to handle ***Material desc is optinal ** ENDIF. ** ** *** Selecting Work centers descriptions ** SELECT objid ktext ** FROM crtx INTO TABLE i_wc_text ** FOR ALL ENTRIES IN i_pro_orders ** WHERE objty = c_objtyp ** AND objid = i_pro_orders-arbid ** AND spras = sy-langu. ** ** IF sy-subrc = 0. ***Not required to handle ***Work centers descriptions are optional ** ENDIF. ** ** CASE c_x. ** WHEN rb_detl. ** PERFORM display_detail_report. ** WHEN rb_summ. ** PERFORM display_summary_report. ** WHEN rb_phase. ** PERFORM display_phase_report. ** ENDCASE. ** ** **ENDFORM. " output ** ***&-------------------------------------------------------------------- ** ***& Form move_data2_ordops ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM move_data2_ordops. ** ** READ TABLE i_afvv INTO wa_afvv WITH KEY aufpl = wa_afvc-aufpl ** aplzl = wa_afvc-aplzl BINARY SEARCH. ** READ TABLE i_orders INTO wa_orders WITH KEY aufpl = wa_afvc-aufpl. ** " BINRAY SEARCH. ** IF sy-subrc = 0. ******************* ** **READ TABLE i_ordops INTO wa_ordops WITH KEY aufnr = wa_orders-aufnr. ******************* ** IF sy-subrc %LT%GT 0. ** MOVE-CORRESPONDING wa_orders TO wa_pro_orders. ** wa_pro_orders-wdate = wa_afvv-ssavd. ** wa_pro_orders-zaehl = wa_afvc-zaehl. ** wa_pro_orders-arbpl = wa_crhd-arbpl. ** wa_pro_orders-arbid = wa_afvc-arbid. ** wa_pro_orders-plnnr = wa_afvc-plnnr. ** wa_pro_orders-plnkn = wa_afvc-plnkn. **********MOD-002****************************** *** wa_pro_orders-rueck = wa_afvc-rueck. *********MOD-002******************************** ** IF wa_pro_orders-rueck IS INITIAL. ** wa_pro_orders-rueck = wa_afvc-rueck. ** ENDIF. ** ** wa_material_no-matnr = wa_orders-plnbez. ** ** APPEND: wa_pro_orders TO i_pro_orders, ** wa_material_no TO i_material_no. ** CLEAR: wa_pro_orders, wa_material_no. ** ENDIF. ** ** wa_ordops-aufnr = wa_orders-aufnr. ** wa_ordops-aufpl = wa_afvc-aufpl. ** wa_ordops-aplzl = wa_afvc-aplzl. ** wa_ordops-plnty = wa_afvc-plnty. ** wa_ordops-plnkn = wa_afvc-plnkn. ** wa_ordops-plnnr = wa_afvc-plnnr. ** wa_ordops-zaehl = wa_afvc-zaehl. ** wa_ordops-vornr = wa_afvc-vornr. ** wa_ordops-arbid = wa_afvc-arbid. ** wa_ordops-rueck = wa_afvc-rueck. ** wa_ordops-ssavd = wa_afvv-ssavd. ** wa_ordops-arbpl = wa_crhd-arbpl. ** ** APPEND wa_ordops TO i_ordops. ** CLEAR wa_ordops. ** ENDIF. ** CLEAR: wa_afvv, wa_orders. ** **ENDFORM. " move_data2_ordops ***&-------------------------------------------------------------------- *** ***& Form DISPLAY_DETAIL_REPORT ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- ** **FORM display_detail_report. ** ** DATA: l_date_low(10) TYPE c, ** l_date_high(10) TYPE c, ** l_diff TYPE menge_d, ** l_plan_effic TYPE char05, "MOD-001++ ** l_plant_effic TYPE char05, "MOD-001++ ** l_gamng TYPE menge_d, ** l_gamng1(20) TYPE c, ** l_qty TYPE menge_d, ** l_prdqty TYPE menge_d, ** l_conv TYPE menge_d, ** l_aqty TYPE menge_d, ** l_sqty TYPE menge_d, ** l_gmein TYPE meins, ** ** l_pcent(3) TYPE p DECIMALS 2, ** l_cost(8) TYPE p DECIMALS 2, ** ** l_act_total(8) TYPE p DECIMALS 2, ** l_std_total(8) TYPE p DECIMALS 2, ** l_var_total(8) TYPE p DECIMALS 2, ** ** l_act_gtot(8) TYPE p DECIMALS 2, ** l_std_gtot(8) TYPE p DECIMALS 2, ** l_var_gtot(8) TYPE p DECIMALS 2, ** ** l_fromuom TYPE meins. ***- Begin of MOD-001 ** DATA: l_value TYPE char16, ** l_tmp TYPE lmnga, ** l_tmp1 TYPE lmnga, ** l_effic TYPE p DECIMALS 1, ** l_uom TYPE char03. ***- End of MOD-001 ** ** PERFORM pfstatus. ** SET PF-STATUS 'MAIN' EXCLUDING i_fcode. ** SET TITLEBAR 'VARI' WITH text-066. ** MOVE 'Display Detail Report'(028) TO v_output_text. ** PERFORM inform_user_of_progress. ** *** Clearing local variables ** CLEAR: l_cost, l_pcent, l_qty, l_conv, l_aqty, l_sqty, ** l_diff, l_plan_effic, l_gamng, l_date_low,l_date_high, ** l_act_gtot, l_std_gtot, l_var_gtot. ** CLEAR wa_nodestab. ** REFRESH i_nodestab. ** *****Begin of MOD-001 ** IF sy-ucomm = c_zero OR rb_zloss IS NOT INITIAL. ** ** v_ucomm = c_zero. ** ** ELSEIF sy-ucomm = c_std OR rb_stdpl IS NOT INITIAL. ** ** CLEAR : v_ucomm. ** ** ENDIF. ** ** IF sy-ucomm = c_fisc. ** ** v_ucomm1 = c_fisc. ** ** ELSEIF sy-ucomm = c_qty. ** ** v_ucomm1 = c_qty. ** ** ENDIF. *****End of MOD-001 ** ** wa_nodestab-id = c_1_1. ** wa_nodestab-tlevel = c_1. ** wa_nodestab-text = 'Production Variances'(031). ** wa_nodestab-tlength = c_20. ** wa_nodestab-compress = c_x. ** APPEND wa_nodestab TO i_nodestab. ** ** LOOP AT i_pro_orders INTO wa_pro_orders. ** ** CLEAR: wa_nodestab, l_date_low, l_date_high, l_gamng, ** wa_material_des. ** ** l_gamng = wa_pro_orders-gamng. ***************MOD-002************************* ** l_gmein = wa_pro_orders-gmein. ***************MOD-002************************ ** wa_nodestab-id = c_2_1. ** wa_nodestab-tlevel = c_2. ** wa_nodestab-parent = c_1_1. ** *** Order Number text ** wa_nodestab-text = 'Order Num:'(032). ** wa_nodestab-tlength = c_12. ** wa_nodestab-tcolor = c_1. *** Order number ** WRITE wa_pro_orders-aufnr TO wa_nodestab-text1 NO-ZERO. ** wa_nodestab-tlength1 = c_12. ** wa_nodestab-tcolor1 = c_1. ** *** Date Range ** WRITE wa_pro_orders-wdate TO l_date_low. ** WRITE wa_pro_orders-gltrp TO l_date_high. ** CONCATENATE l_date_low c_hyp l_date_high ** INTO wa_nodestab-text2 SEPARATED BY space. ** wa_nodestab-tlength2 = c_25. ** wa_nodestab-tcolor2 = c_1. ** *** Material Number ** WRITE wa_pro_orders-plnbez TO wa_nodestab-text3 NO-ZERO. ** wa_nodestab-tlength3 = c_18. ** wa_nodestab-tcolor3 = c_1. ** *** Material Description ** READ TABLE i_material_des INTO wa_material_des ** WITH KEY matnr = wa_pro_orders-plnbez. ** wa_nodestab-text4 = wa_material_des-maktx. ** wa_nodestab-tlength4 = c_33. ** wa_nodestab-tcolor4 = c_1. ** *** Get actual produced Quantity or Confirm Quantity ** IF NOT ( rb_prod IS INITIAL ). ** l_prdqty = wa_pro_orders-menge. ** l_fromuom = wa_pro_orders-gruom. ** ELSE. ************MOD-002**************************************** ** LOOP AT i_plpo1 INTO wa_plpo1 ** WHERE plnty = wa_pro_orders-plnty ** AND plnnr = wa_pro_orders-plnnr ** AND steus = 'YBN1'. ** IF wa_plpo1-vgw02 IS NOT INITIAL. **************MOD-005***************************** *** wa_plpo2 = wa_plpo1. *** append wa_plpo2 to i_plpo2. *** ENDIF. *** ENDLOOP. **************mod-005**************************** ** CLEAR: wa_afvc, wa_afvv. ** READ TABLE i_afvc INTO wa_afvc ** WITH KEY plnty = wa_plpo1-plnty ** plnnr = wa_plpo1-plnnr ** plnkn = wa_plpo1-plnkn ** zaehl = wa_plpo1-zaehl ** aufpl = wa_pro_orders-aufpl. ** ** ** IF sy-subrc IS INITIAL. ** READ TABLE i_afvv INTO wa_afvv ** WITH KEY aufpl = wa_afvc-aufpl ** aplzl = wa_afvc-aplzl. ** *** READ table i_afvc into wa_afvc with key *** aufpl = wa_pro_orders-aufpl binary search. *** if sy-subrc = 0. *** READ TABLE I_AFVV into wa_afvv with key *** aufpl = wa_afvc-aufpl *** aplzl = wa_afvc-aplzl binary search. ** IF sy-subrc = 0. ** l_prdqty = wa_afvv-lmnga. **********************MOD-006*********************** ** IF wa_pro_orders-cfuom IS INITIAL. ** SELECT aufnr rueck gmnga lmnga gmein meinh ** meilr stokz rueck_mst ** FROM afru INTO TABLE i_afru ** WHERE rueck = wa_afvc-rueck AND ** aufnr = wa_pro_orders-aufnr. ** IF NOT i_afru[] IS INITIAL. ** READ TABLE i_afru INTO wa_afru INDEX 1. ** IF sy-subrc = 0. ** l_fromuom = wa_afru-gmein. ** ENDIF. ** ENDIF. ** ELSE. ** l_fromuom = wa_pro_orders-cfuom. ** ENDIF. *********************MOD-006************************ ** ENDIF. ** ENDIF. ************MOD-002**************************************** *** l_prdqty = wa_pro_orders-lmnga. *** l_fromuom = wa_pro_orders-cfuom. ** ENDIF. ** ENDLOOP. ** ENDIF. ** **************mod-003*********************** ** IF NOT rb_pland IS INITIAL. ** IF rb_conf IS INITIAL. ** l_prdqty = wa_pro_orders-gamng. ** ELSE. ** l_prdqty = wa_afvv-lmnga. ** ENDIF. ** ENDIF. *************mod-003************************ ** IF rb_kgm = c_x. *** do actual conversion ** PERFORM uom_convert USING wa_pro_orders-plnbez ** l_prdqty ** l_fromuom ** l_conv. ** l_prdqty = l_conv. *** do planned conversion ***********MOD-002************************** *** l_fromuom = wa_pro_orders-gmein. ** l_fromuom = 'KG'. ** ** PERFORM uom_convert USING wa_pro_orders-plnbez ** wa_pro_orders-gamng ** l_fromuom ** l_conv. ** ** l_gamng = l_conv. ** ENDIF. ** *** Produced Quantity / Confirmed Quantity ** MOVE l_prdqty TO wa_nodestab-text5(20). ** MOVE l_fromuom TO l_uom. "MOD-001++ *** WRITE l_prdqty TO i_nodestab-text5(20). ** ** IF NOT ( rb_prod IS INITIAL ). *** CONCATENATE 'Prod Qty: '(033) wa_nodestab-text5 "MOD-001- ** CONCATENATE 'Prod Qty: '(033) wa_nodestab-text5 l_uom "MOD-001+ ** INTO wa_nodestab-text5 SEPARATED BY space. ** ** ELSE. *** CONCATENATE 'Conf Qty: '(034) wa_nodestab-text5 "MOD-001- ** CONCATENATE 'Conf Qty: '(034) wa_nodestab-text5 l_uom "MOD-001+ ** INTO wa_nodestab-text5 SEPARATED BY space. ** ENDIF. ** ** *** wa_nodestab-tlength5 = c_30. "MOD-001- ** wa_nodestab-tlength5 = c_35_1. "MOD-001+ ** wa_nodestab-tcolor5 = c_1. ** ** APPEND wa_nodestab TO i_nodestab. ** *** Resource Information ** CLEAR wa_nodestab. ** wa_nodestab-id = c_2_2. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_1_1. ** ** CONCATENATE 'Resource:'(035) wa_pro_orders-arbpl ** INTO wa_nodestab-text SEPARATED BY space. ** wa_nodestab-tlength = c_25. ** wa_nodestab-tcolor = c_4. ** ** READ TABLE i_wc_text INTO wa_wc_text ** WITH KEY objid = wa_pro_orders-arbid. ** wa_nodestab-text1 = wa_wc_text-ktext. ** wa_nodestab-tlength1 = c_37. ** wa_nodestab-tcolor1 = c_4. ** *** Calculating Plan Effic value ***- Begin of MOD-001 *** IF l_gamng GT 0. *** l_diff = l_gamng - l_prdqty. *** l_plan_effic = c_100 - c_100 * ( l_diff / l_gamng ). *** ELSE. *** CLEAR l_plan_effic. *** ENDIF. ** ****** Mod-002********************** ** CLEAR: wa_plpo1. *******mOD-002********************** ** LOOP AT i_plpo1 INTO wa_plpo1 ** WHERE plnty = wa_pro_orders-plnty ** AND plnnr = wa_pro_orders-plnnr ** AND steus = 'YBN1'. ** IF wa_plpo1-vgw02 IS NOT INITIAL. ** MOVE wa_plpo1-usr04 TO l_effic. "L_VALUE. ** WRITE l_effic TO l_plan_effic. ** wa_plpo2 = wa_plpo1. ** APPEND wa_plpo2 TO i_plpo2. ** *** L_PLAN_EFFIC = floor( L_VALUE ) ****************MOD-002*************************** *** ELSE. *** CLEAR l_plan_effic. ** ENDIF. ***************MOD-002**************************** ** ENDLOOP. ** ** *** CONCATENATE 'Plan Effic:'(036) l_plan_effic c_perc "'%' ** CONCATENATE 'Exp. Line Eff.'(036) l_plan_effic c_perc "'%' ** INTO wa_nodestab-text2 SEPARATED BY space. ** wa_nodestab-tlength2 = c_25. ** wa_nodestab-tcolor2 = c_4. ** ** CLEAR l_effic. ***** Mod-002**************** ** ** *** READ TABLE i_afvc INTO wa_afvc *** WITH KEY plnty = wa_plpo1-plnty *** plnnr = wa_plpo1-plnnr *** zaehl = wa_plpo1-zaehl. ** *****************MOD-008************************ *** LOOP AT I_ORDOPS INTO WA_ORDOPS. *** READ TABLE I_PRO_ORDERS INTO WA_PRO_ORDERS WITH KEY *** AUFNR = WA_ORDOPS-AUFNR *** BINARY SEARCH. *** IF SY-SUBRC = 0. *** READ table i_afvc1 into wa_afvc1 with key *** plnty = wa_ORDOPS-plnty *** plnnr = wa_ORDOPS-plnnr *** plnkn = wa_ORDOPS-plnkn *** zaehl = wa_ORDOPS-zaehl *** aufpl = wa_pro_orders-aufpl. *** IF SY-SUBRC = 0. *** READ TABLE I_AFVV1 into wa_afvv1 with key *** aufpl = wa_afvc1-aufpl *** aplzl = wa_afvc1-aplzl binary search. *** IF SY-SUBRC = 0. *** CHECK WA_AFVV1-VGW02 NE 0. *** l_tmp = wa_afvv1-bmsch * wa_afvv1-ism02. *** IF l_tmp IS NOT INITIAL. *** *** l_tmp1 = ( wa_afvv1-lmnga * wa_afvv1-vgw02 ) / l_tmp. *** *** l_tmp1 = l_tmp1 * 100. *** *** MOVE l_tmp1 TO l_effic. *** *** ENDIF. *** ENDIF. *** ENDIF. *** ENDIF. *** ENDLOOP. ** ****************MOD-008************************* ** CLEAR: wa_afvc, wa_afvv. ** LOOP AT i_plpo2 INTO wa_plpo2. ** READ TABLE i_afvc INTO wa_afvc ** WITH KEY plnty = wa_plpo2-plnty ** plnnr = wa_plpo2-plnnr ** plnkn = wa_plpo2-plnkn ** zaehl = wa_plpo2-zaehl ** aufpl = wa_pro_orders-aufpl. ** ** IF sy-subrc IS INITIAL. ** READ TABLE i_afvv INTO wa_afvv ** WITH KEY aufpl = wa_afvc-aufpl ** aplzl = wa_afvc-aplzl. ** ** l_tmp = wa_afvv-bmsch * wa_afvv-ism02. ** IF l_tmp IS NOT INITIAL. ** ** l_tmp1 = ( wa_afvv-lmnga * wa_afvv-vgw02 ) / l_tmp. ** ** l_tmp1 = l_tmp1 * 100. ** ** MOVE l_tmp1 TO l_effic. ** ** ENDIF. ** ENDIF. ** ENDLOOP. ** ** WRITE l_effic TO l_plant_effic. ** *** CLEAR v_plant_effic. *** PERFORM plant_effic USING wa_pro_orders-plnty *** wa_pro_orders-plnnr *** wa_pro_orders-plnkn *** wa_pro_orders-zaehl *** CHANGING v_plant_effic. ** *** CONCATENATE 'Plant Effic:'(037) v_plant_effic c_perc "'%' ** CONCATENATE 'Act. Line Eff.'(037) l_plant_effic c_perc "'%' ** " MOD-001+ ** INTO wa_nodestab-text3 SEPARATED BY space. ** wa_nodestab-tlength3 = c_25. ** wa_nodestab-tcolor3 = c_4. ***- End of MOD-001 ** ** APPEND wa_nodestab TO i_nodestab. ** *** Phase Information ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_3. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_1_1. ** ** wa_nodestab-text = 'Phase'(038). ** wa_nodestab-tlength = c_10. ** wa_nodestab-tcolor = c_4. ** ** MOVE l_gamng TO l_gamng1. ** CONCATENATE 'Activity (Std Plan:'(039) l_gamng1 c_brac " ')' ** INTO wa_nodestab-text1 SEPARATED BY space. ** wa_nodestab-tlength1 = c_42. ** wa_nodestab-tcolor1 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Actual Usage'(040) v_waers ** INTO wa_nodestab-text2 SEPARATED BY space. ** ELSE. ** wa_nodestab-text2 = 'Actual Usage'(040). ** ENDIF. ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Standard Usage'(041) v_waers ** INTO wa_nodestab-text3 SEPARATED BY space. ** ELSE. ** wa_nodestab-text3 = 'Standard Usage'(041). ** ENDIF. ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Activity Variance'(042) v_waers ** INTO wa_nodestab-text4 SEPARATED BY space. ** ELSE. ** wa_nodestab-text4 = 'Activity Variance'(042). ** ENDIF. ** wa_nodestab-tlength4 = c_35. ** wa_nodestab-tcolor4 = c_4. ** ** APPEND wa_nodestab TO i_nodestab. ** *** Display acitivity report ** CLEAR flg_color. ** LOOP AT i_ordops INTO wa_ordops ** WHERE aufnr = wa_pro_orders-aufnr. ** IF flg_color IS INITIAL. ** flg_color = c_x. ** ELSE. ** CLEAR flg_color. ** ENDIF. ** PERFORM activity_report USING l_prdqty l_gamng l_uom l_gmein. ** ENDLOOP. ** *** Material Information ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_4. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_1_1. ** ** PERFORM material_header. ** ** CLEAR: l_act_total, l_std_total, l_var_total. *** Individual material details ** LOOP AT i_ordmats INTO wa_ordmats ** WHERE aufnr = wa_pro_orders-aufnr. ** *******************mod-003************************* ** CLEAR: l_aqty, l_sqty, l_qty. ******************mod-003************************** ** ** CLEAR: wa_nodestab. ** wa_nodestab-id = c_4_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** *** Material Number ** WRITE wa_ordmats-matnr TO wa_nodestab-text NO-ZERO. ** wa_nodestab-tlength = c_18. ** wa_nodestab-tcolor = c_3. ** *** Material Description ** CLEAR wa_material_des. ** READ TABLE i_material_des INTO wa_material_des ** WITH KEY matnr = wa_ordmats-matnr. ** wa_nodestab-text1 = wa_material_des-maktx. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_3. ** *** Standard planned or zero loss planned ** ** IF rb_zloss IS INITIAL. ** l_qty = wa_ordmats-stdqy. *****************MOD-004************************ ** ***************MOD-004************************* ** ELSE. ** l_qty = wa_ordmats-zloss. ** ENDIF. ** *** Order uom or kgm ** IF rb_kgm IS INITIAL. ** l_aqty = wa_ordmats-menge. ** l_sqty = l_qty. ** ELSE. *** do actual conversion ** PERFORM uom_convert USING wa_ordmats-matnr ** wa_ordmats-menge ** wa_ordmats-amein ** l_aqty. *** do std/zloss conversion ** PERFORM uom_convert USING wa_ordmats-matnr ** wa_ordmats-stdqy ** wa_ordmats-meins ** l_sqty. ** ENDIF. *********************MOD-003*********************************** ** IF wa_ordmats-meins = 'EA' OR ** wa_ordmats-meins = 'CS'. ** l_sqty = CEIL( l_sqty ). ** ENDIF. *********************MOD-003*********************************** ** ** PERFORM std_percentage_calc USING l_aqty l_sqty l_pcent. ** *** Fiscal or quantity ** IF rb_fiscl IS INITIAL. ** MOVE l_aqty TO wa_nodestab-text2(20). " Actual Usage ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** MOVE l_sqty TO wa_nodestab-text3(20). " Standard Usage ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** ELSE. ** IF NOT wa_ordmats-peinh IS INITIAL. ** CLEAR l_cost. ** l_cost = ( wa_ordmats-stprs * wa_ordmats-menge ) ** / wa_ordmats-peinh. ** MOVE l_cost TO wa_nodestab-text2(20). " Acutal Usage ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** ** l_act_total = l_act_total + l_cost. " Subtotal of actual ** l_act_gtot = l_act_gtot + l_cost. " Grand total ** ** ENDIF. ** IF NOT wa_ordmats-peinh IS INITIAL. ** CLEAR l_cost. *****Begin of MOD-001 ** IF v_ucomm = c_zero. *****************************MOD-003******************************** ** IF wa_ordmats-meins = 'EA' OR ** wa_ordmats-meins = 'CS'. ** l_qty = CEIL( l_qty ). ** ENDIF. *****************************MOD-003******************************** ** l_cost = ( wa_ordmats-stprs * l_qty ) "wa_ordmats-stdqy ) ** / wa_ordmats-peinh. ** ** ** ELSE. *****************************MOD-003******************************** ** IF wa_ordmats-meins = 'EA' OR ** wa_ordmats-meins = 'CS'. ** wa_ordmats-stdqy = CEIL( wa_ordmats-stdqy ). ** ENDIF. *****************************MOD-003******************************** ** ** l_cost = ( wa_ordmats-stprs * wa_ordmats-stdqy ) ** / wa_ordmats-peinh. ** ** ** ENDIF. *****End of MOD-001 ** ** MOVE l_cost TO wa_nodestab-text3(20). " Standard Usage ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** l_std_total = l_std_total + l_cost. " Subtotal of standard ** l_std_gtot = l_std_gtot + l_cost. " Grand Total ** ** ENDIF. ** ENDIF. ** ** MOVE l_pcent TO wa_nodestab-text4(17). " Variance Percentage ** CONCATENATE wa_nodestab-text4(17) c_perc "'%' ** INTO wa_nodestab-text4(19) SEPARATED BY space. ** wa_nodestab-tlength4 = c_19. ** wa_nodestab-tcolor4 = c_3. ** CLEAR: l_diff, l_cost. ** *******Begin of MOD-001 ** IF ( v_ucomm = c_zero ). ** ** l_diff = wa_ordmats-menge - l_qty. ** ** ELSE. ** ** l_diff = wa_ordmats-menge - wa_ordmats-stdqy. ** ** ENDIF. *******End of MOD-001 ** ** IF NOT wa_ordmats-peinh IS INITIAL. ** l_cost = ( wa_ordmats-stprs * l_diff ) / wa_ordmats-peinh. ** l_cost = l_cost * -1. ** ENDIF. ** *******Begin of MOD-001 *** IF v_ucomm1 = c_qty. *** *** MOVE l_diff TO wa_nodestab-text5(15). " Variance *** *** ELSE. ** ** MOVE l_cost TO wa_nodestab-text5(15). " Variance ** *** ENDIF. ********End of MOD-001 ** ** wa_nodestab-tlength5 = c_15. ** wa_nodestab-tcolor5 = c_3. ** ** l_var_total = l_var_total + l_cost. " Subtotal of Variance ** l_var_gtot = l_var_gtot + l_cost. " Grand total ** ** APPEND wa_nodestab TO i_nodestab. ******************MOD-003********************** ** CLEAR: wa_ordmats. *****************mod-003*********************** ** ** ENDLOOP. ** *** Displaying Subtotals ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_4_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** ** wa_nodestab-text = 'Material Totals'(043). ** wa_nodestab-tlength = c_18. ** wa_nodestab-tcolor = c_6. ** ** wa_nodestab-text1 = space. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_6. ** ** MOVE l_act_total TO wa_nodestab-text2(20) . ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_6. ** ** MOVE l_std_total TO wa_nodestab-text3(20) . ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_6. ** ** wa_nodestab-text4 = space. ** wa_nodestab-tlength4 = c_19. ** wa_nodestab-tcolor4 = c_6. ** ** MOVE l_var_total TO wa_nodestab-text5(15) . ** wa_nodestab-tlength5 = c_15. ** wa_nodestab-tcolor5 = c_6. ** ** APPEND wa_nodestab TO i_nodestab. ** CLEAR : wa_pro_orders, wa_nodestab. ** ** ENDLOOP. ** *** Displaying Grand total ** CLEAR wa_nodestab. ** wa_nodestab-id = c_2_1. ** wa_nodestab-tlevel = c_2. ** wa_nodestab-parent = c_1_1. ** ** wa_nodestab-text = 'Process Order Totals'(044). ** wa_nodestab-tlength = c_26. ** wa_nodestab-tcolor = c_5. ** ** wa_nodestab-text1 = space. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_5. ** ** MOVE l_act_gtot TO wa_nodestab-text2(20) . ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_5. ** ** MOVE l_std_gtot TO wa_nodestab-text3(20) . ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_5. ** ** wa_nodestab-text4 = space. ** wa_nodestab-tlength4 = c_19. ** wa_nodestab-tcolor4 = c_5. ** ** MOVE l_var_gtot TO wa_nodestab-text5(15) . ** wa_nodestab-tlength5 = c_15. ** wa_nodestab-tcolor5 = c_5 . ** ** APPEND wa_nodestab TO i_nodestab. ** ** CLEAR : wa_nodestab. ** **ENDFORM. " DISPLAY_DETAIL_REPORT ***&-------------------------------------------------------------------- *** ***& Form DISPLAY_SUMMARY_REPORT ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM display_summary_report. ** DATA: l_diff TYPE menge_d, ** l_gamng TYPE menge_d, ** l_gmein TYPE meins, ** ** l_ltext TYPE ktext, ** ** l_tot_orders TYPE i, ** ** l_effic TYPE p DECIMALS 1, " ** MOD-001++ ** l_effic1 TYPE p DECIMALS 1, " ** MOD-001++ ** l_plan_effic TYPE char05, " ** MOD-001++ ** l_plant_effic TYPE char05, " ** MOD-001++ ** l_sum_plan_effic TYPE p DECIMALS 1, ** l_sum_plant_effic TYPE p DECIMALS 1, ** ** l_qty TYPE menge_d, ** l_conv TYPE menge_d, ** l_aqty TYPE menge_d, ** l_sqty TYPE menge_d, ** ** l_prdqty TYPE menge_d, ** l_sum_prdqty TYPE menge_d, ** ** l_pcent(3) TYPE p DECIMALS 2, ** l_cost(8) TYPE p DECIMALS 2, ** ** l_act_total(8) TYPE p DECIMALS 2, ** l_std_total(8) TYPE p DECIMALS 2, ** l_var_total(8) TYPE p DECIMALS 2, ** ** l_fromuom TYPE meins. ** ***- Begin of MOD-001 ** DATA: l_value TYPE char16, ** l_tmp TYPE lmnga, ** l_tmp1 TYPE lmnga. ***- End of MOD-001 ** ** PERFORM pfstatus. ** SET PF-STATUS 'MAIN' EXCLUDING i_fcode. ** SET TITLEBAR 'VARI' WITH text-067. ** ** CLEAR wa_nodestab. ** REFRESH i_nodestab. ** ** MOVE 'Display summary Report'(029) TO v_output_text. ** PERFORM inform_user_of_progress. ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_1. ** wa_nodestab-tlevel = c_1. ** wa_nodestab-text = 'Production Variances (Summary Report)'(045). ** wa_nodestab-tlength = c_40. ** wa_nodestab-compress = c_x. ** APPEND wa_nodestab TO i_nodestab. ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_2_1. ** wa_nodestab-tlevel = c_2. ** wa_nodestab-parent = c_1_1. ** ** wa_nodestab-text = 'Summary of Orders for'(046). ** wa_nodestab-tlength = c_22. ** wa_nodestab-tcolor = c_1. ** ** CONCATENATE 'Plant:'(047) p_werks ** INTO wa_nodestab-text1 SEPARATED BY space. ** wa_nodestab-tlength1 = c_15. ** wa_nodestab-tcolor1 = c_1. ** ** CONCATENATE 'Phase Key:'(048) s_steus-low s_steus-high ** INTO wa_nodestab-text2 SEPARATED BY space. ** wa_nodestab-tlength2 = c_25. ** wa_nodestab-tcolor2 = c_1. ** ** IF s_arbpl[] IS INITIAL. ** wa_nodestab-text3 = 'Resources: All'(049). ** ELSE. ** CONCATENATE 'Resources:'(065) s_arbpl-low c_hyp s_arbpl-high ** INTO wa_nodestab-text3 SEPARATED BY space. ** ENDIF. ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_1. ** ** APPEND wa_nodestab TO i_nodestab. ** ******Begin of MOD-001 ** CLEAR: l_sum_plan_effic, i_sum_ordmats, i_sum_activity. ******End of MOD-001 ** ** LOOP AT i_pro_orders INTO wa_pro_orders. ** ** l_gamng = wa_pro_orders-gamng. ** l_gmein = wa_pro_orders-gmein. ** *** Get actual produced Quantity or Confirm Quantity ** IF NOT ( rb_prod IS INITIAL ). ** l_prdqty = wa_pro_orders-menge. ** l_fromuom = wa_pro_orders-gruom. ** ELSE. ** l_prdqty = wa_pro_orders-lmnga. ** ***************************MOD-006*********************** *** l_fromuom = wa_pro_orders-cfuom. ** IF wa_pro_orders-cfuom IS INITIAL. ** SELECT aufnr rueck gmnga lmnga gmein meinh ** meilr stokz rueck_mst ** FROM afru INTO TABLE i_afru ** WHERE aufnr = wa_pro_orders-aufnr. ** IF NOT i_afru[] IS INITIAL. ** READ TABLE i_afru INTO wa_afru INDEX 1. ** IF sy-subrc = 0. ** l_fromuom = wa_afru-gmein. ** ENDIF. ** ENDIF. ** ELSE. ** l_fromuom = wa_pro_orders-cfuom. ** ENDIF. ***************************MOD-006********************** ** ENDIF. ** IF rb_kgm = c_x. *** do actual conversion ** PERFORM uom_convert USING wa_pro_orders-plnbez ** l_prdqty ** l_fromuom ** l_conv. ** l_prdqty = l_conv. *** do planned conversion **********MOD-002********************************* *** l_fromuom = wa_pro_orders-gmein. ** l_fromuom = 'KG'. **********Mod-002********************************* ** PERFORM uom_convert USING wa_pro_orders-plnbez ** wa_pro_orders-gamng ** l_fromuom ** l_conv. ** l_gamng = l_conv. ** ENDIF. *** Calculating Plan Effic value ** CLEAR l_plan_effic. ***- Begin of MOD-001 *** IF l_gamng GT 0. *** l_diff = l_gamng - l_prdqty. *** l_plan_effic = 100 - 100 * ( l_diff / l_gamng ). *** ELSE. *** CLEAR l_plan_effic. *** ENDIF. ** ** LOOP AT i_plpo1 INTO wa_plpo1 ** WHERE plnty = wa_pro_orders-plnty ** AND plnnr = wa_pro_orders-plnnr ** AND steus = 'YBN1'. ** IF wa_plpo1-vgw02 IS NOT INITIAL. ** MOVE wa_plpo1-usr04 TO l_effic. "L_VALUE. ** wa_plpo2 = wa_plpo1. ** APPEND wa_plpo2 TO i_plpo2. *******************mod-002************************* *** CONDENSE L_VALUE. *** write l_effic to l_plan_effic. *** L_PLAN_EFFIC = floor( L_VALUE ). *******************mod-002************************* ** ELSE. ** CLEAR l_plan_effic. ** ENDIF. ** ** ENDLOOP. ** ***********************MOD-008*************************************** *** LOOP AT I_ORDOPS INTO WA_ORDOPS. *** READ TABLE I_PRO_ORDERS INTO WA_PRO_ORDERS WITH KEY *** AUFNR = WA_ORDOPS-AUFNR *** BINARY SEARCH. *** IF SY-SUBRC = 0. *** READ table i_afvc1 into wa_afvc1 with key *** plnty = wa_ORDOPS-plnty *** plnnr = wa_ORDOPS-plnnr *** plnkn = wa_ORDOPS-plnkn *** zaehl = wa_ORDOPS-zaehl *** aufpl = wa_pro_orders-aufpl. *** IF SY-SUBRC = 0. *** READ TABLE I_AFVV1 into wa_afvv1 with key *** aufpl = wa_afvc1-aufpl *** aplzl = wa_afvc1-aplzl binary search. *** IF SY-SUBRC = 0. *** CHECK WA_AFVV1-VGW02 NE 0. *** l_tmp = wa_afvv1-bmsch * wa_afvv1-ism02. *** IF l_tmp IS NOT INITIAL. *** *** l_tmp1 = ( wa_afvv1-lmnga * wa_afvv1-vgw02 ) / l_tmp. *** *** l_tmp1 = l_tmp1 * 100. *** *** MOVE l_tmp1 TO l_effic. *** *** ENDIF. *** ENDIF. *** ENDIF. *** ENDIF. *** ENDLOOP. *********************MOD-008******************************************** * ** ********Mod-002******************************** *** READ TABLE i_afvc INTO wa_afvc *** WITH KEY plnty = wa_plpo1-plnty *** plnnr = wa_plpo1-plnnr *** zaehl = wa_plpo1-zaehl. ** ** LOOP AT i_plpo2 INTO wa_plpo2.. ** CLEAR: wa_afvc, wa_afvv. ** READ TABLE i_afvc INTO wa_afvc ** WITH KEY plnty = wa_plpo2-plnty ** plnnr = wa_plpo2-plnnr ** plnkn = wa_plpo2-plnkn ** zaehl = wa_plpo2-zaehl ** aufpl = wa_pro_orders-aufpl. ** ****Mod-002************************************** ** ** IF sy-subrc IS INITIAL. ** READ TABLE i_afvv INTO wa_afvv ** WITH KEY aufpl = wa_afvc-aufpl ** aplzl = wa_afvc-aplzl. ** ** l_tmp = wa_afvv-bmsch * wa_afvv-ism02. ** IF l_tmp IS NOT INITIAL. ** ** l_tmp1 = ( wa_afvv-lmnga * wa_afvv-vgw02 ) / l_tmp. ** ** l_tmp1 = l_tmp1 * 100. ** ** MOVE l_tmp1 TO l_effic1. ** ** ENDIF. ** ** ENDIF. ** ENDLOOP. ** *** CLEAR v_plant_effic. *** PERFORM plant_effic USING wa_pro_orders-plnty *** wa_pro_orders-plnnr wa_pro_orders-plnkn *** wa_pro_orders-zaehl *** CHANGING v_plant_effic. *** l_sum_plan_effic = l_sum_plan_effic + l_plan_effic. ** l_sum_plan_effic = l_sum_plan_effic + l_effic. *** l_sum_plant_effic = l_sum_plant_effic + v_plant_effic. ** l_sum_plant_effic = l_sum_plant_effic + l_effic1. ***- End of MOD-001 ** l_sum_prdqty = l_sum_prdqty + l_prdqty. ** *****Begin of MOD-001 *** CLEAR: i_sum_activity. "l_prdqty *****End of MOD-001 ** LOOP AT i_ordops INTO wa_ordops ** WHERE aufnr = wa_pro_orders-aufnr. ** PERFORM activity_report USING l_prdqty l_gamng l_fromuom l_gmein . ** CLEAR : wa_ordops. ** ENDLOOP. ** **LOOP AT i_ordmats INTO wa_ordmats WHERE aufnr = wa_pro_orders-aufnr. ** PERFORM summary_materials. ** CLEAR : wa_ordmats. ** ENDLOOP. ** CLEAR : wa_pro_orders. ** ENDLOOP. ** CLEAR: l_plan_effic, v_plant_effic, l_prdqty, l_tot_orders. ** *** Passing summraised data to internal table for printing. ** DESCRIBE TABLE i_pro_orders LINES l_tot_orders. ** IF l_tot_orders %GT 0. *** l_plan_effic = l_sum_plan_effic / l_tot_orders. " MOD-001-- ** l_effic = l_sum_plan_effic / l_tot_orders. " ** MOD-001++ *** v_plant_effic = l_sum_plant_effic / l_tot_orders." MOD-001-- ** l_effic1 = l_sum_plant_effic / l_tot_orders. " ** MOD-001++ ** ENDIF. ** CLEAR wa_nodestab. ** wa_nodestab-id = c_2_2. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_1_1. ** ** IF NOT ( rb_prod IS INITIAL ). ** wa_nodestab-text = 'Produced Qty:'(050). ** ELSE. ** wa_nodestab-text = 'Confirmed Qty:'(051). ** ENDIF. ** wa_nodestab-tlength = c_15. ** wa_nodestab-tcolor = c_4. ** ** MOVE l_sum_prdqty TO wa_nodestab-text1(20). ** wa_nodestab-tlength1 = c_20. ** wa_nodestab-tcolor1 = c_4. ** *** CONCATENATE 'Plan Effic:'(036) l_plan_effic c_perc "'%' ** WRITE l_effic TO l_plan_effic. ** CONCATENATE 'Exp. Line Eff.'(036) l_plan_effic c_perc "'%' ** INTO wa_nodestab-text2 SEPARATED BY space. ** wa_nodestab-tlength2 = c_25. ** wa_nodestab-tcolor2 = c_4. ** *** CONCATENATE 'Plant Effic:'(037) v_plant_effic c_perc "'%' ** WRITE l_effic1 TO l_plant_effic. ** CONCATENATE 'Act. Line Eff.'(037) l_plant_effic c_perc "'%' ** INTO wa_nodestab-text3 SEPARATED BY space. ** wa_nodestab-tlength3 = c_25. ** wa_nodestab-tcolor3 = c_4. ** ** APPEND wa_nodestab TO i_nodestab. ** *** Summarised Phase Information ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_3. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_1_1. ** ** wa_nodestab-text = 'Activity'(052). ** wa_nodestab-tlength = c_40. ** wa_nodestab-tcolor = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Actual Usage'(040) v_waers ** INTO wa_nodestab-text1 SEPARATED BY space. ** ELSE. ** wa_nodestab-text1 = 'Actual Usage'(040). ** ENDIF. ** wa_nodestab-tlength1 = c_20. ** wa_nodestab-tcolor1 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Standard Usage'(041) v_waers ** INTO wa_nodestab-text2 SEPARATED BY space. ** ELSE. ** wa_nodestab-text2 = 'Standard Usage'(041). ** ENDIF. ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Activity Variance'(042) v_waers ** INTO wa_nodestab-text3 SEPARATED BY space. ** ELSE. ** wa_nodestab-text3 = 'Activity Variance'(042). ** ENDIF. ** wa_nodestab-tlength3 = c_35. ** wa_nodestab-tcolor3 = c_4. ** ** APPEND wa_nodestab TO i_nodestab. ** *** Summarized activities ** CLEAR: l_act_total, l_std_total, l_var_total. ** SORT i_sum_activity BY lar. ** LOOP AT i_sum_activity INTO wa_sum_activity. ** ** SELECT ltext FROM cslt INTO l_ltext ** WHERE spras = sy-langu ** AND kokrs = p_kokrs ** AND lstar = wa_sum_activity-lar. ** ENDSELECT. ** ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_4. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_3. ** ** wa_nodestab-text1 = l_ltext. ** wa_nodestab-tlength1 = c_36. ** wa_nodestab-tcolor1 = c_3. ** ** IF rb_fiscl IS INITIAL. ** MOVE wa_sum_activity-afru_ism TO wa_nodestab-text2(20). ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** ** MOVE wa_sum_activity-ism_should TO wa_nodestab-text3(20). ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** MOVE wa_sum_activity-ism_var TO wa_nodestab-text4(20). ** wa_nodestab-tlength4 = c_20. ** wa_nodestab-tcolor4 = c_3. ** ** ELSE. ** MOVE wa_sum_activity-coact TO wa_nodestab-text2(20). ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** ** MOVE wa_sum_activity-costd TO wa_nodestab-text3(20). ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** MOVE wa_sum_activity-covar TO wa_nodestab-text4(20). ** wa_nodestab-tlength4 = c_20. ** wa_nodestab-tcolor4 = c_3. ** ** l_act_total = l_act_total + wa_sum_activity-coact. ** l_std_total = l_std_total + wa_sum_activity-costd. ** l_var_total = l_var_total + wa_sum_activity-covar. ** ENDIF. ** APPEND wa_nodestab TO i_nodestab. ** CLEAR : wa_nodestab, wa_sum_activity. ** ENDLOOP. ** IF NOT ( rb_fiscl IS INITIAL ). ** *** Display sub-total of Activities. ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_4. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_3. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Fiscal Activity Totals:'(053) v_waers ** INTO wa_nodestab-text1 SEPARATED BY space. ** ELSE. ** wa_nodestab-text1 = 'Fiscal Activity Totals:'(053). ** ENDIF. ** wa_nodestab-tlength1 = c_36. ** wa_nodestab-tcolor1 = c_2. ** ** MOVE l_act_total TO wa_nodestab-text2(20). ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_2. ** ** MOVE l_std_total TO wa_nodestab-text3(20). ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_2. ** ** MOVE l_var_total TO wa_nodestab-text4(20). ** wa_nodestab-tlength4 = c_20. ** wa_nodestab-tcolor4 = c_2. ** ** APPEND wa_nodestab TO i_nodestab. ** ENDIF. *** Summarized Material Information ** CLEAR wa_nodestab. ** wa_nodestab-id = c_6_1. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_2_2. ** ** PERFORM material_header. ** ** CLEAR: l_act_total, l_std_total, l_var_total. ** SORT i_sum_ordmats BY matnr. ** LOOP AT i_sum_ordmats INTO wa_sum_ordmats . ** CLEAR: wa_nodestab. ** wa_nodestab-id = c_4_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** *** Material Number ** WRITE wa_sum_ordmats-matnr TO wa_nodestab-text NO-ZERO. ** wa_nodestab-tlength = c_18. ** wa_nodestab-tcolor = c_3. ** *** Material Description ** CLEAR wa_material_des. ** READ TABLE i_material_des INTO wa_material_des ** WITH KEY matnr = wa_sum_ordmats-matnr. ** wa_nodestab-text1 = wa_material_des-maktx. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_3. ** *** Standard planned or zero loss planned ** ** IF rb_zloss IS INITIAL. ** l_qty = wa_sum_ordmats-stdqy. ** ELSE. ** l_qty = wa_sum_ordmats-zloss. ** ENDIF. ** *** Order uom or kgm ** IF rb_kgm IS INITIAL. ** l_aqty = wa_sum_ordmats-menge. ** l_sqty = l_qty. ** ELSE. *** do actual conversion ** PERFORM uom_convert USING wa_sum_ordmats-matnr ** wa_sum_ordmats-menge ** wa_sum_ordmats-amein ** l_aqty. *** do std/zloss conversion ** PERFORM uom_convert USING wa_ordmats-matnr ** wa_ordmats-stdqy ** wa_ordmats-meins ** l_sqty. ** ENDIF. ** ** PERFORM std_percentage_calc USING l_aqty l_sqty l_pcent. ** *** Fiscal or quantity ** IF rb_fiscl IS INITIAL. ** MOVE l_aqty TO wa_nodestab-text2(20). " Actual Usage ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** ** MOVE l_sqty TO wa_nodestab-text3(20). " Standard Usage ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** ELSE. ** IF NOT wa_sum_ordmats-peinh IS INITIAL. ** CLEAR l_cost. ** l_cost = ( wa_sum_ordmats-stprs * wa_sum_ordmats-menge ) ** / wa_sum_ordmats-peinh. ** MOVE l_cost TO wa_nodestab-text2(20). " Acutal Usage ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** ** l_act_total = l_act_total + l_cost. " Subtotal of actual ** ** ENDIF. ** IF NOT wa_sum_ordmats-peinh IS INITIAL. ** CLEAR l_cost. ** l_cost = ( wa_sum_ordmats-stprs * wa_sum_ordmats-stdqy ) ** / wa_sum_ordmats-peinh. ** MOVE l_cost TO wa_nodestab-text3(20). " Standard Usage ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** l_std_total = l_std_total + l_cost. " Subtotal of standard ** ** ENDIF. ** ENDIF. ** ** MOVE l_pcent TO wa_nodestab-text4(18). " Variance Percentage ** CONCATENATE wa_nodestab-text4(18) c_perc "'%' ** INTO wa_nodestab-text4(20) SEPARATED BY space. ** wa_nodestab-tlength4 = c_20. "c_19. ** wa_nodestab-tcolor4 = c_3. ** ** CLEAR: l_diff, l_cost. ** l_diff = wa_sum_ordmats-menge - wa_sum_ordmats-stdqy. ** IF NOT wa_sum_ordmats-peinh IS INITIAL. **l_cost = ( wa_sum_ordmats-stprs * l_diff ) / wa_sum_ordmats-peinh. ** l_cost = l_cost * -1. ** ENDIF. ** ** MOVE l_cost TO wa_nodestab-text5(20). " Variance "15 ** wa_nodestab-tlength5 = c_20. "c_15 ** wa_nodestab-tcolor5 = c_3. ** ** l_var_total = l_var_total + l_cost. " Subtotal of Variance ** ** APPEND wa_nodestab TO i_nodestab. ** CLEAR : wa_nodestab, wa_sum_ordmats. ** ENDLOOP. *** Displaying Subtotals ** IF NOT ( rb_fiscl IS INITIAL ). ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_4_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Fiscal quantity Totals:'(054) v_waers ** INTO wa_nodestab-text SEPARATED BY space. ** ELSE. ** wa_nodestab-text = 'Fiscal quantity Totals:'(054). ** ENDIF. ** wa_nodestab-tlength = c_30. ** wa_nodestab-tcolor = c_6. ** ** wa_nodestab-text1 = space. ** wa_nodestab-tlength1 = c_18. ** wa_nodestab-tcolor1 = c_6. ** ** MOVE l_act_total TO wa_nodestab-text2(20) . ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_6. ** ** MOVE l_std_total TO wa_nodestab-text3(20) . ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_6. ** ** wa_nodestab-text4 = space. ** wa_nodestab-tlength4 = c_19. ** wa_nodestab-tcolor4 = c_6. ** ** MOVE l_var_total TO wa_nodestab-text5(21) . ** wa_nodestab-tlength5 = c_21. "15. ** wa_nodestab-tcolor5 = c_6. ** ** APPEND wa_nodestab TO i_nodestab. ** ELSE. ** CLEAR wa_nodestab. ** wa_nodestab-id = c_4_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Variance Fiscal Total:'(055) v_waers ** INTO wa_nodestab-text SEPARATED BY space. ** ELSE. ** wa_nodestab-text = 'Variance Fiscal Total:'(055). ** ENDIF. ** wa_nodestab-tlength = c_29. ** wa_nodestab-tcolor = c_6. ** ** wa_nodestab-text1 = space. ** wa_nodestab-tlength1 = c_40. ** wa_nodestab-tcolor1 = c_6. ** ** wa_nodestab-text2 = space. ** wa_nodestab-tlength2 = '41'. "c_40. ** wa_nodestab-tcolor2 = c_6. ** ** MOVE l_var_total TO wa_nodestab-text3(20) . ** wa_nodestab-tlength3 = c_20. "c_15. ** wa_nodestab-tcolor3 = c_6. ** ** APPEND wa_nodestab TO i_nodestab. ** ENDIF. **ENDFORM. " DISPLAY_SUMMARY_REPORT ***&-------------------------------------------------------------------- *** ***& Form DISPLAY_PHASE_REPORT ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM display_phase_report. ** ** DATA: l_date_low(10) TYPE c, ** l_date_high(10) TYPE c, ** l_diff TYPE menge_d, *** l_plan_effic(3) TYPE c, ** l_plan_effic TYPE char05, "MOD-001++ ** l_plant_effic TYPE char05, "MOD-001++ ** l_gamng TYPE menge_d, ** l_gamng1(20) TYPE c, ** l_gmein TYPE meins, ** ** l_qty TYPE menge_d, ** l_prdqty TYPE menge_d, ** l_conv TYPE menge_d, ** l_aqty TYPE menge_d, ** l_sqty TYPE menge_d, ** ** l_pcent(3) TYPE p DECIMALS 2, ** l_cost(8) TYPE p DECIMALS 2, ** ** l_act_total(8) TYPE p DECIMALS 2, ** l_std_total(8) TYPE p DECIMALS 2, ** l_var_total(8) TYPE p DECIMALS 2, ** ** l_fromuom TYPE meins, ** l_cfuom TYPE meins, ** ** l_ph_bmsch TYPE i. ***- Begin of MOD-001 ** DATA: l_value TYPE char16, ** l_tmp TYPE lmnga, ** l_tmp1 TYPE lmnga, ** l_effic TYPE p DECIMALS 1, ** l_uom TYPE char03. ***- End of MOD-001 ** ** ** PERFORM pfstatus. ** SET PF-STATUS 'MAIN' EXCLUDING i_fcode. ** SET TITLEBAR 'VARI' WITH text-068. ** ** CLEAR wa_nodestab. ** REFRESH i_nodestab. ** ** MOVE 'Display Phase Report'(030) TO v_output_text. ** PERFORM inform_user_of_progress. ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_1_1. ** wa_nodestab-tlevel = c_1. ** wa_nodestab-text = 'Production Variances'(031). ** wa_nodestab-tlength = c_20. ** wa_nodestab-compress = c_x. ** APPEND wa_nodestab TO i_nodestab. ** ** LOOP AT i_pro_orders INTO wa_pro_orders. ** ** CLEAR: wa_nodestab, l_date_low, l_date_high, l_gamng, ** wa_material_des. ** ** l_gamng = wa_pro_orders-gamng. ** l_gmein = wa_pro_orders-gmein. ** wa_nodestab-id = c_2_1. ** wa_nodestab-tlevel = c_2. ** wa_nodestab-parent = c_1_1. ** *** Order Number text ** wa_nodestab-text = 'Order Num:'(032). ** wa_nodestab-tlength = c_12. ** wa_nodestab-tcolor = c_1. *** Order number ** WRITE wa_pro_orders-aufnr TO wa_nodestab-text1 NO-ZERO. ** wa_nodestab-tlength1 = c_12. ** wa_nodestab-tcolor1 = c_1. ** wa_nodestab-hotspot1 = c_x. ** *** Date Range ** WRITE wa_pro_orders-wdate TO l_date_low. ** WRITE wa_pro_orders-gltrp TO l_date_high. ** CONCATENATE l_date_low c_hyp l_date_high ** INTO wa_nodestab-text2 SEPARATED BY space. ** wa_nodestab-tlength2 = c_25. ** wa_nodestab-tcolor2 = c_1. ** *** Material Number ** WRITE wa_pro_orders-plnbez TO wa_nodestab-text3 NO-ZERO. ** wa_nodestab-tlength3 = c_18. ** wa_nodestab-tcolor3 = c_1. ** *** Material Description ** READ TABLE i_material_des INTO wa_material_des ** WITH KEY matnr = wa_pro_orders-plnbez. ** wa_nodestab-text4 = wa_material_des-maktx. ** wa_nodestab-tlength4 = c_33. ** wa_nodestab-tcolor4 = c_1. ** ** APPEND wa_nodestab TO i_nodestab. ** ** LOOP AT i_ordops INTO wa_ordops ** WHERE aufnr = wa_pro_orders-aufnr. ** PERFORM get_confirmation_qty USING wa_ordops-rueck ** l_prdqty l_cfuom. ** IF rb_kgm = c_x. ** IF rb_conf IS INITIAL. ** l_prdqty = wa_pro_orders-menge. ** l_fromuom = wa_pro_orders-gruom. ** ELSE. ** l_fromuom = l_cfuom. ** ENDIF. *** do gr/conf conversion ** PERFORM uom_convert USING wa_pro_orders-plnbez l_prdqty ** l_fromuom l_conv. ** l_prdqty = l_conv. ** l_qty = l_prdqty. *** do planned conversion **********mod-002******************************** *** l_fromuom = wa_pro_orders-gmein. ** l_fromuom = 'KG'. *********MOD-002********************************* ** ** PERFORM uom_convert USING wa_pro_orders-plnbez ** wa_pro_orders-gamng ** l_fromuom l_conv. ** l_gamng = l_conv. ** ELSE. *** Get Standard Numbers from the phase ** READ TABLE i_plpo INTO wa_plpo ** WITH KEY plnty = wa_pro_orders-plnty ** plnnr = wa_pro_orders-plnnr ** plnkn = wa_pro_orders-plnkn ** zaehl = wa_pro_orders-zaehl. ** PERFORM get_stds USING wa_ordops-plnty wa_ordops-plnnr ** wa_ordops-plnkn wa_ordops-zaehl. *** Factor in any differences in uoms (plpo selected in get_stds form) ** l_ph_bmsch = wa_plpo-bmsch / ( wa_plpo-umrez / wa_plpo-umren ) . *** calculate planned phase qty as planned order qty / final phase std **qty *** current phase std qty ** l_gamng = ( wa_pro_orders-gamng / wa_plpo-bmsch ) * l_ph_bmsch . *** Get actual produced Qty (from order) or use Confirm Qty (from phase) ** IF rb_conf IS INITIAL. *** Factor in any differences in uoms (plpo ** selected in plant_effic form) ** l_qty = ( wa_pro_orders-menge / wa_plpo-bmsch ) * l_ph_bmsch . ** l_prdqty = wa_pro_orders-menge. ** l_fromuom = wa_pro_orders-gruom. ** ELSE. ** l_qty = ( l_prdqty / wa_plpo-bmsch ) * l_ph_bmsch. ** l_fromuom = l_cfuom. ** ENDIF. ** ENDIF. ** ***- begin of MOD-001 *** Calculate Plan effic. *** CLEAR l_plan_effic. *** *** IF l_gamng %GT 0. *** l_diff = ABS( l_gamng - l_qty ). *** l_plan_effic = c_100 - c_100 * ( l_diff / l_gamng ). *** ELSE. *** CLEAR l_plan_effic. *** ENDIF. ** ** LOOP AT i_plpo1 INTO wa_plpo1 ** WHERE plnty = wa_pro_orders-plnty ** AND plnnr = wa_pro_orders-plnnr ** AND steus = 'YBN1'. ** IF wa_plpo1-vgw02 IS NOT INITIAL. ** MOVE wa_plpo1-usr04 TO l_effic. "L_VALUE. ** WRITE l_effic TO l_plan_effic. ** wa_plpo2 = wa_plpo1. ** APPEND wa_plpo2 TO i_plpo2. ************MOD-002******************************** *** ELSE. *** CLEAR l_plan_effic. ** ENDIF. ***********MOD-002********************************* ** ENDLOOP. ** ** ***- End of MOD-001 *** Resource Information ** CLEAR wa_nodestab. ** wa_nodestab-id = c_2_2. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_1_1. ** ** CONCATENATE 'Resource:'(056) wa_pro_orders-arbpl ** INTO wa_nodestab-text SEPARATED BY space. ** wa_nodestab-tlength = c_25. ** wa_nodestab-tcolor = c_4. ** ** READ TABLE i_wc_text INTO wa_wc_text ** WITH KEY objid = wa_pro_orders-arbid. ** wa_nodestab-text1 = wa_wc_text-ktext. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_4. ** **************MOD-002********************************** ** wa_nodestab-text2 = wa_ordops-vornr. ** wa_nodestab-tlength2 = c_4. ** wa_nodestab-tcolor2 = c_4. ** ***********mod-002************************************* ** *** Produced Quantity / Confirmed Quantity ** MOVE l_prdqty TO wa_nodestab-text3(20). ** MOVE l_fromuom TO l_uom. " ** MOD-001++ ** IF NOT ( rb_prod IS INITIAL ). *** CONCATENATE 'Prod Qty: '(033) wa_nodestab-text2 "MOD-001- ** CONCATENATE 'Prod Qty: '(033) wa_nodestab-text3 l_uom"MOD-001+ ** INTO wa_nodestab-text3 SEPARATED BY space. ** ELSE. *** CONCATENATE 'Conf Qty: '(034) wa_nodestab-text2 "MOD-001- ** CONCATENATE 'Conf Qty: '(034) wa_nodestab-text3 l_uom"MOD-001+ ** INTO wa_nodestab-text3 SEPARATED BY space. ** ENDIF. ** *** wa_nodestab-tlength2 = c_30. "MOD-001- ** wa_nodestab-tlength3 = c_35_1. "MOD-001+ ** wa_nodestab-tcolor3 = c_1. ** *** CONCATENATE 'Plan Effic:'(036) l_plan_effic c_perc "'%' ** CONCATENATE 'Exp. Line Eff.'(036) l_plan_effic c_perc "'%' ** INTO wa_nodestab-text4 SEPARATED BY space. ** wa_nodestab-tlength4 = c_25. ** wa_nodestab-tcolor4 = c_4. ** *** CLEAR v_plant_effic. *** PERFORM plant_effic USING wa_ordops-plnty *** wa_ordops-plnnr *** wa_ordops-plnkn *** wa_ordops-zaehl *** CHANGING v_plant_effic. ** CLEAR l_effic. ****************mod-002*************************** *** READ TABLE I_AFVC INTO WA_AFVC *** WITH KEY PLNTY = WA_PLPO1-PLNTY *** PLNNR = WA_PLPO1-PLNNR *** ZAEHL = WA_PLPO1-ZAEHL. ***** Mod-002************************************ ** ******************MOD-008************************* *** LOOP AT I_ORDOPS INTO WA_ORDOPS. *** READ TABLE I_PRO_ORDERS INTO WA_PRO_ORDERS WITH KEY *** AUFNR = WA_ORDOPS-AUFNR *** BINARY SEARCH. *** IF SY-SUBRC = 0. *** READ table i_afvc1 into wa_afvc1 with key *** plnty = wa_ORDOPS-plnty *** plnnr = wa_ORDOPS-plnnr *** plnkn = wa_ORDOPS-plnkn *** zaehl = wa_ORDOPS-zaehl *** aufpl = wa_pro_orders-aufpl. *** IF SY-SUBRC = 0. *** READ TABLE I_AFVV1 into wa_afvv1 with key *** aufpl = wa_afvc1-aufpl *** aplzl = wa_afvc1-aplzl binary search. *** IF SY-SUBRC = 0. *** CHECK WA_AFVV1-VGW02 NE 0. *** l_tmp = wa_afvv1-bmsch * wa_afvv1-ism02. *** IF l_tmp IS NOT INITIAL. *** *** l_tmp1 = ( wa_afvv1-lmnga * wa_afvv1-vgw02 ) / l_tmp. *** *** l_tmp1 = l_tmp1 * 100. *** *** MOVE l_tmp1 TO l_effic. *** *** ENDIF. *** ENDIF. *** ENDIF. *** ENDIF. *** ENDLOOP. *** ****************MOD-008**************************** ** ** LOOP AT i_plpo2 INTO wa_plpo2. ** READ TABLE i_afvc INTO wa_afvc ** WITH KEY plnty = wa_plpo2-plnty ** plnnr = wa_plpo2-plnnr ** plnkn = wa_plpo2-plnkn ** zaehl = wa_plpo2-zaehl ** aufpl = wa_pro_orders-aufpl. ** ** ** ***** Mod-002************************************ ** ** IF sy-subrc IS INITIAL. ** READ TABLE i_afvv INTO wa_afvv ** WITH KEY aufpl = wa_afvc-aufpl ** aplzl = wa_afvc-aplzl. ** ** l_tmp = wa_afvv-bmsch * wa_afvv-ism02. ** IF l_tmp IS NOT INITIAL. ** ** l_tmp1 = ( wa_afvv-lmnga * wa_afvv-vgw02 ) / l_tmp. ** ** l_tmp1 = l_tmp1 * 100. ** ** MOVE l_tmp1 TO l_effic. ** ** ENDIF. ** ** ENDIF. ** ENDLOOP. ** ** WRITE l_effic TO l_plant_effic. ** *** CONCATENATE 'Plant Effic:'(037) v_plant_effic c_perc "'%' ** CONCATENATE 'Act. Line Eff.'(037) l_plant_effic c_perc "'%' ** " MOD-001+ ** INTO wa_nodestab-text5 SEPARATED BY space. ** wa_nodestab-tlength5 = c_25. ** wa_nodestab-tcolor5 = c_4. ** ** APPEND wa_nodestab TO i_nodestab. ** *** Phase Information ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_3. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_1_1. ** ** wa_nodestab-text = 'Phase'(038). ** wa_nodestab-tlength = c_10. ** wa_nodestab-tcolor = c_4. ** ** MOVE l_gamng TO l_gamng1. ** CONCATENATE 'Activity (Std Plan:'(039) l_gamng1 c_brac "')' ** INTO wa_nodestab-text1 SEPARATED BY space. ** wa_nodestab-tlength1 = c_42. ** wa_nodestab-tcolor1 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Actual Usage'(040) v_waers ** INTO wa_nodestab-text2 SEPARATED BY space. ** ELSE. ** wa_nodestab-text2 = 'Actual Usage'(040). ** ENDIF. ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Standard Usage'(041) v_waers ** INTO wa_nodestab-text3 SEPARATED BY space. ** ELSE. ** wa_nodestab-text3 = 'Standard Usage'(041). ** ENDIF. ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Activity Variance'(042) v_waers ** INTO wa_nodestab-text4 SEPARATED BY space. ** ELSE. ** wa_nodestab-text4 = 'Activity Variance'(042). ** ENDIF. ** wa_nodestab-tlength4 = c_35. ** wa_nodestab-tcolor4 = c_4. ** ** APPEND wa_nodestab TO i_nodestab. ** *** Display acitivity report ** PERFORM activity_report USING l_prdqty l_gamng l_uom l_gmein. ** *** Material Information ** CLEAR: wa_nodestab, l_act_total, l_std_total, l_var_total. ** wa_nodestab-id = c_3_4. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_1_1. ** ** PERFORM material_header. ** *** Individual material details ** LOOP AT i_ordmats INTO wa_ordmats ** WHERE aufnr = wa_pro_orders-aufnr ** AND vornr = wa_ordops-vornr. ** ** CLEAR: wa_nodestab. ** wa_nodestab-id = c_4_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** *** Material Number ** WRITE wa_ordmats-matnr TO wa_nodestab-text NO-ZERO. ** wa_nodestab-tlength = c_18. ** wa_nodestab-tcolor = c_3. ** *** Material Description ** CLEAR wa_material_des. ** READ TABLE i_material_des INTO wa_material_des ** WITH KEY matnr = wa_ordmats-matnr. ** wa_nodestab-text1 = wa_material_des-maktx. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_3. ** *** Standard planned or zero loss planned ** ** IF rb_zloss IS INITIAL. ** l_qty = wa_ordmats-stdqy. ** ELSE. ** l_qty = wa_ordmats-zloss. ** ENDIF. ** *** Order uom or kgm ** IF rb_kgm IS INITIAL. ** l_aqty = wa_ordmats-menge. ** l_sqty = l_qty. ** ELSE. *** do actual conversion ** PERFORM uom_convert USING wa_ordmats-matnr ** wa_ordmats-menge ** wa_ordmats-amein ** l_aqty. *** do std/zloss conversion ** PERFORM uom_convert USING wa_ordmats-matnr ** wa_ordmats-stdqy ** wa_ordmats-meins ** l_sqty. ** ENDIF. ** ** PERFORM std_percentage_calc USING l_aqty l_sqty l_pcent. ** *** Fiscal or quantity ** IF rb_fiscl IS INITIAL. ** MOVE l_aqty TO wa_nodestab-text2(20). " Actual Usage ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** ** MOVE l_sqty TO wa_nodestab-text3(20). " Standard Usage ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** ELSE. ** IF NOT wa_ordmats-peinh IS INITIAL. ** CLEAR l_cost. ** l_cost = ( wa_ordmats-stprs * wa_ordmats-menge ) ** / wa_ordmats-peinh. ** MOVE l_cost TO wa_nodestab-text2(20). " Acutal Usage ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** ** l_act_total = l_act_total + l_cost. " Subtotal of actual ** ENDIF. ** IF NOT wa_ordmats-peinh IS INITIAL. ** CLEAR l_cost. ** l_cost = ( wa_ordmats-stprs * wa_ordmats-stdqy ) ** / wa_ordmats-peinh. ** MOVE l_cost TO wa_nodestab-text3(20). " Standard Usage ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** l_std_total = l_std_total + l_cost. " Subtotal of standard ** ENDIF. ** ** ENDIF. ** ** MOVE l_pcent TO wa_nodestab-text4(17). " Variance Percentage ** CONCATENATE wa_nodestab-text4(17) c_perc "'%' ** INTO wa_nodestab-text4(19) SEPARATED BY space. ** wa_nodestab-tlength4 = 19. ** wa_nodestab-tcolor4 = c_3. ** ** CLEAR: l_diff, l_cost. ** l_diff = wa_ordmats-menge - wa_ordmats-stdqy. ** IF NOT wa_ordmats-peinh IS INITIAL. ** l_cost = ( wa_ordmats-stprs * l_diff ) / wa_ordmats-peinh. ** l_cost = l_cost * -1. ** ENDIF. ** ** MOVE l_cost TO wa_nodestab-text5(15). " Variance ** wa_nodestab-tlength5 = c_15. ** wa_nodestab-tcolor5 = c_3. ** ** l_var_total = l_var_total + l_cost. " Subtotal of Variance ** ** APPEND wa_nodestab TO i_nodestab. ** ** ENDLOOP. ** *** Displaying Subtotals ** CHECK sy-subrc IS INITIAL. ** CLEAR wa_nodestab. ** wa_nodestab-id = c_4_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** ** wa_nodestab-text = 'Material Totals'(043). ** wa_nodestab-tlength = c_18. ** wa_nodestab-tcolor = c_6. ** ** wa_nodestab-text1 = space. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_6. ** ** MOVE l_act_total TO wa_nodestab-text2(20) . ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_6. ** ** MOVE l_std_total TO wa_nodestab-text3(20) . ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_6. ** ** wa_nodestab-text4 = space. ** wa_nodestab-tlength4 = c_19. ** wa_nodestab-tcolor4 = c_6. ** ** MOVE l_var_total TO wa_nodestab-text5(15) . ** wa_nodestab-tlength5 = c_15. ** wa_nodestab-tcolor5 = c_6. ** ** APPEND wa_nodestab TO i_nodestab. ** ** ENDLOOP. *** Output the materials which were issued to order but aren't on bom ** READ TABLE i_issued_mat INTO wa_issued_mat ** WITH KEY aufnr = wa_pro_orders-aufnr. ** IF sy-subrc = 0. ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_5. ** wa_nodestab-tlevel = c_3 . ** wa_nodestab-parent = c_1_1. ** ** wa_nodestab-text = ** 'Materials issued to order but not in Recipe'(057). ** wa_nodestab-tlength = c_45. ** wa_nodestab-tcolor = c_6. ** ** APPEND wa_nodestab TO i_nodestab. ** *** Material Information ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_6. ** wa_nodestab-tlevel = c_3. ** wa_nodestab-parent = c_3_5. ** ** PERFORM material_header. *** now write the components ** ** CLEAR: l_pcent, l_act_total, l_std_total, l_var_total. ** ** LOOP AT i_issued_mat INTO wa_issued_mat ** WHERE aufnr = wa_pro_orders-aufnr. ** ** CLEAR: wa_nodestab, l_aqty, l_sqty, l_cost, wa_material_des. ** wa_nodestab-id = c_6_1. ** wa_nodestab-tlevel = c_6. ** wa_nodestab-parent = c_3_6. ** *** Material Number ** WRITE wa_issued_mat-matnr TO wa_nodestab-text NO-ZERO. ** wa_nodestab-tlength = c_18. ** wa_nodestab-tcolor = c_3. ** *** Material Description ** READ TABLE i_material_des INTO wa_material_des ** WITH KEY matnr = wa_issued_mat-matnr. ** wa_nodestab-text1 = wa_material_des-maktx. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_3. ** ** IF rb_fiscl IS INITIAL. *** Actual Usage ** l_aqty = wa_issued_mat-menge. ** MOVE l_aqty TO wa_nodestab-text2(20). " Actual Usage ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** *** Standard Usage ** MOVE l_sqty TO wa_nodestab-text3(20). " Standard Usage ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** ELSE. ** IF NOT wa_issued_mat-peinh IS INITIAL. ** l_cost = ( wa_issued_mat-stprs * wa_issued_mat-menge ) ** / wa_issued_mat-peinh. ** ENDIF. ** l_act_total = l_act_total + l_cost. " Subtotal of actual ** ** MOVE l_cost TO wa_nodestab-text2(20). " Acutal Usage ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_3. ** ** CLEAR l_cost. ** MOVE l_cost TO wa_nodestab-text3(20). " Standard Usage ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_3. ** ** ENDIF. *** Variance percentage ** l_pcent = 100. ** MOVE l_pcent TO wa_nodestab-text4(17). " Variance Percentage ** CONCATENATE wa_nodestab-text4(17) c_perc "'%' ** INTO wa_nodestab-text4(19) SEPARATED BY space. ** wa_nodestab-tlength4 = c_19. ** wa_nodestab-tcolor4 = c_3. *** Variance ** CLEAR l_cost. ** IF NOT wa_issued_mat-peinh IS INITIAL. ** l_cost = ( wa_issued_mat-stprs * wa_issued_mat-menge ) ** / wa_issued_mat-peinh. ** l_cost = l_cost * -1. ** ENDIF. ** l_var_total = l_var_total + l_cost. " Subtotal of Variance ** ** MOVE l_cost TO wa_nodestab-text5(15). " Variance ** wa_nodestab-tlength5 = c_15. ** wa_nodestab-tcolor5 = c_3. ** ** APPEND wa_nodestab TO i_nodestab. ** ** ENDLOOP. ** *** Displaying Subtotals of material recipe ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_6_1. ** wa_nodestab-tlevel = c_6. ** wa_nodestab-parent = c_3_5. ** ** wa_nodestab-text = 'Material Totals'(043). ** wa_nodestab-tlength = c_18. ** wa_nodestab-tcolor = c_6. ** ** wa_nodestab-text1 = space. ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_6. ** ** MOVE l_act_total TO wa_nodestab-text2(20) . ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_6. ** ** MOVE l_std_total TO wa_nodestab-text3(20) . ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_6. ** ** wa_nodestab-text4 = space. ** wa_nodestab-tlength4 = c_19. ** wa_nodestab-tcolor4 = c_6. ** ** MOVE l_var_total TO wa_nodestab-text5(15) . ** wa_nodestab-tlength5 = c_15. ** wa_nodestab-tcolor5 = c_6. ** ** APPEND wa_nodestab TO i_nodestab. ** ** ENDIF. ** ** ENDLOOP. ** **ENDFORM. " DISPLAY_PHASE_REPORT ***&-------------------------------------------------------------------- *** ***& Form ACTIVITY_REPORT ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM activity_report USING fp_l_prdqty TYPE menge_d ** fp_l_gamng TYPE menge_d ** fp_l_uom TYPE meins ** fp_l_gmein TYPE meins. ** DATA: l_value TYPE gamng, ** l_ism01_var TYPE ru_ismng, ** l_ism02_var TYPE ru_ismng, ** l_ism03_var TYPE ru_ismng, ** l_ism04_var TYPE ru_ismng, ** l_ism05_var TYPE ru_ismng, ** l_ism06_var TYPE ru_ismng. ** DATA: struct_afvgd TYPE afvgd. ** DATA: struct_mara TYPE mara, ** struct_marc TYPE marc. ** DATA: v_menge TYPE menge_d. ** *** Get Standard Numbers from the phase ** PERFORM get_stds USING wa_ordops-plnty wa_ordops-plnnr ** wa_ordops-plnkn wa_ordops-zaehl. ** *** Calculate Standard Labour/Fitter/Machine Hours. ** CLEAR struct_activity. ** MOVE-CORRESPONDING wa_plpo1 TO struct_afvgd. "#EC ENHOK ** MOVE: wa_ordops-arbid TO struct_afvgd-arbid, ** wa_ordops-ssavd TO struct_afvgd-ssavd. ** MOVE wa_plpo1-vge01 TO v_msehi. ** ** IF rb_actl IS INITIAL. *** Planned qty ** l_value = fp_l_gamng. ** ELSE. *** Actual qty ** l_value = fp_l_prdqty. ** ENDIF. ** ** CALL FUNCTION 'CO_R0_DET_TOTAL_ACTIVITY' ** EXPORTING ** act_afvgd = struct_afvgd ** act_quantity = l_value ** act_flg_consider_conf = space ** act_unit_of_time = v_msehi ** IMPORTING ** exp_activities = struct_activity. ** *** Now get the confirmed values ** PERFORM get_confirmation_details. ** *** Get Activity 1 ** l_ism01_var = struct_activity-acti1 - wa_ord_conf1-ism01. *** Get Activity 2 ** l_ism02_var = struct_activity-acti2 - wa_ord_conf1-ism02. *** Get Activity 3 ** l_ism03_var = struct_activity-acti3 - wa_ord_conf1-ism03. *** Get Activity 4 ** l_ism04_var = struct_activity-acti4 - wa_ord_conf1-ism04. *** Get Activity 5 ** l_ism05_var = struct_activity-acti5 - wa_ord_conf1-ism05. *** Get Activity 6 ** l_ism06_var = struct_activity-acti6 - wa_ord_conf1-ism06. ** ** IF rb_summ IS INITIAL. *** Now output the activities for each phase ** IF NOT ( wa_plpo1-lar01 IS INITIAL ). ** PERFORM activity_cost_report USING wa_plpo1-lar01 ** wa_ord_conf1-ism01 ** struct_activity-acti1 ** l_ism01_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar02 IS INITIAL ). ** PERFORM activity_cost_report USING wa_plpo1-lar02 ** wa_ord_conf1-ism02 ** struct_activity-acti2 ** l_ism02_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar03 IS INITIAL ). ** PERFORM activity_cost_report USING wa_plpo1-lar03 ** wa_ord_conf1-ism03 ** struct_activity-acti3 ** l_ism03_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar04 IS INITIAL ). ** PERFORM activity_cost_report USING wa_plpo1-lar04 ** wa_ord_conf1-ism04 ** struct_activity-acti4 ** l_ism04_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar05 IS INITIAL ). ** PERFORM activity_cost_report USING wa_plpo1-lar05 ** wa_ord_conf1-ism05 ** struct_activity-acti5 ** l_ism05_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar06 IS INITIAL ). ** PERFORM activity_cost_report USING wa_plpo1-lar06 ** wa_ord_conf1-ism06 ** struct_activity-acti6 ** l_ism06_var. ** ENDIF. ** ELSEIF rb_summ = c_x. ** IF NOT ( wa_plpo1-lar01 IS INITIAL ). ** PERFORM sum_activity_costs USING wa_plpo1-lar01 ** wa_ord_conf1-ism01 ** struct_activity-acti1 ** l_ism01_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar02 IS INITIAL ). ** PERFORM sum_activity_costs USING wa_plpo1-lar02 ** wa_ord_conf1-ism02 ** struct_activity-acti2 ** l_ism02_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar03 IS INITIAL ). ** PERFORM sum_activity_costs USING wa_plpo1-lar03 ** wa_ord_conf1-ism03 ** struct_activity-acti3 ** l_ism03_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar04 IS INITIAL ). ** PERFORM sum_activity_costs USING wa_plpo1-lar04 ** wa_ord_conf1-ism04 ** struct_activity-acti4 ** l_ism04_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar05 IS INITIAL ). ** PERFORM sum_activity_costs USING wa_plpo1-lar05 ** wa_ord_conf1-ism05 ** struct_activity-acti5 ** l_ism05_var. ** ENDIF. ** IF NOT ( wa_plpo1-lar06 IS INITIAL ). ** PERFORM sum_activity_costs USING wa_plpo1-lar06 ** wa_ord_conf1-ism06 ** struct_activity-acti6 ** l_ism06_var. ** ENDIF. ** ** ENDIF. ** **ENDFORM. " ACTIVITY_REPORT ***&-------------------------------------------------------------------- *** ***& Form GET_STDS ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GT p1 text *** %LT-- p2 text ***--------------------------------------------------------------------- *** **FORM get_stds USING fp_p_plnty TYPE plnty ** fp_p_plnnr TYPE plnnr ** fp_p_plnkn TYPE plnkn ** fp_p_zaehl TYPE cim_count. ** ** TYPES: BEGIN OF ty_crco_info, ** objty TYPE cr_objty, ** objid TYPE cr_objid, ** laset TYPE cr_laset, ** endda TYPE enddatum, ** lanum TYPE cr_lanum, ** begda TYPE begdatum, ** lstar_ref TYPE ap_kzref, ** lstar TYPE lstar, ** END OF ty_crco_info. ** ** DATA : i_crco_info TYPE STANDARD TABLE OF ty_crco_info, ** wa_crco_info TYPE ty_crco_info. ** ** ** DATA: l_wcinfo TYPE c, ** l_datuv TYPE plpo-datuv, ** lc_objty TYPE plpo-objty VALUE 'A'. ** ** READ TABLE i_plpo1 INTO wa_plpo1 WITH KEY plnty = fp_p_plnty ** plnnr = fp_p_plnnr ** plnkn = fp_p_plnkn ** zaehl = fp_p_zaehl. ** IF sy-subrc = 0. ** ** IF ( wa_plpo1-lar01 IS INITIAL AND NOT ( wa_plpo1-vgw01 = 0 ) ) OR ** ( wa_plpo1-lar02 IS INITIAL AND NOT ( wa_plpo1-vgw02 = 0 ) ) OR ** ( wa_plpo1-lar03 IS INITIAL AND NOT ( wa_plpo1-vgw03 = 0 ) ) OR ** ( wa_plpo1-lar04 IS INITIAL AND NOT ( wa_plpo1-vgw04 = 0 ) ) OR ** ( wa_plpo1-lar05 IS INITIAL AND NOT ( wa_plpo1-vgw05 = 0 ) ) OR ** ( wa_plpo1-lar06 IS INITIAL AND NOT ( wa_plpo1-vgw06 = 0 ) ). ** REFRESH: i_crco_info. *** Check the work centre is on the phase, if not go to the operation ** IF wa_plpo1-arbid IS INITIAL. ** SELECT datuv arbid objty ** INTO (l_datuv,wa_plpo1-arbid,wa_plpo1-objty) ** FROM plpo ** WHERE plnty = wa_pro_orders-plnty ** AND plnnr = wa_pro_orders-plnnr ** AND plnkn = wa_plpo1-pvzkn ** AND datuv %LT= sy-datum ** ORDER BY datuv DESCENDING. ** EXIT. ** ENDSELECT. ** ENDIF. *** Default to work centre object if it's blank ** IF wa_plpo1-objty IS INITIAL. ** wa_plpo1-objty = lc_objty. ** ENDIF. *** Get the work centre activity info ** SELECT objty objid laset endda lanum begda lstar_ref lstar ** INTO TABLE i_crco_info ** FROM crco ** WHERE objty = wa_plpo1-objty ** AND objid = wa_plpo1-arbid ** AND laset = 1. *** order by primary key. ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** l_wcinfo = c_y. ** ENDIF. ** IF l_wcinfo = c_y. *** Use work centre info. ** LOOP AT i_crco_info INTO wa_crco_info ** WHERE begda %LT= wa_plpo1-datuv AND ** endda %GT= wa_plpo1-datuv. ** CHECK NOT wa_crco_info-lstar_ref IS INITIAL. ** CASE wa_crco_info-lanum. *** Only put the activity type in if there is a std value entered ** WHEN 1. ** IF wa_plpo1-vgw01 NE 0. ** wa_plpo1-lar01 = wa_crco_info-lstar. ** ENDIF. ** WHEN 2. ** IF wa_plpo1-vgw02 NE 0. ** wa_plpo1-lar02 = wa_crco_info-lstar. ** ENDIF. ** WHEN 3. ** IF wa_plpo1-vgw03 NE 0. ** wa_plpo1-lar03 = wa_crco_info-lstar. ** ENDIF. ** WHEN 4. ** IF wa_plpo1-vgw04 NE 0. ** wa_plpo1-lar04 = wa_crco_info-lstar. ** ENDIF. ** WHEN 5. ** IF wa_plpo1-vgw05 NE 0. ** wa_plpo1-lar05 = wa_crco_info-lstar. ** ENDIF. ** WHEN 6. ** IF wa_plpo1-vgw06 NE 0. ** wa_plpo1-lar06 = wa_crco_info-lstar. ** ENDIF. ** ENDCASE. ** ENDLOOP. ** ENDIF. ** ** ENDIF. ** **ENDFORM. " GET_STDS ***&-------------------------------------------------------------------- ** ***& Form get_confirmation_details ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM get_confirmation_details. ** ** DATA: l_last_ism01 TYPE ru_ismng, ** l_last_ism02 TYPE ru_ismng, ** l_last_ism03 TYPE ru_ismng, ** l_last_ism04 TYPE ru_ismng, ** l_last_ism05 TYPE ru_ismng, ** l_last_ism06 TYPE ru_ismng. ** ** LOOP AT i_ord_conf1 INTO wa_ord_conf1 ** WHERE rueck = wa_ordops-rueck. ** IF wa_ord_conf1-stokz IS INITIAL. ** l_last_ism01 = l_last_ism01 + wa_ord_conf1-ism01. ** l_last_ism02 = l_last_ism02 + wa_ord_conf1-ism02. ** l_last_ism03 = l_last_ism03 + wa_ord_conf1-ism03. ** l_last_ism04 = l_last_ism04 + wa_ord_conf1-ism04. ** l_last_ism05 = l_last_ism05 + wa_ord_conf1-ism05. ** l_last_ism06 = l_last_ism06 + wa_ord_conf1-ism06. ** ELSE. ** l_last_ism01 = l_last_ism01 - wa_ord_conf1-ism01. ** l_last_ism02 = l_last_ism02 - wa_ord_conf1-ism02. ** l_last_ism03 = l_last_ism03 - wa_ord_conf1-ism03. ** l_last_ism04 = l_last_ism04 - wa_ord_conf1-ism04. ** l_last_ism05 = l_last_ism05 - wa_ord_conf1-ism05. ** l_last_ism06 = l_last_ism06 - wa_ord_conf1-ism06. ** ENDIF. ** CLEAR : wa_ord_conf1. ** ENDLOOP. ** ** MOVE l_last_ism01 TO wa_ord_conf1-ism01. ** MOVE l_last_ism02 TO wa_ord_conf1-ism02. ** MOVE l_last_ism03 TO wa_ord_conf1-ism03. ** MOVE l_last_ism04 TO wa_ord_conf1-ism04. ** MOVE l_last_ism05 TO wa_ord_conf1-ism05. ** MOVE l_last_ism06 TO wa_ord_conf1-ism06. ** ** **ENDFORM. " get_confirmation_details ***&-------------------------------------------------------------------- *** ***& Form activity_cost_report ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GTP_I_PLPO1_LAR01 text *** --%GTP_I_ORD_CONF1_ISM01 text *** --%GTP_struct_activity_ACTI1 text *** --%GTP_ISM01_VAR text ***--------------------------------------------------------------------- *** **FORM activity_cost_report USING fp_p_i_plpo1_lar01 TYPE lstar ** fp_p_i_ord_conf1_ism01 TYPE ru_ismng ** fp_p_struct_activity_acti1 TYPE co_smng13 ** fp_p_ism01_var TYPE ru_ismng. ** DATA: l_ltext TYPE ktext, ** l_kokrs TYPE kokrs, ** l_kostl TYPE kostl, ** l_objnr TYPE j_objnr, ** l_tkg001 TYPE tkgxxx, ** l_tke001 TYPE tkexxx, ** l_std(8) TYPE p DECIMALS 2, ** l_act(8) TYPE p DECIMALS 2, ** l_var(8) TYPE p DECIMALS 2. ** ** SELECT ltext FROM cslt INTO l_ltext ** WHERE spras = sy-langu ** AND kokrs = p_kokrs ** AND lstar = fp_p_i_plpo1_lar01. ** ENDSELECT. ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** IF rb_fiscl IS INITIAL. ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** ** wa_nodestab-text = wa_ordops-vornr. ** wa_nodestab-tlength = c_4. ** ** wa_nodestab-text1 = l_ltext. ** wa_nodestab-tlength1 = c_44. ** ** MOVE fp_p_i_ord_conf1_ism01 TO wa_nodestab-text2(20). ** wa_nodestab-tlength2 = c_20. ** ** MOVE fp_p_struct_activity_acti1 TO wa_nodestab-text3(20). ** wa_nodestab-tlength3 = c_20. ** ** MOVE fp_p_ism01_var TO wa_nodestab-text4(20). ** wa_nodestab-tlength4 = c_20. ** ** ELSE. ** ** SELECT kokrs kostl ** FROM crco UP TO 1 ROWS ** INTO (l_kokrs, l_kostl) ** WHERE objty = c_a ** AND objid = wa_ordops-arbid ** AND lstar = fp_p_i_plpo1_lar01. ** ENDSELECT. ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** SELECT SINGLE objnr INTO l_objnr ** FROM cssl ** WHERE kokrs = l_kokrs ** AND kostl = l_kostl ** AND lstar = fp_p_i_plpo1_lar01 ** AND gjahr = sy-datum+0(4). ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** SELECT tkg001 tke001 INTO (l_tkg001, l_tke001) ** FROM cost ** WHERE objnr = l_objnr ** AND gjahr = sy-datum+0(4) ** AND versn = c_000. ** ENDSELECT. ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** CLEAR: l_act, l_std, l_var. **** The following were changed to take into account the unit **** price factor. ** l_act = ( fp_p_i_ord_conf1_ism01 * l_tkg001 ) / l_tke001. ** l_std = ( fp_p_struct_activity_acti1 * l_tkg001 ) / l_tke001. ** l_var = ( fp_p_ism01_var * l_tkg001 ) / l_tke001. ** ** CLEAR wa_nodestab. ** wa_nodestab-id = c_3_1. ** wa_nodestab-tlevel = c_4. ** wa_nodestab-parent = c_3_2. ** ** wa_nodestab-text = wa_ordops-vornr. ** wa_nodestab-tlength = c_4. ** ** wa_nodestab-text1 = l_ltext. ** wa_nodestab-tlength1 = c_44. ** ** MOVE l_act TO wa_nodestab-text2(20). ** wa_nodestab-tlength2 = c_20. ** ** MOVE l_std TO wa_nodestab-text3(20). ** wa_nodestab-tlength3 = c_20. ** ** MOVE l_var TO wa_nodestab-text4(20). ** wa_nodestab-tlength4 = c_20. ** ** ENDIF. ** ** IF flg_color = c_x. ** CLEAR flg_color. ** wa_nodestab-tcolor = c_3. ** wa_nodestab-tcolor1 = c_3. ** wa_nodestab-tcolor2 = c_3. ** wa_nodestab-tcolor3 = c_3. ** wa_nodestab-tcolor4 = c_3. ** ELSE. ** flg_color = c_x. ** wa_nodestab-tcolor = c_2. ** wa_nodestab-tcolor1 = c_2. ** wa_nodestab-tcolor2 = c_2. ** wa_nodestab-tcolor3 = c_2. ** wa_nodestab-tcolor4 = c_2. ** ENDIF. ** ** APPEND wa_nodestab TO i_nodestab. ** ** **ENDFORM. " activity_cost_report ***&-------------------------------------------------------------------- ** ***& Form uom_convert ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GTP_I_ORDMATS_MATNR text *** --%GTP_I_ORDMATS_MENGE text *** --%GTP_I_ORDMATS_AMEIN text *** --%GTP_L_AQTY text ***--------------------------------------------------------------------- **** FORM uom_convert USING fp_p_i_ordmats_matnr TYPE matnr ** fp_p_i_ordmats_menge TYPE menge_d ** fp_p_i_ordmats_amein TYPE meins ** fp_p_l_aqty TYPE menge_d. ** ***Added for WIRR ** DATA : struct_mara TYPE mara, ** struct_t006 TYPE t006. ** DATA: v_menge TYPE menge_d. ** ** CONSTANTS : c_halb TYPE mtart VALUE 'HALB', ** c_fert TYPE mtart VALUE 'FERT', ** c_kgm TYPE msehi VALUE 'KGM'. ** ****************************************** *** Need some clarification on this form * ****************************************** ** *** If the material is type FERT or HALB then use the net weight field *** from the material master. Otherwise use the alt uom for KG. ** SELECT SINGLE * FROM mara ***Added for WIRR ** INTO struct_mara ***Added for WIRR ** ** WHERE matnr = fp_p_i_ordmats_matnr. ** ** IF ( struct_mara-mtart = c_fert ** OR struct_mara-mtart = c_halb ) ** AND NOT ( struct_mara-ntgew IS INITIAL ). ****************MOD-002************************************************* * *** ** CLEAR: v_menge. ** IF struct_mara-gewei NE 'KG'. ** IF struct_mara-gewei = 'G'. ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = fp_p_i_ordmats_matnr ** i_in_me = fp_p_i_ordmats_amein ** i_out_me = struct_mara-meins ** i_menge = fp_p_i_ordmats_menge ** IMPORTING ** e_menge = v_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** fp_p_l_aqty = ** v_menge * ( struct_mara-ntgew / 1000 ). ** ENDIF. ** ENDIF. ** ELSE. ***************MOD-002************************************************** * *** ***************MOD-003************************************************** * ** IF struct_mara-meins NE fp_p_i_ordmats_amein. ** CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' ** EXPORTING ** i_matnr = fp_p_i_ordmats_matnr ** i_in_me = fp_p_i_ordmats_amein ** i_out_me = struct_mara-meins ** i_menge = fp_p_i_ordmats_menge ** IMPORTING ** e_menge = fp_p_i_ordmats_menge ** EXCEPTIONS ** error_in_application = 1 ** error = 2 ** OTHERS = 3. ** IF sy-subrc = 0. ** fp_p_l_aqty = fp_p_i_ordmats_menge * struct_mara-ntgew. ** ENDIF. ** ELSE. ** fp_p_l_aqty = fp_p_i_ordmats_menge * struct_mara-ntgew. ** ENDIF. **************MOD-003*************************************************** * ** ENDIF. ** ELSE. *** Get the isocode for kgm ** SELECT SINGLE * FROM t006 ** INTO struct_t006 ** WHERE msehi = c_kgm. ** ** IF fp_p_i_ordmats_amein = struct_t006-msehi. ** MOVE fp_p_i_ordmats_menge TO fp_p_l_aqty. ** ELSE. ** CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' ** EXPORTING ** kzmeinh = c_x ** input = fp_p_i_ordmats_menge ** matnr = fp_p_i_ordmats_matnr ** meinh = struct_t006-msehi ** IMPORTING ** output = fp_p_l_aqty ** EXCEPTIONS ** conversion_not_found = 1 ** input_invalid = 2 ** material_not_found = 3 ** meinh_not_found = 4 ** meins_missing = 5 ** no_meinh = 6 ** output_invalid = 7 ** overflow = 8 ** OTHERS = 9. ** ******************* ** IF sy-subrc NE 0. ** fp_p_l_aqty = 0. ** ENDIF. ** ** ******************* ** ENDIF. ** ENDIF. ** **ENDFORM. " uom_convert ***&-------------------------------------------------------------------- *** ***& Form STD_PERCENTAGE_CALC ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GTP_L_AQTY text *** --%GTP_L_SQTY text *** --%GTP_L_PCENT text ***--------------------------------------------------------------------- *** **FORM std_percentage_calc USING fp_l_aqty TYPE menge_d ** fp_l_sqty TYPE menge_d ** fp_l_pcent TYPE any. ** ** CONSTANTS: c_percent_p TYPE stprs VALUE '999.99', ** c_percent_n TYPE stprs VALUE '-999.99'. ** ** DATA: l_tcent(10) TYPE p DECIMALS 5, ** l_pecent(3) TYPE p DECIMALS 2. ** ** CLEAR: l_tcent, l_pecent. ** IF fp_l_aqty NE 0 AND fp_l_sqty NE 0. ** l_tcent = ( ( fp_l_sqty - fp_l_aqty ) / fp_l_sqty ) * c_100. ** ELSEIF fp_l_aqty EQ 0 AND fp_l_sqty EQ 0. ** l_tcent = 0. ** ELSE. ** MOVE c_100 TO l_tcent. ** ENDIF. ** IF l_tcent GT c_percent_p. ** MOVE c_percent_p TO l_pecent. ** ELSEIF l_tcent LT c_percent_n. ** MOVE c_percent_n TO l_pecent. ** ELSE. ** MOVE l_tcent TO l_pecent. ** ENDIF. **** Add a calculation to convert by-product percentages to the correct **** sign. ** IF fp_l_sqty %LT 0. ** l_pecent = l_pecent * -1. ** ENDIF. ** fp_l_pcent = l_pecent. ** **ENDFORM. " STD_PERCENTAGE_CALC ** ***&-------------------------------------------------------------------- *** ***& Form DISPLAY ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM display. ** ** CASE c_x. ** WHEN rb_summ. ** PERFORM display_summary_report. ** WHEN rb_detl. ** PERFORM display_detail_report. ** WHEN rb_phase. ** PERFORM display_phase_report. ** ENDCASE. ** PERFORM list_display. ** **ENDFORM. " DISPLAY ***&-------------------------------------------------------------------- *** ***& Form plant_effic ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GTP_I_PRO_ORDERS_RUECK text *** --%GTP_I_PRO_ORDERS_PLNTY text *** --%GTP_I_PRO_ORDERS_PLNNR text *** --%GTP_I_PRO_ORDERS_PLNKN text *** --%GTP_I_PRO_ORDERS_ZAEHL text *** %LT--P_V_plant_effic text ***--------------------------------------------------------------------- *** **FORM plant_effic USING fp_p_plnty TYPE plnty ** fp_p_plnnr TYPE plnnr ** fp_p_plnkn TYPE plnkn ** fp_p_zaehl TYPE cim_count ** CHANGING fp_v_plant_effic TYPE any. ** ** FIELD-SYMBOLS: %LTfs_ism%GT TYPE ANY, ** %LTfs_vgw%GT TYPE ANY. ** ** DATA: l_last_ism01 TYPE ru_ismng, ** l_last_ism02 TYPE ru_ismng, ** l_last_ism03 TYPE ru_ismng, ** l_last_ism04 TYPE ru_ismng, ** l_last_ism05 TYPE ru_ismng, ** l_last_ism06 TYPE ru_ismng, ** l_pqty TYPE menge_d, ** l_real_effic(8) TYPE p DECIMALS 4, ** l_should_effic(8) TYPE p DECIMALS 4. ** ** PERFORM get_stds_main USING fp_p_plnty fp_p_plnnr fp_p_plnkn ** fp_p_zaehl. ** ** ** LOOP AT i_ord_conf INTO wa_ord_conf ** WHERE rueck = wa_ordops-rueck. ** IF wa_ord_conf1-stokz IS INITIAL. ** l_last_ism01 = l_last_ism01 + wa_ord_conf-ism01. ** l_last_ism02 = l_last_ism02 + wa_ord_conf-ism02. ** l_last_ism03 = l_last_ism03 + wa_ord_conf-ism03. ** l_last_ism04 = l_last_ism04 + wa_ord_conf-ism04. ** l_last_ism05 = l_last_ism05 + wa_ord_conf-ism05. ** l_last_ism06 = l_last_ism06 + wa_ord_conf-ism06. ** ELSE. ** l_last_ism01 = l_last_ism01 - wa_ord_conf-ism01. ** l_last_ism02 = l_last_ism02 - wa_ord_conf-ism02. ** l_last_ism03 = l_last_ism03 - wa_ord_conf-ism03. ** l_last_ism04 = l_last_ism04 - wa_ord_conf-ism04. ** l_last_ism05 = l_last_ism05 - wa_ord_conf-ism05. ** l_last_ism06 = l_last_ism06 - wa_ord_conf-ism06. ** ENDIF. ** ** CLEAR : wa_ord_conf. ** ENDLOOP. ** ** MOVE l_last_ism01 TO wa_ord_conf-ism01. ** MOVE l_last_ism02 TO wa_ord_conf-ism02. ** MOVE l_last_ism03 TO wa_ord_conf-ism03. ** MOVE l_last_ism04 TO wa_ord_conf-ism04. ** MOVE l_last_ism05 TO wa_ord_conf-ism05. ** MOVE l_last_ism06 TO wa_ord_conf-ism06. ** ** ASSIGN c_0 TO %LTfs_ism%GT. ** ASSIGN c_0 TO %LTfs_vgw%GT. ** ** IF wa_plpo-lar01 EQ p_machs. ** ASSIGN wa_ord_conf-ism01 TO %LTfs_ism%GT. ** ASSIGN wa_plpo-vgw01 TO %LTfs_vgw%GT. ** ENDIF. ** IF wa_plpo-lar02 EQ p_machs. ** ASSIGN wa_ord_conf-ism02 TO %LTfs_ism%GT. ** ASSIGN wa_plpo-vgw02 TO %LTfs_vgw%GT. ** ENDIF. ** IF wa_plpo-lar03 EQ p_machs. ** ASSIGN wa_ord_conf-ism03 TO %LTfs_ism%GT. ** ASSIGN wa_plpo-vgw03 TO %LTfs_vgw%GT. ** ENDIF. ** IF wa_plpo-lar04 EQ p_machs. ** ASSIGN wa_ord_conf-ism04 TO %LTfs_ism%GT. ** ASSIGN wa_plpo-vgw04 TO %LTfs_vgw%GT. ** ENDIF. ** IF wa_plpo-lar05 EQ p_machs. ** ASSIGN wa_ord_conf-ism05 TO %LTfs_ism%GT. ** ASSIGN wa_plpo-vgw05 TO %LTfs_vgw%GT. ** ENDIF. ** IF wa_plpo-lar06 EQ p_machs. ** ASSIGN wa_ord_conf-ism06 TO %LTfs_ism%GT. ** ASSIGN wa_plpo-vgw06 TO %LTfs_vgw%GT. ** ENDIF. ** ** CLEAR l_pqty. ** IF NOT ( rb_prod IS INITIAL ). ** l_pqty = wa_pro_orders-menge. ** ELSE. ** l_pqty = wa_pro_orders-lmnga. ** ENDIF. ** ** IF %LTfs_ism%GT GT c_0. *** IF NOT %LTFS_ISM%GT IS INITIAL. ** l_real_effic = ( l_pqty / %LTfs_ism%GT ). ** ELSE. ** MOVE 0 TO l_real_effic. ** ENDIF. ** IF %LTfs_vgw%GT GT c_0. *** IF NOT %LTFS_VGW%GT IS INITIAL. ** l_should_effic = ( wa_plpo-bmsch / %LTfs_vgw%GT ). ** ELSE. ** MOVE 0 TO l_should_effic. ** ENDIF. ** IF l_should_effic GT c_0. ** v_plant_effic = ( l_real_effic / l_should_effic ) * c_100. ** ELSE. ** MOVE 0 TO fp_v_plant_effic. ** ENDIF. ** **ENDFORM. " plant_effic ***&-------------------------------------------------------------------- *** ***& Form get_stds_main ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GTP_PLNTY text *** --%GTP_PLNNR text *** --%GTP_PLNKN text *** --%GTP_ZAEHL text ***--------------------------------------------------------------------- *** **FORM get_stds_main USING fp_p_plnty TYPE plnty ** fp_p_plnnr TYPE plnnr ** fp_p_plnkn TYPE plnkn ** fp_p_zaehl TYPE cim_count. ** TYPES: BEGIN OF ty_crco_info, ** objty TYPE cr_objty, ** objid TYPE cr_objid, ** laset TYPE cr_laset, ** endda TYPE enddatum, ** lanum TYPE cr_lanum, ** begda TYPE begdatum, ** lstar_ref TYPE ap_kzref, ** lstar TYPE lstar, ** END OF ty_crco_info. ** ** DATA : i_crco_info TYPE STANDARD TABLE OF ty_crco_info, ** wa_crco_info TYPE ty_crco_info. ** DATA: l_wcinfo TYPE c, ** l_datuv TYPE plpo-datuv, ** lc_objty TYPE plpo-objty VALUE 'A'. ** ** READ TABLE i_plpo INTO wa_plpo WITH KEY plnty = fp_p_plnty ** plnnr = fp_p_plnnr ** plnkn = fp_p_plnkn ** zaehl = fp_p_zaehl. ** IF sy-subrc = 0. ** ** IF ( wa_plpo-lar01 IS INITIAL AND NOT ( wa_plpo-vgw01 = 0 ) ) OR ** ( wa_plpo-lar02 IS INITIAL AND NOT ( wa_plpo-vgw02 = 0 ) ) OR ** ( wa_plpo-lar03 IS INITIAL AND NOT ( wa_plpo-vgw03 = 0 ) ) OR ** ( wa_plpo-lar04 IS INITIAL AND NOT ( wa_plpo-vgw04 = 0 ) ) OR ** ( wa_plpo-lar05 IS INITIAL AND NOT ( wa_plpo-vgw05 = 0 ) ) OR ** ( wa_plpo-lar06 IS INITIAL AND NOT ( wa_plpo-vgw06 = 0 ) ). ** REFRESH: i_crco_info. *** Check the work centre is on the phase, if not go to the operation ** IF wa_plpo-arbid IS INITIAL. ** SELECT datuv arbid objty ** INTO (l_datuv,wa_plpo-arbid,wa_plpo-objty) ** FROM plpo ** WHERE plnty = fp_p_plnty ** AND plnnr = fp_p_plnnr ** AND plnkn = wa_plpo-pvzkn ** AND datuv %LT= sy-datum ** ORDER BY datuv DESCENDING. ** EXIT. ** ENDSELECT. ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** ENDIF. *** Default to work centre object if it's blank ** IF wa_plpo-objty IS INITIAL. ** wa_plpo-objty = lc_objty. ** ENDIF. *** Get the work centre activity info ** SELECT objty objid laset endda lanum begda lstar_ref lstar ** INTO TABLE i_crco_info ** FROM crco ** WHERE objty = wa_plpo-objty ** AND objid = wa_plpo-arbid ** AND laset = 1. *** order by primary key. ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** l_wcinfo = c_y. ** ENDIF. ** IF l_wcinfo = c_y. *** Use work centre info. ** LOOP AT i_crco_info INTO wa_crco_info ** WHERE begda %LT= wa_plpo-datuv AND ** endda %GT= wa_plpo-datuv. ** CHECK NOT wa_crco_info-lstar_ref IS INITIAL. ** CASE wa_crco_info-lanum. *** Only put the activity type in if there is a std value entered ** WHEN 1. ** IF wa_plpo-vgw01 NE 0. ** wa_plpo-lar01 = wa_crco_info-lstar. ** ENDIF. ** WHEN 2. ** IF wa_plpo-vgw02 NE 0. ** wa_plpo-lar02 = wa_crco_info-lstar. ** ENDIF. ** WHEN 3. ** IF wa_plpo-vgw03 NE 0. ** wa_plpo-lar03 = wa_crco_info-lstar. ** ENDIF. ** WHEN 4. ** IF wa_plpo-vgw04 NE 0. ** wa_plpo-lar04 = wa_crco_info-lstar. ** ENDIF. ** WHEN 5. ** IF wa_plpo-vgw05 NE 0. ** wa_plpo-lar05 = wa_crco_info-lstar. ** ENDIF. ** WHEN 6. ** IF wa_plpo-vgw06 NE 0. ** wa_plpo-lar06 = wa_crco_info-lstar. ** ENDIF. ** ENDCASE. ** ENDLOOP. ** ENDIF. ** ** ENDIF. ** **ENDFORM. " get_stds_main ***&-------------------------------------------------------------------- *** ***& Form get_confirmation_qty ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- ** *** --%GTP_I_ORDOPS_RUECK text *** --%GTP_I_PRO_ORDERS_PLNBEZ text *** --%GTP_L_PRDQTY text *** --%GTP_L_CFUOM text ***--------------------------------------------------------------------- *** **FORM get_confirmation_qty USING fp_p_i_ordops_rueck TYPE co_rueck ** fp_p_l_prdqty TYPE menge_d ** fp_p_l_cfuom TYPE meins. ** DATA: l_lmnga TYPE ru_lmnga, ** l_gmnga TYPE ru_gmnga. ** *************MOD-002*************************************** ** SELECT aufnr rueck gmnga lmnga gmein meinh ** meilr stokz rueck_mst ** FROM afru INTO TABLE itab_afru ** FOR ALL ENTRIES IN i_pro_orders ** WHERE aufnr = i_pro_orders-aufnr. ** ** SORT itab_afru BY aufnr rueck . *************MOD-002**************************************** ** IF NOT itab_afru[] IS INITIAL. ** CLEAR: l_lmnga, l_gmnga. ** LOOP AT itab_afru INTO wa_afru WHERE rueck = fp_p_i_ordops_rueck. *** IF ( wa_afru-rueck_mst IS INITIAL ) AND *** ( wa_afru-lmnga NE 0 ) AND *** NOT ( wa_afru-meilr IS INITIAL ). ** IF wa_afru-stokz IS INITIAL. ** l_lmnga = l_lmnga + wa_afru-lmnga. ** l_gmnga = l_gmnga + wa_afru-gmnga. ** ELSE. ** l_lmnga = l_lmnga - wa_afru-lmnga. ** l_gmnga = l_gmnga - wa_afru-gmnga. ** ENDIF. *** ENDIF. ** ENDLOOP. ** IF wa_afru-meinh NE wa_afru-gmein. ** fp_p_l_prdqty = l_lmnga. ** fp_p_l_cfuom = wa_afru-gmein. ** ELSE. ** fp_p_l_prdqty = l_gmnga. ** fp_p_l_cfuom = wa_afru-meinh. ** ENDIF. ** ENDIF. **ENDFORM. " get_confirmation_qty ***&-------------------------------------------------------------------- *** ***& Form MATERIAL_HEADER ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GT p1 text *** %LT-- p2 text ***--------------------------------------------------------------------- *** **FORM material_header. ** ** wa_nodestab-text = 'Material'(058). ** wa_nodestab-tlength = c_22. ** wa_nodestab-tcolor = c_4. ** wa_nodestab-propfaw = c_x. ** ** wa_nodestab-text1 = 'Description'(059). ** wa_nodestab-tlength1 = c_30. ** wa_nodestab-tcolor1 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Actual Usage'(040) v_waers ** INTO wa_nodestab-text2 SEPARATED BY space. ** ELSE. ** wa_nodestab-text2 = 'Actual Usage'(040). ** ENDIF. ** wa_nodestab-tlength2 = c_20. ** wa_nodestab-tcolor2 = c_4. ** ** IF rb_fiscl = c_x. ** CONCATENATE 'Standard Usage'(041) v_waers ** INTO wa_nodestab-text3 SEPARATED BY space. ** ELSE. ** wa_nodestab-text3 = 'Standard Usage'(041). ** ENDIF. ** wa_nodestab-tlength3 = c_20. ** wa_nodestab-tcolor3 = c_4. ** ** wa_nodestab-text4 = 'Var'(060). ** wa_nodestab-tlength4 = c_19. ** wa_nodestab-tcolor4 = c_4. ** *** IF rb_fiscl = c_x. ** CONCATENATE 'Variance'(061) v_waers ** INTO wa_nodestab-text5 SEPARATED BY space. *** ELSE. *** wa_nodestab-text5 = 'Variance'(061). *** ENDIF. ** wa_nodestab-tlength5 = c_15. ** wa_nodestab-tcolor5 = c_4. ** ** APPEND wa_nodestab TO i_nodestab. ** CLEAR : wa_nodestab. **ENDFORM. " MATERIAL_HEADER ***&-------------------------------------------------------------------- *** ***& Form sum_activity_costs ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GTP_I_PLPO1_LAR01 text *** --%GTP_I_ORD_CONF1_ISM01 text *** --%GTP_struct_activity_ACTI1 text *** --%GTP_ISM01_VAR text ***--------------------------------------------------------------------- *** **FORM sum_activity_costs USING fp_p_i_plpo1_lar01 TYPE lstar ** fp_p_i_ord_conf1_ism01 TYPE ru_ismng **fp_p_struct_activity_acti1 TYPE co_smng13 **fp_p_ism01_var TYPE ru_ismng. ** DATA: l_kokrs TYPE kokrs, ** l_kostl TYPE kostl, ** l_objnr TYPE j_objnr, ** l_tkg001 TYPE tkgxxx, ** l_tke001 TYPE tkexxx, ** l_std(8) TYPE p DECIMALS 2, ** l_act(8) TYPE p DECIMALS 2, ** l_var(8) TYPE p DECIMALS 2. ** ** SELECT kokrs kostl ** FROM crco UP TO 1 ROWS ** INTO (l_kokrs, l_kostl) ** WHERE objty = c_objtyp ** AND objid = wa_ordops-arbid ** AND lstar = fp_p_i_plpo1_lar01. ** ENDSELECT. ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** SELECT SINGLE objnr INTO l_objnr ** FROM cssl ** WHERE kokrs = l_kokrs ** AND kostl = l_kostl ** AND lstar = fp_p_i_plpo1_lar01 ** AND gjahr = sy-datum+0(4). ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** SELECT tkg001 tke001 INTO (l_tkg001, l_tke001) ** FROM cost ** WHERE objnr = l_objnr ** AND gjahr = sy-datum+0(4) ** AND versn = c_000. ** ENDSELECT. ** ** IF sy-subrc = 0. ***Not required to handle ** ENDIF. ** ** CLEAR: l_act, l_std, l_var. ** l_act = ( fp_p_i_ord_conf1_ism01 * l_tkg001 ) / l_tke001. ** l_std = ( fp_p_struct_activity_acti1 * l_tkg001 ) / l_tke001. ** l_var = ( fp_p_ism01_var * l_tkg001 ) / l_tke001. ** ** CLEAR wa_sum_activity. ** ** LOOP AT i_sum_activity INTO wa_sum_activity ** WHERE lar = fp_p_i_plpo1_lar01. ** wa_sum_activity-afru_ism = wa_sum_activity-afru_ism ** + fp_p_i_ord_conf1_ism01. ** wa_sum_activity-ism_should = wa_sum_activity-ism_should ** + fp_p_struct_activity_acti1. ** wa_sum_activity-ism_var = wa_sum_activity-ism_var ** + fp_p_ism01_var. ** wa_sum_activity-coact = wa_sum_activity-coact + l_act. ** wa_sum_activity-costd = wa_sum_activity-costd + l_std. ** wa_sum_activity-covar = wa_sum_activity-covar + l_var. ** MODIFY i_sum_activity FROM wa_sum_activity. ** CLEAR : wa_sum_activity. ** ENDLOOP. ** ** IF sy-subrc NE 0. ** MOVE fp_p_i_plpo1_lar01 TO wa_sum_activity-lar. ** MOVE fp_p_i_ord_conf1_ism01 TO wa_sum_activity-afru_ism. ** MOVE fp_p_struct_activity_acti1 TO wa_sum_activity-ism_should. ** MOVE fp_p_ism01_var TO wa_sum_activity-ism_var. ** wa_sum_activity-coact = l_act. ** wa_sum_activity-costd = l_std. ** wa_sum_activity-covar = l_var. ** APPEND wa_sum_activity TO i_sum_activity. ** CLEAR : wa_sum_activity. ** ENDIF. ** **ENDFORM. " sum_activity_costs ***&-------------------------------------------------------------------- *** ***& Form SUMMARY_MATERIALS ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** ***--------------------------------------------------------------------- *** **FORM summary_materials. ** *** Sum Ingredient Tots ** CLEAR wa_sum_ordmats. ** LOOP AT i_sum_ordmats INTO wa_sum_ordmats ** WHERE matnr = wa_ordmats-matnr. ** wa_sum_ordmats-num = wa_sum_ordmats-num + c_1. ** wa_sum_ordmats-menge = wa_sum_ordmats-menge + wa_ordmats-menge. ** wa_sum_ordmats-stdqy = wa_sum_ordmats-stdqy + wa_ordmats-stdqy. ** wa_sum_ordmats-zloss = wa_sum_ordmats-zloss + wa_ordmats-zloss. ** wa_sum_ordmats-amein = wa_ordmats-amein. ** wa_sum_ordmats-meins = wa_ordmats-meins. ** wa_sum_ordmats-stprs = wa_ordmats-stprs. ** wa_sum_ordmats-peinh = wa_ordmats-peinh. ** MODIFY i_sum_ordmats FROM wa_sum_ordmats. ** CLEAR : wa_sum_ordmats. ** ENDLOOP. ** IF sy-subrc NE 0. ** MOVE wa_ordmats-matnr TO wa_sum_ordmats-matnr. ** MOVE 1 TO wa_sum_ordmats-num. ** MOVE wa_ordmats-menge TO wa_sum_ordmats-menge. ** MOVE wa_ordmats-stdqy TO wa_sum_ordmats-stdqy. ** MOVE wa_ordmats-zloss TO wa_sum_ordmats-zloss. ** wa_sum_ordmats-amein = wa_ordmats-amein. ** wa_sum_ordmats-meins = wa_ordmats-meins. ** wa_sum_ordmats-stprs = wa_ordmats-stprs. ** wa_sum_ordmats-peinh = wa_ordmats-peinh. ** APPEND wa_sum_ordmats TO i_sum_ordmats. ** CLEAR : wa_sum_ordmats. ** ENDIF. ** **ENDFORM. " SUMMARY_MATERIALS ***&-------------------------------------------------------------------- *** ***& Form get_confirmation_qty_new ***&-------------------------------------------------------------------- *** *** text ***--------------------------------------------------------------------- *** *** --%GTP_WA_PRO_ORDERS_RUECK text *** --%GTP_WA_PRO_ORDERS_PLNBEZ text *** --%GTP_WA_PRO_ORDERS_LMNGA text *** --%GTP_WA_PRO_ORDERS_CFUOM text ***--------------------------------------------------------------------- *** **FORM get_confirmation_qty_new USING p_lmnga TYPE ru_lmnga ** p_cfuom TYPE meins. ** ***************************************************** ***USING *** P_RUECK TYPE CO_RUECK *** p_aufnr type aufnr *** P_LMNGA TYPE RU_LMNGA *** P_CFUOM TYPE MEINS *** p_aufpl type CO_AUFPL *** p_vornr type vornr *** p_aplzl type CO_APLZL. ***************************************************** ** DATA: last_lmnga LIKE afru-lmnga, ** last_gmnga TYPE afru-gmnga. ** ** CLEAR: last_lmnga, last_gmnga. ** CLEAR:i_afru, wa_afru. ** ** ** ** *** Check this record. If there is no link to another confirmation and *** a quantity has been confirmed and it is a milestone ** confirmation *** then we want to select all of the confirmations for . ** LOOP AT i_afru1 INTO wa_afru1. *** check WA_afru-rueck_mst is initial. ** CHECK wa_afru1-lmnga NE 0. *** check not ( WA_afru-meilr is initial ). ** IF wa_afru1-stokz IS INITIAL. ** last_lmnga = last_lmnga + wa_afru1-lmnga. ** last_gmnga = last_gmnga + wa_afru1-gmnga. ** ELSE. ** last_lmnga = last_lmnga - wa_afru1-lmnga. ** last_gmnga = last_gmnga - wa_afru1-gmnga. ** ENDIF. ** ENDLOOP. ** *** use order unit quantity if necessary ** IF wa_afru1-meinh NE wa_afru1-gmein. *** afru-gmein is order unit of measure ** MOVE last_gmnga TO p_lmnga. ** p_cfuom = wa_afru1-gmein. ** ELSE. *** use normal quantity ** MOVE last_lmnga TO p_lmnga. ** p_cfuom = wa_afru1-meinh. ** ENDIF. ** **ENDFORM. " get_confirmation_qty_new ***** ***** END OF MOD-101 ***** * **&--------------------------------------------------------------------- * **& Form USER_COMMNAD **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM user_command TABLES fp_i_nodestab STRUCTURE snodetext"#EC * * USING fp_l_ucomm TYPE any * CHANGING fp_l_exit TYPE any * fp_l_list_refresh TYPE any. "#EC * * * DATA : v_aufnr TYPE aufnr, * l_arbpl TYPE arbpl, "MOD-101+ * l_txt(14) TYPE c. "MOD-101+ * * DATA: PROGNAME LIKE SY-REPID, * SELECTED TYPE C, * EXIT_SAV TYPE C, * LIST_REFRESH_SAV TYPE C. * * * fp_l_list_refresh = c_m. * * CASE fp_l_ucomm. **** **** BEGIN OF MOD-101 **** * WHEN c_trpi. * CLEAR : v_aufnr , l_txt. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE l_txt. * * IF fp_i_nodestab-text1 = c_text1 AND NOT l_txt IS INITIAL. * CASE fp_i_nodestab-tlevel. * WHEN c_tlevel_2. * v_aufnr = l_txt(12). * SUBMIT zprocessord WITH s_aufnr-low = v_aufnr * AND RETURN. ** SUBMIT zprocessord WITH p_aufnr = v_aufnr ** AND RETURN. * * WHEN c_tlevel_3. * l_arbpl = l_txt(8). * * SET PARAMETER ID 'WRK' FIELD p_werks. * SET PARAMETER ID 'AGR' FIELD l_arbpl. * * CALL TRANSACTION 'CRC3' AND SKIP FIRST SCREEN. * WHEN c_tlevel_4. * l_arbpl = l_txt+6(8). * * SET PARAMETER ID 'WRK' FIELD p_werks. * SET PARAMETER ID 'AGR' FIELD l_arbpl. * * CALL TRANSACTION 'CRC3' AND SKIP FIRST SCREEN. * ENDCASE. * * ELSEIF fp_i_nodestab-text1 %LT%GT c_plus AND fp_i_nodestab-text1 %LT%GT * c_minus AND * sy-title %LT%GT 'Process Order Variance - Summary Report'(069) . **Please select order number! * MESSAGE s063. * ENDIF. * **** TRSL ** CLEAR : v_aufnr , l_txt. ** GET CURSOR FIELD fp_i_nodestab-text1 VALUE l_txt. ** IF fp_i_nodestab-text1 = c_text1 AND NOT l_txt IS INITIAL. ** CASE fp_i_nodestab-tlevel. ** WHEN c_tlevel_2. ** v_aufnr = l_txt. ** call function 'RS_TREE_EXPAND' ** exporting ** node_id = nodelist-id ** list_scroll = 'X' ** exceptions ** others. ** WHEN c_tlevel_3. ** l_arbpl = l_txt(8). ** call function 'RS_TREE_EXPAND' ** exporting ** node_id = nodelist-id ** list_scroll = 'X' ** exceptions ** others. ** ** WHEN c_tlevel_4. ** l_arbpl = l_txt+5(8). ** call function 'RS_TREE_EXPAND' ** exporting ** node_id = nodelist-id ** list_scroll = 'X' ** exceptions ** others. ** ** ENDCASE. ** ** when 'NODE'. ** if selname = 'MINUS' or selname = 'MINUSLINE'. ** call function 'RS_TREE_COMPRESS' ** exporting ** node_id = nodelist-id ** exceptions ** others. ** elseif selname = 'PLUS' or selname = 'PLUSLINE'. ** call function 'RS_TREE_EXPAND' ** exporting ** node_id = nodelist-id ** list_scroll = 'X' ** exceptions ** others. ** else. ** perform uc_prepare_nodetab. ** perform uc_user_callback. ** if exit ne space. ** exit_from_screen. ** endif. ** endif. ** ENDCASE. ** ** ELSEIF fp_i_nodestab-text1 %LT%GT c_plus AND fp_i_nodestab-text1 %LT%GT ** c_minus AND ** sy-title %LT%GT 'Process Order Variance - Summary Report'(069). ***Please select order number! ** MESSAGE s063. ** ENDIF. * * WHEN c_trde. * CLEAR : v_aufnr , l_txt. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE l_txt. * * IF fp_i_nodestab-text1 = c_text1 AND NOT l_txt IS INITIAL. * CASE fp_i_nodestab-tlevel. * WHEN c_tlevel_2. * v_aufnr = l_txt(12). ** SUBMIT zprocessord WITH p_aufnr = v_aufnr ** AND RETURN. * SUBMIT zprocessord WITH s_aufnr-low = v_aufnr * AND RETURN. * * WHEN c_tlevel_3. * l_arbpl = l_txt(8). * * SET PARAMETER ID 'WRK' FIELD p_werks. * SET PARAMETER ID 'AGR' FIELD l_arbpl. * * CALL TRANSACTION 'CRC3' AND SKIP FIRST SCREEN. * WHEN c_tlevel_4. * l_arbpl = l_txt+5(8). * * SET PARAMETER ID 'WRK' FIELD p_werks. * SET PARAMETER ID 'AGR' FIELD l_arbpl. * * CALL TRANSACTION 'CRC3' AND SKIP FIRST SCREEN. * ENDCASE. * * ELSEIF fp_i_nodestab-text1 %LT%GT c_plus AND fp_i_nodestab-text1 %LT%GT * c_minus. **Please select order number! * MESSAGE s063. * ENDIF. * * WHEN c_trpi. * CLEAR : v_aufnr , l_txt. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE l_txt. * * CLEAR v_aufnr. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE v_aufnr. * * IF fp_i_nodestab-text1 = c_text1 "'NODELIST-TEXT1' * AND NOT v_aufnr IS INITIAL * AND fp_i_nodestab-tlevel = c_tlevel_2. * SUBMIT /eur/rgbptr_order_vari_detail * WITH p_aufnr = v_aufnr AND RETURN. * ELSEIF fp_i_nodestab-text1 %LT%GT c_plus * AND fp_i_nodestab-text1 %LT%GT c_minus * AND sy-title %LT%GT 'Process Order Variance - Summary Report'(069). **Please select order number! * MESSAGE s063. * ENDIF. * * WHEN c_trde. * CLEAR v_aufnr. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE v_aufnr. * IF fp_i_nodestab-text1 = c_text1 "'NODELIST-TEXT1' * AND NOT v_aufnr IS INITIAL * AND fp_i_nodestab-tlevel = c_tlevel_2. * SUBMIT /eur/rgbptr_order_vari_detail * WITH p_aufnr = v_aufnr AND RETURN. * ELSEIF fp_i_nodestab-text1 %LT%GT c_plus * AND fp_i_nodestab-text1 %LT%GT c_minus. **Please select order number! * MESSAGE s063. * ENDIF. * * WHEN c_detl. * CLEAR: rb_summ, rb_phase. * rb_detl = c_x. * PERFORM output. * * WHEN c_phas. * CLEAR: rb_detl, rb_summ. * rb_phase = c_x. * PERFORM output. * **** **** END OF MOD-101 **** * WHEN c_sums. * CLEAR: rb_detl, rb_phase. * rb_summ = c_x. ** fp_l_exit = c_x. "MOD-101- ** PERFORM display. "MOD-101- * PERFORM output. "MOD-101+ * * WHEN c_qty. ** Display quantities * rb_quant = c_x. * rb_fiscl = space. * ** fp_l_exit = c_x. "MOD-101- ** PERFORM display. "MOD-101- * PERFORM output. "MOD-101+ * * WHEN c_fisc. ** Display fiscal values * rb_quant = space. * rb_fiscl = c_x. * ** fp_l_exit = c_x. "MOD-101- ** PERFORM display. "MOD-101- * PERFORM output. "MOD-101+ * * WHEN c_kgm. ** Display in KGMs * rb_order = space. * rb_kgm = c_x. * ** fp_l_exit = c_x. "MOD-101- ** PERFORM display. "MOD-101- * PERFORM output. "MOD-101+ * * WHEN c_ordu. ** Display order units * rb_kgm = space. * rb_order = c_x. * ** fp_l_exit = c_x. "MOD-101- ** PERFORM display. "MOD-101- * PERFORM output. "MOD-101+ * * WHEN c_zero. ** Display zero loss values * rb_stdpl = space. * rb_zloss = c_x. * ** fp_l_exit = c_x. "MOD-101- ** PERFORM display. "MOD-101- * PERFORM output. "MOD-101+ * * WHEN c_std. ** Display standard recipe values * rb_zloss = space. * rb_stdpl = c_x. * ** fp_l_exit = c_x. "MOD-101- ** PERFORM display. "MOD-101- * PERFORM output. "MOD-101+ * * WHEN c_trep. * IF fp_i_nodestab-child IS INITIAL. **Invalid row selected! * MESSAGE s064. * ENDIF. * * WHEN c_trcm. * IF fp_i_nodestab-child IS INITIAL. **Invalid row selected! * MESSAGE s064. * ENDIF. * * WHEN 'AUAN'. * SET PARAMETER ID 'ANR' FIELD s_aufnr. * CALL TRANSACTION 'COR3' AND SKIP FIRST SCREEN. * WHEN 'AUAE'. * SET PARAMETER ID 'ANR' FIELD s_aufnr. * CALL TRANSACTION 'COR2' AND SKIP FIRST SCREEN. * WHEN c_exit. * LEAVE PROGRAM. * ENDCASE. * ***"BEGIN OF MOD-101 ** IF sy-ucomm = c_back AND fp_l_ucomm = c_sums. ** CLEAR: rb_summ, rb_phase. ** rb_detl = c_x. ** fp_l_list_refresh = c_m. ** PERFORM list_display. ** fp_l_exit = c_x. ** ENDIF. ***"END OF MOD-101 *ENDFORM. "user_command * **&--------------------------------------------------------------------- * **& Form LIST_DISPLAY **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM list_display. **" %GT%GT%GT MOD-101- * CALL FUNCTION 'RS_TREE_CONSTRUCT' * TABLES * nodetab = i_nodestab * EXCEPTIONS * tree_failure = 1 * id_not_found = 2 * wrong_relationship = 3 * OTHERS = 4. * IF sy-subrc %LT%GT 0. * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. * ENDIF. **" %LT%LT%LT MOD-101- * * CALL FUNCTION 'RS_TREE_LIST_DISPLAY' * EXPORTING ** callback_program = c_prog "MOD-101- * callback_program = sy-repid "MOD-101+ * callback_user_command = 'USER_COMMAND'. *ENDFORM. " LIST_DISPLAY * **&--------------------------------------------------------------------- * **& Form inform_user_of_progress **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM inform_user_of_progress. ** Update Gui * CONDENSE v_output_text. * CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' * EXPORTING * text = v_output_text. *ENDFORM. " inform_user_of_progress * **&--------------------------------------------------------------------- * **& Form pfstatus **&--------------------------------------------------------------------- * ** text **---------------------------------------------------------------------- * *FORM pfstatus. * ** Build table of excluded functions for buttons in report * REFRESH i_fcode. * ** Not summary report * IF NOT ( rb_summ IS INITIAL ). " MOD-101- * MOVE c_trde TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. * MOVE c_sums TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * CLEAR wa_fcode. **** BEGIN OF MOD-101 * ELSEIF rb_detl = c_x. * MOVE c_trde TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. * * MOVE c_detl TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * * CLEAR wa_fcode. * * ELSEIF rb_phase = c_x. * MOVE c_trde TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. * * MOVE c_phas TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * * CLEAR wa_fcode. **** END OF MOD-101 * ENDIF. * ** Fiscal / quantity * IF rb_fiscl IS INITIAL. * MOVE c_qty TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * CLEAR wa_fcode. * ELSE. * MOVE c_fisc TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * CLEAR wa_fcode. * *****Begin of MOD-001 ** MOVE c_ordu TO wa_fcode-fcode. ** APPEND wa_fcode TO i_fcode. ** CLEAR wa_fcode. ** MOVE c_kgm TO wa_fcode-fcode. ** APPEND wa_fcode TO i_fcode. ** CLEAR wa_fcode. *****End of MOD-001 * ENDIF. * ** KGM / Order uom * IF rb_kgm IS INITIAL. * MOVE c_ordu TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * CLEAR wa_fcode. * ELSE. * MOVE c_kgm TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * CLEAR wa_fcode. * ENDIF. * ** Zero loss / std values * IF rb_zloss IS INITIAL. * MOVE c_std TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * CLEAR wa_fcode. * ELSE. * MOVE c_zero TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. * ENDIF. *ENDFORM. " pfstatus * **=========================================================* ******BEGIN OF MOD-003. **&--------------------------------------------------------------------- * **& Form validate_stlan **&--------------------------------------------------------------------- * ** subroutine to validate BOM usage **---------------------------------------------------------------------- * *FORM validate_stlan . * DATA: l_usage TYPE stlan. ** IF p_usage IS INITIAL. "MOD-101- ** MESSAGE e030. "Plese enter BOM usage "MOD-101- ** ELSE. "MOD-101- * SELECT stlan INTO l_usage "get BOM usage * FROM t416 UP TO 1 ROWS * WHERE stlan = p_usage. * ENDSELECT. * * IF sy-subrc NE 0. ** MESSAGE e030. "BOM usage doesn't exist. "MOD-101- * MESSAGE e030 WITH p_usage. "MOD-101+ * ENDIF. ** ENDIF. "MOD-101- *ENDFORM. " validate_stlan * **&--------------------------------------------------------------------- * **& Form validate_steus **&--------------------------------------------------------------------- * ** subroutine to validate control key **---------------------------------------------------------------------- * *FORM validate_steus . **** BEGIN OF MOD-101 * r_steus = s_steus[]. **"Get control key from T430 * SELECT plnaw * steus * kalkz * FROM t430 * INTO TABLE i_ckey * WHERE steus IN s_steus * AND kalkz EQ c_x. * IF sy-subrc NE 0. * MESSAGE e054. "enter valid control key. * ENDIF. * ***"Get control key from T430 ** DATA: l_steus TYPE steus. ** ***"if control key is not entered ** IF s_steus[] IS INITIAL. ** MESSAGE e071. "Please enter control key. ** ELSE. ***"get control key ** SELECT steus INTO l_steus ** FROM t430 ** UP TO 1 ROWS ** WHERE steus IN s_steus. ** ENDSELECT. ** IF sy-subrc NE 0. ** MESSAGE e054. "enter valid control key. ** ENDIF. ** ENDIF. **** END OF MOD-101 *ENDFORM. " validate_steus * **&--------------------------------------------------------------------- * **& Form validate_lstar **&--------------------------------------------------------------------- * ** subroutine to validate machine hours indicator **---------------------------------------------------------------------- * **form validate_lstar . **data:l_lstar tyep lstar. ** **endform. " validate_lstar ******END OF MOD-003. * **** BEGIN OF MOD-101 **&--------------------------------------------------------------------* **& Form tree_rebuild **&--------------------------------------------------------------------* ** build / rebuild tree **---------------------------------------------------------------------* *FORM tree_rebuild. * CALL FUNCTION 'RS_TREE_CONSTRUCT' * TABLES * nodetab = i_nodestab * EXCEPTIONS * tree_failure = 1 * id_not_found = 2 * wrong_relationship = 3 * OTHERS = 4. * * IF sy-subrc %LT%GT 0. * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. * ENDIF. *ENDFORM. "tree_rebuild * **&--------------------------------------------------------------------* **& Form conv_to_from_base **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM conv_to_from_base USING fp_kzmeinh * fp_matnr * fp_input * fp_meinh * fp_meins * CHANGING fp_output * fp_rc. * CLEAR : fp_rc , fp_output. * CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' * EXPORTING * input = fp_input * kzmeinh = fp_kzmeinh * matnr = fp_matnr * meinh = fp_meinh * meins = fp_meins ** CHARGE = ** WERKS = * IMPORTING * output = fp_output ** UMREN = ** UMREZ = * EXCEPTIONS * conversion_not_found = 1 * input_invalid = 2 * material_not_found = 3 * meinh_not_found = 4 * meins_missing = 5 * no_meinh = 6 * output_invalid = 7 * overflow = 8 * OTHERS = 9. * IF sy-subrc %LT%GT 0. * fp_rc = 'X'. * ENDIF. *ENDFORM. "conv_to_from_base * **&--------------------------------------------------------------------* **& Form convert_to_kg **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM convert_to_kg USING fp_matnr TYPE matnr * fp_bsuom TYPE meins * fp_gewei TYPE gewei * fp_ntgew TYPE ntgew * fp_qtyin TYPE menge_d * CHANGING fp_qtout TYPE menge_d * fp_rc. * DATA : l_out TYPE menge_d. * * CLEAR : fp_rc , fp_qtout. * * l_out = fp_qtyin * fp_ntgew. * * IF fp_gewei %LT%GT 'KG'. * CALL FUNCTION 'UNIT_CONVERSION_SIMPLE' * EXPORTING * input = l_out * unit_in = fp_gewei * unit_out = 'KG' * IMPORTING * output = fp_qtout * EXCEPTIONS * conversion_not_found = 1 * division_by_zero = 2 * input_invalid = 3 * output_invalid = 4 * overflow = 5 * type_invalid = 6 * units_missing = 7 * unit_in_not_found = 8 * unit_out_not_found = 9 * OTHERS = 10. * IF sy-subrc %LT%GT 0. * fp_rc = 'X'. * ENDIF. * * ELSE. * fp_qtout = l_out. * ENDIF. *ENDFORM. "convert_to_kg * **&--------------------------------------------------------------------* **& Form do_mat_calc **&--------------------------------------------------------------------* ** text **---------------------------------------------------------------------* *FORM do_mat_calc CHANGING fp_h_mat TYPE ty_hier_mat * fp_aqty TYPE char18 * fp_matuom TYPE meins * fp_sqty TYPE char18 * fp_stduom TYPE meins * fp_svar TYPE char18 * fp_varuom TYPE meins * fp_svarp TYPE char18 * fp_amenge TYPE menge_d * fp_smenge TYPE menge_d * fp_astprs TYPE ty_stprs * fp_sstprs TYPE ty_stprs. * * DATA : l_aqty TYPE char18, * l_sqty TYPE char18, * l_svar TYPE char18, * l_svarp TYPE char18, * * l_matuom TYPE meins, * l_stduom TYPE meins, * l_varuom TYPE meins, * * l_amenge TYPE menge_d, * l_smenge TYPE menge_d, * l_menge TYPE menge_d, * l_mvar TYPE menge_d, * * l_astprs TYPE ty_stprs, * l_sstprs TYPE ty_stprs, * l_vstprs TYPE ty_stprs, * * l_wa_h_mat TYPE ty_hier_mat, * * l_fact_a TYPE menge_d VALUE 1, * l_fact_s TYPE menge_d VALUE 1. * * CLEAR : l_smenge, l_amenge, l_astprs, l_sstprs, l_stduom, l_matuom, * l_varuom, l_aqty , l_sqty , l_svar , l_svarp . * * l_wa_h_mat = fp_h_mat. ** Standard planned or zero loss planned * IF rb_zloss IS INITIAL. * l_wa_h_mat-stdusg = l_wa_h_mat-stdusgs. * * ELSE. * l_wa_h_mat-stdusg = l_wa_h_mat-stdusgz. * ENDIF. * * l_smenge = fp_smenge + l_wa_h_mat-stdusg. * l_amenge = l_wa_h_mat-actusg. * * IF l_wa_h_mat-bsuom = 'EA' OR l_wa_h_mat-bsuom = 'CS'. ** Begin of MOD-002++ ** l_smenge = CEIL( l_wa_h_mat-stdusg ). ** l_amenge = CEIL( l_wa_h_mat-actusg ). ** End of MOD-002++ * * l_wa_h_mat-stdusg = l_smenge. * l_wa_h_mat-actusg = l_amenge. * ENDIF. * ** Order UoM or KG ** IF rb_quant EQ c_x AND rb_kgm IS INITIAL. * IF rb_kgm IS INITIAL. * l_matuom = l_wa_h_mat-gruom. * l_stduom = l_wa_h_mat-bomuom. * * IF l_wa_h_mat-gruom %LT%GT l_wa_h_mat-bsuom. * PERFORM conv_to_from_base USING ' ' * l_wa_h_mat-matnr * l_amenge * l_wa_h_mat-gruom * l_wa_h_mat-bsuom * CHANGING l_menge * v_conv_rc. * IF v_conv_rc %LT%GT c_x. * l_amenge = l_menge. * PERFORM convert_unit USING l_wa_h_mat-matnr * 1 * l_wa_h_mat-gruom * l_wa_h_mat-bsuom * CHANGING l_fact_a. * IF l_fact_a = 0. * l_fact_a = 1. * ENDIF. * ENDIF. * ENDIF. * * IF l_wa_h_mat-bsuom %LT%GT l_wa_h_mat-bomuom. * PERFORM conv_to_from_base USING ' ' * l_wa_h_mat-matnr * l_smenge * l_wa_h_mat-bomuom * l_wa_h_mat-bsuom * CHANGING l_menge * v_conv_rc. * IF v_conv_rc %LT%GT c_x. * l_smenge = l_menge. * PERFORM convert_unit USING l_wa_h_mat-matnr * 1 * l_wa_h_mat-bomuom * l_wa_h_mat-bsuom * CHANGING l_fact_s. * IF l_fact_s = 0. * l_fact_s = 1. * ENDIF. * ENDIF. * ENDIF. * * ELSE. * l_matuom = l_wa_h_mat-bsuom. * l_stduom = l_wa_h_mat-bsuom. * * IF l_wa_h_mat-bsuom %LT%GT 'KG'. * PERFORM convert_to_kg USING l_wa_h_mat-matnr l_wa_h_mat-bsuom * l_wa_h_mat-gewei l_wa_h_mat-ntgew * l_amenge * CHANGING l_menge * v_conv_rc. * IF v_conv_rc = 'X'. * CLEAR : l_amenge , l_matuom. * * ELSE. * l_amenge = l_menge. * l_matuom = 'KG'. * PERFORM convert_to_kg USING l_wa_h_mat-matnr l_wa_h_mat-bsuom * l_wa_h_mat-gewei l_wa_h_mat-ntgew * 1 * CHANGING l_fact_a * v_conv_rc. * IF l_fact_a = 0. * l_fact_a = 1. * ENDIF. * l_fact_a = 1 / l_fact_a. * ENDIF. * * PERFORM convert_to_kg USING l_wa_h_mat-matnr l_wa_h_mat-bsuom * l_wa_h_mat-gewei l_wa_h_mat-ntgew * l_smenge * CHANGING l_menge * v_conv_rc. * IF v_conv_rc = 'X'. * CLEAR : l_smenge , l_stduom. * * ELSE. * l_smenge = l_menge. * l_stduom = 'KG'. * PERFORM convert_to_kg USING l_wa_h_mat-matnr l_wa_h_mat-bsuom * l_wa_h_mat-gewei l_wa_h_mat-ntgew * 1 * CHANGING l_fact_s * v_conv_rc. * IF l_fact_s = 0. * l_fact_s = 1. * ENDIF. * l_fact_s = 1 / l_fact_s. * ENDIF. * ENDIF. * ENDIF. * ** Fiscal or quantity * CLEAR : l_sqty , l_aqty, l_svar, l_svarp, l_mvar, l_vstprs. * IF rb_quant EQ c_x. * IF l_wa_h_mat-bsuom = 'EA' OR l_wa_h_mat-bsuom = 'CS'. ** Begin of MOD-002++ ** l_smenge = CEIL( l_smenge ). ** l_amenge = CEIL( l_amenge ). ** End of MOD-002++ * IF l_wa_h_mat-peinh %LT%GT 0. * l_astprs = l_amenge * l_fact_a * * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). * l_sstprs = fp_sstprs + l_smenge * l_fact_s * * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). * ENDIF. * ELSE. * IF l_wa_h_mat-peinh %LT%GT 0. * l_astprs = l_wa_h_mat-actusg * * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). * l_sstprs = fp_sstprs + l_wa_h_mat-stdusg * * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). * ENDIF. * ENDIF. * l_vstprs = l_sstprs - l_astprs. * * WRITE : l_amenge TO l_aqty UNIT l_matuom NO-GROUPING. * WRITE : l_smenge TO l_sqty UNIT l_stduom NO-GROUPING. * * IF l_matuom IS INITIAL OR l_matuom EQ l_stduom. * l_mvar = l_smenge - l_amenge. * * IF l_smenge %LT%GT 0. * l_wa_h_mat-varper = ( l_mvar / l_smenge ) * 100. * ELSE. * l_wa_h_mat-varper = 0. * ENDIF. * ENDIF. * * WRITE : l_mvar TO l_svar UNIT l_stduom NO-GROUPING. * WRITE : l_wa_h_mat-varper TO l_svarp NO-GROUPING DECIMALS 2. * l_varuom = l_stduom. * * ELSE. * l_matuom = v_waers. * l_stduom = v_waers. * l_varuom = v_waers. * * IF l_wa_h_mat-bsuom = 'EA' OR l_wa_h_mat-bsuom = 'CS'. ** Begin of MOD-002++ ** l_smenge = CEIL( l_smenge ). ** l_amenge = CEIL( l_amenge ). ** End of MOD-002++ * IF l_wa_h_mat-peinh %LT%GT 0. * l_astprs = l_amenge * l_fact_a * * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). * l_sstprs = fp_sstprs + l_smenge * l_fact_s * * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). * ENDIF. * ELSE. * IF l_wa_h_mat-peinh %LT%GT 0. * l_astprs = l_wa_h_mat-actusg * * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). * l_sstprs = fp_sstprs + l_wa_h_mat-stdusg * * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). * ENDIF. * ENDIF. * * l_vstprs = l_sstprs - l_astprs. * * IF l_sstprs %LT%GT 0. * l_wa_h_mat-varper = ( l_vstprs / l_sstprs ) * 100. * ELSE. * l_wa_h_mat-varper = 0. * ENDIF. * * v_prs = l_astprs. * WRITE : v_prs TO l_aqty CURRENCY v_waers NO-GROUPING. * * v_prs = l_sstprs. * WRITE : v_prs TO l_sqty CURRENCY v_waers NO-GROUPING. * * v_prs = l_vstprs. * WRITE : v_prs TO l_svar CURRENCY v_waers NO-GROUPING. * * WRITE : l_wa_h_mat-varper TO l_svarp NO-GROUPING DECIMALS 2. * ENDIF. * * l_wa_h_mat-stdvar = l_mvar. * l_wa_h_mat-vstprs = l_vstprs. * * fp_aqty = l_aqty. * fp_matuom = l_matuom. * * fp_sqty = l_sqty. * fp_stduom = l_stduom. * * fp_svar = l_svar. * fp_varuom = l_varuom. * * fp_svarp = l_svarp. * * fp_amenge = l_amenge. * fp_astprs = l_astprs. * * fp_smenge = l_smenge. * fp_sstprs = l_sstprs. * * fp_h_mat = l_wa_h_mat. *ENDFORM. "do_mat_calc * **&--------------------------------------------------------------------- * **& Form convert_unit **&--------------------------------------------------------------------- * ** Convert UoM **---------------------------------------------------------------------- * ** --%GTfp_matnr Material ** --%GTfp_in_qty In Qty ** --%GTfp_in_uom In UoM ** --%GTfp_out_uom Out UoM ** %LT--fp_out_qty Out Qty **---------------------------------------------------------------------- * *FORM convert_unit USING fp_matnr TYPE matnr * fp_in_qty TYPE bstmg * fp_in_uom TYPE meins * fp_out_uom TYPE meins * CHANGING fp_out_qty TYPE bstmg. * * IF fp_in_uom = fp_out_uom. * fp_out_qty = fp_in_qty. * EXIT. * ENDIF. * * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = fp_matnr * i_in_me = fp_in_uom * i_out_me = fp_out_uom * i_menge = fp_in_qty * IMPORTING * e_menge = fp_out_qty * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc %LT%GT 0. * fp_out_qty = 0. * ENDIF. * *ENDFORM. " convert_unit ************************************************************************ ************** *&---------------------------------------------------------------------* *& Include ZPROCESSORDVARF01 * *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* * Report: : ZPROCESSORD * AUTHOR : Aveek Ghose * * SUPPLIER : IBM * *======================================================================* * CHANGE HISTORY LOG * *----------------------------------------------------------------------* * MOD. NO.| DATE | NAME | CORRECTION NUMBER | CHANGE REFERENCE #* *----------------------------------------------------------------------* * MOD-001 |DD/MM/YYYY| XXXXXX | XXXXXXXXXX | XXXXXXXXX * * DESCRIPTION: * *----------------------------------------------------------------------* * MOD-002 |DD/MM/YYYY| XXXXXX | XXXXXXXXXX | XXXXXXXXX * * DESCRIPTION: * *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Include ZPROCESSORDVARF01 *&---------------------------------------------------------------------* FORM fill_movement_types . REFRESH i_r_bwart. * wa_bwart-sign = c_sign. * wa_bwart-option = c_option. * wa_bwart-low = '101'. * APPEND wa_bwart TO i_r_bwart. * CLEAR wa_bwart. * * wa_bwart-sign = c_sign. * wa_bwart-option = c_option. * wa_bwart-low = '102'. * APPEND wa_bwart TO i_r_bwart. * CLEAR wa_bwart. wa_bwart-sign = c_sign. wa_bwart-option = c_option. wa_bwart-low = c_movm_low_261. APPEND wa_bwart TO i_r_bwart. CLEAR wa_bwart. wa_bwart-sign = c_sign. wa_bwart-option = c_option. wa_bwart-low = c_movm_low_262. APPEND wa_bwart TO i_r_bwart. CLEAR wa_bwart. wa_bwart-sign = c_sign. wa_bwart-option = c_option. wa_bwart-low = c_movm_low_531. APPEND wa_bwart TO i_r_bwart. CLEAR wa_bwart. wa_bwart-sign = c_sign. wa_bwart-option = c_option. wa_bwart-low = c_movm_low_532. APPEND wa_bwart TO i_r_bwart. CLEAR wa_bwart. ENDFORM. " fill_movement_types *&---------------------------------------------------------------------* *& Form get_currency *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_currency. ****Begin of MOD-001 DATA : l_bukrs TYPE bukrs, l_waers TYPE waers. CLEAR : v_waers. IF NOT p_werks IS INITIAL. SELECT SINGLE werks FROM t001w INTO v_werks WHERE werks = p_werks. IF sy-subrc %LT%GT 0. MESSAGE e001 WITH p_werks. " Invalid Plant ENDIF. ENDIF. * *Retrieve the company code SELECT SINGLE bukrs FROM t001k INTO l_bukrs WHERE bwkey = p_werks. IF sy-subrc = 0. *Get the currence at company SELECT SINGLE waers FROM t001 INTO v_waers WHERE bukrs = l_bukrs. ENDIF. *******************MOD-004******************************* * SELECT SINGLE waers * FROM tka01 INTO l_waers * WHERE kokrs = p_kokrs. * * IF sy-subrc %LT%GT 0. * MESSAGE e046. " Invalid Controlling area entered. * * ELSEIF v_waers IS INITIAL. ** If the currency is not maintained at companmy level * v_waers = l_waers. * ENDIF. ******************MOD-004******************************* * AUTHORITY-CHECK OBJECT 'C_AFKO_AWK' * ID 'WERKS' FIELD p_werks * ID 'AUFART' DUMMY. * IF sy-subrc %LT%GT 0. * MESSAGE e000 WITH * 'You do not have authorisation to display report'(070). * ENDIF. ****************MOD-004************************************* * IF NOT p_werks IS INITIAL. * SELECT SINGLE werks FROM t001w INTO v_werks * WHERE werks = p_werks. * IF sy-subrc %LT%GT 0. * MESSAGE e001 WITH p_werks. " Invalid Plant * ENDIF. * ENDIF. **********End of MOD-001. ENDFORM. " get_currency *&---------------------------------------------------------------------* *& Form check_materials *&---------------------------------------------------------------------* * text - Checking material number and material type values *----------------------------------------------------------------------* FORM check_materials. DATA : l_matnr TYPE matnr, "#EC NEEDED l_mtart TYPE mtart. "#EC NEEDED * Checking material(s) valid or not IF NOT ( s_matnr[] IS INITIAL ). * Checking at leaset one material is valid for select-options material. SELECT SINGLE matnr FROM mara INTO l_matnr WHERE matnr IN s_matnr. "#EC * IF sy-subrc %LT%GT 0. MESSAGE e000 WITH 'Material(s) not found for this selection'(062). ENDIF. ENDIF. * Checking material type valid or not IF NOT ( p_mtart IS INITIAL ). SELECT SINGLE mtart FROM t134 INTO l_mtart "MOD IB mara-mtart WHERE mtart = p_mtart. IF sy-subrc %LT%GT 0. MESSAGE e000 WITH 'Incorrect Material Type'(063). ENDIF. ENDIF. * Checking material number and type valid or not. IF NOT ( s_matnr[] IS INITIAL ) AND NOT ( p_mtart IS INITIAL ). * Checking at leaset one material is valid for select-options material * and for material type CLEAR l_matnr. SELECT SINGLE matnr FROM mara INTO l_matnr WHERE matnr IN s_matnr AND mtart = p_mtart. "#EC * IF sy-subrc %LT%GT 0. MESSAGE e000 WITH 'Incorrect material number & type combination'(064). ENDIF. ENDIF. ENDFORM. " check_materials *&---------------------------------------------------------------------* *& Form get_status *&---------------------------------------------------------------------* * text -- Retreving System status texts from table TJ02T *----------------------------------------------------------------------* FORM get_status USING fp_txt04 TYPE j_txt04 CHANGING fp_stat TYPE j_istat. ** %GT%GT%GT%GT MOD-101+ CLEAR : fp_stat. SELECT SINGLE istat FROM tj02t INTO fp_stat WHERE txt04 = fp_txt04 AND spras = sy-langu. "#EC CI_SGLSELECT *** if select fails stat is returned empty, so no check required. ** %LT%LT%LT%LT MOD-101+ * REFRESH i_tj02t. * CLEAR wa_tj02t. * IF NOT ( s_stats[] IS INITIAL ). * SELECT txt04 * FROM tj02t INTO TABLE i_tj02t * WHERE txt04 IN s_stats * AND spras = sy-langu. "#EC CI_SGLSELECT ** IF sy-subrc = 0. *** The check is not required here since the *** system status text is not mandatory ** ENDIF. * ENDIF. * * IF rb_ezero = c_x. * IF rb_prod = c_x. * wa_tj02t-txt04 = c_txt_dlv. * ENDIF. * * IF rb_conf = c_x. * wa_tj02t-txt04 = c_txt_cnf. * ENDIF. * APPEND wa_tj02t TO i_tj02t. * CLEAR wa_tj02t. * ENDIF. * SORT i_tj02t BY txt04 AS TEXT. " MOD IB (SORT i_tj02t) * DELETE ADJACENT DUPLICATES FROM i_tj02t. ENDFORM. " get_status *&---------------------------------------------------------------------* *& Form get_status_info *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_status_info USING fp_l_orders_objnr TYPE j_objnr fp_l_sttxt TYPE any. DATA: l_text(4) TYPE c, l_stsma TYPE j_stsma, * START MOD IB i_status TYPE STANDARD TABLE OF jstat INITIAL SIZE 0, wa_status TYPE jstat. * END MOD IB REFRESH i_status. * Get all active statuses for the order CALL FUNCTION 'STATUS_READ' EXPORTING objnr = fp_l_orders_objnr only_active = c_x IMPORTING stsma = l_stsma TABLES status = i_status. CLEAR: fp_l_sttxt. LOOP AT i_status INTO wa_status. * Get the text for each status CALL FUNCTION 'STATUS_NUMBER_CONVERSION' EXPORTING language = sy-langu status_number = wa_status-stat stsma = l_stsma IMPORTING txt04 = l_text. * Add status text found to current list CONCATENATE fp_l_sttxt l_text INTO fp_l_sttxt. CLEAR : wa_status. ENDLOOP. ENDFORM. " get_status_info *&---------------------------------------------------------------------* *& Form get_work_center *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_work_center. CLEAR: wa_crhd. REFRESH: i_crhd. SELECT objid arbpl FROM crhd INTO TABLE i_crhd WHERE objty = c_objtyp AND werks = p_werks AND arbpl IN s_arbpl. * IF sy-subrc = 0. ** sy-subrc check is not required, there must be atleast one record for ** this selection. * ENDIF. ENDFORM. " get_work_center *&---------------------------------------------------------------------* *& Form get_cost_center *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_cost_center. IF NOT ( s_kostl[] IS INITIAL ). CLEAR : i_csks. SELECT kokrs kostl FROM csks INTO TABLE i_csks WHERE kokrs = p_kokrs AND kostl IN s_kostl. IF sy-subrc = 0. SORT i_csks BY kokrs kostl. ENDIF. ENDIF. ENDFORM. " get_cost_center **** **** BEGIN OF MOD-101 **** *&---------------------------------------------------------------------* *& Form get_orders *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_orders. DATA: l_sttxt(100) TYPE c, flg_status(1) TYPE c. FIELD-SYMBOLS : %LTfs_orders%GT TYPE ty_orders. MOVE 'Extracting Process Orders'(022) TO v_output_text. PERFORM inform_user_of_progress. IF NOT p_mtart IS INITIAL. *"selection filter on material type SELECT matnr "material number mtart "material type INTO TABLE i_mtart FROM mara WHERE matnr IN s_matnr AND mtart = p_mtart. IF sy-subrc = c_0. * refill S_MATNR with I_MTART values REFRESH : s_matnr. s_matnr-sign = c_sign. s_matnr-option = c_option. LOOP AT i_mtart INTO wa_mtart. s_matnr-low = wa_mtart-matnr. APPEND s_matnr. ENDLOOP. ELSE. * No data was selected for material type MESSAGE i072 WITH p_mtart. LEAVE LIST-PROCESSING. ENDIF. ENDIF. SELECT aufnr werks kokrs objnr gltrp gstrp rsnum gamng gmein plnbez plnty plnnr plnal stlst stlty stlnr sdatv stlal stlan aufpl zaehl rueck auart aufld "31-05-2005 INTO TABLE i_orders FROM caufv WHERE aufnr IN s_aufnr AND werks = p_werks * AND kokrs = p_kokrs AND fevor IN s_fevor AND plnbez IN s_matnr AND stlan = p_usage AND ( gstrp IN s_datuv OR gltrp IN s_datuv ). IF sy-subrc %LT%GT 0. MESSAGE s007. LEAVE LIST-PROCESSING. ENDIF. SORT i_orders BY aufnr. * Take status txt from sel screen and get status number IF NOT p_stats1 IS INITIAL. PERFORM get_status USING p_stats1 CHANGING v_stat1. ENDIF. IF NOT p_stats2 IS INITIAL. PERFORM get_status USING p_stats2 CHANGING v_stat2. ENDIF. * get object numbers and statuses for orders CLEAR : i_obj_stat. SELECT objnr stat FROM jest INTO TABLE i_obj_stat FOR ALL ENTRIES IN i_orders WHERE objnr = i_orders-objnr AND stat IN (v_stat1,v_stat2). * cull orders LOOP AT i_orders ASSIGNING %LTfs_orders%GT. IF NOT v_stat1 IS INITIAL. READ TABLE i_obj_stat INTO wa_obj_stat WITH KEY objnr = %LTfs_orders%GT-objnr stat = v_stat1. IF sy-subrc = 0 AND p_s1_chk EQ c_x. %LTfs_orders%GT-del = c_x. ELSEIF sy-subrc NE 0 AND p_s1_chk NE c_x. %LTfs_orders%GT-del = c_x. ENDIF. ENDIF. IF NOT v_stat2 IS INITIAL. READ TABLE i_obj_stat INTO wa_obj_stat WITH KEY objnr = %LTfs_orders%GT-objnr stat = v_stat2. IF sy-subrc = 0 AND p_s2_chk EQ c_x. %LTfs_orders%GT-del = c_x. ELSEIF sy-subrc NE 0 AND p_s2_chk NE c_x. %LTfs_orders%GT-del = c_x. ENDIF. ENDIF. ENDLOOP. * DELETE i_orders WHERE del = c_x. * LOOP AT i_orders INTO wa_orders. * IF NOT i_tj02t[] IS INITIAL . * PERFORM get_status_info USING wa_orders-objnr l_sttxt. * * CLEAR: flg_status, wa_tj02t. * LOOP AT i_tj02t INTO wa_tj02t. * IF l_sttxt NS wa_tj02t-txt04. * CLEAR flg_status. * EXIT. * ELSE. * flg_status = c_x. * CONTINUE. * ENDIF. * CLEAR : wa_tj02t. * ENDLOOP. * * IF flg_status %LT%GT c_x. * DELETE i_orders. * CONTINUE. * ENDIF. * ENDIF. * ENDLOOP. ENDFORM. " get_orders *&---------------------------------------------------------------------* *& Form get_operations *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_operations. DATA l_tabix TYPE sytabix. * Let the user know whats up MOVE 'Extracting Phase Information'(023) TO v_output_text. PERFORM inform_user_of_progress. * select process order item lines SELECT aufpl aplzl ltxa1 plnkn plnty plnnr zaehl vornr steus arbid rueck phflg sumnr vgwts lar01 lar02 lar03 lar04 lar05 lar06 INTO TABLE i_afvc FROM afvc FOR ALL ENTRIES IN i_orders WHERE aufpl = i_orders-aufpl AND steus IN s_steus. ************MOD-004****************************** * AND phflg = c_x. ************MOD-004****************************** IF sy-subrc = 0. * select process order item values SELECT aufpl aplzl meinh bmsch umren umrez vge01 vgw01 vge02 vgw02 vge03 vgw03 vge04 vgw04 vge05 vgw05 vge06 vgw06 mgvrg lmnga gmnga ism01 ism02 ism03 ism04 ism05 ism06 ssavd FROM afvv INTO TABLE i_afvv FOR ALL ENTRIES IN i_afvc WHERE aufpl = i_afvc-aufpl AND aplzl = i_afvc-aplzl AND ssavd IN s_datuv. IF sy-subrc = 0. SORT i_afvv BY aufpl aplzl. ENDIF. * select process order related work centre data SELECT objty objid kokrs kostl lstar FROM crco INTO TABLE i_crco FOR ALL ENTRIES IN i_afvc WHERE objty = c_objtyp AND objid = i_afvc-arbid AND kostl IN s_kostl. IF sy-subrc = 0. SORT i_crco BY objty objid kostl. ENDIF. * Retrieve work center details SELECT objid arbpl vgwts FROM crhd APPENDING TABLE i_crhd FOR ALL ENTRIES IN i_afvc WHERE objty = c_objtyp AND objid = i_afvc-arbid AND werks = p_werks AND arbpl IN s_arbpl. SORT i_crhd BY objid. SORT i_orders BY aufpl. SORT i_afvc BY aufpl vornr DESCENDING. LOOP AT i_afvc INTO wa_afvc. l_tabix = sy-tabix. *** link PrO number to phase through the routing number CLEAR : wa_orders. READ TABLE i_orders INTO wa_orders WITH KEY aufpl = wa_afvc-aufpl. IF sy-subrc = 0. wa_afvc-aufnr = wa_orders-aufnr. MODIFY i_afvc FROM wa_afvc INDEX l_tabix TRANSPORTING aufnr. *** check cost centre of phase IF NOT ( s_kostl[] IS INITIAL ). READ TABLE i_crco INTO wa_crco WITH KEY objty = c_objtyp objid = wa_afvc-arbid BINARY SEARCH. IF sy-subrc = 0. *** see if cost centre of phase is valid READ TABLE i_csks INTO wa_csks WITH KEY kostl = wa_crco-kostl. IF sy-subrc %LT%GT 0. *** delete invalid phases DELETE i_afvv WHERE aufpl = wa_afvc-aufpl AND aplzl = wa_afvc-aplzl. DELETE i_afvc INDEX l_tabix. CONTINUE. ENDIF. ENDIF. ENDIF. *** Check work centre details with resource IF NOT ( s_arbpl[] IS INITIAL ). READ TABLE i_crhd INTO wa_crhd WITH KEY objid = wa_afvc-arbid. IF sy-subrc %LT%GT 0. DELETE i_afvv WHERE aufpl = wa_afvc-aufpl AND aplzl = wa_afvc-aplzl. DELETE i_afvc INDEX l_tabix. CONTINUE. ENDIF. ENDIF. CLEAR: wa_crco, wa_crhd, l_tabix. ELSE. *** if routing number is not linked to any valid order *** delete phase DELETE i_afvc INDEX l_tabix. ENDIF. ENDLOOP. ENDIF. * Begin of MOD-002++ LOOP AT i_orders INTO wa_orders. CLEAR: wa_afvc, l_tabix. l_tabix = sy-tabix. READ TABLE i_afvc INTO wa_afvc WITH KEY aufpl = wa_orders-aufpl. IF sy-subrc NE 0. DELETE i_orders INDEX l_tabix. ENDIF. ENDLOOP. * End of MOD-002++ ENDFORM. " get_operations *&--------------------------------------------------------------------* *& Form get_order_mats *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM get_order_mats. DATA : l_v_erfme TYPE erfme, l_v_chec TYPE char1, l_bwart TYPE bwart. * get materials issued/receipt against order SELECT aufnr aufpl aplzl matnr mblnr mjahr zeile bwart werks lgort charg menge meins erfmg erfme rsnum rspos rsart FROM aufm INTO TABLE i_mseg1 FOR ALL ENTRIES IN i_orders WHERE aufnr = i_orders-aufnr. IF sy-subrc = 0. *** get base UoM for all materials CLEAR: i_mara. SELECT matnr mtart meins gewei ntgew FROM mara APPENDING TABLE i_mara FOR ALL ENTRIES IN i_mseg1 WHERE matnr = i_mseg1-matnr. SORT i_mseg1 BY aufnr aufpl aplzl matnr. *** get material qty in base UoM and summarize material data LOOP AT i_mseg1 INTO wa_mseg. CLEAR : wa_mara. *** read material master for base UoM READ TABLE i_mara INTO wa_mara WITH KEY matnr = wa_mseg-matnr. IF sy-subrc = 0. IF wa_mseg-meins %LT%GT wa_mara-meins. CLEAR : wa_mseg-bmenge. *** convert GR quant into base units PERFORM conv_to_from_base USING 'X' wa_mseg-matnr wa_mseg-menge wa_mseg-meins wa_mara-meins CHANGING wa_mseg-bmenge v_conv_rc. ELSE. wa_mseg-bmenge = wa_mseg-menge. ENDIF. wa_mseg-bmeins = wa_mara-meins. wa_mseg-gewei = wa_mara-gewei. wa_mseg-ntgew = wa_mara-ntgew. MODIFY i_mseg1 FROM wa_mseg TRANSPORTING bmenge bmeins. ENDIF. wa_msegs-aufnr = wa_mseg-aufnr. wa_msegs-aufpl = wa_mseg-aufpl. wa_msegs-aplzl = wa_mseg-aplzl. wa_msegs-matnr = wa_mseg-matnr. wa_msegs-meins = wa_mseg-meins. wa_msegs-bmeins = wa_mseg-bmeins. wa_msegs-gewei = wa_mseg-gewei. * Begin of MOD-002++ IF ( wa_mseg-bwart %LT%GT 'ZU1' ) AND ( wa_mseg-bwart %LT%GT 'ZU2' ). wa_msegs-erfme = wa_mseg-erfme. ENDIF. * End of MOD-002++ AT NEW matnr. l_v_erfme = wa_msegs-erfme. CLEAR : l_v_chec. ENDAT. IF l_v_erfme %LT%GT wa_mseg-erfme. *** set flag if different GR mvts have diff. GR UoM l_v_chec = c_x. ENDIF. *** Sum up material qtys based on movement CASE wa_mseg-bwart. WHEN '101'. *** GR of material wa_msegs-bmenge1 = wa_msegs-bmenge1 + wa_mseg-bmenge. wa_msegs-erfmg1 = wa_msegs-erfmg1 + wa_mseg-erfmg. wa_msegs-erfme = wa_mseg-erfme. l_bwart = '101'. "23-05-2005 WHEN '261'. *** Consumption of material wa_msegs-bmenge2 = wa_msegs-bmenge2 + wa_mseg-bmenge. wa_msegs-erfmg2 = wa_msegs-erfmg2 + wa_mseg-erfmg. l_bwart = '261'. "23-05-2005 WHEN '532'. *** reversal of 531 wa_msegs-bmenge5 = wa_msegs-bmenge5 + wa_mseg-bmenge. wa_msegs-erfmg5 = wa_msegs-erfmg5 + wa_mseg-erfmg. WHEN '102'. *** reversal of 101 wa_msegs-bmenge1 = wa_msegs-bmenge1 - wa_mseg-bmenge. wa_msegs-erfmg1 = wa_msegs-erfmg1 + wa_mseg-erfmg. WHEN '262'. *** reversal of 261 wa_msegs-bmenge2 = wa_msegs-bmenge2 - wa_mseg-bmenge. wa_msegs-erfmg2 = wa_msegs-erfmg2 + wa_mseg-erfmg. WHEN '531'. *** By-product material mvt wa_msegs-bmenge5 = wa_msegs-bmenge5 - wa_mseg-bmenge. wa_msegs-erfmg5 = wa_msegs-erfmg5 + wa_mseg-erfmg. l_bwart = '531'. "23-05-2005 ENDCASE. *** If the diff. GR qtys have different UoM then do not cumulate *** actual qty values IF l_v_chec = c_x. CLEAR : wa_msegs-erfmg1, wa_msegs-erfmg2 , wa_msegs-erfmg5. ENDIF. AT END OF matnr. wa_msegs-bmenge = wa_msegs-bmenge1 + wa_msegs-bmenge2 + wa_msegs-bmenge5. wa_msegs-erfmg = wa_msegs-erfmg1 + wa_msegs-erfmg2 + wa_msegs-erfmg5. wa_msegs-bwart = l_bwart . APPEND wa_msegs TO i_msegs. CLEAR : wa_msegs, l_bwart. ENDAT. ENDLOOP. ENDIF. ENDFORM. "get_order_mats *&---------------------------------------------------------------------* *& Form get_mat_segment *&---------------------------------------------------------------------* FORM get_mat_segment. DATA: l_tabix TYPE sytabix. FIELD-SYMBOLS : %LTl_fs_orders%GT TYPE ty_orders, %LTl_fs_afvc%GT TYPE ty_afvc. IF NOT ( i_orders[] IS INITIAL ). *** get material master data for PO materials CLEAR: i_mara , i_mseg , i_mseg1 , i_msegs , i_msegs1. SELECT matnr mtart meins gewei ntgew FROM mara INTO TABLE i_mara FOR ALL ENTRIES IN i_orders WHERE matnr = i_orders-plnbez. IF NOT ( rb_prod IS INITIAL ). *** Tell user we are Extracting goods receipt information MOVE 'Extracting Goods Receipt Information'(024) TO v_output_text. PERFORM inform_user_of_progress. *** get the materials to process PERFORM get_order_mats. *** create alternate working tables for mat. mvts i_mseg = i_mseg1. i_msegs1 = i_msegs. *** retain only order material in internal table and get order qty in *** base UoM LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. *** retain mat. mvts only for the main material of the PrO DELETE i_mseg WHERE aufnr = %LTl_fs_orders%GT-aufnr AND matnr %LT%GT %LTl_fs_orders%GT-plnbez. DELETE i_msegs1 WHERE aufnr = %LTl_fs_orders%GT-aufnr AND matnr %LT%GT %LTl_fs_orders%GT-plnbez. *** read material master for base UoM of material CLEAR : wa_mara. READ TABLE i_mara INTO wa_mara WITH KEY matnr = %LTl_fs_orders%GT-plnbez. IF sy-subrc = 0. IF wa_mara-meins %LT%GT %LTl_fs_orders%GT-gmein. *** convert order quantity to base UoM PERFORM conv_to_from_base USING 'X' %LTl_fs_orders%GT-plnbez %LTl_fs_orders%GT-gamng %LTl_fs_orders%GT-gmein wa_mara-meins CHANGING %LTl_fs_orders%GT-bgamng v_conv_rc. ELSE. %LTl_fs_orders%GT-bgamng = wa_orders-gamng. ENDIF. %LTl_fs_orders%GT-bsuom = wa_mara-meins. %LTl_fs_orders%GT-gewei = wa_mara-gewei. %LTl_fs_orders%GT-ntgew = wa_mara-ntgew. ENDIF. ENDLOOP. SORT i_mseg BY aufnr. SORT i_msegs1 BY aufnr. SORT i_orders BY aufnr. *** Calculatin the quantity according to the movement type and *** assign the value to i_orders internal table LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. CLEAR : wa_msegs. READ TABLE i_msegs1 INTO wa_msegs WITH KEY aufnr = %LTl_fs_orders%GT-aufnr matnr = %LTl_fs_orders%GT-plnbez. IF rb_ezero EQ c_x AND wa_msegs-bmenge1 = 0. *** Don't want zero production orders DELETE i_afvc WHERE aufnr = %LTl_fs_orders%GT-aufnr. * DELETE i_orders WHERE aufnr = %LTl_fs_orders%GT-aufnr. CONTINUE. ENDIF. %LTl_fs_orders%GT-erfmg = wa_msegs-erfmg1. %LTl_fs_orders%GT-bmenge = wa_msegs-bmenge1. %LTl_fs_orders%GT-gruom = wa_msegs-erfme. ENDLOOP. ELSE. *** Here we're Extracting confirmation information MOVE 'Extracting Confirmation Information'(025) TO v_output_text. PERFORM inform_user_of_progress. *** get order qty in base UoM and get base UoM and weight UoM LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. CLEAR : wa_mara. READ TABLE i_mara INTO wa_mara WITH KEY matnr = %LTl_fs_orders%GT-plnbez. IF sy-subrc = 0. IF wa_mara-meins %LT%GT wa_orders-gmein. *** convert order quantity to base UoM PERFORM conv_to_from_base USING 'X' %LTl_fs_orders%GT-plnbez %LTl_fs_orders%GT-gamng %LTl_fs_orders%GT-gmein wa_mara-meins CHANGING %LTl_fs_orders%GT-bgamng v_conv_rc. ELSE. %LTl_fs_orders%GT-bgamng = %LTl_fs_orders%GT-gamng. ENDIF. %LTl_fs_orders%GT-bsuom = wa_mara-meins. %LTl_fs_orders%GT-gewei = wa_mara-gewei. %LTl_fs_orders%GT-ntgew = wa_mara-ntgew. ENDIF. ENDLOOP. *** Select confirmations using operation confirmation number instead of *** order number CLEAR : i_afvv1 , i_afvc1 , i_afru , i_afru1. *** get 'bottleneck' phases LOOP AT i_afvc INTO wa_afvc WHERE steus = 'YBN1' AND phflg = c_x. APPEND wa_afvc TO i_afvc1. *** get 'bottleneck' phase values LOOP AT i_afvv INTO wa_afvv WHERE aufpl = wa_afvc-aufpl AND aplzl = wa_afvc-aplzl. APPEND wa_afvv TO i_afvv1. ENDLOOP. ENDLOOP. IF NOT i_afvc1 IS INITIAL. SORT i_afvc1 BY aufpl aplzl plnkn plnty plnnr. *** get confirmations for the various phases SELECT aufnr rueck gmnga lmnga gmein meinh meilr stokz rueck_mst aufpl aplzl INTO TABLE i_afru FROM afru FOR ALL ENTRIES IN i_afvc WHERE rueck = i_afvc-rueck AND werks = p_werks AND aufpl = i_afvc-aufpl AND aplzl = i_afvc-aplzl. SORT i_afru BY aufnr rueck aufpl aplzl. LOOP AT i_afvc1 INTO wa_afvc. LOOP AT i_afru INTO wa_afru WHERE aufnr = wa_afvc-aufnr AND rueck = wa_afvc-rueck AND aufpl = wa_afvc-aufpl AND aplzl = wa_afvc-aplzl. *** get 'bottleneck' related confirmations APPEND wa_afru TO i_afru1. ENDLOOP. ENDLOOP. IF NOT i_afvv1 IS INITIAL. SORT i_afvv1 BY aufpl aplzl. *** get total confirmation on order for 'bottleneck' phases, *** this will be the confirmed qty for whole order LOOP AT i_afvc ASSIGNING %LTl_fs_afvc%GT. wa_afvc = %LTl_fs_afvc%GT. *** ensuring the phase is related to a valid PrO CLEAR : wa_orders. READ TABLE i_orders INTO wa_orders WITH KEY aufnr = wa_afvc-aufnr. IF sy-subrc = 0. *** is it a bottleneck phase? READ TABLE i_afvc1 INTO wa_afvc1 WITH KEY aufpl = wa_orders-aufpl plnty = wa_afvc-plnty plnnr = wa_afvc-plnnr plnkn = wa_afvc-plnkn zaehl = wa_afvc-zaehl. IF sy-subrc = 0. *** get phase operation values READ TABLE i_afvv1 INTO wa_afvv1 WITH KEY aufpl = wa_afvc1-aufpl aplzl = wa_afvc1-aplzl BINARY SEARCH. IF sy-subrc = 0. *** does the phase have any std runtime m/c confirmations CHECK wa_afvv1-vgw02 NE 0. *** get actual bottleneck phase confirmations PERFORM get_confirmation_qty_new USING wa_orders-aufnr wa_afvc1-rueck wa_afvc1-aufpl wa_afvc1-aplzl CHANGING wa_afvc-lmnga wa_afvc-cfuom. *** save confirmation values against phase %LTl_fs_afvc%GT-lmnga = wa_afvc-lmnga. %LTl_fs_afvc%GT-cfuom = wa_afvc-cfuom. ENDIF. ENDIF. ENDIF. ENDLOOP. ENDIF. ENDIF. *** retain only bottleneck related confirmation phases, *** as this gives confirmation qty for order i_afvc2 = i_afvc. * IF rb_ezero = c_x. **** no zero confirmation qty phases wanted * DELETE i_afvc2 WHERE lmnga EQ 0. * ENDIF. DELETE ADJACENT DUPLICATES FROM i_afvc2 COMPARING aufnr aufpl aplzl plnkn plnty plnnr zaehl vornr. *** get order qty in base UoM and get base UoM and weight UoM LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. *** get confirmed qty READ TABLE i_afvc2 INTO wa_afvc WITH KEY aufnr = %LTl_fs_orders%GT-aufnr. IF sy-subrc = 0. %LTl_fs_orders%GT-lmnga = wa_afvc-lmnga. %LTl_fs_orders%GT-cfuom = wa_afvc-cfuom. IF %LTl_fs_orders%GT-cfuom %LT%GT %LTl_fs_orders%GT-bsuom. *** convert confirmation quantity to base UoM PERFORM conv_to_from_base USING 'X' %LTl_fs_orders%GT-plnbez %LTl_fs_orders%GT-lmnga %LTl_fs_orders%GT-cfuom %LTl_fs_orders%GT-bsuom CHANGING %LTl_fs_orders%GT-blmnga v_conv_rc. ELSE. %LTl_fs_orders%GT-blmnga = %LTl_fs_orders%GT-lmnga. ENDIF. ELSE. *** if the order has no confirmed qty against it, remove it *** from further processing %LTl_fs_orders%GT-del = c_x. ENDIF. ENDLOOP. * DELETE i_orders WHERE del = c_x. ENDIF. ENDIF. ENDFORM. " get_mat_segment *&---------------------------------------------------------------------* *& Form get_confirmation_qty_new *&---------------------------------------------------------------------* FORM get_confirmation_qty_new USING fp_aufnr TYPE aufnr fp_rueck TYPE co_rueck fp_aufpl TYPE co_aufpl fp_aplzl TYPE co_aplzl CHANGING fp_lmnga TYPE ru_lmnga fp_cfuom TYPE meins. DATA: last_lmnga TYPE ru_lmnga, last_lmnga1 TYPE ru_lmnga, last_lmnga2 TYPE ru_lmnga, l_v_meinh TYPE ru_vorme. CLEAR: last_lmnga. * Check this record. If there is no link to another confirmation and * a quantity has been confirmed and it is a milestone confirmation * then we want to select all of the confirmations for it. LOOP AT i_afru1 INTO wa_afru1 WHERE aufnr = fp_aufnr AND rueck = fp_rueck AND aufpl = fp_aufpl AND aplzl = fp_aplzl. CHECK wa_afru1-lmnga NE 0. IF l_v_meinh IS INITIAL. l_v_meinh = wa_afru1-meinh. ENDIF. last_lmnga1 = wa_afru1-lmnga. IF l_v_meinh %LT%GT wa_afru1-meinh. CLEAR : last_lmnga2. PERFORM conv_to_from_base USING 'X' wa_orders-plnbez wa_afru1-lmnga wa_afru1-meinh wa_orders-bsuom CHANGING last_lmnga2 v_conv_rc. PERFORM conv_to_from_base USING ' ' wa_orders-plnbez last_lmnga2 l_v_meinh wa_orders-bsuom CHANGING last_lmnga1 v_conv_rc. ENDIF. IF wa_afru1-stokz IS INITIAL. last_lmnga = last_lmnga + last_lmnga1. ELSE. last_lmnga = last_lmnga - last_lmnga1. ENDIF. ENDLOOP. MOVE last_lmnga TO fp_lmnga. fp_cfuom = l_v_meinh. ENDFORM. " get_confirmation_qty_new *&---------------------------------------------------------------------* *& Form get_bom_info *&---------------------------------------------------------------------* FORM get_bom_info. DATA: l_tabix TYPE sytabix, l_v_kausf TYPE kausf, l_v_dmeng TYPE ty_menge, l_v_dmengs TYPE ty_menge, l_v_dmengz TYPE ty_menge, l_v_menge TYPE kmpmg, l_v_mnglg TYPE cs_e_mnglg, l_v_mnglgs TYPE cs_e_mnglg, l_v_mnglgz TYPE cs_e_mnglg, l_i_bomapp TYPE STANDARD TABLE OF ty_bomapp, l_wa_bomapp TYPE ty_bomapp, l_idx TYPE ttidx. "NEEL 4/6/2005 FIELD-SYMBOLS : %LTl_fs_orders%GT TYPE ty_orders, %LTl_fs_ordmats%GT TYPE ty_ordmats. IF NOT i_orders[] IS INITIAL. * this tells users whats happening MOVE 'Extracting BOM Information'(026) TO v_output_text. PERFORM inform_user_of_progress. * Get order related bom appln CLEAR : l_i_bomapp. SELECT werks auart capid FROM t399x INTO TABLE l_i_bomapp FOR ALL ENTRIES IN i_orders WHERE werks = i_orders-werks AND auart = i_orders-auart. SORT l_i_bomapp BY werks auart. * Get issued materials for all process orders IF i_mseg1 IS INITIAL. * get materials to process PERFORM get_order_mats. i_mseg = i_mseg1. i_msegs1 = i_msegs. ENDIF. LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. DELETE i_mseg WHERE aufnr = %LTl_fs_orders%GT-aufnr AND matnr %LT%GT %LTl_fs_orders%GT-plnbez. DELETE i_msegs1 WHERE aufnr = %LTl_fs_orders%GT-aufnr AND matnr %LT%GT %LTl_fs_orders%GT-plnbez. CLEAR : l_wa_bomapp. *** Assign a default in case read fails l_wa_bomapp-capid = 'PI01'. READ TABLE l_i_bomapp INTO l_wa_bomapp WITH KEY werks = %LTl_fs_orders%GT-werks auart = %LTl_fs_orders%GT-auart BINARY SEARCH. *** Get BOM application id %LTl_fs_orders%GT-capid = l_wa_bomapp-capid. *** Get list of materials that have been issued LOOP AT i_mseg1 INTO wa_issued_mat WHERE aufnr = %LTl_fs_orders%GT-aufnr AND bwart IN i_r_bwart. APPEND wa_issued_mat TO i_issued_mat. ENDLOOP. ENDLOOP. CLEAR : i_bomdat. * do BOM explosion and get related BOM data for the materials LOOP AT i_orders ASSIGNING %LTl_fs_orders%GT. *** build key table for later selection from table PLPO, *** the master recipe table wa_plpo_sel-plnty = %LTl_fs_orders%GT-plnty. wa_plpo_sel-plnnr = %LTl_fs_orders%GT-plnnr. wa_plpo_sel-zaehl = %LTl_fs_orders%GT-zaehl. APPEND wa_plpo_sel TO i_plpo_sel. *** build key table for later selection from table AFRU, *** the confirmations table wa_afru_sel-rueck = %LTl_fs_orders%GT-rueck. APPEND wa_afru_sel TO i_afru_sel. l_tabix = sy-tabix. CLEAR : wa_tmat , i_stbtmp , wa_bomdat. *** check if same BOM has been retrieved before READ TABLE i_bomdat INTO wa_bomdat WITH KEY capid = %LTl_fs_orders%GT-capid datuv = %LTl_fs_orders%GT-sdatv mtnrv = %LTl_fs_orders%GT-plnbez stlal = %LTl_fs_orders%GT-stlal stlan = %LTl_fs_orders%GT-stlan werks = %LTl_fs_orders%GT-werks. IF sy-subrc = 0. *** if yes then use it wa_tmat = wa_bomdat-tmat. i_stbtmp = wa_bomdat-stb. ELSE. *** if no then get BOM explosion CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' EXPORTING aumgb = 'X' capid = %LTl_fs_orders%GT-capid * datuv = %LTl_fs_orders%GT-sdatv *** Begin of change on 31-05-2005 datuv = %LTl_fs_orders%GT-aufld " 31-05-2005 *** End of change on 31-05-2005 mbwls = 'X' mehrs = 'X' mtnrv = %LTl_fs_orders%GT-plnbez stlal = %LTl_fs_orders%GT-stlal stlan = %LTl_fs_orders%GT-stlan werks = %LTl_fs_orders%GT-werks IMPORTING topmat = wa_tmat TABLES stb = i_stbtmp * matcat = i_cmat 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 conversion_error = 8 OTHERS = 9. IF sy-subrc = 0. *** add to BOM buffer table wa_bomdat-capid = %LTl_fs_orders%GT-capid. wa_bomdat-datuv = %LTl_fs_orders%GT-sdatv. wa_bomdat-mtnrv = %LTl_fs_orders%GT-plnbez. wa_bomdat-stlal = %LTl_fs_orders%GT-stlal. wa_bomdat-stlan = %LTl_fs_orders%GT-stlan. wa_bomdat-werks = %LTl_fs_orders%GT-werks. wa_bomdat-tmat = wa_tmat. wa_bomdat-stb = i_stbtmp. INSERT wa_bomdat INTO TABLE i_bomdat. DELETE i_stbtmp WHERE schgt = c_x. ENDIF. ENDIF. IF NOT i_stbtmp IS INITIAL. *** First get the primary level values from the exploded BOM LOOP AT i_stbtmp INTO wa_stb WHERE stlal = %LTl_fs_orders%GT-stlal AND stlan = %LTl_fs_orders%GT-stlan AND stlty = %LTl_fs_orders%GT-stlty AND stlnr = %LTl_fs_orders%GT-stlnr. CHECK wa_stb-postp %LT%GT 'N'. CLEAR : wa_ordmats. wa_ordmats-aufnr = %LTl_fs_orders%GT-aufnr. wa_ordmats-matnr = wa_stb-idnrk. wa_ordmats-mtart = wa_stb-mtart. wa_ordmats-stufe = wa_stb-stufe. *%GT%GTNEEL 4/6/2005 wa_ordmats-wegxx = wa_stb-wegxx. wa_ordmats-ttidx = wa_stb-ttidx. wa_ordmats-vwegx = wa_stb-vwegx. *%LT%LTNEEL 4/6/2005 wa_ordmats-ojtxb = wa_stb-ojtxb. wa_ordmats-ojtxp = wa_stb-ojtxp. wa_ordmats-ausch = wa_stb-ausch. * wa_ordmats-yyzero = wa_stb-yyzero. IF NOT wa_stb-ausch IS INITIAL. l_v_kausf = 1 + ( wa_stb-ausch / 100 ). ELSE. l_v_kausf = 1 + ( wa_stb-kausf / 100 ). ENDIF. wa_ordmats-kausf = l_v_kausf. wa_ordmats-menge = wa_stb-menge. wa_ordmats-menges = wa_stb-menge * wa_ordmats-kausf. * wa_ordmats-mengez = wa_stb-menge * wa_ordmats-yyzero. wa_ordmats-meins = wa_stb-meins. wa_ordmats-xmeng = wa_stb-xmeng. wa_ordmats-xmengs = wa_stb-xmeng * wa_ordmats-kausf. * wa_ordmats-xmengz = wa_stb-xmeng * wa_ordmats-yyzero. wa_ordmats-xmein = wa_stb-xmein. wa_ordmats-mnglg = wa_stb-mnglg. wa_ordmats-mnglgs = wa_stb-mnglg. wa_ordmats-mnglgz = wa_stb-mnglg. wa_ordmats-mmein = wa_stb-mmein. wa_ordmats-msign = wa_stb-msign. wa_ordmats-postp = wa_stb-postp. IF wa_stb-kzkup = space AND wa_stb-msign = '-'. wa_ordmats-byprod = c_x. ENDIF. wa_ordmats-stprs = wa_stb-stprs. wa_ordmats-peinh = wa_stb-preih. wa_ordmats-bom = c_x. wa_ordmats-stlty = wa_stb-stlty. wa_ordmats-stlnr = wa_stb-stlnr. wa_ordmats-stlkn = wa_stb-stlkn. wa_ordmats-stpoz = wa_stb-stpoz. APPEND wa_ordmats TO i_ordmats. ENDLOOP. *** now recurse into exploded BOM to get lower level details LOOP AT i_ordmats ASSIGNING %LTl_fs_ordmats%GT WHERE bomd %LT%GT c_x. IF %LTl_fs_ordmats%GT-xmeng %GT 0. l_v_dmeng = %LTl_fs_ordmats%GT-menge / %LTl_fs_ordmats%GT-xmeng. l_v_dmengs = %LTl_fs_ordmats%GT-menges / %LTl_fs_ordmats%GT-xmeng. l_v_dmengz = %LTl_fs_ordmats%GT-mengez / %LTl_fs_ordmats%GT-xmeng. ELSE. l_v_dmeng = 1. l_v_dmengs = 1. l_v_dmengz = 1. ENDIF. l_idx = %LTl_fs_ordmats%GT-stufe + 1. "NEEL 4/6/2005++ LOOP AT i_stbtmp INTO wa_stb * WHERE ojtxb = %LTl_fs_ordmats%GT-ojtxp. NEEL-- WHERE ttidx = l_idx "NEEL 4/6/2005 AND vwegx = %LTl_fs_ordmats%GT-wegxx. CLEAR : wa_ordmats. wa_ordmats-aufnr = %LTl_fs_orders%GT-aufnr. wa_ordmats-matnr = wa_stb-idnrk. wa_ordmats-mtart = wa_stb-mtart. wa_ordmats-stufe = wa_stb-stufe. *%GT%GTNEEL 4/6/2005 wa_ordmats-wegxx = wa_stb-wegxx. wa_ordmats-ttidx = wa_stb-ttidx. wa_ordmats-vwegx = wa_stb-vwegx. *%LT%LTNEEL 4/6/2005 wa_ordmats-ojtxb = wa_stb-ojtxb. wa_ordmats-ojtxp = wa_stb-ojtxp. wa_ordmats-ausch = wa_stb-ausch. * wa_ordmats-yyzero = wa_stb-yyzero. IF NOT wa_stb-ausch IS INITIAL. l_v_kausf = 1 + ( wa_stb-ausch / 100 ). ELSE. l_v_kausf = 1 + ( wa_stb-kausf / 100 ). ENDIF. wa_ordmats-kausf = l_v_kausf. l_v_menge = wa_stb-menge * l_v_dmengs. wa_ordmats-menges = l_v_menge * wa_ordmats-kausf. l_v_menge = wa_stb-menge * l_v_dmengz. * wa_ordmats-mengez = l_v_menge * wa_ordmats-yyzero. l_v_menge = wa_stb-menge * l_v_dmeng. wa_ordmats-menge = l_v_menge. wa_ordmats-meins = wa_stb-meins. l_v_mnglg = wa_ordmats-menge. l_v_mnglgs = wa_ordmats-menges. l_v_mnglgz = wa_ordmats-mengez. IF wa_stb-meins = wa_stb-mmein. wa_ordmats-mnglg = l_v_mnglg. wa_ordmats-mnglgs = l_v_mnglgs. wa_ordmats-mnglgz = l_v_mnglgz. ELSE. * convert BOM quantity to base UoM PERFORM conv_to_from_base USING 'X' wa_ordmats-matnr l_v_mnglg wa_ordmats-meins wa_ordmats-mmein CHANGING wa_ordmats-mnglg v_conv_rc. PERFORM conv_to_from_base USING 'X' wa_ordmats-matnr l_v_mnglgs wa_ordmats-meins wa_ordmats-mmein CHANGING wa_ordmats-mnglgs v_conv_rc. PERFORM conv_to_from_base USING 'X' wa_ordmats-matnr l_v_mnglgz wa_ordmats-meins wa_ordmats-mmein CHANGING wa_ordmats-mnglgz v_conv_rc. ENDIF. wa_ordmats-mmein = wa_stb-mmein. wa_ordmats-msign = wa_stb-msign. wa_ordmats-xmeng = wa_stb-xmeng. wa_ordmats-xmengs = wa_stb-xmeng * wa_ordmats-kausf. * wa_ordmats-xmengz = wa_stb-xmeng * wa_ordmats-yyzero. wa_ordmats-xmein = wa_stb-xmein. wa_ordmats-stprs = wa_stb-stprs. wa_ordmats-peinh = wa_stb-preih. * wa_ordmats-yyzero = wa_stb-yyzero. wa_ordmats-bom = c_x. wa_ordmats-stlty = wa_stb-stlty. wa_ordmats-stlnr = wa_stb-stlnr. wa_ordmats-stlkn = wa_stb-stlkn. wa_ordmats-stpoz = wa_stb-stpoz. APPEND wa_ordmats TO i_ordmats. ENDLOOP. %LTl_fs_ordmats%GT-bomd = c_x. ENDLOOP. %LTl_fs_orders%GT-maktx = wa_tmat-maktx. %LTl_fs_orders%GT-bmeng = wa_tmat-bmeng. %LTl_fs_orders%GT-bmein = wa_tmat-bmein. %LTl_fs_orders%GT-kausf = wa_tmat-kausf. IF %LTl_fs_orders%GT-bmein %LT%GT %LTl_fs_orders%GT-bsuom. * convert BOM base quantity to base UoM PERFORM conv_to_from_base USING 'X' %LTl_fs_orders%GT-plnbez %LTl_fs_orders%GT-bmeng %LTl_fs_orders%GT-bmein %LTl_fs_orders%GT-bsuom CHANGING %LTl_fs_orders%GT-bbmeng v_conv_rc. ELSE. %LTl_fs_orders%GT-bbmeng = %LTl_fs_orders%GT-bmeng. ENDIF. ENDIF. ENDLOOP. SORT i_ordmats BY aufnr matnr. * Selecting reservations for order SELECT rsnum rspos rsart xloek matnr werks bdmng meins shkzg aufnr dumps aufpl vornr aplzl postp kzkup rgekz ausch stlty stlnr stlkn stpoz bwart FROM resb INTO TABLE i_resb FOR ALL ENTRIES IN i_orders WHERE rsnum = i_orders-rsnum * AND xloek = ' ' AND aufnr = i_orders-aufnr AND bdmng %GT 0 AND dumps = space AND postp %LT%GT 'N' AND schgt = space. LOOP AT i_resb INTO wa_resb. READ TABLE i_issued_mat INTO wa_issued_mat WITH KEY matnr = wa_resb-matnr. CHECK sy-subrc %LT%GT 0. *** If a material was issued but is not part of the PrO *** reservations, add it to list CLEAR : wa_issued_mat. wa_issued_mat-matnr = wa_resb-matnr. wa_issued_mat-werks = wa_resb-werks. APPEND wa_issued_mat TO i_issued_mat. ENDLOOP. * we just need the issued mat numbers not captured by BOM explosion SORT i_issued_mat BY matnr. DELETE ADJACENT DUPLICATES FROM i_issued_mat COMPARING matnr. IF NOT i_issued_mat IS INITIAL. * get material master data SELECT matnr mtart meins gewei FROM mara APPENDING TABLE i_mara FOR ALL ENTRIES IN i_issued_mat WHERE matnr = i_issued_mat-matnr. * getting pricing data CLEAR : i_mbew1 , i_material_des. SELECT matnr bwkey stprs peinh FROM mbew INTO TABLE i_mbew1 FOR ALL ENTRIES IN i_issued_mat WHERE matnr = i_issued_mat-matnr AND bwkey = i_issued_mat-werks. * Selecting material descriptions SELECT matnr maktx FROM makt INTO TABLE i_material_des FOR ALL ENTRIES IN i_issued_mat WHERE spras = sy-langu AND matnr = i_issued_mat-matnr. ENDIF. * prepare selection table for selecting from AFRU LOOP AT i_afvc INTO wa_afvc. wa_plpo_sel-plnty = wa_afvc-plnty. wa_plpo_sel-plnnr = wa_afvc-plnnr. wa_plpo_sel-plnkn = wa_afvc-plnkn. wa_plpo_sel-zaehl = wa_afvc-zaehl. APPEND wa_plpo_sel TO i_plpo_sel. wa_afru_sel-rueck = wa_afvc-rueck. APPEND wa_afru_sel TO i_afru_sel. ENDLOOP. SORT : i_plpo_sel , i_afru_sel. DELETE ADJACENT DUPLICATES FROM i_plpo_sel. DELETE ADJACENT DUPLICATES FROM i_afru_sel. * Retrieve task list information of operations/activity from PLPO table SELECT * FROM plpo INTO TABLE i_plpo FOR ALL ENTRIES IN i_plpo_sel WHERE plnty = i_plpo_sel-plnty AND plnnr = i_plpo_sel-plnnr AND zaehl = i_plpo_sel-zaehl. IF sy-subrc = 0. SORT i_plpo BY plnty plnnr plnkn datuv DESCENDING. ENDIF. * get confirmation data for order and its items SELECT rueck rmzhl ism01 ile01 ism02 ile02 ism03 ile03 ism04 ile04 ism05 ile05 ism06 ile06 stokz FROM afru INTO TABLE i_ord_conf FOR ALL ENTRIES IN i_afru_sel WHERE rueck = i_afru_sel-rueck. ENDIF. IF NOT i_afvc IS INITIAL. LOOP AT i_afvc INTO wa_afvc. *** get master recipe records for selected phases LOOP AT i_plpo INTO wa_plpo WHERE plnty = wa_afvc-plnty AND plnnr = wa_afvc-plnnr AND plnkn = wa_afvc-plnkn AND zaehl = wa_afvc-zaehl. APPEND wa_plpo TO i_plpo1. ENDLOOP. *** get confirmation records for selected phases LOOP AT i_ord_conf INTO wa_ord_conf WHERE rueck = wa_afvc-rueck. APPEND wa_ord_conf TO i_ord_conf1. ENDLOOP. ENDLOOP. SORT i_plpo1 BY plnty plnnr plnkn zaehl datuv DESCENDING. ENDIF. UNASSIGN : %LTl_fs_orders%GT. ENDFORM. " get_bom_info *&--------------------------------------------------------------------* *& Form build_output_tabs *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM build_output_tabs. DATA : l_qty TYPE gamng, l_effic TYPE vgwrt, l_tmp TYPE vgwrt, l_tmp1 TYPE vgwrt, l_lmnga TYPE lmnga, l_v_rc TYPE char1, l_v_kausf TYPE kausf, l_v_sumi TYPE char1, l_v_smeng TYPE ty_menge, l_v_smengs TYPE ty_menge, l_v_smengz TYPE ty_menge, l_wa_afvv TYPE ty_afvv. FIELD-SYMBOLS : %LTl_fs_resb%GT TYPE ty_resb. MOVE 'Formatting Output'(027) TO v_output_text. PERFORM inform_user_of_progress. CLEAR: i_marc1. SELECT matnr werks frtme FROM marc INTO TABLE i_marc1 FOR ALL ENTRIES IN i_orders WHERE matnr = i_orders-plnbez AND werks = i_orders-werks. * Not required to handle, ok if prod unit not found * get parameter IDs SELECT vgwts par01 par02 par03 par04 par05 par06 FROM tc21 INTO TABLE i_param FOR ALL ENTRIES IN i_afvc WHERE vgwts = i_afvc-vgwts. IF sy-subrc = 0. * get parameter ID texts SELECT parid txtlg FROM tc20t INTO TABLE i_param_key FOR ALL ENTRIES IN i_param WHERE spras = sy-langu AND ( parid = i_param-par01 OR parid = i_param-par02 OR parid = i_param-par03 OR parid = i_param-par04 OR parid = i_param-par05 OR parid = i_param-par06 ). ENDIF. * Selecting Work centers descriptions SELECT objid ktext FROM crtx INTO TABLE i_wc_text FOR ALL ENTRIES IN i_afvc WHERE objty = c_objtyp AND objid = i_afvc-arbid AND spras = sy-langu. *Work centers descriptions are optional SELECT matnr bwkey stprs peinh FROM mbew APPENDING TABLE i_mbew1 FOR ALL ENTRIES IN i_orders WHERE matnr = i_orders-plnbez AND bwkey = i_orders-werks. LOOP AT i_orders INTO wa_orders. *** *** Build Order Table *** wa_h_ord-aufnr = wa_orders-aufnr. wa_h_ord-gltrp = wa_orders-gltrp. wa_h_ord-gstrp = wa_orders-gstrp. wa_h_ord-plnbez = wa_orders-plnbez. wa_h_ord-maktx = wa_orders-maktx. wa_h_ord-lmnga = wa_orders-lmnga. wa_h_ord-blmnga = wa_orders-blmnga. wa_h_ord-bmenge = wa_orders-bmenge. wa_h_ord-bgamng = wa_orders-bgamng. wa_h_ord-bbmeng = wa_orders-bbmeng. wa_h_ord-gruom = wa_orders-gruom. wa_h_ord-cfuom = wa_orders-cfuom. wa_h_ord-bsuom = wa_orders-bsuom. CLEAR : wa_marc1. READ TABLE i_marc1 INTO wa_marc1 WITH KEY matnr = wa_orders-plnbez werks = wa_orders-werks. wa_h_ord-frtme = wa_marc1-frtme. wa_h_ord-gewei = wa_orders-gewei. wa_h_ord-ntgew = wa_orders-ntgew. IF rb_pland = c_x. * Planned Production Quantities wa_h_ord-prduom = wa_h_ord-frtme. wa_h_ord-prdqty = wa_h_ord-bgamng. ELSE. * Actual Production Quantities IF rb_prod = c_x. *** Produced Qty wa_h_ord-prdqty = wa_h_ord-bmenge. wa_h_ord-prduom = wa_h_ord-gruom. ELSE. *** Confirmed Qty wa_h_ord-prdqty = wa_h_ord-blmnga. wa_h_ord-prduom = wa_h_ord-cfuom. ENDIF. ENDIF. wa_h_ord-bprdqty = wa_h_ord-prdqty. IF wa_h_ord-prduom %LT%GT wa_h_ord-bsuom. l_qty = wa_h_ord-prdqty. PERFORM conv_to_from_base USING ' ' wa_h_ord-plnbez l_qty wa_h_ord-prduom wa_h_ord-bsuom CHANGING wa_h_ord-prdqty v_conv_rc. IF v_conv_rc = 'X'. wa_h_ord-prdqty = l_qty. wa_h_ord-prduom = wa_h_ord-bsuom. ENDIF. ENDIF. * Resource Information CLEAR : wa_afvc , wa_crhd , wa_wc_text. READ TABLE i_afvc INTO wa_afvc WITH KEY aufpl = wa_orders-aufpl steus = 'YBN1'. IF sy-subrc = 0. READ TABLE i_crhd INTO wa_crhd WITH KEY objid = wa_afvc-arbid. READ TABLE i_wc_text INTO wa_wc_text WITH KEY objid = wa_afvc-arbid. ENDIF. wa_h_ord-botlnck = wa_crhd-arbpl. wa_h_ord-resdesc = wa_wc_text-ktext. * Expected Line Efficiency CLEAR : i_plpo2 , l_effic. LOOP AT i_plpo1 INTO wa_plpo WHERE plnty = wa_orders-plnty AND plnnr = wa_orders-plnnr AND steus = 'YBN1'. IF NOT wa_plpo-vgw02 IS INITIAL. l_effic = wa_plpo-usr04. wa_plpo2 = wa_plpo. APPEND wa_plpo2 TO i_plpo2. ENDIF. ENDLOOP. wa_h_ord-el_effc = l_effic. * Actual Line Efficiency CLEAR : l_tmp , l_tmp1 , l_effic. LOOP AT i_plpo2 INTO wa_plpo2. CLEAR: wa_afvc, wa_afvv , l_effic. READ TABLE i_afvc INTO wa_afvc WITH KEY plnty = wa_plpo2-plnty plnnr = wa_plpo2-plnnr plnkn = wa_plpo2-plnkn zaehl = wa_plpo2-zaehl aufpl = wa_orders-aufpl. IF sy-subrc = 0. READ TABLE i_afvv INTO wa_afvv WITH KEY aufpl = wa_afvc-aufpl aplzl = wa_afvc-aplzl. IF wa_plpo2-vgw02 %LT%GT 0. l_tmp = wa_plpo2-bmsch / wa_plpo2-vgw02. IF l_tmp %LT%GT 0. l_tmp1 = wa_afvv-lmnga / l_tmp. IF wa_afvv-ism02 %LT%GT 0. l_tmp1 = ( l_tmp1 / wa_afvv-ism02 ) * 100. MOVE l_tmp1 TO l_effic. ENDIF. ENDIF. ENDIF. ENDIF. ENDLOOP. wa_h_ord-ac_effc = l_effic. CLEAR : wa_mbew1. READ TABLE i_mbew1 INTO wa_mbew1 WITH KEY matnr = wa_orders-plnbez bwkey = wa_orders-werks. wa_h_ord-stprs = wa_mbew1-stprs. wa_h_ord-peinh = wa_mbew1-peinh. APPEND wa_h_ord TO i_h_ord. *** *** Build Phase Table *** LOOP AT i_afvc INTO wa_afvc WHERE aufnr = wa_orders-aufnr AND aufpl = wa_orders-aufpl. CLEAR : wa_h_phs. wa_h_phs-aufnr = wa_afvc-aufnr. wa_h_phs-aufpl = wa_afvc-aufpl. wa_h_phs-aplzl = wa_afvc-aplzl. wa_h_phs-vornr = wa_afvc-vornr. wa_h_phs-steus = wa_afvc-steus. wa_h_phs-rueck = wa_afvc-rueck. wa_h_phs-vgwts = wa_afvc-vgwts. wa_h_phs-ltxa1 = wa_afvc-ltxa1. IF wa_afvc-cfuom IS INITIAL. CLEAR : wa_afvv, l_lmnga. LOOP AT i_afvv INTO l_wa_afvv WHERE aufpl = wa_afvc-aufpl AND aplzl = wa_afvc-aplzl. wa_h_phs-lmnga = wa_h_phs-lmnga + l_wa_afvv-lmnga. ENDLOOP. wa_h_phs-cfuom = l_wa_afvv-meinh. ELSE. wa_h_phs-lmnga = wa_afvc-lmnga. wa_h_phs-cfuom = wa_afvc-cfuom. * afvv contains std vals for operation qty CLEAR : l_wa_afvv. READ TABLE i_afvv INTO l_wa_afvv WITH KEY aufpl = wa_afvc-aufpl aplzl = wa_afvc-aplzl. ENDIF. wa_h_phs-bsuom = wa_h_ord-bsuom. wa_h_phs-gewei = wa_h_ord-gewei. wa_h_phs-ntgew = wa_h_ord-ntgew. IF wa_h_phs-cfuom %LT%GT wa_h_phs-bsuom. l_lmnga = wa_h_phs-lmnga. PERFORM conv_to_from_base USING 'X' wa_h_ord-plnbez l_lmnga wa_h_phs-cfuom wa_h_phs-bsuom CHANGING wa_h_phs-blmnga v_conv_rc. IF v_conv_rc = 'X'. CLEAR : wa_h_phs-blmnga. ENDIF. ELSE. wa_h_phs-blmnga = wa_h_phs-lmnga. ENDIF. IF rb_actl = c_x AND rb_conf = c_x. wa_h_phs-prduom = wa_h_ord-cfuom. wa_h_phs-prdqty = wa_h_ord-lmnga. wa_h_phs-bprdqty = wa_h_ord-blmnga. ELSE. wa_h_phs-prduom = wa_h_ord-prduom. wa_h_phs-prdqty = wa_h_ord-prdqty. wa_h_phs-bprdqty = wa_h_ord-bprdqty. ENDIF. wa_h_phs-arbid = wa_afvc-arbid. CLEAR : wa_crhd , wa_wc_text. READ TABLE i_crhd INTO wa_crhd WITH KEY objid = wa_afvc-arbid. READ TABLE i_wc_text INTO wa_wc_text WITH KEY objid = wa_afvc-arbid. wa_h_phs-arbpl = wa_crhd-arbpl. wa_h_phs-ktext = wa_wc_text-ktext. IF wa_h_phs-steus = 'YBN1'. * Expected Line Efficiency CLEAR : i_plpo2 , l_effic. LOOP AT i_plpo1 INTO wa_plpo WHERE plnty = wa_afvc-plnty AND plnnr = wa_afvc-plnnr AND plnkn = wa_afvc-plnkn AND zaehl = wa_afvc-zaehl AND steus = 'YBN1'. IF NOT wa_plpo-vgw02 IS INITIAL. l_effic = wa_plpo-usr04. wa_plpo2 = wa_plpo. APPEND wa_plpo2 TO i_plpo2. ENDIF. ENDLOOP. wa_h_phs-el_effc = l_effic. * Actual Line Efficiency CLEAR : l_tmp , l_tmp1 , l_effic. LOOP AT i_plpo2 INTO wa_plpo2. CLEAR: l_effic. IF wa_plpo2-vgw02 %LT%GT 0. l_tmp = wa_plpo2-bmsch / wa_plpo2-vgw02. IF l_tmp %LT%GT 0. l_tmp1 = l_wa_afvv-lmnga / l_tmp. IF l_wa_afvv-ism02 %LT%GT 0. l_tmp1 = ( l_tmp1 / l_wa_afvv-ism02 ) * 100. MOVE l_tmp1 TO l_effic. wa_h_phs-runtime = c_x. ENDIF. ENDIF. ENDIF. ENDLOOP. wa_h_phs-ac_effc = l_effic. ENDIF. *** *** Build Phase-Activity Table *** CLEAR : l_v_rc. PERFORM build_act_tab USING wa_orders-aufnr wa_orders-plnbez wa_h_phs-bprdqty wa_h_phs-bsuom wa_orders-gmein wa_h_phs-el_effc wa_afvc l_wa_afvv CHANGING l_v_rc. IF l_v_rc = c_x. APPEND wa_h_phs TO i_h_phs. ENDIF. *** *** Build Material-Phase Table *** LOOP AT i_resb ASSIGNING %LTl_fs_resb%GT WHERE aufnr = wa_orders-aufnr. IF %LTl_fs_resb%GT-aufpl = wa_afvc-aufpl AND %LTl_fs_resb%GT-vornr = wa_afvc-vornr AND %LTl_fs_resb%GT-aplzl = wa_afvc-aplzl. CLEAR : wa_resb. PERFORM build_mat_tab USING %LTl_fs_resb%GT. %LTl_fs_resb%GT-flagp = c_y. ELSEIF %LTl_fs_resb%GT-flagp IS INITIAL. %LTl_fs_resb%GT-flagp = 'N'. ENDIF. ENDLOOP. ENDLOOP. **** **** Add Extra Materials to Material-Phase Table **** LOOP AT i_resb ASSIGNING %LTl_fs_resb%GT WHERE aufnr = wa_orders-aufnr AND flagp = 'N'. CLEAR : wa_resb. PERFORM build_mat_tab USING %LTl_fs_resb%GT. ENDLOOP. ENDLOOP. SORT i_h_ord BY aufnr. SORT i_h_mat BY aufnr aufpl aplzl matnr byprod. SORT i_h_phs BY aufnr vornr. SORT i_h_act BY aufnr vornr. LOOP AT i_h_mat INTO wa_h_mat. CLEAR : l_v_sumi. AT END OF byprod. l_v_sumi = c_x. ENDAT. wa_h_mat-sumi = l_v_sumi. MODIFY i_h_mat FROM wa_h_mat TRANSPORTING sumi. ENDLOOP. ENDFORM. "build_output_tabs *&--------------------------------------------------------------------* *& Form build_mat_tab *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM build_mat_tab USING fp_resb TYPE ty_resb. DATA : l_v_kausf TYPE kausf, l_v_smeng TYPE ty_menge, l_v_smengs TYPE ty_menge, l_v_smengz TYPE ty_menge. wa_resb = fp_resb. CLEAR : wa_h_mat , l_v_smeng , l_v_smengs , l_v_smengz. CHECK wa_resb-postp %LT%GT 'N' AND NOT ( wa_resb-kzkup = c_x AND wa_resb-matnr = wa_h_ord-plnbez ). wa_h_mat-aufnr = wa_resb-aufnr. wa_h_mat-aufpl = wa_resb-aufpl. wa_h_mat-aplzl = wa_resb-aplzl. wa_h_mat-vornr = wa_resb-vornr. wa_h_mat-matnr = wa_resb-matnr. CLEAR : wa_mara. READ TABLE i_mara INTO wa_mara WITH KEY matnr = wa_h_mat-matnr. CLEAR : wa_msegs. READ TABLE i_msegs INTO wa_msegs WITH KEY aufnr = wa_h_mat-aufnr matnr = wa_h_mat-matnr bwart = wa_resb-bwart. IF sy-subrc %LT%GT 0. READ TABLE i_msegs INTO wa_msegs WITH KEY aufnr = wa_h_mat-aufnr matnr = wa_h_mat-matnr. ENDIF. CLEAR : wa_ordmats. READ TABLE i_ordmats INTO wa_ordmats WITH KEY aufnr = wa_resb-aufnr matnr = wa_resb-matnr stlty = wa_resb-stlty stlnr = wa_resb-stlnr stlkn = wa_resb-stlkn stpoz = wa_resb-stpoz. IF sy-subrc = 0. wa_h_mat-maktx = wa_ordmats-ojtxp. wa_h_mat-stprs = wa_ordmats-stprs. wa_h_mat-peinh = wa_ordmats-peinh. wa_h_mat-bomuom = wa_ordmats-meins. IF wa_orders-bbmeng %LT%GT 0. l_v_smeng = wa_ordmats-mnglg / wa_orders-bbmeng. l_v_smengs = wa_ordmats-mnglgs / wa_orders-bbmeng. l_v_smengz = wa_ordmats-mnglgz / wa_orders-bbmeng. ENDIF. wa_h_mat-byprod = wa_ordmats-byprod. ELSE. CLEAR : wa_mbew1. READ TABLE i_mbew1 INTO wa_mbew1 WITH KEY matnr = wa_h_mat-matnr bwkey = p_werks. CLEAR : wa_material_des. READ TABLE i_material_des INTO wa_material_des WITH KEY matnr = wa_h_mat-matnr. wa_h_mat-maktx = wa_material_des-maktx. wa_h_mat-stprs = wa_mbew1-stprs. wa_h_mat-peinh = wa_mbew1-peinh. wa_h_mat-bomuom = wa_resb-meins. wa_resb-bmeins = wa_mara-meins. IF wa_mara-meins %LT%GT wa_resb-meins. PERFORM conv_to_from_base USING 'X' wa_resb-matnr wa_resb-bdmng wa_resb-meins wa_mara-meins CHANGING wa_resb-bbdmng v_conv_rc. IF v_conv_rc = 'X'. CLEAR : wa_resb-bbdmng. ENDIF. ELSE. wa_resb-bbdmng = wa_resb-bdmng. ENDIF. wa_ordmats-rgekz = wa_resb-rgekz. ENDIF. IF rb_nflsh %LT%GT c_x OR wa_ordmats-rgekz EQ c_x. wa_h_mat-stdusg = l_v_smeng * wa_h_ord-bprdqty. wa_h_mat-stdusgs = l_v_smengs * wa_h_ord-bprdqty. wa_h_mat-stdusgz = l_v_smengz * wa_h_ord-bprdqty. ELSE. CLEAR : wa_h_mat-stdusg. ENDIF. IF wa_h_mat-byprod = c_x. wa_h_mat-actusg = wa_msegs-bmenge5. ELSEIF wa_resb-kzkup = c_x. wa_h_mat-actusg = 0 - wa_msegs-bmenge1. ELSE. wa_h_mat-actusg = wa_msegs-bmenge2. ENDIF. wa_h_mat-bsuom = wa_mara-meins. wa_h_mat-gewei = wa_mara-gewei. wa_h_mat-ntgew = wa_mara-ntgew. IF wa_h_mat-actusg %LT%GT 0. wa_h_mat-gruom = wa_msegs-erfme. ENDIF. wa_h_mat-bwart = wa_resb-bwart. "NEEL 30/06/2005 APPEND wa_h_mat TO i_h_mat. wa_matn-matnr = wa_h_mat-matnr. wa_matn-bwart = wa_h_mat-bwart. "23-06-2005 COLLECT wa_matn INTO i_matn. ENDFORM. "build_mat_tab *&--------------------------------------------------------------------* *& Form build_act_tab *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM build_act_tab USING fp_aufnr TYPE aufnr fp_matnr TYPE matnr fp_bqty TYPE gamng fp_buom TYPE meins fp_gmein TYPE meins fp_effic TYPE vgwrt fp_afvc TYPE ty_afvc fp_afvv TYPE ty_afvv CHANGING fp_rc TYPE char1. DATA : l_ism01 TYPE ru_ismng, l_ile01 TYPE co_ismngeh, l_ism02 TYPE ru_ismng, l_ile02 TYPE co_ismngeh, l_ism03 TYPE ru_ismng, l_ile03 TYPE co_ismngeh, l_ism04 TYPE ru_ismng, l_ile04 TYPE co_ismngeh, l_ism05 TYPE ru_ismng, l_ile05 TYPE co_ismngeh, l_ism06 TYPE ru_ismng, l_ile06 TYPE co_ismngeh, l_effic TYPE vgwrt, l_v_bmsch TYPE bmsch, l_pqty TYPE gamng. DATA: l_vgw01 TYPE vgwrt, l_vgw02 TYPE vgwrt, l_vgw03 TYPE vgwrt, l_vgw04 TYPE vgwrt, l_vgw05 TYPE vgwrt, l_vgw06 TYPE vgwrt. CLEAR : wa_h_act. wa_h_act-aufnr = fp_aufnr. wa_h_act-aufpl = fp_afvc-aufpl. wa_h_act-aplzl = fp_afvc-aplzl. wa_h_act-vornr = fp_afvc-vornr. wa_h_act-vgwts = fp_afvc-vgwts. l_effic = fp_effic / 100. IF l_effic = 0. l_effic = 1. ENDIF. wa_afvv = fp_afvv. CHECK NOT wa_afvv IS INITIAL. wa_h_act-mgvrg = wa_afvv-mgvrg. wa_h_act-meinh = wa_afvv-meinh. wa_h_act-bmsch = wa_afvv-bmsch. CLEAR : wa_param. READ TABLE i_param INTO wa_param WITH KEY vgwts = wa_h_act-vgwts. * Actual Usage CLEAR : wa_ord_conf1. LOOP AT i_ord_conf1 INTO wa_ord_conf1 WHERE rueck = fp_afvc-rueck. IF wa_ord_conf1-stokz IS INITIAL. l_ism01 = l_ism01 + wa_ord_conf1-ism01. l_ism02 = l_ism02 + wa_ord_conf1-ism02. l_ism03 = l_ism03 + wa_ord_conf1-ism03. l_ism04 = l_ism04 + wa_ord_conf1-ism04. l_ism05 = l_ism05 + wa_ord_conf1-ism05. l_ism06 = l_ism06 + wa_ord_conf1-ism06. ELSE. l_ism01 = l_ism01 - wa_ord_conf1-ism01. l_ism02 = l_ism02 - wa_ord_conf1-ism02. l_ism03 = l_ism03 - wa_ord_conf1-ism03. l_ism04 = l_ism04 - wa_ord_conf1-ism04. l_ism05 = l_ism05 - wa_ord_conf1-ism05. l_ism06 = l_ism06 - wa_ord_conf1-ism06. ENDIF. ENDLOOP. l_ile01 = wa_ord_conf1-ile01. l_ile02 = wa_ord_conf1-ile02. l_ile03 = wa_ord_conf1-ile03. l_ile04 = wa_ord_conf1-ile04. l_ile05 = wa_ord_conf1-ile05. l_ile06 = wa_ord_conf1-ile06. CLEAR : fp_rc , l_pqty. l_pqty = fp_bqty. l_v_bmsch = wa_afvv-bmsch. IF wa_afvv-umren %GT 0. l_v_bmsch = l_v_bmsch * ( wa_afvv-umrez / wa_afvv-umren ). ENDIF. IF wa_afvv-meinh %LT%GT fp_buom. PERFORM conv_to_from_base USING 'X' fp_matnr l_v_bmsch wa_afvv-meinh fp_buom CHANGING wa_afvv-bmsch v_conv_rc. IF v_conv_rc = 'X'. wa_afvv-bmsch = l_v_bmsch. ENDIF. *** Begin of Change on 25-05-2005 IF fp_afvc-vgwts+0(3) = 'YGE'. PERFORM conv_to_from_base USING 'X' fp_matnr wa_afvv-vgw01 wa_afvv-meinh fp_buom CHANGING l_vgw01 v_conv_rc. IF v_conv_rc = space. wa_afvv-vgw01 = l_vgw01. ENDIF. ENDIF. PERFORM conv_to_from_base USING 'X' fp_matnr wa_afvv-vgw02 wa_afvv-meinh fp_buom CHANGING l_vgw02 v_conv_rc. IF v_conv_rc = space. wa_afvv-vgw02 = l_vgw02. ENDIF. IF fp_afvc-vgwts+0(3) = 'YGE'. PERFORM conv_to_from_base USING 'X' fp_matnr wa_afvv-vgw03 wa_afvv-meinh fp_buom CHANGING l_vgw03 v_conv_rc. IF v_conv_rc = space. wa_afvv-vgw03 = l_vgw03. ENDIF. ENDIF. PERFORM conv_to_from_base USING 'X' fp_matnr wa_afvv-vgw04 wa_afvv-meinh fp_buom CHANGING l_vgw04 v_conv_rc. IF v_conv_rc = space. wa_afvv-vgw04 = l_vgw04. ENDIF. PERFORM conv_to_from_base USING 'X' fp_matnr wa_afvv-vgw05 wa_afvv-meinh fp_buom CHANGING l_vgw05 v_conv_rc. IF v_conv_rc = space. wa_afvv-vgw05 = l_vgw05. ENDIF. PERFORM conv_to_from_base USING 'X' fp_matnr wa_afvv-vgw06 wa_afvv-meinh fp_buom CHANGING l_vgw06 v_conv_rc. IF v_conv_rc = space. wa_afvv-vgw06 = l_vgw06. ENDIF. *** End of Change on 25-05-2005 ENDIF. IF NOT fp_afvc-lar01 IS INITIAL OR NOT fp_afvc-lar02 IS INITIAL OR NOT fp_afvc-lar03 IS INITIAL OR NOT fp_afvc-lar04 IS INITIAL OR NOT fp_afvc-lar05 IS INITIAL OR NOT fp_afvc-lar06 IS INITIAL. IF NOT fp_afvc-lar01 IS INITIAL OR NOT wa_afvv-vgw01 IS INITIAL. CLEAR : wa_param_key. READ TABLE i_param_key INTO wa_param_key WITH KEY parid = wa_param-par01. wa_h_act-parxx = wa_param-par01. wa_h_act-txtxx = wa_param_key-txtlg. wa_h_act-ismxx = l_ism01. wa_h_act-ilexx = l_ile01. IF fp_afvc-sumnr = 0. wa_h_act-vgwxx = wa_afvv-vgw01. wa_h_act-vgexx = wa_afvv-vge01. ELSE. wa_h_act-vgwxx = wa_afvv-vgw01 * ( l_pqty / wa_afvv-bmsch ). wa_h_act-vgexx = wa_afvv-vge01. ENDIF. wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. PERFORM get_act_cost USING fp_afvc-arbid fp_afvc-lar01 CHANGING wa_h_act-togxx wa_h_act-toexx. APPEND wa_h_act TO i_h_act. wa_parn-parxx = wa_h_act-parxx. COLLECT wa_parn INTO i_parn. fp_rc = c_x. ENDIF. IF NOT fp_afvc-lar02 IS INITIAL OR NOT wa_afvv-vgw02 IS INITIAL. CLEAR : wa_param_key. READ TABLE i_param_key INTO wa_param_key WITH KEY parid = wa_param-par02. wa_h_act-parxx = wa_param-par02. wa_h_act-txtxx = wa_param_key-txtlg. wa_h_act-ismxx = l_ism02. wa_h_act-ilexx = l_ile02. * Begin of MOD-002++ * wa_h_act-vgwxx = wa_afvv-vgw02 * ( l_pqty / wa_afvv-bmsch ). * wa_h_act-vgwxx = wa_h_act-vgwxx / l_effic. wa_h_act-vgwxx = ( wa_afvv-vgw02 * l_pqty / wa_afvv-bmsch ) / l_effic. * End of MOD-002++ wa_h_act-vgexx = wa_afvv-vge02. wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. PERFORM get_act_cost USING fp_afvc-arbid fp_afvc-lar02 CHANGING wa_h_act-togxx wa_h_act-toexx. APPEND wa_h_act TO i_h_act. wa_parn-parxx = wa_h_act-parxx. COLLECT wa_parn INTO i_parn. fp_rc = c_x. ENDIF. IF NOT fp_afvc-lar03 IS INITIAL OR NOT wa_afvv-vgw03 IS INITIAL. CLEAR : wa_param_key. READ TABLE i_param_key INTO wa_param_key WITH KEY parid = wa_param-par03. wa_h_act-parxx = wa_param-par03. wa_h_act-txtxx = wa_param_key-txtlg. wa_h_act-ismxx = l_ism03. wa_h_act-ilexx = l_ile03. IF fp_afvc-sumnr = 0. wa_h_act-vgwxx = wa_afvv-vgw03. wa_h_act-vgexx = wa_afvv-vge03. ELSE. wa_h_act-vgwxx = wa_afvv-vgw03 * ( l_pqty / wa_afvv-bmsch ). wa_h_act-vgexx = wa_afvv-vge03. ENDIF. wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. PERFORM get_act_cost USING fp_afvc-arbid fp_afvc-lar03 CHANGING wa_h_act-togxx wa_h_act-toexx. APPEND wa_h_act TO i_h_act. wa_parn-parxx = wa_h_act-parxx. COLLECT wa_parn INTO i_parn. fp_rc = c_x. ENDIF. IF NOT fp_afvc-lar04 IS INITIAL OR NOT wa_afvv-vgw04 IS INITIAL. CLEAR : wa_param_key. READ TABLE i_param_key INTO wa_param_key WITH KEY parid = wa_param-par04. wa_h_act-parxx = wa_param-par04. wa_h_act-txtxx = wa_param_key-txtlg. wa_h_act-ismxx = l_ism04. wa_h_act-ilexx = l_ile04. * Begin of MOD-002++ * wa_h_act-vgwxx = wa_afvv-vgw04 * ( l_pqty / wa_afvv-bmsch ). * wa_h_act-vgwxx = wa_h_act-vgwxx / l_effic. wa_h_act-vgwxx = ( wa_afvv-vgw04 * l_pqty / wa_afvv-bmsch ) / l_effic. * End of MOD-002++ wa_h_act-vgexx = wa_afvv-vge04. wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. PERFORM get_act_cost USING fp_afvc-arbid fp_afvc-lar04 CHANGING wa_h_act-togxx wa_h_act-toexx. APPEND wa_h_act TO i_h_act. wa_parn-parxx = wa_h_act-parxx. COLLECT wa_parn INTO i_parn. fp_rc = c_x. ENDIF. IF NOT fp_afvc-lar05 IS INITIAL OR NOT wa_afvv-vgw05 IS INITIAL. CLEAR : wa_param_key. READ TABLE i_param_key INTO wa_param_key WITH KEY parid = wa_param-par05. wa_h_act-parxx = wa_param-par05. wa_h_act-txtxx = wa_param_key-txtlg. wa_h_act-ismxx = l_ism05. wa_h_act-ilexx = l_ile05. wa_h_act-vgwxx = wa_afvv-vgw05 * ( l_pqty / wa_afvv-bmsch ). wa_h_act-vgexx = wa_afvv-vge05. wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. PERFORM get_act_cost USING fp_afvc-arbid fp_afvc-lar05 CHANGING wa_h_act-togxx wa_h_act-toexx. APPEND wa_h_act TO i_h_act. wa_parn-parxx = wa_h_act-parxx. COLLECT wa_parn INTO i_parn. fp_rc = c_x. ENDIF. IF NOT fp_afvc-lar06 IS INITIAL OR NOT wa_afvv-vgw06 IS INITIAL. CLEAR : wa_param_key. READ TABLE i_param_key INTO wa_param_key WITH KEY parid = wa_param-par06. wa_h_act-parxx = wa_param-par06. wa_h_act-txtxx = wa_param_key-txtlg. wa_h_act-ismxx = l_ism06. wa_h_act-ilexx = l_ile06. wa_h_act-vgwxx = wa_afvv-vgw06 * ( l_pqty / wa_afvv-bmsch ). wa_h_act-vgexx = wa_afvv-vge06. wa_h_act-stdvar = wa_h_act-vgwxx - wa_h_act-ismxx. PERFORM get_act_cost USING fp_afvc-arbid fp_afvc-lar06 CHANGING wa_h_act-togxx wa_h_act-toexx. APPEND wa_h_act TO i_h_act. wa_parn-parxx = wa_h_act-parxx. COLLECT wa_parn INTO i_parn. fp_rc = c_x. ENDIF. ENDIF. ENDFORM. "build_act_tab *&--------------------------------------------------------------------* *& Form get_act_cost *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM get_act_cost USING fp_arbid TYPE cr_objid fp_larxx TYPE lstar CHANGING fp_tog001 TYPE togxxx fp_toe001 TYPE toexxx. DATA: l_kokrs TYPE kokrs, l_kostl TYPE kostl, l_objnr TYPE j_objnr. CLEAR: l_kokrs, l_kostl, l_objnr, fp_tog001. fp_toe001 = 1. SELECT SINGLE kokrs kostl FROM crco INTO (l_kokrs, l_kostl) WHERE objty = c_a AND objid = fp_arbid AND lstar = fp_larxx. IF sy-subrc = 0. SELECT SINGLE objnr FROM cssl INTO l_objnr WHERE kokrs = l_kokrs AND kostl = l_kostl AND lstar = fp_larxx AND gjahr = sy-datum(4). IF sy-subrc = 0. SELECT SINGLE tog001 toe001 FROM cost INTO (fp_tog001, fp_toe001) WHERE objnr = l_objnr AND gjahr = sy-datum(4) AND versn = c_000. fp_tog001 = fp_tog001 / 10. fp_toe001 = fp_toe001 / 10. IF fp_toe001 = 0. fp_toe001 = 1. ENDIF. ENDIF. ENDIF. ENDFORM. "get_act_cost *&---------------------------------------------------------------------* *& Form output *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM output. CASE c_x. WHEN rb_detl. v_rep = c_detl. PERFORM display_detail_report. WHEN rb_summ. v_rep = c_sums. PERFORM display_summary_report. WHEN rb_phase. v_rep = c_phas. PERFORM display_phase_report. ENDCASE. PERFORM tree_rebuild. ENDFORM. " output *&--------------------------------------------------------------------* *& Form display_detail_report *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM display_detail_report. DATA : l_date_low TYPE char10, l_date_high TYPE char10, l_prdqty TYPE gamng, l_wprdqty TYPE menge_d, l_prduom TYPE meins, l_uom TYPE meins, l_prdq(20), l_effic TYPE char16, l_act TYPE char16, l_std TYPE char16, l_amenge TYPE menge_d, l_smenge TYPE menge_d, l_menge TYPE menge_d, l_aqty TYPE char18, l_sqty TYPE char18, l_svar TYPE char18, l_svarp TYPE char18, l_aqtys TYPE char18, l_sqtys TYPE char18, l_svars TYPE char18, l_aqtyg TYPE char18, l_sqtyg TYPE char18, l_svarg TYPE char18, l_matuom TYPE meins, l_stduom TYPE meins, l_varuom TYPE meins, l_astprs TYPE ty_stprs, l_sstprs TYPE ty_stprs, l_stprs TYPE ty_stprs, l_total1 TYPE char1, l_total2 TYPE char1, l_total3 TYPE char1, l_totalg1 TYPE char1, l_totalg2 TYPE char1, l_totalg3 TYPE char1, l_aplzl TYPE co_aplzl, l_wa_act TYPE ty_hier_act, l_wa_mat TYPE ty_hier_mat_sum, l_wa_matg TYPE ty_hier_mat_sum. PERFORM pfstatus. SET PF-STATUS 'MAIN' EXCLUDING i_fcode. SET TITLEBAR 'VARI' WITH text-066. MOVE 'Display Detail Report'(028) TO v_output_text. PERFORM inform_user_of_progress. * Clearing local variables CLEAR wa_nodestab. REFRESH i_nodestab. wa_nodestab-id = c_1_1. wa_nodestab-tlevel = c_1. wa_nodestab-text = 'Production Variances'(031). wa_nodestab-tlength = c_20. wa_nodestab-compress = c_x. APPEND wa_nodestab TO i_nodestab. CLEAR : l_wa_matg , l_sqtyg , l_aqtyg , l_svarg, l_totalg1 , l_totalg2 , l_totalg3. LOOP AT i_h_ord INTO wa_h_ord. CLEAR: wa_nodestab, l_date_low, l_date_high, l_prdqty, l_prduom. wa_nodestab-id = c_2_1. wa_nodestab-tlevel = c_2. wa_nodestab-parent = c_1_1. * Order Number text wa_nodestab-text = 'Order Num:'(032). wa_nodestab-tlength = c_12. wa_nodestab-tcolor = c_1. * Order number WRITE wa_h_ord-aufnr TO wa_nodestab-text1 NO-ZERO. wa_nodestab-tlength1 = c_12. wa_nodestab-tcolor1 = c_1. * Date Range WRITE wa_h_ord-gstrp TO l_date_low. WRITE wa_h_ord-gltrp TO l_date_high. CONCATENATE l_date_low c_hyp l_date_high INTO wa_nodestab-text2 SEPARATED BY space. wa_nodestab-tlength2 = c_25. wa_nodestab-tcolor2 = c_1. * Material Number WRITE wa_h_ord-plnbez TO wa_nodestab-text3 NO-ZERO. wa_nodestab-tlength3 = c_18. wa_nodestab-tcolor3 = c_1. * Material Description wa_nodestab-text4 = wa_h_ord-maktx. wa_nodestab-tlength4 = c_33. wa_nodestab-tcolor4 = c_1. * Produced Quantity / Confirmed Quantity l_prdqty = wa_h_ord-prdqty. l_prduom = wa_h_ord-prduom. * convert to KG? IF rb_kgm = c_x AND l_prduom %LT%GT 'KG'. IF wa_h_ord-bsuom %LT%GT 'KG'. PERFORM convert_to_kg USING wa_h_ord-plnbez wa_h_ord-bsuom wa_h_ord-gewei wa_h_ord-ntgew wa_h_ord-bprdqty CHANGING l_wprdqty v_conv_rc. IF v_conv_rc %LT%GT 'X'. l_prdqty = l_wprdqty. l_prduom = 'KG'. ENDIF. ELSE. l_prdqty = wa_h_ord-bprdqty. l_prduom = 'KG'. ENDIF. ENDIF. WRITE l_prdqty TO l_prdq UNIT l_prduom. WRITE l_prduom TO l_uom. *** text for Order Qty IF rb_pland = c_x. ** Planned Production CONCATENATE 'Plan Qty:'(076) l_prdq l_uom INTO wa_nodestab-text5 SEPARATED BY space. ELSE. ** Actual Production IF rb_prod = c_x. * Produced CONCATENATE 'Prod Qty:'(033) l_prdq l_uom INTO wa_nodestab-text5 SEPARATED BY space. ELSE. * Confirmed CONCATENATE 'Conf Qty:'(034) l_prdq l_uom INTO wa_nodestab-text5 SEPARATED BY space. ENDIF. ENDIF. CONDENSE : wa_nodestab-text5. wa_nodestab-tlength5 = c_35. wa_nodestab-tcolor5 = c_1. APPEND wa_nodestab TO i_nodestab. * Resource Information CLEAR : wa_nodestab , l_effic. wa_nodestab-id = c_3_1. wa_nodestab-tlevel = c_3. wa_nodestab-parent = c_2_1. wa_nodestab-text = 'Resource:'(035). wa_nodestab-tlength = c_14. wa_nodestab-tcolor = c_4. wa_nodestab-text1 = wa_h_ord-botlnck. wa_nodestab-tlength1 = c_8. wa_nodestab-tcolor1 = c_4. wa_nodestab-text2 = wa_h_ord-resdesc. wa_nodestab-tlength2 = c_37. wa_nodestab-tcolor2 = c_4. l_effic = wa_h_ord-el_effc. CONCATENATE 'Exp. Line Eff.'(036) l_effic c_perc INTO wa_nodestab-text3 SEPARATED BY space. CONDENSE wa_nodestab-text3. wa_nodestab-tlength3 = c_30. wa_nodestab-tcolor3 = c_4. l_effic = wa_h_ord-ac_effc. CONCATENATE 'Act. Line Eff.'(037) l_effic c_perc INTO wa_nodestab-text4 SEPARATED BY space. CONDENSE wa_nodestab-text4. wa_nodestab-tlength4 = c_30. wa_nodestab-tcolor4 = c_4. APPEND wa_nodestab TO i_nodestab. * Phase Information READ TABLE i_h_act INTO wa_h_act WITH KEY aufnr = wa_h_ord-aufnr. IF sy-subrc = 0. CLEAR : wa_nodestab. wa_nodestab-id = c_3_2. wa_nodestab-tlevel = c_3. wa_nodestab-parent = c_2_1. wa_nodestab-text = 'Phase'(038). wa_nodestab-tlength = c_8. wa_nodestab-tcolor = c_4. wa_nodestab-tlength1 = c_42. * wa_nodestab-tcolor1 = c_4. IF rb_fiscl = c_x. CONCATENATE 'Actual Usage'(040) v_waers INTO wa_nodestab-text2 SEPARATED BY space. ELSE. CONCATENATE 'Actual Usage'(040) 'UoM' INTO wa_nodestab-text2 SEPARATED BY space. ENDIF. wa_nodestab-tlength2 = c_20. wa_nodestab-tcolor2 = c_4. IF rb_fiscl = c_x. CONCATENATE 'Standard Usage'(041) v_waers INTO wa_nodestab-text3 SEPARATED BY space. ELSE. CONCATENATE 'Standard Usage'(041) 'UoM' INTO wa_nodestab-text3 SEPARATED BY space. ENDIF. wa_nodestab-tlength3 = c_20. wa_nodestab-tcolor3 = c_4. IF rb_fiscl = c_x. CONCATENATE 'Standard Usage Var'(042) v_waers INTO wa_nodestab-text4 SEPARATED BY space. ELSE. CONCATENATE 'Standard Usage Var'(042) 'UoM' INTO wa_nodestab-text4 SEPARATED BY space. ENDIF. wa_nodestab-tlength4 = c_24. wa_nodestab-tcolor4 = c_4. CONCATENATE 'Standard Usage Var'(042) c_perc INTO wa_nodestab-text5 SEPARATED BY space. wa_nodestab-tlength5 = c_20. wa_nodestab-tcolor5 = c_4. APPEND wa_nodestab TO i_nodestab. *** Activities CLEAR : flg_color, l_act , l_std , l_svar , l_svarp , l_wa_act , l_total1 , l_total2 , l_aplzl. LOOP AT i_h_act INTO wa_h_act WHERE aufnr = wa_h_ord-aufnr. IF l_aplzl %LT%GT wa_h_act-aplzl. CLEAR : wa_afvc. READ TABLE i_h_phs INTO wa_h_phs WITH KEY aufnr = wa_h_act-aufnr aufpl = wa_h_act-aufpl aplzl = wa_h_act-aplzl. l_aplzl = wa_h_act-aplzl. ENDIF. CLEAR wa_nodestab. wa_nodestab-id = c_4_1. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_2. wa_nodestab-text = wa_h_act-vornr. wa_nodestab-tlength = c_4. CONCATENATE wa_h_phs-steus wa_h_phs-arbpl wa_h_act-txtxx INTO wa_nodestab-text1 SEPARATED BY ' '. wa_nodestab-tlength1 = c_42. IF rb_quant = c_x. WRITE : wa_h_act-ismxx TO l_act UNIT wa_h_act-ilexx NO-GROUPING, wa_h_act-ilexx TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text2 SEPARATED BY space. wa_nodestab-tlength2 = c_20. WRITE : wa_h_act-vgwxx TO l_std UNIT wa_h_act-vgexx NO-GROUPING, wa_h_act-vgexx TO l_uom. CONCATENATE l_std l_uom INTO wa_nodestab-text3 SEPARATED BY space. wa_nodestab-tlength3 = c_20. WRITE : wa_h_act-stdvar TO l_svar UNIT wa_h_act-vgexx NO-GROUPING, wa_h_act-vgexx TO l_uom. CONCATENATE l_svar l_uom INTO wa_nodestab-text4 SEPARATED BY space. wa_nodestab-tlength4 = c_24. IF wa_h_act-ismxx %LT%GT 0. IF l_total2 %LT%GT c_x. l_total2 = c_x. l_wa_act-ilexx = wa_h_act-ilexx. ENDIF. IF l_wa_act-ilexx = wa_h_act-ilexx. l_wa_act-ismxx = l_wa_act-ismxx + wa_h_act-ismxx. l_wa_act-ilexx = wa_h_act-ilexx. ELSEIF wa_h_act-ismxx %LT%GT 0. CLEAR : l_wa_act-ismxx , l_wa_act-ilexx. ENDIF. ENDIF. IF wa_h_act-vgwxx %LT%GT 0. IF l_total1 %LT%GT c_x. l_total1 = c_x. l_wa_act-vgexx = wa_h_act-vgexx. ENDIF. IF l_wa_act-vgexx = wa_h_act-vgexx. l_wa_act-vgwxx = l_wa_act-vgwxx + wa_h_act-vgwxx. l_wa_act-stdvar = l_wa_act-stdvar + wa_h_act-stdvar. l_wa_act-vgexx = wa_h_act-vgexx. ELSEIF wa_h_act-vgwxx %LT%GT 0. CLEAR : l_wa_act-vgwxx , l_wa_act-vgexx, l_wa_act-stdvar. ENDIF. ENDIF. IF wa_h_act-vgwxx %LT%GT 0. wa_h_act-varper = ( wa_h_act-stdvar / wa_h_act-vgwxx ) * 100 . ENDIF. ELSE. wa_h_act-actu = wa_h_act-ismxx * ( wa_h_act-togxx / wa_h_act-toexx ). WRITE : wa_h_act-actu TO l_act CURRENCY v_waers NO-GROUPING, v_waers TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text2 SEPARATED BY space. wa_nodestab-tlength2 = c_20. wa_h_act-stdu = wa_h_act-vgwxx * ( wa_h_act-togxx / wa_h_act-toexx ). WRITE : wa_h_act-stdu TO l_std CURRENCY v_waers NO-GROUPING. CONCATENATE l_std l_uom INTO wa_nodestab-text3 SEPARATED BY space. wa_nodestab-tlength3 = c_20. wa_h_act-varu = wa_h_act-stdvar * ( wa_h_act-togxx / wa_h_act-toexx ). WRITE wa_h_act-varu TO l_svar CURRENCY v_waers NO-GROUPING. CONCATENATE l_svar l_uom INTO wa_nodestab-text4 SEPARATED BY space. wa_nodestab-tlength4 = c_24. l_wa_act-actu = l_wa_act-actu + wa_h_act-actu. l_wa_act-stdu = l_wa_act-stdu + wa_h_act-stdu. l_wa_act-varu = l_wa_act-varu + wa_h_act-varu. IF wa_h_act-stdu %LT%GT 0. wa_h_act-varper = ( wa_h_act-varu / wa_h_act-stdu ) * 100. ENDIF. ENDIF. WRITE wa_h_act-varper TO l_svarp NO-GROUPING DECIMALS 2. CONCATENATE l_svarp c_perc INTO wa_nodestab-text5 SEPARATED BY space. wa_nodestab-tlength5 = c_20. IF flg_color = c_x. CLEAR flg_color. wa_nodestab-tcolor = c_3. wa_nodestab-tcolor1 = c_3. wa_nodestab-tcolor2 = c_3. wa_nodestab-tcolor3 = c_3. wa_nodestab-tcolor4 = c_3. wa_nodestab-tcolor5 = c_3. wa_nodestab-tcolor6 = c_3. wa_nodestab-tcolor7 = c_3. wa_nodestab-tcolor8 = c_3. ELSE. flg_color = c_x. wa_nodestab-tcolor = c_2. wa_nodestab-tcolor1 = c_2. wa_nodestab-tcolor2 = c_2. wa_nodestab-tcolor3 = c_2. wa_nodestab-tcolor4 = c_2. wa_nodestab-tcolor5 = c_2. wa_nodestab-tcolor6 = c_2. wa_nodestab-tcolor7 = c_2. wa_nodestab-tcolor8 = c_2. ENDIF. APPEND wa_nodestab TO i_nodestab. ENDLOOP. *** Displaying Activity Subtotals CLEAR wa_nodestab. wa_nodestab-id = c_4_1. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_2. wa_nodestab-text = 'Activity Totals'(074). wa_nodestab-tlength = c_20. wa_nodestab-tcolor = c_6. wa_nodestab-text1 = space. wa_nodestab-tlength1 = c_26. wa_nodestab-tcolor1 = c_6. IF rb_quant = c_x. WRITE : l_wa_act-ismxx TO l_act UNIT l_wa_act-ilexx NO-GROUPING, l_wa_act-vgwxx TO l_std UNIT l_wa_act-vgexx NO-GROUPING, l_wa_act-stdvar TO l_svar UNIT l_wa_act-vgexx NO-GROUPING, wa_h_act-ilexx TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text2 SEPARATED BY space. WRITE : wa_h_act-vgexx TO l_uom. CONCATENATE l_std l_uom INTO wa_nodestab-text3 SEPARATED BY space. CONCATENATE l_svar l_uom INTO wa_nodestab-text4 SEPARATED BY space. ELSE. WRITE : l_wa_act-actu TO l_act CURRENCY v_waers NO-GROUPING, l_wa_act-stdu TO l_std CURRENCY v_waers NO-GROUPING, l_wa_act-varu TO l_svar CURRENCY v_waers NO-GROUPING, v_waers TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text2 SEPARATED BY space. CONCATENATE l_std l_uom INTO wa_nodestab-text3 SEPARATED BY space. CONCATENATE l_svar l_uom INTO wa_nodestab-text4 SEPARATED BY space. ENDIF. wa_nodestab-tlength2 = c_20. wa_nodestab-tcolor2 = c_6. wa_nodestab-tlength3 = c_20. wa_nodestab-tcolor3 = c_6. wa_nodestab-tlength4 = c_24. wa_nodestab-tcolor4 = c_6. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab. ENDIF. * Material Information READ TABLE i_h_mat INTO wa_h_mat WITH KEY aufnr = wa_h_ord-aufnr. CHECK sy-subrc = 0. CLEAR : wa_nodestab. wa_nodestab-id = c_3_3. wa_nodestab-tlevel = c_3. wa_nodestab-parent = c_2_1. PERFORM material_header USING wa_nodestab. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab , l_menge , l_stprs , l_wa_mat , l_total1 , l_total2 , l_total3 , l_aqtys , l_sqtys , l_svars . LOOP AT i_h_mat INTO wa_h_mat WHERE aufnr = wa_h_ord-aufnr. l_smenge = l_menge. l_sstprs = l_stprs. PERFORM do_mat_calc CHANGING wa_h_mat l_aqty l_matuom l_sqty l_stduom l_svar l_varuom l_svarp l_amenge l_smenge l_astprs l_sstprs. l_menge = l_menge + l_smenge. l_stprs = l_stprs + l_sstprs. CHECK wa_h_mat-sumi = c_x. CLEAR: wa_nodestab , l_menge , l_stprs. wa_nodestab-id = c_4_2. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_3. * Material Number WRITE wa_h_mat-matnr TO wa_nodestab-text NO-ZERO. * Material Description wa_nodestab-text1 = wa_h_mat-maktx. wa_nodestab-tlength = c_18. wa_nodestab-tlength1 = c_30. wa_nodestab-tlength2 = c_22. wa_nodestab-tlength3 = c_22. wa_nodestab-tlength4 = c_24. wa_nodestab-tlength5 = c_20. IF l_matuom %LT%GT v_waers. WRITE : l_matuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_aqty l_uom INTO wa_nodestab-text2 SEPARATED BY space. IF l_stduom %LT%GT v_waers. WRITE : l_stduom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_sqty l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF l_varuom %LT%GT v_waers. WRITE : l_varuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_svar l_uom INTO wa_nodestab-text4 SEPARATED BY space. CONCATENATE l_svarp c_perc INTO wa_nodestab-text5 SEPARATED BY space. wa_nodestab-tcolor = c_3. wa_nodestab-tcolor1 = c_3. wa_nodestab-tcolor2 = c_3. wa_nodestab-tcolor3 = c_3. wa_nodestab-tcolor4 = c_3. wa_nodestab-tcolor5 = c_3. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab. IF l_aqty CA '123456789'. IF l_total1 %LT%GT c_x. l_total1 = c_x. l_wa_mat-actuom = l_matuom. ENDIF. IF l_wa_mat-actuom %LT%GT l_matuom. CLEAR : l_wa_mat-actusg, l_wa_mat-astprs, l_wa_mat-actuom, l_aqtys, l_amenge, l_wa_matg-actusg, l_wa_matg-astprs, l_wa_matg-actuom, l_aqtyg, l_astprs. ENDIF. ENDIF. IF l_sqty CA '123456789'. IF l_total2 %LT%GT c_x. l_total2 = c_x. l_wa_mat-stduom = l_stduom. ENDIF. IF l_wa_mat-stduom %LT%GT l_stduom. CLEAR : l_wa_mat-stdusg, l_wa_mat-sstprs, l_wa_mat-stduom, l_sqtys, l_smenge, l_wa_matg-stdusg, l_wa_matg-sstprs, l_wa_matg-stduom, l_sqtyg, l_sstprs. ENDIF. ENDIF. IF l_svar CA '123456789'. IF l_total3 %LT%GT c_x. l_total3 = c_x. l_wa_mat-varuom = l_varuom. ENDIF. IF l_wa_mat-varuom %LT%GT l_varuom. CLEAR : l_wa_mat-stdvar , l_wa_mat-varprs , l_wa_mat-varuom , l_svars, wa_h_mat-stdvar, l_wa_matg-stdvar, l_wa_matg-varprs , l_wa_matg-varuom, l_svarg, wa_h_mat-vstprs. ENDIF. ENDIF. CASE c_x. WHEN rb_quant. l_wa_mat-actusg = l_wa_mat-actusg + l_amenge. WRITE l_wa_mat-actusg TO l_aqtys UNIT l_wa_mat-actuom NO-GROUPING. l_wa_mat-stdusg = l_wa_mat-stdusg + l_smenge. WRITE l_wa_mat-stdusg TO l_sqtys UNIT l_wa_mat-stduom NO-GROUPING. l_wa_mat-stdvar = l_wa_mat-stdvar + wa_h_mat-stdvar. WRITE : l_wa_mat-stdvar TO l_svars UNIT l_wa_mat-stduom NO-GROUPING. WHEN rb_fiscl. l_wa_mat-astprs = l_wa_mat-astprs + l_astprs. v_prs = l_wa_mat-astprs. WRITE v_prs TO l_aqtys CURRENCY v_waers NO-GROUPING. l_wa_mat-varprs = l_wa_mat-varprs + wa_h_mat-vstprs. v_prs = l_wa_mat-varprs. WRITE v_prs TO l_svars CURRENCY v_waers NO-GROUPING. l_wa_mat-sstprs = l_wa_mat-sstprs + l_sstprs. v_prs = l_wa_mat-sstprs. WRITE v_prs TO l_sqtys CURRENCY v_waers NO-GROUPING. ENDCASE. ENDLOOP. *** Displaying Material Subtotals CLEAR wa_nodestab. wa_nodestab-id = c_4_2. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_3. wa_nodestab-text = 'Material Totals'(043). wa_nodestab-text1 = space. wa_nodestab-tlength = c_18. wa_nodestab-tlength1 = c_30. wa_nodestab-tlength2 = c_22. wa_nodestab-tlength3 = c_22. wa_nodestab-tlength4 = c_24. IF l_wa_mat-actuom %LT%GT v_waers. WRITE : l_wa_mat-actuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_aqtys l_uom INTO wa_nodestab-text2 SEPARATED BY space. IF l_wa_mat-stduom %LT%GT v_waers. WRITE : l_wa_mat-stduom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_sqtys l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF l_wa_mat-varuom %LT%GT v_waers. WRITE : l_wa_mat-varuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_svars l_uom INTO wa_nodestab-text4 SEPARATED BY space. wa_nodestab-tcolor = c_6. wa_nodestab-tcolor1 = c_6. wa_nodestab-tcolor2 = c_6. wa_nodestab-tcolor3 = c_6. wa_nodestab-tcolor4 = c_6. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab. IF l_aqtys CA '123456789'. IF l_totalg1 %LT%GT c_x. l_totalg1 = c_x. l_wa_matg-actuom = l_wa_mat-actuom. ENDIF. IF l_wa_matg-actuom %LT%GT l_wa_mat-actuom. CLEAR : l_wa_matg-actusg , l_wa_matg-astprs , l_wa_matg-actuom, l_aqtyg, l_wa_mat-actusg, l_wa_mat-astprs. ENDIF. ENDIF. IF l_sqtys CA '123456789'. IF l_totalg2 %LT%GT c_x. l_totalg2 = c_x. l_wa_matg-stduom = l_wa_mat-stduom. ENDIF. IF l_wa_matg-stduom %LT%GT l_wa_mat-stduom. CLEAR : l_wa_matg-stdusg , l_wa_matg-stduom , l_wa_matg-sstprs , l_sqtyg, l_wa_mat-stdusg, l_wa_mat-sstprs. ENDIF. ENDIF. IF l_svars CA '123456789'. IF l_totalg3 %LT%GT c_x. l_totalg3 = c_x. l_wa_matg-varuom = l_wa_mat-varuom. ENDIF. IF l_wa_matg-varuom %LT%GT l_wa_mat-varuom. CLEAR : l_wa_matg-stdvar, l_wa_matg-varprs , l_wa_matg-varuom, l_svarg, l_wa_mat-stdvar, l_wa_mat-varprs. ENDIF. ENDIF. CASE c_x. WHEN rb_quant. l_wa_matg-actusg = l_wa_matg-actusg + l_wa_mat-actusg. WRITE : l_wa_matg-actusg TO l_aqtyg UNIT l_wa_mat-actuom NO-GROUPING. l_wa_matg-stdusg = l_wa_matg-stdusg + l_wa_mat-stdusg. WRITE : l_wa_matg-stdusg TO l_sqtyg UNIT l_wa_mat-stduom NO-GROUPING. l_wa_matg-stdvar = l_wa_matg-stdvar + l_wa_mat-stdvar. WRITE : l_wa_matg-stdvar TO l_svarg UNIT l_wa_mat-varuom NO-GROUPING. WHEN rb_fiscl. l_wa_matg-astprs = l_wa_matg-astprs + l_wa_mat-astprs + l_wa_act-actu. * + l_wa_act-actu * 10. "NEEL++ 13/07/2005++ v_prs = l_wa_matg-astprs. WRITE v_prs TO l_aqtyg CURRENCY v_waers NO-GROUPING. l_wa_matg-sstprs = l_wa_matg-sstprs + l_wa_mat-sstprs + l_wa_act-stdu. * + l_wa_act-stdu * 10. "NEEL++ 13/07/2005++ v_prs = l_wa_matg-sstprs. WRITE v_prs TO l_sqtyg CURRENCY v_waers NO-GROUPING. l_wa_matg-varprs = l_wa_matg-varprs + l_wa_mat-varprs + l_wa_act-varu. * + l_wa_act-varu * 10. "NEEL++ 13/07/2005++ v_prs = l_wa_matg-varprs. WRITE v_prs TO l_svarg CURRENCY v_waers NO-GROUPING. ENDCASE. CLEAR : l_sqtys , l_aqtys , l_svars. *** Displaying Grand Total AT LAST. CLEAR wa_nodestab. wa_nodestab-id = c_2_2. wa_nodestab-tlevel = c_2. wa_nodestab-parent = c_1_1. wa_nodestab-text = 'Process Order Totals'(044). wa_nodestab-text1 = space. wa_nodestab-tlength = c_26. wa_nodestab-tlength1 = c_30. wa_nodestab-tlength2 = c_22. wa_nodestab-tlength3 = c_22. wa_nodestab-tlength4 = c_24. IF l_wa_matg-actuom %LT%GT v_waers. WRITE : l_wa_matg-actuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_aqtyg l_uom INTO wa_nodestab-text2 SEPARATED BY space. IF l_wa_matg-stduom %LT%GT v_waers. WRITE : l_wa_matg-stduom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_sqtyg l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF l_wa_matg-varuom %LT%GT v_waers. WRITE : l_wa_matg-varuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_svarg l_uom INTO wa_nodestab-text4 SEPARATED BY space. wa_nodestab-tcolor = c_5. wa_nodestab-tcolor1 = c_5. wa_nodestab-tcolor2 = c_5. wa_nodestab-tcolor3 = c_5. wa_nodestab-tcolor4 = c_5. APPEND wa_nodestab TO i_nodestab. ENDAT. ENDLOOP. ENDFORM. " DISPLAY_DETAIL_REPORT *&--------------------------------------------------------------------* *& Form display_phase_report *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM display_phase_report. DATA: l_date_low(10) TYPE c, l_date_high(10) TYPE c, l_effic TYPE char16, l_arbpl TYPE arbpl, l_prdqty TYPE gamng, l_prdq TYPE char18, l_wprdqty TYPE menge_d, l_prduom TYPE meins, l_act TYPE char16, l_std TYPE char16, l_amenge TYPE menge_d, l_smenge TYPE menge_d, l_menge TYPE menge_d, l_aqty TYPE char18, l_sqty TYPE char18, l_svar TYPE char18, l_svarp TYPE char18, l_aqtys TYPE char18, l_sqtys TYPE char18, l_svars TYPE char18, l_matuom TYPE meins, l_stduom TYPE meins, l_varuom TYPE meins, l_uom TYPE meins, l_astprs TYPE ty_stprs, l_sstprs TYPE ty_stprs, l_stprs TYPE ty_stprs, l_total1 TYPE char1, l_total2 TYPE char1, l_total3 TYPE char1, l_wa_act TYPE ty_hier_act, l_wa_mat TYPE ty_hier_mat_sum, l_wa_phs TYPE ty_hier_phase, l_i_phs TYPE STANDARD TABLE OF ty_hier_phase. PERFORM pfstatus. SET PF-STATUS 'MAIN' EXCLUDING i_fcode. SET TITLEBAR 'VARI' WITH text-068. l_i_phs = i_h_phs. SORT i_h_phs BY aufnr arbpl vornr. CLEAR wa_nodestab. REFRESH i_nodestab. MOVE 'Display Phase Report'(030) TO v_output_text. PERFORM inform_user_of_progress. CLEAR wa_nodestab. wa_nodestab-id = c_1_1. wa_nodestab-tlevel = c_1. wa_nodestab-text = 'Production Variances'(031). wa_nodestab-tlength = c_20. wa_nodestab-compress = c_x. APPEND wa_nodestab TO i_nodestab. LOOP AT i_h_ord INTO wa_h_ord. CLEAR: wa_nodestab, l_date_low, l_date_high. wa_nodestab-id = c_2_1. wa_nodestab-tlevel = c_2. wa_nodestab-parent = c_1_1. * Order Number text wa_nodestab-text = 'Order Num:'(032). wa_nodestab-tlength = c_12. wa_nodestab-tcolor = c_1. * Order number WRITE wa_h_ord-aufnr TO wa_nodestab-text1 NO-ZERO. wa_nodestab-tlength1 = c_12. wa_nodestab-tcolor1 = c_1. * Date Range WRITE wa_h_ord-gstrp TO l_date_low. WRITE wa_h_ord-gltrp TO l_date_high. CONCATENATE l_date_low c_hyp l_date_high INTO wa_nodestab-text2 SEPARATED BY space. wa_nodestab-tlength2 = c_25. wa_nodestab-tcolor2 = c_1. * Material Number WRITE wa_h_ord-plnbez TO wa_nodestab-text3 NO-ZERO. wa_nodestab-tlength3 = c_18. wa_nodestab-tcolor3 = c_1. * Material Description wa_nodestab-text4 = wa_h_ord-maktx. wa_nodestab-tlength4 = c_33. wa_nodestab-tcolor4 = c_1. APPEND wa_nodestab TO i_nodestab. CLEAR : l_aqtys, l_sqtys, l_svars, l_arbpl. LOOP AT i_h_phs INTO wa_h_phs WHERE aufnr = wa_h_ord-aufnr. l_wa_phs = wa_h_phs. IF l_arbpl %LT%GT wa_h_phs-arbpl. CLEAR : wa_h_phs. READ TABLE i_h_phs INTO wa_h_phs WITH KEY aufnr = wa_h_ord-aufnr arbpl = l_wa_phs-arbpl steus = 'YBN1' runtime = c_x. * Resource Information CLEAR : wa_nodestab. wa_nodestab-id = c_3_1. wa_nodestab-tlevel = c_3. wa_nodestab-parent = c_2_1. wa_nodestab-text = 'Resource:'(035). wa_nodestab-tlength = c_14. wa_nodestab-tcolor = c_4. wa_nodestab-text1 = l_wa_phs-arbpl. wa_nodestab-tlength1 = c_8. wa_nodestab-tcolor1 = c_4. wa_nodestab-text2 = l_wa_phs-ktext. wa_nodestab-tlength2 = c_37. wa_nodestab-tcolor2 = c_4. IF l_wa_phs-steus = 'YBN1'. l_effic = wa_h_phs-el_effc. CONCATENATE 'Exp. Line Eff.'(036) l_effic c_perc INTO wa_nodestab-text3 SEPARATED BY space. CONDENSE wa_nodestab-text3. wa_nodestab-tlength3 = c_30. wa_nodestab-tcolor3 = c_4. l_effic = wa_h_phs-ac_effc. CONCATENATE 'Act. Line Eff.'(037) l_effic c_perc INTO wa_nodestab-text4 SEPARATED BY space. CONDENSE wa_nodestab-text4. wa_nodestab-tlength4 = c_30. wa_nodestab-tcolor4 = c_4. ENDIF. APPEND wa_nodestab TO i_nodestab. l_arbpl = l_wa_phs-arbpl. wa_h_phs = l_wa_phs. ENDIF. CLEAR : wa_nodestab. wa_nodestab-id = c_4_1. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_1. ** Phase Number wa_nodestab-text = 'Phase'(038). wa_nodestab-tlength = c_10. wa_nodestab-tcolor = c_4. CONCATENATE wa_h_phs-vornr wa_h_phs-steus wa_h_phs-ltxa1 INTO wa_nodestab-text1 SEPARATED BY space. wa_nodestab-tlength1 = c_40. wa_nodestab-tcolor1 = c_4. ** PO Quantity * l_prdqty = wa_h_phs-lmnga. l_prdqty = wa_h_phs-prdqty. l_prduom = wa_h_phs-prduom. IF rb_kgm = c_x AND l_prduom %LT%GT 'KG'. IF wa_h_phs-bsuom %LT%GT 'KG'. PERFORM convert_to_kg USING wa_h_ord-plnbez wa_h_phs-bsuom wa_h_phs-gewei wa_h_phs-ntgew wa_h_phs-bprdqty CHANGING l_wprdqty v_conv_rc. IF v_conv_rc %LT%GT 'X'. l_prdqty = l_wprdqty. l_prduom = 'KG'. ENDIF. ELSE. l_prdqty = wa_h_phs-bprdqty. l_prduom = 'KG'. ENDIF. ENDIF. WRITE : l_prdqty TO l_prdq UNIT l_prduom NO-GROUPING, l_prduom TO l_uom. *** text for Order Qty IF rb_pland = c_x. ** Planned Production CONCATENATE 'Plan Qty:'(076) l_prdq l_uom INTO wa_nodestab-text2 SEPARATED BY space. ELSE. ** Actual Production IF rb_prod = c_x. * Produced CONCATENATE 'Prod Qty:'(033) l_prdq l_uom INTO wa_nodestab-text2 SEPARATED BY space. ELSE. * Confirmed CONCATENATE 'Conf Qty:'(034) l_prdq l_uom INTO wa_nodestab-text2 SEPARATED BY space. ENDIF. ENDIF. CONDENSE : wa_nodestab-text2. wa_nodestab-tlength2 = 32. wa_nodestab-tcolor2 = c_4. APPEND wa_nodestab TO i_nodestab. *** *** Activity Information *** CLEAR wa_nodestab. wa_nodestab-id = c_5_1. wa_nodestab-tlevel = c_5. wa_nodestab-parent = c_4_1. wa_nodestab-text = 'Activity'(052). wa_nodestab-tlength = 34. wa_nodestab-text1 = 'Actual Usage'(040). wa_nodestab-tlength1 = c_20. wa_nodestab-text2 = 'Standard Usage'(041). wa_nodestab-tlength2 = c_20. IF rb_fiscl = c_x. CONCATENATE 'Standard Usage Var'(042) v_waers INTO wa_nodestab-text3 SEPARATED BY space. ELSE. CONCATENATE 'Standard Usage Var'(042) 'UoM' INTO wa_nodestab-text3 SEPARATED BY space. ENDIF. wa_nodestab-tlength3 = c_24. CONCATENATE 'Standard Usage Var'(042) c_perc INTO wa_nodestab-text4 SEPARATED BY space. wa_nodestab-tlength4 = c_20. wa_nodestab-tcolor = c_4. wa_nodestab-tcolor1 = c_4. wa_nodestab-tcolor2 = c_4. wa_nodestab-tcolor3 = c_4. wa_nodestab-tcolor4 = c_4. APPEND wa_nodestab TO i_nodestab. CLEAR : flg_color , l_act , l_std , l_svar , l_svarp , l_wa_act, l_total1 , l_total2. LOOP AT i_h_act INTO wa_h_act WHERE aufnr = wa_h_phs-aufnr AND aufpl = wa_h_phs-aufpl AND aplzl = wa_h_phs-aplzl AND vornr = wa_h_phs-vornr. CLEAR : wa_nodestab. wa_nodestab-id = c_6_1. wa_nodestab-tlevel = c_6. wa_nodestab-parent = c_5_1. wa_nodestab-text = wa_h_act-txtxx. wa_nodestab-tlength = c_30. wa_nodestab-tlength1 = c_20. wa_nodestab-tlength2 = c_20. wa_nodestab-tlength3 = c_24. wa_nodestab-tlength4 = c_20. IF rb_quant = c_x. WRITE : wa_h_act-ismxx TO l_act UNIT wa_h_act-ilexx NO-GROUPING, wa_h_act-ilexx TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text1 SEPARATED BY space. WRITE : wa_h_act-vgwxx TO l_std UNIT wa_h_act-vgexx NO-GROUPING, wa_h_act-vgexx TO l_uom. CONCATENATE l_std l_uom INTO wa_nodestab-text2 SEPARATED BY space. WRITE wa_h_act-stdvar TO l_svar UNIT wa_h_act-vgexx NO-GROUPING. CONCATENATE l_svar l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF wa_h_act-ismxx %LT%GT 0. IF l_total2 %LT%GT c_x. l_total2 = c_x. l_wa_act-ilexx = wa_h_act-ilexx. ENDIF. IF l_wa_act-ilexx = wa_h_act-ilexx. l_wa_act-ismxx = l_wa_act-ismxx + wa_h_act-ismxx. l_wa_act-ilexx = wa_h_act-ilexx. ELSEIF wa_h_act-ismxx %LT%GT 0. CLEAR : l_wa_act-ismxx , l_wa_act-ilexx. ENDIF. ENDIF. IF wa_h_act-vgwxx %LT%GT 0. IF l_total1 %LT%GT c_x. l_total1 = c_x. l_wa_act-vgexx = wa_h_act-vgexx. ENDIF. IF l_wa_act-vgexx = wa_h_act-vgexx. l_wa_act-vgwxx = l_wa_act-vgwxx + wa_h_act-vgwxx. l_wa_act-stdvar = l_wa_act-stdvar + wa_h_act-stdvar. l_wa_act-vgexx = wa_h_act-vgexx. ELSEIF wa_h_act-vgwxx %LT%GT 0. CLEAR : l_wa_act-vgwxx , l_wa_act-vgexx, l_wa_act-stdvar. ENDIF. ENDIF. IF wa_h_act-vgwxx %LT%GT 0. wa_h_act-varper = ( wa_h_act-stdvar / wa_h_act-vgwxx ) * 100 . ENDIF. ELSE. wa_h_act-actu = wa_h_act-ismxx * ( wa_h_act-togxx / wa_h_act-toexx ). WRITE : wa_h_act-actu TO l_act CURRENCY v_waers NO-GROUPING, v_waers TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text1 SEPARATED BY space. wa_h_act-stdu = wa_h_act-vgwxx * ( wa_h_act-togxx / wa_h_act-toexx ). WRITE wa_h_act-stdu TO l_std CURRENCY v_waers NO-GROUPING. CONCATENATE l_std l_uom INTO wa_nodestab-text2 SEPARATED BY space. wa_h_act-varu = wa_h_act-stdvar * ( wa_h_act-togxx / wa_h_act-toexx ). WRITE wa_h_act-varu TO l_svar CURRENCY v_waers NO-GROUPING. CONCATENATE l_svar l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF wa_h_act-stdu %LT%GT 0. wa_h_act-varper = ( wa_h_act-varu / wa_h_act-stdu ) * 100. ENDIF. l_wa_act-actu = l_wa_act-actu + wa_h_act-actu. l_wa_act-stdu = l_wa_act-stdu + wa_h_act-stdu. l_wa_act-varu = l_wa_act-varu + wa_h_act-varu. ENDIF. WRITE wa_h_act-varper TO l_svarp NO-GROUPING DECIMALS 2. CONCATENATE l_svarp c_perc INTO wa_nodestab-text4 SEPARATED BY space. IF flg_color = c_x. CLEAR flg_color. wa_nodestab-tcolor = c_3. wa_nodestab-tcolor1 = c_3. wa_nodestab-tcolor2 = c_3. wa_nodestab-tcolor3 = c_3. wa_nodestab-tcolor4 = c_3. wa_nodestab-tcolor5 = c_3. wa_nodestab-tcolor6 = c_3. wa_nodestab-tcolor7 = c_3. wa_nodestab-tcolor8 = c_3. ELSE. flg_color = c_x. wa_nodestab-tcolor = c_2. wa_nodestab-tcolor1 = c_2. wa_nodestab-tcolor2 = c_2. wa_nodestab-tcolor3 = c_2. wa_nodestab-tcolor4 = c_2. wa_nodestab-tcolor5 = c_2. wa_nodestab-tcolor6 = c_2. wa_nodestab-tcolor7 = c_2. wa_nodestab-tcolor8 = c_2. ENDIF. APPEND wa_nodestab TO i_nodestab. ENDLOOP. *** Displaying Activity Subtotals CLEAR wa_nodestab. wa_nodestab-id = c_6_1. wa_nodestab-tlevel = c_6. wa_nodestab-parent = c_5_1. wa_nodestab-text = 'Activity Totals'(074). wa_nodestab-tlength = c_30. wa_nodestab-tcolor = c_6. IF rb_quant = c_x. WRITE : l_wa_act-ismxx TO l_act UNIT l_wa_act-ilexx NO-GROUPING, l_wa_act-ilexx TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text1 SEPARATED BY space. WRITE : l_wa_act-vgwxx TO l_std UNIT l_wa_act-vgexx NO-GROUPING, l_wa_act-vgexx TO l_uom. CONCATENATE l_std l_uom INTO wa_nodestab-text2 SEPARATED BY space. WRITE : l_wa_act-stdvar TO l_svar UNIT l_wa_act-vgexx NO-GROUPING. CONCATENATE l_svar l_uom INTO wa_nodestab-text3 SEPARATED BY space. ELSE. WRITE : l_wa_act-actu TO l_act CURRENCY v_waers NO-GROUPING, v_waers TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text1 SEPARATED BY space. WRITE : l_wa_act-stdu TO l_std CURRENCY v_waers NO-GROUPING. CONCATENATE l_std l_uom INTO wa_nodestab-text2 SEPARATED BY space. WRITE : l_wa_act-varu TO l_svar UNIT l_wa_act-vgexx NO-GROUPING. CONCATENATE l_svar l_uom INTO wa_nodestab-text3 SEPARATED BY space. ENDIF. wa_nodestab-tlength1 = c_20. wa_nodestab-tlength2 = c_20. wa_nodestab-tlength3 = c_24. wa_nodestab-tcolor1 = c_6. wa_nodestab-tcolor2 = c_6. wa_nodestab-tcolor3 = c_6. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab. *** *** Material Information *** READ TABLE i_h_mat INTO wa_h_mat WITH KEY aufnr = wa_h_phs-aufnr aufpl = wa_h_phs-aufpl aplzl = wa_h_phs-aplzl vornr = wa_h_phs-vornr. CHECK sy-subrc = 0. CLEAR : wa_nodestab. wa_nodestab-id = c_5_2. wa_nodestab-tlevel = c_5. wa_nodestab-parent = c_4_1. PERFORM material_header USING wa_nodestab. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab , l_menge , l_stprs , l_total1 , l_total2 , l_total3 , l_wa_mat , l_aqtys , l_sqtys , l_svars. LOOP AT i_h_mat INTO wa_h_mat WHERE aufnr = wa_h_phs-aufnr AND aufpl = wa_h_phs-aufpl AND aplzl = wa_h_phs-aplzl AND vornr = wa_h_phs-vornr. l_smenge = l_menge. l_sstprs = l_stprs. PERFORM do_mat_calc CHANGING wa_h_mat l_aqty l_matuom l_sqty l_stduom l_svar l_varuom l_svarp l_amenge l_smenge l_astprs l_sstprs. l_menge = l_menge + l_smenge. l_stprs = l_stprs + l_sstprs. CHECK wa_h_mat-sumi = c_x. CLEAR: wa_nodestab , l_menge , l_stprs. wa_nodestab-id = c_6_2. wa_nodestab-tlevel = c_6. wa_nodestab-parent = c_5_2. * Material Number WRITE wa_h_mat-matnr TO wa_nodestab-text NO-ZERO. * Material Description wa_nodestab-text1 = wa_h_mat-maktx. wa_nodestab-tlength = c_18. wa_nodestab-tlength1 = c_30. wa_nodestab-tlength2 = c_22. wa_nodestab-tlength3 = c_22. wa_nodestab-tlength4 = c_24. wa_nodestab-tlength5 = c_20. IF l_matuom %LT%GT v_waers. WRITE : l_matuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_aqty l_uom INTO wa_nodestab-text2 SEPARATED BY space. IF l_stduom %LT%GT v_waers. WRITE : l_stduom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_sqty l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF l_varuom %LT%GT v_waers. WRITE : l_varuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_svar l_uom INTO wa_nodestab-text4 SEPARATED BY space. CONCATENATE l_svarp c_perc INTO wa_nodestab-text5 SEPARATED BY space. wa_nodestab-tcolor = c_3. wa_nodestab-tcolor1 = c_3. wa_nodestab-tcolor2 = c_3. wa_nodestab-tcolor3 = c_3. wa_nodestab-tcolor4 = c_3. wa_nodestab-tcolor5 = c_3. APPEND wa_nodestab TO i_nodestab. IF l_aqty CA '123456789'. IF l_total1 %LT%GT c_x. l_total1 = c_x. l_wa_mat-actuom = l_matuom. ENDIF. IF l_wa_mat-actuom %LT%GT l_matuom. CLEAR : l_wa_mat-actusg , l_wa_mat-astprs , l_wa_mat-actuom, l_aqtys, l_amenge , l_astprs. ENDIF. ENDIF. IF l_sqty CA '123456789'. IF l_total2 %LT%GT c_x. l_total2 = c_x. l_wa_mat-stduom = l_stduom. ENDIF. IF l_wa_mat-stduom %LT%GT l_stduom. CLEAR : l_wa_mat-stdusg , l_wa_mat-sstprs , l_wa_mat-stduom , l_sqtys, l_smenge , l_sstprs. ENDIF. ENDIF. IF l_svar CA '123456789'. IF l_total3 %LT%GT c_x. l_total3 = c_x. l_wa_mat-varuom = l_varuom. ENDIF. IF l_wa_mat-varuom %LT%GT l_varuom. CLEAR : l_wa_mat-stdvar, l_wa_mat-varprs , l_wa_mat-varuom, l_svars, wa_h_mat-vstprs , wa_h_mat-stdvar. ENDIF. ENDIF. CASE c_x. WHEN rb_quant. l_wa_mat-actusg = l_wa_mat-actusg + l_amenge. WRITE l_wa_mat-actusg TO l_aqtys UNIT l_wa_mat-actuom NO-GROUPING. l_wa_mat-stdusg = l_wa_mat-stdusg + l_smenge. WRITE l_wa_mat-stdusg TO l_sqtys UNIT l_wa_mat-stduom NO-GROUPING. l_wa_mat-stdvar = l_wa_mat-stdvar + wa_h_mat-stdvar. WRITE : l_wa_mat-stdvar TO l_svars UNIT l_wa_mat-stduom NO-GROUPING. WHEN rb_fiscl. l_wa_mat-astprs = l_wa_mat-astprs + l_astprs. v_prs = l_wa_mat-astprs. WRITE v_prs TO l_aqtys CURRENCY v_waers NO-GROUPING. l_wa_mat-sstprs = l_wa_mat-sstprs + l_sstprs. v_prs = l_wa_mat-sstprs. WRITE v_prs TO l_sqtys CURRENCY v_waers NO-GROUPING. l_wa_mat-varprs = l_wa_mat-varprs + wa_h_mat-vstprs. v_prs = l_wa_mat-varprs. WRITE v_prs TO l_svars CURRENCY v_waers NO-GROUPING. ENDCASE. ENDLOOP. *** Displaying Material Subtotals CLEAR wa_nodestab. wa_nodestab-id = c_6_2. wa_nodestab-tlevel = c_6. wa_nodestab-parent = c_5_2. wa_nodestab-text = 'Material Totals'(043). wa_nodestab-text1 = space. wa_nodestab-tlength = c_18. wa_nodestab-tlength1 = c_30. wa_nodestab-tlength2 = c_22. wa_nodestab-tlength3 = c_22. wa_nodestab-tlength4 = c_24. IF l_wa_mat-actuom %LT%GT v_waers. WRITE : l_wa_mat-actuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_aqtys l_uom INTO wa_nodestab-text2 SEPARATED BY space. IF l_wa_mat-stduom %LT%GT v_waers. WRITE : l_wa_mat-stduom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_sqtys l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF l_wa_mat-varuom %LT%GT v_waers. WRITE : l_wa_mat-varuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_svars l_uom INTO wa_nodestab-text4 SEPARATED BY space. wa_nodestab-tcolor = c_6. wa_nodestab-tcolor1 = c_6. wa_nodestab-tcolor2 = c_6. wa_nodestab-tcolor3 = c_6. wa_nodestab-tcolor4 = c_6. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab, l_aqtys, l_sqtys, l_svars. ENDLOOP. ENDLOOP. i_h_phs = l_i_phs. ENDFORM. " DISPLAY_PHASE_REPORT *&--------------------------------------------------------------------* *& Form display_summary_report *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM display_summary_report. DATA: l_prdqty TYPE gamng, l_prdq TYPE char18, l_wprdqty TYPE menge_d, l_tprdqty TYPE menge_d, l_prduom TYPE meins, l_act TYPE char16, l_std TYPE char16, l_actt TYPE char16, l_stdt TYPE char16, l_svart TYPE char18, l_amenge TYPE menge_d, l_smenge TYPE menge_d, l_menge TYPE menge_d, l_astprs TYPE ty_stprs, l_sstprs TYPE ty_stprs, l_stprs TYPE ty_stprs, l_stprsq TYPE ty_stprs, l_varprsq TYPE ty_stprs, l_matuom TYPE meins, l_stduom TYPE meins, l_varuom TYPE meins, l_uom TYPE meins, l_aqty TYPE char18, l_sqty TYPE char18, l_svar TYPE char18, l_svarp TYPE char18, l_svarq TYPE char18, l_aqtyv TYPE char18, l_sqtyv TYPE char18, l_svarv TYPE char18, l_svarpv TYPE char18, l_aqtyg TYPE char18, l_sqtyg TYPE char18, l_svarg TYPE char18, l_svargq TYPE char18, l_aqtys TYPE char18, l_sqtys TYPE char18, l_svars TYPE char18, l_total1 TYPE char1, l_total2 TYPE char1, l_total3 TYPE char1, l_totalg1 TYPE char1, l_totalg2 TYPE char1, l_totalg3 TYPE char1, l_wa_acts TYPE ty_hier_act_sum, l_wa_mats TYPE ty_hier_mat_sum. PERFORM pfstatus. SET PF-STATUS 'MAIN' EXCLUDING i_fcode. SET TITLEBAR 'VARI' WITH text-067. REFRESH : i_nodestab. MOVE 'Display Summary Report'(029) TO v_output_text. PERFORM inform_user_of_progress. CLEAR wa_nodestab. wa_nodestab-id = c_1_1. wa_nodestab-tlevel = c_1. wa_nodestab-text = 'Production Variances'(031). wa_nodestab-tlength = c_20. wa_nodestab-compress = c_x. APPEND wa_nodestab TO i_nodestab. CLEAR: wa_nodestab. wa_nodestab-id = c_2_1. wa_nodestab-tlevel = c_2. wa_nodestab-parent = c_1_1. CONCATENATE 'Summary of Orders for'(046) 'Plant:'(047) p_werks INTO wa_nodestab-text SEPARATED BY space. wa_nodestab-tlength = c_45. wa_nodestab-tcolor = c_1. IF r_steus IS INITIAL. wa_nodestab-text1 = 'Control Key : ALL'(075). ELSE. CLEAR : wa_steus. READ TABLE r_steus INTO wa_steus INDEX 1. CONCATENATE 'Control Key:'(048) wa_steus-low 'TO' wa_steus-high INTO wa_nodestab-text1 SEPARATED BY space. ENDIF. wa_nodestab-tlength1 = c_25. wa_nodestab-tcolor1 = c_1. IF s_arbpl[] IS INITIAL. wa_nodestab-text2 = 'Resources: All'(049). ELSE. CONCATENATE 'Resources:'(065) s_arbpl-low c_hyp s_arbpl-high INTO wa_nodestab-text2 SEPARATED BY space. ENDIF. wa_nodestab-tlength2 = c_25. wa_nodestab-tcolor2 = c_1. APPEND wa_nodestab TO i_nodestab. CLEAR : l_tprdqty. LOOP AT i_h_ord INTO wa_h_ord. * convert to KG CLEAR : l_wprdqty. IF wa_h_ord-bsuom %LT%GT 'KG'. PERFORM convert_to_kg USING wa_h_ord-plnbez wa_h_ord-bsuom wa_h_ord-gewei wa_h_ord-ntgew wa_h_ord-bprdqty CHANGING l_wprdqty v_conv_rc. IF v_conv_rc %LT%GT 'X'. l_prdqty = l_wprdqty. l_prduom = 'KG'. ELSE. CLEAR : l_wprdqty. ENDIF. ELSE. l_prdqty = wa_h_ord-bprdqty. l_prduom = 'KG'. ENDIF. l_tprdqty = l_tprdqty + l_prdqty. ENDLOOP. WRITE : l_tprdqty TO l_prdq UNIT 'KG' NO-GROUPING. CLEAR : wa_nodestab. wa_nodestab-id = c_3_1. wa_nodestab-tlevel = c_3. wa_nodestab-parent = c_2_1. *** text for Order Qty IF rb_pland = c_x. ** Planned Production CONCATENATE 'Plan Qty:'(076) l_prdq 'KG' INTO wa_nodestab-text SEPARATED BY space. ELSE. ** Actual Production IF rb_prod = c_x. * Produced CONCATENATE 'Prod Qty:'(033) l_prdq 'KG' INTO wa_nodestab-text SEPARATED BY space. ELSE. * Confirmed CONCATENATE 'Conf Qty:'(034) l_prdq 'KG' INTO wa_nodestab-text SEPARATED BY space. ENDIF. ENDIF. CONDENSE : wa_nodestab-text. wa_nodestab-tlength = c_35. wa_nodestab-tcolor = c_1. APPEND wa_nodestab TO i_nodestab. *** *** Activity Summary *** CLEAR : wa_nodestab. wa_nodestab-id = c_3_2. wa_nodestab-tlevel = c_3. wa_nodestab-parent = c_2_1. wa_nodestab-text = 'Activity'(052). wa_nodestab-tlength = 34. wa_nodestab-tlength1 = c_20. wa_nodestab-tlength2 = c_20. wa_nodestab-tlength3 = c_24. wa_nodestab-tlength4 = c_20. IF rb_fiscl = c_x. CONCATENATE 'Actual Usage'(040) v_waers INTO wa_nodestab-text1 SEPARATED BY space. CONCATENATE 'Standard Usage'(041) v_waers INTO wa_nodestab-text2 SEPARATED BY space. CONCATENATE 'Standard Usage Var'(042) v_waers INTO wa_nodestab-text3 SEPARATED BY space. ELSE. CONCATENATE 'Actual Usage'(040) 'UoM' INTO wa_nodestab-text1 SEPARATED BY space. CONCATENATE 'Standard Usage'(041) 'UoM' INTO wa_nodestab-text2 SEPARATED BY space. CONCATENATE 'Standard Usage Var'(042) 'UoM' INTO wa_nodestab-text3 SEPARATED BY space. ENDIF. CONCATENATE 'Standard Usage Var'(042) c_perc INTO wa_nodestab-text4 SEPARATED BY space. wa_nodestab-tcolor = c_4. wa_nodestab-tcolor1 = c_4. wa_nodestab-tcolor2 = c_4. wa_nodestab-tcolor3 = c_4. wa_nodestab-tcolor4 = c_4. APPEND wa_nodestab TO i_nodestab. CLEAR : flg_color , l_actt , l_stdt , l_svart , l_svarp, l_wa_acts. LOOP AT i_parn INTO wa_parn. CLEAR : wa_acts, flg_color , l_act , l_std , l_svar , l_svarp. LOOP AT i_h_act INTO wa_h_act WHERE parxx = wa_parn-parxx. wa_acts-parxx = wa_h_act-parxx. wa_acts-txtxx = wa_h_act-txtxx. IF rb_quant EQ c_x. wa_acts-ilexx = wa_h_act-ilexx. wa_acts-ismxx = wa_acts-ismxx + wa_h_act-ismxx. wa_acts-vgexx = wa_h_act-vgexx. wa_acts-vgwxx = wa_acts-vgwxx + wa_h_act-vgwxx. wa_acts-stdvar = wa_acts-stdvar + wa_h_act-stdvar. IF wa_acts-ilexx IS INITIAL AND NOT wa_acts-vgexx IS INITIAL. wa_acts-ilexx = wa_acts-vgexx. ELSEIF NOT wa_acts-ilexx IS INITIAL AND wa_acts-vgexx IS INITIAL. wa_acts-vgexx = wa_acts-ilexx. ENDIF. ELSE. IF wa_h_act-toexx %LT%GT 0. wa_acts-actu = wa_acts-actu + wa_h_act-ismxx * ( wa_h_act-togxx / wa_h_act-toexx ). wa_acts-stdu = wa_acts-stdu + wa_h_act-vgwxx * ( wa_h_act-togxx / wa_h_act-toexx ). wa_acts-varu = wa_acts-varu + wa_h_act-stdvar * ( wa_h_act-togxx / wa_h_act-toexx ). ENDIF. ENDIF. ENDLOOP. CLEAR : wa_nodestab. wa_nodestab-id = c_4_1. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_2. wa_nodestab-text = wa_acts-txtxx. wa_nodestab-tlength = c_30. wa_nodestab-tlength1 = c_20. wa_nodestab-tlength2 = c_20. wa_nodestab-tlength3 = c_24. wa_nodestab-tlength4 = c_20. IF rb_quant = c_x. WRITE : wa_acts-ismxx TO l_act UNIT wa_acts-ilexx NO-GROUPING, wa_acts-ilexx TO l_uom. CONCATENATE l_act l_uom INTO wa_nodestab-text1 SEPARATED BY space. WRITE : wa_acts-vgwxx TO l_std UNIT wa_acts-vgexx NO-GROUPING, wa_acts-vgexx TO l_uom. CONCATENATE l_std l_uom INTO wa_nodestab-text2 SEPARATED BY space. WRITE : wa_acts-stdvar TO l_svar UNIT wa_acts-vgexx NO-GROUPING. CONCATENATE l_svar l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF wa_acts-vgwxx %LT%GT 0. wa_acts-varper = ( wa_acts-stdvar / wa_acts-vgwxx ) * 100. ENDIF. WRITE wa_acts-varper TO l_svarp DECIMALS 2 NO-GROUPING. CONCATENATE l_svarp c_perc INTO wa_nodestab-text4 SEPARATED BY space. IF wa_acts-ismxx %LT%GT 0. IF l_total2 %LT%GT c_x. l_total2 = c_x. l_wa_acts-ilexx = wa_acts-ilexx. ENDIF. IF l_wa_acts-ilexx = wa_acts-ilexx AND NOT l_wa_acts-ilexx IS INITIAL. l_wa_acts-ismxx = l_wa_acts-ismxx + wa_acts-ismxx. l_wa_acts-ilexx = wa_acts-ilexx. ELSEIF wa_acts-ismxx %LT%GT 0. CLEAR : l_wa_acts-ismxx , l_wa_acts-ilexx, l_actt. ENDIF. ENDIF. IF wa_acts-vgwxx %LT%GT 0. IF l_total1 %LT%GT c_x. l_total1 = c_x. l_wa_acts-vgexx = wa_acts-vgexx. ENDIF. IF l_wa_acts-vgexx = wa_acts-vgexx AND NOT l_wa_acts-vgexx IS INITIAL. l_wa_acts-vgwxx = l_wa_acts-vgwxx + wa_acts-vgwxx. l_wa_acts-stdvar = l_wa_acts-stdvar + wa_acts-stdvar. l_wa_acts-vgexx = wa_acts-vgexx. ELSEIF wa_acts-vgwxx %LT%GT 0. CLEAR : l_wa_acts-vgwxx , l_wa_acts-vgexx, l_wa_acts-stdvar, l_stdt, l_svart. ENDIF. ENDIF. WRITE l_wa_acts-ismxx TO l_actt UNIT l_wa_acts-ilexx NO-GROUPING . WRITE l_wa_acts-vgwxx TO l_stdt UNIT l_wa_acts-vgexx NO-GROUPING . WRITE l_wa_acts-stdvar TO l_svart UNIT l_wa_acts-vgexx NO-GROUPING . ELSE. WRITE : wa_acts-actu TO l_act CURRENCY v_waers NO-GROUPING. * l_act = wa_acts-actu. CONCATENATE l_act v_waers INTO wa_nodestab-text1 SEPARATED BY space. WRITE : wa_acts-stdu TO l_std CURRENCY v_waers NO-GROUPING. * l_std = wa_acts-stdu. CONCATENATE l_std v_waers INTO wa_nodestab-text2 SEPARATED BY space. WRITE : wa_acts-varu TO l_svar CURRENCY v_waers NO-GROUPING. * l_svar = wa_acts-varu. CONCATENATE l_svar v_waers INTO wa_nodestab-text3 SEPARATED BY space. IF wa_acts-stdu %LT%GT 0. wa_acts-varper = ( wa_acts-varu / wa_acts-stdu ) * 100. ENDIF. l_svarp = wa_acts-varper. CONCATENATE l_svarp c_perc INTO wa_nodestab-text4 SEPARATED BY space. l_wa_acts-actu = l_wa_acts-actu + wa_acts-actu. l_wa_acts-stdu = l_wa_acts-stdu + wa_acts-stdu. l_wa_acts-varu = l_wa_acts-varu + wa_acts-varu. WRITE l_wa_acts-actu TO l_actt CURRENCY v_waers NO-GROUPING. WRITE l_wa_acts-stdu TO l_stdt CURRENCY v_waers NO-GROUPING. WRITE l_wa_acts-varu TO l_svart CURRENCY v_waers NO-GROUPING. l_wa_acts-ilexx = v_waers. l_wa_acts-vgexx = v_waers. ENDIF. IF flg_color = c_x. CLEAR flg_color. wa_nodestab-tcolor = c_3. wa_nodestab-tcolor1 = c_3. wa_nodestab-tcolor2 = c_3. wa_nodestab-tcolor3 = c_3. wa_nodestab-tcolor4 = c_3. ELSE. flg_color = c_x. wa_nodestab-tcolor = c_2. wa_nodestab-tcolor1 = c_2. wa_nodestab-tcolor2 = c_2. wa_nodestab-tcolor3 = c_2. wa_nodestab-tcolor4 = c_2. ENDIF. APPEND wa_nodestab TO i_nodestab. ENDLOOP. * Displaying Activity Subtotals CLEAR wa_nodestab. wa_nodestab-id = c_4_1. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_2. wa_nodestab-text = 'Activity Totals'(074). wa_nodestab-tlength = c_30. wa_nodestab-tlength1 = c_20. wa_nodestab-tlength2 = c_20. wa_nodestab-tlength3 = c_24. IF l_wa_acts-ilexx %LT%GT v_waers. WRITE : l_wa_acts-ilexx TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_actt l_uom INTO wa_nodestab-text1 SEPARATED BY space. IF l_wa_acts-vgexx %LT%GT v_waers. WRITE : l_wa_acts-vgexx TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_stdt l_uom INTO wa_nodestab-text2 SEPARATED BY space. CONCATENATE l_svart l_uom INTO wa_nodestab-text3 SEPARATED BY space. wa_nodestab-tcolor = c_6. wa_nodestab-tcolor1 = c_6. wa_nodestab-tcolor2 = c_6. wa_nodestab-tcolor3 = c_6. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab. *** *** Material Information *** READ TABLE i_h_mat INTO wa_h_mat INDEX 1. IF sy-subrc = 0. CLEAR : wa_nodestab. wa_nodestab-id = c_3_3. wa_nodestab-tlevel = c_3. wa_nodestab-parent = c_2_1. PERFORM material_header USING wa_nodestab. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab , l_amenge , l_smenge , l_wa_mats, l_totalg1 , l_totalg2 , l_totalg3 , l_sqtyg , l_aqtyg , l_svarg , l_svargq , l_stprsq. LOOP AT i_matn INTO wa_matn. CLEAR : wa_mats , l_sqty , l_aqty , l_svar , l_svarp, l_svarq , l_varprsq, l_total1 , l_total2 , l_total3, l_menge , l_stprs. LOOP AT i_h_mat INTO wa_h_mat WHERE matnr = wa_matn-matnr AND bwart = wa_matn-bwart. "28/06/2005++ CLEAR : l_amenge , l_astprs , l_smenge , l_sstprs. l_sstprs = l_stprs. l_smenge = l_menge. PERFORM do_mat_calc CHANGING wa_h_mat l_aqtyv l_matuom l_sqtyv l_stduom l_svarv l_varuom l_svarpv l_amenge l_smenge l_astprs l_sstprs. l_stprs = l_stprs + l_sstprs. l_menge = l_menge + l_smenge. CHECK wa_h_mat-sumi = c_x. CLEAR : l_menge , l_stprs. IF rb_quant EQ c_x. IF l_matuom IS INITIAL OR l_matuom EQ l_stduom. wa_h_mat-stdvar = l_smenge - l_amenge. ENDIF. IF l_amenge %LT%GT 0. IF l_total1 %LT%GT c_x. l_total1 = c_x. wa_mats-actuom = l_matuom. ENDIF. IF wa_mats-actuom = l_matuom. wa_mats-actusg = wa_mats-actusg + l_amenge. ELSE. CLEAR : wa_mats-actusg , wa_mats-actuom, l_aqty , wa_mats-actuom. ENDIF. ENDIF. IF l_smenge %LT%GT 0. IF l_total2 %LT%GT c_x. l_total2 = c_x. wa_mats-stduom = l_stduom. ENDIF. IF wa_mats-stduom = l_stduom. wa_mats-stdusg = wa_mats-stdusg + l_smenge. ELSE. CLEAR : wa_mats-stdusg , wa_mats-stduom, l_sqty , wa_mats-stduom. ENDIF. ENDIF. IF wa_h_mat-stdvar %LT%GT 0. IF l_total3 %LT%GT c_x. l_total3 = c_x. wa_mats-varuom = l_stduom. ENDIF. IF wa_mats-varuom = l_stduom. wa_mats-stdvar = wa_mats-stdvar + wa_h_mat-stdvar. ELSE. CLEAR : wa_mats-stdvar, wa_mats-varuom, l_svar. ENDIF. ENDIF. WRITE : wa_mats-actusg TO l_aqty UNIT wa_mats-actuom NO-GROUPING. WRITE : wa_mats-stdusg TO l_sqty UNIT wa_mats-stduom NO-GROUPING. WRITE : wa_mats-stdvar TO l_svar UNIT wa_mats-stduom NO-GROUPING. wa_mats-astprs = wa_mats-astprs + l_astprs. wa_mats-sstprs = wa_mats-sstprs + l_sstprs. wa_mats-varprs = wa_mats-varprs + l_sstprs - l_astprs. v_prs = wa_mats-varprs. WRITE : v_prs TO l_svarq CURRENCY v_waers NO-GROUPING. ELSE. wa_mats-astprs = wa_mats-astprs + l_astprs. wa_mats-sstprs = wa_mats-sstprs + l_sstprs. wa_mats-varprs = wa_mats-varprs + l_sstprs - l_astprs. wa_mats-actuom = v_waers. wa_mats-stduom = v_waers. wa_mats-varuom = v_waers. v_prs = wa_mats-astprs. WRITE : v_prs TO l_aqty CURRENCY v_waers NO-GROUPING. v_prs = wa_mats-sstprs. WRITE : v_prs TO l_sqty CURRENCY v_waers NO-GROUPING. v_prs = wa_mats-varprs. WRITE : v_prs TO l_svar CURRENCY v_waers NO-GROUPING. ENDIF. wa_mats-matnr = wa_h_mat-matnr. wa_mats-maktx = wa_h_mat-maktx. l_varprsq = wa_mats-varprs. ENDLOOP. IF wa_mats-stduom = wa_mats-actuom OR wa_mats-actuom IS INITIAL. CASE c_x. WHEN rb_quant. IF wa_mats-stdusg %GT 0. wa_mats-varper = ( wa_mats-stdvar / wa_mats-stdusg ) * 100. ELSE. wa_mats-varper = 0. ENDIF. WHEN rb_fiscl. IF wa_mats-sstprs %GT 0. wa_mats-varper = ( wa_mats-varprs / wa_mats-sstprs ) * 100. ELSE. wa_mats-varper = 0. ENDIF. ENDCASE. ENDIF. WRITE wa_mats-varper TO l_svarp DECIMALS 2 NO-GROUPING. IF l_aqty CA '123456789'. IF l_totalg1 %LT%GT c_x. l_totalg1 = c_x. l_wa_mats-actuom = wa_mats-actuom. ENDIF. IF l_wa_mats-actuom %LT%GT wa_mats-actuom. CLEAR : l_wa_mats-actusg , l_wa_mats-astprs , l_aqtyg , l_wa_mats-actuom , wa_mats-actusg , wa_mats-astprs. ENDIF. ENDIF. IF l_sqty CA '123456789'. IF l_totalg2 %LT%GT c_x. l_totalg2 = c_x. l_wa_mats-stduom = wa_mats-stduom. ENDIF. IF l_wa_mats-stduom %LT%GT wa_mats-stduom. CLEAR : l_wa_mats-stdusg , l_wa_mats-sstprs , l_sqtyg , l_wa_mats-stduom , wa_mats-stdusg , wa_mats-sstprs . ENDIF. ENDIF. IF l_svar CA '123456789'. IF l_totalg3 %LT%GT c_x. l_totalg3 = c_x. l_wa_mats-varuom = wa_mats-varuom. ENDIF. IF l_wa_mats-varuom %LT%GT wa_mats-varuom. CLEAR : l_wa_mats-stdvar, l_wa_mats-varprs , l_svarg , l_wa_mats-varuom, wa_mats-stdvar , wa_mats-varprs. ENDIF. ENDIF. CASE c_x. WHEN rb_quant. l_wa_mats-actusg = l_wa_mats-actusg + wa_mats-actusg. WRITE : l_wa_mats-actusg TO l_aqtyg UNIT l_wa_mats-actuom NO-GROUPING. l_wa_mats-stdusg = l_wa_mats-stdusg + wa_mats-stdusg. WRITE : l_wa_mats-stdusg TO l_sqtyg UNIT l_wa_mats-stduom NO-GROUPING. l_wa_mats-stdvar = l_wa_mats-stdvar + wa_mats-stdvar. WRITE : l_wa_mats-stdvar TO l_svarg UNIT l_wa_mats-varuom NO-GROUPING. l_stprsq = l_stprsq + l_varprsq. v_prs = l_stprsq. WRITE : v_prs TO l_svargq CURRENCY v_waers NO-GROUPING. WHEN rb_fiscl. l_wa_mats-astprs = l_wa_mats-astprs + wa_mats-astprs. v_prs = l_wa_mats-astprs. WRITE : v_prs TO l_aqtyg CURRENCY v_waers NO-GROUPING. l_wa_mats-sstprs = l_wa_mats-sstprs + wa_mats-sstprs. v_prs = l_wa_mats-sstprs. WRITE : v_prs TO l_sqtyg CURRENCY v_waers NO-GROUPING. l_wa_mats-varprs = l_wa_mats-varprs + wa_mats-varprs. v_prs = l_wa_mats-varprs. WRITE : v_prs TO l_svarg CURRENCY v_waers NO-GROUPING. ENDCASE. CLEAR: wa_nodestab. wa_nodestab-id = c_4_2. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_3. wa_nodestab-tcolor = c_3. wa_nodestab-tcolor1 = c_3. wa_nodestab-tcolor2 = c_3. wa_nodestab-tcolor3 = c_3. wa_nodestab-tcolor4 = c_3. wa_nodestab-tcolor5 = c_3. wa_nodestab-tlength = c_18. wa_nodestab-tlength1 = c_30. wa_nodestab-tlength2 = c_22. wa_nodestab-tlength3 = c_22. wa_nodestab-tlength4 = c_24. wa_nodestab-tlength5 = c_20. * Material Number WRITE wa_mats-matnr TO wa_nodestab-text NO-ZERO. * Material Description wa_nodestab-text1 = wa_mats-maktx. IF wa_mats-actuom %LT%GT v_waers. WRITE : wa_mats-actuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_aqty l_uom INTO wa_nodestab-text2 SEPARATED BY space. IF wa_mats-stduom %LT%GT v_waers. WRITE : wa_mats-stduom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_sqty l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF wa_mats-varuom %LT%GT v_waers. WRITE : wa_mats-varuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_svar l_uom INTO wa_nodestab-text4 SEPARATED BY space. CONCATENATE l_svarp c_perc INTO wa_nodestab-text5 SEPARATED BY space. IF rb_quant = c_x. wa_nodestab-tcolor6 = c_3. wa_nodestab-tlength6 = c_24. CONCATENATE l_svarq v_waers INTO wa_nodestab-text6 SEPARATED BY space. ENDIF. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab. ENDLOOP. *** Displaying Material Subtotals CLEAR wa_nodestab. wa_nodestab-id = c_4_2. wa_nodestab-tlevel = c_4. wa_nodestab-parent = c_3_3. wa_nodestab-text = 'Material Totals'(043). wa_nodestab-text1 = space. wa_nodestab-tlength = c_18. wa_nodestab-tlength2 = c_22. wa_nodestab-tlength1 = c_30. wa_nodestab-tlength3 = c_22. wa_nodestab-tlength4 = c_24. wa_nodestab-tlength5 = c_20. IF l_wa_mats-actuom %LT%GT v_waers. WRITE : l_wa_mats-actuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_aqtyg l_uom INTO wa_nodestab-text2 SEPARATED BY space. IF l_wa_mats-stduom %LT%GT v_waers. WRITE : l_wa_mats-stduom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_sqtyg l_uom INTO wa_nodestab-text3 SEPARATED BY space. IF l_wa_mats-varuom %LT%GT v_waers. WRITE : l_wa_mats-varuom TO l_uom. ELSE. WRITE : v_waers TO l_uom. ENDIF. CONCATENATE l_svarg l_uom INTO wa_nodestab-text4 SEPARATED BY space. IF rb_quant = c_x. wa_nodestab-tcolor6 = c_6. wa_nodestab-tlength6 = c_24. CONCATENATE l_svargq v_waers INTO wa_nodestab-text6 SEPARATED BY space. ENDIF. wa_nodestab-tcolor = c_6. wa_nodestab-tcolor2 = c_6. wa_nodestab-tcolor3 = c_6. wa_nodestab-tcolor4 = c_6. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab. ENDIF. *** Displaying Summary totals IF rb_fiscl = c_x. * l_astprs = l_wa_acts-actu * 10 + l_wa_mats-astprs. * l_sstprs = l_wa_acts-stdu * 10 + l_wa_mats-sstprs. l_astprs = l_wa_acts-actu + l_wa_mats-astprs. l_sstprs = l_wa_acts-stdu + l_wa_mats-sstprs. l_stprs = l_sstprs - l_astprs. v_prs = l_astprs. WRITE : v_prs TO l_aqtys CURRENCY v_waers NO-GROUPING. v_prs = l_sstprs. WRITE : v_prs TO l_sqtys CURRENCY v_waers NO-GROUPING. v_prs = l_stprs. WRITE : v_prs TO l_svars CURRENCY v_waers NO-GROUPING. CLEAR wa_nodestab. wa_nodestab-id = c_3_4. wa_nodestab-tlevel = c_3. wa_nodestab-parent = c_2_1. wa_nodestab-text = 'Summary Totals'. wa_nodestab-text1 = space. wa_nodestab-tlength = c_18. wa_nodestab-tlength2 = c_22. wa_nodestab-tlength1 = c_30. wa_nodestab-tlength3 = c_22. wa_nodestab-tlength4 = c_24. WRITE : v_waers TO l_uom. CONCATENATE l_aqtys l_uom INTO wa_nodestab-text2 SEPARATED BY space. CONCATENATE l_sqtys l_uom INTO wa_nodestab-text3 SEPARATED BY space. CONCATENATE l_svars l_uom INTO wa_nodestab-text4 SEPARATED BY space. wa_nodestab-tcolor = c_5. wa_nodestab-tcolor1 = c_5. wa_nodestab-tcolor2 = c_5. wa_nodestab-tcolor3 = c_5. wa_nodestab-tcolor4 = c_5. APPEND wa_nodestab TO i_nodestab. CLEAR : wa_nodestab. ENDIF. ENDFORM. " DISPLAY_SUMMARY_REPORT *&--------------------------------------------------------------------* *& Form material_header *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM material_header USING fp_nodestab TYPE snodetext. fp_nodestab-text = 'Material'(058). fp_nodestab-tlength = c_22. fp_nodestab-tcolor = c_4. fp_nodestab-propfaw = c_x. fp_nodestab-text1 = 'Description'(059). fp_nodestab-tlength1 = c_30. fp_nodestab-tcolor1 = c_4. IF rb_fiscl = c_x. CONCATENATE 'Actual Usage'(040) v_waers INTO fp_nodestab-text2 SEPARATED BY space. ELSE. CONCATENATE 'Actual Usage'(040) 'UoM' INTO fp_nodestab-text2 SEPARATED BY space. ENDIF. fp_nodestab-tlength2 = c_22. fp_nodestab-tcolor2 = c_4. IF rb_fiscl = c_x. CONCATENATE 'Standard Usage'(041) v_waers INTO fp_nodestab-text3 SEPARATED BY space. ELSE. CONCATENATE 'Standard Usage'(041) 'UoM' INTO fp_nodestab-text3 SEPARATED BY space. ENDIF. fp_nodestab-tlength3 = c_22. fp_nodestab-tcolor3 = c_4. IF rb_fiscl = c_x. CONCATENATE 'Standard Usage Var'(042) v_waers INTO fp_nodestab-text4 SEPARATED BY space. ELSE. CONCATENATE 'Standard Usage Var'(042) 'UoM' INTO fp_nodestab-text4 SEPARATED BY space. ENDIF. fp_nodestab-tlength4 = c_24. fp_nodestab-tcolor4 = c_4. CONCATENATE 'Standard Usage Var'(042) c_perc INTO fp_nodestab-text5 SEPARATED BY space. fp_nodestab-tlength5 = c_20. fp_nodestab-tcolor5 = c_4. IF rb_summ = c_x AND rb_quant = c_x. CONCATENATE 'Standard Usage Var'(042) v_waers INTO fp_nodestab-text6 SEPARATED BY space. fp_nodestab-tlength6 = c_24. fp_nodestab-tcolor6 = c_4. ENDIF. ENDFORM. " MATERIAL_HEADER **&--------------------------------------------------------------------- ** **& Form get_orders **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** *FORM get_orders. * * DATA: l_sttxt(100) TYPE c, * flg_status(1) TYPE c. * * * MOVE 'Extracting Process Orders'(022) TO v_output_text. * * PERFORM inform_user_of_progress. * * ***START OF MOD-003. * IF NOT p_mtart IS INITIAL. **"selection filter on material type * SELECT matnr "material number * mtart "material type * INTO TABLE i_mtart * FROM mara * WHERE matnr IN s_matnr * AND mtart = p_mtart. * * IF sy-subrc %LT%GT 0. " if no corresponding data is found * * MESSAGE i072 WITH p_mtart. * "No data was selected for material type * LEAVE LIST-PROCESSING. * * ENDIF. * ENDIF. * * * IF NOT i_mtart IS INITIAL. * SELECT aufnr * werks * kokrs * objnr * gltrp * rsnum * gamng * gmein * plnbez * plnty * plnnr * plnal * stlst "mod-001 * stlty * stlnr * stlal * aufpl * zaehl * rueck * INTO TABLE i_orders FROM caufv * FOR ALL ENTRIES IN i_mtart "*----MOD-003 * WHERE aufnr IN s_aufnr AND * werks = p_werks AND * kokrs = p_kokrs AND * stlan = p_usage AND * plnbez = i_mtart-matnr AND "*----MOD-003 * ( gstrp IN s_datuv OR gltrp IN s_datuv ). ***END OF MOD-003. * * ELSE. "----MOD-003 * SELECT aufnr * werks * kokrs * objnr * gltrp * rsnum * gamng * gmein * plnbez * plnty * plnnr * plnal * stlst " MOD-001 * stlty * stlnr * stlal * aufpl * zaehl * rueck * INTO TABLE i_orders FROM caufv * WHERE aufnr IN s_aufnr AND * werks = p_werks AND * kokrs = p_kokrs AND * plnbez IN s_matnr AND * stlan = p_usage AND * ( gstrp IN s_datuv OR gltrp IN s_datuv ). * * ENDIF. "----MOD-003 * * * IF sy-subrc %LT%GT 0. * MESSAGE s007. * LEAVE LIST-PROCESSING. * ENDIF. * * SORT i_orders BY aufnr. * * LOOP AT i_orders INTO wa_orders. * * IF NOT i_tj02t[] IS INITIAL . * PERFORM get_status_info USING wa_orders-objnr l_sttxt. * * CLEAR: flg_status, wa_tj02t. * LOOP AT i_tj02t INTO wa_tj02t. * IF l_sttxt NS wa_tj02t-txt04. * CLEAR flg_status. * EXIT. * ELSE. * flg_status = c_x. * CONTINUE. * ENDIF. * CLEAR : wa_tj02t. * ENDLOOP. * * IF flg_status %LT%GT c_x. * DELETE i_orders. * CONTINUE. * ENDIF. * * wa_order_status_text-aufnr = wa_orders-aufnr. * wa_order_status_text-sttxt = l_sttxt. * APPEND wa_order_status_text TO i_order_status_text. * CLEAR wa_order_status_text. * ENDIF. * * CLEAR : wa_orders. * * ENDLOOP. * ** ENDIF. * *ENDFORM. " get_orders **&--------------------------------------------------------------------- ** **& Form get_operations **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM get_operations. * * DATA l_tabix TYPE sytabix. * * MOVE 'Extracting Phase Information'(023) TO v_output_text. * PERFORM inform_user_of_progress. * * SELECT aufpl * aplzl * plnkn * plnty * plnnr * zaehl * vornr * arbid * rueck * steus * phflg * INTO TABLE i_afvc * FROM afvc * FOR ALL ENTRIES IN i_orders * WHERE aufpl = i_orders-aufpl AND * steus IN s_steus AND * phflg = c_x. * * IF sy-subrc = 0. * SELECT aufpl * aplzl * bmsch * vgw02 * lmnga * ism02 * ssavd * FROM afvv INTO TABLE i_afvv * FOR ALL ENTRIES IN i_afvc * WHERE aufpl = i_afvc-aufpl AND * aplzl = i_afvc-aplzl AND * ssavd IN s_datuv. * * IF sy-subrc = 0. * SORT i_afvv BY aufpl aplzl. * ENDIF. * IF NOT ( s_kostl[] IS INITIAL ). * * SELECT objty objid kokrs kostl * FROM crco INTO TABLE i_crco * FOR ALL ENTRIES IN i_afvc * WHERE objty = c_objtyp * AND objid = i_afvc-arbid. * IF sy-subrc = 0. * SORT i_crco BY kostl. * ENDIF. * ENDIF. * * SORT i_crhd BY objid. * SORT i_orders BY aufpl. * * SORT i_afvc BY aufpl vornr DESCENDING. * * LOOP AT i_afvc INTO wa_afvc. * * l_tabix = sy-tabix. * * IF NOT ( s_kostl[] IS INITIAL ). * READ TABLE i_crco INTO wa_crco * WITH KEY objty = c_objtyp * objid = wa_afvc-arbid * BINARY SEARCH. * IF sy-subrc = 0. * READ TABLE i_csks INTO wa_csks * WITH KEY kostl = wa_crco-kostl. * IF sy-subrc %LT%GT 0. * DELETE i_afvv WHERE aufpl = wa_afvc-aufpl * AND aplzl = wa_afvc-aplzl. * DELETE i_afvc INDEX l_tabix. * CONTINUE. * ENDIF. * ENDIF. * ENDIF. * ** Check work centre details with resource * IF NOT ( s_arbpl[] IS INITIAL ). * READ TABLE i_crhd INTO wa_crhd * WITH KEY objid = wa_afvc-arbid BINARY SEARCH. * IF sy-subrc %LT%GT 0. * DELETE i_afvv WHERE aufpl = wa_afvc-aufpl * AND aplzl = wa_afvc-aplzl. * DELETE i_afvc INDEX l_tabix. * CONTINUE. * ELSE. * PERFORM move_data2_ordops. * ENDIF. * ELSE. * READ TABLE i_crhd INTO wa_crhd * WITH KEY objid = wa_afvc-arbid BINARY SEARCH. * PERFORM move_data2_ordops. * ENDIF. * CLEAR: wa_crco, wa_crhd, l_tabix, wa_afvc. * ENDLOOP. * * ENDIF. * *ENDFORM. " get_operations **&--------------------------------------------------------------------- ** **& Form get_mat_segment **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM get_mat_segment. * DATA: l_menge TYPE menge_d, * l_gamng type menge_d, * v_menge type menge_d, * l_meins TYPE meins, * struct_mara type mara, * struct_marc type marc. * DATA: l_lmnga TYPE LMNGA, * L_CFUOM type meins. * * IF NOT ( i_pro_orders[] IS INITIAL ). * IF NOT ( rb_prod IS INITIAL ). * ** Extracting goods receipt information *MOVE 'Extracting Goods Receipt Information'(024) TO v_output_text. * PERFORM inform_user_of_progress. ******* Mod-002******************************************************* * SELECT aufnr mblnr mjahr zeile matnr bwart menge meins * " sjahr smbln smblp * rsnum rspos rsart erfmg erfme * FROM aufm "Table : Goods movements for order * INTO TABLE i_mseg1 * FOR ALL ENTRIES IN i_pro_orders * WHERE aufnr = i_pro_orders-aufnr. ** AND matnr = i_pro_orders-plnbez. *******Mod-002********************************************************* * IF sy-subrc = 0. * **Addition * i_mseg = i_mseg1. * LOOP AT i_pro_orders INTO wa_pro_orders. * DELETE i_mseg WHERE aufnr = wa_pro_orders-aufnr * AND matnr %LT%GT wa_pro_orders-plnbez. * ENDLOOP. **End of addition ************************Mod-002***************************************** * * clear: struct_marc. * select single * * into struct_marc * from marc * where matnr = wa_pro_orders-plnbez and * werks = wa_pro_orders-werks. * * clear: struct_mara. * select single * * into struct_mara * from mara * where matnr = wa_pro_orders-plnbez. * ***************MOD-002************************************************** * * SORT i_mseg BY aufnr. * SORT i_pro_orders BY aufnr. ** Calculatin the quantity according to the movement type and ** assign the value to i_pro_orders internal table * * LOOP AT i_mseg INTO wa_mseg. * AT NEW aufnr. * CLEAR: l_menge, l_meins, v_menge. * ENDAT. * IF wa_mseg-bwart = c_101. * if struct_marc-frtme is initial. ** l_menge = l_menge + wa_mseg-menge. ** l_meins = wa_mseg-erfme. * if wa_mseg-erfme = struct_mara-meins. * l_menge = l_menge + wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * else. * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-plnbez * i_in_me = wa_mseg-erfme * i_out_me = struct_mara-meins * i_menge = wa_mseg-erfmg * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * wa_mseg-erfmg = v_menge. * ENDIF. * l_menge = l_menge + wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * endif. * ELSEIF struct_marc-frtme is not initial. * if ( struct_marc-frtme = struct_mara-meins ) and * ( wa_mseg-erfme = struct_marc-frtme ). * l_menge = l_menge + wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * elseif ( struct_marc-frtme = struct_mara-meins ) and * ( wa_mseg-erfme ne struct_marc-frtme ). * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-plnbez * i_in_me = wa_mseg-erfme * i_out_me = struct_marc-frtme * i_menge = wa_mseg-erfmg * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * wa_mseg-erfmg = v_menge. * ENDIF. * l_menge = l_menge + wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * elseif ( struct_marc-frtme ne struct_mara-meins ) and * ( wa_mseg-erfme ne struct_marc-frtme ). * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-plnbez * i_in_me = wa_mseg-erfme * i_out_me = struct_marc-frtme * i_menge = wa_mseg-erfmg * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * wa_mseg-erfmg = v_menge. * ENDIF. * l_menge = l_menge + wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * else. * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-plnbez * i_in_me = wa_mseg-erfme * i_out_me = struct_marc-frtme * i_menge = wa_mseg-erfmg * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * wa_mseg-erfmg = v_menge. * ENDIF. * l_menge = l_menge + wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * * endif. * endif. * ELSEIF wa_mseg-bwart = c_102. * if struct_marc-frtme is initial. ** l_menge = l_menge - wa_mseg-menge. ** l_meins = wa_mseg-erfme. * * if wa_mseg-erfme = struct_mara-meins. * l_menge = l_menge - wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * else. * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-plnbez * i_in_me = wa_mseg-erfme * i_out_me = struct_mara-meins * i_menge = wa_mseg-erfmg * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * wa_mseg-erfmg = v_menge. * ENDIF. * l_menge = l_menge - wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * endif. * ELSEIF struct_marc-frtme is not initial. * if ( struct_marc-frtme = struct_mara-meins ) and * ( wa_mseg-erfme = struct_marc-frtme ). * l_menge = l_menge - wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * elseif ( struct_marc-frtme = struct_mara-meins ) and * ( wa_mseg-erfme ne struct_marc-frtme ). * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-plnbez * i_in_me = wa_mseg-erfme * i_out_me = struct_marc-frtme * i_menge = wa_mseg-erfmg * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * wa_mseg-erfmg = v_menge. * ENDIF. * l_menge = l_menge - wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * elseif ( struct_marc-frtme ne struct_mara-meins ) and * ( wa_mseg-erfme ne struct_marc-frtme ). * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-plnbez * i_in_me = wa_mseg-erfme * i_out_me = struct_marc-frtme * i_menge = wa_mseg-erfmg * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * wa_mseg-erfmg = v_menge. * ENDIF. * l_menge = l_menge - wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * else. * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-plnbez * i_in_me = wa_mseg-erfme * i_out_me = struct_marc-frtme * i_menge = wa_mseg-erfmg * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * wa_mseg-erfmg = v_menge. * ENDIF. * l_menge = l_menge - wa_mseg-erfmg. * l_meins = wa_mseg-erfme. * endif. * endif. ** l_menge = l_menge - wa_mseg-menge.* * ENDIF. ** l_meins = wa_mseg-meins. * ******* End of MOD-002**************************************** * * AT END OF aufnr. **********Mod-002********************************************* ** Don't want zero production orders * IF NOT ( rb_ezero IS INITIAL ) AND l_menge = 0. * DELETE i_ordops WHERE aufnr = wa_mseg-aufnr. * DELETE i_pro_orders WHERE aufnr = wa_mseg-aufnr. * CONTINUE. * ENDIF. * READ TABLE i_pro_orders INTO wa_pro_orders * WITH KEY aufnr = wa_mseg-aufnr. * wa_pro_orders-menge = l_menge. * wa_pro_orders-gruom = l_meins. * IF wa_pro_orders-gruom NE wa_pro_orders-gmein. * CLEAR l_menge. * ** If no conversion possible just use gr qty * CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' * EXPORTING * kzmeinh = c_x * input = wa_pro_orders-menge * matnr = wa_pro_orders-plnbez * meinh = wa_pro_orders-gmein * meins = wa_pro_orders-gruom * IMPORTING * output = l_menge * EXCEPTIONS * conversion_not_found = 1 * input_invalid = 2 * material_not_found = 3 * meinh_not_found = 4 * meins_missing = 5 * no_meinh = 6 * output_invalid = 7 * overflow = 8 * OTHERS = 9. * IF sy-subrc = 0. * wa_pro_orders-menge = l_menge. * ENDIF. ************************MOD-003*************************************** * clear: l_gamng. * * CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' * EXPORTING * kzmeinh = c_x * input = wa_pro_orders-gamng * matnr = wa_pro_orders-plnbez * meinh = wa_pro_orders-gmein * meins = wa_pro_orders-gruom * IMPORTING * output = l_gamng * EXCEPTIONS * conversion_not_found = 1 * input_invalid = 2 * material_not_found = 3 * meinh_not_found = 4 * meins_missing = 5 * no_meinh = 6 * output_invalid = 7 * overflow = 8 * OTHERS = 9. * IF sy-subrc = 0. * wa_pro_orders-gamng = l_gamng. * ENDIF. **************************MOD-003*************************************** ** * ENDIF. * MODIFY i_pro_orders FROM wa_pro_orders * TRANSPORTING menge gruom gamng * WHERE aufnr = wa_mseg-aufnr. * ENDAT. *************************MOD-003*************************************** * CLEAR : wa_mseg. *************************MOD-003*************************************** * * ENDLOOP. * ENDIF. *********************MOD-008******************************************* **** Select confirmations using operation confirmation number instead of **** order number ** SELECT aufpl ** aplzl ** plnkn ** plnty ** plnnr ** zaehl ** vornr ** arbid ** rueck ** steus ** phflg ** INTO TABLE i_afvc1 ** FROM afvc ** FOR ALL ENTRIES IN i_ordops ** WHERE aufpl = I_ORDOPS-aufpl AND ** steus = 'YBN1' AND ** phflg = c_x. ** ** IF sy-subrc = 0. ** SORT I_AFVC1 BY aufpl ** aplzl ** plnkn ** plnty ** plnnr. ** ** SELECT aufpl ** aplzl ** bmsch ** vgw02 ** lmnga ** ism02 ** ssavd ** FROM afvv INTO TABLE i_afvv1 ** FOR ALL ENTRIES IN i_afvc1 ** WHERE aufpl = i_afvc1-aufpl AND ** aplzl = i_afvc1-aplzl. ** ** IF SY-SUBRC = 0. ** SORT I_AFVV1 BY AUFPL APLZL. ** ENDIF. ** ENDIF. * *********************MOD-008******************************************* * ELSE. ** Extracting confirmation information *MOVE 'Extracting Confirmation Information'(025) TO v_output_text. * PERFORM inform_user_of_progress. * ** SELECT aufnr rueck gmnga lmnga gmein meinh ** meilr stokz rueck_mst ** FROM afru INTO TABLE i_afru ** FOR ALL ENTRIES IN i_pro_orders ** WHERE rueck = i_pro_orders-rueck AND *** MOD-001- Begin of change ** lmnga NE c_0. " AND *** meilr NE space. *** MOD-001- End of change ** IF sy-subrc = 0. ** SORT i_afru BY aufnr . *************MOD-002************************************************* * * ******************MOD-004********************************************** ** ** LOOP AT I_ORDOPS INTO WA_ORDOPS. ** SELECT SINGLE * ** INTO WA_PLPO3 ** FROM plpo ** WHERE plnty = WA_ordops-plnty and ** plnnr = wa_ordops-plnnr and ** PLNKN = wa_ordops-plnkn and ** ZAEHL = wa_ordops-zaehl. ** IF SY-SUBRC = 0. ** APPEND WA_PLPO3 TO I_PLPO3. ** ENDIF. ** ENDLOOP. *** and steus = 'YBN1'. ** ******************MOD-005*********************************************** *** LOOP AT I_PRO_ORDERS into WA_PRO_ORDERS. ***********************mod-004***************************************** *** READ TABLE I_PLPO3 INTO WA_PLPO3 WITH KEY *** plnty = wa_pro_orders-plnty *** plnnr = wa_pro_orders-plnnr *** plnkn = wa_pro_orders-plnkn *** zaehl = wa_pro_orders-zaehl. **** steus = 'YBN1'. *********************MOD-004******************************************** ** ** ******************************MOD-005******************************** ** LOOP AT I_ORDOPS INTO WA_ORDOPS. ******************************MOD-005******************************* *** READ table i_afvc into wa_afvc with key **** aufpl = wa_pro_orders-aufpl *** aufpl = wa_ordops-aufpl binary search. *** steus = 'YBN1' *** phflg = c_x binary search. ** ***********************MOD-005************************************** ** **********************MOD-006************************************** ** CLEAR: WA_PLPO3. ** READ TABLE I_PLPO3 INTO WA_PLPO3 WITH KEY ** plnty = wa_ordops-plnty ** plnnr = wa_ordops-plnnr *** plnkn = wa_ordops-plnkn *** zaehl = wa_ordops-zaehl ** steus = 'YBN1' binary search. *** vornr = wa_ordops-vornr *** werks = p_werks binary search. ** **********************MOD-006************************************** ** IF SY-SUBRC = 0. *** READ table i_afvc into wa_afvc with key *** aufpl = wa_ordops-aufpl *** aplzl = wa_ordops-aplzl *** plnkn = wa_ordops-plnkn *** plnty = wa_ordops-plnty *** plnnr = wa_ordops-plnnr *** zaehl = wa_ordops-zaehl BINARY SEARCH. *******************mod-006******************************************** ** check wa_plpo3-vgw02 IS NOT INITIAL. ** clear: wa_afvc. ** READ TABLE i_afvc INTO wa_afvc ** WITH KEY plnty = wa_plpo3-plnty ** plnnr = wa_plpo3-plnnr ** plnkn = wa_plpo3-plnkn ** zaehl = wa_plpo3-zaehl ** aufpl = wa_ordops-aufpl. ***********************MOD-006************************************** ** if sy-subrc = 0. ********************mod-004********************************************* ** ** CLEAR: WA_AFVV. ** READ TABLE I_AFVV into wa_afvv with key ** aufpl = wa_afvc-aufpl ** aplzl = wa_afvc-aplzl binary search. ** if sy-subrc = 0. ** CLEAR: I_AFRU. ** SELECT aufnr rueck gmnga lmnga gmein meinh ** meilr stokz rueck_mst ** FROM afru INTO TABLE i_afru ** WHERE rueck = wa_afvc-rueck AND *** WHERE rueck = wa_ordops-rueck AND *** aufnr = wa_pro_orders-aufnr. ** aufnr = wa_ordops-aufnr. ** ** if sy-subrc = 0. ** SORT i_afru BY aufnr RUECK. ** LOOP AT i_afru INTO wa_afru. *** READ TABLE i_pro_orders INTO wa_pro_orders *** WITH KEY aufnr = wa_afru-aufnr. ** IF sy-subrc = 0. ** l_lmnga = l_lmnga + wa_afru-lmnga. ** l_cfuom = wa_afru-gmein. *** wa_pro_orders-lmnga = wa_afru-lmnga. *** wa_pro_orders-cfuom = wa_afru-gmein. *** MODIFY i_pro_orders FROM wa_pro_orders *** TRANSPORTING lmnga cfuom *** WHERE aufnr = wa_afru-aufnr. ** ENDIF. ** ENDLOOP. ** endif. *************************MOD-005*************************************** ** wa_ordops-lmnga = l_lmnga. ** wa_ordops-cfuom = l_cfuom. ** MODIFY i_ordops FROM wa_ordops ** TRANSPORTING lmnga cfuom ******************************MOD-006********************************* ** where plnty = wa_ordops-plnty and ** plnnr = wa_ordops-plnnr and *** plnkn = wa_ordops-plnkn and *** zaehl = wa_ordops-zaehl and ** aufpl = wa_ordops-aufpl. ****************************MOD-006********************************** ** *******************MOD-003******************************************* ** clear: l_lmnga, l_cfuom. *******************mod-003*************************************** ** ENDIF. ** ENDIF. *** clear: wa_pro_orders. *****************************mod-004********************************* ** ENDIF. ** clear: wa_ordops. ** ENDLOOP. **************************MOD-005************************************** ** ** i_ordops1[] = i_ordops[]. ** delete i_ordops1 where lmnga eq 0. ** ** LOOP AT I_PRO_ORDERS INTO WA_PRO_ORDERS. ** read table i_ordops1 into wa_ordops1 with key ** aufnr = wa_pro_orders-aufnr binary search. ** IF SY-SUBRC = 0. ** wa_pro_orders-lmnga = wa_ordops1-lmnga. ** wa_pro_orders-cfuom = wa_ordops1-cfuom. ** if wa_pro_orders-menge is initial. ** wa_pro_orders-menge = wa_pro_orders-gamng. ** endif. ** MODIFY i_pro_orders FROM wa_pro_orders ** TRANSPORTING lmnga cfuom menge ** where aufnr = wa_ordops1-aufnr. ** ENDIF. ** ENDLOOP. ** endif. *********************************MOD-007******************************* * *** Select confirmations using operation confirmation number instead of *** order number * SELECT aufpl * aplzl * plnkn * plnty * plnnr * zaehl * vornr * arbid * rueck * steus * phflg * INTO TABLE i_afvc1 * FROM afvc * FOR ALL ENTRIES IN i_ordops * WHERE aufpl = I_ORDOPS-aufpl AND * steus = 'YBN1' AND * phflg = c_x. * * IF sy-subrc = 0. * SORT I_AFVC1 BY aufpl * aplzl * plnkn * plnty * plnnr. * * SELECT aufpl * aplzl * bmsch * vgw02 * lmnga * ism02 * ssavd * FROM afvv INTO TABLE i_afvv1 * FOR ALL ENTRIES IN i_afvc1 * WHERE aufpl = i_afvc1-aufpl AND * aplzl = i_afvc1-aplzl. * * IF SY-SUBRC = 0. * SORT I_AFVV1 BY AUFPL APLZL. * * LOOP AT I_ORDOPS INTO WA_ORDOPS. * READ TABLE I_PRO_ORDERS INTO WA_PRO_ORDERS WITH KEY * AUFNR = WA_ORDOPS-AUFNR * BINARY SEARCH. * IF SY-SUBRC = 0. * READ table i_afvc1 into wa_afvc1 with key * plnty = wa_ORDOPS-plnty * plnnr = wa_ORDOPS-plnnr * plnkn = wa_ORDOPS-plnkn * zaehl = wa_ORDOPS-zaehl * aufpl = wa_pro_orders-aufpl. * IF SY-SUBRC = 0. * READ TABLE I_AFVV1 into wa_afvv1 with key * aufpl = wa_afvc1-aufpl * aplzl = wa_afvc1-aplzl binary search. * IF SY-SUBRC = 0. * CHECK WA_AFVV1-VGW02 NE 0. * select aufnr * rueck * gmnga * lmnga * gmein * meinh * meilr * stokz * rueck_mst * INTO TABLE I_AFRU1 * from afru * where rueck = wa_afvc1-rueck AND * werks = p_werks and * aufnr = WA_PRO_ORDERS-aufnr and * AUFPL = WA_AFVC1-AUFPL AND * APLZL = WA_AFVC1-APLZL. * * IF SY-SUBRC = 0. * * perform get_confirmation_qty_new using * wa_ordops-lmnga * wa_ordops-cfuom. * * MODIFY i_ordops FROM wa_ordops * TRANSPORTING lmnga cfuom. * ENDIF. * ENDIF. * ENDIF. * ENDIF. * * ENDLOOP. * ENDIF. * ENDIF. * * i_ordops1[] = i_ordops[]. * delete i_ordops1 where lmnga eq 0. * delete adjacent duplicates from i_ordops1 comparing * aufnr * aufpl * aplzl * plnkn * plnty * plnnr * zaehl * vornr. * * * LOOP AT I_PRO_ORDERS INTO WA_PRO_ORDERS. * read table i_ordops1 into wa_ordops1 with key * aufnr = wa_pro_orders-aufnr binary search. * IF SY-SUBRC = 0. * wa_pro_orders-lmnga = wa_ordops1-lmnga. * wa_pro_orders-cfuom = wa_ordops1-cfuom. * if wa_pro_orders-menge is initial. * wa_pro_orders-menge = wa_pro_orders-gamng. * endif. * MODIFY i_pro_orders FROM wa_pro_orders * TRANSPORTING lmnga cfuom menge * where aufnr = wa_ordops1-aufnr. * ENDIF. * ENDLOOP. * endif. * endif. *********MOD-007******************************************************* * * *ENDFORM. " get_mat_segment **&--------------------------------------------------------------------- ** **& Form get_bom_info **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM get_bom_info. * DATA: wa_doc_segment1 TYPE ty_doc_segment, * l_qty TYPE bdmng, * l_per TYPE p DECIMALS 3, * l_tabix TYPE sytabix, * v_menge like ekpo-menge. * DATA: STRUCT_MARC TYPE MARC, * STRUCT_MARA TYPE MARA. * **- Begin of MOD-001 * * TYPES: BEGIN OF l_ty_bom_header, * stlty TYPE stlty, " BOM category * stlnr TYPE stnum, " Bill of material * stlal TYPE stalt, " Alternative BOM * bmein TYPE basme, " Base unit of measure for BOM * bmeng TYPE basmn, " Base Quantity * END OF l_ty_bom_header. * * DATA: l_i_bom_header TYPE STANDARD TABLE OF l_ty_bom_header * INITIAL SIZE 0, * * l_wa_bom_header TYPE l_ty_bom_header. * **- End of MOD-001 * * IF NOT i_pro_orders[] IS INITIAL. * MOVE 'Extracting BOM Information'(026) TO v_output_text. * PERFORM inform_user_of_progress. * ** Get issued materials for all process orders * **Begin of addition * * IF i_mseg1 IS INITIAL. **** Mod-002******************************************************** * SELECT aufnr mblnr mjahr zeile matnr bwart menge meins * rsnum rspos rsart erfmg erfme * FROM aufm "Table : Goods movements for order * INTO TABLE i_mseg1 * FOR ALL ENTRIES IN i_pro_orders * WHERE aufnr = i_pro_orders-aufnr. ** AND matnr = i_pro_orders-plnbez. ****** Mod-002**************************************************** * ENDIF. * * LOOP AT i_pro_orders INTO wa_pro_orders. * * LOOP AT i_mseg1 INTO wa_doc_segment * WHERE mjahr = wa_pro_orders-wdate+0(4) * AND bwart IN i_r_bwart * AND aufnr = wa_pro_orders-aufnr. * * APPEND wa_doc_segment TO i_doc_segment. * * CLEAR : wa_doc_segment. * ENDLOOP. * CLEAR : wa_pro_orders. * ENDLOOP. * * IF NOT i_doc_segment IS INITIAL. * * SELECT mblnr mjahr zeile sjahr smbln smblp rsnum rspos rsart * FROM mseg INTO TABLE i_prev_doc * FOR ALL ENTRIES IN i_doc_segment * WHERE mblnr = i_doc_segment-mblnr * AND mjahr = i_doc_segment-mjahr * AND zeile = i_doc_segment-zeile. * * ENDIF. * * IF NOT i_doc_segment IS INITIAL. * **End of addition * * SORT i_doc_segment BY aufnr. * * LOOP AT i_doc_segment INTO wa_doc_segment1. * * wa_issued_mat-aufnr = wa_doc_segment1-aufnr. * ** No reservation number so see if any other link exists * * IF wa_doc_segment1-rsnum IS INITIAL. * ** Try to find any linked previous movements * READ TABLE i_prev_doc INTO wa_prev_doc * WITH KEY mblnr = wa_doc_segment1-mblnr * mjahr = wa_doc_segment1-mjahr * zeile = wa_doc_segment1-zeile. * ENDIF. * * IF wa_doc_segment1-rsnum IS INITIAL AND * wa_prev_doc-smbln NE space. * * READ TABLE i_prev_doc INTO wa_prev_doc * WITH KEY mblnr = wa_prev_doc-smbln * mjahr = wa_prev_doc-sjahr * zeile = wa_prev_doc-smblp. * * IF sy-subrc = 0 AND NOT ( wa_doc_segment1-rsnum IS INITIAL ). ** found a previous record * wa_issued_mat-rsnum = wa_prev_doc-rsnum. * wa_issued_mat-rspos = wa_prev_doc-rspos. * wa_issued_mat-rsart = wa_prev_doc-rsart. * ENDIF. * * ELSE. * wa_issued_mat-rsnum = wa_doc_segment1-rsnum. * wa_issued_mat-rspos = wa_doc_segment1-rspos. * wa_issued_mat-rsart = wa_doc_segment1-rsart. * ENDIF. * wa_issued_mat-matnr = wa_doc_segment1-matnr. * IF wa_doc_segment1-bwart = c_movm_low_262 * OR wa_doc_segment1-bwart = c_movm_low_531. * wa_issued_mat-menge = wa_doc_segment1-menge * -1. * ELSE. * wa_issued_mat-menge = wa_doc_segment1-menge. * ENDIF. * wa_issued_mat-meins = wa_doc_segment1-meins. * COLLECT wa_issued_mat INTO i_issued_mat. * CLEAR : wa_doc_segment1, wa_prev_doc. * ENDLOOP. * ENDIF. * ** Selecting reservations * SELECT rsnum rspos rsart xloek matnr werks bdmng * meins shkzg aufnr dumps vornr rgekz * stlty stlnr stlkn stpoz * FROM resb INTO TABLE i_reservations * FOR ALL ENTRIES IN i_pro_orders * WHERE rsnum = i_pro_orders-rsnum AND * aufnr = i_pro_orders-aufnr * AND bdmng %GT 0 * AND dumps = space. * IF sy-subrc = 0. * SORT i_reservations. ** Selecting material standard price and price unit ** SELECT stlty stlnr stlkn stpoz ausch " MOD-001 -- * SELECT stlty stlnr stlkn stpoz meins menge ausch yyzero"MOD-001++ * FROM stpo INTO TABLE i_stpo * FOR ALL ENTRIES IN i_reservations * WHERE stlty = i_reservations-stlty * AND stlnr = i_reservations-stlnr * AND stlkn = i_reservations-stlkn * AND stpoz = i_reservations-stpoz. * * IF sy-subrc = 0. **Not required to handle as Component scrap in percent is optional * ENDIF. * * SELECT matnr werks kausf * FROM marc INTO TABLE i_marc * FOR ALL ENTRIES IN i_reservations * WHERE matnr = i_reservations-matnr * AND werks = i_reservations-werks. * * IF sy-subrc = 0. **Not required to handle as Component scrap in percent (plant level) is **optional * ENDIF. * * SELECT matnr bwkey stprs peinh * FROM mbew INTO TABLE i_mat_valuation * FOR ALL ENTRIES IN i_reservations * WHERE matnr = i_reservations-matnr * AND bwkey = i_reservations-werks. * * IF sy-subrc = 0. **Not required to handle Standard Price and Price Unit are not mandatory * ENDIF. **- Begin of MOD-001 * SELECT stlty stlnr stlal bmein bmeng * INTO TABLE l_i_bom_header * FROM stko * FOR ALL ENTRIES IN i_pro_orders * WHERE stlty = i_pro_orders-stlty * AND stlnr = i_pro_orders-stlnr * AND stlal = i_pro_orders-stlal. * * IF sy-subrc = 0. ** There must be at least one record for process order. * ENDIF. * **- End of MOD-001 * * LOOP AT i_reservations INTO wa_reservations. * CLEAR: wa_order_status_text. * l_tabix = sy-tabix. * * IF wa_reservations-xloek NE space. * READ TABLE i_order_status_text INTO wa_order_status_text * WITH KEY aufnr = wa_reservations-aufnr. * IF sy-subrc = 0 * AND wa_order_status_text-sttxt NS c_teco. * DELETE i_issued_mat WHERE rsnum = wa_reservations-rsnum * AND rspos = wa_reservations-rspos * AND rsart = wa_reservations-rsart. * DELETE i_reservations INDEX l_tabix. * CONTINUE. * ENDIF. * ENDIF. * * IF NOT ( rb_nflsh IS INITIAL ) * AND wa_reservations-rgekz NE space. * DELETE i_issued_mat WHERE rsnum = wa_reservations-rsnum * AND rspos = wa_reservations-rspos * AND rsart = wa_reservations-rsart. * DELETE i_reservations INDEX l_tabix. * CONTINUE. * ENDIF. * wa_ordmats-aufnr = wa_reservations-aufnr. * wa_ordmats-matnr = wa_reservations-matnr. * wa_ordmats-vornr = wa_reservations-vornr. * wa_ordmats-rsnum = wa_reservations-rsnum. * wa_ordmats-rspos = wa_reservations-rspos. * wa_ordmats-rsart = wa_reservations-rsart. * wa_ordmats-bdmng = wa_reservations-bdmng. * wa_ordmats-meins = wa_reservations-meins. * * READ TABLE i_issued_mat INTO wa_issued_mat * WITH KEY rsnum = wa_reservations-rsnum * rspos = wa_reservations-rspos * rsart = wa_reservations-rsart. * IF sy-subrc = 0. * wa_ordmats-menge = wa_ordmats-menge + wa_issued_mat-menge. * wa_ordmats-amein = wa_issued_mat-meins. * ELSE. * wa_ordmats-amein = wa_reservations-meins. * ENDIF. ** Use the reservation quantity as the standard planned quantity ** If material is by-product need to turn it into a negative number. * IF wa_reservations-shkzg = c_s. * wa_ordmats-bdmng = wa_ordmats-bdmng * -1. * ENDIF. * * READ TABLE i_pro_orders INTO wa_pro_orders * WITH KEY aufnr = wa_reservations-aufnr. ***************MOD-003************************************** * clear: l_qty. ***************MOD-003************************************** * IF rb_prod IS INITIAL. * l_qty = wa_pro_orders-lmnga. "confirmed qty ****************MOD-003************************************* * ELSEIF ( rb_prod is not initial ) and ( rb_actl is initial ). * l_qty = wa_pro_orders-gamng. * ELSEIF ( RB_PROD IS NOT INITIAL ) and * ( RB_ACTL is not initial ). * l_qty = wa_pro_orders-menge. "goods receipt qty * ENDIF. * ** Calculate the standard quantity ********************MOD-003***************************** ** IF NOT rb_actl IS INITIAL. ********************MOD-003***************************** * *********************mod-007****************************** * IF L_QTY IS INITIAL. * SELECT aufnr rueck gmnga lmnga gmein meinh * meilr stokz rueck_mst * FROM afru INTO TABLE i_afru * FOR ALL ENTRIES IN i_pro_orders * WHERE rueck = i_pro_orders-rueck AND * lmnga NE c_0. * * READ TABLE i_pro_orders INTO wa_pro_orders * WITH KEY aufnr = wa_reservations-aufnr. * IF SY-SUBRC = 0. * READ table i_afvc into wa_afvc with key * aufpl = wa_pro_orders-aufpl * steus = 'YBN1' * phflg = c_x binary search. * IF SY-SUBRC = 0. * READ TABLE I_AFVV into wa_afvv with key * aufpl = wa_afvc-aufpl * aplzl = wa_afvc-aplzl binary search. * if sy-subrc = 0. * SORT i_afru BY aufnr RUECK. * LOOP AT i_afru INTO wa_afru * WHERE AUFNR = WA_PRO_ORDERS-AUFNR AND * RUECK = WA_AFVC-RUECK. * IF sy-subrc = 0. * l_QTY = l_QTY + wa_afru-lmnga. * ENDIF. * ENDLOOP. * check wa_pro_orders-gamng ne 0. * clear: wa_ordmats-stdqy. * wa_ordmats-stdqy = ( l_qty / wa_pro_orders-gamng ) * * wa_ordmats-bdmng. * endif. * ENDIF. * ENDIF. **********************************MOD-007****************************** * ELSE. * check wa_pro_orders-gamng ne 0. * clear: wa_ordmats-stdqy. * wa_ordmats-stdqy = ( l_qty / wa_pro_orders-gamng ) * * wa_ordmats-bdmng. * ENDIF. ********************MOD-006************************ * ** check wa_pro_orders-gamng ne 0. ** clear: wa_ordmats-stdqy. ** wa_ordmats-stdqy = ( l_qty / wa_pro_orders-gamng ) * ** wa_ordmats-bdmng. ********************mod-006************************* ** ELSE. *********MOD-002***************************************** *** check wa_pro_orders-menge ne 0. *** wa_ordmats-stdqy = ( l_qty / wa_pro_orders-menge ) * *** wa_ordmats-bdmng. ** check wa_pro_orders-gamng ne 0. ** wa_ordmats-stdqy = ( l_qty / wa_pro_orders-gamng ) * ** wa_ordmats-bdmng. ** ENDIF. ********MOD-002******************************************** **********************MOD-003******************************** * * ** gets the zero loss figure from the bom * **- Begin of MOD-001 * ** READ TABLE i_stpo INTO wa_stpo ** WITH KEY stlty = wa_reservations-stlty ** stlnr = wa_reservations-stlnr ** stlkn = wa_reservations-stlkn ** stpoz = wa_reservations-stpoz. ** IF sy-subrc = 0 AND NOT ( wa_stpo-ausch IS INITIAL ). ** l_per = ( wa_stpo-ausch / c_100 ) * wa_ordmats-stdqy. ** ELSE. ** READ TABLE i_marc INTO wa_marc ** WITH KEY matnr = wa_reservations-matnr ** werks = wa_reservations-werks. ** IF sy-subrc = 0 AND NOT ( wa_marc-kausf IS INITIAL ). ** l_per = ( wa_marc-kausf / c_100 ) * wa_ordmats-stdqy. ** ELSE. ** MOVE c_0 TO l_per. ** ENDIF. ** ENDIF. * ** wa_ordmats-zloss = wa_ordmats-stdqy - l_per. * * CLEAR l_qty. * IF rb_actl IS INITIAL. * l_qty = wa_pro_orders-gamng. * ELSEIF rb_pland IS INITIAL. * l_qty = wa_pro_orders-menge. * ENDIF. * * READ TABLE l_i_bom_header INTO l_wa_bom_header * WITH KEY stlty = wa_pro_orders-stlty * stlnr = wa_pro_orders-stlnr * stlal = wa_pro_orders-stlal. * * IF sy-subrc IS INITIAL. ***************mod-002*************************************** * IF L_WA_BOM_HEADER-BMEIN NE WA_PRO_ORDERS-GMEIN. * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = wa_pro_orders-PLNBEZ * i_in_me = wa_pro_orders-gmein * i_out_me = l_wa_bom_header-bmein * i_menge = l_qty * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * l_qty = v_menge. * ENDIF. * ENDIF. * * *************mod-002****************************************** * IF l_wa_bom_header-bmeng IS NOT INITIAL. * * READ TABLE i_stpo INTO wa_stpo * WITH KEY stlty = wa_reservations-stlty * stlnr = wa_reservations-stlnr * stlkn = wa_reservations-stlkn * stpoz = wa_reservations-stpoz. * * l_per = wa_stpo-menge * * ( l_qty / l_wa_bom_header-bmeng ). * * wa_ordmats-zloss = l_per * wa_stpo-yyzero. * * ENDIF. * * ENDIF. * **- End of MOD-001 * READ TABLE i_mat_valuation INTO wa_mat_valuation * WITH KEY matnr = wa_reservations-matnr * bwkey = wa_reservations-werks. * IF sy-subrc = 0. * wa_ordmats-stprs = wa_mat_valuation-stprs. * wa_ordmats-peinh = wa_mat_valuation-peinh. * ENDIF. * ** Adding material number to I_MATERIAL_NO internal table * wa_material_no-matnr = wa_reservations-matnr. * * APPEND: wa_ordmats TO i_ordmats, * wa_material_no TO i_material_no. * CLEAR: wa_ordmats, l_qty, l_per, wa_stpo, wa_marc, * wa_issued_mat, wa_pro_orders, wa_mat_valuation, * wa_material_no, l_tabix, wa_reservations. * * ENDLOOP. ** Now we need to see if any of the materials issued to the order ** are not on the BOM (ie replacement materials) ** First summarise the data * SORT i_ordmats BY aufnr matnr rsnum. * LOOP AT i_issued_mat INTO wa_issued_mat. * READ TABLE i_ordmats INTO wa_ordmats * WITH KEY aufnr = wa_issued_mat-aufnr * matnr = wa_issued_mat-matnr * rsnum = wa_issued_mat-rsnum * BINARY SEARCH. * IF sy-subrc GE 4. ** material not on bom table so add it * CLEAR: wa_ordmats. ** Get the standard price info for costing purposes in output * READ TABLE i_mat_valuation INTO wa_mat_valuation * WITH KEY matnr = wa_issued_mat-matnr * bwkey = p_werks. * wa_issued_mat-stprs = wa_mat_valuation-stprs. * wa_issued_mat-peinh = wa_mat_valuation-peinh. * MODIFY i_issued_mat FROM wa_issued_mat. * wa_ordmats-stprs = wa_mat_valuation-stprs. * wa_ordmats-peinh = wa_mat_valuation-peinh. * MOVE: wa_issued_mat-aufnr TO wa_ordmats-aufnr, * wa_issued_mat-matnr TO wa_ordmats-matnr, * wa_issued_mat-menge TO wa_ordmats-menge, * wa_issued_mat-meins TO wa_ordmats-meins, * wa_issued_mat-meins TO wa_ordmats-amein. * COLLECT wa_ordmats INTO i_ordmats. * * ELSE. ** material is on bom table so delete from sum_msegi * DELETE i_issued_mat. " FROM wa_issued_mat. * ENDIF. * CLEAR : wa_issued_mat. * ENDLOOP. * * CLEAR wa_issued_mat. * ** Retrieve task list information of operations/activity from PLPO table * SELECT * FROM plpo INTO TABLE i_plpo * FOR ALL ENTRIES IN i_pro_orders * WHERE plnty = i_pro_orders-plnty * AND plnnr = i_pro_orders-plnnr * AND plnkn = i_pro_orders-plnkn * AND zaehl = i_pro_orders-zaehl. * * IF sy-subrc = 0. **Not required to handle **Task list - operation/activity information is optional * ENDIF. * * SELECT rueck rmzhl ism01 ism02 ism03 ism04 ism05 ism06 stokz * FROM afru INTO TABLE i_ord_conf * FOR ALL ENTRIES IN i_pro_orders * WHERE rueck = i_pro_orders-rueck. * * * IF sy-subrc = 0. **Not required to handle **Order Confirmations information is not mandatiory * ENDIF. * ENDIF. * * IF NOT i_ordops[] IS INITIAL. * * SELECT * FROM plpo INTO TABLE i_plpo1 * FOR ALL ENTRIES IN i_ordops * WHERE plnty = i_ordops-plnty * AND plnnr = i_ordops-plnnr * AND plnkn = i_ordops-plnkn * AND zaehl = i_ordops-zaehl. * * IF sy-subrc = 0. **Not required to handle **operations information is optional. * ENDIF. * * SELECT rueck rmzhl ism01 ism02 ism03 ism04 ism05 ism06 stokz * FROM afru INTO TABLE i_ord_conf1 * FOR ALL ENTRIES IN i_ordops * WHERE rueck = i_ordops-rueck. * * IF sy-subrc = 0. **Not required to handle **Order Confirmations information is not mandatiory * ENDIF. * * ENDIF. * ENDIF. *ENDFORM. " get_bom_info * **&--------------------------------------------------------------------- ** **& Form output **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM output. * * MOVE 'Formatting Output'(027) TO v_output_text. * PERFORM inform_user_of_progress. * ** Selecting material descriptions * SELECT matnr maktx * FROM makt INTO TABLE i_material_des * FOR ALL ENTRIES IN i_material_no * WHERE spras = sy-langu * AND matnr = i_material_no-matnr. * * IF sy-subrc = 0. **Not required to handle **Material desc is optinal * ENDIF. * * ** Selecting Work centers descriptions * SELECT objid ktext * FROM crtx INTO TABLE i_wc_text * FOR ALL ENTRIES IN i_pro_orders * WHERE objty = c_objtyp * AND objid = i_pro_orders-arbid * AND spras = sy-langu. * * IF sy-subrc = 0. **Not required to handle **Work centers descriptions are optional * ENDIF. * * CASE c_x. * WHEN rb_detl. * PERFORM display_detail_report. * WHEN rb_summ. * PERFORM display_summary_report. * WHEN rb_phase. * PERFORM display_phase_report. * ENDCASE. * * *ENDFORM. " output * **&--------------------------------------------------------------------- ** **& Form move_data2_ordops **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM move_data2_ordops. * * READ TABLE i_afvv INTO wa_afvv WITH KEY aufpl = wa_afvc-aufpl * aplzl = wa_afvc-aplzl BINARY SEARCH. * READ TABLE i_orders INTO wa_orders WITH KEY aufpl = wa_afvc-aufpl. * " BINRAY SEARCH. * IF sy-subrc = 0. ****************** * *READ TABLE i_ordops INTO wa_ordops WITH KEY aufnr = wa_orders-aufnr. ****************** * IF sy-subrc %LT%GT 0. * MOVE-CORRESPONDING wa_orders TO wa_pro_orders. * wa_pro_orders-wdate = wa_afvv-ssavd. * wa_pro_orders-zaehl = wa_afvc-zaehl. * wa_pro_orders-arbpl = wa_crhd-arbpl. * wa_pro_orders-arbid = wa_afvc-arbid. * wa_pro_orders-plnnr = wa_afvc-plnnr. * wa_pro_orders-plnkn = wa_afvc-plnkn. *********MOD-002****************************** ** wa_pro_orders-rueck = wa_afvc-rueck. ********MOD-002******************************** * IF wa_pro_orders-rueck IS INITIAL. * wa_pro_orders-rueck = wa_afvc-rueck. * ENDIF. * * wa_material_no-matnr = wa_orders-plnbez. * * APPEND: wa_pro_orders TO i_pro_orders, * wa_material_no TO i_material_no. * CLEAR: wa_pro_orders, wa_material_no. * ENDIF. * * wa_ordops-aufnr = wa_orders-aufnr. * wa_ordops-aufpl = wa_afvc-aufpl. * wa_ordops-aplzl = wa_afvc-aplzl. * wa_ordops-plnty = wa_afvc-plnty. * wa_ordops-plnkn = wa_afvc-plnkn. * wa_ordops-plnnr = wa_afvc-plnnr. * wa_ordops-zaehl = wa_afvc-zaehl. * wa_ordops-vornr = wa_afvc-vornr. * wa_ordops-arbid = wa_afvc-arbid. * wa_ordops-rueck = wa_afvc-rueck. * wa_ordops-ssavd = wa_afvv-ssavd. * wa_ordops-arbpl = wa_crhd-arbpl. * * APPEND wa_ordops TO i_ordops. * CLEAR wa_ordops. * ENDIF. * CLEAR: wa_afvv, wa_orders. * *ENDFORM. " move_data2_ordops **&--------------------------------------------------------------------- ** **& Form DISPLAY_DETAIL_REPORT **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM display_detail_report. * * DATA: l_date_low(10) TYPE c, * l_date_high(10) TYPE c, * l_diff TYPE menge_d, * l_plan_effic TYPE char05, "MOD-001++ * l_plant_effic TYPE char05, "MOD-001++ * l_gamng TYPE menge_d, * l_gamng1(20) TYPE c, * l_qty TYPE menge_d, * l_prdqty TYPE menge_d, * l_conv TYPE menge_d, * l_aqty TYPE menge_d, * l_sqty TYPE menge_d, * l_gmein TYPE meins, * * l_pcent(3) TYPE p DECIMALS 2, * l_cost(8) TYPE p DECIMALS 2, * * l_act_total(8) TYPE p DECIMALS 2, * l_std_total(8) TYPE p DECIMALS 2, * l_var_total(8) TYPE p DECIMALS 2, * * l_act_gtot(8) TYPE p DECIMALS 2, * l_std_gtot(8) TYPE p DECIMALS 2, * l_var_gtot(8) TYPE p DECIMALS 2, * * l_fromuom TYPE meins. **- Begin of MOD-001 * DATA: l_value TYPE char16, * l_tmp TYPE lmnga, * l_tmp1 TYPE lmnga, * l_effic TYPE p DECIMALS 1, * l_uom TYPE char03. **- End of MOD-001 * * PERFORM pfstatus. * SET PF-STATUS 'MAIN' EXCLUDING i_fcode. * SET TITLEBAR 'VARI' WITH text-066. * MOVE 'Display Detail Report'(028) TO v_output_text. * PERFORM inform_user_of_progress. * ** Clearing local variables * CLEAR: l_cost, l_pcent, l_qty, l_conv, l_aqty, l_sqty, * l_diff, l_plan_effic, l_gamng, l_date_low,l_date_high, * l_act_gtot, l_std_gtot, l_var_gtot. * CLEAR wa_nodestab. * REFRESH i_nodestab. * ****Begin of MOD-001 * IF sy-ucomm = c_zero OR rb_zloss IS NOT INITIAL. * * v_ucomm = c_zero. * * ELSEIF sy-ucomm = c_std OR rb_stdpl IS NOT INITIAL. * * CLEAR : v_ucomm. * * ENDIF. * * IF sy-ucomm = c_fisc. * * v_ucomm1 = c_fisc. * * ELSEIF sy-ucomm = c_qty. * * v_ucomm1 = c_qty. * * ENDIF. ****End of MOD-001 * * wa_nodestab-id = c_1_1. * wa_nodestab-tlevel = c_1. * wa_nodestab-text = 'Production Variances'(031). * wa_nodestab-tlength = c_20. * wa_nodestab-compress = c_x. * APPEND wa_nodestab TO i_nodestab. * * LOOP AT i_pro_orders INTO wa_pro_orders. * * CLEAR: wa_nodestab, l_date_low, l_date_high, l_gamng, * wa_material_des. * * l_gamng = wa_pro_orders-gamng. **************MOD-002************************* * l_gmein = wa_pro_orders-gmein. **************MOD-002************************ * wa_nodestab-id = c_2_1. * wa_nodestab-tlevel = c_2. * wa_nodestab-parent = c_1_1. * ** Order Number text * wa_nodestab-text = 'Order Num:'(032). * wa_nodestab-tlength = c_12. * wa_nodestab-tcolor = c_1. ** Order number * WRITE wa_pro_orders-aufnr TO wa_nodestab-text1 NO-ZERO. * wa_nodestab-tlength1 = c_12. * wa_nodestab-tcolor1 = c_1. * ** Date Range * WRITE wa_pro_orders-wdate TO l_date_low. * WRITE wa_pro_orders-gltrp TO l_date_high. * CONCATENATE l_date_low c_hyp l_date_high * INTO wa_nodestab-text2 SEPARATED BY space. * wa_nodestab-tlength2 = c_25. * wa_nodestab-tcolor2 = c_1. * ** Material Number * WRITE wa_pro_orders-plnbez TO wa_nodestab-text3 NO-ZERO. * wa_nodestab-tlength3 = c_18. * wa_nodestab-tcolor3 = c_1. * ** Material Description * READ TABLE i_material_des INTO wa_material_des * WITH KEY matnr = wa_pro_orders-plnbez. * wa_nodestab-text4 = wa_material_des-maktx. * wa_nodestab-tlength4 = c_33. * wa_nodestab-tcolor4 = c_1. * ** Get actual produced Quantity or Confirm Quantity * IF NOT ( rb_prod IS INITIAL ). * l_prdqty = wa_pro_orders-menge. * l_fromuom = wa_pro_orders-gruom. * ELSE. ***********MOD-002**************************************** * LOOP AT i_plpo1 INTO wa_plpo1 * WHERE plnty = wa_pro_orders-plnty * AND plnnr = wa_pro_orders-plnnr * AND steus = 'YBN1'. * IF wa_plpo1-vgw02 IS NOT INITIAL. *************MOD-005***************************** ** wa_plpo2 = wa_plpo1. ** append wa_plpo2 to i_plpo2. ** ENDIF. ** ENDLOOP. *************mod-005**************************** * CLEAR: wa_afvc, wa_afvv. * READ TABLE i_afvc INTO wa_afvc * WITH KEY plnty = wa_plpo1-plnty * plnnr = wa_plpo1-plnnr * plnkn = wa_plpo1-plnkn * zaehl = wa_plpo1-zaehl * aufpl = wa_pro_orders-aufpl. * * * IF sy-subrc IS INITIAL. * READ TABLE i_afvv INTO wa_afvv * WITH KEY aufpl = wa_afvc-aufpl * aplzl = wa_afvc-aplzl. * ** READ table i_afvc into wa_afvc with key ** aufpl = wa_pro_orders-aufpl binary search. ** if sy-subrc = 0. ** READ TABLE I_AFVV into wa_afvv with key ** aufpl = wa_afvc-aufpl ** aplzl = wa_afvc-aplzl binary search. * IF sy-subrc = 0. * l_prdqty = wa_afvv-lmnga. *********************MOD-006*********************** * IF wa_pro_orders-cfuom IS INITIAL. * SELECT aufnr rueck gmnga lmnga gmein meinh * meilr stokz rueck_mst * FROM afru INTO TABLE i_afru * WHERE rueck = wa_afvc-rueck AND * aufnr = wa_pro_orders-aufnr. * IF NOT i_afru[] IS INITIAL. * READ TABLE i_afru INTO wa_afru INDEX 1. * IF sy-subrc = 0. * l_fromuom = wa_afru-gmein. * ENDIF. * ENDIF. * ELSE. * l_fromuom = wa_pro_orders-cfuom. * ENDIF. ********************MOD-006************************ * ENDIF. * ENDIF. ***********MOD-002**************************************** ** l_prdqty = wa_pro_orders-lmnga. ** l_fromuom = wa_pro_orders-cfuom. * ENDIF. * ENDLOOP. * ENDIF. * *************mod-003*********************** * IF NOT rb_pland IS INITIAL. * IF rb_conf IS INITIAL. * l_prdqty = wa_pro_orders-gamng. * ELSE. * l_prdqty = wa_afvv-lmnga. * ENDIF. * ENDIF. ************mod-003************************ * IF rb_kgm = c_x. ** do actual conversion * PERFORM uom_convert USING wa_pro_orders-plnbez * l_prdqty * l_fromuom * l_conv. * l_prdqty = l_conv. ** do planned conversion **********MOD-002************************** ** l_fromuom = wa_pro_orders-gmein. * l_fromuom = 'KG'. * * PERFORM uom_convert USING wa_pro_orders-plnbez * wa_pro_orders-gamng * l_fromuom * l_conv. * * l_gamng = l_conv. * ENDIF. * ** Produced Quantity / Confirmed Quantity * MOVE l_prdqty TO wa_nodestab-text5(20). * MOVE l_fromuom TO l_uom. "MOD-001++ ** WRITE l_prdqty TO i_nodestab-text5(20). * * IF NOT ( rb_prod IS INITIAL ). ** CONCATENATE 'Prod Qty: '(033) wa_nodestab-text5 "MOD-001- * CONCATENATE 'Prod Qty: '(033) wa_nodestab-text5 l_uom "MOD-001+ * INTO wa_nodestab-text5 SEPARATED BY space. * * ELSE. ** CONCATENATE 'Conf Qty: '(034) wa_nodestab-text5 "MOD-001- * CONCATENATE 'Conf Qty: '(034) wa_nodestab-text5 l_uom "MOD-001+ * INTO wa_nodestab-text5 SEPARATED BY space. * ENDIF. * * ** wa_nodestab-tlength5 = c_30. "MOD-001- * wa_nodestab-tlength5 = c_35_1. "MOD-001+ * wa_nodestab-tcolor5 = c_1. * * APPEND wa_nodestab TO i_nodestab. * ** Resource Information * CLEAR wa_nodestab. * wa_nodestab-id = c_2_2. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_1_1. * * CONCATENATE 'Resource:'(035) wa_pro_orders-arbpl * INTO wa_nodestab-text SEPARATED BY space. * wa_nodestab-tlength = c_25. * wa_nodestab-tcolor = c_4. * * READ TABLE i_wc_text INTO wa_wc_text * WITH KEY objid = wa_pro_orders-arbid. * wa_nodestab-text1 = wa_wc_text-ktext. * wa_nodestab-tlength1 = c_37. * wa_nodestab-tcolor1 = c_4. * ** Calculating Plan Effic value **- Begin of MOD-001 ** IF l_gamng GT 0. ** l_diff = l_gamng - l_prdqty. ** l_plan_effic = c_100 - c_100 * ( l_diff / l_gamng ). ** ELSE. ** CLEAR l_plan_effic. ** ENDIF. * ***** Mod-002********************** * CLEAR: wa_plpo1. ******mOD-002********************** * LOOP AT i_plpo1 INTO wa_plpo1 * WHERE plnty = wa_pro_orders-plnty * AND plnnr = wa_pro_orders-plnnr * AND steus = 'YBN1'. * IF wa_plpo1-vgw02 IS NOT INITIAL. * MOVE wa_plpo1-usr04 TO l_effic. "L_VALUE. * WRITE l_effic TO l_plan_effic. * wa_plpo2 = wa_plpo1. * APPEND wa_plpo2 TO i_plpo2. * ** L_PLAN_EFFIC = floor( L_VALUE ) ***************MOD-002*************************** ** ELSE. ** CLEAR l_plan_effic. * ENDIF. **************MOD-002**************************** * ENDLOOP. * * ** CONCATENATE 'Plan Effic:'(036) l_plan_effic c_perc "'%' * CONCATENATE 'Exp. Line Eff.'(036) l_plan_effic c_perc "'%' * INTO wa_nodestab-text2 SEPARATED BY space. * wa_nodestab-tlength2 = c_25. * wa_nodestab-tcolor2 = c_4. * * CLEAR l_effic. **** Mod-002**************** * * ** READ TABLE i_afvc INTO wa_afvc ** WITH KEY plnty = wa_plpo1-plnty ** plnnr = wa_plpo1-plnnr ** zaehl = wa_plpo1-zaehl. * ****************MOD-008************************ ** LOOP AT I_ORDOPS INTO WA_ORDOPS. ** READ TABLE I_PRO_ORDERS INTO WA_PRO_ORDERS WITH KEY ** AUFNR = WA_ORDOPS-AUFNR ** BINARY SEARCH. ** IF SY-SUBRC = 0. ** READ table i_afvc1 into wa_afvc1 with key ** plnty = wa_ORDOPS-plnty ** plnnr = wa_ORDOPS-plnnr ** plnkn = wa_ORDOPS-plnkn ** zaehl = wa_ORDOPS-zaehl ** aufpl = wa_pro_orders-aufpl. ** IF SY-SUBRC = 0. ** READ TABLE I_AFVV1 into wa_afvv1 with key ** aufpl = wa_afvc1-aufpl ** aplzl = wa_afvc1-aplzl binary search. ** IF SY-SUBRC = 0. ** CHECK WA_AFVV1-VGW02 NE 0. ** l_tmp = wa_afvv1-bmsch * wa_afvv1-ism02. ** IF l_tmp IS NOT INITIAL. ** ** l_tmp1 = ( wa_afvv1-lmnga * wa_afvv1-vgw02 ) / l_tmp. ** ** l_tmp1 = l_tmp1 * 100. ** ** MOVE l_tmp1 TO l_effic. ** ** ENDIF. ** ENDIF. ** ENDIF. ** ENDIF. ** ENDLOOP. * ***************MOD-008************************* * CLEAR: wa_afvc, wa_afvv. * LOOP AT i_plpo2 INTO wa_plpo2. * READ TABLE i_afvc INTO wa_afvc * WITH KEY plnty = wa_plpo2-plnty * plnnr = wa_plpo2-plnnr * plnkn = wa_plpo2-plnkn * zaehl = wa_plpo2-zaehl * aufpl = wa_pro_orders-aufpl. * * IF sy-subrc IS INITIAL. * READ TABLE i_afvv INTO wa_afvv * WITH KEY aufpl = wa_afvc-aufpl * aplzl = wa_afvc-aplzl. * * l_tmp = wa_afvv-bmsch * wa_afvv-ism02. * IF l_tmp IS NOT INITIAL. * * l_tmp1 = ( wa_afvv-lmnga * wa_afvv-vgw02 ) / l_tmp. * * l_tmp1 = l_tmp1 * 100. * * MOVE l_tmp1 TO l_effic. * * ENDIF. * ENDIF. * ENDLOOP. * * WRITE l_effic TO l_plant_effic. * ** CLEAR v_plant_effic. ** PERFORM plant_effic USING wa_pro_orders-plnty ** wa_pro_orders-plnnr ** wa_pro_orders-plnkn ** wa_pro_orders-zaehl ** CHANGING v_plant_effic. * ** CONCATENATE 'Plant Effic:'(037) v_plant_effic c_perc "'%' * CONCATENATE 'Act. Line Eff.'(037) l_plant_effic c_perc "'%' * " MOD-001+ * INTO wa_nodestab-text3 SEPARATED BY space. * wa_nodestab-tlength3 = c_25. * wa_nodestab-tcolor3 = c_4. **- End of MOD-001 * * APPEND wa_nodestab TO i_nodestab. * ** Phase Information * CLEAR wa_nodestab. * wa_nodestab-id = c_3_3. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_1_1. * * wa_nodestab-text = 'Phase'(038). * wa_nodestab-tlength = c_10. * wa_nodestab-tcolor = c_4. * * MOVE l_gamng TO l_gamng1. * CONCATENATE 'Activity (Std Plan:'(039) l_gamng1 c_brac " ')' * INTO wa_nodestab-text1 SEPARATED BY space. * wa_nodestab-tlength1 = c_42. * wa_nodestab-tcolor1 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Actual Usage'(040) v_waers * INTO wa_nodestab-text2 SEPARATED BY space. * ELSE. * wa_nodestab-text2 = 'Actual Usage'(040). * ENDIF. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage'(041) v_waers * INTO wa_nodestab-text3 SEPARATED BY space. * ELSE. * wa_nodestab-text3 = 'Standard Usage'(041). * ENDIF. * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Activity Variance'(042) v_waers * INTO wa_nodestab-text4 SEPARATED BY space. * ELSE. * wa_nodestab-text4 = 'Activity Variance'(042). * ENDIF. * wa_nodestab-tlength4 = c_35. * wa_nodestab-tcolor4 = c_4. * * APPEND wa_nodestab TO i_nodestab. * ** Display acitivity report * CLEAR flg_color. * LOOP AT i_ordops INTO wa_ordops * WHERE aufnr = wa_pro_orders-aufnr. * IF flg_color IS INITIAL. * flg_color = c_x. * ELSE. * CLEAR flg_color. * ENDIF. * PERFORM activity_report USING l_prdqty l_gamng l_uom l_gmein. * ENDLOOP. * ** Material Information * CLEAR wa_nodestab. * wa_nodestab-id = c_3_4. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_1_1. * * PERFORM material_header. * * CLEAR: l_act_total, l_std_total, l_var_total. ** Individual material details * LOOP AT i_ordmats INTO wa_ordmats * WHERE aufnr = wa_pro_orders-aufnr. * ******************mod-003************************* * CLEAR: l_aqty, l_sqty, l_qty. *****************mod-003************************** * * CLEAR: wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * ** Material Number * WRITE wa_ordmats-matnr TO wa_nodestab-text NO-ZERO. * wa_nodestab-tlength = c_18. * wa_nodestab-tcolor = c_3. * ** Material Description * CLEAR wa_material_des. * READ TABLE i_material_des INTO wa_material_des * WITH KEY matnr = wa_ordmats-matnr. * wa_nodestab-text1 = wa_material_des-maktx. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_3. * ** Standard planned or zero loss planned * * IF rb_zloss IS INITIAL. * l_qty = wa_ordmats-stdqy. ****************MOD-004************************ * **************MOD-004************************* * ELSE. * l_qty = wa_ordmats-zloss. * ENDIF. * ** Order uom or kgm * IF rb_kgm IS INITIAL. * l_aqty = wa_ordmats-menge. * l_sqty = l_qty. * ELSE. ** do actual conversion * PERFORM uom_convert USING wa_ordmats-matnr * wa_ordmats-menge * wa_ordmats-amein * l_aqty. ** do std/zloss conversion * PERFORM uom_convert USING wa_ordmats-matnr * wa_ordmats-stdqy * wa_ordmats-meins * l_sqty. * ENDIF. ********************MOD-003*********************************** * IF wa_ordmats-meins = 'EA' OR * wa_ordmats-meins = 'CS'. * l_sqty = CEIL( l_sqty ). * ENDIF. ********************MOD-003*********************************** * * PERFORM std_percentage_calc USING l_aqty l_sqty l_pcent. * ** Fiscal or quantity * IF rb_fiscl IS INITIAL. * MOVE l_aqty TO wa_nodestab-text2(20). " Actual Usage * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * MOVE l_sqty TO wa_nodestab-text3(20). " Standard Usage * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * ELSE. * IF NOT wa_ordmats-peinh IS INITIAL. * CLEAR l_cost. * l_cost = ( wa_ordmats-stprs * wa_ordmats-menge ) * / wa_ordmats-peinh. * MOVE l_cost TO wa_nodestab-text2(20). " Acutal Usage * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * * l_act_total = l_act_total + l_cost. " Subtotal of actual * l_act_gtot = l_act_gtot + l_cost. " Grand total * * ENDIF. * IF NOT wa_ordmats-peinh IS INITIAL. * CLEAR l_cost. ****Begin of MOD-001 * IF v_ucomm = c_zero. ****************************MOD-003******************************** * IF wa_ordmats-meins = 'EA' OR * wa_ordmats-meins = 'CS'. * l_qty = CEIL( l_qty ). * ENDIF. ****************************MOD-003******************************** * l_cost = ( wa_ordmats-stprs * l_qty ) "wa_ordmats-stdqy ) * / wa_ordmats-peinh. * * * ELSE. ****************************MOD-003******************************** * IF wa_ordmats-meins = 'EA' OR * wa_ordmats-meins = 'CS'. * wa_ordmats-stdqy = CEIL( wa_ordmats-stdqy ). * ENDIF. ****************************MOD-003******************************** * * l_cost = ( wa_ordmats-stprs * wa_ordmats-stdqy ) * / wa_ordmats-peinh. * * * ENDIF. ****End of MOD-001 * * MOVE l_cost TO wa_nodestab-text3(20). " Standard Usage * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * l_std_total = l_std_total + l_cost. " Subtotal of standard * l_std_gtot = l_std_gtot + l_cost. " Grand Total * * ENDIF. * ENDIF. * * MOVE l_pcent TO wa_nodestab-text4(17). " Variance Percentage * CONCATENATE wa_nodestab-text4(17) c_perc "'%' * INTO wa_nodestab-text4(19) SEPARATED BY space. * wa_nodestab-tlength4 = c_19. * wa_nodestab-tcolor4 = c_3. * CLEAR: l_diff, l_cost. * ******Begin of MOD-001 * IF ( v_ucomm = c_zero ). * * l_diff = wa_ordmats-menge - l_qty. * * ELSE. * * l_diff = wa_ordmats-menge - wa_ordmats-stdqy. * * ENDIF. ******End of MOD-001 * * IF NOT wa_ordmats-peinh IS INITIAL. * l_cost = ( wa_ordmats-stprs * l_diff ) / wa_ordmats-peinh. * l_cost = l_cost * -1. * ENDIF. * ******Begin of MOD-001 ** IF v_ucomm1 = c_qty. ** ** MOVE l_diff TO wa_nodestab-text5(15). " Variance ** ** ELSE. * * MOVE l_cost TO wa_nodestab-text5(15). " Variance * ** ENDIF. *******End of MOD-001 * * wa_nodestab-tlength5 = c_15. * wa_nodestab-tcolor5 = c_3. * * l_var_total = l_var_total + l_cost. " Subtotal of Variance * l_var_gtot = l_var_gtot + l_cost. " Grand total * * APPEND wa_nodestab TO i_nodestab. *****************MOD-003********************** * CLEAR: wa_ordmats. ****************mod-003*********************** * * ENDLOOP. * ** Displaying Subtotals * * CLEAR wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * wa_nodestab-text = 'Material Totals'(043). * wa_nodestab-tlength = c_18. * wa_nodestab-tcolor = c_6. * * wa_nodestab-text1 = space. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_6. * * MOVE l_act_total TO wa_nodestab-text2(20) . * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_6. * * MOVE l_std_total TO wa_nodestab-text3(20) . * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_6. * * wa_nodestab-text4 = space. * wa_nodestab-tlength4 = c_19. * wa_nodestab-tcolor4 = c_6. * * MOVE l_var_total TO wa_nodestab-text5(15) . * wa_nodestab-tlength5 = c_15. * wa_nodestab-tcolor5 = c_6. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_pro_orders, wa_nodestab. * * ENDLOOP. * ** Displaying Grand total * CLEAR wa_nodestab. * wa_nodestab-id = c_2_1. * wa_nodestab-tlevel = c_2. * wa_nodestab-parent = c_1_1. * * wa_nodestab-text = 'Process Order Totals'(044). * wa_nodestab-tlength = c_26. * wa_nodestab-tcolor = c_5. * * wa_nodestab-text1 = space. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_5. * * MOVE l_act_gtot TO wa_nodestab-text2(20) . * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_5. * * MOVE l_std_gtot TO wa_nodestab-text3(20) . * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_5. * * wa_nodestab-text4 = space. * wa_nodestab-tlength4 = c_19. * wa_nodestab-tcolor4 = c_5. * * MOVE l_var_gtot TO wa_nodestab-text5(15) . * wa_nodestab-tlength5 = c_15. * wa_nodestab-tcolor5 = c_5 . * * APPEND wa_nodestab TO i_nodestab. * * CLEAR : wa_nodestab. * *ENDFORM. " DISPLAY_DETAIL_REPORT **&--------------------------------------------------------------------- ** **& Form DISPLAY_SUMMARY_REPORT **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM display_summary_report. * DATA: l_diff TYPE menge_d, * l_gamng TYPE menge_d, * l_gmein TYPE meins, * * l_ltext TYPE ktext, * * l_tot_orders TYPE i, * * l_effic TYPE p DECIMALS 1, " MOD-001++ * l_effic1 TYPE p DECIMALS 1, " MOD-001++ * l_plan_effic TYPE char05, " MOD-001++ * l_plant_effic TYPE char05, " MOD-001++ * l_sum_plan_effic TYPE p DECIMALS 1, * l_sum_plant_effic TYPE p DECIMALS 1, * * l_qty TYPE menge_d, * l_conv TYPE menge_d, * l_aqty TYPE menge_d, * l_sqty TYPE menge_d, * * l_prdqty TYPE menge_d, * l_sum_prdqty TYPE menge_d, * * l_pcent(3) TYPE p DECIMALS 2, * l_cost(8) TYPE p DECIMALS 2, * * l_act_total(8) TYPE p DECIMALS 2, * l_std_total(8) TYPE p DECIMALS 2, * l_var_total(8) TYPE p DECIMALS 2, * * l_fromuom TYPE meins. * **- Begin of MOD-001 * DATA: l_value TYPE char16, * l_tmp TYPE lmnga, * l_tmp1 TYPE lmnga. **- End of MOD-001 * * PERFORM pfstatus. * SET PF-STATUS 'MAIN' EXCLUDING i_fcode. * SET TITLEBAR 'VARI' WITH text-067. * * CLEAR wa_nodestab. * REFRESH i_nodestab. * * MOVE 'Display summary Report'(029) TO v_output_text. * PERFORM inform_user_of_progress. * * CLEAR wa_nodestab. * wa_nodestab-id = c_1. * wa_nodestab-tlevel = c_1. * wa_nodestab-text = 'Production Variances (Summary Report)'(045). * wa_nodestab-tlength = c_40. * wa_nodestab-compress = c_x. * APPEND wa_nodestab TO i_nodestab. * * CLEAR wa_nodestab. * wa_nodestab-id = c_2_1. * wa_nodestab-tlevel = c_2. * wa_nodestab-parent = c_1_1. * * wa_nodestab-text = 'Summary of Orders for'(046). * wa_nodestab-tlength = c_22. * wa_nodestab-tcolor = c_1. * * CONCATENATE 'Plant:'(047) p_werks * INTO wa_nodestab-text1 SEPARATED BY space. * wa_nodestab-tlength1 = c_15. * wa_nodestab-tcolor1 = c_1. * * CONCATENATE 'Phase Key:'(048) s_steus-low s_steus-high * INTO wa_nodestab-text2 SEPARATED BY space. * wa_nodestab-tlength2 = c_25. * wa_nodestab-tcolor2 = c_1. * * IF s_arbpl[] IS INITIAL. * wa_nodestab-text3 = 'Resources: All'(049). * ELSE. * CONCATENATE 'Resources:'(065) s_arbpl-low c_hyp s_arbpl-high * INTO wa_nodestab-text3 SEPARATED BY space. * ENDIF. * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_1. * * APPEND wa_nodestab TO i_nodestab. * *****Begin of MOD-001 * CLEAR: l_sum_plan_effic, i_sum_ordmats, i_sum_activity. *****End of MOD-001 * * LOOP AT i_pro_orders INTO wa_pro_orders. * * l_gamng = wa_pro_orders-gamng. * l_gmein = wa_pro_orders-gmein. * ** Get actual produced Quantity or Confirm Quantity * IF NOT ( rb_prod IS INITIAL ). * l_prdqty = wa_pro_orders-menge. * l_fromuom = wa_pro_orders-gruom. * ELSE. * l_prdqty = wa_pro_orders-lmnga. * **************************MOD-006*********************** ** l_fromuom = wa_pro_orders-cfuom. * IF wa_pro_orders-cfuom IS INITIAL. * SELECT aufnr rueck gmnga lmnga gmein meinh * meilr stokz rueck_mst * FROM afru INTO TABLE i_afru * WHERE aufnr = wa_pro_orders-aufnr. * IF NOT i_afru[] IS INITIAL. * READ TABLE i_afru INTO wa_afru INDEX 1. * IF sy-subrc = 0. * l_fromuom = wa_afru-gmein. * ENDIF. * ENDIF. * ELSE. * l_fromuom = wa_pro_orders-cfuom. * ENDIF. **************************MOD-006********************** * ENDIF. * IF rb_kgm = c_x. ** do actual conversion * PERFORM uom_convert USING wa_pro_orders-plnbez * l_prdqty * l_fromuom * l_conv. * l_prdqty = l_conv. ** do planned conversion *********MOD-002********************************* ** l_fromuom = wa_pro_orders-gmein. * l_fromuom = 'KG'. *********Mod-002********************************* * PERFORM uom_convert USING wa_pro_orders-plnbez * wa_pro_orders-gamng * l_fromuom * l_conv. * l_gamng = l_conv. * ENDIF. ** Calculating Plan Effic value * CLEAR l_plan_effic. **- Begin of MOD-001 ** IF l_gamng GT 0. ** l_diff = l_gamng - l_prdqty. ** l_plan_effic = 100 - 100 * ( l_diff / l_gamng ). ** ELSE. ** CLEAR l_plan_effic. ** ENDIF. * * LOOP AT i_plpo1 INTO wa_plpo1 * WHERE plnty = wa_pro_orders-plnty * AND plnnr = wa_pro_orders-plnnr * AND steus = 'YBN1'. * IF wa_plpo1-vgw02 IS NOT INITIAL. * MOVE wa_plpo1-usr04 TO l_effic. "L_VALUE. * wa_plpo2 = wa_plpo1. * APPEND wa_plpo2 TO i_plpo2. ******************mod-002************************* ** CONDENSE L_VALUE. ** write l_effic to l_plan_effic. ** L_PLAN_EFFIC = floor( L_VALUE ). ******************mod-002************************* * ELSE. * CLEAR l_plan_effic. * ENDIF. * * ENDLOOP. * **********************MOD-008*************************************** ** LOOP AT I_ORDOPS INTO WA_ORDOPS. ** READ TABLE I_PRO_ORDERS INTO WA_PRO_ORDERS WITH KEY ** AUFNR = WA_ORDOPS-AUFNR ** BINARY SEARCH. ** IF SY-SUBRC = 0. ** READ table i_afvc1 into wa_afvc1 with key ** plnty = wa_ORDOPS-plnty ** plnnr = wa_ORDOPS-plnnr ** plnkn = wa_ORDOPS-plnkn ** zaehl = wa_ORDOPS-zaehl ** aufpl = wa_pro_orders-aufpl. ** IF SY-SUBRC = 0. ** READ TABLE I_AFVV1 into wa_afvv1 with key ** aufpl = wa_afvc1-aufpl ** aplzl = wa_afvc1-aplzl binary search. ** IF SY-SUBRC = 0. ** CHECK WA_AFVV1-VGW02 NE 0. ** l_tmp = wa_afvv1-bmsch * wa_afvv1-ism02. ** IF l_tmp IS NOT INITIAL. ** ** l_tmp1 = ( wa_afvv1-lmnga * wa_afvv1-vgw02 ) / l_tmp. ** ** l_tmp1 = l_tmp1 * 100. ** ** MOVE l_tmp1 TO l_effic. ** ** ENDIF. ** ENDIF. ** ENDIF. ** ENDIF. ** ENDLOOP. ********************MOD-008********************************************* * *******Mod-002******************************** ** READ TABLE i_afvc INTO wa_afvc ** WITH KEY plnty = wa_plpo1-plnty ** plnnr = wa_plpo1-plnnr ** zaehl = wa_plpo1-zaehl. * * LOOP AT i_plpo2 INTO wa_plpo2.. * CLEAR: wa_afvc, wa_afvv. * READ TABLE i_afvc INTO wa_afvc * WITH KEY plnty = wa_plpo2-plnty * plnnr = wa_plpo2-plnnr * plnkn = wa_plpo2-plnkn * zaehl = wa_plpo2-zaehl * aufpl = wa_pro_orders-aufpl. * ***Mod-002************************************** * * IF sy-subrc IS INITIAL. * READ TABLE i_afvv INTO wa_afvv * WITH KEY aufpl = wa_afvc-aufpl * aplzl = wa_afvc-aplzl. * * l_tmp = wa_afvv-bmsch * wa_afvv-ism02. * IF l_tmp IS NOT INITIAL. * * l_tmp1 = ( wa_afvv-lmnga * wa_afvv-vgw02 ) / l_tmp. * * l_tmp1 = l_tmp1 * 100. * * MOVE l_tmp1 TO l_effic1. * * ENDIF. * * ENDIF. * ENDLOOP. * ** CLEAR v_plant_effic. ** PERFORM plant_effic USING wa_pro_orders-plnty ** wa_pro_orders-plnnr wa_pro_orders-plnkn ** wa_pro_orders-zaehl ** CHANGING v_plant_effic. ** l_sum_plan_effic = l_sum_plan_effic + l_plan_effic. * l_sum_plan_effic = l_sum_plan_effic + l_effic. ** l_sum_plant_effic = l_sum_plant_effic + v_plant_effic. * l_sum_plant_effic = l_sum_plant_effic + l_effic1. **- End of MOD-001 * l_sum_prdqty = l_sum_prdqty + l_prdqty. * ****Begin of MOD-001 ** CLEAR: i_sum_activity. "l_prdqty ****End of MOD-001 * LOOP AT i_ordops INTO wa_ordops * WHERE aufnr = wa_pro_orders-aufnr. * PERFORM activity_report USING l_prdqty l_gamng l_fromuom l_gmein. * CLEAR : wa_ordops. * ENDLOOP. * *LOOP AT i_ordmats INTO wa_ordmats WHERE aufnr = wa_pro_orders-aufnr. * PERFORM summary_materials. * CLEAR : wa_ordmats. * ENDLOOP. * CLEAR : wa_pro_orders. * ENDLOOP. * CLEAR: l_plan_effic, v_plant_effic, l_prdqty, l_tot_orders. * ** Passing summraised data to internal table for printing. * DESCRIBE TABLE i_pro_orders LINES l_tot_orders. * IF l_tot_orders %GT 0. ** l_plan_effic = l_sum_plan_effic / l_tot_orders. " MOD-001-- * l_effic = l_sum_plan_effic / l_tot_orders. " MOD-001++ ** v_plant_effic = l_sum_plant_effic / l_tot_orders." MOD-001-- * l_effic1 = l_sum_plant_effic / l_tot_orders. " MOD-001++ * ENDIF. * CLEAR wa_nodestab. * wa_nodestab-id = c_2_2. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_1_1. * * IF NOT ( rb_prod IS INITIAL ). * wa_nodestab-text = 'Produced Qty:'(050). * ELSE. * wa_nodestab-text = 'Confirmed Qty:'(051). * ENDIF. * wa_nodestab-tlength = c_15. * wa_nodestab-tcolor = c_4. * * MOVE l_sum_prdqty TO wa_nodestab-text1(20). * wa_nodestab-tlength1 = c_20. * wa_nodestab-tcolor1 = c_4. * ** CONCATENATE 'Plan Effic:'(036) l_plan_effic c_perc "'%' * WRITE l_effic TO l_plan_effic. * CONCATENATE 'Exp. Line Eff.'(036) l_plan_effic c_perc "'%' * INTO wa_nodestab-text2 SEPARATED BY space. * wa_nodestab-tlength2 = c_25. * wa_nodestab-tcolor2 = c_4. * ** CONCATENATE 'Plant Effic:'(037) v_plant_effic c_perc "'%' * WRITE l_effic1 TO l_plant_effic. * CONCATENATE 'Act. Line Eff.'(037) l_plant_effic c_perc "'%' * INTO wa_nodestab-text3 SEPARATED BY space. * wa_nodestab-tlength3 = c_25. * wa_nodestab-tcolor3 = c_4. * * APPEND wa_nodestab TO i_nodestab. * ** Summarised Phase Information * CLEAR wa_nodestab. * wa_nodestab-id = c_3_3. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_1_1. * * wa_nodestab-text = 'Activity'(052). * wa_nodestab-tlength = c_40. * wa_nodestab-tcolor = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Actual Usage'(040) v_waers * INTO wa_nodestab-text1 SEPARATED BY space. * ELSE. * wa_nodestab-text1 = 'Actual Usage'(040). * ENDIF. * wa_nodestab-tlength1 = c_20. * wa_nodestab-tcolor1 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage'(041) v_waers * INTO wa_nodestab-text2 SEPARATED BY space. * ELSE. * wa_nodestab-text2 = 'Standard Usage'(041). * ENDIF. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Activity Variance'(042) v_waers * INTO wa_nodestab-text3 SEPARATED BY space. * ELSE. * wa_nodestab-text3 = 'Activity Variance'(042). * ENDIF. * wa_nodestab-tlength3 = c_35. * wa_nodestab-tcolor3 = c_4. * * APPEND wa_nodestab TO i_nodestab. * ** Summarized activities * CLEAR: l_act_total, l_std_total, l_var_total. * SORT i_sum_activity BY lar. * LOOP AT i_sum_activity INTO wa_sum_activity. * * SELECT ltext FROM cslt INTO l_ltext * WHERE spras = sy-langu * AND kokrs = p_kokrs * AND lstar = wa_sum_activity-lar. * ENDSELECT. * * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * * CLEAR wa_nodestab. * wa_nodestab-id = c_3_4. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_3. * * wa_nodestab-text1 = l_ltext. * wa_nodestab-tlength1 = c_36. * wa_nodestab-tcolor1 = c_3. * * IF rb_fiscl IS INITIAL. * MOVE wa_sum_activity-afru_ism TO wa_nodestab-text2(20). * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * * MOVE wa_sum_activity-ism_should TO wa_nodestab-text3(20). * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * MOVE wa_sum_activity-ism_var TO wa_nodestab-text4(20). * wa_nodestab-tlength4 = c_20. * wa_nodestab-tcolor4 = c_3. * * ELSE. * MOVE wa_sum_activity-coact TO wa_nodestab-text2(20). * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * * MOVE wa_sum_activity-costd TO wa_nodestab-text3(20). * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * MOVE wa_sum_activity-covar TO wa_nodestab-text4(20). * wa_nodestab-tlength4 = c_20. * wa_nodestab-tcolor4 = c_3. * * l_act_total = l_act_total + wa_sum_activity-coact. * l_std_total = l_std_total + wa_sum_activity-costd. * l_var_total = l_var_total + wa_sum_activity-covar. * ENDIF. * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab, wa_sum_activity. * ENDLOOP. * IF NOT ( rb_fiscl IS INITIAL ). * ** Display sub-total of Activities. * CLEAR wa_nodestab. * wa_nodestab-id = c_3_4. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_3. * * IF rb_fiscl = c_x. * CONCATENATE 'Fiscal Activity Totals:'(053) v_waers * INTO wa_nodestab-text1 SEPARATED BY space. * ELSE. * wa_nodestab-text1 = 'Fiscal Activity Totals:'(053). * ENDIF. * wa_nodestab-tlength1 = c_36. * wa_nodestab-tcolor1 = c_2. * * MOVE l_act_total TO wa_nodestab-text2(20). * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_2. * * MOVE l_std_total TO wa_nodestab-text3(20). * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_2. * * MOVE l_var_total TO wa_nodestab-text4(20). * wa_nodestab-tlength4 = c_20. * wa_nodestab-tcolor4 = c_2. * * APPEND wa_nodestab TO i_nodestab. * ENDIF. ** Summarized Material Information * CLEAR wa_nodestab. * wa_nodestab-id = c_6_1. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_2_2. * * PERFORM material_header. * * CLEAR: l_act_total, l_std_total, l_var_total. * SORT i_sum_ordmats BY matnr. * LOOP AT i_sum_ordmats INTO wa_sum_ordmats . * CLEAR: wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * ** Material Number * WRITE wa_sum_ordmats-matnr TO wa_nodestab-text NO-ZERO. * wa_nodestab-tlength = c_18. * wa_nodestab-tcolor = c_3. * ** Material Description * CLEAR wa_material_des. * READ TABLE i_material_des INTO wa_material_des * WITH KEY matnr = wa_sum_ordmats-matnr. * wa_nodestab-text1 = wa_material_des-maktx. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_3. * ** Standard planned or zero loss planned * * IF rb_zloss IS INITIAL. * l_qty = wa_sum_ordmats-stdqy. * ELSE. * l_qty = wa_sum_ordmats-zloss. * ENDIF. * ** Order uom or kgm * IF rb_kgm IS INITIAL. * l_aqty = wa_sum_ordmats-menge. * l_sqty = l_qty. * ELSE. ** do actual conversion * PERFORM uom_convert USING wa_sum_ordmats-matnr * wa_sum_ordmats-menge * wa_sum_ordmats-amein * l_aqty. ** do std/zloss conversion * PERFORM uom_convert USING wa_ordmats-matnr * wa_ordmats-stdqy * wa_ordmats-meins * l_sqty. * ENDIF. * * PERFORM std_percentage_calc USING l_aqty l_sqty l_pcent. * ** Fiscal or quantity * IF rb_fiscl IS INITIAL. * MOVE l_aqty TO wa_nodestab-text2(20). " Actual Usage * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * * MOVE l_sqty TO wa_nodestab-text3(20). " Standard Usage * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * ELSE. * IF NOT wa_sum_ordmats-peinh IS INITIAL. * CLEAR l_cost. * l_cost = ( wa_sum_ordmats-stprs * wa_sum_ordmats-menge ) * / wa_sum_ordmats-peinh. * MOVE l_cost TO wa_nodestab-text2(20). " Acutal Usage * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * * l_act_total = l_act_total + l_cost. " Subtotal of actual * * ENDIF. * IF NOT wa_sum_ordmats-peinh IS INITIAL. * CLEAR l_cost. * l_cost = ( wa_sum_ordmats-stprs * wa_sum_ordmats-stdqy ) * / wa_sum_ordmats-peinh. * MOVE l_cost TO wa_nodestab-text3(20). " Standard Usage * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * l_std_total = l_std_total + l_cost. " Subtotal of standard * * ENDIF. * ENDIF. * * MOVE l_pcent TO wa_nodestab-text4(18). " Variance Percentage * CONCATENATE wa_nodestab-text4(18) c_perc "'%' * INTO wa_nodestab-text4(20) SEPARATED BY space. * wa_nodestab-tlength4 = c_20. "c_19. * wa_nodestab-tcolor4 = c_3. * * CLEAR: l_diff, l_cost. * l_diff = wa_sum_ordmats-menge - wa_sum_ordmats-stdqy. * IF NOT wa_sum_ordmats-peinh IS INITIAL. *l_cost = ( wa_sum_ordmats-stprs * l_diff ) / wa_sum_ordmats-peinh. * l_cost = l_cost * -1. * ENDIF. * * MOVE l_cost TO wa_nodestab-text5(20). " Variance "15 * wa_nodestab-tlength5 = c_20. "c_15 * wa_nodestab-tcolor5 = c_3. * * l_var_total = l_var_total + l_cost. " Subtotal of Variance * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab, wa_sum_ordmats. * ENDLOOP. ** Displaying Subtotals * IF NOT ( rb_fiscl IS INITIAL ). * * CLEAR wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * IF rb_fiscl = c_x. * CONCATENATE 'Fiscal quantity Totals:'(054) v_waers * INTO wa_nodestab-text SEPARATED BY space. * ELSE. * wa_nodestab-text = 'Fiscal quantity Totals:'(054). * ENDIF. * wa_nodestab-tlength = c_30. * wa_nodestab-tcolor = c_6. * * wa_nodestab-text1 = space. * wa_nodestab-tlength1 = c_18. * wa_nodestab-tcolor1 = c_6. * * MOVE l_act_total TO wa_nodestab-text2(20) . * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_6. * * MOVE l_std_total TO wa_nodestab-text3(20) . * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_6. * * wa_nodestab-text4 = space. * wa_nodestab-tlength4 = c_19. * wa_nodestab-tcolor4 = c_6. * * MOVE l_var_total TO wa_nodestab-text5(21) . * wa_nodestab-tlength5 = c_21. "15. * wa_nodestab-tcolor5 = c_6. * * APPEND wa_nodestab TO i_nodestab. * ELSE. * CLEAR wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * IF rb_fiscl = c_x. * CONCATENATE 'Variance Fiscal Total:'(055) v_waers * INTO wa_nodestab-text SEPARATED BY space. * ELSE. * wa_nodestab-text = 'Variance Fiscal Total:'(055). * ENDIF. * wa_nodestab-tlength = c_29. * wa_nodestab-tcolor = c_6. * * wa_nodestab-text1 = space. * wa_nodestab-tlength1 = c_40. * wa_nodestab-tcolor1 = c_6. * * wa_nodestab-text2 = space. * wa_nodestab-tlength2 = '41'. "c_40. * wa_nodestab-tcolor2 = c_6. * * MOVE l_var_total TO wa_nodestab-text3(20) . * wa_nodestab-tlength3 = c_20. "c_15. * wa_nodestab-tcolor3 = c_6. * * APPEND wa_nodestab TO i_nodestab. * ENDIF. *ENDFORM. " DISPLAY_SUMMARY_REPORT **&--------------------------------------------------------------------- ** **& Form DISPLAY_PHASE_REPORT **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM display_phase_report. * * DATA: l_date_low(10) TYPE c, * l_date_high(10) TYPE c, * l_diff TYPE menge_d, ** l_plan_effic(3) TYPE c, * l_plan_effic TYPE char05, "MOD-001++ * l_plant_effic TYPE char05, "MOD-001++ * l_gamng TYPE menge_d, * l_gamng1(20) TYPE c, * l_gmein TYPE meins, * * l_qty TYPE menge_d, * l_prdqty TYPE menge_d, * l_conv TYPE menge_d, * l_aqty TYPE menge_d, * l_sqty TYPE menge_d, * * l_pcent(3) TYPE p DECIMALS 2, * l_cost(8) TYPE p DECIMALS 2, * * l_act_total(8) TYPE p DECIMALS 2, * l_std_total(8) TYPE p DECIMALS 2, * l_var_total(8) TYPE p DECIMALS 2, * * l_fromuom TYPE meins, * l_cfuom TYPE meins, * * l_ph_bmsch TYPE i. **- Begin of MOD-001 * DATA: l_value TYPE char16, * l_tmp TYPE lmnga, * l_tmp1 TYPE lmnga, * l_effic TYPE p DECIMALS 1, * l_uom TYPE char03. **- End of MOD-001 * * * PERFORM pfstatus. * SET PF-STATUS 'MAIN' EXCLUDING i_fcode. * SET TITLEBAR 'VARI' WITH text-068. * * CLEAR wa_nodestab. * REFRESH i_nodestab. * * MOVE 'Display Phase Report'(030) TO v_output_text. * PERFORM inform_user_of_progress. * * CLEAR wa_nodestab. * wa_nodestab-id = c_1_1. * wa_nodestab-tlevel = c_1. * wa_nodestab-text = 'Production Variances'(031). * wa_nodestab-tlength = c_20. * wa_nodestab-compress = c_x. * APPEND wa_nodestab TO i_nodestab. * * LOOP AT i_pro_orders INTO wa_pro_orders. * * CLEAR: wa_nodestab, l_date_low, l_date_high, l_gamng, * wa_material_des. * * l_gamng = wa_pro_orders-gamng. * l_gmein = wa_pro_orders-gmein. * wa_nodestab-id = c_2_1. * wa_nodestab-tlevel = c_2. * wa_nodestab-parent = c_1_1. * ** Order Number text * wa_nodestab-text = 'Order Num:'(032). * wa_nodestab-tlength = c_12. * wa_nodestab-tcolor = c_1. ** Order number * WRITE wa_pro_orders-aufnr TO wa_nodestab-text1 NO-ZERO. * wa_nodestab-tlength1 = c_12. * wa_nodestab-tcolor1 = c_1. * wa_nodestab-hotspot1 = c_x. * ** Date Range * WRITE wa_pro_orders-wdate TO l_date_low. * WRITE wa_pro_orders-gltrp TO l_date_high. * CONCATENATE l_date_low c_hyp l_date_high * INTO wa_nodestab-text2 SEPARATED BY space. * wa_nodestab-tlength2 = c_25. * wa_nodestab-tcolor2 = c_1. * ** Material Number * WRITE wa_pro_orders-plnbez TO wa_nodestab-text3 NO-ZERO. * wa_nodestab-tlength3 = c_18. * wa_nodestab-tcolor3 = c_1. * ** Material Description * READ TABLE i_material_des INTO wa_material_des * WITH KEY matnr = wa_pro_orders-plnbez. * wa_nodestab-text4 = wa_material_des-maktx. * wa_nodestab-tlength4 = c_33. * wa_nodestab-tcolor4 = c_1. * * APPEND wa_nodestab TO i_nodestab. * * LOOP AT i_ordops INTO wa_ordops * WHERE aufnr = wa_pro_orders-aufnr. * PERFORM get_confirmation_qty USING wa_ordops-rueck * l_prdqty l_cfuom. * IF rb_kgm = c_x. * IF rb_conf IS INITIAL. * l_prdqty = wa_pro_orders-menge. * l_fromuom = wa_pro_orders-gruom. * ELSE. * l_fromuom = l_cfuom. * ENDIF. ** do gr/conf conversion * PERFORM uom_convert USING wa_pro_orders-plnbez l_prdqty * l_fromuom l_conv. * l_prdqty = l_conv. * l_qty = l_prdqty. ** do planned conversion *********mod-002******************************** ** l_fromuom = wa_pro_orders-gmein. * l_fromuom = 'KG'. ********MOD-002********************************* * * PERFORM uom_convert USING wa_pro_orders-plnbez * wa_pro_orders-gamng * l_fromuom l_conv. * l_gamng = l_conv. * ELSE. ** Get Standard Numbers from the phase * READ TABLE i_plpo INTO wa_plpo * WITH KEY plnty = wa_pro_orders-plnty * plnnr = wa_pro_orders-plnnr * plnkn = wa_pro_orders-plnkn * zaehl = wa_pro_orders-zaehl. * PERFORM get_stds USING wa_ordops-plnty wa_ordops-plnnr * wa_ordops-plnkn wa_ordops-zaehl. ** Factor in any differences in uoms (plpo selected in get_stds form) * l_ph_bmsch = wa_plpo-bmsch / ( wa_plpo-umrez / wa_plpo-umren ). ** calculate planned phase qty as planned order qty / final phase std *qty ** current phase std qty * l_gamng = ( wa_pro_orders-gamng / wa_plpo-bmsch ) * l_ph_bmsch. ** Get actual produced Qty (from order) or use Confirm Qty (from phase) * IF rb_conf IS INITIAL. ** Factor in any differences in uoms (plpo selected in plant_effic form) * l_qty = ( wa_pro_orders-menge / wa_plpo-bmsch ) * l_ph_bmsch. * l_prdqty = wa_pro_orders-menge. * l_fromuom = wa_pro_orders-gruom. * ELSE. * l_qty = ( l_prdqty / wa_plpo-bmsch ) * l_ph_bmsch. * l_fromuom = l_cfuom. * ENDIF. * ENDIF. * **- begin of MOD-001 ** Calculate Plan effic. ** CLEAR l_plan_effic. ** ** IF l_gamng %GT 0. ** l_diff = ABS( l_gamng - l_qty ). ** l_plan_effic = c_100 - c_100 * ( l_diff / l_gamng ). ** ELSE. ** CLEAR l_plan_effic. ** ENDIF. * * LOOP AT i_plpo1 INTO wa_plpo1 * WHERE plnty = wa_pro_orders-plnty * AND plnnr = wa_pro_orders-plnnr * AND steus = 'YBN1'. * IF wa_plpo1-vgw02 IS NOT INITIAL. * MOVE wa_plpo1-usr04 TO l_effic. "L_VALUE. * WRITE l_effic TO l_plan_effic. * wa_plpo2 = wa_plpo1. * APPEND wa_plpo2 TO i_plpo2. ***********MOD-002******************************** ** ELSE. ** CLEAR l_plan_effic. * ENDIF. **********MOD-002********************************* * ENDLOOP. * * **- End of MOD-001 ** Resource Information * CLEAR wa_nodestab. * wa_nodestab-id = c_2_2. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_1_1. * * CONCATENATE 'Resource:'(056) wa_pro_orders-arbpl * INTO wa_nodestab-text SEPARATED BY space. * wa_nodestab-tlength = c_25. * wa_nodestab-tcolor = c_4. * * READ TABLE i_wc_text INTO wa_wc_text * WITH KEY objid = wa_pro_orders-arbid. * wa_nodestab-text1 = wa_wc_text-ktext. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_4. * *************MOD-002********************************** * wa_nodestab-text2 = wa_ordops-vornr. * wa_nodestab-tlength2 = c_4. * wa_nodestab-tcolor2 = c_4. * **********mod-002************************************* * ** Produced Quantity / Confirmed Quantity * MOVE l_prdqty TO wa_nodestab-text3(20). * MOVE l_fromuom TO l_uom. " MOD-001++ * IF NOT ( rb_prod IS INITIAL ). ** CONCATENATE 'Prod Qty: '(033) wa_nodestab-text2 "MOD-001- * CONCATENATE 'Prod Qty: '(033) wa_nodestab-text3 l_uom"MOD-001+ * INTO wa_nodestab-text3 SEPARATED BY space. * ELSE. ** CONCATENATE 'Conf Qty: '(034) wa_nodestab-text2 "MOD-001- * CONCATENATE 'Conf Qty: '(034) wa_nodestab-text3 l_uom"MOD-001+ * INTO wa_nodestab-text3 SEPARATED BY space. * ENDIF. * ** wa_nodestab-tlength2 = c_30. "MOD-001- * wa_nodestab-tlength3 = c_35_1. "MOD-001+ * wa_nodestab-tcolor3 = c_1. * ** CONCATENATE 'Plan Effic:'(036) l_plan_effic c_perc "'%' * CONCATENATE 'Exp. Line Eff.'(036) l_plan_effic c_perc "'%' * INTO wa_nodestab-text4 SEPARATED BY space. * wa_nodestab-tlength4 = c_25. * wa_nodestab-tcolor4 = c_4. * ** CLEAR v_plant_effic. ** PERFORM plant_effic USING wa_ordops-plnty ** wa_ordops-plnnr ** wa_ordops-plnkn ** wa_ordops-zaehl ** CHANGING v_plant_effic. * CLEAR l_effic. ***************mod-002*************************** ** READ TABLE I_AFVC INTO WA_AFVC ** WITH KEY PLNTY = WA_PLPO1-PLNTY ** PLNNR = WA_PLPO1-PLNNR ** ZAEHL = WA_PLPO1-ZAEHL. **** Mod-002************************************ * *****************MOD-008************************* ** LOOP AT I_ORDOPS INTO WA_ORDOPS. ** READ TABLE I_PRO_ORDERS INTO WA_PRO_ORDERS WITH KEY ** AUFNR = WA_ORDOPS-AUFNR ** BINARY SEARCH. ** IF SY-SUBRC = 0. ** READ table i_afvc1 into wa_afvc1 with key ** plnty = wa_ORDOPS-plnty ** plnnr = wa_ORDOPS-plnnr ** plnkn = wa_ORDOPS-plnkn ** zaehl = wa_ORDOPS-zaehl ** aufpl = wa_pro_orders-aufpl. ** IF SY-SUBRC = 0. ** READ TABLE I_AFVV1 into wa_afvv1 with key ** aufpl = wa_afvc1-aufpl ** aplzl = wa_afvc1-aplzl binary search. ** IF SY-SUBRC = 0. ** CHECK WA_AFVV1-VGW02 NE 0. ** l_tmp = wa_afvv1-bmsch * wa_afvv1-ism02. ** IF l_tmp IS NOT INITIAL. ** ** l_tmp1 = ( wa_afvv1-lmnga * wa_afvv1-vgw02 ) / l_tmp. ** ** l_tmp1 = l_tmp1 * 100. ** ** MOVE l_tmp1 TO l_effic. ** ** ENDIF. ** ENDIF. ** ENDIF. ** ENDIF. ** ENDLOOP. ** ***************MOD-008**************************** * * LOOP AT i_plpo2 INTO wa_plpo2. * READ TABLE i_afvc INTO wa_afvc * WITH KEY plnty = wa_plpo2-plnty * plnnr = wa_plpo2-plnnr * plnkn = wa_plpo2-plnkn * zaehl = wa_plpo2-zaehl * aufpl = wa_pro_orders-aufpl. * * * **** Mod-002************************************ * * IF sy-subrc IS INITIAL. * READ TABLE i_afvv INTO wa_afvv * WITH KEY aufpl = wa_afvc-aufpl * aplzl = wa_afvc-aplzl. * * l_tmp = wa_afvv-bmsch * wa_afvv-ism02. * IF l_tmp IS NOT INITIAL. * * l_tmp1 = ( wa_afvv-lmnga * wa_afvv-vgw02 ) / l_tmp. * * l_tmp1 = l_tmp1 * 100. * * MOVE l_tmp1 TO l_effic. * * ENDIF. * * ENDIF. * ENDLOOP. * * WRITE l_effic TO l_plant_effic. * ** CONCATENATE 'Plant Effic:'(037) v_plant_effic c_perc "'%' * CONCATENATE 'Act. Line Eff.'(037) l_plant_effic c_perc "'%' * " MOD-001+ * INTO wa_nodestab-text5 SEPARATED BY space. * wa_nodestab-tlength5 = c_25. * wa_nodestab-tcolor5 = c_4. * * APPEND wa_nodestab TO i_nodestab. * ** Phase Information * CLEAR wa_nodestab. * wa_nodestab-id = c_3_3. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_1_1. * * wa_nodestab-text = 'Phase'(038). * wa_nodestab-tlength = c_10. * wa_nodestab-tcolor = c_4. * * MOVE l_gamng TO l_gamng1. * CONCATENATE 'Activity (Std Plan:'(039) l_gamng1 c_brac "')' * INTO wa_nodestab-text1 SEPARATED BY space. * wa_nodestab-tlength1 = c_42. * wa_nodestab-tcolor1 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Actual Usage'(040) v_waers * INTO wa_nodestab-text2 SEPARATED BY space. * ELSE. * wa_nodestab-text2 = 'Actual Usage'(040). * ENDIF. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage'(041) v_waers * INTO wa_nodestab-text3 SEPARATED BY space. * ELSE. * wa_nodestab-text3 = 'Standard Usage'(041). * ENDIF. * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Activity Variance'(042) v_waers * INTO wa_nodestab-text4 SEPARATED BY space. * ELSE. * wa_nodestab-text4 = 'Activity Variance'(042). * ENDIF. * wa_nodestab-tlength4 = c_35. * wa_nodestab-tcolor4 = c_4. * * APPEND wa_nodestab TO i_nodestab. * ** Display acitivity report * PERFORM activity_report USING l_prdqty l_gamng l_uom l_gmein. * ** Material Information * CLEAR: wa_nodestab, l_act_total, l_std_total, l_var_total. * wa_nodestab-id = c_3_4. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_1_1. * * PERFORM material_header. * ** Individual material details * LOOP AT i_ordmats INTO wa_ordmats * WHERE aufnr = wa_pro_orders-aufnr * AND vornr = wa_ordops-vornr. * * CLEAR: wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * ** Material Number * WRITE wa_ordmats-matnr TO wa_nodestab-text NO-ZERO. * wa_nodestab-tlength = c_18. * wa_nodestab-tcolor = c_3. * ** Material Description * CLEAR wa_material_des. * READ TABLE i_material_des INTO wa_material_des * WITH KEY matnr = wa_ordmats-matnr. * wa_nodestab-text1 = wa_material_des-maktx. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_3. * ** Standard planned or zero loss planned * * IF rb_zloss IS INITIAL. * l_qty = wa_ordmats-stdqy. * ELSE. * l_qty = wa_ordmats-zloss. * ENDIF. * ** Order uom or kgm * IF rb_kgm IS INITIAL. * l_aqty = wa_ordmats-menge. * l_sqty = l_qty. * ELSE. ** do actual conversion * PERFORM uom_convert USING wa_ordmats-matnr * wa_ordmats-menge * wa_ordmats-amein * l_aqty. ** do std/zloss conversion * PERFORM uom_convert USING wa_ordmats-matnr * wa_ordmats-stdqy * wa_ordmats-meins * l_sqty. * ENDIF. * * PERFORM std_percentage_calc USING l_aqty l_sqty l_pcent. * ** Fiscal or quantity * IF rb_fiscl IS INITIAL. * MOVE l_aqty TO wa_nodestab-text2(20). " Actual Usage * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * * MOVE l_sqty TO wa_nodestab-text3(20). " Standard Usage * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * ELSE. * IF NOT wa_ordmats-peinh IS INITIAL. * CLEAR l_cost. * l_cost = ( wa_ordmats-stprs * wa_ordmats-menge ) * / wa_ordmats-peinh. * MOVE l_cost TO wa_nodestab-text2(20). " Acutal Usage * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * * l_act_total = l_act_total + l_cost. " Subtotal of actual * ENDIF. * IF NOT wa_ordmats-peinh IS INITIAL. * CLEAR l_cost. * l_cost = ( wa_ordmats-stprs * wa_ordmats-stdqy ) * / wa_ordmats-peinh. * MOVE l_cost TO wa_nodestab-text3(20). " Standard Usage * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * l_std_total = l_std_total + l_cost. " Subtotal of standard * ENDIF. * * ENDIF. * * MOVE l_pcent TO wa_nodestab-text4(17). " Variance Percentage * CONCATENATE wa_nodestab-text4(17) c_perc "'%' * INTO wa_nodestab-text4(19) SEPARATED BY space. * wa_nodestab-tlength4 = 19. * wa_nodestab-tcolor4 = c_3. * * CLEAR: l_diff, l_cost. * l_diff = wa_ordmats-menge - wa_ordmats-stdqy. * IF NOT wa_ordmats-peinh IS INITIAL. * l_cost = ( wa_ordmats-stprs * l_diff ) / wa_ordmats-peinh. * l_cost = l_cost * -1. * ENDIF. * * MOVE l_cost TO wa_nodestab-text5(15). " Variance * wa_nodestab-tlength5 = c_15. * wa_nodestab-tcolor5 = c_3. * * l_var_total = l_var_total + l_cost. " Subtotal of Variance * * APPEND wa_nodestab TO i_nodestab. * * ENDLOOP. * ** Displaying Subtotals * CHECK sy-subrc IS INITIAL. * CLEAR wa_nodestab. * wa_nodestab-id = c_4_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * wa_nodestab-text = 'Material Totals'(043). * wa_nodestab-tlength = c_18. * wa_nodestab-tcolor = c_6. * * wa_nodestab-text1 = space. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_6. * * MOVE l_act_total TO wa_nodestab-text2(20) . * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_6. * * MOVE l_std_total TO wa_nodestab-text3(20) . * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_6. * * wa_nodestab-text4 = space. * wa_nodestab-tlength4 = c_19. * wa_nodestab-tcolor4 = c_6. * * MOVE l_var_total TO wa_nodestab-text5(15) . * wa_nodestab-tlength5 = c_15. * wa_nodestab-tcolor5 = c_6. * * APPEND wa_nodestab TO i_nodestab. * * ENDLOOP. ** Output the materials which were issued to order but aren't on bom * READ TABLE i_issued_mat INTO wa_issued_mat * WITH KEY aufnr = wa_pro_orders-aufnr. * IF sy-subrc = 0. * * CLEAR wa_nodestab. * wa_nodestab-id = c_3_5. * wa_nodestab-tlevel = c_3 . * wa_nodestab-parent = c_1_1. * * wa_nodestab-text = * 'Materials issued to order but not in Recipe'(057). * wa_nodestab-tlength = c_45. * wa_nodestab-tcolor = c_6. * * APPEND wa_nodestab TO i_nodestab. * ** Material Information * CLEAR wa_nodestab. * wa_nodestab-id = c_3_6. * wa_nodestab-tlevel = c_3. * wa_nodestab-parent = c_3_5. * * PERFORM material_header. ** now write the components * * CLEAR: l_pcent, l_act_total, l_std_total, l_var_total. * * LOOP AT i_issued_mat INTO wa_issued_mat * WHERE aufnr = wa_pro_orders-aufnr. * * CLEAR: wa_nodestab, l_aqty, l_sqty, l_cost, wa_material_des. * wa_nodestab-id = c_6_1. * wa_nodestab-tlevel = c_6. * wa_nodestab-parent = c_3_6. * ** Material Number * WRITE wa_issued_mat-matnr TO wa_nodestab-text NO-ZERO. * wa_nodestab-tlength = c_18. * wa_nodestab-tcolor = c_3. * ** Material Description * READ TABLE i_material_des INTO wa_material_des * WITH KEY matnr = wa_issued_mat-matnr. * wa_nodestab-text1 = wa_material_des-maktx. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_3. * * IF rb_fiscl IS INITIAL. ** Actual Usage * l_aqty = wa_issued_mat-menge. * MOVE l_aqty TO wa_nodestab-text2(20). " Actual Usage * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * ** Standard Usage * MOVE l_sqty TO wa_nodestab-text3(20). " Standard Usage * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * ELSE. * IF NOT wa_issued_mat-peinh IS INITIAL. * l_cost = ( wa_issued_mat-stprs * wa_issued_mat-menge ) * / wa_issued_mat-peinh. * ENDIF. * l_act_total = l_act_total + l_cost. " Subtotal of actual * * MOVE l_cost TO wa_nodestab-text2(20). " Acutal Usage * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_3. * * CLEAR l_cost. * MOVE l_cost TO wa_nodestab-text3(20). " Standard Usage * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_3. * * ENDIF. ** Variance percentage * l_pcent = 100. * MOVE l_pcent TO wa_nodestab-text4(17). " Variance Percentage * CONCATENATE wa_nodestab-text4(17) c_perc "'%' * INTO wa_nodestab-text4(19) SEPARATED BY space. * wa_nodestab-tlength4 = c_19. * wa_nodestab-tcolor4 = c_3. ** Variance * CLEAR l_cost. * IF NOT wa_issued_mat-peinh IS INITIAL. * l_cost = ( wa_issued_mat-stprs * wa_issued_mat-menge ) * / wa_issued_mat-peinh. * l_cost = l_cost * -1. * ENDIF. * l_var_total = l_var_total + l_cost. " Subtotal of Variance * * MOVE l_cost TO wa_nodestab-text5(15). " Variance * wa_nodestab-tlength5 = c_15. * wa_nodestab-tcolor5 = c_3. * * APPEND wa_nodestab TO i_nodestab. * * ENDLOOP. * ** Displaying Subtotals of material recipe * * CLEAR wa_nodestab. * wa_nodestab-id = c_6_1. * wa_nodestab-tlevel = c_6. * wa_nodestab-parent = c_3_5. * * wa_nodestab-text = 'Material Totals'(043). * wa_nodestab-tlength = c_18. * wa_nodestab-tcolor = c_6. * * wa_nodestab-text1 = space. * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_6. * * MOVE l_act_total TO wa_nodestab-text2(20) . * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_6. * * MOVE l_std_total TO wa_nodestab-text3(20) . * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_6. * * wa_nodestab-text4 = space. * wa_nodestab-tlength4 = c_19. * wa_nodestab-tcolor4 = c_6. * * MOVE l_var_total TO wa_nodestab-text5(15) . * wa_nodestab-tlength5 = c_15. * wa_nodestab-tcolor5 = c_6. * * APPEND wa_nodestab TO i_nodestab. * * ENDIF. * * ENDLOOP. * *ENDFORM. " DISPLAY_PHASE_REPORT **&--------------------------------------------------------------------- ** **& Form ACTIVITY_REPORT **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM activity_report USING fp_l_prdqty TYPE menge_d * fp_l_gamng TYPE menge_d * fp_l_uom TYPE meins * fp_l_gmein TYPE meins. * DATA: l_value TYPE gamng, * l_ism01_var TYPE ru_ismng, * l_ism02_var TYPE ru_ismng, * l_ism03_var TYPE ru_ismng, * l_ism04_var TYPE ru_ismng, * l_ism05_var TYPE ru_ismng, * l_ism06_var TYPE ru_ismng. * DATA: struct_afvgd TYPE afvgd. * DATA: struct_mara TYPE mara, * struct_marc TYPE marc. * DATA: v_menge TYPE menge_d. * ** Get Standard Numbers from the phase * PERFORM get_stds USING wa_ordops-plnty wa_ordops-plnnr * wa_ordops-plnkn wa_ordops-zaehl. * ** Calculate Standard Labour/Fitter/Machine Hours. * CLEAR struct_activity. * MOVE-CORRESPONDING wa_plpo1 TO struct_afvgd. "#EC ENHOK * MOVE: wa_ordops-arbid TO struct_afvgd-arbid, * wa_ordops-ssavd TO struct_afvgd-ssavd. * MOVE wa_plpo1-vge01 TO v_msehi. * * IF rb_actl IS INITIAL. ** Planned qty * l_value = fp_l_gamng. * ELSE. ** Actual qty * l_value = fp_l_prdqty. * ENDIF. * * CALL FUNCTION 'CO_R0_DET_TOTAL_ACTIVITY' * EXPORTING * act_afvgd = struct_afvgd * act_quantity = l_value * act_flg_consider_conf = space * act_unit_of_time = v_msehi * IMPORTING * exp_activities = struct_activity. * ** Now get the confirmed values * PERFORM get_confirmation_details. * ** Get Activity 1 * l_ism01_var = struct_activity-acti1 - wa_ord_conf1-ism01. ** Get Activity 2 * l_ism02_var = struct_activity-acti2 - wa_ord_conf1-ism02. ** Get Activity 3 * l_ism03_var = struct_activity-acti3 - wa_ord_conf1-ism03. ** Get Activity 4 * l_ism04_var = struct_activity-acti4 - wa_ord_conf1-ism04. ** Get Activity 5 * l_ism05_var = struct_activity-acti5 - wa_ord_conf1-ism05. ** Get Activity 6 * l_ism06_var = struct_activity-acti6 - wa_ord_conf1-ism06. * * IF rb_summ IS INITIAL. ** Now output the activities for each phase * IF NOT ( wa_plpo1-lar01 IS INITIAL ). * PERFORM activity_cost_report USING wa_plpo1-lar01 * wa_ord_conf1-ism01 * struct_activity-acti1 * l_ism01_var. * ENDIF. * IF NOT ( wa_plpo1-lar02 IS INITIAL ). * PERFORM activity_cost_report USING wa_plpo1-lar02 * wa_ord_conf1-ism02 * struct_activity-acti2 * l_ism02_var. * ENDIF. * IF NOT ( wa_plpo1-lar03 IS INITIAL ). * PERFORM activity_cost_report USING wa_plpo1-lar03 * wa_ord_conf1-ism03 * struct_activity-acti3 * l_ism03_var. * ENDIF. * IF NOT ( wa_plpo1-lar04 IS INITIAL ). * PERFORM activity_cost_report USING wa_plpo1-lar04 * wa_ord_conf1-ism04 * struct_activity-acti4 * l_ism04_var. * ENDIF. * IF NOT ( wa_plpo1-lar05 IS INITIAL ). * PERFORM activity_cost_report USING wa_plpo1-lar05 * wa_ord_conf1-ism05 * struct_activity-acti5 * l_ism05_var. * ENDIF. * IF NOT ( wa_plpo1-lar06 IS INITIAL ). * PERFORM activity_cost_report USING wa_plpo1-lar06 * wa_ord_conf1-ism06 * struct_activity-acti6 * l_ism06_var. * ENDIF. * ELSEIF rb_summ = c_x. * IF NOT ( wa_plpo1-lar01 IS INITIAL ). * PERFORM sum_activity_costs USING wa_plpo1-lar01 * wa_ord_conf1-ism01 * struct_activity-acti1 * l_ism01_var. * ENDIF. * IF NOT ( wa_plpo1-lar02 IS INITIAL ). * PERFORM sum_activity_costs USING wa_plpo1-lar02 * wa_ord_conf1-ism02 * struct_activity-acti2 * l_ism02_var. * ENDIF. * IF NOT ( wa_plpo1-lar03 IS INITIAL ). * PERFORM sum_activity_costs USING wa_plpo1-lar03 * wa_ord_conf1-ism03 * struct_activity-acti3 * l_ism03_var. * ENDIF. * IF NOT ( wa_plpo1-lar04 IS INITIAL ). * PERFORM sum_activity_costs USING wa_plpo1-lar04 * wa_ord_conf1-ism04 * struct_activity-acti4 * l_ism04_var. * ENDIF. * IF NOT ( wa_plpo1-lar05 IS INITIAL ). * PERFORM sum_activity_costs USING wa_plpo1-lar05 * wa_ord_conf1-ism05 * struct_activity-acti5 * l_ism05_var. * ENDIF. * IF NOT ( wa_plpo1-lar06 IS INITIAL ). * PERFORM sum_activity_costs USING wa_plpo1-lar06 * wa_ord_conf1-ism06 * struct_activity-acti6 * l_ism06_var. * ENDIF. * * ENDIF. * *ENDFORM. " ACTIVITY_REPORT **&--------------------------------------------------------------------- ** **& Form GET_STDS **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GT p1 text ** %LT-- p2 text **---------------------------------------------------------------------- ** *FORM get_stds USING fp_p_plnty TYPE plnty * fp_p_plnnr TYPE plnnr * fp_p_plnkn TYPE plnkn * fp_p_zaehl TYPE cim_count. * * TYPES: BEGIN OF ty_crco_info, * objty TYPE cr_objty, * objid TYPE cr_objid, * laset TYPE cr_laset, * endda TYPE enddatum, * lanum TYPE cr_lanum, * begda TYPE begdatum, * lstar_ref TYPE ap_kzref, * lstar TYPE lstar, * END OF ty_crco_info. * * DATA : i_crco_info TYPE STANDARD TABLE OF ty_crco_info, * wa_crco_info TYPE ty_crco_info. * * * DATA: l_wcinfo TYPE c, * l_datuv TYPE plpo-datuv, * lc_objty TYPE plpo-objty VALUE 'A'. * * READ TABLE i_plpo1 INTO wa_plpo1 WITH KEY plnty = fp_p_plnty * plnnr = fp_p_plnnr * plnkn = fp_p_plnkn * zaehl = fp_p_zaehl. * IF sy-subrc = 0. * * IF ( wa_plpo1-lar01 IS INITIAL AND NOT ( wa_plpo1-vgw01 = 0 ) ) OR * ( wa_plpo1-lar02 IS INITIAL AND NOT ( wa_plpo1-vgw02 = 0 ) ) OR * ( wa_plpo1-lar03 IS INITIAL AND NOT ( wa_plpo1-vgw03 = 0 ) ) OR * ( wa_plpo1-lar04 IS INITIAL AND NOT ( wa_plpo1-vgw04 = 0 ) ) OR * ( wa_plpo1-lar05 IS INITIAL AND NOT ( wa_plpo1-vgw05 = 0 ) ) OR * ( wa_plpo1-lar06 IS INITIAL AND NOT ( wa_plpo1-vgw06 = 0 ) ). * REFRESH: i_crco_info. ** Check the work centre is on the phase, if not go to the operation * IF wa_plpo1-arbid IS INITIAL. * SELECT datuv arbid objty * INTO (l_datuv,wa_plpo1-arbid,wa_plpo1-objty) * FROM plpo * WHERE plnty = wa_pro_orders-plnty * AND plnnr = wa_pro_orders-plnnr * AND plnkn = wa_plpo1-pvzkn * AND datuv %LT= sy-datum * ORDER BY datuv DESCENDING. * EXIT. * ENDSELECT. * ENDIF. ** Default to work centre object if it's blank * IF wa_plpo1-objty IS INITIAL. * wa_plpo1-objty = lc_objty. * ENDIF. ** Get the work centre activity info * SELECT objty objid laset endda lanum begda lstar_ref lstar * INTO TABLE i_crco_info * FROM crco * WHERE objty = wa_plpo1-objty * AND objid = wa_plpo1-arbid * AND laset = 1. ** order by primary key. * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * l_wcinfo = c_y. * ENDIF. * IF l_wcinfo = c_y. ** Use work centre info. * LOOP AT i_crco_info INTO wa_crco_info * WHERE begda %LT= wa_plpo1-datuv AND * endda %GT= wa_plpo1-datuv. * CHECK NOT wa_crco_info-lstar_ref IS INITIAL. * CASE wa_crco_info-lanum. ** Only put the activity type in if there is a std value entered * WHEN 1. * IF wa_plpo1-vgw01 NE 0. * wa_plpo1-lar01 = wa_crco_info-lstar. * ENDIF. * WHEN 2. * IF wa_plpo1-vgw02 NE 0. * wa_plpo1-lar02 = wa_crco_info-lstar. * ENDIF. * WHEN 3. * IF wa_plpo1-vgw03 NE 0. * wa_plpo1-lar03 = wa_crco_info-lstar. * ENDIF. * WHEN 4. * IF wa_plpo1-vgw04 NE 0. * wa_plpo1-lar04 = wa_crco_info-lstar. * ENDIF. * WHEN 5. * IF wa_plpo1-vgw05 NE 0. * wa_plpo1-lar05 = wa_crco_info-lstar. * ENDIF. * WHEN 6. * IF wa_plpo1-vgw06 NE 0. * wa_plpo1-lar06 = wa_crco_info-lstar. * ENDIF. * ENDCASE. * ENDLOOP. * ENDIF. * * ENDIF. * *ENDFORM. " GET_STDS **&--------------------------------------------------------------------- ** **& Form get_confirmation_details **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM get_confirmation_details. * * DATA: l_last_ism01 TYPE ru_ismng, * l_last_ism02 TYPE ru_ismng, * l_last_ism03 TYPE ru_ismng, * l_last_ism04 TYPE ru_ismng, * l_last_ism05 TYPE ru_ismng, * l_last_ism06 TYPE ru_ismng. * * LOOP AT i_ord_conf1 INTO wa_ord_conf1 * WHERE rueck = wa_ordops-rueck. * IF wa_ord_conf1-stokz IS INITIAL. * l_last_ism01 = l_last_ism01 + wa_ord_conf1-ism01. * l_last_ism02 = l_last_ism02 + wa_ord_conf1-ism02. * l_last_ism03 = l_last_ism03 + wa_ord_conf1-ism03. * l_last_ism04 = l_last_ism04 + wa_ord_conf1-ism04. * l_last_ism05 = l_last_ism05 + wa_ord_conf1-ism05. * l_last_ism06 = l_last_ism06 + wa_ord_conf1-ism06. * ELSE. * l_last_ism01 = l_last_ism01 - wa_ord_conf1-ism01. * l_last_ism02 = l_last_ism02 - wa_ord_conf1-ism02. * l_last_ism03 = l_last_ism03 - wa_ord_conf1-ism03. * l_last_ism04 = l_last_ism04 - wa_ord_conf1-ism04. * l_last_ism05 = l_last_ism05 - wa_ord_conf1-ism05. * l_last_ism06 = l_last_ism06 - wa_ord_conf1-ism06. * ENDIF. * CLEAR : wa_ord_conf1. * ENDLOOP. * * MOVE l_last_ism01 TO wa_ord_conf1-ism01. * MOVE l_last_ism02 TO wa_ord_conf1-ism02. * MOVE l_last_ism03 TO wa_ord_conf1-ism03. * MOVE l_last_ism04 TO wa_ord_conf1-ism04. * MOVE l_last_ism05 TO wa_ord_conf1-ism05. * MOVE l_last_ism06 TO wa_ord_conf1-ism06. * * *ENDFORM. " get_confirmation_details **&--------------------------------------------------------------------- ** **& Form activity_cost_report **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GTP_I_PLPO1_LAR01 text ** --%GTP_I_ORD_CONF1_ISM01 text ** --%GTP_struct_activity_ACTI1 text ** --%GTP_ISM01_VAR text **---------------------------------------------------------------------- ** *FORM activity_cost_report USING fp_p_i_plpo1_lar01 TYPE lstar * fp_p_i_ord_conf1_ism01 TYPE ru_ismng * fp_p_struct_activity_acti1 TYPE co_smng13 * fp_p_ism01_var TYPE ru_ismng. * DATA: l_ltext TYPE ktext, * l_kokrs TYPE kokrs, * l_kostl TYPE kostl, * l_objnr TYPE j_objnr, * l_tkg001 TYPE tkgxxx, * l_tke001 TYPE tkexxx, * l_std(8) TYPE p DECIMALS 2, * l_act(8) TYPE p DECIMALS 2, * l_var(8) TYPE p DECIMALS 2. * * SELECT ltext FROM cslt INTO l_ltext * WHERE spras = sy-langu * AND kokrs = p_kokrs * AND lstar = fp_p_i_plpo1_lar01. * ENDSELECT. * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * IF rb_fiscl IS INITIAL. * * CLEAR wa_nodestab. * wa_nodestab-id = c_3_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * wa_nodestab-text = wa_ordops-vornr. * wa_nodestab-tlength = c_4. * * wa_nodestab-text1 = l_ltext. * wa_nodestab-tlength1 = c_44. * * MOVE fp_p_i_ord_conf1_ism01 TO wa_nodestab-text2(20). * wa_nodestab-tlength2 = c_20. * * MOVE fp_p_struct_activity_acti1 TO wa_nodestab-text3(20). * wa_nodestab-tlength3 = c_20. * * MOVE fp_p_ism01_var TO wa_nodestab-text4(20). * wa_nodestab-tlength4 = c_20. * * ELSE. * * SELECT kokrs kostl * FROM crco UP TO 1 ROWS * INTO (l_kokrs, l_kostl) * WHERE objty = c_a * AND objid = wa_ordops-arbid * AND lstar = fp_p_i_plpo1_lar01. * ENDSELECT. * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * SELECT SINGLE objnr INTO l_objnr * FROM cssl * WHERE kokrs = l_kokrs * AND kostl = l_kostl * AND lstar = fp_p_i_plpo1_lar01 * AND gjahr = sy-datum+0(4). * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * SELECT tkg001 tke001 INTO (l_tkg001, l_tke001) * FROM cost * WHERE objnr = l_objnr * AND gjahr = sy-datum+0(4) * AND versn = c_000. * ENDSELECT. * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * CLEAR: l_act, l_std, l_var. *** The following were changed to take into account the unit *** price factor. * l_act = ( fp_p_i_ord_conf1_ism01 * l_tkg001 ) / l_tke001. * l_std = ( fp_p_struct_activity_acti1 * l_tkg001 ) / l_tke001. * l_var = ( fp_p_ism01_var * l_tkg001 ) / l_tke001. * * CLEAR wa_nodestab. * wa_nodestab-id = c_3_1. * wa_nodestab-tlevel = c_4. * wa_nodestab-parent = c_3_2. * * wa_nodestab-text = wa_ordops-vornr. * wa_nodestab-tlength = c_4. * * wa_nodestab-text1 = l_ltext. * wa_nodestab-tlength1 = c_44. * * MOVE l_act TO wa_nodestab-text2(20). * wa_nodestab-tlength2 = c_20. * * MOVE l_std TO wa_nodestab-text3(20). * wa_nodestab-tlength3 = c_20. * * MOVE l_var TO wa_nodestab-text4(20). * wa_nodestab-tlength4 = c_20. * * ENDIF. * * IF flg_color = c_x. * CLEAR flg_color. * wa_nodestab-tcolor = c_3. * wa_nodestab-tcolor1 = c_3. * wa_nodestab-tcolor2 = c_3. * wa_nodestab-tcolor3 = c_3. * wa_nodestab-tcolor4 = c_3. * ELSE. * flg_color = c_x. * wa_nodestab-tcolor = c_2. * wa_nodestab-tcolor1 = c_2. * wa_nodestab-tcolor2 = c_2. * wa_nodestab-tcolor3 = c_2. * wa_nodestab-tcolor4 = c_2. * ENDIF. * * APPEND wa_nodestab TO i_nodestab. * * *ENDFORM. " activity_cost_report **&--------------------------------------------------------------------- ** **& Form uom_convert **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GTP_I_ORDMATS_MATNR text ** --%GTP_I_ORDMATS_MENGE text ** --%GTP_I_ORDMATS_AMEIN text ** --%GTP_L_AQTY text **---------------------------------------------------------------------- ** *FORM uom_convert USING fp_p_i_ordmats_matnr TYPE matnr * fp_p_i_ordmats_menge TYPE menge_d * fp_p_i_ordmats_amein TYPE meins * fp_p_l_aqty TYPE menge_d. * **Added for WIRR * DATA : struct_mara TYPE mara, * struct_t006 TYPE t006. * DATA: v_menge TYPE menge_d. * * CONSTANTS : c_halb TYPE mtart VALUE 'HALB', * c_fert TYPE mtart VALUE 'FERT', * c_kgm TYPE msehi VALUE 'KGM'. * ***************************************** ** Need some clarification on this form * ***************************************** * ** If the material is type FERT or HALB then use the net weight field ** from the material master. Otherwise use the alt uom for KG. * SELECT SINGLE * FROM mara **Added for WIRR * INTO struct_mara **Added for WIRR * * WHERE matnr = fp_p_i_ordmats_matnr. * * IF ( struct_mara-mtart = c_fert * OR struct_mara-mtart = c_halb ) * AND NOT ( struct_mara-ntgew IS INITIAL ). ***************MOD-002************************************************** ** * CLEAR: v_menge. * IF struct_mara-gewei NE 'KG'. * IF struct_mara-gewei = 'G'. * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = fp_p_i_ordmats_matnr * i_in_me = fp_p_i_ordmats_amein * i_out_me = struct_mara-meins * i_menge = fp_p_i_ordmats_menge * IMPORTING * e_menge = v_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * fp_p_l_aqty = * v_menge * ( struct_mara-ntgew / 1000 ). * ENDIF. * ENDIF. * ELSE. **************MOD-002*************************************************** ** **************MOD-003*************************************************** * IF struct_mara-meins NE fp_p_i_ordmats_amein. * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = fp_p_i_ordmats_matnr * i_in_me = fp_p_i_ordmats_amein * i_out_me = struct_mara-meins * i_menge = fp_p_i_ordmats_menge * IMPORTING * e_menge = fp_p_i_ordmats_menge * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * IF sy-subrc = 0. * fp_p_l_aqty = fp_p_i_ordmats_menge * struct_mara-ntgew. * ENDIF. * ELSE. * fp_p_l_aqty = fp_p_i_ordmats_menge * struct_mara-ntgew. * ENDIF. *************MOD-003**************************************************** * ENDIF. * ELSE. ** Get the isocode for kgm * SELECT SINGLE * FROM t006 * INTO struct_t006 * WHERE msehi = c_kgm. * * IF fp_p_i_ordmats_amein = struct_t006-msehi. * MOVE fp_p_i_ordmats_menge TO fp_p_l_aqty. * ELSE. * CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' * EXPORTING * kzmeinh = c_x * input = fp_p_i_ordmats_menge * matnr = fp_p_i_ordmats_matnr * meinh = struct_t006-msehi * IMPORTING * output = fp_p_l_aqty * EXCEPTIONS * conversion_not_found = 1 * input_invalid = 2 * material_not_found = 3 * meinh_not_found = 4 * meins_missing = 5 * no_meinh = 6 * output_invalid = 7 * overflow = 8 * OTHERS = 9. * ****************** * IF sy-subrc NE 0. * fp_p_l_aqty = 0. * ENDIF. * * ****************** * ENDIF. * ENDIF. * *ENDFORM. " uom_convert **&--------------------------------------------------------------------- ** **& Form STD_PERCENTAGE_CALC **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GTP_L_AQTY text ** --%GTP_L_SQTY text ** --%GTP_L_PCENT text **---------------------------------------------------------------------- ** *FORM std_percentage_calc USING fp_l_aqty TYPE menge_d * fp_l_sqty TYPE menge_d * fp_l_pcent TYPE any. * * CONSTANTS: c_percent_p TYPE stprs VALUE '999.99', * c_percent_n TYPE stprs VALUE '-999.99'. * * DATA: l_tcent(10) TYPE p DECIMALS 5, * l_pecent(3) TYPE p DECIMALS 2. * * CLEAR: l_tcent, l_pecent. * IF fp_l_aqty NE 0 AND fp_l_sqty NE 0. * l_tcent = ( ( fp_l_sqty - fp_l_aqty ) / fp_l_sqty ) * c_100. * ELSEIF fp_l_aqty EQ 0 AND fp_l_sqty EQ 0. * l_tcent = 0. * ELSE. * MOVE c_100 TO l_tcent. * ENDIF. * IF l_tcent GT c_percent_p. * MOVE c_percent_p TO l_pecent. * ELSEIF l_tcent LT c_percent_n. * MOVE c_percent_n TO l_pecent. * ELSE. * MOVE l_tcent TO l_pecent. * ENDIF. *** Add a calculation to convert by-product percentages to the correct *** sign. * IF fp_l_sqty %LT 0. * l_pecent = l_pecent * -1. * ENDIF. * fp_l_pcent = l_pecent. * *ENDFORM. " STD_PERCENTAGE_CALC * **&--------------------------------------------------------------------- ** **& Form DISPLAY **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM display. * * CASE c_x. * WHEN rb_summ. * PERFORM display_summary_report. * WHEN rb_detl. * PERFORM display_detail_report. * WHEN rb_phase. * PERFORM display_phase_report. * ENDCASE. * PERFORM list_display. * *ENDFORM. " DISPLAY **&--------------------------------------------------------------------- ** **& Form plant_effic **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GTP_I_PRO_ORDERS_RUECK text ** --%GTP_I_PRO_ORDERS_PLNTY text ** --%GTP_I_PRO_ORDERS_PLNNR text ** --%GTP_I_PRO_ORDERS_PLNKN text ** --%GTP_I_PRO_ORDERS_ZAEHL text ** %LT--P_V_plant_effic text **---------------------------------------------------------------------- ** *FORM plant_effic USING fp_p_plnty TYPE plnty * fp_p_plnnr TYPE plnnr * fp_p_plnkn TYPE plnkn * fp_p_zaehl TYPE cim_count * CHANGING fp_v_plant_effic TYPE any. * * FIELD-SYMBOLS: %LTfs_ism%GT TYPE ANY, * %LTfs_vgw%GT TYPE ANY. * * DATA: l_last_ism01 TYPE ru_ismng, * l_last_ism02 TYPE ru_ismng, * l_last_ism03 TYPE ru_ismng, * l_last_ism04 TYPE ru_ismng, * l_last_ism05 TYPE ru_ismng, * l_last_ism06 TYPE ru_ismng, * l_pqty TYPE menge_d, * l_real_effic(8) TYPE p DECIMALS 4, * l_should_effic(8) TYPE p DECIMALS 4. * * PERFORM get_stds_main USING fp_p_plnty fp_p_plnnr fp_p_plnkn * fp_p_zaehl. * * * LOOP AT i_ord_conf INTO wa_ord_conf * WHERE rueck = wa_ordops-rueck. * IF wa_ord_conf1-stokz IS INITIAL. * l_last_ism01 = l_last_ism01 + wa_ord_conf-ism01. * l_last_ism02 = l_last_ism02 + wa_ord_conf-ism02. * l_last_ism03 = l_last_ism03 + wa_ord_conf-ism03. * l_last_ism04 = l_last_ism04 + wa_ord_conf-ism04. * l_last_ism05 = l_last_ism05 + wa_ord_conf-ism05. * l_last_ism06 = l_last_ism06 + wa_ord_conf-ism06. * ELSE. * l_last_ism01 = l_last_ism01 - wa_ord_conf-ism01. * l_last_ism02 = l_last_ism02 - wa_ord_conf-ism02. * l_last_ism03 = l_last_ism03 - wa_ord_conf-ism03. * l_last_ism04 = l_last_ism04 - wa_ord_conf-ism04. * l_last_ism05 = l_last_ism05 - wa_ord_conf-ism05. * l_last_ism06 = l_last_ism06 - wa_ord_conf-ism06. * ENDIF. * * CLEAR : wa_ord_conf. * ENDLOOP. * * MOVE l_last_ism01 TO wa_ord_conf-ism01. * MOVE l_last_ism02 TO wa_ord_conf-ism02. * MOVE l_last_ism03 TO wa_ord_conf-ism03. * MOVE l_last_ism04 TO wa_ord_conf-ism04. * MOVE l_last_ism05 TO wa_ord_conf-ism05. * MOVE l_last_ism06 TO wa_ord_conf-ism06. * * ASSIGN c_0 TO %LTfs_ism%GT. * ASSIGN c_0 TO %LTfs_vgw%GT. * * IF wa_plpo-lar01 EQ p_machs. * ASSIGN wa_ord_conf-ism01 TO %LTfs_ism%GT. * ASSIGN wa_plpo-vgw01 TO %LTfs_vgw%GT. * ENDIF. * IF wa_plpo-lar02 EQ p_machs. * ASSIGN wa_ord_conf-ism02 TO %LTfs_ism%GT. * ASSIGN wa_plpo-vgw02 TO %LTfs_vgw%GT. * ENDIF. * IF wa_plpo-lar03 EQ p_machs. * ASSIGN wa_ord_conf-ism03 TO %LTfs_ism%GT. * ASSIGN wa_plpo-vgw03 TO %LTfs_vgw%GT. * ENDIF. * IF wa_plpo-lar04 EQ p_machs. * ASSIGN wa_ord_conf-ism04 TO %LTfs_ism%GT. * ASSIGN wa_plpo-vgw04 TO %LTfs_vgw%GT. * ENDIF. * IF wa_plpo-lar05 EQ p_machs. * ASSIGN wa_ord_conf-ism05 TO %LTfs_ism%GT. * ASSIGN wa_plpo-vgw05 TO %LTfs_vgw%GT. * ENDIF. * IF wa_plpo-lar06 EQ p_machs. * ASSIGN wa_ord_conf-ism06 TO %LTfs_ism%GT. * ASSIGN wa_plpo-vgw06 TO %LTfs_vgw%GT. * ENDIF. * * CLEAR l_pqty. * IF NOT ( rb_prod IS INITIAL ). * l_pqty = wa_pro_orders-menge. * ELSE. * l_pqty = wa_pro_orders-lmnga. * ENDIF. * * IF %LTfs_ism%GT GT c_0. ** IF NOT %LTFS_ISM%GT IS INITIAL. * l_real_effic = ( l_pqty / %LTfs_ism%GT ). * ELSE. * MOVE 0 TO l_real_effic. * ENDIF. * IF %LTfs_vgw%GT GT c_0. ** IF NOT %LTFS_VGW%GT IS INITIAL. * l_should_effic = ( wa_plpo-bmsch / %LTfs_vgw%GT ). * ELSE. * MOVE 0 TO l_should_effic. * ENDIF. * IF l_should_effic GT c_0. * v_plant_effic = ( l_real_effic / l_should_effic ) * c_100. * ELSE. * MOVE 0 TO fp_v_plant_effic. * ENDIF. * *ENDFORM. " plant_effic **&--------------------------------------------------------------------- ** **& Form get_stds_main **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GTP_PLNTY text ** --%GTP_PLNNR text ** --%GTP_PLNKN text ** --%GTP_ZAEHL text **---------------------------------------------------------------------- ** *FORM get_stds_main USING fp_p_plnty TYPE plnty * fp_p_plnnr TYPE plnnr * fp_p_plnkn TYPE plnkn * fp_p_zaehl TYPE cim_count. * TYPES: BEGIN OF ty_crco_info, * objty TYPE cr_objty, * objid TYPE cr_objid, * laset TYPE cr_laset, * endda TYPE enddatum, * lanum TYPE cr_lanum, * begda TYPE begdatum, * lstar_ref TYPE ap_kzref, * lstar TYPE lstar, * END OF ty_crco_info. * * DATA : i_crco_info TYPE STANDARD TABLE OF ty_crco_info, * wa_crco_info TYPE ty_crco_info. * DATA: l_wcinfo TYPE c, * l_datuv TYPE plpo-datuv, * lc_objty TYPE plpo-objty VALUE 'A'. * * READ TABLE i_plpo INTO wa_plpo WITH KEY plnty = fp_p_plnty * plnnr = fp_p_plnnr * plnkn = fp_p_plnkn * zaehl = fp_p_zaehl. * IF sy-subrc = 0. * * IF ( wa_plpo-lar01 IS INITIAL AND NOT ( wa_plpo-vgw01 = 0 ) ) OR * ( wa_plpo-lar02 IS INITIAL AND NOT ( wa_plpo-vgw02 = 0 ) ) OR * ( wa_plpo-lar03 IS INITIAL AND NOT ( wa_plpo-vgw03 = 0 ) ) OR * ( wa_plpo-lar04 IS INITIAL AND NOT ( wa_plpo-vgw04 = 0 ) ) OR * ( wa_plpo-lar05 IS INITIAL AND NOT ( wa_plpo-vgw05 = 0 ) ) OR * ( wa_plpo-lar06 IS INITIAL AND NOT ( wa_plpo-vgw06 = 0 ) ). * REFRESH: i_crco_info. ** Check the work centre is on the phase, if not go to the operation * IF wa_plpo-arbid IS INITIAL. * SELECT datuv arbid objty * INTO (l_datuv,wa_plpo-arbid,wa_plpo-objty) * FROM plpo * WHERE plnty = fp_p_plnty * AND plnnr = fp_p_plnnr * AND plnkn = wa_plpo-pvzkn * AND datuv %LT= sy-datum * ORDER BY datuv DESCENDING. * EXIT. * ENDSELECT. * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * ENDIF. ** Default to work centre object if it's blank * IF wa_plpo-objty IS INITIAL. * wa_plpo-objty = lc_objty. * ENDIF. ** Get the work centre activity info * SELECT objty objid laset endda lanum begda lstar_ref lstar * INTO TABLE i_crco_info * FROM crco * WHERE objty = wa_plpo-objty * AND objid = wa_plpo-arbid * AND laset = 1. ** order by primary key. * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * l_wcinfo = c_y. * ENDIF. * IF l_wcinfo = c_y. ** Use work centre info. * LOOP AT i_crco_info INTO wa_crco_info * WHERE begda %LT= wa_plpo-datuv AND * endda %GT= wa_plpo-datuv. * CHECK NOT wa_crco_info-lstar_ref IS INITIAL. * CASE wa_crco_info-lanum. ** Only put the activity type in if there is a std value entered * WHEN 1. * IF wa_plpo-vgw01 NE 0. * wa_plpo-lar01 = wa_crco_info-lstar. * ENDIF. * WHEN 2. * IF wa_plpo-vgw02 NE 0. * wa_plpo-lar02 = wa_crco_info-lstar. * ENDIF. * WHEN 3. * IF wa_plpo-vgw03 NE 0. * wa_plpo-lar03 = wa_crco_info-lstar. * ENDIF. * WHEN 4. * IF wa_plpo-vgw04 NE 0. * wa_plpo-lar04 = wa_crco_info-lstar. * ENDIF. * WHEN 5. * IF wa_plpo-vgw05 NE 0. * wa_plpo-lar05 = wa_crco_info-lstar. * ENDIF. * WHEN 6. * IF wa_plpo-vgw06 NE 0. * wa_plpo-lar06 = wa_crco_info-lstar. * ENDIF. * ENDCASE. * ENDLOOP. * ENDIF. * * ENDIF. * *ENDFORM. " get_stds_main **&--------------------------------------------------------------------- ** **& Form get_confirmation_qty **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GTP_I_ORDOPS_RUECK text ** --%GTP_I_PRO_ORDERS_PLNBEZ text ** --%GTP_L_PRDQTY text ** --%GTP_L_CFUOM text **---------------------------------------------------------------------- ** *FORM get_confirmation_qty USING fp_p_i_ordops_rueck TYPE co_rueck * fp_p_l_prdqty TYPE menge_d * fp_p_l_cfuom TYPE meins. * DATA: l_lmnga TYPE ru_lmnga, * l_gmnga TYPE ru_gmnga. * ************MOD-002*************************************** * SELECT aufnr rueck gmnga lmnga gmein meinh * meilr stokz rueck_mst * FROM afru INTO TABLE itab_afru * FOR ALL ENTRIES IN i_pro_orders * WHERE aufnr = i_pro_orders-aufnr. * * SORT itab_afru BY aufnr rueck . ************MOD-002**************************************** * IF NOT itab_afru[] IS INITIAL. * CLEAR: l_lmnga, l_gmnga. * LOOP AT itab_afru INTO wa_afru WHERE rueck = fp_p_i_ordops_rueck. ** IF ( wa_afru-rueck_mst IS INITIAL ) AND ** ( wa_afru-lmnga NE 0 ) AND ** NOT ( wa_afru-meilr IS INITIAL ). * IF wa_afru-stokz IS INITIAL. * l_lmnga = l_lmnga + wa_afru-lmnga. * l_gmnga = l_gmnga + wa_afru-gmnga. * ELSE. * l_lmnga = l_lmnga - wa_afru-lmnga. * l_gmnga = l_gmnga - wa_afru-gmnga. * ENDIF. ** ENDIF. * ENDLOOP. * IF wa_afru-meinh NE wa_afru-gmein. * fp_p_l_prdqty = l_lmnga. * fp_p_l_cfuom = wa_afru-gmein. * ELSE. * fp_p_l_prdqty = l_gmnga. * fp_p_l_cfuom = wa_afru-meinh. * ENDIF. * ENDIF. *ENDFORM. " get_confirmation_qty **&--------------------------------------------------------------------- ** **& Form MATERIAL_HEADER **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GT p1 text ** %LT-- p2 text **---------------------------------------------------------------------- ** *FORM material_header. * * wa_nodestab-text = 'Material'(058). * wa_nodestab-tlength = c_22. * wa_nodestab-tcolor = c_4. * wa_nodestab-propfaw = c_x. * * wa_nodestab-text1 = 'Description'(059). * wa_nodestab-tlength1 = c_30. * wa_nodestab-tcolor1 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Actual Usage'(040) v_waers * INTO wa_nodestab-text2 SEPARATED BY space. * ELSE. * wa_nodestab-text2 = 'Actual Usage'(040). * ENDIF. * wa_nodestab-tlength2 = c_20. * wa_nodestab-tcolor2 = c_4. * * IF rb_fiscl = c_x. * CONCATENATE 'Standard Usage'(041) v_waers * INTO wa_nodestab-text3 SEPARATED BY space. * ELSE. * wa_nodestab-text3 = 'Standard Usage'(041). * ENDIF. * wa_nodestab-tlength3 = c_20. * wa_nodestab-tcolor3 = c_4. * * wa_nodestab-text4 = 'Var'(060). * wa_nodestab-tlength4 = c_19. * wa_nodestab-tcolor4 = c_4. * ** IF rb_fiscl = c_x. * CONCATENATE 'Variance'(061) v_waers * INTO wa_nodestab-text5 SEPARATED BY space. ** ELSE. ** wa_nodestab-text5 = 'Variance'(061). ** ENDIF. * wa_nodestab-tlength5 = c_15. * wa_nodestab-tcolor5 = c_4. * * APPEND wa_nodestab TO i_nodestab. * CLEAR : wa_nodestab. *ENDFORM. " MATERIAL_HEADER **&--------------------------------------------------------------------- ** **& Form sum_activity_costs **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GTP_I_PLPO1_LAR01 text ** --%GTP_I_ORD_CONF1_ISM01 text ** --%GTP_struct_activity_ACTI1 text ** --%GTP_ISM01_VAR text **---------------------------------------------------------------------- ** *FORM sum_activity_costs USING fp_p_i_plpo1_lar01 TYPE lstar * fp_p_i_ord_conf1_ism01 TYPE ru_ismng *fp_p_struct_activity_acti1 TYPE co_smng13 *fp_p_ism01_var TYPE ru_ismng. * DATA: l_kokrs TYPE kokrs, * l_kostl TYPE kostl, * l_objnr TYPE j_objnr, * l_tkg001 TYPE tkgxxx, * l_tke001 TYPE tkexxx, * l_std(8) TYPE p DECIMALS 2, * l_act(8) TYPE p DECIMALS 2, * l_var(8) TYPE p DECIMALS 2. * * SELECT kokrs kostl * FROM crco UP TO 1 ROWS * INTO (l_kokrs, l_kostl) * WHERE objty = c_objtyp * AND objid = wa_ordops-arbid * AND lstar = fp_p_i_plpo1_lar01. * ENDSELECT. * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * SELECT SINGLE objnr INTO l_objnr * FROM cssl * WHERE kokrs = l_kokrs * AND kostl = l_kostl * AND lstar = fp_p_i_plpo1_lar01 * AND gjahr = sy-datum+0(4). * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * SELECT tkg001 tke001 INTO (l_tkg001, l_tke001) * FROM cost * WHERE objnr = l_objnr * AND gjahr = sy-datum+0(4) * AND versn = c_000. * ENDSELECT. * * IF sy-subrc = 0. **Not required to handle * ENDIF. * * CLEAR: l_act, l_std, l_var. * l_act = ( fp_p_i_ord_conf1_ism01 * l_tkg001 ) / l_tke001. * l_std = ( fp_p_struct_activity_acti1 * l_tkg001 ) / l_tke001. * l_var = ( fp_p_ism01_var * l_tkg001 ) / l_tke001. * * CLEAR wa_sum_activity. * * LOOP AT i_sum_activity INTO wa_sum_activity * WHERE lar = fp_p_i_plpo1_lar01. * wa_sum_activity-afru_ism = wa_sum_activity-afru_ism * + fp_p_i_ord_conf1_ism01. * wa_sum_activity-ism_should = wa_sum_activity-ism_should * + fp_p_struct_activity_acti1. * wa_sum_activity-ism_var = wa_sum_activity-ism_var * + fp_p_ism01_var. * wa_sum_activity-coact = wa_sum_activity-coact + l_act. * wa_sum_activity-costd = wa_sum_activity-costd + l_std. * wa_sum_activity-covar = wa_sum_activity-covar + l_var. * MODIFY i_sum_activity FROM wa_sum_activity. * CLEAR : wa_sum_activity. * ENDLOOP. * * IF sy-subrc NE 0. * MOVE fp_p_i_plpo1_lar01 TO wa_sum_activity-lar. * MOVE fp_p_i_ord_conf1_ism01 TO wa_sum_activity-afru_ism. * MOVE fp_p_struct_activity_acti1 TO wa_sum_activity-ism_should. * MOVE fp_p_ism01_var TO wa_sum_activity-ism_var. * wa_sum_activity-coact = l_act. * wa_sum_activity-costd = l_std. * wa_sum_activity-covar = l_var. * APPEND wa_sum_activity TO i_sum_activity. * CLEAR : wa_sum_activity. * ENDIF. * *ENDFORM. " sum_activity_costs **&--------------------------------------------------------------------- ** **& Form SUMMARY_MATERIALS **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** **---------------------------------------------------------------------- ** *FORM summary_materials. * ** Sum Ingredient Tots * CLEAR wa_sum_ordmats. * LOOP AT i_sum_ordmats INTO wa_sum_ordmats * WHERE matnr = wa_ordmats-matnr. * wa_sum_ordmats-num = wa_sum_ordmats-num + c_1. * wa_sum_ordmats-menge = wa_sum_ordmats-menge + wa_ordmats-menge. * wa_sum_ordmats-stdqy = wa_sum_ordmats-stdqy + wa_ordmats-stdqy. * wa_sum_ordmats-zloss = wa_sum_ordmats-zloss + wa_ordmats-zloss. * wa_sum_ordmats-amein = wa_ordmats-amein. * wa_sum_ordmats-meins = wa_ordmats-meins. * wa_sum_ordmats-stprs = wa_ordmats-stprs. * wa_sum_ordmats-peinh = wa_ordmats-peinh. * MODIFY i_sum_ordmats FROM wa_sum_ordmats. * CLEAR : wa_sum_ordmats. * ENDLOOP. * IF sy-subrc NE 0. * MOVE wa_ordmats-matnr TO wa_sum_ordmats-matnr. * MOVE 1 TO wa_sum_ordmats-num. * MOVE wa_ordmats-menge TO wa_sum_ordmats-menge. * MOVE wa_ordmats-stdqy TO wa_sum_ordmats-stdqy. * MOVE wa_ordmats-zloss TO wa_sum_ordmats-zloss. * wa_sum_ordmats-amein = wa_ordmats-amein. * wa_sum_ordmats-meins = wa_ordmats-meins. * wa_sum_ordmats-stprs = wa_ordmats-stprs. * wa_sum_ordmats-peinh = wa_ordmats-peinh. * APPEND wa_sum_ordmats TO i_sum_ordmats. * CLEAR : wa_sum_ordmats. * ENDIF. * *ENDFORM. " SUMMARY_MATERIALS **&--------------------------------------------------------------------- ** **& Form get_confirmation_qty_new **&--------------------------------------------------------------------- ** ** text **---------------------------------------------------------------------- ** ** --%GTP_WA_PRO_ORDERS_RUECK text ** --%GTP_WA_PRO_ORDERS_PLNBEZ text ** --%GTP_WA_PRO_ORDERS_LMNGA text ** --%GTP_WA_PRO_ORDERS_CFUOM text **---------------------------------------------------------------------- ** *FORM get_confirmation_qty_new USING p_lmnga TYPE ru_lmnga * p_cfuom TYPE meins. * **************************************************** **USING ** P_RUECK TYPE CO_RUECK ** p_aufnr type aufnr ** P_LMNGA TYPE RU_LMNGA ** P_CFUOM TYPE MEINS ** p_aufpl type CO_AUFPL ** p_vornr type vornr ** p_aplzl type CO_APLZL. **************************************************** * DATA: last_lmnga LIKE afru-lmnga, * last_gmnga TYPE afru-gmnga. * * CLEAR: last_lmnga, last_gmnga. * CLEAR:i_afru, wa_afru. * * * * ** Check this record. If there is no link to another confirmation and ** a quantity has been confirmed and it is a milestone confirmation ** then we want to select all of the confirmations for it. * LOOP AT i_afru1 INTO wa_afru1. ** check WA_afru-rueck_mst is initial. * CHECK wa_afru1-lmnga NE 0. ** check not ( WA_afru-meilr is initial ). * IF wa_afru1-stokz IS INITIAL. * last_lmnga = last_lmnga + wa_afru1-lmnga. * last_gmnga = last_gmnga + wa_afru1-gmnga. * ELSE. * last_lmnga = last_lmnga - wa_afru1-lmnga. * last_gmnga = last_gmnga - wa_afru1-gmnga. * ENDIF. * ENDLOOP. * ** use order unit quantity if necessary * IF wa_afru1-meinh NE wa_afru1-gmein. ** afru-gmein is order unit of measure * MOVE last_gmnga TO p_lmnga. * p_cfuom = wa_afru1-gmein. * ELSE. ** use normal quantity * MOVE last_lmnga TO p_lmnga. * p_cfuom = wa_afru1-meinh. * ENDIF. * *ENDFORM. " get_confirmation_qty_new **** **** END OF MOD-101 **** *&---------------------------------------------------------------------* *& Form USER_COMMNAD *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM user_command TABLES fp_i_nodestab STRUCTURE snodetext"#EC * USING fp_l_ucomm TYPE any CHANGING fp_l_exit TYPE any fp_l_list_refresh TYPE any. "#EC * DATA : v_aufnr TYPE aufnr, l_arbpl TYPE arbpl, "MOD-101+ l_txt(14) TYPE c. "MOD-101+ DATA: PROGNAME LIKE SY-REPID, SELECTED TYPE C, EXIT_SAV TYPE C, LIST_REFRESH_SAV TYPE C. fp_l_list_refresh = c_m. CASE fp_l_ucomm. *** *** BEGIN OF MOD-101 *** WHEN c_trpi. CLEAR : v_aufnr , l_txt. GET CURSOR FIELD fp_i_nodestab-text1 VALUE l_txt. IF fp_i_nodestab-text1 = c_text1 AND NOT l_txt IS INITIAL. CASE fp_i_nodestab-tlevel. WHEN c_tlevel_2. v_aufnr = l_txt(12). SUBMIT zprocessord WITH s_aufnr-low = v_aufnr AND RETURN. * SUBMIT zprocessord WITH p_aufnr = v_aufnr * AND RETURN. WHEN c_tlevel_3. l_arbpl = l_txt(8). SET PARAMETER ID 'WRK' FIELD p_werks. SET PARAMETER ID 'AGR' FIELD l_arbpl. CALL TRANSACTION 'CRC3' AND SKIP FIRST SCREEN. WHEN c_tlevel_4. l_arbpl = l_txt+6(8). SET PARAMETER ID 'WRK' FIELD p_werks. SET PARAMETER ID 'AGR' FIELD l_arbpl. CALL TRANSACTION 'CRC3' AND SKIP FIRST SCREEN. ENDCASE. ELSEIF fp_i_nodestab-text1 %LT%GT c_plus AND fp_i_nodestab-text1 %LT%GT c_minus AND sy-title %LT%GT 'Process Order Variance - Summary Report'(069). *Please select order number! MESSAGE s063. ENDIF. ** TRSL * CLEAR : v_aufnr , l_txt. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE l_txt. * IF fp_i_nodestab-text1 = c_text1 AND NOT l_txt IS INITIAL. * CASE fp_i_nodestab-tlevel. * WHEN c_tlevel_2. * v_aufnr = l_txt. * call function 'RS_TREE_EXPAND' * exporting * node_id = nodelist-id * list_scroll = 'X' * exceptions * others. * WHEN c_tlevel_3. * l_arbpl = l_txt(8). * call function 'RS_TREE_EXPAND' * exporting * node_id = nodelist-id * list_scroll = 'X' * exceptions * others. * * WHEN c_tlevel_4. * l_arbpl = l_txt+5(8). * call function 'RS_TREE_EXPAND' * exporting * node_id = nodelist-id * list_scroll = 'X' * exceptions * others. * * ENDCASE. * ** when 'NODE'. ** if selname = 'MINUS' or selname = 'MINUSLINE'. ** call function 'RS_TREE_COMPRESS' ** exporting ** node_id = nodelist-id ** exceptions ** others. ** elseif selname = 'PLUS' or selname = 'PLUSLINE'. ** call function 'RS_TREE_EXPAND' ** exporting ** node_id = nodelist-id ** list_scroll = 'X' ** exceptions ** others. ** else. ** perform uc_prepare_nodetab. ** perform uc_user_callback. ** if exit ne space. ** exit_from_screen. ** endif. ** endif. ** ENDCASE. * * ELSEIF fp_i_nodestab-text1 %LT%GT c_plus AND fp_i_nodestab-text1 %LT%GT * c_minus AND *sy-title %LT%GT 'Process Order Variance - Summary Report'(069). **Please select order number! * MESSAGE s063. * ENDIF. WHEN c_trde. CLEAR : v_aufnr , l_txt. GET CURSOR FIELD fp_i_nodestab-text1 VALUE l_txt. IF fp_i_nodestab-text1 = c_text1 AND NOT l_txt IS INITIAL. CASE fp_i_nodestab-tlevel. WHEN c_tlevel_2. v_aufnr = l_txt(12). * SUBMIT zprocessord WITH p_aufnr = v_aufnr * AND RETURN. SUBMIT zprocessord WITH s_aufnr-low = v_aufnr AND RETURN. WHEN c_tlevel_3. l_arbpl = l_txt(8). SET PARAMETER ID 'WRK' FIELD p_werks. SET PARAMETER ID 'AGR' FIELD l_arbpl. CALL TRANSACTION 'CRC3' AND SKIP FIRST SCREEN. WHEN c_tlevel_4. l_arbpl = l_txt+5(8). SET PARAMETER ID 'WRK' FIELD p_werks. SET PARAMETER ID 'AGR' FIELD l_arbpl. CALL TRANSACTION 'CRC3' AND SKIP FIRST SCREEN. ENDCASE. ELSEIF fp_i_nodestab-text1 %LT%GT c_plus AND fp_i_nodestab-text1 %LT%GT c_minus. *Please select order number! MESSAGE s063. ENDIF. * WHEN c_trpi. * CLEAR : v_aufnr , l_txt. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE l_txt. * * CLEAR v_aufnr. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE v_aufnr. * * IF fp_i_nodestab-text1 = c_text1 "'NODELIST-TEXT1' * AND NOT v_aufnr IS INITIAL * AND fp_i_nodestab-tlevel = c_tlevel_2. * SUBMIT /eur/rgbptr_order_vari_detail * WITH p_aufnr = v_aufnr AND RETURN. * ELSEIF fp_i_nodestab-text1 %LT%GT c_plus * AND fp_i_nodestab-text1 %LT%GT c_minus * AND sy-title %LT%GT 'Process Order Variance - Summary Report'(069). **Please select order number! * MESSAGE s063. * ENDIF. * * WHEN c_trde. * CLEAR v_aufnr. * GET CURSOR FIELD fp_i_nodestab-text1 VALUE v_aufnr. * IF fp_i_nodestab-text1 = c_text1 "'NODELIST-TEXT1' * AND NOT v_aufnr IS INITIAL * AND fp_i_nodestab-tlevel = c_tlevel_2. * SUBMIT /eur/rgbptr_order_vari_detail * WITH p_aufnr = v_aufnr AND RETURN. * ELSEIF fp_i_nodestab-text1 %LT%GT c_plus * AND fp_i_nodestab-text1 %LT%GT c_minus. **Please select order number! * MESSAGE s063. * ENDIF. WHEN c_detl. CLEAR: rb_summ, rb_phase. rb_detl = c_x. PERFORM output. WHEN c_phas. CLEAR: rb_detl, rb_summ. rb_phase = c_x. PERFORM output. *** *** END OF MOD-101 *** WHEN c_sums. CLEAR: rb_detl, rb_phase. rb_summ = c_x. * fp_l_exit = c_x. "MOD-101- * PERFORM display. "MOD-101- PERFORM output. "MOD-101+ WHEN c_qty. * Display quantities rb_quant = c_x. rb_fiscl = space. * fp_l_exit = c_x. "MOD-101- * PERFORM display. "MOD-101- PERFORM output. "MOD-101+ WHEN c_fisc. * Display fiscal values rb_quant = space. rb_fiscl = c_x. * fp_l_exit = c_x. "MOD-101- * PERFORM display. "MOD-101- PERFORM output. "MOD-101+ WHEN c_kgm. * Display in KGMs rb_order = space. rb_kgm = c_x. * fp_l_exit = c_x. "MOD-101- * PERFORM display. "MOD-101- PERFORM output. "MOD-101+ WHEN c_ordu. * Display order units rb_kgm = space. rb_order = c_x. * fp_l_exit = c_x. "MOD-101- * PERFORM display. "MOD-101- PERFORM output. "MOD-101+ WHEN c_zero. * Display zero loss values rb_stdpl = space. rb_zloss = c_x. * fp_l_exit = c_x. "MOD-101- * PERFORM display. "MOD-101- PERFORM output. "MOD-101+ WHEN c_std. * Display standard recipe values rb_zloss = space. rb_stdpl = c_x. * fp_l_exit = c_x. "MOD-101- * PERFORM display. "MOD-101- PERFORM output. "MOD-101+ WHEN c_trep. IF fp_i_nodestab-child IS INITIAL. *Invalid row selected! MESSAGE s064. ELSE. call function 'RS_TREE_EXPAND' EXPORTING node_id = fp_i_nodestab-id all = stree_expand_all list_scroll = 'X' EXCEPTIONS not_found = 01. ENDIF. WHEN c_trcm. IF fp_i_nodestab-child IS INITIAL. *Invalid row selected! MESSAGE s064. ENDIF. WHEN 'AUAN'. SET PARAMETER ID 'ANR' FIELD s_aufnr. CALL TRANSACTION 'COR3' AND SKIP FIRST SCREEN. WHEN 'AUAE'. SET PARAMETER ID 'ANR' FIELD s_aufnr. CALL TRANSACTION 'COR2' AND SKIP FIRST SCREEN. WHEN c_exit. LEAVE PROGRAM. ENDCASE. **"BEGIN OF MOD-101 * IF sy-ucomm = c_back AND fp_l_ucomm = c_sums. * CLEAR: rb_summ, rb_phase. * rb_detl = c_x. * fp_l_list_refresh = c_m. * PERFORM list_display. * fp_l_exit = c_x. * ENDIF. **"END OF MOD-101 ENDFORM. "user_command *&---------------------------------------------------------------------* *& Form LIST_DISPLAY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM list_display. *" %GT%GT%GT MOD-101- CALL FUNCTION 'RS_TREE_CONSTRUCT' TABLES nodetab = i_nodestab EXCEPTIONS tree_failure = 1 id_not_found = 2 wrong_relationship = 3 OTHERS = 4. IF sy-subrc %LT%GT 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. *" %LT%LT%LT MOD-101- CALL FUNCTION 'RS_TREE_LIST_DISPLAY' EXPORTING * callback_program = c_prog "MOD-101- callback_program = sy-repid "MOD-101+ callback_user_command = 'USER_COMMAND'. ENDFORM. " LIST_DISPLAY *&---------------------------------------------------------------------* *& Form inform_user_of_progress *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM inform_user_of_progress. * Update Gui CONDENSE v_output_text. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING text = v_output_text. ENDFORM. " inform_user_of_progress *&---------------------------------------------------------------------* *& Form pfstatus *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM pfstatus. * Build table of excluded functions for buttons in report REFRESH i_fcode. * Not summary report IF NOT ( rb_summ IS INITIAL ). " MOD-101- MOVE c_trde TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. MOVE c_sums TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. *** BEGIN OF MOD-101 ELSEIF rb_detl = c_x. MOVE c_trde TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. MOVE c_detl TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. ELSEIF rb_phase = c_x. MOVE c_trde TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. MOVE c_phas TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. *** END OF MOD-101 ENDIF. * Fiscal / quantity IF rb_fiscl IS INITIAL. MOVE c_qty TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. ELSE. MOVE c_fisc TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. ****Begin of MOD-001 * MOVE c_ordu TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * CLEAR wa_fcode. * MOVE c_kgm TO wa_fcode-fcode. * APPEND wa_fcode TO i_fcode. * CLEAR wa_fcode. ****End of MOD-001 ENDIF. * KGM / Order uom IF rb_kgm IS INITIAL. MOVE c_ordu TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. ELSE. MOVE c_kgm TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. ENDIF. * Zero loss / std values IF rb_zloss IS INITIAL. MOVE c_std TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. ELSE. MOVE c_zero TO wa_fcode-fcode. APPEND wa_fcode TO i_fcode. CLEAR wa_fcode. ENDIF. ENDFORM. " pfstatus *=========================================================* *****BEGIN OF MOD-003. *&---------------------------------------------------------------------* *& Form validate_stlan *&---------------------------------------------------------------------* * subroutine to validate BOM usage *----------------------------------------------------------------------* FORM validate_stlan . DATA: l_usage TYPE stlan. * IF p_usage IS INITIAL. "MOD-101- * MESSAGE e030. "Plese enter BOM usage "MOD-101- * ELSE. "MOD-101- SELECT stlan INTO l_usage "get BOM usage FROM t416 UP TO 1 ROWS WHERE stlan = p_usage. ENDSELECT. IF sy-subrc NE 0. * MESSAGE e030. "BOM usage doesn't exist. "MOD-101- MESSAGE e030 WITH p_usage. "MOD-101+ ENDIF. * ENDIF. "MOD-101- ENDFORM. " validate_stlan *&---------------------------------------------------------------------* *& Form validate_steus *&---------------------------------------------------------------------* * subroutine to validate control key *----------------------------------------------------------------------* FORM validate_steus . *** BEGIN OF MOD-101 r_steus = s_steus[]. *"Get control key from T430 SELECT plnaw steus kalkz FROM t430 INTO TABLE i_ckey WHERE steus IN s_steus AND kalkz EQ c_x. IF sy-subrc NE 0. MESSAGE e054. "enter valid control key. ENDIF. **"Get control key from T430 * DATA: l_steus TYPE steus. * **"if control key is not entered * IF s_steus[] IS INITIAL. * MESSAGE e071. "Please enter control key. * ELSE. **"get control key * SELECT steus INTO l_steus * FROM t430 * UP TO 1 ROWS * WHERE steus IN s_steus. * ENDSELECT. * IF sy-subrc NE 0. * MESSAGE e054. "enter valid control key. * ENDIF. * ENDIF. *** END OF MOD-101 ENDFORM. " validate_steus *&---------------------------------------------------------------------* *& Form validate_lstar *&---------------------------------------------------------------------* * subroutine to validate machine hours indicator *----------------------------------------------------------------------* *form validate_lstar . *data:l_lstar tyep lstar. * *endform. " validate_lstar *****END OF MOD-003. *** BEGIN OF MOD-101 *&--------------------------------------------------------------------* *& Form tree_rebuild *&--------------------------------------------------------------------* * build / rebuild tree *---------------------------------------------------------------------* FORM tree_rebuild. CALL FUNCTION 'RS_TREE_CONSTRUCT' TABLES nodetab = i_nodestab EXCEPTIONS tree_failure = 1 id_not_found = 2 wrong_relationship = 3 OTHERS = 4. IF sy-subrc %LT%GT 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. "tree_rebuild *&--------------------------------------------------------------------* *& Form conv_to_from_base *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM conv_to_from_base USING fp_kzmeinh fp_matnr fp_input fp_meinh fp_meins CHANGING fp_output fp_rc. CLEAR : fp_rc , fp_output. CALL FUNCTION 'MATERIAL_UNIT_CONVERSION' EXPORTING input = fp_input kzmeinh = fp_kzmeinh matnr = fp_matnr meinh = fp_meinh meins = fp_meins * CHARGE = * WERKS = IMPORTING output = fp_output * UMREN = * UMREZ = EXCEPTIONS conversion_not_found = 1 input_invalid = 2 material_not_found = 3 meinh_not_found = 4 meins_missing = 5 no_meinh = 6 output_invalid = 7 overflow = 8 OTHERS = 9. IF sy-subrc %LT%GT 0. fp_rc = 'X'. ENDIF. ENDFORM. "conv_to_from_base *&--------------------------------------------------------------------* *& Form convert_to_kg *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM convert_to_kg USING fp_matnr TYPE matnr fp_bsuom TYPE meins fp_gewei TYPE gewei fp_ntgew TYPE ntgew fp_qtyin TYPE menge_d CHANGING fp_qtout TYPE menge_d fp_rc. DATA : l_out TYPE menge_d. CLEAR : fp_rc , fp_qtout. l_out = fp_qtyin * fp_ntgew. IF fp_gewei %LT%GT 'KG'. CALL FUNCTION 'UNIT_CONVERSION_SIMPLE' EXPORTING input = l_out unit_in = fp_gewei unit_out = 'KG' IMPORTING output = fp_qtout EXCEPTIONS conversion_not_found = 1 division_by_zero = 2 input_invalid = 3 output_invalid = 4 overflow = 5 type_invalid = 6 units_missing = 7 unit_in_not_found = 8 unit_out_not_found = 9 OTHERS = 10. IF sy-subrc %LT%GT 0. fp_rc = 'X'. ENDIF. ELSE. fp_qtout = l_out. ENDIF. ENDFORM. "convert_to_kg *&--------------------------------------------------------------------* *& Form do_mat_calc *&--------------------------------------------------------------------* * text *---------------------------------------------------------------------* FORM do_mat_calc CHANGING fp_h_mat TYPE ty_hier_mat fp_aqty TYPE char18 fp_matuom TYPE meins fp_sqty TYPE char18 fp_stduom TYPE meins fp_svar TYPE char18 fp_varuom TYPE meins fp_svarp TYPE char18 fp_amenge TYPE menge_d fp_smenge TYPE menge_d fp_astprs TYPE ty_stprs fp_sstprs TYPE ty_stprs. DATA : l_aqty TYPE char18, l_sqty TYPE char18, l_svar TYPE char18, l_svarp TYPE char18, l_matuom TYPE meins, l_stduom TYPE meins, l_varuom TYPE meins, l_amenge TYPE menge_d, l_smenge TYPE menge_d, l_menge TYPE menge_d, l_mvar TYPE menge_d, l_astprs TYPE ty_stprs, l_sstprs TYPE ty_stprs, l_vstprs TYPE ty_stprs, l_wa_h_mat TYPE ty_hier_mat, l_fact_a TYPE menge_d VALUE 1, l_fact_s TYPE menge_d VALUE 1. CLEAR : l_smenge, l_amenge, l_astprs, l_sstprs, l_stduom, l_matuom, l_varuom, l_aqty , l_sqty , l_svar , l_svarp . l_wa_h_mat = fp_h_mat. * Standard planned or zero loss planned IF rb_zloss IS INITIAL. l_wa_h_mat-stdusg = l_wa_h_mat-stdusgs. ELSE. l_wa_h_mat-stdusg = l_wa_h_mat-stdusgz. ENDIF. l_smenge = fp_smenge + l_wa_h_mat-stdusg. l_amenge = l_wa_h_mat-actusg. IF l_wa_h_mat-bsuom = 'EA' OR l_wa_h_mat-bsuom = 'CS'. * Begin of MOD-002++ * l_smenge = CEIL( l_wa_h_mat-stdusg ). * l_amenge = CEIL( l_wa_h_mat-actusg ). * End of MOD-002++ l_wa_h_mat-stdusg = l_smenge. l_wa_h_mat-actusg = l_amenge. ENDIF. * Order UoM or KG * IF rb_quant EQ c_x AND rb_kgm IS INITIAL. IF rb_kgm IS INITIAL. l_matuom = l_wa_h_mat-gruom. l_stduom = l_wa_h_mat-bomuom. IF l_wa_h_mat-gruom %LT%GT l_wa_h_mat-bsuom. PERFORM conv_to_from_base USING ' ' l_wa_h_mat-matnr l_amenge l_wa_h_mat-gruom l_wa_h_mat-bsuom CHANGING l_menge v_conv_rc. IF v_conv_rc %LT%GT c_x. l_amenge = l_menge. PERFORM convert_unit USING l_wa_h_mat-matnr 1 l_wa_h_mat-gruom l_wa_h_mat-bsuom CHANGING l_fact_a. IF l_fact_a = 0. l_fact_a = 1. ENDIF. ENDIF. ENDIF. IF l_wa_h_mat-bsuom %LT%GT l_wa_h_mat-bomuom. PERFORM conv_to_from_base USING ' ' l_wa_h_mat-matnr l_smenge l_wa_h_mat-bomuom l_wa_h_mat-bsuom CHANGING l_menge v_conv_rc. IF v_conv_rc %LT%GT c_x. l_smenge = l_menge. PERFORM convert_unit USING l_wa_h_mat-matnr 1 l_wa_h_mat-bomuom l_wa_h_mat-bsuom CHANGING l_fact_s. IF l_fact_s = 0. l_fact_s = 1. ENDIF. ENDIF. ENDIF. ELSE. l_matuom = l_wa_h_mat-bsuom. l_stduom = l_wa_h_mat-bsuom. IF l_wa_h_mat-bsuom %LT%GT 'KG'. PERFORM convert_to_kg USING l_wa_h_mat-matnr l_wa_h_mat-bsuom l_wa_h_mat-gewei l_wa_h_mat-ntgew l_amenge CHANGING l_menge v_conv_rc. IF v_conv_rc = 'X'. CLEAR : l_amenge , l_matuom. ELSE. l_amenge = l_menge. l_matuom = 'KG'. PERFORM convert_to_kg USING l_wa_h_mat-matnr l_wa_h_mat-bsuom l_wa_h_mat-gewei l_wa_h_mat-ntgew 1 CHANGING l_fact_a v_conv_rc. IF l_fact_a = 0. l_fact_a = 1. ENDIF. l_fact_a = 1 / l_fact_a. ENDIF. PERFORM convert_to_kg USING l_wa_h_mat-matnr l_wa_h_mat-bsuom l_wa_h_mat-gewei l_wa_h_mat-ntgew l_smenge CHANGING l_menge v_conv_rc. IF v_conv_rc = 'X'. CLEAR : l_smenge , l_stduom. ELSE. l_smenge = l_menge. l_stduom = 'KG'. PERFORM convert_to_kg USING l_wa_h_mat-matnr l_wa_h_mat-bsuom l_wa_h_mat-gewei l_wa_h_mat-ntgew 1 CHANGING l_fact_s v_conv_rc. IF l_fact_s = 0. l_fact_s = 1. ENDIF. l_fact_s = 1 / l_fact_s. ENDIF. ENDIF. ENDIF. * Fiscal or quantity CLEAR : l_sqty , l_aqty, l_svar, l_svarp, l_mvar, l_vstprs. IF rb_quant EQ c_x. IF l_wa_h_mat-bsuom = 'EA' OR l_wa_h_mat-bsuom = 'CS'. * Begin of MOD-002++ * l_smenge = CEIL( l_smenge ). * l_amenge = CEIL( l_amenge ). * End of MOD-002++ IF l_wa_h_mat-peinh %LT%GT 0. l_astprs = l_amenge * l_fact_a * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). l_sstprs = fp_sstprs + l_smenge * l_fact_s * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). ENDIF. ELSE. IF l_wa_h_mat-peinh %LT%GT 0. l_astprs = l_wa_h_mat-actusg * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). l_sstprs = fp_sstprs + l_wa_h_mat-stdusg * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). ENDIF. ENDIF. l_vstprs = l_sstprs - l_astprs. WRITE : l_amenge TO l_aqty UNIT l_matuom NO-GROUPING. WRITE : l_smenge TO l_sqty UNIT l_stduom NO-GROUPING. IF l_matuom IS INITIAL OR l_matuom EQ l_stduom. l_mvar = l_smenge - l_amenge. IF l_smenge %LT%GT 0. l_wa_h_mat-varper = ( l_mvar / l_smenge ) * 100. ELSE. l_wa_h_mat-varper = 0. ENDIF. ENDIF. WRITE : l_mvar TO l_svar UNIT l_stduom NO-GROUPING. WRITE : l_wa_h_mat-varper TO l_svarp NO-GROUPING DECIMALS 2. l_varuom = l_stduom. ELSE. l_matuom = v_waers. l_stduom = v_waers. l_varuom = v_waers. IF l_wa_h_mat-bsuom = 'EA' OR l_wa_h_mat-bsuom = 'CS'. * Begin of MOD-002++ * l_smenge = CEIL( l_smenge ). * l_amenge = CEIL( l_amenge ). * End of MOD-002++ IF l_wa_h_mat-peinh %LT%GT 0. l_astprs = l_amenge * l_fact_a * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). l_sstprs = fp_sstprs + l_smenge * l_fact_s * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). ENDIF. ELSE. IF l_wa_h_mat-peinh %LT%GT 0. l_astprs = l_wa_h_mat-actusg * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). l_sstprs = fp_sstprs + l_wa_h_mat-stdusg * ( l_wa_h_mat-stprs / l_wa_h_mat-peinh ). ENDIF. ENDIF. l_vstprs = l_sstprs - l_astprs. IF l_sstprs %LT%GT 0. l_wa_h_mat-varper = ( l_vstprs / l_sstprs ) * 100. ELSE. l_wa_h_mat-varper = 0. ENDIF. v_prs = l_astprs. WRITE : v_prs TO l_aqty CURRENCY v_waers NO-GROUPING. v_prs = l_sstprs. WRITE : v_prs TO l_sqty CURRENCY v_waers NO-GROUPING. v_prs = l_vstprs. WRITE : v_prs TO l_svar CURRENCY v_waers NO-GROUPING. WRITE : l_wa_h_mat-varper TO l_svarp NO-GROUPING DECIMALS 2. ENDIF. l_wa_h_mat-stdvar = l_mvar. l_wa_h_mat-vstprs = l_vstprs. fp_aqty = l_aqty. fp_matuom = l_matuom. fp_sqty = l_sqty. fp_stduom = l_stduom. fp_svar = l_svar. fp_varuom = l_varuom. fp_svarp = l_svarp. fp_amenge = l_amenge. fp_astprs = l_astprs. fp_smenge = l_smenge. fp_sstprs = l_sstprs. fp_h_mat = l_wa_h_mat. ENDFORM. "do_mat_calc *&---------------------------------------------------------------------* *& Form convert_unit *&---------------------------------------------------------------------* * Convert UoM *----------------------------------------------------------------------* * --%GTfp_matnr Material * --%GTfp_in_qty In Qty * --%GTfp_in_uom In UoM * --%GTfp_out_uom Out UoM * %LT--fp_out_qty Out Qty *----------------------------------------------------------------------* FORM convert_unit USING fp_matnr TYPE matnr fp_in_qty TYPE bstmg fp_in_uom TYPE meins fp_out_uom TYPE meins CHANGING fp_out_qty TYPE bstmg. IF fp_in_uom = fp_out_uom. fp_out_qty = fp_in_qty. EXIT. ENDIF. CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' EXPORTING i_matnr = fp_matnr i_in_me = fp_in_uom i_out_me = fp_out_uom i_menge = fp_in_qty IMPORTING e_menge = fp_out_qty EXCEPTIONS error_in_application = 1 error = 2 OTHERS = 3. IF sy-subrc %LT%GT 0. fp_out_qty = 0. ENDIF. ENDFORM. " convert_unit *Text elements *---------------------------------------------------------- * 001 Summary Total * 003 Detail Report * 004 Summary Report * 005 Phase Report * 006 Fiscal * 007 Quantity * 008 Actual Variant * 009 Planned * 010 Production * 011 Confrimed * 012 Non-Backflush * 013 Backflush * 014 Exclude Zero Production * 015 Include Zero Production * 016 Standard Planned * 017 Zero Loss Planned * 018 Order UOM * 019 KGM * 066 Process Order Report * 067 Process Order Report * 068 Process Order Report * 071 Status *Selection texts *---------------------------------------------------------- * P_KOKRS Controling Area * P_MTART Material Type * P_S1_CHK S1 Check * P_S2_CHK S2 Check * P_STATS1 STATS1 * P_STATS2 STATS2 * P_USAGE Usage * P_WERKS Plant * RB_ACTL Actual * RB_BFLSH Backflush * RB_CONF Confirmation * RB_DETL Detail * RB_EZERO Zero Tolerance Output * RB_FISCL Fiscal * RB_IZERO Zero Tolerance Input * RB_KGM KGM * RB_NFLSH No Backflush * RB_ORDER Order * RB_PHASE Phase * RB_PLAND Planned Order * RB_PROD Production * RB_QUANT Quantity * RB_STDPL Standard Variance * RB_SUMM Summary * RB_ZLOSS Zero Loss * S_ARBPL Resource * S_AUFNR Process Order * S_DATUV Date * S_FEVOR Production scheduler * S_KOSTL Cost Center * S_MATNR Material * S_STEUS Control key *Messages *---------------------------------------------------------- * * Message class: ZDEV *000 *001 Please enter a correct Sales Organization !! *007 *030 *054 Please enter a correct sales document number *063 *064 *072 *Text elements *---------------------------------------------------------- * 001 Summary Total * 003 Detail Report * 004 Summary Report * 005 Phase Report * 006 Fiscal * 007 Quantity * 008 Actual Variant * 009 Planned * 010 Production * 011 Confrimed * 012 Non-Backflush * 013 Backflush * 014 Exclude Zero Production * 015 Include Zero Production * 016 Standard Planned * 017 Zero Loss Planned * 018 Order UOM * 019 KGM * 066 Process Order Report * 067 Process Order Report * 068 Process Order Report * 071 Status *Selection texts *---------------------------------------------------------- * P_KOKRS Controling Area * P_MTART Material Type * P_S1_CHK S1 Check * P_S2_CHK S2 Check * P_STATS1 STATS1 * P_STATS2 STATS2 * P_USAGE Usage * P_WERKS Plant * RB_ACTL Actual * RB_BFLSH Backflush * RB_CONF Confirmation * RB_DETL Detail * RB_EZERO Zero Tolerance Output * RB_FISCL Fiscal * RB_IZERO Zero Tolerance Input * RB_KGM KGM * RB_NFLSH No Backflush * RB_ORDER Order * RB_PHASE Phase * RB_PLAND Planned Order * RB_PROD Production * RB_QUANT Quantity * RB_STDPL Standard Variance * RB_SUMM Summary * RB_ZLOSS Zero Loss * S_ARBPL Resource * S_AUFNR Process Order * S_DATUV Date * S_FEVOR Prduction scheduler * S_KOSTL Cost Center * S_MATNR Material * S_STEUS Control key *Messages *---------------------------------------------------------- * * Message class: ZDEV *000 *001 *007 *030 *054 *063 *064 *072