*&---------------------------------------------------------------------*
*& Progarm : ZPPR010 Author : Jimmy Wong
*& Created : 12 Oct 2012 App : PP
*& Title : Upload Prodution Order
*& Description : Upload Prodution Order
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 12 Oct 2012 the first version
*& the last update time 2012.10.24 14:00
*&---------------------------------------------------------------------*
report zppr010 no standard page heading.
data:begin of it_record occurs 0,
order type i,
matnr like afpo-matnr,
matnr_c(20) type c,
posid like prps-posid,
werks like pbim-werks,
auart like t003o-auart,
aufnr like afko-aufnr,
gamng like afko-gamng,
gamng_c(17) type c,
gltrp like afko-gltrp,
gltrp_c(10) type c,
posnr like resbd-posnr,
posnr_c type c length 4,
matnr2 like resbd-matnr,
matnr2_c(20) type c,
menge like resbd-menge,
menge_c(18) type c,
postp like resbd-postp,
vornr like afvgi-vornr,
vornr_c(4) type c,
lgort like resbd-lgort,
rgekz like resbd-rgekz,
sobkz_d like resbd-sobkz_d,
message(700) type c,
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: it_err5 like it_record occurs 0 with header line.
data: it_bdcmsg like bdcmsgcoll occurs 0 with header line,
bdcdata like bdcdata occurs 0 with header line.
types:lv_type type c length 50.
data:begin of itab occurs 0,
matnr_c type lv_type ,
posid type lv_type ,
werks type lv_type ,
auart type lv_type ,
aufnr type lv_type ,
gamng_c type lv_type ,
gltrp_c type lv_type ,
posnr_c type lv_type ,
matnr2_c type lv_type ,
menge_c type lv_type ,
postp type lv_type ,
vornr_c type lv_type ,
lgort type lv_type ,
rgekz type lv_type ,
sobkz_d type lv_type ,
end of itab.
data:begin of it_tab occurs 0.
include structure itab.
data: message(700) type c,
end of it_tab.
data: begin of it_aufnr occurs 0,
aufnr like afko-aufnr,
message(700) type c,
end of it_aufnr.
data: it_aufnr_tmp like it_aufnr occurs 0 with header line.
data: it_aufnr_tmp2 like it_aufnr occurs 0 with header line.
data: begin of it_down occurs 0,
line(1000) type c,
end of it_down .
data: begin of i_file occurs 0,
line(1000) type c,
end of i_file.
data: gv_file like rlgrap-filename.
data: msg type string,
lv_tabix like sy-tabix.
data: pr_co01 type c,
lv_total type i,
lv_fail type i,
lv_msg type c length 100,
it_return like bapiret2 occurs 0 with header line,
lv_text like t100-text,
lv_success type i.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameter : filename like rlgrap-filename obligatory.
parameters: pr_error like rlgrap-filename obligatory default 'D:\Open Data'.
parameters: pr_mode type ctu_mode default 'N' .
* parameters: pr_co01 as checkbox default 'X'.
selection-screen end of block 1.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for filename.
perform f4_filename using filename.
at selection-screen on value-request for pr_error.
perform f4_filename using pr_error.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform up_select.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form F4_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PR_ERROR text
*----------------------------------------------------------------------*
form f4_filename using p_filename.
call function 'F4_FILENAME'
* EXPORTING
* PROGRAM_NAME = SYST-CPROG
* DYNPRO_NUMBER = SYST-DYNNR
* FIELD_NAME =
importing
file_name = p_filename.
endform. " F4_FILENAME
*&---------------------------------------------------------------------*
*& Form UP_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form up_select .
clear:it_record,it_record[],it_aufnr,it_aufnr[].
perform get_data.
perform get_it_record.
perform check_it_record.
loop at it_record.
if not it_record-message = ' OK.'.
move-corresponding it_record to it_err2.
it_aufnr_tmp2-aufnr = it_record-aufnr.
collect it_aufnr_tmp2.
append it_err2.
clear it_err2.
endif.
read table it_err2 with key aufnr = it_record-aufnr.
if sy-subrc ne 0.
it_aufnr-aufnr = it_record-aufnr.
collect it_aufnr.
else.
delete it_aufnr where aufnr = it_record-aufnr.
endif.
it_aufnr_tmp-aufnr = it_record-aufnr.
collect it_aufnr_tmp.
endloop.
describe table it_aufnr_tmp lines lv_total.
describe table it_aufnr_tmp2 lines lv_fail.
if not it_aufnr is initial.
loop at it_aufnr.
clear:it_err5 ,it_err5[],it_bdcmsg,it_bdcmsg[],it_return,it_return[], bdcdata, bdcdata[],it_aufnr-message.
lv_tabix = sy-tabix.
loop at it_record into it_err5
where aufnr = it_aufnr-aufnr.
append it_err5.
endloop.
read table it_record with key aufnr = it_aufnr-aufnr.
if sy-subrc eq 0.
if pr_co01 = 'X'.
perform process_bdc_header_co01.
else.
perform process_bdc_header.
endif.
call function 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
tables
imt_bdcmsgcoll = it_bdcmsg
ext_return = it_return.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
it_aufnr-message = it_return-message.
* select single text into it_aufnr-message
* from t100 where sprsl = it_bdcmsg-msgspra
* and arbgb = it_bdcmsg-msgid
* and msgnr = it_bdcmsg-msgnr.
* concatenate it_aufnr-message it_bdcmsg-msgv1 it_bdcmsg-msgv2 it_bdcmsg-msgv3 it_bdcmsg-msgv4
* into it_aufnr-message separated by space.
*
* CALL FUNCTION 'PI_BP_GET_MESSAGE_TEXT'
* EXPORTING
* IV_MESSAGE_ID = it_bdcmsg-msgid
* IV_MESSAGE_TYPE = 'E'
* IV_MESSAGE_NUMBER = it_bdcmsg-msgnr
* IV_MESSAGE_V1 = it_bdcmsg-msgv1
* IV_MESSAGE_V2 = it_bdcmsg-msgv2
* IV_MESSAGE_V3 = it_bdcmsg-msgv3
* IV_MESSAGE_V4 = it_bdcmsg-msgv4
* IMPORTING
* EV_MESSAGE_TEXT = lv_text.
else.
it_aufnr-message = ' OK.'.
" concatenate it_aufnr-message it_aufnr-aufnr ' is Posted' into it_aufnr-message.
endif.
endif.
modify it_aufnr index lv_tabix.
endloop.
endif.
clear it_err3.
refresh it_err3.
loop at it_aufnr where message ne ' OK.' .
loop at it_record where aufnr = it_aufnr-aufnr .
move-corresponding it_record to it_err3.
it_err3-message = it_aufnr-message.
append it_err3.
clear it_err3.
endloop.
lv_fail = lv_fail + 1.
endloop.
append lines of it_err2 to it_err3.
sort it_err3 by order ascending.
if not it_err3[] is initial.
perform down_file .
perform download_local.
endif.
lv_success = lv_total - lv_fail .
write :/1 'Production Order Record.'.
lv_msg = lv_total.
condense lv_msg no-gaps.
concatenate 'Total : ' lv_msg into lv_msg.
write :/1 lv_msg.
lv_msg = lv_success.
condense lv_msg no-gaps.
concatenate 'Success : ' lv_msg into lv_msg.
write :/1 lv_msg.
lv_msg = lv_fail.
condense lv_msg no-gaps.
concatenate 'Fail : ' lv_msg into lv_msg.
write :/1 lv_msg.
endform. " UP_SELECT
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
clear:itab,itab[] .
data: lv_file type string.
lv_file = filename.
call function 'GUI_UPLOAD'
exporting
filename = lv_file
filetype = 'ASC'
has_field_separator = 'X'
tables
data_tab = itab
exceptions
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
others = 17.
if sy-subrc ne 0.
clear : msg.
concatenate 'Upload Filename ' filename ' Is Error!' into msg.
message msg type 'I'.
exit.
endif.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form GET_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_it_record .
data:lv_order type i.
check not itab[] is initial.
lv_order = 1.
loop at itab.
move-corresponding itab to it_record.
it_record-matnr = it_record-matnr_c.
replace '-' with '' into it_record-matnr.
replace '-' with '' into it_record-matnr.
replace '-' with '' into it_record-matnr.
condense it_record-matnr no-gaps.
translate it_record-sobkz_d to upper case.
* perform process_num using it_record-gamng_c
* changing it_record-gamng .
it_record-gamng = it_record-gamng_c.
perform change_char_to_data using it_record-gltrp_c
changing it_record-gltrp.
perform add_pre_zero using it_record-aufnr
changing it_record-aufnr.
it_record-matnr2 = it_record-matnr2_c.
replace '-' with '' into it_record-matnr2.
replace '-' with '' into it_record-matnr2.
replace '-' with '' into it_record-matnr2.
condense it_record-matnr2 no-gaps.
* perform process_num using it_record-menge_c
* changing it_record-menge .
it_record-menge = it_record-menge_c.
perform add_pre_zero using it_record-vornr_c
changing it_record-vornr.
it_record-order = lv_order.
append it_record.
lv_order = lv_order + 1.
clear : it_record.
endloop.
delete it_record where matnr = space and aufnr = space.
endform. " GET_IT_RECORD
*&---------------------------------------------------------------------*
*& 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_dec = p_change.
endif.
endform. " PROCESS_NUM
*&---------------------------------------------------------------------*
*& 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 ADD_PRE_ZERO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RECORD_CHARG text
* <--P_IT_RECORD_CHARG 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 CHECK_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_it_record .
data: lv_flag2 type c,
lv_bsart like t161-bsart,
lv_ebeln like ekko-ebeln,
lv_lifnr like lfa1-lifnr,
lv_zterm like t052-zterm,
lv_inco1 like tinc-inco1,
lv_waers like tcurc-waers,
lv_ekorg like t024e-ekorg,
lv_ekgrp like t024-ekgrp,
lv_bukrs like t001-bukrs,
lv_mtart like mara-mtart,
lv_meins like t006-msehi,
lv_werks like t001w-werks,
lv_posid like prps-posid,
lv_postp like t418-postp,
lv_posnr type i,
lv_i type i,
lv_j type i,
lv_aufnr like afko-aufnr,
lv_lgort like t001l-lgort .
clear: lv_flag2.
sort it_record by order .
lv_posnr = 10.
loop at it_record.
lv_tabix = sy-tabix.
clear:lv_flag2,it_record-message.
if lv_aufnr <> it_record-aufnr.
lv_posnr = 10.
endif.
lv_aufnr = it_record-aufnr.
"Material Number
select single mtart into lv_mtart
from mara
where matnr = it_record-matnr.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Material Number Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"WBS Element
if pr_co01 ne 'X'.
select single pspnr into lv_posid
from prps
where posid = it_record-posid.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' WBS Element Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Production plant
select single werks into lv_werks
from t001w
where werks = it_record-werks.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Production plant Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Order type
select single werks into lv_werks
from t399x
where werks = it_record-werks
and auart = it_record-auart.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Order type Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Order Number
select single aufnr into it_record-aufnr
from afko
where aufnr = it_record-aufnr.
if sy-subrc eq 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Order Number Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Total Qty
if it_record-gamng = 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Total Qty = 0 is error.' into it_record-message.
modify it_record index lv_tabix.
elseif it_record-gamng < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Total Qty is negative or Total Qty not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Finish Date
if it_record-gltrp = '00000000'.
lv_flag2 = 'X'.
concatenate it_record-message ' Finish Date Format MM/dd/yyyy.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Item Number
* if it_record-posnr is initial.
* lv_flag2 = 'X'.
* concatenate it_record-message ' Item Number Error.'
* into it_record-message.
* modify it_record index lv_tabix.
* endif.
"Component Number
if not it_record-matnr2 is initial.
select single mtart into lv_mtart
from mara
where matnr = it_record-matnr2.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Component Number Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
else.
* if lv_mtart = 'ZNON'.
* lv_flag2 = 'X'.
* concatenate it_record-message ' Component Number Material Type IS ZNON'
* into it_record-message.
* modify it_record index lv_tabix.
* endif.
endif.
"Requirement Quantity
if it_record-menge = 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Requirement Quantity = 0 is error.' into it_record-message.
modify it_record index lv_tabix.
elseif it_record-menge < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Requirement Quantity is negative or Requirement Quantity not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Item Category
select single postp into lv_postp
from t418
where postp = it_record-postp.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Item Category Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Operation
if it_record-vornr is initial.
lv_flag2 = 'X'.
concatenate it_record-message ' Operation Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Storage location
if it_record-lgort ne space .
select single lgort into lv_lgort
from t001l
where lgort = it_record-lgort
and werks = it_record-werks.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Storage location Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Special Stock
if it_record-sobkz_d ne space .
if it_record-sobkz_d <> '1' and it_record-sobkz_d <> '2'
and it_record-sobkz_d <> '2' and it_record-sobkz_d <> '4'.
lv_flag2 = 'X'.
concatenate it_record-message ' Special Stock Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
it_record-posnr_c = lv_posnr.
condense it_record-posnr_c no-gaps.
lv_i = strlen( it_record-posnr_c ).
lv_j = 4 - lv_i.
if lv_j > 0.
overlay it_record-posnr+0(lv_j) with '0000' only space.
else.
endif.
if lv_i ne 0.
it_record-posnr+lv_j(lv_i) = it_record-posnr_c.
endif.
it_record-posnr_c = it_record-posnr.
add 10 to lv_posnr .
modify it_record index lv_tabix.
endif.
if lv_flag2 <> 'X'.
it_record-message = ' OK.'.
modify it_record index lv_tabix.
endif.
endloop.
endform. " CHECK_IT_RECORD
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
form bdc_field using fnam fval.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endform. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form PROCESS_BDC_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_bdc_header .
perform bdc_dynpro using 'SAPLCOKO1' '0240'. "CO01 diff
perform bdc_field using 'BDC_CURSOR' 'AUFPAR-PP_AUFART'.
perform bdc_field using 'AFPOD-PROJN' it_record-posid. "CO01 diff
perform bdc_field using 'CAUFVD-MATNR' it_record-matnr.
perform bdc_field using 'CAUFVD-WERKS' it_record-werks.
perform bdc_field using 'AUFPAR-PP_AUFART' it_record-auart.
perform bdc_field using 'CAUFVD-AUFNR' it_record-aufnr.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
perform bdc_field using 'CAUFVD-GLTRP' it_record-gltrp_c.
perform bdc_field using 'CAUFVD-GSTRP' it_record-gltrp_c. "add by Lisa_wong 11/05/2012
perform bdc_field using 'CAUFVD-GAMNG' it_record-gamng_c..
* perform bdc_field using 'CAUFVD-GMEIN' 'PC'.
perform bdc_field using 'CAUFVD-TERKZ' '3'.
* perform bdc_field using 'CAUFVD-FHORI' '000'.
**" PP11
if it_record-auart+2(1) = '1'.
* PERFORM bdc_dynpro USING 'SAPLCOSD' '0310'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=CANC'.
else.
* PERFORM bdc_dynpro USING 'SAPLCOSD' '0310'. " PP12 no popup
* PERFORM bdc_field USING 'BDC_OKCODE' '=OPT2'.
endif.
if not it_record-matnr2 is initial.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=KPU2'.
perform bdc_field using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
perform bdc_field using 'CAUFVD-GLTRP' it_record-gltrp_c.
perform bdc_field using 'CAUFVD-GSTRP' it_record-gltrp_c. "add by Lisa_wong 11/05/2012
perform bdc_field using 'CAUFVD-GAMNG' it_record-gamng_c..
* perform bdc_field using 'CAUFVD-GMEIN' 'PC'.
perform bdc_field using 'CAUFVD-TERKZ' '3'.
* perform bdc_field using 'CAUFVD-FHORI' '000'.
endif.
"PP11 select \ delete All
if it_record-auart+2(1) = '1'.
* PERFORM bdc_dynpro USING 'SAPLCOMK' '0120'.
* PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=AMAK'.
*
* PERFORM bdc_dynpro USING 'SAPLCOMK' '0120'.
* PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=DEL'.
endif.
if not it_record-matnr2 is initial.
perform process_component.
endif.
if not it_record-matnr2 is initial.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
else.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
endif.
call transaction 'CO10' "CO01 diff
using bdcdata
mode pr_mode "Background performance
update 'S' "local updata
messages into it_bdcmsg. "all message table
endform. " PROCESS_BDC_HEADER
*&---------------------------------------------------------------------*
*& Form PROCESS_BDC_HEADER_CO01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_bdc_header_co01 .
perform bdc_dynpro using 'SAPLCOKO1' '0100'.
perform bdc_field using 'BDC_CURSOR' 'AUFPAR-PP_AUFART'.
perform bdc_field using 'CAUFVD-MATNR' it_record-matnr.
perform bdc_field using 'CAUFVD-WERKS' it_record-werks.
perform bdc_field using 'AUFPAR-PP_AUFART' it_record-auart.
perform bdc_field using 'CAUFVD-AUFNR' it_record-aufnr.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
perform bdc_field using 'CAUFVD-GLTRP' it_record-gltrp_c.
perform bdc_field using 'CAUFVD-GAMNG' it_record-gamng_c..
* perform bdc_field using 'CAUFVD-GMEIN' 'PC'.
perform bdc_field using 'CAUFVD-TERKZ' '2'.
* perform bdc_field using 'CAUFVD-FHORI' '000'.
**" PP11
if it_record-auart+2(1) = '1'.
* PERFORM bdc_dynpro USING 'SAPLCOSD' '0310'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=CANC'.
else.
* PERFORM bdc_dynpro USING 'SAPLCOSD' '0310'. " PP12 no popup
* PERFORM bdc_field USING 'BDC_OKCODE' '=OPT2'.
endif.
if not it_record-matnr2 is initial.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=KPU2'.
endif.
"PP11 select \ delete All
if it_record-auart+2(1) = '1'.
* PERFORM bdc_dynpro USING 'SAPLCOMK' '0120'.
* PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=AMAK'.
*
* PERFORM bdc_dynpro USING 'SAPLCOMK' '0120'.
* PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=DEL'.
endif.
if not it_record-matnr2 is initial.
perform process_component.
endif.
if not it_record-matnr2 is initial.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
else.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
endif.
call transaction 'CO01'
using bdcdata
mode pr_mode "Background performance
update 'S' "local updata
messages into it_bdcmsg. "all message table
endform. " PROCESS_BDC_HEADER_CO01
*&---------------------------------------------------------------------*
*& Form PROCESS_COMPONENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_component .
data:lv_cur type i value 0,
lv_mod type i,
lv_fname(30) type c,
lv_temp(2) type c,
lv_len type i.
lv_mod = lines( it_err5 ) .
loop at it_err5.
lv_cur = lv_cur + 1.
move lv_cur to lv_temp.
lv_len = strlen( lv_temp ).
if lv_len = 1.
concatenate '0' lv_temp into lv_temp.
endif.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
concatenate 'RESBD-POSNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-posnr.
concatenate 'RESBD-MATNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-matnr2.
concatenate 'RESBD-MENGE(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-menge_c.
concatenate 'RESBD-POSTP(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-postp.
concatenate 'RESBD-VORNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-vornr.
concatenate 'RESBD-LGORT(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-lgort.
concatenate 'RESBD-RGEKZ(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname ''."it_err5-rgekz.
concatenate 'RESBD-SOBKZ_D(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-sobkz_d.
perform bdc_field using 'BDC_OKCODE' '/00'.
*
perform bdc_dynpro using 'SAPLCOMD' '0110'.
perform bdc_field using 'RESBD-MATNR' it_err5-matnr2.
perform bdc_field using 'RESBD-POSNR' it_err5-posnr.
perform bdc_field using 'RESBD-LGORT' it_err5-lgort.
perform bdc_field using 'RESBD-MENGE' it_err5-menge_c.
perform bdc_field using 'RESBD-RGEKZ' ''.
* PERFORM bdc_field USING 'RESBD-SPLKZ' ''.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
lv_mod = lv_cur mod 13.
if lv_mod = 0.
clear:lv_cur.
lv_cur = 1.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=P+'.
endif.
endloop.
endform. " PROCESS_COMPONENT
*&---------------------------------------------------------------------*
*& Form DOWN_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form down_file .
clear:it_down,it_down[].
concatenate
'Material'
'WBS Element'
'Production plant'
'Order type'
'Order Number'
'Total Qty'
'Finish Date'
'Item'
'Component Number'
'Requirement Quantity'
'Item Category'
'Operation'
'Storage location'
'Backflush'
'Special Stock'
'Message'
into it_down separated by cl_abap_char_utilities=>horizontal_tab.
append it_down.
loop at it_err3.
move-corresponding it_err3 to it_tab.
concatenate it_tab-matnr_c
it_tab-posid
it_tab-werks
it_tab-auart
it_tab-aufnr
it_tab-gamng_c
it_tab-gltrp_c
it_tab-posnr_c
it_tab-matnr2_c
it_tab-menge_c
it_tab-postp
it_tab-vornr_c
it_tab-lgort
it_tab-rgekz
it_tab-sobkz_d
it_tab-message
into it_down separated by cl_abap_char_utilities=>horizontal_tab.
condense it_down .
append it_down .
endloop.
endform. " DOWN_FILE
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_LOCAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form download_local .
data: lv_filename type string.
perform get_file.
lv_filename = gv_file.
call function 'GUI_DOWNLOAD'
exporting
filename = lv_filename
filetype = 'ASC'
write_field_separator = 'X'
tables
data_tab = it_down
exceptions
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
others = 22.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
endform. " DOWNLOAD_LOCAL
*&---------------------------------------------------------------------*
*& Form GET_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_file .
data: wa_key(30) type c.
data: lv_i type i.
data: lv_c(1) type c.
data: wa_date(8) type c.
data: wa_time like sy-uzeit.
data: lv_char type c.
wa_date = sy-datum.
wa_time = sy-uzeit.
concatenate 'ProdOrder' wa_date wa_time into wa_key.
concatenate wa_key '.txt' into wa_key.
lv_i = strlen( pr_error ).
lv_i = lv_i - 1 .
if lv_i > 1.
lv_c = pr_error+lv_i(1).
endif.
* if p_test = 'X'.
* lv_char = '\' .
* else.
* lv_char = '/' .
* endif.
lv_char = '\' .
if lv_c eq lv_char.
concatenate pr_error wa_key into gv_file.
else.
concatenate pr_error lv_char wa_key into gv_file.
endif.
endform. " GET_FILE
*& Progarm : ZPPR010 Author : Jimmy Wong
*& Created : 12 Oct 2012 App : PP
*& Title : Upload Prodution Order
*& Description : Upload Prodution Order
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 12 Oct 2012 the first version
*& the last update time 2012.10.24 14:00
*&---------------------------------------------------------------------*
report zppr010 no standard page heading.
data:begin of it_record occurs 0,
order type i,
matnr like afpo-matnr,
matnr_c(20) type c,
posid like prps-posid,
werks like pbim-werks,
auart like t003o-auart,
aufnr like afko-aufnr,
gamng like afko-gamng,
gamng_c(17) type c,
gltrp like afko-gltrp,
gltrp_c(10) type c,
posnr like resbd-posnr,
posnr_c type c length 4,
matnr2 like resbd-matnr,
matnr2_c(20) type c,
menge like resbd-menge,
menge_c(18) type c,
postp like resbd-postp,
vornr like afvgi-vornr,
vornr_c(4) type c,
lgort like resbd-lgort,
rgekz like resbd-rgekz,
sobkz_d like resbd-sobkz_d,
message(700) type c,
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: it_err5 like it_record occurs 0 with header line.
data: it_bdcmsg like bdcmsgcoll occurs 0 with header line,
bdcdata like bdcdata occurs 0 with header line.
types:lv_type type c length 50.
data:begin of itab occurs 0,
matnr_c type lv_type ,
posid type lv_type ,
werks type lv_type ,
auart type lv_type ,
aufnr type lv_type ,
gamng_c type lv_type ,
gltrp_c type lv_type ,
posnr_c type lv_type ,
matnr2_c type lv_type ,
menge_c type lv_type ,
postp type lv_type ,
vornr_c type lv_type ,
lgort type lv_type ,
rgekz type lv_type ,
sobkz_d type lv_type ,
end of itab.
data:begin of it_tab occurs 0.
include structure itab.
data: message(700) type c,
end of it_tab.
data: begin of it_aufnr occurs 0,
aufnr like afko-aufnr,
message(700) type c,
end of it_aufnr.
data: it_aufnr_tmp like it_aufnr occurs 0 with header line.
data: it_aufnr_tmp2 like it_aufnr occurs 0 with header line.
data: begin of it_down occurs 0,
line(1000) type c,
end of it_down .
data: begin of i_file occurs 0,
line(1000) type c,
end of i_file.
data: gv_file like rlgrap-filename.
data: msg type string,
lv_tabix like sy-tabix.
data: pr_co01 type c,
lv_total type i,
lv_fail type i,
lv_msg type c length 100,
it_return like bapiret2 occurs 0 with header line,
lv_text like t100-text,
lv_success type i.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
parameter : filename like rlgrap-filename obligatory.
parameters: pr_error like rlgrap-filename obligatory default 'D:\Open Data'.
parameters: pr_mode type ctu_mode default 'N' .
* parameters: pr_co01 as checkbox default 'X'.
selection-screen end of block 1.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for filename.
perform f4_filename using filename.
at selection-screen on value-request for pr_error.
perform f4_filename using pr_error.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
perform up_select.
end-of-selection.
*&---------------------------------------------------------------------*
*& Form F4_FILENAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PR_ERROR text
*----------------------------------------------------------------------*
form f4_filename using p_filename.
call function 'F4_FILENAME'
* EXPORTING
* PROGRAM_NAME = SYST-CPROG
* DYNPRO_NUMBER = SYST-DYNNR
* FIELD_NAME =
importing
file_name = p_filename.
endform. " F4_FILENAME
*&---------------------------------------------------------------------*
*& Form UP_SELECT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form up_select .
clear:it_record,it_record[],it_aufnr,it_aufnr[].
perform get_data.
perform get_it_record.
perform check_it_record.
loop at it_record.
if not it_record-message = ' OK.'.
move-corresponding it_record to it_err2.
it_aufnr_tmp2-aufnr = it_record-aufnr.
collect it_aufnr_tmp2.
append it_err2.
clear it_err2.
endif.
read table it_err2 with key aufnr = it_record-aufnr.
if sy-subrc ne 0.
it_aufnr-aufnr = it_record-aufnr.
collect it_aufnr.
else.
delete it_aufnr where aufnr = it_record-aufnr.
endif.
it_aufnr_tmp-aufnr = it_record-aufnr.
collect it_aufnr_tmp.
endloop.
describe table it_aufnr_tmp lines lv_total.
describe table it_aufnr_tmp2 lines lv_fail.
if not it_aufnr is initial.
loop at it_aufnr.
clear:it_err5 ,it_err5[],it_bdcmsg,it_bdcmsg[],it_return,it_return[], bdcdata, bdcdata[],it_aufnr-message.
lv_tabix = sy-tabix.
loop at it_record into it_err5
where aufnr = it_aufnr-aufnr.
append it_err5.
endloop.
read table it_record with key aufnr = it_aufnr-aufnr.
if sy-subrc eq 0.
if pr_co01 = 'X'.
perform process_bdc_header_co01.
else.
perform process_bdc_header.
endif.
call function 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
tables
imt_bdcmsgcoll = it_bdcmsg
ext_return = it_return.
read table it_return with key type = 'E'.
if sy-subrc eq 0.
it_aufnr-message = it_return-message.
* select single text into it_aufnr-message
* from t100 where sprsl = it_bdcmsg-msgspra
* and arbgb = it_bdcmsg-msgid
* and msgnr = it_bdcmsg-msgnr.
* concatenate it_aufnr-message it_bdcmsg-msgv1 it_bdcmsg-msgv2 it_bdcmsg-msgv3 it_bdcmsg-msgv4
* into it_aufnr-message separated by space.
*
* CALL FUNCTION 'PI_BP_GET_MESSAGE_TEXT'
* EXPORTING
* IV_MESSAGE_ID = it_bdcmsg-msgid
* IV_MESSAGE_TYPE = 'E'
* IV_MESSAGE_NUMBER = it_bdcmsg-msgnr
* IV_MESSAGE_V1 = it_bdcmsg-msgv1
* IV_MESSAGE_V2 = it_bdcmsg-msgv2
* IV_MESSAGE_V3 = it_bdcmsg-msgv3
* IV_MESSAGE_V4 = it_bdcmsg-msgv4
* IMPORTING
* EV_MESSAGE_TEXT = lv_text.
else.
it_aufnr-message = ' OK.'.
" concatenate it_aufnr-message it_aufnr-aufnr ' is Posted' into it_aufnr-message.
endif.
endif.
modify it_aufnr index lv_tabix.
endloop.
endif.
clear it_err3.
refresh it_err3.
loop at it_aufnr where message ne ' OK.' .
loop at it_record where aufnr = it_aufnr-aufnr .
move-corresponding it_record to it_err3.
it_err3-message = it_aufnr-message.
append it_err3.
clear it_err3.
endloop.
lv_fail = lv_fail + 1.
endloop.
append lines of it_err2 to it_err3.
sort it_err3 by order ascending.
if not it_err3[] is initial.
perform down_file .
perform download_local.
endif.
lv_success = lv_total - lv_fail .
write :/1 'Production Order Record.'.
lv_msg = lv_total.
condense lv_msg no-gaps.
concatenate 'Total : ' lv_msg into lv_msg.
write :/1 lv_msg.
lv_msg = lv_success.
condense lv_msg no-gaps.
concatenate 'Success : ' lv_msg into lv_msg.
write :/1 lv_msg.
lv_msg = lv_fail.
condense lv_msg no-gaps.
concatenate 'Fail : ' lv_msg into lv_msg.
write :/1 lv_msg.
endform. " UP_SELECT
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_data .
clear:itab,itab[] .
data: lv_file type string.
lv_file = filename.
call function 'GUI_UPLOAD'
exporting
filename = lv_file
filetype = 'ASC'
has_field_separator = 'X'
tables
data_tab = itab
exceptions
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
others = 17.
if sy-subrc ne 0.
clear : msg.
concatenate 'Upload Filename ' filename ' Is Error!' into msg.
message msg type 'I'.
exit.
endif.
endform. " GET_DATA
*&---------------------------------------------------------------------*
*& Form GET_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_it_record .
data:lv_order type i.
check not itab[] is initial.
lv_order = 1.
loop at itab.
move-corresponding itab to it_record.
it_record-matnr = it_record-matnr_c.
replace '-' with '' into it_record-matnr.
replace '-' with '' into it_record-matnr.
replace '-' with '' into it_record-matnr.
condense it_record-matnr no-gaps.
translate it_record-sobkz_d to upper case.
* perform process_num using it_record-gamng_c
* changing it_record-gamng .
it_record-gamng = it_record-gamng_c.
perform change_char_to_data using it_record-gltrp_c
changing it_record-gltrp.
perform add_pre_zero using it_record-aufnr
changing it_record-aufnr.
it_record-matnr2 = it_record-matnr2_c.
replace '-' with '' into it_record-matnr2.
replace '-' with '' into it_record-matnr2.
replace '-' with '' into it_record-matnr2.
condense it_record-matnr2 no-gaps.
* perform process_num using it_record-menge_c
* changing it_record-menge .
it_record-menge = it_record-menge_c.
perform add_pre_zero using it_record-vornr_c
changing it_record-vornr.
it_record-order = lv_order.
append it_record.
lv_order = lv_order + 1.
clear : it_record.
endloop.
delete it_record where matnr = space and aufnr = space.
endform. " GET_IT_RECORD
*&---------------------------------------------------------------------*
*& 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_dec = p_change.
endif.
endform. " PROCESS_NUM
*&---------------------------------------------------------------------*
*& 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 ADD_PRE_ZERO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_RECORD_CHARG text
* <--P_IT_RECORD_CHARG 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 CHECK_IT_RECORD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form check_it_record .
data: lv_flag2 type c,
lv_bsart like t161-bsart,
lv_ebeln like ekko-ebeln,
lv_lifnr like lfa1-lifnr,
lv_zterm like t052-zterm,
lv_inco1 like tinc-inco1,
lv_waers like tcurc-waers,
lv_ekorg like t024e-ekorg,
lv_ekgrp like t024-ekgrp,
lv_bukrs like t001-bukrs,
lv_mtart like mara-mtart,
lv_meins like t006-msehi,
lv_werks like t001w-werks,
lv_posid like prps-posid,
lv_postp like t418-postp,
lv_posnr type i,
lv_i type i,
lv_j type i,
lv_aufnr like afko-aufnr,
lv_lgort like t001l-lgort .
clear: lv_flag2.
sort it_record by order .
lv_posnr = 10.
loop at it_record.
lv_tabix = sy-tabix.
clear:lv_flag2,it_record-message.
if lv_aufnr <> it_record-aufnr.
lv_posnr = 10.
endif.
lv_aufnr = it_record-aufnr.
"Material Number
select single mtart into lv_mtart
from mara
where matnr = it_record-matnr.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Material Number Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"WBS Element
if pr_co01 ne 'X'.
select single pspnr into lv_posid
from prps
where posid = it_record-posid.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' WBS Element Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Production plant
select single werks into lv_werks
from t001w
where werks = it_record-werks.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Production plant Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Order type
select single werks into lv_werks
from t399x
where werks = it_record-werks
and auart = it_record-auart.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Order type Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Order Number
select single aufnr into it_record-aufnr
from afko
where aufnr = it_record-aufnr.
if sy-subrc eq 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Order Number Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Total Qty
if it_record-gamng = 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Total Qty = 0 is error.' into it_record-message.
modify it_record index lv_tabix.
elseif it_record-gamng < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Total Qty is negative or Total Qty not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Finish Date
if it_record-gltrp = '00000000'.
lv_flag2 = 'X'.
concatenate it_record-message ' Finish Date Format MM/dd/yyyy.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Item Number
* if it_record-posnr is initial.
* lv_flag2 = 'X'.
* concatenate it_record-message ' Item Number Error.'
* into it_record-message.
* modify it_record index lv_tabix.
* endif.
"Component Number
if not it_record-matnr2 is initial.
select single mtart into lv_mtart
from mara
where matnr = it_record-matnr2.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Component Number Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
else.
* if lv_mtart = 'ZNON'.
* lv_flag2 = 'X'.
* concatenate it_record-message ' Component Number Material Type IS ZNON'
* into it_record-message.
* modify it_record index lv_tabix.
* endif.
endif.
"Requirement Quantity
if it_record-menge = 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Requirement Quantity = 0 is error.' into it_record-message.
modify it_record index lv_tabix.
elseif it_record-menge < 0.
lv_flag2 = 'X'.
concatenate it_record-message
' Requirement Quantity is negative or Requirement Quantity not is number.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Item Category
select single postp into lv_postp
from t418
where postp = it_record-postp.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Item Category Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Operation
if it_record-vornr is initial.
lv_flag2 = 'X'.
concatenate it_record-message ' Operation Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
"Storage location
if it_record-lgort ne space .
select single lgort into lv_lgort
from t001l
where lgort = it_record-lgort
and werks = it_record-werks.
if sy-subrc <> 0.
lv_flag2 = 'X'.
concatenate it_record-message ' Storage location Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
"Special Stock
if it_record-sobkz_d ne space .
if it_record-sobkz_d <> '1' and it_record-sobkz_d <> '2'
and it_record-sobkz_d <> '2' and it_record-sobkz_d <> '4'.
lv_flag2 = 'X'.
concatenate it_record-message ' Special Stock Not Exists.'
into it_record-message.
modify it_record index lv_tabix.
endif.
endif.
it_record-posnr_c = lv_posnr.
condense it_record-posnr_c no-gaps.
lv_i = strlen( it_record-posnr_c ).
lv_j = 4 - lv_i.
if lv_j > 0.
overlay it_record-posnr+0(lv_j) with '0000' only space.
else.
endif.
if lv_i ne 0.
it_record-posnr+lv_j(lv_i) = it_record-posnr_c.
endif.
it_record-posnr_c = it_record-posnr.
add 10 to lv_posnr .
modify it_record index lv_tabix.
endif.
if lv_flag2 <> 'X'.
it_record-message = ' OK.'.
modify it_record index lv_tabix.
endif.
endloop.
endform. " CHECK_IT_RECORD
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
form bdc_field using fnam fval.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endform. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form PROCESS_BDC_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_bdc_header .
perform bdc_dynpro using 'SAPLCOKO1' '0240'. "CO01 diff
perform bdc_field using 'BDC_CURSOR' 'AUFPAR-PP_AUFART'.
perform bdc_field using 'AFPOD-PROJN' it_record-posid. "CO01 diff
perform bdc_field using 'CAUFVD-MATNR' it_record-matnr.
perform bdc_field using 'CAUFVD-WERKS' it_record-werks.
perform bdc_field using 'AUFPAR-PP_AUFART' it_record-auart.
perform bdc_field using 'CAUFVD-AUFNR' it_record-aufnr.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
perform bdc_field using 'CAUFVD-GLTRP' it_record-gltrp_c.
perform bdc_field using 'CAUFVD-GSTRP' it_record-gltrp_c. "add by Lisa_wong 11/05/2012
perform bdc_field using 'CAUFVD-GAMNG' it_record-gamng_c..
* perform bdc_field using 'CAUFVD-GMEIN' 'PC'.
perform bdc_field using 'CAUFVD-TERKZ' '3'.
* perform bdc_field using 'CAUFVD-FHORI' '000'.
**" PP11
if it_record-auart+2(1) = '1'.
* PERFORM bdc_dynpro USING 'SAPLCOSD' '0310'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=CANC'.
else.
* PERFORM bdc_dynpro USING 'SAPLCOSD' '0310'. " PP12 no popup
* PERFORM bdc_field USING 'BDC_OKCODE' '=OPT2'.
endif.
if not it_record-matnr2 is initial.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=KPU2'.
perform bdc_field using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
perform bdc_field using 'CAUFVD-GLTRP' it_record-gltrp_c.
perform bdc_field using 'CAUFVD-GSTRP' it_record-gltrp_c. "add by Lisa_wong 11/05/2012
perform bdc_field using 'CAUFVD-GAMNG' it_record-gamng_c..
* perform bdc_field using 'CAUFVD-GMEIN' 'PC'.
perform bdc_field using 'CAUFVD-TERKZ' '3'.
* perform bdc_field using 'CAUFVD-FHORI' '000'.
endif.
"PP11 select \ delete All
if it_record-auart+2(1) = '1'.
* PERFORM bdc_dynpro USING 'SAPLCOMK' '0120'.
* PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=AMAK'.
*
* PERFORM bdc_dynpro USING 'SAPLCOMK' '0120'.
* PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=DEL'.
endif.
if not it_record-matnr2 is initial.
perform process_component.
endif.
if not it_record-matnr2 is initial.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
else.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
endif.
call transaction 'CO10' "CO01 diff
using bdcdata
mode pr_mode "Background performance
update 'S' "local updata
messages into it_bdcmsg. "all message table
endform. " PROCESS_BDC_HEADER
*&---------------------------------------------------------------------*
*& Form PROCESS_BDC_HEADER_CO01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_bdc_header_co01 .
perform bdc_dynpro using 'SAPLCOKO1' '0100'.
perform bdc_field using 'BDC_CURSOR' 'AUFPAR-PP_AUFART'.
perform bdc_field using 'CAUFVD-MATNR' it_record-matnr.
perform bdc_field using 'CAUFVD-WERKS' it_record-werks.
perform bdc_field using 'AUFPAR-PP_AUFART' it_record-auart.
perform bdc_field using 'CAUFVD-AUFNR' it_record-aufnr.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'BDC_CURSOR' 'CAUFVD-GLTRP'.
perform bdc_field using 'CAUFVD-GLTRP' it_record-gltrp_c.
perform bdc_field using 'CAUFVD-GAMNG' it_record-gamng_c..
* perform bdc_field using 'CAUFVD-GMEIN' 'PC'.
perform bdc_field using 'CAUFVD-TERKZ' '2'.
* perform bdc_field using 'CAUFVD-FHORI' '000'.
**" PP11
if it_record-auart+2(1) = '1'.
* PERFORM bdc_dynpro USING 'SAPLCOSD' '0310'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=CANC'.
else.
* PERFORM bdc_dynpro USING 'SAPLCOSD' '0310'. " PP12 no popup
* PERFORM bdc_field USING 'BDC_OKCODE' '=OPT2'.
endif.
if not it_record-matnr2 is initial.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=KPU2'.
endif.
"PP11 select \ delete All
if it_record-auart+2(1) = '1'.
* PERFORM bdc_dynpro USING 'SAPLCOMK' '0120'.
* PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=AMAK'.
*
* PERFORM bdc_dynpro USING 'SAPLCOMK' '0120'.
* PERFORM bdc_field USING 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=DEL'.
endif.
if not it_record-matnr2 is initial.
perform process_component.
endif.
if not it_record-matnr2 is initial.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
else.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
perform bdc_dynpro using 'SAPLCOKO1' '0115'.
perform bdc_field using 'BDC_OKCODE' '=BU'.
endif.
call transaction 'CO01'
using bdcdata
mode pr_mode "Background performance
update 'S' "local updata
messages into it_bdcmsg. "all message table
endform. " PROCESS_BDC_HEADER_CO01
*&---------------------------------------------------------------------*
*& Form PROCESS_COMPONENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form process_component .
data:lv_cur type i value 0,
lv_mod type i,
lv_fname(30) type c,
lv_temp(2) type c,
lv_len type i.
lv_mod = lines( it_err5 ) .
loop at it_err5.
lv_cur = lv_cur + 1.
move lv_cur to lv_temp.
lv_len = strlen( lv_temp ).
if lv_len = 1.
concatenate '0' lv_temp into lv_temp.
endif.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_SUBSCR' 'SAPLCOMK 0050BUTTONS'.
concatenate 'RESBD-POSNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-posnr.
concatenate 'RESBD-MATNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-matnr2.
concatenate 'RESBD-MENGE(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-menge_c.
concatenate 'RESBD-POSTP(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-postp.
concatenate 'RESBD-VORNR(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-vornr.
concatenate 'RESBD-LGORT(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-lgort.
concatenate 'RESBD-RGEKZ(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname ''."it_err5-rgekz.
concatenate 'RESBD-SOBKZ_D(' lv_temp ')' into lv_fname.
perform bdc_field using lv_fname it_err5-sobkz_d.
perform bdc_field using 'BDC_OKCODE' '/00'.
*
perform bdc_dynpro using 'SAPLCOMD' '0110'.
perform bdc_field using 'RESBD-MATNR' it_err5-matnr2.
perform bdc_field using 'RESBD-POSNR' it_err5-posnr.
perform bdc_field using 'RESBD-LGORT' it_err5-lgort.
perform bdc_field using 'RESBD-MENGE' it_err5-menge_c.
perform bdc_field using 'RESBD-RGEKZ' ''.
* PERFORM bdc_field USING 'RESBD-SPLKZ' ''.
perform bdc_field using 'BDC_OKCODE' '=FREI'.
lv_mod = lv_cur mod 13.
if lv_mod = 0.
clear:lv_cur.
lv_cur = 1.
perform bdc_dynpro using 'SAPLCOMK' '0120'.
perform bdc_field using 'BDC_OKCODE' '=P+'.
endif.
endloop.
endform. " PROCESS_COMPONENT
*&---------------------------------------------------------------------*
*& Form DOWN_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form down_file .
clear:it_down,it_down[].
concatenate
'Material'
'WBS Element'
'Production plant'
'Order type'
'Order Number'
'Total Qty'
'Finish Date'
'Item'
'Component Number'
'Requirement Quantity'
'Item Category'
'Operation'
'Storage location'
'Backflush'
'Special Stock'
'Message'
into it_down separated by cl_abap_char_utilities=>horizontal_tab.
append it_down.
loop at it_err3.
move-corresponding it_err3 to it_tab.
concatenate it_tab-matnr_c
it_tab-posid
it_tab-werks
it_tab-auart
it_tab-aufnr
it_tab-gamng_c
it_tab-gltrp_c
it_tab-posnr_c
it_tab-matnr2_c
it_tab-menge_c
it_tab-postp
it_tab-vornr_c
it_tab-lgort
it_tab-rgekz
it_tab-sobkz_d
it_tab-message
into it_down separated by cl_abap_char_utilities=>horizontal_tab.
condense it_down .
append it_down .
endloop.
endform. " DOWN_FILE
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_LOCAL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form download_local .
data: lv_filename type string.
perform get_file.
lv_filename = gv_file.
call function 'GUI_DOWNLOAD'
exporting
filename = lv_filename
filetype = 'ASC'
write_field_separator = 'X'
tables
data_tab = it_down
exceptions
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
others = 22.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
endform. " DOWNLOAD_LOCAL
*&---------------------------------------------------------------------*
*& Form GET_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_file .
data: wa_key(30) type c.
data: lv_i type i.
data: lv_c(1) type c.
data: wa_date(8) type c.
data: wa_time like sy-uzeit.
data: lv_char type c.
wa_date = sy-datum.
wa_time = sy-uzeit.
concatenate 'ProdOrder' wa_date wa_time into wa_key.
concatenate wa_key '.txt' into wa_key.
lv_i = strlen( pr_error ).
lv_i = lv_i - 1 .
if lv_i > 1.
lv_c = pr_error+lv_i(1).
endif.
* if p_test = 'X'.
* lv_char = '\' .
* else.
* lv_char = '/' .
* endif.
lv_char = '\' .
if lv_c eq lv_char.
concatenate pr_error wa_key into gv_file.
else.
concatenate pr_error lv_char wa_key into gv_file.
endif.
endform. " GET_FILE