*&---------------------------------------------------------------------*
*& Progarm : ZPPR036 Author : Jimmy Wong
*& Created : 08 Jan 2012 App : PP
*& Title : Update Production Order Delivered Qty CO11N
*& Description : Update Production Order Delivered Qty CO11N
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 08 Jan 2012 the first version
*& the last update time 2013.01.08 12:00
*&---------------------------------------------------------------------*
report zppr036 no standard page heading.
tables: aufk,mara.
data:begin of it_prod occurs 0,
aufnr like afko-aufnr,
matnr like afpo-matnr,
werks like aufk-werks,
rsnum like afko-rsnum,
aufpl like afko-aufpl,
psmng like afpo-psmng,
wemng like afpo-wemng,
posnr like afpo-posnr,
lead_aufnr like afko-lead_aufnr,
end of it_prod.
data:it_prod1 like it_prod occurs 0 with header line.
data:begin of it_aufnr occurs 0,
aufnr like afko-aufnr,
matnr like afpo-matnr,
werks like aufk-werks,
rsnum like afko-rsnum,
aufpl like afko-aufpl,
posnr like afpo-posnr,
psmng like afpo-psmng,
wemng like afpo-wemng,
lmnga like afvv-lmnga,
diffqty like afpo-wemng,
vornr like afvc-vornr,
lead_aufnr like afko-lead_aufnr,
message type c length 700,
end of it_aufnr.
data:itab like it_aufnr occurs 0 with header line.
data:begin of it_afvv occurs 0,
aufpl like afko-aufpl,
aplzl like afvv-aplzl,
lmnga like afvv-lmnga,
vornr like afvc-vornr,
end of it_afvv.
data:lv_aufnr like afko-aufnr.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
wa_hier type slis_fieldcat_alv .
data: it_bdcmsg like bdcmsgcoll occurs 0 with header line,
bdcdata like bdcdata occurs 0 with header line,
it_return like bapiret2 occurs 0 with header line.
data:lv_total_line type i,
lv_line type p decimals 3,
lv_tabix like sy-tabix.
*&---------------------------------------------------------------------*
* selection
*&---------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
select-options : s_werks for aufk-werks default '8101'.
select-options : s_laufnr for aufk-aufnr .
select-options : s_aufnr for aufk-aufnr .
select-options : s_matnr for mara-matnr .
select-options : s_mtart for mara-mtart.
parameters: p_mode type ctu_mode default 'N' obligatory.
parameters : p_test as checkbox default 'X'.
selection-screen end of block 1.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform get_data.
if p_test is initial.
" perform process_data.
perform process_data_bapi.
endif.
perform display_data.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Getting Data........'.
select distinct a~aufnr e~matnr b~werks a~rsnum a~aufpl e~psmng e~wemng e~posnr a~lead_aufnr
into corresponding fields of table it_prod
from afko as a
join afpo as e on a~aufnr = e~aufnr
join aufk as b on a~aufnr = b~aufnr
join jest as d on d~objnr = b~objnr
join tj02t as c on c~istat = d~stat and c~spras = sy-langu
join mara as f on e~matnr = f~matnr
where b~werks in s_werks
and c~txt04 = 'REL'
and d~inact = ''
and a~aufnr in s_aufnr
and e~matnr in s_matnr
and f~mtart in s_mtart
and e~psmng > 0
and b~loekz = space
and a~lead_aufnr in s_laufnr.
if it_prod[] is not initial.
sort it_prod by aufnr posnr.
it_prod1[] = it_prod[].
sort it_prod1 by lead_aufnr.
loop at it_prod.
if lv_aufnr ne it_prod-aufnr.
move-corresponding it_prod to it_aufnr.
read table it_prod1 with key lead_aufnr = it_aufnr-lead_aufnr BINARY SEARCH. " 计算子工单的delivered qty 根据主工单计算
if sy-subrc eq 0.
it_aufnr-wemng = it_prod1-psmng / it_aufnr-psmng * it_prod1-wemng .
endif.
append it_aufnr.
clear it_aufnr.
endif.
lv_aufnr = it_prod-aufnr.
endloop.
endif.
if it_aufnr[] is not initial.
sort it_aufnr by aufpl werks.
select b~aufpl b~aplzl b~lmnga a~vornr
into corresponding fields of table it_afvv
from afvc as a inner join afvv as b on a~aufpl = b~aufpl and a~aplzl = b~aplzl
for all entries in it_aufnr
where a~aufpl = it_aufnr-aufpl
and a~werks = it_aufnr-werks.
endif.
loop at it_aufnr.
read table it_afvv with key aufpl = it_aufnr-aufpl.
if sy-subrc eq 0.
it_aufnr-vornr = it_afvv-vornr.
it_aufnr-lmnga = it_afvv-lmnga.
it_aufnr-diffqty = it_aufnr-wemng - it_aufnr-lmnga.
if it_aufnr-diffqty > 0.
move-corresponding it_aufnr to itab.
append itab.
clear :itab.
endif.
endif.
endloop.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:lv_menge type c length 15.
sort itab by aufnr werks matnr.
describe table itab lines lv_total_line.
loop at itab.
lv_line = sy-tabix / lv_total_line * 100.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = lv_line
text = 'Processing Data........'.
lv_tabix = sy-tabix.
perform bdc_dynpro using 'SAPLCORU_S' '0100'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
perform bdc_field using 'AFRUD-AUFNR' itab-aufnr.
perform bdc_field using 'AFRUD-VORNR' itab-vornr.
perform bdc_field using 'BDC_CURSOR' 'AFRUD-LMNGA'.
lv_menge = itab-diffqty.
perform bdc_field using 'AFRUD-LMNGA' lv_menge .
call transaction 'CO11N'
using bdcdata
mode p_mode "Background performance
update 'S' "local updata
messages into it_bdcmsg. "all message table
commit work and wait.
call function 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
tables
imt_bdcmsgcoll = it_bdcmsg
ext_return = it_return.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
itab-message = it_return-message.
else.
read table it_return with key type = 'S' id = 'RU' number = '100'.
if sy-subrc eq 0.
itab-message = 'Update successed.'.
else.
read table it_return with key type = 'S' id = 'RU' number = '110'.
if sy-subrc eq 0.
itab-message = 'Update successed.'.
else.
loop at it_return.
concatenate itab-message it_return-message into itab-message.
endloop.
endif.
endif.
endif.
modify itab index lv_tabix transporting message.
clear: it_return,it_bdcmsg,it_bdcmsg[], bdcdata, bdcdata[],it_return[],itab-message..
endloop.
endform. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA_BAPI
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data_bapi .
data: it_time like bapi_pp_timeticket occurs 0 with header line,
lt_return type bapiret1,
lt_return_detail like bapi_coru_return occurs 0 with header line.
loop at itab.
lv_tabix = sy-tabix.
it_time-orderid = itab-aufnr.
it_time-operation = itab-vornr.
it_time-yield = itab-diffqty.
append it_time.
call function 'ZBAPI_PRODORDCONF_CREATE_TT'
importing
return = lt_return
tables
timetickets = it_time
detail_return = lt_return_detail.
read table lt_return_detail with key type = 'E'.
if sy-subrc eq 0.
call function 'BAPI_TRANSACTION_ROLLBACK'.
itab-message = lt_return_detail-message.
else.
read table lt_return_detail with key type = 'I' id = 'RU' number = '100'.
if sy-subrc eq 0.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
itab-message = 'Update successed.'.
else.
read table lt_return_detail with key type = 'I' id = 'RU' number = '110'.
if sy-subrc eq 0.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
itab-message = 'Update successed.'.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
loop at lt_return_detail.
concatenate itab-message lt_return_detail-message into itab-message.
endloop.
endif.
endif.
endif.
modify itab index lv_tabix transporting message.
clear:it_time,it_time[],lt_return,lt_return_detail,lt_return_detail[],itab-message.
endloop.
endform. "process_data_bapi
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form display_data .
define alv_field.
clear:wa_hier.
wa_hier-fieldname = &1.
wa_hier-seltext_m = &2.
wa_hier-seltext_l = &3.
wa_hier-outputlen = &4.
wa_hier-just = &5.
wa_hier-do_sum = &6.
wa_hier-ref_tabname = &7 .
wa_hier-ref_fieldname = &8 .
append wa_hier to fc_hier.
end-of-definition.
refresh: fc_hier.
alv_field 'AUFNR' '' '' '' 'L' '' 'AFKO' 'AUFNR'.
alv_field 'LEAD_AUFNR' '' 'Lead order' '' 'L' '' 'AFKO' 'AUFNR'.
alv_field 'VORNR' 'Operation' '' '' 'L' '' '' ''.
alv_field 'MATNR' '' 'Material' '18' 'L' '' 'MARA' 'MATNR'.
alv_field 'WERKS' 'Plant' '' '5' 'L' '' '' ''.
alv_field 'WEMNG' '' 'Delivered Qty' '12' 'R' '' '' ''.
alv_field 'LMNGA' '' 'Confirmed Qty' '12' 'R' '' '' ''.
alv_field 'DIFFQTY' '' 'Diff Qty' '12' 'R' '' '' ''.
alv_field 'MESSAGE' '' 'Message' '30' 'L' '' '' ''.
free:it_afvv,it_aufnr,it_prod,it_prod1.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fc_hier[]
i_save = 'A'
i_callback_program = sy-repid
tables
t_outtab = itab[]
exceptions
program_error = 1
others = 2.
endform. " DISPLAY_DATA
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
form bdc_field using fnam fval.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endform. "BDC_FIELD