Hi all ;
We implement this project of invoice correction request creation referance from invoice. We eleminate all discount and calculate net price.
Program RV61AFZA and RV61AFZB.
Also check oss note :
SAP Note 24832 - Pricing rules / TVCPF
SAP Note 672681 - VPRS calculation in RK document
For example :
rv61afza
form userexit_pricing_copy.
* the following example modifies the calculation rule within invoices
* for condition type HD00
*
* CHECK VBTYP_NEW CA VBTYP_FAKT.
* IF KONV-KSCHL = 'HD00'.
* KONV-KRECH = 'B'.
* ENDIF.
*---------------------------------------------------------------------*
data: lv_kposn like konv-kposn,
lv_kposn_new like konv-kposn,
lv_kschl like konv-kschl,
lv_kwert_old like konv-kwert,
ls_konv like konv.
data: ls_vbrp like vbrp,
ls_vbrk like vbrk.
data: lv_netpr type p decimals 2,
lv_menge type p decimals 3,
lv_netpr_new type p decimals 2.
if vbtyp_new ca 'K'.
clear: lv_kposn, lv_kschl, lv_kposn_new.
lv_kposn = konv-kposn.
lv_kschl = konv-kschl.
lv_kposn_new = item_number_to.
clear ls_konv.
select single * into ls_konv from konv
where knumv eq konv-knumv
and kposn eq lv_kposn
and kschl between 'ZI01' and 'ZI99'.
if sy-subrc = 0 and ls_konv is not initial.
clear ls_vbrk.
select single * into ls_vbrk from vbrk
where knumv eq konv-knumv.
if sy-subrc = 0.
clear ls_vbrp.
select single * into ls_vbrp from vbrp
where vbeln = ls_vbrk-vbeln
and posnr = lv_kposn.
if lv_kschl = 'ZFIY'.
konv-kwert = ls_vbrp-netwr.
konv-kbetr = ls_vbrp-netwr * 1000 * konv-kpein / ls_vbrp-fkimg.
elseif lv_kschl = 'ZKDV' or lv_kschl = 'ZRMP'.
elseif lv_kschl(2) = 'ZI'.
u15_subrc = 4 .
endif.
endif.
endif.
endif.
endform. "USEREXIT_PRICING_COPY
rv61afzb
form userexit_xkomv_bewerten_init.
data: lv_kposn like konv-kposn,
lv_kposn_new like konv-kposn,
lv_kschl like konv-kschl,
lv_kwert_old like konv-kwert.
data: ls_vbrp like vbrp,
ls_vbrk like vbrk,
ls_konv like konv.
data: begin of lt_cvbrp occurs 10.
include structure vbrpvb.
data: pstyn like vbap-pstyv.
data: end of lt_cvbrp.
constants: c_cvbrp(15) type c value '(SAPFV45C)CVBRP'.
field-symbols: <fs_cvbrp> like lt_cvbrp.
assign (c_cvbrp) to <fs_cvbrp>.
if <fs_cvbrp> is assigned.
if <fs_cvbrp>-rkcop = 'X' and vbtyp_new ca 'K'.
clear: lv_kposn, lv_kschl, lv_kposn_new.
lv_kposn = konv-kposn.
lv_kschl = konv-kschl.
lv_kposn_new = item_number_to.
clear ls_konv.
select single * into ls_konv from konv
where knumv eq konv-knumv
and kposn eq lv_kposn
and kschl between 'ZI01' and 'ZI99'.
"added by ounal.
if ls_konv is initial.
select single * into ls_konv from konv
where knumv eq konv-knumv
and kposn eq lv_kposn
and kschl eq 'ZFIY'
and kinak ne ''. "inaktif koşul
endif.
if ls_konv is not initial.
clear ls_vbrk.
select single * into ls_vbrk from vbrk
where knumv eq konv-knumv.
if sy-subrc = 0.
clear ls_vbrp.
select single * into ls_vbrp from vbrp
where vbeln = ls_vbrk-vbeln
and posnr = lv_kposn.
loop at xkomv where kposn = lv_kposn_new.
if xkomv-kschl = 'ZFIY'.
xkomv-kbetr = ls_vbrp-netwr * 1000 * xkomv-kpein / ls_vbrp-fkimg.
modify xkomv.
elseif xkomv-kschl = 'ZKDV' or xkomv-kschl = 'ZRMP'.
elseif xkomv-kschl(2) = 'ZI'.
delete xkomv.
endif.
endloop.
endif.
endif.
endif.
endif.
" ************** Değişiklik-1 son ***************
endform. "USEREXIT_XKOMV_BEWERTEN_INIT
Regards.
M.Ozgur Unal