Sie sind auf Seite 1von 23

*&-----------------------------------------------------------------------&*

*& Company Name : Barrett Hodgson Private Limited &*


*& Program Name : ZAJ_CO_COSTCOM_REPORTS &*
*& Transaction Code : ZCCS &*
*& Module Name : Controlling&Production Planning &*
*& Sub-Module : N/A &*
*& Program Type : Adobe Form Report &*
*& Create Time & Date : 02:30 PM 22/2/2018 &*
*& SAP Release : &*
*&-----------------------------------------------------------------------&*
*& History : &*
*& Request No Author Changed on &*
*& DEVK901677 M.Annas Javeri XXXXXXXXXX &*
*&-----------------------------------------------------------------------&*

REPORT yrq_co_costcom_report.
TABLES: mast, bkpf, mkal, mbew.

DATA : formname TYPE tdsfname VALUE 'ZAJ_CO_COSTCOMPONENT',


fm_name TYPE rs38l_fnam,
fp_docparams TYPE sfpdocparams,
fp_outputparams TYPE sfpoutputparams,
matnr TYPE matnr,
bom TYPE zaj_co_ccr,
wc TYPE zaj_co_wcrr,
n TYPE i VALUE 0,
n1 TYPE i VALUE 0,
material TYPE matnr,
description TYPE maktx,
bmeng TYPE bmeng,
sbmeng TYPE bmeng,
semibatch TYPE bmeng,
finibatch TYPE bmeng,
bmein TYPE bmein,
mnth TYPE string,
year TYPE string,
mtart TYPE mara-mtart,
dater TYPE string,
lv_altbom TYPE mast-stlal,
lv_altbomsemi TYPE mast-stlal.

DATA: BEGIN OF itab_header OCCURS 0.


INCLUDE STRUCTURE zaj_is_header.
DATA: END OF itab_header.

TYPES: BEGIN OF ty_bom,


bom TYPE string,
semi TYPE string,
date TYPE andat,
semidate TYPE andat,
END OF ty_bom.
TYPES: BEGIN OF ty_group,
plnnr TYPE plnnr,
plnnrsemi TYPE plnnr,
END OF ty_group.

DATA: ty_bomdetails TYPE zaj_co_csr.


DATA: ty_bomsemi TYPE zaj_co_csr_semi.
DATA: ty_wcdetails TYPE zaj_co_wcr.
DATA: ty_wcdetailssemi TYPE zaj_co_wcr_semi.

TYPES: BEGIN OF itab,


idnrk TYPE stpo-idnrk,
meins TYPE stpo-meins,
menge TYPE stpo-menge,
posnr TYPE stpo-posnr,
bmeng TYPE stko-bmeng,
bmein TYPE stko-bmein,
datuv TYPE stko-datuv,
valid_to TYPE stko-datuv,
stprs TYPE mbew-stprs,
waers TYPE mseg-waers,
type TYPE mara-mtart,
END OF itab.
TYPES: BEGIN OF itab_semi,
idnrk TYPE stpo-idnrk,
meins TYPE stpo-meins,
menge TYPE stpo-menge,
bmeng TYPE stko-bmeng,
bmein TYPE stko-bmein,
datuv TYPE stko-datuv,
valid_to TYPE stko-datuv,
posnr TYPE stpo-posnr,
stprs TYPE mbew-stprs,
waers TYPE mseg-waers,
type TYPE mara-mtart,
cf TYPE string,
exrate TYPE string,
cfrs TYPE string,
END OF itab_semi.
TYPES: BEGIN OF wc_tab,
vgw02 TYPE plpo-vgw02,
vgw04 TYPE plpo-vgw04,
pvzkn TYPE char8,
arbid TYPE plpo-arbid,
arbpl TYPE crhd-arbpl,
kokrs TYPE crco-kokrs,
kostl TYPE crco-kostl,
lstar TYPE crco-lstar,
objid_lab TYPE cost-objnr,
objid_moh TYPE cost-objnr,
month1 TYPE cost-tog001,
month2 TYPE cost-tog001,
month3 TYPE cost-tog001,
month4 TYPE cost-tog001,
month5 TYPE cost-tog001,
month6 TYPE cost-tog001,
month7 TYPE cost-tog001,
month8 TYPE cost-tog001,
month9 TYPE cost-tog001,
month10 TYPE cost-tog001,
month11 TYPE cost-tog001,
month12 TYPE cost-tog001,
labcost TYPE cost-tog001,
mohcost TYPE cost-tog001,
laboh TYPE cost-tog001,
mohoh TYPE cost-tog001,
END OF wc_tab.
TYPES: BEGIN OF wc_tabsemi,
vgw02 TYPE plpo-vgw02,
vgw04 TYPE plpo-vgw04,
pvzkn TYPE char8,
arbid TYPE plpo-arbid,
arbpl TYPE crhd-arbpl,
kokrs TYPE crco-kokrs,
kostl TYPE crco-kostl,
lstar TYPE crco-lstar,
objid_lab TYPE cost-objnr,
objid_moh TYPE cost-objnr,
month1 TYPE cost-tog001,
month2 TYPE cost-tog001,
month3 TYPE cost-tog001,
month4 TYPE cost-tog001,
month5 TYPE cost-tog001,
month6 TYPE cost-tog001,
month7 TYPE cost-tog001,
month8 TYPE cost-tog001,
month9 TYPE cost-tog001,
month10 TYPE cost-tog001,
month11 TYPE cost-tog001,
month12 TYPE cost-tog001,
labcost TYPE cost-tog001,
mohcost TYPE cost-tog001,
laboh TYPE cost-tog001,
mohoh TYPE cost-tog001,
END OF wc_tabsemi.
DATA: rm_bc TYPE netwr, "Raw Materials
rm_bp TYPE netwr,
rm_pc TYPE netwr,
rm_pp TYPE netwr,
rm_tc TYPE netwr,
rm_tp TYPE netwr,
bi_bc TYPE netwr, "Bulk Imported
bi_bp TYPE netwr,
bi_pc TYPE netwr,
bi_pp TYPE netwr,
bi_tc TYPE netwr,
bi_tp TYPE netwr,
pm_bc TYPE netwr, "Packing Material
pm_bp TYPE netwr,
pm_pc TYPE netwr,
pm_pp TYPE netwr,
pm_tc TYPE netwr,
pm_tp TYPE netwr,
dl_bc TYPE netwr, "Direct Labor
dl_bp TYPE netwr,
dl_pc TYPE netwr,
dl_pp TYPE netwr,
dl_tc TYPE netwr,
dl_tp TYPE netwr,
pc_bc TYPE netwr,
pc_bp TYPE netwr,
pc_pc TYPE netwr,
pc_pp TYPE netwr,
pc_tc TYPE netwr,
pc_tp TYPE netwr,
oh_bc TYPE netwr,
oh_bp TYPE netwr,
oh_pc TYPE netwr,
oh_pp TYPE netwr,
oh_tc TYPE netwr,
oh_tp TYPE netwr,
sc_bc TYPE netwr,
sc_bp TYPE netwr,
sc_pc TYPE netwr,
sc_pp TYPE netwr,
sc_tc TYPE netwr,
sc_tp TYPE netwr,
im_bc TYPE netwr,
im_bp TYPE netwr,
im_pc TYPE netwr,
im_pp TYPE netwr,
im_tc TYPE netwr,
im_tp TYPE netwr,
lm_bc TYPE netwr,
lm_bp TYPE netwr,
lm_pc TYPE netwr,
lm_pp TYPE netwr,
lm_tc TYPE netwr,
lm_tp TYPE netwr,
tm_bc TYPE netwr,
tm_bp TYPE netwr,
tm_pc TYPE netwr,
tm_pp TYPE netwr,
tm_tc TYPE netwr,
tm_tp TYPE netwr,
implcl TYPE char40,
bulkr TYPE netwr.
DATA : wa_header TYPE zaj_is_header,
it_bom TYPE TABLE OF ty_bom WITH HEADER LINE,
it_itab TYPE TABLE OF itab WITH HEADER LINE,
it_itabsemi TYPE TABLE OF itab_semi WITH HEADER LINE,
it_group TYPE TABLE OF ty_group WITH HEADER LINE,
it_wctab TYPE TABLE OF wc_tab WITH HEADER LINE,
it_wctabsemi TYPE TABLE OF wc_tabsemi WITH HEADER LINE.

DATA: wa_bom TYPE ty_bom.

DATA: wa_bomdetails TYPE zaj_co_ccr,


wa_bomsemi TYPE zaj_co_ccr_semi,
wa_wcdetails TYPE zaj_co_wcr_structure,
wa_wcdetailssemi TYPE zaj_co_wcrr_semi_structure,
wa_itab TYPE itab,
wa_wctab TYPE wc_tab,
wa_wctabsemi TYPE wc_tabsemi,
wa_itabsemi TYPE itab_semi,
lv_p_matnr TYPE c LENGTH 10.

DATA : cont_parm TYPE ssfctrlop,


output_opt TYPE ssfcompop.

"Rizwan Qureshi - for PDF Merge Work


TYPES: BEGIN OF gty_result,
index TYPE syindex,
time TYPE syuzeit,
pages TYPE fppagecount,
size TYPE filesize,
content TYPE fpcontent,
END OF gty_result, gty_result_tab TYPE STANDARD TABLE OF gty_result.

DATA: gs_output TYPE fpformoutput,


gt_result TYPE gty_result_tab,
gs_joboutput TYPE sfpjoboutput,
p_conn TYPE rfcdest,
p_bum TYPE fpbumode,
p_assemb TYPE fpboolean,
gs_outputparams TYPE sfpoutputparams,
gs_docparams TYPE sfpdocparams.

*&---------------------------------------------------------------------*
*& Include FP_SPOOL_CONSTANTS
*&---------------------------------------------------------------------*

CONSTANTS:
c_ads_doctype_appl TYPE adsdoctype VALUE 'ADSA', "#EC * application
c_ads_doctype_spool TYPE adsdoctype VALUE 'ADSP', "#EC * spool
c_ads_doctype_mail TYPE adsdoctype VALUE 'ADSM', "#EC * mail
c_ads_doctype_fax TYPE adsdoctype VALUE 'ADSF', "#EC * fax
c_ads_doctype_init TYPE adsdoctype VALUE 'INIT', "#EC * dummy

c_file_ext_pdf TYPE string VALUE '.pdf', "#EC * pdf printer


c_file_ext_pdf_arch TYPE string VALUE '.pda', "#EC * archive, display
c_file_ext_ps TYPE string VALUE '.ps', "#EC *
c_file_ext_pcl TYPE string VALUE '.pcl', "#EC *
c_file_ext_zpl TYPE string VALUE '.zpl', "#EC *
c_file_ext_prn TYPE string VALUE '.prn', "#EC *
c_file_ext_xdc TYPE string VALUE '.xdc', "#EC *
c_file_ext_xft TYPE string VALUE '.xft', "#EC *
c_file_ext_xfd TYPE string VALUE '.xfd', "#EC *
c_file_ext_cfg TYPE string VALUE '.cfg', "#EC *
c_file_ext_con TYPE string VALUE '.con', "#EC * concatenated for
pdf printer
c_file_ext_con_arch TYPE string VALUE '.coa', "#EC * concatenated for
archive, display

c_file_typ_ps TYPE string VALUE 'ps', "#EC *


c_file_typ_pcl TYPE string VALUE 'pcl', "#EC *
c_file_typ_zpl TYPE string VALUE 'zpl', "#EC *
c_file_typ_pdf TYPE string VALUE 'pdf', "#EC *
c_file_typ_ipl TYPE string VALUE 'ipl', "#EC *
c_file_typ_prn TYPE string VALUE 'prn', "#EC *
c_file_typ_dpl TYPE string VALUE 'dpl', "#EC *
c_file_typ_tpcl TYPE string VALUE 'tpcl', "#EC *

c_default_devtype_pcl TYPE tsp0a-patype VALUE '@HPL2', "#EC *


c_default_devtype_ps TYPE tsp0a-patype VALUE '@POST', "#EC *
c_default_devtype_swin TYPE tsp0a-patype VALUE '@SWIN', "#EC *
c_default_devtype_rdif TYPE tsp0a-patype VALUE '@RDIF', "#EC *
c_default_devtype_pres TYPE tsp0a-patype VALUE '@PRES', "#EC *
c_default_devtype_pdf TYPE tsp0a-patype VALUE '@PDF1', "#EC *
c_default_devtype_zpl203 TYPE tsp0a-patype VALUE '@LZPL203', "#EC *
c_default_devtype_zpl300 TYPE tsp0a-patype VALUE '@LZPL300', "#EC *

c_feature_prn_supported TYPE c VALUE 'P', "#EC *


c_ads_supports_possopt_pdf TYPE c VALUE 'O', "#EC *
c_file_ext_from_tsp0b TYPE c VALUE 'E'. "#EC *

SELECTION-SCREEN : BEGIN OF BLOCK a1 WITH FRAME TITLE TEXT-001.


SELECT-OPTIONS : s_matnr FOR mast-matnr OBLIGATORY,
i_budat FOR bkpf-budat .
PARAMETERS: i_pver TYPE mkal-verid OBLIGATORY.
SELECTION-SCREEN : END OF BLOCK a1.
*I_BUDAT-LOW = SY-DATUM.
*I_BUDAT-HIGH = SY-DATUM.
*MNTH = '06'.
***********************************************************************
INITIALIZATION.
p_conn = 'ADS'.
p_bum = 'M'.
p_assemb = abap_true.
MOVE cl_fp=>get_ads_connection( ) TO p_conn.

START-OF-SELECTION.
* Set output parameters and open spool job.
gs_outputparams-nodialog = abap_true.
gs_outputparams-getpdf = 'M'.
gs_outputparams-connection = p_conn.
gs_outputparams-bumode = p_bum.
IF p_assemb = abap_true.
gs_outputparams-assemble = abap_true.
ENDIF.
CALL FUNCTION 'FP_JOB_OPEN'
CHANGING
ie_outputparams = gs_outputparams
EXCEPTIONS
cancel = 1
usage_error = 2
system_error = 3
internal_error = 4
OTHERS = 5.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'


EXPORTING
i_name = formname
IMPORTING
e_funcname = fm_name.
* E_INTERFACE_TYPE =
* EV_FUNCNAME_INBOUND =
fp_docparams-langu = 'E'.
fp_docparams-country = 'US'.
*****************************************************POPULATE DATA
HERE*****************************************************
*====================================HEADER DATA==============================*
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = s_matnr-low
IMPORTING
output = lv_p_matnr.
IF lv_p_matnr(1) EQ '5'.
SELECT a~matnr b~maktx c~andat a~groes d~verid INTO TABLE itab_header
FROM mara AS a
INNER JOIN makt AS b ON ( a~matnr = b~matnr )
INNER JOIN mast AS c ON ( a~matnr = c~matnr )
INNER JOIN mkal AS d ON ( a~matnr = d~matnr AND c~stlal = d~stlal )
WHERE a~matnr IN s_matnr
AND a~mtart = 'ZFRT'
AND d~verid EQ i_pver
ORDER BY a~matnr. "AND C~ANDAT in I_BUDAT .
ELSE.
SELECT a~matnr b~maktx c~andat a~groes d~verid INTO TABLE itab_header
FROM mara AS a
INNER JOIN makt AS b ON ( a~matnr = b~matnr )
INNER JOIN mast AS c ON ( a~matnr = c~matnr )
INNER JOIN mkal AS d ON ( a~matnr = d~matnr AND c~stlal = d~stlal )
WHERE a~matnr IN s_matnr
AND a~mtart = 'ZPS'
AND d~verid EQ i_pver
ORDER BY a~matnr. "AND C~ANDAT in I_BUDAT .
ENDIF.
*==================================END OF HEADER DATA=======================*
***********************************************************************************
*****************************************
BREAK anas_abap.

LOOP AT itab_header INTO wa_header.


"Rizwan Qureshi - Clear Fields for Cal Error for Range issue
CLEAR: rm_bc,rm_bp,rm_pc,rm_pp ,rm_tc ,rm_tp ,bi_bc ,bi_bp ,bi_pc ,bi_pp ,bi_tc
,bi_tp ,pm_bc ,pm_bp ,pm_pc ,pm_pp ,
pm_tc ,pm_tp ,dl_bc ,dl_bp ,dl_pc ,dl_pp ,dl_tc ,dl_tp ,pc_bc ,pc_bp ,pc_pc
,pc_pp ,pc_tc ,pc_tp ,oh_bc ,oh_bp ,oh_pc ,
oh_pp ,oh_tc ,oh_tp ,sc_bc ,sc_bp ,sc_pc ,sc_pp ,sc_tc ,sc_tp ,im_bc ,im_bp
,im_pc ,im_pp ,im_tc ,im_tp ,lm_bc ,lm_bp ,
lm_pc ,lm_pp ,lm_tc ,lm_tp ,tm_bc ,tm_bp ,tm_pc ,tm_pp ,tm_tc ,tm_tp
,implcl,bulkr, n1, n.

mnth = wa_header-dater+4(2).
IF mnth <= 6.
year = wa_header-dater(4) - 1.
ELSE.
year = wa_header-dater(4).
ENDIF.
CONCATENATE 'As of ' ` ` wa_header-dater+6(2) '-' wa_header-dater+4(2) '-'
wa_header-dater(4) INTO dater.
*SELECT SINGLE PLNNR FROM MAPL into IT_GROUP-PLNNR WHERE matnr = WA_HEADER-MATNR
AND PLNTY = '2' AND LOEKZ NE 'X' AND ANDAT in I_BUDAT.
SELECT SINGLE plnnr stlal FROM mkal INTO (it_group-plnnr, lv_altbom) WHERE
matnr = wa_header-matnr AND verid EQ i_pver." AND ADATU in I_BUDAT. "Group &
Production Version
SELECT SINGLE stlnr andat FROM mast INTO (it_bom-bom, it_bom-date) WHERE matnr
= wa_header-matnr AND andat = wa_header-dater AND stlal EQ lv_altbom. "Bom Number
and Alternate Bom
SELECT SINGLE bmeng INTO finibatch FROM stko WHERE stlnr EQ it_bom-bom.
"------------Getting Recipe------------"
SELECT a~idnrk a~meins a~menge a~posnr b~bmein b~bmeng b~datuv b~valid_to FROM
stko AS b INNER JOIN stpo AS a ON ( b~stlnr = a~stlnr )
JOIN stas AS c ON ( a~stlnr = c~stlnr )
AND ( b~stlal = c~stlal ) AND ( b~stlnr = c~stlnr )
AND ( a~stlkn = c~stlkn ) INTO CORRESPONDING FIELDS OF TABLE it_itab WHERE
a~stlnr = it_bom-bom AND a~sanfe = 'X' AND b~stlty EQ 'M' AND a~stlty EQ 'M' AND
c~stlty EQ 'M' AND c~stlal EQ lv_altbom AND b~stlal EQ lv_altbom."AND A~ANDAT =
IT_BOM-DATE
"AND B~ANDAT = "IT_BOM-DATE.
SELECT vgw02 vgw04 pvzkn FROM plpo INTO CORRESPONDING FIELDS OF TABLE it_wctab
WHERE plnnr = it_group-plnnr AND plnty EQ '2' AND phflg EQ 'X' AND loekz NE 'X' AND
andat IN i_budat.
"Rizwan Qureshi - Clear ty_bomdetails for ranges issue
CLEAR ty_bomdetails.
LOOP AT it_itab INTO wa_itab.
SELECT SINGLE mtart FROM mara INTO mtart WHERE matnr = wa_itab-idnrk.
IF mtart = 'ZHLB'.
********************************************** BOM FOR THE SEMI FINISH MATERIAL
**********************************************
* SELECT SINGLE PLNNR FROM MAPL into IT_GROUP-PLNNRSEMI WHERE matnr = wa_itab-
IDNRK AND PLNTY = '2' AND LOEKZ NE 'X' AND ANDAT in I_BUDAT.
SELECT SINGLE plnnr stlal FROM mkal INTO (it_group-plnnrsemi,
lv_altbomsemi) WHERE matnr = wa_itab-idnrk AND verid EQ i_pver." AND ADATU in
I_BUDAT.
SELECT SINGLE stlnr andat FROM mast INTO (it_bom-semi, it_bom-semidate)
WHERE matnr = wa_itab-idnrk AND andat EQ wa_header-dater AND stlal EQ
lv_altbomsemi.
SELECT SINGLE bmeng INTO semibatch FROM stko WHERE stlnr EQ it_bom-semi.
SELECT a~idnrk a~meins a~menge a~posnr b~datuv b~valid_to b~bmein b~bmeng
FROM stko AS b INNER JOIN stpo AS a ON ( b~stlnr = a~stlnr )
JOIN stas AS c ON ( a~stlnr = c~stlnr )
AND ( b~stlal = c~stlal ) AND ( b~stlnr = c~stlnr )
AND ( a~stlkn = c~stlkn ) INTO CORRESPONDING FIELDS OF TABLE it_itabsemi
WHERE a~stlnr = it_bom-semi AND a~sanfe = 'X' AND b~stlty EQ 'M' AND a~stlty EQ 'M'
AND c~stlty EQ 'M' AND c~stlal EQ lv_altbomsemi AND b~stlal EQ lv_altbomsemi.
"AND A~ANDAT = IT_BOM-SemiDate AND B~ANDAT = IT_BOM-SemiDate.
SELECT vgw02 vgw04 pvzkn FROM plpo INTO CORRESPONDING FIELDS OF TABLE
it_wctabsemi WHERE plnnr = it_group-plnnrsemi AND plnty EQ '2' AND phflg EQ 'X'
AND loekz NE 'X' AND andat IN i_budat.
"Rizwan Qureshi - Clear table for ranges
CLEAR ty_bomsemi.
LOOP AT it_itabsemi INTO wa_itabsemi.
SELECT SINGLE mtart FROM mara INTO wa_itabsemi-type WHERE matnr =
wa_itabsemi-idnrk.
n1 = n1 + 1.
wa_bomsemi-posnr = n1.
wa_bomsemi-matnr = wa_header-matnr.
wa_bomsemi-matdes = wa_header-maktx.
wa_bomsemi-idnrk = wa_itabsemi-idnrk.
SELECT SINGLE maktx INTO wa_bomsemi-matkx FROM makt WHERE matnr =
wa_itabsemi-idnrk.
wa_bomsemi-meins = wa_itabsemi-meins.
wa_bomsemi-menge = wa_itabsemi-menge.
wa_bomsemi-bmeng = wa_itabsemi-bmeng.
wa_bomsemi-bmein = wa_itabsemi-bmein.
wa_bomsemi-datuv = wa_itabsemi-datuv.
wa_bomsemi-effdateto = wa_itabsemi-valid_to.
IF wa_itabsemi-valid_to IS INITIAL.
wa_bomsemi-effdateto = '99991231'.
ENDIF.
bmein = wa_itabsemi-bmein.
bmeng = wa_itabsemi-bmeng.
SELECT SINGLE stprs INTO wa_bomsemi-stprs FROM mbew WHERE matnr =
wa_itabsemi-idnrk.
wa_bomsemi-stvalue = wa_itabsemi-menge * wa_bomsemi-stprs.
SELECT SINGLE waers INTO wa_bomsemi-waers FROM mseg WHERE matnr =
wa_itabsemi-idnrk.
SHIFT wa_bomsemi-posnr LEFT DELETING LEADING '0'.
SHIFT wa_bomsemi-posnr RIGHT DELETING TRAILING '0'.
"---------------MM--------------"
SELECT SINGLE waers ucost exrate effdateto lc FROM zlandedcost INTO
(wa_bomsemi-waers, wa_bomsemi-cnfprice, wa_bomsemi-exrate, wa_bomsemi-effdateto,
wa_bomsemi-lc) WHERE matnr = wa_itabsemi-idnrk.
wa_bomsemi-cfrs = wa_bomsemi-cnfprice * wa_bomsemi-exrate.
IF wa_bomsemi-lc IS NOT INITIAL.
TRY .
wa_bomsemi-markup = ( ( wa_bomsemi-stprs - wa_bomsemi-cfrs ) /
wa_bomsemi-cfrs ) * 100.
CATCH cx_root.
wa_bomsemi-markup = 0.
ENDTRY.
ENDIF.
BREAK anas_abap.
*****==========================Checking for Material Type For
Packing/Raw===================*
IF wa_itabsemi-type = 'ZVRP' .
pm_bc = wa_bomsemi-stvalue + pm_bc.
"Packing Material Bulk Cost
IF semibatch IS NOT INITIAL.
pm_bp = pm_bc / finibatch. "Packing
Material Bulk PACK
ENDIF.
* BI_BC = BI_BC + WA_BOMSEMI-CFRS.
* IF SEMIBATCH is not INITIAL.
* BI_BP = BI_BC / FINIBATCH.
* ENDIF.
ELSEIF wa_itabsemi-type = 'ZROH'.
rm_bc = rm_bc + wa_bomsemi-stvalue.
"Raw Material Material Bulk Cost
IF semibatch IS NOT INITIAL.
rm_bp = rm_bc / finibatch.
ENDIF.
ELSEIF wa_itabsemi-type = 'ZHLB'.
bi_bc = bi_bc + wa_bomsemi-cfrs.
IF semibatch IS NOT INITIAL.
bi_bp = bi_bc / finibatch. "Raw
Material Material Bulk Pack
ENDIF.
ENDIF.

SELECT SINGLE labor INTO implcl FROM mara WHERE matnr = wa_bomsemi-matnr.
IF implcl NE 'RMI'.
lm_bc = lm_bc + wa_bomsemi-stvalue.
"Local Material Bulk Cost
IF semibatch IS NOT INITIAL.
lm_bp = lm_bc / finibatch.
"Local Material Bulk Pack
ENDIF.
ELSE.
im_bc = im_bc + wa_bomsemi-cfrs.
"Imported Material Bulk Cost
IF semibatch IS NOT INITIAL.
im_bp = im_bc / finibatch.
"Imported Material Bulk Pack
ENDIF.
ENDIF.
APPEND wa_bomsemi TO ty_bomsemi.
CLEAR wa_bomsemi.
ENDLOOP.
"Raw Material Bulk Pack
****************** &&&&&&&&&&&&&&&&&&&&&&& Work Center For Semi Finish Material
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

"Rizwan Qureshi - Clear ty_wcdetailssemi for range issue


CLEAR ty_wcdetailssemi.
LOOP AT it_wctabsemi INTO wa_wctabsemi.
SHIFT wa_wctabsemi-pvzkn LEFT DELETING LEADING '0'.
wa_wcdetailssemi-labhr = wa_wctabsemi-vgw02. "Labor Hours
wa_wcdetailssemi-machr = wa_wctabsemi-vgw04. "Machine Hours
SELECT SINGLE arbid INTO wa_wcdetailssemi-arbid FROM plpo WHERE zaehl =
wa_wctabsemi-pvzkn AND plnnr = it_group-plnnrsemi AND werks = 'BHP' AND plnty EQ
'2'.
SELECT SINGLE arbpl INTO wa_wcdetailssemi-arbpl FROM crhd WHERE objid =
wa_wcdetailssemi-arbid.
SELECT SINGLE ktext INTO wa_wcdetailssemi-wcarbpl FROM crtx WHERE objid =
wa_wcdetailssemi-arbid.
SELECT SINGLE kostl kokrs INTO (wa_wctabsemi-kostl, wa_wctabsemi-kokrs)
FROM crco WHERE objid = wa_wcdetailssemi-arbid AND lstar EQ 'LAB'.
CONCATENATE 'KL' wa_wctabsemi-kokrs wa_wctabsemi-kostl ' LAB' INTO
wa_wctabsemi-objid_lab.
CONCATENATE 'KL' wa_wctabsemi-kokrs wa_wctabsemi-kostl ' MOH' INTO
wa_wctabsemi-objid_moh.
********** ====================== Month Cost Of Machine ========================
************
CLEAR: wa_wctabsemi-month1, wa_wctabsemi-month2, wa_wctabsemi-month3,
wa_wctabsemi-month4, wa_wctabsemi-month5, wa_wctabsemi-month6,
wa_wctabsemi-month7, wa_wctabsemi-month8, wa_wctabsemi-month9,
wa_wctabsemi-month10, wa_wctabsemi-month11, wa_wctabsemi-month12.
"----------------------------------------------
XX----------------------------------"
SELECT SINGLE tog001 tog002 tog003 tog004 tog005 tog006 tog007 tog008
tog009 tog010 tog011 tog012 INTO
(wa_wctabsemi-month1, wa_wctabsemi-month2, wa_wctabsemi-month3, wa_wctabsemi-
month4, wa_wctabsemi-month5, wa_wctabsemi-month6, wa_wctabsemi-month7,
wa_wctabsemi-month8, wa_wctabsemi-month9, wa_wctabsemi-month10, wa_wctabsemi-
month11, wa_wctabsemi-month12) FROM cost
WHERE gjahr = year AND objnr EQ wa_wctabsemi-objid_moh AND tarkz = '001'.
IF mnth = '07'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month1.
ELSEIF mnth = '08'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month2.
ELSEIF mnth = '09'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month3.
ELSEIF mnth = '10'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month4.
ELSEIF mnth = '11'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month5.
ELSEIF mnth = '12'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month6.
ELSEIF mnth = '01'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month7.
ELSEIF mnth = '02'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month8.
ELSEIF mnth = '03'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month9.
ELSEIF mnth = '04'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month10.
ELSEIF mnth = '05'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month11.
ELSEIF mnth = '06'.
wa_wcdetailssemi-maccost = wa_wctabsemi-month12.
ENDIF.
********* ====================== Month Cost Of LABOR ========================
************
CLEAR: wa_wctabsemi-month1, wa_wctabsemi-month2, wa_wctabsemi-month3,
wa_wctabsemi-month4, wa_wctabsemi-month5, wa_wctabsemi-month6,
wa_wctabsemi-month7, wa_wctabsemi-month8, wa_wctabsemi-month9,
wa_wctabsemi-month10, wa_wctabsemi-month11, wa_wctabsemi-month12.
"----------------------------------------------
XX----------------------------------"
SELECT SINGLE tog001 tog002 tog003 tog004 tog005 tog006 tog007 tog008
tog009 tog010 tog011 tog012 INTO
(wa_wctabsemi-month1, wa_wctabsemi-month2, wa_wctabsemi-month3,
wa_wctabsemi-month4, wa_wctabsemi-month5, wa_wctabsemi-month6, wa_wctabsemi-month7,
wa_wctabsemi-month8, wa_wctabsemi-month9, wa_wctabsemi-month10,
wa_wctabsemi-month11, wa_wctabsemi-month12) FROM cost WHERE gjahr = year AND objnr
EQ wa_wctabsemi-objid_lab AND tarkz = '001'.
IF mnth = '07'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month1.
ELSEIF mnth = '08'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month2.
ELSEIF mnth = '09'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month3.
ELSEIF mnth = '10'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month4.
ELSEIF mnth = '11'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month5.
ELSEIF mnth = '12'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month6.
ELSEIF mnth = '01'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month7.
ELSEIF mnth = '02'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month8.
ELSEIF mnth = '03'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month9.
ELSEIF mnth = '04'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month10.
ELSEIF mnth = '05'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month11.
ELSEIF mnth = '06'.
wa_wcdetailssemi-labcost = wa_wctabsemi-month12.
ENDIF.

wa_wcdetailssemi-laboh = wa_wcdetailssemi-labhr * wa_wcdetailssemi-


labcost.
wa_wcdetailssemi-macoh = wa_wcdetailssemi-labhr * wa_wcdetailssemi-
maccost.
dl_bc = dl_bc + wa_wcdetailssemi-laboh.
"Direct Labor Bulk Cost For Semi Finish Materials
IF semibatch IS NOT INITIAL.
dl_bp = dl_bc / finibatch.
"Direct Labor Bulk Pack For Semi Finish Materials
ENDIF.
oh_bc = oh_bc + wa_wcdetailssemi-macoh.
"Machine OverHead For Bulk Cost For Semi Finish Materials
IF semibatch IS NOT INITIAL.
oh_bp = oh_bc / finibatch.
"Machine OverHead For Bulk Pack For Semi Finish Materials
ENDIF.
APPEND wa_wcdetailssemi TO ty_wcdetailssemi.
CLEAR : wa_wcdetailssemi.
ENDLOOP.

**************************************** Material BOM For Raw Materials


***********************************
ELSE.
SELECT SINGLE mtart FROM mara INTO wa_itab-type WHERE matnr = wa_itab-
idnrk.
n = n + 1.
wa_bomdetails-posnr = n.
wa_bomdetails-matnr = wa_header-matnr.
wa_bomdetails-matdes = wa_header-maktx.
wa_bomdetails-idnrk = wa_itab-idnrk.
SELECT SINGLE maktx INTO wa_bomdetails-matkx FROM makt WHERE matnr =
wa_itab-idnrk.
SELECT SINGLE valid_to FROM mapl INTO wa_bomdetails-effdateto WHERE plnnr =
it_group-plnnrsemi AND plnty = '2'.
wa_bomdetails-meins = wa_itab-meins.
wa_bomdetails-menge = wa_itab-menge.
wa_bomdetails-bmeng = wa_itab-bmeng.
wa_bomdetails-bmein = wa_itab-bmein.
wa_bomdetails-datuv = wa_itab-datuv.
wa_bomdetails-effdateto = wa_itab-valid_to.
IF wa_itab-valid_to IS INITIAL.
wa_bomdetails-effdateto = '99991231'.
ENDIF.
bmein = wa_itab-bmein.
sbmeng = wa_itab-bmeng.
SELECT SINGLE stprs INTO wa_bomdetails-stprs FROM mbew WHERE matnr =
wa_itab-idnrk.
wa_bomdetails-stvalue = wa_itab-menge * wa_bomdetails-stprs.
SELECT SINGLE waers INTO wa_bomdetails-waers FROM mseg WHERE matnr =
wa_itab-idnrk.
SHIFT wa_bomdetails-posnr LEFT DELETING LEADING '0'.
SHIFT wa_bomdetails-posnr RIGHT DELETING TRAILING '0'.
"---------------MM--------------"
SELECT SINGLE waers cnfprice exrate lc INTO (wa_bomdetails-waers,
wa_bomdetails-cnfprice, wa_bomdetails-exrate,wa_bomdetails-lc) FROM zlandedcost
WHERE matnr = wa_itab-idnrk.
wa_bomdetails-cfrs = wa_bomdetails-cnfprice * wa_bomdetails-exrate.
IF wa_bomdetails-lc IS NOT INITIAL AND wa_bomdetails-cfrs IS NOT INITIAL.
* WA_BOMDETAILS-MARKUP = ( WA_BOMDETAILS-CFRS / WA_BOMDETAILS-LC ) * 100.
wa_bomdetails-markup = ( ( wa_bomdetails-stprs - wa_bomdetails-cfrs ) /
wa_bomdetails-cfrs ) * 100.
ENDIF.
BREAK anas_abap.
*****==========================Checking for Material Type For
Packing/Raw===================*
IF wa_itab-type = 'ZVRP' .
pm_pc = wa_bomdetails-stvalue + pm_pc.
"Packing Material Bulk Cost
IF finibatch IS NOT INITIAL.
pm_pp = pm_pc / finibatch. "Packing
Material Bulk PACK
ENDIF.
* BI_PC = BI_PC + WA_BOMDETAILS-CFRS.
* if FINIBATCH is not INITIAL.
* BI_PP = BI_PC / FINIBATCH.
* endif.
ELSEIF wa_itab-type = 'ZROH'.
rm_pc = rm_pc + wa_bomdetails-stvalue.
IF finibatch IS NOT INITIAL.
rm_pp = rm_pc / finibatch. "Raw
Material Material Bulk Cost
ENDIF.
ELSEIF wa_itab-type = 'ZHLB'.
bi_pc = bi_pc + wa_bomdetails-cfrs.
IF finibatch IS NOT INITIAL.
bi_pp = bi_pc / finibatch.
ENDIF.
ENDIF.
* IF WA_BOMSEMI-CFRS IS INITIAL.
lm_pc = lm_pc + wa_bomdetails-stvalue.
"Local Material Bulk Cost
IF finibatch IS NOT INITIAL.
lm_pp = lm_pc / finibatch. "Local
Material Bulk Pack
ENDIF.
* ELSE.
* IM_PC = IM_PC + WA_BOMDETAILS-CFRS.
"Imported Material Bulk Cost
* IM_PP = IM_PC / WA_BOMDETAILS-BMENG.
"Imported Material Bulk Pack
* ENDIF.

ENDIF.

IF wa_itab-type = 'ZVRP' .
pm_bc = pm_bc + wa_bomdetails-stvalue.
"Packing Material Bulk Cost "Raw Material Material
Bulk Cost
ENDIF.

IF wa_bomdetails IS NOT INITIAL.


APPEND wa_bomdetails TO ty_bomdetails.
CLEAR wa_bomdetails.
ENDIF.

ENDLOOP.
"Direct Labor Bulk Cost

********* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Work Center Data


&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ********************
"Rizwan Qureshi - Clear ty_wcdetails for ranges issue
CLEAR ty_wcdetails.
LOOP AT it_wctab INTO wa_wctab.
SHIFT wa_wctab-pvzkn LEFT DELETING LEADING '0'.
wa_wcdetails-labhr = wa_wctab-vgw02. "Labor Hours
wa_wcdetails-machr = wa_wctab-vgw04. "Machine Hours
SELECT SINGLE arbid INTO wa_wcdetails-arbid FROM plpo WHERE zaehl = wa_wctab-
pvzkn AND plnnr = it_group-plnnr AND plnty EQ '2'.
SELECT SINGLE arbpl INTO wa_wcdetails-arbpl FROM crhd WHERE objid =
wa_wcdetails-arbid.
SELECT SINGLE ktext INTO wa_wcdetails-wcarbpl FROM crtx WHERE objid =
wa_wcdetails-arbid.
SELECT SINGLE kostl kokrs INTO (wa_wctab-kostl, wa_wctab-kokrs) FROM crco
WHERE objid = wa_wcdetails-arbid AND lstar EQ 'LAB'.
CONCATENATE 'KL' wa_wctab-kokrs wa_wctab-kostl ' LAB' INTO wa_wctab-
objid_lab.
CONCATENATE 'KL' wa_wctab-kokrs wa_wctab-kostl ' MOH' INTO wa_wctab-
objid_moh.
********* ====================== Month Cost Of LABOR ========================
************
CLEAR: wa_wctab-month1, wa_wctab-month2, wa_wctab-month3, wa_wctab-month4,
wa_wctab-month5, wa_wctab-month6,
wa_wctab-month7, wa_wctab-month8, wa_wctab-month9, wa_wctab-month10,
wa_wctab-month11, wa_wctab-month12.
SELECT SINGLE tog001 tog002 tog003 tog004 tog005 tog006 tog007 tog008 tog009
tog010 tog011 tog012 INTO
(wa_wctab-month1, wa_wctab-month2, wa_wctab-month3, wa_wctab-month4, wa_wctab-
month5, wa_wctab-month6, wa_wctab-month7,
wa_wctab-month8, wa_wctab-month9, wa_wctab-month10, wa_wctab-month11,
wa_wctab-month12) FROM cost WHERE gjahr = year AND objnr EQ wa_wctab-objid_lab AND
tarkz = '001'.
IF mnth = '07'.
wa_wcdetails-labcost = wa_wctab-month1.
ELSEIF mnth = '08'.
wa_wcdetails-labcost = wa_wctab-month2.
ELSEIF mnth = '09'.
wa_wcdetails-labcost = wa_wctab-month3.
ELSEIF mnth = '10'.
wa_wcdetails-labcost = wa_wctab-month4.
ELSEIF mnth = '11'.
wa_wcdetails-labcost = wa_wctab-month5.
ELSEIF mnth = '12'.
wa_wcdetails-labcost = wa_wctab-month6.
ELSEIF mnth = '01'.
wa_wcdetails-labcost = wa_wctab-month7.
ELSEIF mnth = '02'.
wa_wcdetails-labcost = wa_wctab-month8.
ELSEIF mnth = '03'.
wa_wcdetails-labcost = wa_wctab-month9.
ELSEIF mnth = '04'.
wa_wcdetails-labcost = wa_wctab-month10.
ELSEIF mnth = '05'.
wa_wcdetails-labcost = wa_wctab-month11.
ELSEIF mnth = '06'.
wa_wcdetails-labcost = wa_wctab-month12.
ENDIF.
********** ====================== Month Cost Of Machine ========================
************
CLEAR: wa_wctab-month1, wa_wctab-month2, wa_wctab-month3, wa_wctab-month4,
wa_wctab-month5, wa_wctab-month6,
wa_wctab-month7, wa_wctab-month8, wa_wctab-month9, wa_wctab-month10,
wa_wctab-month11, wa_wctab-month12.
"-------------------------------------XX----------------------------"
SELECT SINGLE tog001 tog002 tog003 tog004 tog005 tog006 tog007 tog008 tog009
tog010 tog011 tog012 INTO
(wa_wctab-month1, wa_wctab-month2, wa_wctab-month3, wa_wctab-month4, wa_wctab-
month5, wa_wctab-month6, wa_wctab-month7,
wa_wctab-month8, wa_wctab-month9, wa_wctab-month10, wa_wctab-month11,
wa_wctab-month12) FROM cost
WHERE gjahr = year AND objnr EQ wa_wctab-objid_moh AND tarkz = '001'.
IF mnth = '07'.
wa_wcdetails-maccost = wa_wctab-month1.
ELSEIF mnth = '08'.
wa_wcdetails-maccost = wa_wctab-month2.
ELSEIF mnth = '09'.
wa_wcdetails-maccost = wa_wctab-month3.
ELSEIF mnth = '10'.
wa_wcdetails-maccost = wa_wctab-month4.
ELSEIF mnth = '11'.
wa_wcdetails-maccost = wa_wctab-month5.
ELSEIF mnth = '12'.
wa_wcdetails-maccost = wa_wctab-month6.
ELSEIF mnth = '01'.
wa_wcdetails-maccost = wa_wctab-month7.
ELSEIF mnth = '02'.
wa_wcdetails-maccost = wa_wctab-month8.
ELSEIF mnth = '03'.
wa_wcdetails-maccost = wa_wctab-month9.
ELSEIF mnth = '04'.
wa_wcdetails-maccost = wa_wctab-month10.
ELSEIF mnth = '05'.
wa_wcdetails-maccost = wa_wctab-month11.
ELSEIF mnth = '06'.
wa_wcdetails-maccost = wa_wctab-month12.
ENDIF.
wa_wcdetails-laboh = wa_wcdetails-labhr * wa_wcdetails-labcost.
wa_wcdetails-macoh = wa_wcdetails-labhr * wa_wcdetails-maccost.

dl_pc = dl_pc + wa_wcdetails-laboh. "Direct Labor Packing Cost For Raw


Materials
IF finibatch IS NOT INITIAL.
dl_pp = dl_pc / finibatch. "Direct Labor Packing Pack For Raw
Materials
ENDIF.
oh_pc = oh_pc + wa_wcdetails-macoh. "OverHead Prime Cost For Raw
Materials
IF finibatch IS NOT INITIAL.
oh_pp = oh_pc / finibatch. "OverHead Prime Pack For Raw Materials
ENDIF.
APPEND wa_wcdetails TO ty_wcdetails.
CLEAR: wa_wcdetails.
ENDLOOP.
SHIFT wa_header-matnr LEFT DELETING LEADING '0'.
rm_tc = rm_bc + rm_pc. "Raw Material Total Cost.
rm_tp = rm_bp + rm_pp. "Raw Material Total Pack
bi_tc = bi_bc + bi_pc. "Bulk Imported Total Cost
bi_tp = bi_bp + bi_tp. "Bulk Imported Total Pack
pm_tc = pm_bc + pm_pc. "Packing Material Total Cost
pm_tp = pm_bp + pm_pp. "Packing Material Total Pack.
dl_tc = dl_bc + dl_pc. "Direct Labor Total Cost.
dl_tp = dl_bp + dl_pp. "Direct Labor Total Pack
pc_bc = rm_bc + bi_bc + pm_bc + dl_bc. "Prime Cost Bulk Cost
pc_bp = rm_bp + bi_bp + pm_bp + dl_bp. "Prime Cost Bulk Pack
pc_pc = rm_pc + bi_pc + pm_pc + dl_pc. "Prime Cost Packing Cost
pc_pp = rm_pp + bi_pp + pm_pp + dl_pp. "Prime Cost Packing Pack
pc_tc = rm_tc + bi_tc + pm_tc + dl_tc. "Prime Cost Totak Cost
pc_tp = rm_tp + bi_tp + pm_tp + dl_tp. "Prime Cost Total Pack
oh_tc = oh_bc + oh_pc. "OverHead Total Cost
oh_tp = oh_bp + oh_pp. "OverHead Total Pack.
sc_bc = pc_bc + oh_bc. "Standard Cost Bulk Cost
sc_bp = pc_bp + oh_bp. "Standard Cost Bulk Pack
sc_pc = pc_pc + oh_pc. "Standard Packing Cost
sc_pp = pc_pp + oh_pp. "Standard Packing Pack
sc_tc = pc_tc + oh_tc. "Standard Total Cost
*SC_TP = PC_PP + OH_PP. "Standard Total Pack
IF finibatch IS NOT INITIAL.
sc_tp = sc_tc / finibatch.
ENDIF.
im_tc = im_bc + im_pc. "Imported Material Total Cost
im_tp = im_bp + im_pp. "Imported Material Total Pack
lm_tc = lm_bc + lm_pc. "Local Material Total Cost
lm_tp = lm_bp + lm_pp. "Local Material Total Pack
tm_bc = im_pc + lm_pc. "Total Material Cost Bulk Cost
tm_bp = im_bp + lm_bp. "Total Material Cost Bulk Pack
tm_pc = im_pc + lm_pc. "Total Material Cost Packing Cost
tm_pp = im_pp + lm_pp. "Total Material Cost Packing Pack
tm_tc = im_tc + lm_tc. "Total Material Cost Total Cost
tm_tp = im_tp + lm_tp. "Total Material Cost Total pack
IF semibatch IS NOT INITIAL.
bulkr = sc_bc / semibatch.
ENDIF.
DELETE ADJACENT DUPLICATES FROM ty_bomdetails.
DELETE ADJACENT DUPLICATES FROM ty_bomsemi.

"Rizwan Qureshi - New Logic If ty_bomsemi is Initial - Start

DATA: wa_it_itab LIKE LINE OF it_itab,


wa_ty_bomsemi LIKE LINE OF ty_bomsemi.
SORT it_itab BY idnrk.
CLEAR: wa_it_itab, wa_ty_bomsemi.
READ TABLE it_itab INTO wa_it_itab INDEX 1.
"CLEAR: ty_bomsemi, ty_bomsemi[].
IF lines( ty_bomsemi ) < 1.
SELECT stpo~idnrk AS idnrk, stpo~meins AS meins, stpo~menge AS menge,
mkal~adatu AS datuv,
mkal~bdatu AS effdateto
INTO CORRESPONDING FIELDS OF TABLE @ty_bomsemi
FROM mkal
INNER JOIN mast ON mast~matnr = mkal~matnr AND mkal~werks = mast~werks AND
mkal~stlan = mast~stlan AND mkal~stlal = mast~stlal
INNER JOIN stko ON stko~stlnr = mast~stlnr AND stko~stlal = mast~stlal AND
stko~wrkan = mast~werks
INNER JOIN stpo ON stpo~stlty = stko~stlty AND stpo~stlnr = stko~stlnr
WHERE mkal~matnr = @wa_it_itab-idnrk AND mkal~werks = 'BHP' AND mkal~verid =
@i_pver.
ENDIF.

SORT ty_bomsemi BY idnrk.


CLEAR: pm_bc.
LOOP AT ty_bomsemi INTO wa_ty_bomsemi.
DATA: wa_mbew TYPE mbew.
CLEAR: wa_mbew.
wa_ty_bomsemi-posnr = sy-tabix.

SELECT SINGLE maktx FROM makt INTO wa_ty_bomsemi-matkx WHERE matnr =


wa_ty_bomsemi-idnrk.
SELECT * FROM mbew WHERE matnr = @wa_ty_bomsemi-idnrk AND vmvpr = 'S' INTO
@wa_mbew UP TO 1 ROWS.
ENDSELECT.

SELECT SINGLE stprs waers INTO ( wa_ty_bomsemi-stprs, wa_ty_bomsemi-waers )


FROM ckmlcr
WHERE kalnr = wa_mbew-kaln1 AND vprsv = wa_mbew-vmvpr
AND bdatj = wa_mbew-lfgja AND poper = wa_mbew-lfmon.

wa_ty_bomsemi-stvalue = wa_ty_bomsemi-menge * wa_ty_bomsemi-stprs.


SELECT SINGLE cnfprice exrate FROM zlandedcost INTO ( wa_ty_bomsemi-cnfprice,
wa_ty_bomsemi-exrate )
WHERE matnr = wa_ty_bomsemi-idnrk.

wa_ty_bomsemi-cfrs = wa_ty_bomsemi-cnfprice * wa_ty_bomsemi-exrate.

IF wa_ty_bomsemi-cfrs > 0.
wa_ty_bomsemi-markup = ( wa_ty_bomsemi-stprs - wa_ty_bomsemi-cfrs ) /
wa_ty_bomsemi-cfrs * 100.
ENDIF.

MODIFY ty_bomsemi FROM wa_ty_bomsemi.

DATA: lv_mtart LIKE mara-mtart.


CLEAR: lv_mtart.

SELECT SINGLE mtart FROM mara INTO lv_mtart WHERE matnr = wa_ty_bomsemi-
idnrk.

IF lv_mtart = 'ZVRP' .
pm_pc = wa_ty_bomsemi-stvalue + pm_bc.
"Packing Material Bulk Cost
ELSEIF lv_mtart = 'ZROH'.
rm_bc = rm_bc + wa_ty_bomsemi-stvalue.
"Raw Material Material Bulk Cost
ENDIF.

"Rizwan Qureshi - For missing component


rm_bp = rm_bc / finibatch.
pm_bp = pm_bc / finibatch.
rm_tp = rm_bp + rm_pp. "Raw Material Total Pack
pc_tp = rm_tp + bi_tp + pm_tp + dl_tp.
sc_tp = pc_tp + oh_tp.

IF NOT finibatch IS INITIAL.


"Bulk Per Pack
rm_bp = rm_bc / finibatch.
bi_bp = bi_bc / finibatch.
pm_bp = pm_bc / finibatch.
dl_bp = dl_bc / finibatch.
pc_bp = rm_bp + bi_bp + pm_bp + dl_bp.
oh_bp = oh_bc / finibatch.
sc_bp = pc_bp + oh_bp.
"Packing Per Pack
rm_pp = rm_pc / finibatch.
bi_pp = bi_pc / finibatch.
pm_pp = pm_pc / finibatch.
dl_pp = dl_pc / finibatch.
pc_pp = rm_pp + bi_pp + pm_pp + dl_pp.
oh_pp = oh_pc / finibatch.
sc_pp = pc_pp + oh_pp.

"Total Cost
rm_tc = rm_bc + rm_pc.
bi_tc = bi_bc + bi_pc.
pm_tc = pm_bc + pm_pc.
dl_tc = dl_bc + dl_pc.
pc_tc = rm_tc + bi_tc + pm_tc + dl_tc.
oh_tc = oh_bc + oh_pc.
sc_tc = pc_tc + oh_tc.

"Total Per Pack


rm_tp = rm_tc / finibatch.
bi_tp = bi_tc / finibatch.
pm_tp = pm_tc / finibatch.
dl_tp = dl_tc / finibatch.
pc_tp = rm_tp + bi_tp + pm_tp + dl_tp.
oh_tp = oh_tc / finibatch.
sc_tp = pc_tp + oh_tp.

ENDIF.

SELECT SINGLE stprs FROM mbew INTO bulkr WHERE matnr = wa_it_itab-idnrk.

ENDLOOP.
"Rizwan Qureshi - New Logic If ty_bomsemi is Initual - End

* Change language and country for complex bundling.


IF p_bum <> 'X' AND gs_outputparams-assemble <> 'S'
AND sy-tabix MOD 2 = 1.
gs_docparams-langu = 'E'.
gs_docparams-country = 'US'.
ELSE.
gs_docparams-langu = 'D'.
gs_docparams-country = 'DE'.
ENDIF.

CALL FUNCTION fm_name


EXPORTING
/1bcdwb/docparams = fp_docparams
dater = dater
bom = ty_bomdetails
wc = ty_wcdetails
bomsemi = ty_bomsemi
wcsemi = ty_wcdetailssemi
material = wa_header-matnr
description = wa_header-maktx
packsize = wa_header-groes
bmein = bmein
bmeng = finibatch
semi = semibatch
bulkr = bulkr
rm_bc = rm_bc
rm_bp = rm_bp
rm_pc = rm_pc
rm_pp = rm_pp
rm_tc = rm_tc
rm_tp = rm_tp
bi_bc = bi_bc "Bulk Imported
bi_bp = bi_bp
bi_pc = bi_pc
bi_pp = bi_pp
bi_tc = bi_tc
bi_tp = bi_tp
pm_bc = pm_bc "Packing Material
pm_bp = pm_bp
pm_pc = pm_pc
pm_pp = pm_pp
pm_tc = pm_tc
pm_tp = pm_tp
dl_bc = dl_bc
dl_bp = dl_bp
dl_pc = dl_pc
dl_pp = dl_pp
dl_tc = dl_tc
dl_tp = dl_tp
pc_bc = pc_bc
pc_bp = pc_bp
pc_pc = pc_pc
pc_pp = pc_pp
pc_tc = pc_tc
pc_tp = pc_tp
oh_bc = oh_bc
oh_bp = oh_bp
oh_pc = oh_pc
oh_pp = oh_pp
oh_tc = oh_tc
oh_tp = oh_tp
sc_bc = sc_bc
sc_bp = sc_bp
sc_pc = sc_pc
sc_pp = sc_pp
sc_tc = sc_tc
sc_tp = sc_tp
im_bc = im_bc
im_bp = im_bp
im_pc = im_pc
im_pp = im_pp
im_tc = im_tc
im_tp = im_tp
lm_bc = lm_bc
lm_bp = lm_bp
lm_pc = lm_pc
lm_pp = lm_pp
lm_tc = lm_tc
lm_tp = lm_tp
tm_bc = tm_bc
tm_bp = tm_bp
tm_pc = tm_pc
tm_pp = tm_pp
tm_tc = tm_tc
tm_tp = tm_tp
IMPORTING
/1bcdwb/formoutput = gs_output
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3.
IF sy-subrc <> 0.
* <error handling>
ENDIF.
IF sy-subrc IS INITIAL.
PERFORM retrieve_pdf_table USING sy-tabix gs_output-pages
CHANGING gt_result.
ENDIF.
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Populating Calculation Here Data
Here&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*
CLEAR : ty_bomdetails, wa_bomdetails, ty_wcdetails, wa_wcdetails, it_bom,
it_group, it_itab, it_wctab, wa_bomsemi, ty_bomsemi, it_itabsemi.
ENDLOOP.
CLEAR: wa_header.

IF itab_header[] IS INITIAL.
MESSAGE 'Invalid Product Code' TYPE 'E'.
ENDIF.

CALL FUNCTION 'FP_JOB_CLOSE'


IMPORTING
e_result = gs_joboutput
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
* <error handling>
ENDIF.
"Rizwan Qureshi - for PDF Merge Work
IF sy-subrc IS INITIAL.
PERFORM retrieve_pdf_table USING sy-tabix
gs_joboutput-remaining_pages
CHANGING gt_result.
ENDIF.

*Rizwan Qureshi - for PDF Merge Work (Display the full list of PDF documents.)
PERFORM display_result_table USING gt_result.

*&---------------------------------------------------------------------*
*& Form retrieve_pdf_table
*&---------------------------------------------------------------------*
* Retrieve table with PDF documents from forms-processing
* run-time environment.
*----------------------------------------------------------------------*
* -->P_INDEX index from the loop over the customer table
* -->P_PAGES total page count of a bundle
* <--P_PDF_TAB table to which the PDF documents are appended
*----------------------------------------------------------------------*
FORM retrieve_pdf_table USING VALUE(p_index) TYPE syindex
VALUE(p_pages) TYPE fppagecount
CHANGING p_pdf_tab TYPE gty_result_tab.
DATA lt_pdf_table TYPE tfpcontent.
DATA ls_result TYPE gty_result.

CALL FUNCTION 'FP_GET_PDF_TABLE'


IMPORTING
e_pdf_table = lt_pdf_table.

LOOP AT lt_pdf_table INTO ls_result-content.


MOVE p_index TO ls_result-index.
GET TIME.
MOVE sy-uzeit TO ls_result-time.
ls_result-size = xstrlen( ls_result-content ).
IF sy-tabix = lines( lt_pdf_table ).
ls_result-pages = p_pages.
ENDIF.
INSERT ls_result INTO TABLE p_pdf_tab.
ENDLOOP.
ENDFORM. "retrieve_pdf_table

*&---------------------------------------------------------------------*
*& Form display_result_table
*&---------------------------------------------------------------------*
FORM display_result_table USING p_pdf_tab TYPE gty_result_tab.
DATA ls_result TYPE gty_result.
DATA lv_file TYPE fpfile.
DATA lv_sep TYPE c.
DATA lt_data TYPE tsfixml.
DATA lv_rc TYPE sysubrc.

READ TABLE gt_result INDEX 1 INTO ls_result.

CALL METHOD cl_gui_frontend_services=>get_temp_directory


CHANGING
temp_dir = lv_file
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.

CALL METHOD cl_gui_frontend_services=>get_file_separator


CHANGING
file_separator = lv_sep
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.
CONCATENATE lv_file lv_sep sy-repid c_file_ext_pdf INTO lv_file.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = ls_result-content
TABLES
binary_tab = lt_data.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
bin_filesize = xstrlen( ls_result-content )
filename = lv_file
filetype = 'BIN'
CHANGING
data_tab = lt_data
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.

CALL METHOD cl_gui_frontend_services=>execute


EXPORTING
document = lv_file
synchronous = 'X'
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'I' NUMBER '256'.
ENDIF.

CALL METHOD cl_gui_frontend_services=>file_delete


EXPORTING
filename = lv_file
CHANGING
rc = lv_rc
EXCEPTIONS
file_delete_failed = 1
cntl_error = 2
error_no_gui = 3
file_not_found = 4
access_denied = 5
unknown_error = 6
not_supported_by_gui = 7
wrong_parameter = 8
OTHERS = 9.
IF sy-subrc IS NOT INITIAL.
MESSAGE ID 'ED' TYPE 'E' NUMBER '256'.
ENDIF.
ENDFORM. "display_result_table

*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*

Das könnte Ihnen auch gefallen