Program :ZSDR008
T-Code: ZSD008
SO Item Split
1、 可以修改当前item 的值(除了数量)
2、 拆分的话,满足拆分的Item 和被拆的Item数量和等于原先的数量。
3、 SO Status = 20
4、 Test check √没有进行拆分,只是检查是否有没有错误
SO No. | New Item | Ref item | Qty | Delivery date | Ship to | Unloading Point | Shipping type | PO Item |
100003794 | 10 | 10 | 48 |
| 2065_001 | HK warehouse1 | 04 |
|
100003794 | 80 | 10 | 1 |
| 206501 | HK warehouse2 | 04 |
|
100003794 | 90 | 10 | 1 |
| 2065_001 | HK warehouse3 | 04 |
|
*&---------------------------------------------------------------------*
*& Progarm : zsdr008 Author : Jimmy Wong
*& Created : 14 Nov 2012 App : SD
*& Title : Change SO Item Split
*& Description : Change SO Item Split
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 14 Nov 2012 the first version
*& M1 Jimmy 10 Dec 2012 Add Po item & check split item qty >= DN Qty
*& M2 Jimmy 23 Apr 2013 add item text
*& the last update time 2013.04.23 19:00
*&---------------------------------------------------------------------*
report zsdr008 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data:begin of it_record occurs 0,
vbeln like vbak-vbeln, "SO
posnr like vbap-posnr, "Item
posnr_ref like vbap-posnr, "ref item
kwmeng like vbap-kwmeng, "Order Quantity Old
wmeng like vbep-wmeng, "Order Quantity
edatu type edatu, "First Delivery Date
kunnr type vbak-kunnr, "Ship to
ablad like vbpa-ablad, "Unloading Point
vsart like vbkd-vsart, "shipping type
posex like vbap-posex, "Pur item "M1
knumv like konv-knumv,
ischange type c,
message type c length 700,
end of it_record.
data:it_qty like it_record occurs 0 with header line.
data:it_tmp like it_record occurs 0 with header line.
data:begin of it_success occurs 0,
vbeln like vbak-vbeln, "SO
message type c length 700,
end of it_success .
data:it_err like it_success occurs 0 with header line.
data:lv_tabix like sy-tabix.
data: i_headerx like bapisdh1x ,
i_item like bapisditm occurs 0 with header line,
i_itemx like bapisditmx occurs 0 with header line,
i_partners like bapiparnr occurs 0 with header line,
i_partnerchanges like bapiparnrc occurs 0 with header line,
i_sch like bapischdl occurs 0 with header line,
i_schx like bapischdlx occurs 0 with header line,
i_cond like bapicond occurs 0 with header line,
i_condx like bapicondx occurs 0 with header line,
i_itemtext like table of bapisdtext with header line,
it_return like bapiret2 occurs 0 with header line.
data: it_vbap like vbap occurs 0 with header line.
data: it_vbkd like vbkd occurs 0 with header line.
data: it_vbpa like vbpa occurs 0 with header line.
data: it_vbak like vbak occurs 0 with header line.
data: it_konv like konv occurs 0 with header line.
data: it_vbep like vbep occurs 0 with header line.
data: begin of it_ablad occurs 0,
vbeln like vbpa-vbeln,
posnr like vbpa-posnr,
parvw like vbpa-parvw,
ablad like vbpa-ablad,
end of it_ablad.
data:begin of it_t173 occurs 200,
vsart like t173-vsart,
end of it_t173.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
wa_hier type slis_fieldcat_alv .
data: lt_gt_data type alsmex_tabline occurs 0 with header line.
data: msg type string.
data:lv_message type c length 700.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
data: lv_stonr like tj30-stonr.
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameters filename type rlgrap-filename obligatory.
parameters p_test as checkbox default 'X' .
selection-screen end of block 1.
*----------------------------------------------------------------------*
* Initialize *
*----------------------------------------------------------------------*
initialization.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for filename.
call function 'WS_FILENAME_GET'
exporting
def_path = 'C:\'
mask = ',Excel Files,*.xls,All Files,*.*.'(101)
mode = 'O'
title = 'Select file'(100)
importing
filename = filename
exceptions
selection_cancel = 1
selection_error = 2
others = 3.
if sy-subrc ne 0.
" .
endif.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
refresh: it_record ,lt_gt_data.
clear:it_record ,lt_gt_data.
perform manual_upld.
if sy-subrc ne 0.
clear msg.
concatenate 'Upload Filename ' filename ' is Error' into msg.
message msg type 'I'.
exit.
endif.
sort lt_gt_data by row col value.
read table lt_gt_data index 1.
if sy-subrc ne 0.
clear : msg.
concatenate 'Upload File ' filename ' Is Null!' into msg.
message msg type 'I'.
exit.
endif.
perform get_it_record.
if it_record[] is initial.
message 'No Record Found' type 'I'.
exit.
endif.
perform check_it_record.
"if p_test is initial.
perform process_data.
"endif.
perform display_data.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form MANUAL_UPLD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form manual_upld .
call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
exporting
filename = filename
i_begin_col = '1'
i_begin_row = '2'
i_end_col = '8'
i_end_row = '50000'
tables
intern = lt_gt_data
exceptions
upload_ole = 1.
if sy-subrc ne 0.
" message i004(zmm)
endif.
endform. " MANUAL_UPLD
*&---------------------------------------------------------------------*
*& Form GET_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_it_record .
check not lt_gt_data[] is initial.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Get Data........'.
loop at lt_gt_data.
shift lt_gt_data-value right deleting trailing space.
shift lt_gt_data-value left deleting leading space.
case lt_gt_data-col.
when '1'.
it_record-vbeln = lt_gt_data-value .
perform add_pre_zero using it_record-vbeln
changing it_record-vbeln.
when '2'.
it_record-posnr = lt_gt_data-value .
perform add_pre_zero using it_record-posnr
changing it_record-posnr.
when '3'.
it_record-posnr_ref = lt_gt_data-value .
perform add_pre_zero using it_record-posnr_ref
changing it_record-posnr_ref.
when '4'.
perform process_num using lt_gt_data-value
changing it_record-wmeng .
* when '5'.
* perform change_char_to_data using lt_gt_data-value
* changing it_record-edatu .
when '5'.
it_record-kunnr = lt_gt_data-value .
perform add_pre_zero using it_record-kunnr
changing it_record-kunnr.
when '6'.
it_record-ablad = lt_gt_data-value .
when '7'.
it_record-vsart = lt_gt_data-value .
perform add_pre_zero using it_record-vsart
changing it_record-vsart.
when '8'. "M1 add
it_record-posex = lt_gt_data-value .
perform add_pre_zero using it_record-posex
changing it_record-posex.
endcase.
at end of row.
append it_record.
clear:it_record.
endat.
endloop.
sort it_record by vbeln posnr.
endform. " GET_IT_RECORD
*&---------------------------------------------------------------------*
*& Form ADD_PRE_ZERO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RECORD_WEEKS_C text
* <--P_IT_RECORD_WEEKS_C text
*----------------------------------------------------------------------*
form add_pre_zero using p_old
changing p_new .
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = p_old
importing
output = p_new.
endform. " ADD_PRE_ZERO
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_data .
data:lv_total_line type i,
lv_line type p decimals 3,
lv_wbs type ps_posid,
it_lines type table of tline with header line, "M2 dd
lv_tdname type tdobname,
lv_kwmeng type c length 20,
lv_wmeng type c length 20.
data:lv_date type c length 10.
perform change_date_format using sy-datum 'X' changing lv_date.
describe table it_success lines lv_total_line.
loop at it_success.
lv_tabix = sy-tabix.
lv_line = sy-tabix / lv_total_line * 100.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
percentage = lv_line
text = 'Change Data........'.
i_headerx-updateflag = 'U'. "Update flag
loop at it_record where vbeln = it_success-vbeln.
clear:lv_wbs.
if it_record-ischange = 'U'.
i_itemx-updateflag = 'U'.
i_item-itm_number = it_record-posnr. "item no
i_itemx-itm_number = it_record-posnr.
i_item-target_qty = it_record-wmeng. "quantity
i_itemx-target_qty ='X' .
i_item-reason_rej = ''.
i_itemx-reason_rej = 'X'.
i_item-ship_type = it_record-vsart.
i_itemx-ship_type = 'X'.
i_item-po_itm_no = it_record-posex. " PO item
i_itemx-po_itm_no = 'X'.
append i_item.
append i_itemx.
i_schx-updateflag = 'U'.
i_sch-itm_number = it_record-posnr.
i_schx-itm_number = it_record-posnr.
i_sch-sched_line = '0001'.
i_schx-sched_line = '0001'.
i_sch-req_date = it_record-edatu.
i_schx-req_date = 'X'.
i_sch-req_qty = it_record-wmeng. "2012-01-24 Modify
i_schx-req_qty = 'X'.
append i_sch.
append i_schx.
read table it_vbpa with key vbeln = it_success-vbeln posnr = it_record-posnr parvw = 'WE' .
if sy-subrc eq 0.
i_partnerchanges-document = it_success-vbeln.
i_partnerchanges-itm_number = it_record-posnr.
i_partnerchanges-updateflag = 'U'.
i_partnerchanges-partn_role = 'WE'.
i_partnerchanges-p_numb_old = it_vbpa-kunnr .
i_partnerchanges-p_numb_new = it_record-kunnr.
append i_partnerchanges.
it_ablad-vbeln = it_success-vbeln.
it_ablad-posnr = it_record-posnr.
it_ablad-parvw = 'WE'.
it_ablad-ablad = it_record-ablad."it_vbpa-ablad.
append it_ablad.
else.
read table it_vbpa with key vbeln = it_success-vbeln parvw = 'WE' .
if sy-subrc eq 0.
i_partnerchanges-document = it_success-vbeln.
i_partnerchanges-itm_number = it_record-posnr.
i_partnerchanges-updateflag = 'U'.
i_partnerchanges-partn_role = 'WE'.
i_partnerchanges-p_numb_old = it_vbpa-kunnr .
i_partnerchanges-p_numb_new = it_record-kunnr.
append i_partnerchanges.
it_ablad-vbeln = it_success-vbeln.
it_ablad-posnr = it_record-posnr.
it_ablad-parvw = 'WE'.
it_ablad-ablad = it_record-ablad. "it_vbpa-ablad.
append it_ablad.
endif.
endif.
*M2 add
* clear: it_lines,it_lines[].
* concatenate it_success-vbeln it_record-posnr into lv_tdname .
* perform get_text tables it_lines using 'Z002' sy-langu lv_tdname 'VBBP'.
* if it_lines[] is not initial.
* loop at it_lines.
* clear: i_itemtext.
* i_itemtext-doc_number = it_success-vbeln.
* i_itemtext-itm_number = it_record-posnr.
* i_itemtext-text_id = 'Z002'.
* i_itemtext-langu = sy-langu.
* i_itemtext-text_line = it_lines-tdline.
* append i_itemtext.
* endloop.
* endif.
* clear: i_itemtext.
* i_itemtext-doc_number = it_success-vbeln.
* i_itemtext-itm_number = it_record-posnr.
* i_itemtext-text_id = 'Z002'.
* i_itemtext-langu = sy-langu.
* lv_kwmeng = it_record-kwmeng.
* lv_wmeng = it_record-wmeng.
* condense: lv_kwmeng, lv_wmeng.
* concatenate 'Change Qty' lv_kwmeng 'to' lv_wmeng '-' lv_date into i_itemtext-text_line separated by space.
* append i_itemtext.
*M2 end
elseif it_record-ischange = 'I'.
i_itemx-updateflag = 'I'.
read table it_vbap with key vbeln = it_success-vbeln posnr = it_record-posnr_ref binary search.
if sy-subrc eq 0 .
i_item-itm_number = it_record-posnr. "item no
i_itemx-itm_number = it_record-posnr.
i_item-material = it_vbap-matnr. "material
i_itemx-material = 'X'.
i_item-target_qty = it_record-wmeng. "quantity
i_itemx-target_qty ='X' .
i_item-target_qu = it_vbap-vrkme. "Unit
i_itemx-target_qu ='X' .
i_item-po_itm_no = it_record-posex. " PO item "M1 Modify
i_itemx-po_itm_no = 'X'.
call function 'CONVERSION_EXIT_ABPSP_OUTPUT'
exporting
input = it_vbap-ps_psp_pnr
importing
output = lv_wbs.
i_item-wbs_elem = lv_wbs. "WBS element
i_itemx-wbs_elem = 'X'.
i_item-plant = it_vbap-werks. "plant
i_itemx-plant = 'X'.
endif.
read table it_vbkd with key vbeln = it_success-vbeln posnr = it_record-posnr_ref binary search.
if sy-subrc eq 0.
i_item-price_date = it_vbkd-prsdt. "Pricing Date
i_itemx-price_date ='X'.
* i_item-ship_type = it_vbkd-vsart. "ship type
* i_itemx-ship_type = 'X'.
i_item-ship_type = it_record-vsart.
i_itemx-ship_type = 'X'.
i_item-incoterms1 = it_vbkd-inco1. "Incoterm1
i_itemx-incoterms1 = 'X'.
i_item-incoterms2 = it_vbkd-inco2. "Incoterm1
i_itemx-incoterms2 = 'X'.
i_item-pmnttrms = it_vbkd-zterm. "Payment Terms
i_itemx-pmnttrms = 'X'.
i_item-bill_date = it_vbkd-fkdat . "billing date
i_itemx-bill_date = 'X'.
endif.
append i_item.
append i_itemx.
i_schx-updateflag = 'I'.
i_sch-itm_number = it_record-posnr.
i_schx-itm_number = it_record-posnr.
i_sch-sched_line = '0001'.
i_schx-sched_line = '0001'.
i_sch-req_date = it_record-edatu.
i_schx-req_date = 'X'.
i_sch-req_qty = it_record-wmeng.
i_schx-req_qty = 'X'.
append i_sch.
append i_schx.
read table it_konv with key knumv = it_record-knumv kposn = it_record-posnr_ref binary search.
if sy-subrc eq 0.
i_cond-itm_number = it_record-posnr.
i_cond-cond_st_no = it_konv-stunr.
i_cond-cond_count = it_konv-zaehk.
i_cond-cond_type = it_konv-kschl. "Condition Type
i_cond-cond_value = it_konv-kbetr. "Amount
i_cond-currency = it_konv-waers. "Currency
i_cond-cond_p_unt = it_konv-kpein . "Per
i_cond-cond_unit = it_konv-kmein. "Condition Unit
append i_cond.
i_condx-updateflag = 'U'.
i_condx-itm_number = it_record-posnr.
i_condx-cond_st_no = it_konv-stunr.
i_condx-cond_count = it_konv-zaehk.
i_condx-cond_type = it_konv-kschl.
i_condx-cond_value = 'X'.
i_condx-currency = 'X'.
i_condx-cond_p_unt = 'X'.
i_condx-cond_unit = 'X'.
append i_condx.
endif.
* read table it_vbpa with key vbeln = it_success-vbeln posnr = it_record-posnr_ref parvw = 'WE'.
* if sy-subrc eq 0.
* i_partners-unload_pt = it_vbpa-ablad.
* else.
* read table it_vbpa with key vbeln = it_success-vbeln parvw = 'WE'.
* if sy-subrc eq 0.
* i_partners-unload_pt = it_vbpa-ablad.
* endif.
* endif.
i_partners-unload_pt = it_record-ablad.
i_partners-partn_role = 'WE'.
i_partners-partn_numb = it_record-kunnr. "ship to party
i_partners-itm_number = it_record-posnr.
append i_partners.
*M2 add
* clear: i_itemtext.
* i_itemtext-doc_number = it_success-vbeln.
* i_itemtext-itm_number = it_record-posnr.
* i_itemtext-text_id = 'Z002'.
* i_itemtext-langu = sy-langu.
* lv_wmeng = it_record-wmeng.
* condense: lv_wmeng.
* concatenate 'Item' it_record-posnr 'Split from Item'
* it_record-posnr_ref 'Qty-' lv_wmeng '-' lv_date into i_itemtext-text_line separated by space.
* append i_itemtext.
*M2 end
endif.
endloop.
call function 'BAPI_SALESORDER_CHANGE'
exporting
salesdocument = it_success-vbeln
order_header_inx = i_headerx
tables
return = it_return
order_item_in = i_item
order_item_inx = i_itemx
partners = i_partners
partnerchanges = i_partnerchanges
* PARTNERADDRESSES =
* ORDER_CFGS_REF =
* ORDER_CFGS_INST =
* ORDER_CFGS_PART_OF =
* ORDER_CFGS_VALUE =
* ORDER_CFGS_BLOB =
* ORDER_CFGS_VK =
* ORDER_CFGS_REFINST =
schedule_lines = i_sch
schedule_linesx = i_schx
* ORDER_TEXT = i_itemtext
* ORDER_KEYS =
conditions_in = i_cond
conditions_inx = i_condx
* EXTENSIONIN =
.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
loop at it_return where type = 'E'.
shift it_return-message right deleting trailing space.
shift it_return-message left deleting leading space.
concatenate lv_message ' E: ' it_return-message into lv_message.
endloop.
else.
if p_test is initial.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
read table it_return with key type = 'S' id ='V1' number = '311'.
if sy-subrc eq 0.
loop at it_ablad .
update vbpa set ablad = it_ablad-ablad where vbeln = it_ablad-vbeln
and posnr = it_ablad-posnr
and parvw = it_ablad-parvw.
commit work and wait.
endloop.
lv_message = 'Updated Success'.
else.
read table it_return with key type = 'S' id ='V1' number = '041'.
if sy-subrc eq 0.
lv_message = it_return-message.
else.
loop at it_return where type = 'S'.
shift it_return-message right deleting trailing space.
shift it_return-message left deleting leading space.
concatenate lv_message ' S: ' it_return-message into lv_message.
endloop.
endif.
endif.
else.
lv_message = 'Test Run Successing.'.
endif.
endif.
it_success-message = lv_message.
modify it_success index lv_tabix.
clear:i_headerx,lv_message,it_return,it_return[],i_sch,i_sch[],i_schx,i_schx[]
,i_item,i_item[],i_itemx,i_itemx[],i_partners[],i_partners
,i_cond, i_cond[],i_condx,i_condx[], i_partnerchanges, i_partnerchanges[],it_ablad,it_ablad[],
i_itemtext,i_itemtext[].
endloop.
loop at it_record.
lv_tabix = sy-tabix.
read table it_success with key vbeln = it_record-vbeln.
if sy-subrc eq 0.
it_record-message = it_success-message.
modify it_record index lv_tabix.
endif.
endloop.
endform. " PROCESS_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_NUM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_GT_DATA_VALUE text
* <--P_IT_RECORD_KPEIN text
*----------------------------------------------------------------------*
form process_num using p_value
changing p_change.
data :lv_value type c length 30 .
if p_value cn c_chk_num.
p_change = -1.
else.
lv_value = p_value.
call function 'C14DG_CHAR_NUMBER_CONVERSION'
exporting
i_string = lv_value
importing
* E_FLOAT =
e_dec = p_change
* E_DECIMALS =
exceptions
wrong_characters = 1
first_character_wrong = 2
arithmetic_sign = 3
multiple_decimal_separator = 4
thousandsep_in_decimal = 5
thousand_separator = 6
number_too_big = 7
others = 8.
if sy-subrc = 7.
p_change = p_value.
endif.
endif.
endform. " PROCESS_NUM
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form display_data .
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Display Data........'.
refresh fc_hier.
define alv_field.
clear:wa_hier.
wa_hier-col_pos = &1.
wa_hier-fieldname = &2.
wa_hier-seltext_m = &3.
wa_hier-seltext_l = &4.
wa_hier-outputlen = &5.
wa_hier-ref_tabname = &6 .
wa_hier-ref_fieldname = &7 .
append wa_hier to fc_hier.
end-of-definition.
alv_field '1' 'VBELN' '' 'SO No.' '15' 'VBAP' 'VBELN'.
alv_field '2' 'POSNR' '' 'Item' '6' '' ''.
alv_field '3' 'POSNR_REF' '' 'Ref Item' '8' '' ''.
alv_field '4' 'KWMENG' '' 'Old Qty' '10' '' ''.
alv_field '5' 'WMENG' '' 'Change Qty' '10' '' ''.
* alv_field '6' 'EDATU' '' 'Deli.Date' '10' '' ''.
alv_field '7' 'KUNNR' '' 'Ship-to' '10' '' ''.
alv_field '8' 'ABLAD' '' 'Unloading Point' '15' '' ''.
alv_field '9' 'VSART' '' 'Shipping Type' '10' '' ''.
alv_field '10' 'MESSAGE' 'Message' '' '50' '' ''.
sort it_record by vbeln posnr_ref.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
it_fieldcat = fc_hier[]
i_save = 'A'
tables
t_outtab = it_record
exceptions
program_error = 1
others = 2.
if sy-subrc ne 0.
" message i004(zmm)
endif.
endform. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_GT_DATA_VALUE text
* <--P_IT_RECORD_EDATU text
*----------------------------------------------------------------------*
form change_char_to_data using p_char
changing p_date.
check p_char is not initial.
if p_char cn c_chk_date.
p_date = '00000000'.
else.
call function 'CONVERT_DATE_TO_INTERNAL'
exporting
date_external = p_char
importing
date_internal = p_date
exceptions
date_external_is_invalid = 1
others = 2.
if sy-subrc ne 0.
p_date = '00000000'.
"p_date = sy-datum.
endif.
endif.
endform. " CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*& Form CHECK_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_it_record .
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting
text = 'Check Data........'.
refresh : it_vbap,it_err,it_success,it_vbkd,it_vbpa,it_vbak,it_qty,it_t173.
select *
into corresponding fields of table it_vbak
from vbak
for all entries in it_record
where vbeln = it_record-vbeln.
sort it_vbak by vbeln .
if it_vbak[] is not initial.
select *
into corresponding fields of table it_konv
from konv
for all entries in it_vbak
where knumv = it_vbak-knumv
and ( kschl = 'PR00'
or kschl like 'Z%'). " ('PR00','ZSC1','ZSC2' ,'ZSC3')
sort it_konv by knumv kposn.
endif.
select *
into corresponding fields of table it_vbap
from vbap
for all entries in it_record
where vbeln = it_record-vbeln
and ( posnr = it_record-posnr or posnr = it_record-posnr_ref ).
sort it_vbap by vbeln posnr.
select *
into corresponding fields of table it_vbkd
from vbkd
for all entries in it_record
where vbeln = it_record-vbeln
and ( posnr = it_record-posnr or posnr = it_record-posnr_ref ).
sort it_vbkd by vbeln posnr.
select *
into corresponding fields of table it_vbpa
from vbpa
for all entries in it_record
where vbeln = it_record-vbeln.
sort it_vbpa by vbeln posnr.
select vsart into table it_t173
from t173 .
select *
into corresponding fields of table it_vbep
from vbep
for all entries in it_record
where vbeln = it_record-vbeln
and ( posnr = it_record-posnr or posnr = it_record-posnr_ref )
and etenr = '0001' .
sort it_vbep by vbeln posnr.
it_tmp[] = it_record[].
loop at it_record.
lv_tabix = sy-tabix.
"status
read table it_vbak with key vbeln = it_record-vbeln binary search.
if sy-subrc eq 0.
call function 'STATUS_READ'
exporting
objnr = it_vbak-objnr
importing
stonr = lv_stonr
exceptions
object_not_found = 1
others = 2.
if sy-subrc eq 0.
if lv_stonr ne '20'.
concatenate 'SO Status Is ' lv_stonr into it_record-message separated by space.
else.
it_record-knumv = it_vbak-knumv.
"so item new item
read table it_vbap with key vbeln = it_record-vbeln posnr = it_record-posnr binary search.
if sy-subrc eq 0.
if it_record-posnr = it_record-posnr_ref.
it_record-ischange = 'U'.
it_record-kwmeng = it_vbap-kwmeng.
else.
concatenate it_record-message ' The SO new item is in need of changing,Pls input ref item / SO New Item Exists' into it_record-message.
endif.
else.
read table it_vbap with key vbeln = it_record-vbeln posnr = it_record-posnr_ref binary search.
if sy-subrc eq 0.
it_record-ischange = 'I'.
else.
concatenate it_record-vbeln it_record-posnr_ref 'No Exists.' into it_record-message separated by space.
endif.
endif.
endif.
else.
it_record-message = 'Get SO Status Is Error'.
endif.
else.
it_record-message = 'SO Is Not Exists'.
endif.
"Quantity
if it_record-wmeng = 0.
clear: it_record-ischange.
concatenate it_record-message' Quantity = 0 is error.' into it_record-message.
elseif it_record-wmeng < 0.
clear: it_record-ischange.
concatenate it_record-message 'Quantity is negative or Quantity not is number' into it_record-message separated by space.
endif.
"Deli.date
read table it_vbep with key vbeln = it_record-vbeln posnr = it_record-posnr_ref binary search.
if sy-subrc eq 0.
it_record-edatu = it_vbep-edatu.
else.
clear: it_record-ischange.
concatenate it_record-message ' Deli.date is error.' into it_record-message.
endif.
"Shiping type
read table it_t173 with key vsart = it_record-vsart binary search .
if sy-subrc ne 0.
clear: it_record-ischange.
concatenate it_record-message ' Shiping type Not Exists.' into it_record-message.
endif.
*m2 ADD
read table it_tmp with key vbeln = it_record-vbeln posnr = it_record-posnr_ref .
if sy-subrc ne 0.
clear: it_record-ischange.
concatenate it_record-message it_record-vbeln it_record-posnr_ref 'No Exists Excel File' into it_record-message separated by space.
endif.
*m2 END
if it_record-ischange ne 'U' and it_record-ischange ne 'I'.
it_err-vbeln = it_record-vbeln.
collect it_err.
clear:it_err.
endif.
it_success-vbeln = it_record-vbeln.
collect it_success.
clear:it_success.
it_qty-vbeln = it_record-vbeln.
it_qty-posnr_ref = it_record-posnr_ref.
it_qty-kwmeng = it_record-kwmeng.
it_qty-wmeng = it_record-wmeng.
collect it_qty.
clear:it_qty.
modify it_record index lv_tabix.
clear:it_record-message,it_record-ischange,lv_stonr.
endloop.
"check Qty
sort it_success by vbeln.
sort it_qty by vbeln posnr_ref.
loop at it_record.
lv_tabix = sy-tabix.
read table it_success with key vbeln = it_record-vbeln binary search.
if sy-subrc eq 0.
read table it_qty with key vbeln = it_record-vbeln posnr_ref = it_record-posnr_ref binary search.
if sy-subrc eq 0.
read table it_vbap with key vbeln = it_record-vbeln posnr = it_record-posnr_ref binary search.
if sy-subrc eq 0.
if it_vbap-kwmeng < it_qty-wmeng.
concatenate it_record-message' Split Qty More than old Qty' into it_record-message.
it_err-vbeln = it_record-vbeln.
collect it_err.
clear:it_err.
elseif it_vbap-kwmeng > it_qty-wmeng.
concatenate it_record-message' Split Qty Less than old Qty' into it_record-message.
it_err-vbeln = it_record-vbeln.
collect it_err.
clear:it_err.
endif.
modify it_record index lv_tabix.
endif.
endif.
endif.
endloop.
loop at it_err.
delete it_success where vbeln = it_err-vbeln.
endloop.
endform. " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*& Form get_text
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form get_text tables it_lines
using p_id
p_langu
p_tdname type tdobname
p_object.
call function 'READ_TEXT'
exporting
id = p_id
language = p_langu
name = p_tdname
object = p_object
tables
lines = it_lines
exceptions
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
others = 8.
endform. "get_text
*&---------------------------------------------------------------------*
*& Form change_date_format
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_OLD_DATE text
* -->P_EXTERNAL text
* -->P_NEW_DATE text
*----------------------------------------------------------------------*
form change_date_format using p_old_date
p_external
changing p_new_date.
constants:c_chk_date like pa0001-ename value '0123456789/'.
if p_external = 'X'.
call function 'CONVERT_DATE_TO_EXTERNAL'
exporting
date_internal = p_old_date
importing
date_external = p_new_date
exceptions
date_internal_is_invalid = 1
others = 2.
if sy-subrc <> 0.
clear:p_new_date.
endif.
else.
check p_old_date is not initial.
if p_old_date cn c_chk_date.
p_new_date = '00000000'.
else.
call function 'CONVERT_DATE_TO_INTERNAL'
exporting
date_external = p_old_date
importing
date_internal = p_new_date
exceptions
date_external_is_invalid = 1
others = 2.
if sy-subrc ne 0.
p_new_date = '00000000'.
endif.
endif.
endif.
endform. " CHANGE_DATE_FORMAT