function zrfc_sd_pce_0085.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(ZCUSTPO) LIKE VBAK-BSTNK OPTIONAL
*" EXPORTING
*" VALUE(ZAMOUNT) LIKE KONP-KBETR
*" TABLES
*" WOCOMPNENT STRUCTURE ZWOCONPNENT OPTIONAL
*" WOAMOUT STRUCTURE ZWOAMOUT OPTIONAL
*"----------------------------------------------------------------------
data: begin of wo_table occurs 0,
vbeln like vbak-vbeln,
posnr like vbep-posnr,
aufnr like vbep-aufnr,
rsnum like afko-rsnum,
end of wo_table.
data: zkonwa like konp-konwa,
zkbetr like konp-kbetr,
zkpein like konp-kpein,
zaufnr like vbep-aufnr,
zamount1 like vbap-netpr,
zso like vbak-vbeln,
zaufnr1 like vbep-aufnr ,
or_no like jest-objnr,
wo_status like bsvx-sttxt.
* Convert Internal SAP value to Currency value
data: t_intval like wmto_s-amount. "Internal Amount
data: t_disval like wmto_s-amount. "Display Amount
tables:vbak,vbkd,mara.
if zcustpo is initial.
exit.
endif.
****get SO
select single vbak~vbeln into zso
from vbak inner join vbuk
on vbak~vbeln = vbuk~vbeln
where bstnk = zcustpo
and abstk <> 'C'. " C is complete reject order,b is partial
select * into corresponding fields of table wo_table
from vbep
where vbeln = zso.
* delete duplicates data.
delete adjacent duplicates from wo_table comparing vbeln posnr aufnr.
if wo_table[] is initial.
exit.
endif.
****get wo rsnum
loop at wo_table.
select single rsnum into wo_table-rsnum from afko
where aufnr = wo_table-aufnr.
modify wo_table.
endloop.
******get component by wo Where condtion = ''
loop at wo_table.
clear: or_no ,wo_status.
or_no = 'OR'.
or_no+2 = wo_table-aufnr.
call function 'STATUS_TEXT_EDIT'
exporting
objnr = or_no
only_active = 'X'
spras = 'E'
bypass_buffer = '1'
importing
line = wo_status.
if wo_status cs 'REL'.
select * into corresponding fields of wocompnent
from resb
where rsnum = wo_table-rsnum
and xloek = '' " DELETE
and dumps = '' " DUMMY
and bdmng > 0. "20100614
* AND enmng > 0 .
** AND KZEAR = 'X'.
if sy-subrc = 0.
wocompnent-kdauf = wo_table-vbeln.
append wocompnent.
endif.
endselect .
endif.
endloop.
if wocompnent[] is initial.
exit.
endif.
sort wocompnent by aufnr.
read table wocompnent index 1.
zaufnr = wocompnent-aufnr.
loop at wocompnent.
if wocompnent-aufnr <> zaufnr . " CACULATE AMOUNT/PER WO.
woamout-aufnr = zaufnr1.
woamout-netpr = zamount1.
append woamout.
zaufnr = wocompnent-aufnr.
clear: zamount1,zaufnr1.
endif.
select single * from vbak where vbeln = wocompnent-kdauf.
select single * from vbkd where vbeln = wocompnent-kdauf.
select single * from mara where matnr = wocompnent-matnr.
****get condition record master
select single konp~kbetr konp~konwa konp~kpein
into (zkbetr,zkonwa,zkpein)
from a957 inner join konp
on a957~knumh = konp~knumh
where a957~kschl = 'PR00'
and a957~vkorg = vbak-vkorg
and a957~vtweg = vbak-vtweg
and a957~kunnr = vbak-kunnr
and a957~zzkdmat = mara-bismt
and a957~inco1 = vbkd-inco1
and a957~inco2 = vbkd-inco2
* AND a957~datab <= vbak-erdat
* AND a957~datbi >= vbak-erdat.
and a957~datab <= vbkd-prsdt
and a957~datbi >= vbkd-prsdt.
t_intval = zkbetr .
call function 'CURRENCY_AMOUNT_SAP_TO_DISPLAY'
exporting
currency = zkonwa
amount_internal = t_intval
importing
amount_display = t_disval
exceptions
internal_error = 1
others = 2.
zkbetr = t_disval.
*** condition record price
wocompnent-kbetr = zkbetr / zkpein.
*** component total price
wocompnent-netpr = wocompnent-bdmng * wocompnent-kbetr.
modify wocompnent.
*****************total amount
zamount = zamount + wocompnent-netpr.
zamount1 = zamount1 + wocompnent-netpr.
zaufnr1 = wocompnent-aufnr.
endloop.
*** FINIAL WO AMOUNT " CACULATE AMOUNT/PER WO.
woamout-aufnr = zaufnr1.
woamout-netpr = zamount1.
append woamout.
clear: zamount1.
endfunction.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14397246/viewspace-666219/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14397246/viewspace-666219/