*&---------------------------------------------------------------------*
*& Progarm : ZSDR005 Author : Jimmy Wong
*& Created : 20 Sep 2012 App : SD
*& Title : Upload Sales Order
*& Description : Upload Sales Order
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 20 Sep 2012 the first version
*&M1 Jimmy 26 Nov 2012 Add column Po date
*&M2 Jimmy 12 Dec 2012 auto find customer material by table : knmt
*&M3 Jimmy 14 Dec 2012 Add order type 'ZCOS'
*& the last update time 2012.12.14 19:00
*&---------------------------------------------------------------------*
report zsdr005 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data:begin of it_record occurs 0,
order type i,
auart like vbak-auart, "Order Type
auart_c like vbak-auart,
vkorg like vbak-vkorg, "Sales Organization
vtweg like vbak-vtweg, "Distribution channel
spart like vbak-spart, "Division
vkgrp like vbak-vkgrp, "Sales Group
vkbur like vbak-vkbur, "Sales Office
kunnr_d like vbak-kunnr, "Ship-to Party
kunnr_dc like vbak-kunnr,
kunnr_p like vbak-kunnr, "Sold-to Party
kunnr_pc like vbak-kunnr,
bstkd like vbkd-bstkd, "Pur.Order
posex like vbap-posex, "Pur item
vdatu like vbak-vdatu, "Rq.Del.Date
prsdt like vbkd-prsdt, "Pricing Date
ablad type ablad , "Unloading Point
vsart like vbkd-vsart, "Shiping type
inco1 like vbkd-inco1, "Incoterm1
inco2 like vbkd-inco2, "Incoterm2
zterm like vbkd-zterm, "Payment Terms
fkdat like vbkd-fkdat, "Billing Date
posnr like vbap-posnr, "Sales Document Item
posnr_c type c length 6,
matnr like vbap-matnr, "Material
matnr_c type c length 20,
wmeng like vbep-wmeng, "Order Quantity
vrkme like vbep-vrkme, "Sales Unit
edatu type edatu, "First Delivery Date
kscha type c length 4, "Condition Type
kbetr like komv-kbetr, "Amount
waers type waers, "Currency
kmein type kmein, "condition Unit
kpein type kpein, "Per
pspnr like prps-pspnr,
posid like prps-posid, "WBS element
werks like vbap-werks, "plant
bstdk like vbkd-bstdk, "PO date "M1 add
kdmat like knmt-kdmat,
message type c length 700,
end of it_record.
data: it_err like it_record occurs 0 with header line.
data: it_err2 like it_record occurs 0 with header line.
data: it_err3 like it_record occurs 0 with header line.
data:begin of it_order occurs 0,
auart like vbak-auart, "Order Type
bstkd like vbkd-bstkd, "Pur.Order
message type c length 700,
end of it_order.
data:it_order_err like it_order occurs 0 with header line.
data: lv_tabix like sy-tabix.
data: lt_gt_data type alsmex_tabline occurs 0 with header line.
data: msg type string.
data: i_sodoc like bapivbeln-vbeln, "import header
i_header like bapisdhd1,
i_headerx like bapisdhd1x,
e_sodoc like bapivbeln-vbeln, "export
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_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,
it_return like bapiret2 occurs 0 with header line.
data: gs_layout type slis_layout_alv,
gt_sort type slis_t_sortinfo_alv,
gs_sort type slis_sortinfo_alv,
gt_fieldcat type slis_t_fieldcat_alv,
gs_fieldcat type slis_fieldcat_alv,
t_repid like sy-repid value sy-repid,
gs_ucomm type slis_formname value 'USER_COMMAND',
gs_status type slis_formname value 'FRM_PF_STATUS_SET'.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
data:begin of it_tvko occurs 100,
vkorg like tvko-vkorg,
end of it_tvko.
data:begin of it_tvtw occurs 100,
vtweg like tvtw-vtweg ,
end of it_tvtw.
data:begin of it_tspa occurs 100,
spart like tspa-spart,
end of it_tspa.
data:begin of it_tvbur occurs 100,
vkbur like tvbur-vkbur,
end of it_tvbur.
data:begin of it_tvkgr occurs 0,
vkgrp like tvkgr-vkgrp,
end of it_tvkgr.
data:begin of it_kna1 occurs 0,
kunnr like kna1-kunnr,
end of it_kna1.
data:begin of it_t173 occurs 200,
vsart like t173-vsart,
end of it_t173.
data:begin of it_tinc occurs 200,
inco1 like tinc-inco1,
end of it_tinc.
data:begin of it_t052 occurs 0,
zterm like t052-zterm,
end of it_t052.
data:begin of it_t685 occurs 0,
kschl like t685-kschl,
end of it_t685.
data:begin of it_t001w occurs 50,
werks like t001w-werks,
end of it_t001w.
data:begin of it_mvke occurs 0,
matnr like mara-matnr,
vkorg like vbak-vkorg, "Sales Organization
vtweg like vbak-vtweg, "Distribution channel
spart like vbak-spart, "Division
end of it_mvke.
data:begin of it_mara occurs 0,
matnr like mara-matnr,
mtart like mara-mtart,
end of it_mara.
data:begin of it_knmt occurs 0, "M2 add
vkorg like knmt-vkorg,
vtweg like knmt-vtweg,
kunnr like knmt-kunnr,
matnr like knmt-matnr,
kdmat like knmt-kdmat,
end of it_knmt.
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameters filename type rlgrap-filename obligatory.
parameters: p_empty as checkbox.
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.
perform up_select.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form UP_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form up_select .
refresh: it_record ,lt_gt_data,it_order,it_order_err,it_err2,it_err.
clear:it_record,lt_gt_data,it_order,it_order_err,it_err2,it_err.
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 get_check_data.
perform check_it_record.
loop at it_record.
if not it_record-message = ' OK.'.
it_order_err-auart = it_record-auart.
it_order_err-bstkd = it_record-bstkd.
collect it_order_err.
clear it_order_err.
endif.
endloop.
if not it_order_err[] is initial.
sort it_order_err by auart bstkd.
delete adjacent duplicates from it_order_err comparing all fields.
loop at it_order_err.
loop at it_record where auart = it_order_err-auart
and bstkd = it_order_err-bstkd.
move-corresponding it_record to it_err2.
append it_err2.
clear it_err2.
endloop.
delete it_order where auart = it_order_err-auart
and bstkd = it_order_err-bstkd.
endloop.
endif.
sort it_order by auart bstkd.
delete adjacent duplicates from it_order comparing all fields.
sort it_record by auart bstkd.
loop at it_order.
lv_tabix = sy-tabix.
clear:it_order-message.
read table it_record with key auart = it_order-auart bstkd = it_order-bstkd binary search.
check sy-subrc eq 0.
i_headerx-updateflag = 'I'. "Update flag
i_header-doc_type = it_record-auart. "Sales document type
i_headerx-doc_type = 'X'.
i_header-sales_org = it_record-vkorg. "Sales organization
i_headerx-sales_org = 'X'.
i_header-distr_chan = it_record-vtweg . " Distribution channel
i_headerx-distr_chan = 'X' .
i_header-division = it_record-spart . "Division
i_headerx-division = 'X'.
i_header-sales_grp = it_record-vkgrp . "Sales Group
i_headerx-sales_grp = 'X'.
i_header-sales_off = it_record-vkbur . "Sales office
i_headerx-sales_off = 'X'.
i_header-req_date_h = it_record-vdatu. "Rq.Del.Date
i_headerx-req_date_h = 'X'.
i_header-purch_no_c = it_record-bstkd . "Purchase order
i_headerx-purch_no_c = 'X'.
i_header-pmnttrms = it_record-zterm. "Payment Terms
i_headerx-pmnttrms = 'X'.
i_header-incoterms1 = it_record-inco1. "Incoterm1
i_headerx-incoterms1 = 'X'.
i_header-incoterms2 = it_record-inco2. "Incoterm2
i_headerx-incoterms2 = 'X'.
i_header-ship_type = it_record-vsart. "ship type
i_headerx-ship_type = 'X'.
i_header-bill_date = it_record-fkdat . "billing date
i_headerx-bill_date = 'X'.
i_header-purch_date = it_record-bstdk. "PO date "M1 add
i_headerx-purch_date = 'X'.
i_partners-partn_role = 'AG'.
i_partners-partn_numb = it_record-kunnr_d. "sold to party
append i_partners.
i_partners-partn_role = 'WE'.
i_partners-partn_numb = it_record-kunnr_p. "ship to party
i_partners-unload_pt = it_record-ablad.
append i_partners.
loop at it_record where auart = it_order-auart and bstkd = it_order-bstkd.
i_itemx-updateflag = 'I'.
i_item-itm_number = it_record-posnr. "item no
i_itemx-itm_number = 'X'.
i_item-po_itm_no = it_record-posex. " PO item
i_itemx-po_itm_no = 'X'.
i_item-material = it_record-matnr. "material
i_itemx-material = 'X'.
i_item-target_qty = it_record-wmeng. "quantity
i_itemx-target_qty ='X' .
i_item-target_qu = it_record-vrkme. "Unit
i_itemx-target_qu ='X' .
i_item-price_date = it_record-prsdt. "Pricing Date
i_itemx-price_date ='X'.
i_item-ship_type = it_record-vsart. "ship type
i_itemx-ship_type = 'X'.
i_item-incoterms1 = it_record-inco1. "Incoterm1
i_itemx-incoterms1 = 'X'.
i_item-incoterms2 = it_record-inco2. "Incoterm1
i_itemx-incoterms2 = 'X'.
i_item-pmnttrms = it_record-zterm. "Payment Terms
i_itemx-pmnttrms = 'X'.
i_item-bill_date = it_record-fkdat . "billing date
i_itemx-bill_date = 'X'.
i_item-wbs_elem = it_record-posid. "WBS element
i_itemx-wbs_elem = 'X'.
if not it_record-werks is initial.
i_item-plant = it_record-werks. "plant
i_itemx-plant = 'X'.
endif.
*M2 add
i_item-cust_mat35 = it_record-kdmat.
i_itemx-cust_mat35 = 'X'.
*M2 end
append i_item.
append i_itemx.
* if it_record-auart ne 'ZREP'.
i_cond-itm_number = it_record-posnr.
i_cond-cond_st_no = '011'.
i_cond-cond_count = '01'.
i_cond-cond_type = it_record-kscha. "Condition Type
i_cond-cond_value = it_record-kbetr. "Amount
i_cond-currency = it_record-waers. "Currency
i_cond-cond_p_unt = it_record-kpein . "Per
i_cond-cond_unit = it_record-kmein. "Condition Unit
append i_cond.
i_condx-updateflag = 'U'.
i_condx-itm_number = it_record-posnr.
i_condx-cond_st_no = '011'.
i_condx-cond_count = '01'.
i_condx-cond_type = it_record-kscha.
i_condx-cond_value = 'X'.
i_condx-currency = 'X'.
i_condx-cond_p_unt = 'X'.
i_condx-cond_unit = 'X'.
append i_condx.
* endif.
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.
endloop.
call function 'BAPI_SALESORDER_CREATEFROMDAT2'
exporting
order_header_in = i_header
order_header_inx = i_headerx
importing
salesdocument = e_sodoc
tables
return = it_return
order_items_in = i_item
order_items_inx = i_itemx
order_partners = i_partners
order_schedules_in = i_sch
order_schedules_inx = i_schx
order_conditions_in = i_cond
order_conditions_inx = i_condx.
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 it_order-message ' E: ' it_return-message into it_order-message.
endloop.
modify it_order index lv_tabix.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
" wait up to 1 seconds.
concatenate e_sodoc ' Success.' into it_order-message.
modify it_order index lv_tabix.
endif.
clear:i_header,i_headerx,e_sodoc,it_return,i_item,i_itemx,i_partners,i_sch,i_schx,i_cond,i_condx,e_sodoc.
refresh:it_return,i_item,i_itemx,i_partners,i_sch,i_schx,i_cond,i_condx.
endloop.
loop at it_order.
loop at it_record where auart = it_order-auart and bstkd = it_order-bstkd.
move-corresponding it_record to it_err.
it_err-message = it_order-message.
append it_err.
clear it_err.
endloop .
endloop.
clear it_err3.
refresh it_err3.
append lines of it_err to it_err3.
append lines of it_err2 to it_err3.
sort it_err3 by auart bstkd .
perform write_data.
endform. " UP_SELECT
*&---------------------------------------------------------------------*
*& 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 = '3'
i_end_col = '31'
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 .
data:lv_order type i,
lv_date(10) type c. "Pur.Order .
check not lt_gt_data[] is initial.
lv_order = 1.
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-auart_c = lt_gt_data-value .
perform conversion_order_type using it_record-auart_c
changing it_record-auart.
it_order-auart = it_record-auart.
when '2'.
it_record-vkorg = lt_gt_data-value .
when '3'.
it_record-vtweg = lt_gt_data-value .
when '4'.
it_record-spart = lt_gt_data-value .
when '5'.
it_record-vkbur = lt_gt_data-value .
when '6'.
it_record-vkgrp = lt_gt_data-value .
when '7'.
it_record-kunnr_dc = lt_gt_data-value .
perform add_pre_zero using it_record-kunnr_dc
changing it_record-kunnr_d.
when '8'.
it_record-kunnr_pc = lt_gt_data-value .
perform add_pre_zero using it_record-kunnr_pc
changing it_record-kunnr_p.
when '9'.
it_order-bstkd = lt_gt_data-value.
it_record-bstkd = lt_gt_data-value .
when '10'.
it_record-posex = lt_gt_data-value .
when '11'.
clear:lv_date.
lv_date = lt_gt_data-value .
perform change_char_to_data using lv_date
changing it_record-vdatu.
when '12'.
clear:lv_date.
lv_date = lt_gt_data-value .
perform change_char_to_data using lv_date
changing it_record-prsdt.
when '13'.
it_record-ablad = lt_gt_data-value .
when '14'.
it_record-vsart = lt_gt_data-value .
perform add_pre_zero using it_record-vsart
changing it_record-vsart.
when '15'.
it_record-inco1 = lt_gt_data-value .
when '16'.
it_record-inco2 = lt_gt_data-value .
when '17'.
it_record-zterm = lt_gt_data-value .
when '18'.
clear:lv_date.
lv_date = lt_gt_data-value .
perform change_char_to_data using lv_date
changing it_record-fkdat .
when '19'.
it_record-posnr_c = lt_gt_data-value .
perform add_pre_zero using it_record-posnr_c
changing it_record-posnr.
when '20'.
it_record-matnr_c = lt_gt_data-value.
perform tranfer_material using it_record-matnr_c
changing it_record-matnr.
when '21'.
perform process_num using lt_gt_data-value
changing it_record-wmeng .
when '22'.
it_record-vrkme = lt_gt_data-value.
when '23'.
clear:lv_date.
lv_date = lt_gt_data-value .
perform change_char_to_data using lv_date
changing it_record-edatu .
when '24'.
it_record-kscha = lt_gt_data-value.
when '25'.
perform process_num using lt_gt_data-value
changing it_record-kbetr .
when '26'.
it_record-waers = lt_gt_data-value.
when '27'.
perform process_num using lt_gt_data-value
changing it_record-kpein .
when '28'.
it_record-kmein = lt_gt_data-value.
when '29'.
it_record-posid = lt_gt_data-value.
perform tranfer_wbs using it_record-posid
changing it_record-pspnr.
when '30'.
it_record-werks = lt_gt_data-value.
when '31'. "M1 add
clear:lv_date.
lv_date = lt_gt_data-value .
if lv_date is not initial.
perform change_char_to_data using lv_date
changing it_record-bstdk .
endif.
endcase.
at end of row.
it_record-order = lv_order.
append it_record.
collect it_order.
add 1 to lv_order.
clear:it_record,it_order.
endat.
endloop.
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 CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_DATE text
* <--P_IT_RECORD_VDATU 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 'OIU_ME_CHAR_TO_DATE'
exporting
i_char = p_char
importing
e_date = p_date
exceptions
error_found = 4.
if sy-subrc ne 0.
p_date = '00000000'.
"p_date = sy-datum.
endif.
endif.
endform. " CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*& Form WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form write_data .
if gt_fieldcat is initial.
perform set_fieldcat.
endif.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
* i_callback_program = t_repid
* i_callback_pf_status_set = gs_status
* i_callback_user_command = gs_ucomm
* i_grid_title = l_title
* is_layout = gs_layout
it_fieldcat = gt_fieldcat
i_save = 'A'
* IT_EVENTS = LT_EVTS
tables
t_outtab = it_err3
exceptions
program_error = 1
others = 2.
endform. " WRITE_DATA
*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form set_fieldcat .
perform fieldcat_init using 'AUART_C' 'Order Type' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VKORG' 'Sales Organization' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VTWEG' 'Distribution channel' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'SPART' 'Division' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VKBUR' 'Sales Office' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VKGRP' 'Sales Group' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KUNNR_DC' 'Sold-to Party' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KUNNR_PC' 'Ship-to Party' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'BSTKD' 'Pur.Order' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'POSEX' 'PO Item' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VDATU' 'Rq.Del.Date' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'PRSDT' 'Pricing Date' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'ABLAD' 'Unloading Point' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VSART' 'Shiping type' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'INCO1' 'Incoterm1' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'INCO2' 'Incoterm2' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'ZTERM' 'Payment Terms' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'FKDAT' 'Billing Date' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'POSNR_C' 'Sales Document Item' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'MATNR_C' 'Material' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'WMENG' 'Order Quantity' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VRKME' 'Sales Unit' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'EDATU' 'First Delivery Date' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KSCHA' 'Condition Type' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KBETR' 'Amount' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'WAERS' 'Currency' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KPEIN' 'Per' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KMEIN' 'condition Unit' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'POSID' 'WBS element' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'WERKS' 'Plamt' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'BSTDK' 'PO Date' '' '' '' '' '' '' '' '' '' ''. "M1 add
perform fieldcat_init using 'KDMAT' 'Customer Material' '' '' '' '' '' '' '' '' '' ''. "M2 add
perform fieldcat_init using 'MESSAGE' 'Message' '100' '' '' '' '' '' '' '' '' ''.
endform. " SET_FIELDCAT
*&---------------------------------------------------------------------*
*& Form fieldcat_init
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FIELD_NAME text
* -->FIELD_TEXT text
* -->FIELD_LENTH text
* -->FIELD_EDIT text
* -->FIELD_TYPE text
* -->FIELD_KEY text
* -->FIELD_HOTSPOT text
* -->FIELD_CHECKBOX text
* -->FIELD_NO_ZERO text
* -->FIELD_REF_TABNAME text
* -->FIELD_REF_FIELDNAME text
* -->FIELD_EMPHASIZE text
*----------------------------------------------------------------------*
form fieldcat_init using
field_name type c
field_text type c
field_lenth type i
field_edit type c
field_type type c
field_key type c
field_hotspot type c
field_checkbox type c
field_no_zero type c
field_ref_tabname type c
field_ref_fieldname type c
field_emphasize type c.
clear gs_fieldcat.
gs_fieldcat-fieldname = field_name.
gs_fieldcat-seltext_l = field_text.
gs_fieldcat-seltext_m = field_text.
gs_fieldcat-seltext_s = field_text.
gs_fieldcat-checkbox = field_checkbox.
* gs_fieldcat-round = 0.
gs_fieldcat-edit = field_edit.
gs_fieldcat-datatype = field_type.
if field_type = 'Q'.
gs_fieldcat-just = 'R'.
gs_fieldcat-datatype = 'QUAN'.
* gs_fieldcat-qfieldname = 'MEINS'.
gs_fieldcat-decimals_out = 3.
else.
gs_fieldcat-just = 'L'.
endif.
gs_fieldcat-key = field_key.
gs_fieldcat-hotspot = field_hotspot .
gs_fieldcat-outputlen = field_lenth.
gs_fieldcat-ddic_outputlen = field_lenth.
gs_fieldcat-no_zero = field_no_zero.
gs_fieldcat-ref_tabname = field_ref_tabname.
gs_fieldcat-ref_fieldname = field_ref_fieldname.
gs_fieldcat-emphasize = field_emphasize .
append gs_fieldcat to gt_fieldcat.
endform. "fieldcat_init
*&---------------------------------------------------------------------*
*& 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 CHECK_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_it_record .
data: lv_flag2 type c .
clear: lv_flag2.
loop at it_record.
lv_tabix = sy-tabix.
clear:lv_flag2,it_record-message.
"Order Type
if it_record-auart is initial.
lv_flag2 = 'X'.
concatenate it_record-message ' Order Type Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"PO No.
if p_empty is initial.
if it_record-bstkd is initial.
lv_flag2 = 'X'.
concatenate it_record-message ' PO No. is empty.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Sales Organization
read table it_tvko with key vkorg = it_record-vkorg binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Sales Organization Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Distribution channel
read table it_tvtw with key vtweg = it_record-vtweg binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Distribution channel Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Division
read table it_tspa with key spart = it_record-spart binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Division Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Sales Office
read table it_tvbur with key vkbur = it_record-vkbur binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Sales Office Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Sales Group
read table it_tvkgr with key vkgrp = it_record-vkgrp binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Sales Group Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Sold-to Party
read table it_kna1 with key kunnr = it_record-kunnr_d binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Sold-to Party Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Ship-to Party
read table it_kna1 with key kunnr = it_record-kunnr_p binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Ship-to Party Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Shiping type
read table it_t173 with key vsart = it_record-vsart binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Shiping type Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Incoterm1
if it_record-inco1 ne space .
read table it_tinc with key inco1 = it_record-inco1 binary search .
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Incoterm1 Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Payment Terms
if it_record-zterm ne space .
read table it_t052 with key zterm = it_record-zterm binary search .
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Payment Terms Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Material
read table it_mara with key matnr = it_record-matnr binary search.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Material Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
else.
if it_record-auart_c ne 'ZSP' and it_record-auart_c ne 'ZCOS'. "M3
read table it_mvke with key matnr = it_record-matnr
vkorg = it_record-vkorg
vtweg = it_record-vtweg
spart = it_record-spart binary search.
* select single mtart into lv_mtart
* from mara as a
* inner join mvke as b on a~matnr = b~matnr
* where a~matnr = it_record-matnr
* and b~vkorg = it_record-vkorg
* and b~vtweg = it_record-vtweg
* and a~spart = it_record-spart .
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-matnr_c it_record-vkorg it_record-vtweg it_record-spart 'No Exists.'
into it_record-message separated by space.
modify it_record index lv_tabix.
endif.
endif.
endif.
"Quantity
if it_record-wmeng = 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Quantity = 0 is error.' into it_record-message.
modify it_record index lv_tabix.
elseif it_record-wmeng < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Quantity is negative or Quantity not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Condition Type
read table it_t685 with key kschl = it_record-kscha binary search .
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Condition Type Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Amount
if it_record-kbetr = 0.
* lv_flag2 = 'X'.
* concatenate it_record-message
* ' Amount = 0 is error.' into it_record-message.
* modify it_record index lv_tabix.
elseif it_record-kbetr < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Amount is negative or Amount not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Per
if it_record-kpein = 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Per = 0 is error.' into it_record-message.
modify it_record index lv_tabix.
elseif it_record-kpein < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Per is negative or Per not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Production Lot
if it_record-pspnr is initial.
lv_flag2 = 'X'.
concatenate it_record-message ' Production Lot Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"plant
if not it_record-werks is initial.
read table it_t001w with key werks = it_record-werks binary search.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Plant Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"First Delivery Date
if it_record-edatu = '00000000'.
lv_flag2 = 'X'.
concatenate it_record-message ' First Delivery Date Is Empty'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Sales Document Item
if it_record-posnr = '000000'.
lv_flag2 = 'X'.
concatenate it_record-message ' Sales Document Item Is Empty'
into it_record-message.
modify it_record index lv_tabix.
endif.
*M2 add
" customer material
read table it_knmt with key vkorg = it_record-vkorg
vtweg = it_record-vtweg
kunnr = it_record-kunnr_p
matnr = it_record-matnr .
if sy-subrc eq 0.
it_record-kdmat = it_knmt-kdmat.
modify it_record index lv_tabix.
endif.
*m2 End
if lv_flag2 <> 'X'.
it_record-message = ' OK.'.
modify it_record index lv_tabix.
endif.
endloop.
endform. " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*& Form CONVERSION_ORDER_TYPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RECORD_AUART_C text
* <--P_IT_RECORD_AUART text
*----------------------------------------------------------------------*
form conversion_order_type using p_old
changing p_new.
translate p_old to upper case.
call function 'CONVERSION_EXIT_AUART_INPUT'
exporting
input = p_old
importing
output = p_new.
endform. " CONVERSION_ORDER_TYPE
*&---------------------------------------------------------------------*
*& Form TRANFER_MATERIAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ITAB_MATNR text
* <--P_ITAB_MATNR_C text
*----------------------------------------------------------------------*
form tranfer_material using p_old
changing p_new .
translate p_old to upper case.
call function 'CONVERSION_EXIT_MATN1_INPUT'
exporting
input = p_old
importing
output = p_new
exceptions
length_error = 1
others = 2.
if sy-subrc <> 0.
p_new = p_old.
endif.
endform. "tranfer_material
*&---------------------------------------------------------------------*
*& Form TRANFER_WBS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RECORD_POSID text
* <--P_IT_RECORD_PSPNR text
*----------------------------------------------------------------------*
form tranfer_wbs using p_old
changing p_new .
translate p_old to upper case.
call function 'CONVERSION_EXIT_ABPSP_INPUT'
exporting
input = p_old
importing
output = p_new
exceptions
not_found = 1
others = 2.
if sy-subrc <> 0.
clear:p_new.
endif.
endform. " TRANFER_WBS
*&---------------------------------------------------------------------*
*& Form GET_CHECK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_check_data .
select vkorg into table it_tvko
from tvko .
sort it_tvko by vkorg .
select vtweg into table it_tvtw
from tvtw.
sort it_tvtw by vtweg .
select spart into table it_tspa
from tspa.
sort it_tspa by spart .
select vkbur into table it_tvbur
from tvbur .
sort it_tvbur by vkbur .
select vkgrp into table it_tvkgr
from tvkgr .
sort it_tvkgr by vkgrp .
select kunnr into table it_kna1
from kna1.
sort it_kna1 by kunnr .
select vsart into table it_t173
from t173 .
sort it_t173 by vsart .
select inco1 into table it_tinc
from tinc.
sort it_tinc by inco1.
select distinct zterm into table it_t052
from t052.
sort it_t052 by zterm.
select distinct kschl into table it_t685
from t685.
sort it_t685 by kschl.
select werks into table it_t001w
from t001w.
sort it_t001w by werks.
select matnr mtart into table it_mara
from mara
for all entries in it_record
where matnr = it_record-matnr.
sort it_mara by matnr.
select distinct a~matnr a~spart b~vkorg b~vtweg
into corresponding fields of table it_mvke
from mara as a
inner join mvke as b on a~matnr = b~matnr
for all entries in it_record
where a~matnr = it_record-matnr
and b~vkorg = it_record-vkorg
and b~vtweg = it_record-vtweg
and a~spart = it_record-spart .
sort it_mvke by matnr vkorg vtweg spart.
*M2 add
select vkorg vtweg kunnr matnr kdmat
into corresponding fields of table it_knmt
from knmt
for all entries in it_record
where vkorg = it_record-vkorg
and vtweg = it_record-vtweg
and kunnr = it_record-kunnr_p
and matnr = it_record-matnr.
sort it_knmt by vkorg vtweg kunnr matnr.
*M2 End
endform. " GET_CHECK_DATA
*& Progarm : ZSDR005 Author : Jimmy Wong
*& Created : 20 Sep 2012 App : SD
*& Title : Upload Sales Order
*& Description : Upload Sales Order
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 20 Sep 2012 the first version
*&M1 Jimmy 26 Nov 2012 Add column Po date
*&M2 Jimmy 12 Dec 2012 auto find customer material by table : knmt
*&M3 Jimmy 14 Dec 2012 Add order type 'ZCOS'
*& the last update time 2012.12.14 19:00
*&---------------------------------------------------------------------*
report zsdr005 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data:begin of it_record occurs 0,
order type i,
auart like vbak-auart, "Order Type
auart_c like vbak-auart,
vkorg like vbak-vkorg, "Sales Organization
vtweg like vbak-vtweg, "Distribution channel
spart like vbak-spart, "Division
vkgrp like vbak-vkgrp, "Sales Group
vkbur like vbak-vkbur, "Sales Office
kunnr_d like vbak-kunnr, "Ship-to Party
kunnr_dc like vbak-kunnr,
kunnr_p like vbak-kunnr, "Sold-to Party
kunnr_pc like vbak-kunnr,
bstkd like vbkd-bstkd, "Pur.Order
posex like vbap-posex, "Pur item
vdatu like vbak-vdatu, "Rq.Del.Date
prsdt like vbkd-prsdt, "Pricing Date
ablad type ablad , "Unloading Point
vsart like vbkd-vsart, "Shiping type
inco1 like vbkd-inco1, "Incoterm1
inco2 like vbkd-inco2, "Incoterm2
zterm like vbkd-zterm, "Payment Terms
fkdat like vbkd-fkdat, "Billing Date
posnr like vbap-posnr, "Sales Document Item
posnr_c type c length 6,
matnr like vbap-matnr, "Material
matnr_c type c length 20,
wmeng like vbep-wmeng, "Order Quantity
vrkme like vbep-vrkme, "Sales Unit
edatu type edatu, "First Delivery Date
kscha type c length 4, "Condition Type
kbetr like komv-kbetr, "Amount
waers type waers, "Currency
kmein type kmein, "condition Unit
kpein type kpein, "Per
pspnr like prps-pspnr,
posid like prps-posid, "WBS element
werks like vbap-werks, "plant
bstdk like vbkd-bstdk, "PO date "M1 add
kdmat like knmt-kdmat,
message type c length 700,
end of it_record.
data: it_err like it_record occurs 0 with header line.
data: it_err2 like it_record occurs 0 with header line.
data: it_err3 like it_record occurs 0 with header line.
data:begin of it_order occurs 0,
auart like vbak-auart, "Order Type
bstkd like vbkd-bstkd, "Pur.Order
message type c length 700,
end of it_order.
data:it_order_err like it_order occurs 0 with header line.
data: lv_tabix like sy-tabix.
data: lt_gt_data type alsmex_tabline occurs 0 with header line.
data: msg type string.
data: i_sodoc like bapivbeln-vbeln, "import header
i_header like bapisdhd1,
i_headerx like bapisdhd1x,
e_sodoc like bapivbeln-vbeln, "export
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_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,
it_return like bapiret2 occurs 0 with header line.
data: gs_layout type slis_layout_alv,
gt_sort type slis_t_sortinfo_alv,
gs_sort type slis_sortinfo_alv,
gt_fieldcat type slis_t_fieldcat_alv,
gs_fieldcat type slis_fieldcat_alv,
t_repid like sy-repid value sy-repid,
gs_ucomm type slis_formname value 'USER_COMMAND',
gs_status type slis_formname value 'FRM_PF_STATUS_SET'.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
data:begin of it_tvko occurs 100,
vkorg like tvko-vkorg,
end of it_tvko.
data:begin of it_tvtw occurs 100,
vtweg like tvtw-vtweg ,
end of it_tvtw.
data:begin of it_tspa occurs 100,
spart like tspa-spart,
end of it_tspa.
data:begin of it_tvbur occurs 100,
vkbur like tvbur-vkbur,
end of it_tvbur.
data:begin of it_tvkgr occurs 0,
vkgrp like tvkgr-vkgrp,
end of it_tvkgr.
data:begin of it_kna1 occurs 0,
kunnr like kna1-kunnr,
end of it_kna1.
data:begin of it_t173 occurs 200,
vsart like t173-vsart,
end of it_t173.
data:begin of it_tinc occurs 200,
inco1 like tinc-inco1,
end of it_tinc.
data:begin of it_t052 occurs 0,
zterm like t052-zterm,
end of it_t052.
data:begin of it_t685 occurs 0,
kschl like t685-kschl,
end of it_t685.
data:begin of it_t001w occurs 50,
werks like t001w-werks,
end of it_t001w.
data:begin of it_mvke occurs 0,
matnr like mara-matnr,
vkorg like vbak-vkorg, "Sales Organization
vtweg like vbak-vtweg, "Distribution channel
spart like vbak-spart, "Division
end of it_mvke.
data:begin of it_mara occurs 0,
matnr like mara-matnr,
mtart like mara-mtart,
end of it_mara.
data:begin of it_knmt occurs 0, "M2 add
vkorg like knmt-vkorg,
vtweg like knmt-vtweg,
kunnr like knmt-kunnr,
matnr like knmt-matnr,
kdmat like knmt-kdmat,
end of it_knmt.
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameters filename type rlgrap-filename obligatory.
parameters: p_empty as checkbox.
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.
perform up_select.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form UP_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form up_select .
refresh: it_record ,lt_gt_data,it_order,it_order_err,it_err2,it_err.
clear:it_record,lt_gt_data,it_order,it_order_err,it_err2,it_err.
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 get_check_data.
perform check_it_record.
loop at it_record.
if not it_record-message = ' OK.'.
it_order_err-auart = it_record-auart.
it_order_err-bstkd = it_record-bstkd.
collect it_order_err.
clear it_order_err.
endif.
endloop.
if not it_order_err[] is initial.
sort it_order_err by auart bstkd.
delete adjacent duplicates from it_order_err comparing all fields.
loop at it_order_err.
loop at it_record where auart = it_order_err-auart
and bstkd = it_order_err-bstkd.
move-corresponding it_record to it_err2.
append it_err2.
clear it_err2.
endloop.
delete it_order where auart = it_order_err-auart
and bstkd = it_order_err-bstkd.
endloop.
endif.
sort it_order by auart bstkd.
delete adjacent duplicates from it_order comparing all fields.
sort it_record by auart bstkd.
loop at it_order.
lv_tabix = sy-tabix.
clear:it_order-message.
read table it_record with key auart = it_order-auart bstkd = it_order-bstkd binary search.
check sy-subrc eq 0.
i_headerx-updateflag = 'I'. "Update flag
i_header-doc_type = it_record-auart. "Sales document type
i_headerx-doc_type = 'X'.
i_header-sales_org = it_record-vkorg. "Sales organization
i_headerx-sales_org = 'X'.
i_header-distr_chan = it_record-vtweg . " Distribution channel
i_headerx-distr_chan = 'X' .
i_header-division = it_record-spart . "Division
i_headerx-division = 'X'.
i_header-sales_grp = it_record-vkgrp . "Sales Group
i_headerx-sales_grp = 'X'.
i_header-sales_off = it_record-vkbur . "Sales office
i_headerx-sales_off = 'X'.
i_header-req_date_h = it_record-vdatu. "Rq.Del.Date
i_headerx-req_date_h = 'X'.
i_header-purch_no_c = it_record-bstkd . "Purchase order
i_headerx-purch_no_c = 'X'.
i_header-pmnttrms = it_record-zterm. "Payment Terms
i_headerx-pmnttrms = 'X'.
i_header-incoterms1 = it_record-inco1. "Incoterm1
i_headerx-incoterms1 = 'X'.
i_header-incoterms2 = it_record-inco2. "Incoterm2
i_headerx-incoterms2 = 'X'.
i_header-ship_type = it_record-vsart. "ship type
i_headerx-ship_type = 'X'.
i_header-bill_date = it_record-fkdat . "billing date
i_headerx-bill_date = 'X'.
i_header-purch_date = it_record-bstdk. "PO date "M1 add
i_headerx-purch_date = 'X'.
i_partners-partn_role = 'AG'.
i_partners-partn_numb = it_record-kunnr_d. "sold to party
append i_partners.
i_partners-partn_role = 'WE'.
i_partners-partn_numb = it_record-kunnr_p. "ship to party
i_partners-unload_pt = it_record-ablad.
append i_partners.
loop at it_record where auart = it_order-auart and bstkd = it_order-bstkd.
i_itemx-updateflag = 'I'.
i_item-itm_number = it_record-posnr. "item no
i_itemx-itm_number = 'X'.
i_item-po_itm_no = it_record-posex. " PO item
i_itemx-po_itm_no = 'X'.
i_item-material = it_record-matnr. "material
i_itemx-material = 'X'.
i_item-target_qty = it_record-wmeng. "quantity
i_itemx-target_qty ='X' .
i_item-target_qu = it_record-vrkme. "Unit
i_itemx-target_qu ='X' .
i_item-price_date = it_record-prsdt. "Pricing Date
i_itemx-price_date ='X'.
i_item-ship_type = it_record-vsart. "ship type
i_itemx-ship_type = 'X'.
i_item-incoterms1 = it_record-inco1. "Incoterm1
i_itemx-incoterms1 = 'X'.
i_item-incoterms2 = it_record-inco2. "Incoterm1
i_itemx-incoterms2 = 'X'.
i_item-pmnttrms = it_record-zterm. "Payment Terms
i_itemx-pmnttrms = 'X'.
i_item-bill_date = it_record-fkdat . "billing date
i_itemx-bill_date = 'X'.
i_item-wbs_elem = it_record-posid. "WBS element
i_itemx-wbs_elem = 'X'.
if not it_record-werks is initial.
i_item-plant = it_record-werks. "plant
i_itemx-plant = 'X'.
endif.
*M2 add
i_item-cust_mat35 = it_record-kdmat.
i_itemx-cust_mat35 = 'X'.
*M2 end
append i_item.
append i_itemx.
* if it_record-auart ne 'ZREP'.
i_cond-itm_number = it_record-posnr.
i_cond-cond_st_no = '011'.
i_cond-cond_count = '01'.
i_cond-cond_type = it_record-kscha. "Condition Type
i_cond-cond_value = it_record-kbetr. "Amount
i_cond-currency = it_record-waers. "Currency
i_cond-cond_p_unt = it_record-kpein . "Per
i_cond-cond_unit = it_record-kmein. "Condition Unit
append i_cond.
i_condx-updateflag = 'U'.
i_condx-itm_number = it_record-posnr.
i_condx-cond_st_no = '011'.
i_condx-cond_count = '01'.
i_condx-cond_type = it_record-kscha.
i_condx-cond_value = 'X'.
i_condx-currency = 'X'.
i_condx-cond_p_unt = 'X'.
i_condx-cond_unit = 'X'.
append i_condx.
* endif.
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.
endloop.
call function 'BAPI_SALESORDER_CREATEFROMDAT2'
exporting
order_header_in = i_header
order_header_inx = i_headerx
importing
salesdocument = e_sodoc
tables
return = it_return
order_items_in = i_item
order_items_inx = i_itemx
order_partners = i_partners
order_schedules_in = i_sch
order_schedules_inx = i_schx
order_conditions_in = i_cond
order_conditions_inx = i_condx.
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 it_order-message ' E: ' it_return-message into it_order-message.
endloop.
modify it_order index lv_tabix.
else.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
" wait up to 1 seconds.
concatenate e_sodoc ' Success.' into it_order-message.
modify it_order index lv_tabix.
endif.
clear:i_header,i_headerx,e_sodoc,it_return,i_item,i_itemx,i_partners,i_sch,i_schx,i_cond,i_condx,e_sodoc.
refresh:it_return,i_item,i_itemx,i_partners,i_sch,i_schx,i_cond,i_condx.
endloop.
loop at it_order.
loop at it_record where auart = it_order-auart and bstkd = it_order-bstkd.
move-corresponding it_record to it_err.
it_err-message = it_order-message.
append it_err.
clear it_err.
endloop .
endloop.
clear it_err3.
refresh it_err3.
append lines of it_err to it_err3.
append lines of it_err2 to it_err3.
sort it_err3 by auart bstkd .
perform write_data.
endform. " UP_SELECT
*&---------------------------------------------------------------------*
*& 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 = '3'
i_end_col = '31'
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 .
data:lv_order type i,
lv_date(10) type c. "Pur.Order .
check not lt_gt_data[] is initial.
lv_order = 1.
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-auart_c = lt_gt_data-value .
perform conversion_order_type using it_record-auart_c
changing it_record-auart.
it_order-auart = it_record-auart.
when '2'.
it_record-vkorg = lt_gt_data-value .
when '3'.
it_record-vtweg = lt_gt_data-value .
when '4'.
it_record-spart = lt_gt_data-value .
when '5'.
it_record-vkbur = lt_gt_data-value .
when '6'.
it_record-vkgrp = lt_gt_data-value .
when '7'.
it_record-kunnr_dc = lt_gt_data-value .
perform add_pre_zero using it_record-kunnr_dc
changing it_record-kunnr_d.
when '8'.
it_record-kunnr_pc = lt_gt_data-value .
perform add_pre_zero using it_record-kunnr_pc
changing it_record-kunnr_p.
when '9'.
it_order-bstkd = lt_gt_data-value.
it_record-bstkd = lt_gt_data-value .
when '10'.
it_record-posex = lt_gt_data-value .
when '11'.
clear:lv_date.
lv_date = lt_gt_data-value .
perform change_char_to_data using lv_date
changing it_record-vdatu.
when '12'.
clear:lv_date.
lv_date = lt_gt_data-value .
perform change_char_to_data using lv_date
changing it_record-prsdt.
when '13'.
it_record-ablad = lt_gt_data-value .
when '14'.
it_record-vsart = lt_gt_data-value .
perform add_pre_zero using it_record-vsart
changing it_record-vsart.
when '15'.
it_record-inco1 = lt_gt_data-value .
when '16'.
it_record-inco2 = lt_gt_data-value .
when '17'.
it_record-zterm = lt_gt_data-value .
when '18'.
clear:lv_date.
lv_date = lt_gt_data-value .
perform change_char_to_data using lv_date
changing it_record-fkdat .
when '19'.
it_record-posnr_c = lt_gt_data-value .
perform add_pre_zero using it_record-posnr_c
changing it_record-posnr.
when '20'.
it_record-matnr_c = lt_gt_data-value.
perform tranfer_material using it_record-matnr_c
changing it_record-matnr.
when '21'.
perform process_num using lt_gt_data-value
changing it_record-wmeng .
when '22'.
it_record-vrkme = lt_gt_data-value.
when '23'.
clear:lv_date.
lv_date = lt_gt_data-value .
perform change_char_to_data using lv_date
changing it_record-edatu .
when '24'.
it_record-kscha = lt_gt_data-value.
when '25'.
perform process_num using lt_gt_data-value
changing it_record-kbetr .
when '26'.
it_record-waers = lt_gt_data-value.
when '27'.
perform process_num using lt_gt_data-value
changing it_record-kpein .
when '28'.
it_record-kmein = lt_gt_data-value.
when '29'.
it_record-posid = lt_gt_data-value.
perform tranfer_wbs using it_record-posid
changing it_record-pspnr.
when '30'.
it_record-werks = lt_gt_data-value.
when '31'. "M1 add
clear:lv_date.
lv_date = lt_gt_data-value .
if lv_date is not initial.
perform change_char_to_data using lv_date
changing it_record-bstdk .
endif.
endcase.
at end of row.
it_record-order = lv_order.
append it_record.
collect it_order.
add 1 to lv_order.
clear:it_record,it_order.
endat.
endloop.
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 CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_DATE text
* <--P_IT_RECORD_VDATU 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 'OIU_ME_CHAR_TO_DATE'
exporting
i_char = p_char
importing
e_date = p_date
exceptions
error_found = 4.
if sy-subrc ne 0.
p_date = '00000000'.
"p_date = sy-datum.
endif.
endif.
endform. " CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*& Form WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form write_data .
if gt_fieldcat is initial.
perform set_fieldcat.
endif.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
* i_callback_program = t_repid
* i_callback_pf_status_set = gs_status
* i_callback_user_command = gs_ucomm
* i_grid_title = l_title
* is_layout = gs_layout
it_fieldcat = gt_fieldcat
i_save = 'A'
* IT_EVENTS = LT_EVTS
tables
t_outtab = it_err3
exceptions
program_error = 1
others = 2.
endform. " WRITE_DATA
*&---------------------------------------------------------------------*
*& Form SET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form set_fieldcat .
perform fieldcat_init using 'AUART_C' 'Order Type' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VKORG' 'Sales Organization' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VTWEG' 'Distribution channel' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'SPART' 'Division' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VKBUR' 'Sales Office' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VKGRP' 'Sales Group' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KUNNR_DC' 'Sold-to Party' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KUNNR_PC' 'Ship-to Party' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'BSTKD' 'Pur.Order' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'POSEX' 'PO Item' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VDATU' 'Rq.Del.Date' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'PRSDT' 'Pricing Date' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'ABLAD' 'Unloading Point' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VSART' 'Shiping type' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'INCO1' 'Incoterm1' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'INCO2' 'Incoterm2' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'ZTERM' 'Payment Terms' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'FKDAT' 'Billing Date' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'POSNR_C' 'Sales Document Item' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'MATNR_C' 'Material' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'WMENG' 'Order Quantity' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'VRKME' 'Sales Unit' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'EDATU' 'First Delivery Date' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KSCHA' 'Condition Type' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KBETR' 'Amount' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'WAERS' 'Currency' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KPEIN' 'Per' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'KMEIN' 'condition Unit' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'POSID' 'WBS element' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'WERKS' 'Plamt' '' '' '' '' '' '' '' '' '' ''.
perform fieldcat_init using 'BSTDK' 'PO Date' '' '' '' '' '' '' '' '' '' ''. "M1 add
perform fieldcat_init using 'KDMAT' 'Customer Material' '' '' '' '' '' '' '' '' '' ''. "M2 add
perform fieldcat_init using 'MESSAGE' 'Message' '100' '' '' '' '' '' '' '' '' ''.
endform. " SET_FIELDCAT
*&---------------------------------------------------------------------*
*& Form fieldcat_init
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FIELD_NAME text
* -->FIELD_TEXT text
* -->FIELD_LENTH text
* -->FIELD_EDIT text
* -->FIELD_TYPE text
* -->FIELD_KEY text
* -->FIELD_HOTSPOT text
* -->FIELD_CHECKBOX text
* -->FIELD_NO_ZERO text
* -->FIELD_REF_TABNAME text
* -->FIELD_REF_FIELDNAME text
* -->FIELD_EMPHASIZE text
*----------------------------------------------------------------------*
form fieldcat_init using
field_name type c
field_text type c
field_lenth type i
field_edit type c
field_type type c
field_key type c
field_hotspot type c
field_checkbox type c
field_no_zero type c
field_ref_tabname type c
field_ref_fieldname type c
field_emphasize type c.
clear gs_fieldcat.
gs_fieldcat-fieldname = field_name.
gs_fieldcat-seltext_l = field_text.
gs_fieldcat-seltext_m = field_text.
gs_fieldcat-seltext_s = field_text.
gs_fieldcat-checkbox = field_checkbox.
* gs_fieldcat-round = 0.
gs_fieldcat-edit = field_edit.
gs_fieldcat-datatype = field_type.
if field_type = 'Q'.
gs_fieldcat-just = 'R'.
gs_fieldcat-datatype = 'QUAN'.
* gs_fieldcat-qfieldname = 'MEINS'.
gs_fieldcat-decimals_out = 3.
else.
gs_fieldcat-just = 'L'.
endif.
gs_fieldcat-key = field_key.
gs_fieldcat-hotspot = field_hotspot .
gs_fieldcat-outputlen = field_lenth.
gs_fieldcat-ddic_outputlen = field_lenth.
gs_fieldcat-no_zero = field_no_zero.
gs_fieldcat-ref_tabname = field_ref_tabname.
gs_fieldcat-ref_fieldname = field_ref_fieldname.
gs_fieldcat-emphasize = field_emphasize .
append gs_fieldcat to gt_fieldcat.
endform. "fieldcat_init
*&---------------------------------------------------------------------*
*& 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 CHECK_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_it_record .
data: lv_flag2 type c .
clear: lv_flag2.
loop at it_record.
lv_tabix = sy-tabix.
clear:lv_flag2,it_record-message.
"Order Type
if it_record-auart is initial.
lv_flag2 = 'X'.
concatenate it_record-message ' Order Type Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"PO No.
if p_empty is initial.
if it_record-bstkd is initial.
lv_flag2 = 'X'.
concatenate it_record-message ' PO No. is empty.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Sales Organization
read table it_tvko with key vkorg = it_record-vkorg binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Sales Organization Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Distribution channel
read table it_tvtw with key vtweg = it_record-vtweg binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Distribution channel Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Division
read table it_tspa with key spart = it_record-spart binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Division Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Sales Office
read table it_tvbur with key vkbur = it_record-vkbur binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Sales Office Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Sales Group
read table it_tvkgr with key vkgrp = it_record-vkgrp binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Sales Group Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Sold-to Party
read table it_kna1 with key kunnr = it_record-kunnr_d binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Sold-to Party Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Ship-to Party
read table it_kna1 with key kunnr = it_record-kunnr_p binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Ship-to Party Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Shiping type
read table it_t173 with key vsart = it_record-vsart binary search .
if sy-subrc ne 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Shiping type Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Incoterm1
if it_record-inco1 ne space .
read table it_tinc with key inco1 = it_record-inco1 binary search .
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Incoterm1 Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Payment Terms
if it_record-zterm ne space .
read table it_t052 with key zterm = it_record-zterm binary search .
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Payment Terms Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Material
read table it_mara with key matnr = it_record-matnr binary search.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Material Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
else.
if it_record-auart_c ne 'ZSP' and it_record-auart_c ne 'ZCOS'. "M3
read table it_mvke with key matnr = it_record-matnr
vkorg = it_record-vkorg
vtweg = it_record-vtweg
spart = it_record-spart binary search.
* select single mtart into lv_mtart
* from mara as a
* inner join mvke as b on a~matnr = b~matnr
* where a~matnr = it_record-matnr
* and b~vkorg = it_record-vkorg
* and b~vtweg = it_record-vtweg
* and a~spart = it_record-spart .
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-matnr_c it_record-vkorg it_record-vtweg it_record-spart 'No Exists.'
into it_record-message separated by space.
modify it_record index lv_tabix.
endif.
endif.
endif.
"Quantity
if it_record-wmeng = 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Quantity = 0 is error.' into it_record-message.
modify it_record index lv_tabix.
elseif it_record-wmeng < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Quantity is negative or Quantity not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Condition Type
read table it_t685 with key kschl = it_record-kscha binary search .
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Condition Type Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Amount
if it_record-kbetr = 0.
* lv_flag2 = 'X'.
* concatenate it_record-message
* ' Amount = 0 is error.' into it_record-message.
* modify it_record index lv_tabix.
elseif it_record-kbetr < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Amount is negative or Amount not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Per
if it_record-kpein = 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Per = 0 is error.' into it_record-message.
modify it_record index lv_tabix.
elseif it_record-kpein < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Per is negative or Per not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Production Lot
if it_record-pspnr is initial.
lv_flag2 = 'X'.
concatenate it_record-message ' Production Lot Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"plant
if not it_record-werks is initial.
read table it_t001w with key werks = it_record-werks binary search.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Plant Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"First Delivery Date
if it_record-edatu = '00000000'.
lv_flag2 = 'X'.
concatenate it_record-message ' First Delivery Date Is Empty'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Sales Document Item
if it_record-posnr = '000000'.
lv_flag2 = 'X'.
concatenate it_record-message ' Sales Document Item Is Empty'
into it_record-message.
modify it_record index lv_tabix.
endif.
*M2 add
" customer material
read table it_knmt with key vkorg = it_record-vkorg
vtweg = it_record-vtweg
kunnr = it_record-kunnr_p
matnr = it_record-matnr .
if sy-subrc eq 0.
it_record-kdmat = it_knmt-kdmat.
modify it_record index lv_tabix.
endif.
*m2 End
if lv_flag2 <> 'X'.
it_record-message = ' OK.'.
modify it_record index lv_tabix.
endif.
endloop.
endform. " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*& Form CONVERSION_ORDER_TYPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RECORD_AUART_C text
* <--P_IT_RECORD_AUART text
*----------------------------------------------------------------------*
form conversion_order_type using p_old
changing p_new.
translate p_old to upper case.
call function 'CONVERSION_EXIT_AUART_INPUT'
exporting
input = p_old
importing
output = p_new.
endform. " CONVERSION_ORDER_TYPE
*&---------------------------------------------------------------------*
*& Form TRANFER_MATERIAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ITAB_MATNR text
* <--P_ITAB_MATNR_C text
*----------------------------------------------------------------------*
form tranfer_material using p_old
changing p_new .
translate p_old to upper case.
call function 'CONVERSION_EXIT_MATN1_INPUT'
exporting
input = p_old
importing
output = p_new
exceptions
length_error = 1
others = 2.
if sy-subrc <> 0.
p_new = p_old.
endif.
endform. "tranfer_material
*&---------------------------------------------------------------------*
*& Form TRANFER_WBS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RECORD_POSID text
* <--P_IT_RECORD_PSPNR text
*----------------------------------------------------------------------*
form tranfer_wbs using p_old
changing p_new .
translate p_old to upper case.
call function 'CONVERSION_EXIT_ABPSP_INPUT'
exporting
input = p_old
importing
output = p_new
exceptions
not_found = 1
others = 2.
if sy-subrc <> 0.
clear:p_new.
endif.
endform. " TRANFER_WBS
*&---------------------------------------------------------------------*
*& Form GET_CHECK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_check_data .
select vkorg into table it_tvko
from tvko .
sort it_tvko by vkorg .
select vtweg into table it_tvtw
from tvtw.
sort it_tvtw by vtweg .
select spart into table it_tspa
from tspa.
sort it_tspa by spart .
select vkbur into table it_tvbur
from tvbur .
sort it_tvbur by vkbur .
select vkgrp into table it_tvkgr
from tvkgr .
sort it_tvkgr by vkgrp .
select kunnr into table it_kna1
from kna1.
sort it_kna1 by kunnr .
select vsart into table it_t173
from t173 .
sort it_t173 by vsart .
select inco1 into table it_tinc
from tinc.
sort it_tinc by inco1.
select distinct zterm into table it_t052
from t052.
sort it_t052 by zterm.
select distinct kschl into table it_t685
from t685.
sort it_t685 by kschl.
select werks into table it_t001w
from t001w.
sort it_t001w by werks.
select matnr mtart into table it_mara
from mara
for all entries in it_record
where matnr = it_record-matnr.
sort it_mara by matnr.
select distinct a~matnr a~spart b~vkorg b~vtweg
into corresponding fields of table it_mvke
from mara as a
inner join mvke as b on a~matnr = b~matnr
for all entries in it_record
where a~matnr = it_record-matnr
and b~vkorg = it_record-vkorg
and b~vtweg = it_record-vtweg
and a~spart = it_record-spart .
sort it_mvke by matnr vkorg vtweg spart.
*M2 add
select vkorg vtweg kunnr matnr kdmat
into corresponding fields of table it_knmt
from knmt
for all entries in it_record
where vkorg = it_record-vkorg
and vtweg = it_record-vtweg
and kunnr = it_record-kunnr_p
and matnr = it_record-matnr.
sort it_knmt by vkorg vtweg kunnr matnr.
*M2 End
endform. " GET_CHECK_DATA