Professional Documents
Culture Documents
Butter Block Pricing
Butter Block Pricing
Butter Block Pricing
*{ INSERT ECDK900862 1
************************************************************************
* Object-Id : E.OTC.230.004
* Program Title : Routine For Block/Butter Adjustment
* Author : Tarang Chauhan
* Functional Owner : Bindu Korubilli / Vamsh Reddy
* Date : 10/27/2014
* SAP Change Request : ECDK900862
*----------------------------------------------------------------------*
* Description: : This User Exit is used to calculate condition
* Value and condition amount For Condition type
* ZCAB
* Type: : Pricing Routine (User-Exit)
* Run Frequency: : During SD Price calculation
* Development Class: : ZSD
* Requirement Ref. : E.OTC.230.04
*&---------------------------------------------------------------------*
* INPUTS
*
* Variants : None
* Input file name : N/A
* Other :
*----------------------------------------------------------------------*
* OUTPUTS
*
* Files : N/A
* Errors : Standard error messages
* Other :
*----------------------------------------------------------------------*
* MODIFICATION HISTORY
*
* SAP Change Request #: XXXXXXXXXX
* Change Driver : Business Owner
* Author : Programmer
* Modification Date : MM/DD/YYYY
* Description :
************************************************************************
DATA : lv_not_found TYPE char1,
lv_avg_price TYPE kbetr,
lv_price TYPE kbetr,
lv_uom TYPE cpet_quotuom,
lv_waers TYPE waers.
##LITERAL
i_menge = '1.000'.
" If sales order document category - VA01/VA02
IF komk-vbtyp = 'C'.
" Check entry is existed in ZTSD_CUSTMAT for combination of Customer,
" material and condition type 'ZCAB'
CLEAR : lt_custmat[] , ls_custmat.
SELECT * FROM ztsd_custmat INTO TABLE lt_custmat
WHERE kunnr = komk-kunnr
AND matnr = komp-matnr
AND kschl = 'ZCAB'.
IF sy-subrc = 0.
" If selected as Backward week means have to consider previous week
IF ( komk-pltyp = 'ZR' OR komk-pltyp = 'ZS')
AND komk-konda = 'ZM' AND komk-kdkg3 = 'ZX'.
" Calulate Average Price of block/butter adjustment as per previous week dates
from CPED_PRICEQUOT Table
PERFORM calc_price_previous_week IN PROGRAM zsd_e_block_butter_adjustment
USING komp
komk
CHANGING lv_price
lv_uom
lv_waers
lv_not_found.
" If LV_NOT_FOUND is not marked , means data are available for every date.
" Update average price
IF lv_not_found IS INITIAL.
IF komp-vrkme = lv_uom." If Unit Of measure is same as Sales Item
" Update Condition Table
READ TABLE xkomv WITH KEY kschl = 'ZCAB'.
IF sy-subrc = 0.
xkomv-kbetr = lv_price * xkomv-kpein.
xkomv-kbetr = xkomv-kbetr * 100.
xkomv-waers = lv_waers.
xkomv-kmein = komp-vrkme.
xkomv-kawrt = komp-mgame.
xkwert = xkomv-kbetr * komp-mgame / 100.
xkwert = xkwert / 10.
MODIFY xkomv INDEX sy-tabix.
ENDIF.
" If UOM is not same , than do Unit conversion
ELSE.
CLEAR : e_menge, lv_val, lv_val1, lv_val2.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = komp-matnr
I_IN_ME = komp-vrkme
I_OUT_ME = lv_uom
I_MENGE = i_menge
IMPORTING
E_MENGE = e_menge
EXCEPTIONS ##FM_SUBRC_OK
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
" Calulate Average Price of block/butter adjustment as per Current week dates from
CPED_PRICEQUOT Table
PERFORM calc_price_current_week IN PROGRAM zsd_e_block_butter_adjustment
USING komp
komk
CHANGING lv_price
lv_uom
lv_waers
lv_not_found.
" If LV_NOT_FOUND is not marked , means data are available for every date.
" Update average price
IF lv_not_found IS INITIAL.
IF komp-vrkme = lv_uom." If Unit Of measure is same as Sales Item
" Update Condition Table
READ TABLE xkomv WITH KEY kschl = 'ZCAB'.
IF sy-subrc = 0.
xkomv-kbetr = lv_price * xkomv-kpein.
xkomv-kbetr = xkomv-kbetr * 100.
xkomv-waers = lv_waers.
xkomv-kmein = komp-vrkme.
xkomv-kawrt = komp-mgame.
xkwert = xkomv-kbetr * komp-mgame / 100.
xkwert = xkwert / 10.
MODIFY xkomv INDEX sy-tabix.
ENDIF.
" If UOM is not same , than do Unit conversion
ELSE.
CLEAR : e_menge, lv_val, lv_val1, lv_val2.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = komp-matnr
I_IN_ME = komp-vrkme
I_OUT_ME = lv_uom
I_MENGE = i_menge
IMPORTING
E_MENGE = e_menge
EXCEPTIONS ##FM_SUBRC_OK
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
" If LV_NOT_FOUND is not marked , means data are available for every date.
" Update average price
IF lv_not_found IS INITIAL.
IF komp-vrkme = lv_uom." If Unit Of measure is same as Sales Item
" Update Condition Table
READ TABLE xkomv WITH KEY kschl = 'ZCAB'.
IF sy-subrc = 0.
xkomv-kbetr = lv_price * xkomv-kpein.
xkomv-kbetr = xkomv-kbetr * 100.
xkomv-waers = lv_waers.
xkomv-kmein = komp-vrkme.
xkomv-kawrt = komp-NTGEW.
xkwert = xkomv-kbetr * komp-NTGEW .
xkwert = xkwert / 1000.
MODIFY xkomv INDEX sy-tabix.
ENDIF.
" If UOM is not same , than do Unit conversion
ELSE.
CLEAR : e_menge, lv_val, lv_val1, lv_val2.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = komp-matnr
I_IN_ME = komp-vrkme
I_OUT_ME = lv_uom
I_MENGE = i_menge
IMPORTING
E_MENGE = e_menge
EXCEPTIONS ##FM_SUBRC_OK
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
ENDIF.
" If selected as Forward week means have to consider Current week
ELSEIF ( komk-pltyp = 'ZR' OR komk-pltyp = 'ZS')
AND komk-konda = 'ZM' AND komk-kdkg3 = 'ZY'.
IF komk-kdkg1 = 'Z2' OR komk-kdkg1 = 'Z3'. " If Date Of Make OR Date Of Ship
" Calulate Average Price of block/butter adjustment as per current week dates
from CPED_PRICEQUOT Table
PERFORM calc_price_inv_current_week IN PROGRAM zsd_e_block_butter_adjustment
USING komp
komk
CHANGING lv_price
lv_uom
lv_waers
lv_not_found.
" If LV_NOT_FOUND is not marked , means data are available for every date.
" Update average price
IF lv_not_found IS INITIAL.
IF komp-vrkme = lv_uom." If Unit Of measure is same as Sales Item
" Update Condition Table
READ TABLE xkomv WITH KEY kschl = 'ZCAB'.
IF sy-subrc = 0.
xkomv-kbetr = lv_price * xkomv-kpein.
xkomv-kbetr = xkomv-kbetr * 100.
xkomv-waers = lv_waers.
xkomv-kmein = komp-vrkme.
xkomv-kawrt = komp-NTGEW.
xkwert = xkomv-kbetr * komp-NTGEW .
xkwert = xkwert / 1000.
MODIFY xkomv INDEX sy-tabix.
ENDIF.
" If UOM is not same , than do Unit conversion
ELSE.
CLEAR : e_menge, lv_val, lv_val1, lv_val2.
CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT'
EXPORTING
I_MATNR = komp-matnr
I_IN_ME = komp-vrkme
I_OUT_ME = lv_uom
I_MENGE = i_menge
IMPORTING
E_MENGE = e_menge
EXCEPTIONS ##FM_SUBRC_OK
ERROR_IN_APPLICATION = 1
ERROR = 2
OTHERS = 3.
*} INSERT
ENDFORM.