METHOD zyc_ii_si_data_dump_in~si_data_dump_in.
"反馈
DATA: output_hd TYPE zmmi005_dt_mesg_hd,
output_body TYPE zun_dt_un_resp_msgbd_tab,
output_line TYPE zun_dt_un_resp_msgbd.
DATA: r_obj TYPE REF TO zun_co_si_un_resp_out,
out TYPE zun_mt_un_resp.
*
TYPES: BEGIN OF emp,
fylhv TYPE resb-rsnum,
message_v1 TYPE string,
message_v2 TYPE string,
END OF emp.
DATA: l_itemid TYPE string,l_msgid TYPE string.TYPES : BEGIN OF st_ylfz,usnam TYPE zsbbjjh-usnam,werks TYPE zsbbjjh-werks,bwart TYPE zsbbjjh-bwart,bdter TYPE zsbbjjh-bdter,kostl TYPE zsbbjjh-kostl,aufnr TYPE zsbbjjh-aufnr,wempf TYPE zsbbjjh-wempf,umwrk TYPE zsbbjjh-umwrk,umlgo TYPE zsbbjjh-umlgo,anln1 TYPE zsbbjjh-anln1,ekgrp TYPE zsbbjjh-ekgrp,rsnum TYPE zsbbjjh-rsnum,itemid TYPE zsbbjjh-itemid,msgid TYPE zsbbjjh-msgid,END OF st_ylfz.
DATA : reservation_header TYPE bapirkpfc,lw_reservation TYPE bapiresbc,reservation_items TYPE TABLE OF bapiresbc.
-
return TYPE TABLE OF bapireturn,
-
lw_return TYPE bapireturn,
-
lreturn TYPE TABLE OF bapireturn,
-
lw_lreturn TYPE bapireturn.
DATA : itab TYPE TABLE OF emp,
wa_1 TYPE emp.
DATA: tab1 TYPE TABLE OF st_ylfz,
tab_err TYPE TABLE OF st_ylfz,
tab_zylsp TYPE TABLE OF zsbbjjh. -
it_disp TYPE TABLE OF zsbbjjh WITH HEADER LINE.
DATA: wa_tab1 TYPE st_ylfz,
wa_zylsp TYPE zsbbjjh.
DATA: vylh TYPE resb-rsnum,
vanswer TYPE c,
v_continue TYPE c,
v_line TYPE i,
vindex TYPE sy-tabix.DATA: indx TYPE sy-tabix,
num_temp TYPE zsbbjjh_h-rspos.DATA: s_matnr TYPE RANGE OF zsbbjjh_h-matnr,
lw_matnr LIKE LINE OF s_matnr,s_budat TYPE RANGE OF zsbbjjh_h-budat,lw_budat LIKE LINE OF s_budat.
DATA : s_werks TYPE RANGE OF ekpo-werks,
lw_werks LIKE LINE OF s_werks.DATA: flag TYPE c,
l_con TYPE c."申请
TYPES : BEGIN OF ty_rsnum ,
rsnum TYPE zsbbjjh-rsnum,
END OF ty_rsnum.DATA: lt_rsnum TYPE TABLE OF ty_rsnum,
lw_rsnum TYPE ty_rsnum.DATA : lt_pr TYPE TABLE OF zsbbjjh_h,
lw_pr TYPE zsbbjjh_h,lt_temp TYPE TABLE OF zsbbjjh_h,lw_temp TYPE zsbbjjh_h,lt_modi TYPE TABLE OF zsbbjjh_h,lw_modi TYPE zsbbjjh_h.
DATA : requisition_items TYPE TABLE OF bapiebanc,
lw_req_items TYPE bapiebanc,return2 TYPE TABLE OF bapireturn,lw_return2 TYPE bapireturn,number TYPE bapiebanc-preq_no.
DATA : l_zcsj TYPE zsbbjjh-budat,
l_trac TYPE c LENGTH 10,
l_rec TYPE n LENGTH 6.DATA : r_zcsj TYPE RANGE OF sy-datum,
lw_zcsj LIKE LINE OF r_zcsj.TYPES: BEGIN OF ty_remsg,
include TYPE bapireturn,
idmsg TYPE string,
itemmsg TYPE string.
TYPES: END OF ty_remsg.DATA: lreturn TYPE TABLE OF ty_remsg,
lw_lreturn TYPE ty_remsg.DATA: return TYPE TABLE OF bapireturn,
lw_return TYPE bapireturn."拆分itemid
DATA: t_item TYPE TABLE OF string,
l_item LIKE LINE OF t_item.DATA: cgsq_item TYPE string.
LOOP AT input-mt_data_dump-msgbd INTO DATA(ls_msgbd).
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput = ls_msgbd-matnrIMPORTINGoutput = ls_msgbd-matnr.IF ls_msgbd-matnr IS NOT INITIAL.lw_matnr-sign = 'I'.lw_matnr-option = 'EQ'.lw_matnr-low = ls_msgbd-matnr.APPEND lw_matnr TO s_matnr.CLEAR:lw_matnr. ENDIF.lw_budat-sign = 'I'. lw_budat-option = 'EQ'. lw_budat-low = ls_msgbd-budat. APPEND lw_budat TO s_budat. CLEAR:lw_budat.IF ls_msgbd-zfzt = 'R1'.flag = 'X'. ENDIF.
ENDLOOP.
lw_werks-sign = ‘I’.
lw_werks-option = ‘EQ’.
lw_werks-low = ‘2064’.APPEND lw_werks TO s_werks.
CLEAR:lw_werks.lw_werks-sign = ‘I’.
lw_werks-option = ‘EQ’.
lw_werks-low = ‘2063’.
APPEND lw_werks TO s_werks.
CLEAR:lw_werks.lw_werks-sign = ‘I’.
lw_werks-option = ‘EQ’.
lw_werks-low = ‘2071’.
APPEND lw_werks TO s_werks.
CLEAR:lw_werks.IF flag = ‘X’. "转储
SELECT DISTINCT usnam werks bwart bdter kostl aufnr wempf umwrk umlgo anln1 ekgrpFROM zsbbjjh INTO TABLE tab1WHERE werks IN s_werks AND budat IN s_budat AND matnr IN s_matnr AND fspr3 <> '' AND fsjly = '' AND usnam = 'YC_MES' ."201903添加过滤统采 "fspr2-->fspr3 IF sy-subrc <> 0.
-
MESSAGE i001(00) WITH '没有可用数据或未审批!'.output_line-retid = 'E'.output_line-rettxt = '没有可用数据或未审批!'.APPEND output_line TO output_body.CLEAR output_line. ENDIF.IF output_body IS INITIAL.
*****取所有审批后的数据
SELECT * FROM zsbbjjh INTO TABLE tab_zylsp WHERE werks IN s_werks AND budat IN s_budat AND matnr IN s_matnr AND fspr3 <> ‘’ AND fsjly = ‘’."201903添加过滤统采 "fspr2–>fspr3
SORT tab_zylsp BY rspos.LOOP AT tab1 INTO wa_tab1.vindex = sy-tabix.reservation_header-res_date = wa_tab1-bdter."需求日期reservation_header-created_by = wa_tab1-usnam."用户名reservation_header-move_type = wa_tab1-bwart."移动类型reservation_header-cost_ctr = wa_tab1-kostl."成本中心reservation_header-order_no = wa_tab1-aufnr."订单号reservation_header-move_plant = wa_tab1-umwrk."发货工厂reservation_header-move_stloc = wa_tab1-umlgo."发货库存地reservation_header-plant = wa_tab1-werks."工厂reservation_header-gr_rcpt = wa_tab1-wempf."接受方reservation_header-asset_no = wa_tab1-anln1."资产号
***add fdel3 = ‘’
num_temp = 1.
LOOP AT tab_zylsp INTO wa_zylsp WHERE fdel1 = ‘’ AND fdel2 = ‘’ AND fdel3 = ‘’ AND werks = wa_tab1-werks
AND usnam = wa_tab1-usnam AND bwart = wa_tab1-bwart AND bdter = wa_tab1-bdter
AND aufnr = wa_tab1-aufnr AND wempf = wa_tab1-wempf AND umwrk = wa_tab1-umwrk
AND umlgo = wa_tab1-umlgo AND kostl = wa_tab1-kostl AND ekgrp = wa_tab1-ekgrp AND anln1 = wa_tab1-anln1.
indx = sy-tabix.lw_reservation-material = wa_zylsp-matnr."物料号lw_reservation-plant = wa_zylsp-werks."工厂lw_reservation-quantity = wa_zylsp-fsl3v."数量 fsl2v--> fsl3vlw_reservation-req_date = wa_zylsp-bdter."日期lw_reservation-gr_rcpt = wa_zylsp-wempf."收货方lw_reservation-short_text = wa_zylsp-sgtxt."文本1lw_reservation-movement = 'X'. "允许移动标志APPEND lw_reservation TO reservation_items .
*****2019.7.19 添加预留的行号码信息
wa_zylsp-rspos1 = num_temp.
MODIFY tab_zylsp INDEX indx FROM wa_zylsp TRANSPORTING rspos1.
num_temp = num_temp + 1.
CLEAR: lw_reservation.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'EXPORTINGinput = wa_zylsp-matnrIMPORTINGoutput = wa_zylsp-matnr.IF l_msgid IS NOT INITIAL.l_msgid = l_msgid && ',' && wa_zylsp-msgid && ':' && wa_zylsp-itemid .ELSE.l_msgid = wa_zylsp-msgid && ':' && wa_zylsp-itemid.ENDIF.IF l_itemid IS NOT INITIAL.l_itemid = l_itemid && ',' && wa_zylsp-itemid.ELSE.l_itemid = wa_zylsp-itemid.ENDIF.CLEAR:wa_zylsp.ENDLOOP.
*****如果没有项目数据则继续下一预留分组
IF reservation_items IS INITIAL.
CLEAR: reservation_header, lw_reservation,reservation_items[],return.
CONTINUE.
ENDIF.
CALL FUNCTION 'BAPI_RESERVATION_CREATE'EXPORTINGreservation_header = reservation_headerIMPORTINGreservation = vylhTABLESreservation_items = reservation_itemsreturn = return.IF vylh = 0.
*****生成预留错误时的处理
APPEND wa_tab1 TO tab_err.
READ TABLE return INTO lw_return INDEX 1.
-
lw_return-message_v1 = wa_tab1-usnam.
-
lw_return-message_v2 = wa_tab1-bwart.
-
lw_return-message_v1 = wa_tab1-kostl.
-
lw_return-message_v2 = l_mara.lw_lreturn-idmsg = l_msgid.lw_lreturn-itemmsg = l_itemid.lw_lreturn-include-message = lw_return-message.APPEND lw_lreturn TO lreturn.CLEAR:lw_lreturn.ELSE.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGwait = 'X'.wa_tab1-rsnum = vylh.
-
wa_tab1-message_v1 = wa_tab1-kostl.
-
wa_tab1-message_v2 = wa_tab1-bwart.SHIFT vylh LEFT DELETING LEADING '0'.wa_1-fylhv = vylh.wa_1-message_v1 = l_msgid.wa_1-message_v2 = l_itemid.APPEND wa_1 TO itab.MODIFY tab1 FROM wa_tab1 INDEX vindex.CLEAR:wa_1.ENDIF.CLEAR: reservation_header, reservation_items,reservation_items[],return,wa_1,l_itemid,l_msgid.ENDLOOP.
*****把生成的预留号填写到内表,为转到历史库做准备
*****生成预留号错误的不转储
LOOP AT tab_err INTO wa_tab1.
DELETE tab_zylsp WHERE werks = wa_tab1-werks AND usnam = wa_tab1-usnam AND bwart = wa_tab1-bwart
AND bdter = wa_tab1-bdter AND aufnr = wa_tab1-aufnr AND wempf = wa_tab1-wempf
AND umwrk = wa_tab1-umwrk AND umlgo = wa_tab1-umlgo AND kostl = wa_tab1-kostl
AND ekgrp = wa_tab1-ekgrp AND anln1 = wa_tab1-anln1.
ENDLOOP.
*****生成预留号 或分组为空的进行转储
LOOP AT tab1 INTO wa_tab1.
LOOP AT tab_zylsp INTO wa_zylsp WHERE usnam = wa_tab1-usnam AND werks = wa_tab1-werks AND bwart = wa_tab1-bwart
AND bdter = wa_tab1-bdter AND kostl = wa_tab1-kostl AND aufnr = wa_tab1-aufnr
AND wempf = wa_tab1-wempf AND umwrk = wa_tab1-umwrk AND umlgo = wa_tab1-umlgo
AND ekgrp = wa_tab1-ekgrp AND anln1 = wa_tab1-anln1.
vindex = sy-tabix.
wa_zylsp-fzcsj = sy-datum.
wa_zylsp-date_new = sy-datum.
wa_zylsp-flag_dl = ‘U’.
wa_zylsp-fzcrv = ‘YC_MES’.
IF wa_tab1-rsnum <> ‘’.
IF wa_zylsp-fdel1 = ‘’ AND wa_zylsp-fdel2 = ‘’ AND wa_zylsp-fdel3 = ‘’. "add wa_zylsp-fdel3 = ‘’
wa_zylsp-rsnum = wa_tab1-rsnum.
ENDIF.
ENDIF.
MODIFY tab_zylsp FROM wa_zylsp.
ENDLOOP.
ENDLOOP.
*****转到历史库并从当前表中删除
-
为保障两条修改数据库表语句的事务一致性 改成以下 start 20210901 by renyl
MODIFY zsbbjjh_h FROM TABLE tab_zylsp.
IF sy-subrc = 0.
DELETE zsbbjjh FROM TABLE tab_zylsp.
IF sy-subrc = 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDIF.
*end 20210901
****输出转储结果 -
DATA: yu TYPE i.
-
WRITE :/ '生成的预留号如下(详细内容见''计划查询''):',/ .LOOP AT itab INTO wa_1 WHERE fylhv <> 0.
-
output_line-itemid = sy-tabix.output_line-order1 = wa_1-fylhv.output_line-retid = 'S'.
-
output_line-rettxt = '没有可用数据或未审批!'.output_line-yl-yl1 = wa_1-message_v1.SPLIT wa_1-message_v2 AT ',' INTO TABLE t_item.LOOP AT t_item INTO l_item.output_line-yl-yl2 = l_item.APPEND output_line TO output_body.CLEAR: l_item.ENDLOOP.
-
output_line-yl-yl2 = wa_1-message_v2.CLEAR: output_line,t_item.ENDLOOP.LOOP AT lreturn INTO lw_lreturn.
-
output_line-itemid = sy-tabix.output_line-order1 = ''.output_line-retid = 'E'.output_line-rettxt = lw_lreturn-include-message .output_line-yl-yl1 = lw_lreturn-idmsg.SPLIT lw_lreturn-itemmsg AT ',' INTO TABLE t_item.LOOP AT t_item INTO l_item.output_line-yl-yl2 = l_item.APPEND output_line TO output_body.CLEAR: l_item.ENDLOOP.
-
output_line-yl-yl2 = lw_lreturn-itemmsg.CLEAR: output_line,t_item.ENDLOOP.ELSE."没有数据直接反馈ENDIF."反馈头信息 out-mt_un_resp-msghd-msgid = input-mt_data_dump-msghd-msgid. out-mt_un_resp-msghd-tlgid = input-mt_data_dump-msghd-tlgid. out-mt_un_resp-msghd-tlgname = input-mt_data_dump-msghd-tlgname. out-mt_un_resp-msghd-dtsend = sy-datum && sy-uzeit. out-mt_un_resp-msghd-sender = 'ERP'. out-mt_un_resp-msghd-receiver = input-mt_data_dump-msghd-sender. "反馈行信息 out-mt_un_resp-msgbd = output_body.TRY .CREATE OBJECT r_obj.CALL METHOD r_obj->si_un_resp_outEXPORTINGoutput = out.COMMIT WORK AND WAIT.CALL FUNCTION 'ZFUN_PO_LOG'EXPORTINGoutput1 = out.CATCH cx_ai_system_fault. ENDTRY.
ELSE."申请
lw_zcsj-sign = 'I'. lw_zcsj-option = 'BT'. lw_zcsj-low = sy-datum - 60. lw_zcsj-high = sy-datum. APPEND lw_zcsj TO r_zcsj.SELECT DISTINCT rsnum INTO TABLE lt_rsnum FROM zsbbjjh_h WHERE werks IN s_werks AND fzcsj IN r_zcsj AND banfn = '' AND fsjly = '' AND usnam = 'YC_MES'."201903添加过滤统采 DELETE lt_rsnum WHERE rsnum = ''. IF NOT lt_rsnum[] IS INITIAL.SELECT * INTO TABLE lt_pr FROM zsbbjjh_h FOR ALL ENTRIES IN lt_rsnum WHERE rsnum = lt_rsnum-rsnum AND fsjly = ''."201903添加过滤统采
-
WRITE : / '生成的采购请求如下(详细内容见''计划查询''):',/.
-
ULINE (110).SORT lt_pr BY rsnum rspos.LOOP AT lt_rsnum INTO lw_rsnum.l_rec = sy-tabix.REFRESH : requisition_items,return2,lt_temp.CLEAR number.LOOP AT lt_pr INTO lw_pr WHERE rsnum = lw_rsnum-rsnum.APPEND lw_pr TO lt_temp. "增加数据到临时表lw_req_items-doc_type = 'NB'. "申请类型lw_req_items-pur_group = lw_pr-ekgrp. "采购组lw_req_items-preq_date = lw_pr-bdter. "需求日期lw_req_items-material = lw_pr-matnr. "物料号lw_req_items-plant = lw_pr-werks. "工厂CASE lw_pr-bwart.WHEN '201'.l_trac = lw_pr-kostl.WHEN 'Z21'.l_trac = lw_pr-kostl.WHEN '301'.CONCATENATE lw_pr-umwrk ',' lw_pr-umlgo INTO l_trac.WHEN '241'.l_trac = lw_pr-anln1+2(10).WHEN '251'.l_trac = lw_pr-wempf.WHEN 'Z51'.l_trac = lw_pr-wempf.WHEN 'Y51'.l_trac = lw_pr-wempf.WHEN '261'.l_trac = lw_pr-aufnr+2(10).ENDCASE.
-
lw_req_items-store_loc = ''. "库存地lw_req_items-trackingno = l_trac. "需求跟踪号lw_req_items-preq_name = lw_pr-usnam. "用户名lw_req_items-quantity = lw_pr-fsl3v. "数量 " fsl2v --> fsl3vlw_req_items-deliv_date = lw_pr-bdter. "交货期
*{ INSERT APEK901352 1
IF lw_pr-verpr IS INITIAL. "增加价格判断。20210624
lw_req_items-c_amt_bapi = lw_pr-fsgjg.
ELSE.
lw_req_items-c_amt_bapi = lw_pr-verpr.
ENDIF.
*} INSERT
APPEND lw_req_items TO requisition_items.
"记录所有itemid “R1和R2返回的vbillcode都需要修改成返回ITEMID的值” 申请号都不用嗯宋梦尧20230703IF cgsq_item IS INITIAL.cgsq_item = lw_pr-itemid.ELSE.cgsq_item = cgsq_item && ',' && lw_pr-itemid.ENDIF.CLEAR:lw_pr.ENDLOOP.CALL FUNCTION 'BAPI_REQUISITION_CREATE'IMPORTINGnumber = numberTABLESrequisition_items = requisition_itemsreturn = return2.COMMIT WORK AND WAIT.
-
WRITE :/ '序号:',l_rec,'、预留号:',lw_pr-rsnum,'->','采购申请号:',number.IF number IS INITIAL.LOOP AT return2 INTO lw_return2.output_line-order1 = number.output_line-retid = 'E'.output_line-yl-yl1 = lw_rsnum-rsnum.output_line-rettxt = lw_return2-message && lw_return2-message_v1 && lw_return2-message_v2.SPLIT cgsq_item AT ',' INTO TABLE t_item.LOOP AT t_item INTO l_item.output_line-yl-yl2 = l_item.APPEND output_line TO output_body.CLEAR: l_item.ENDLOOP.
-
output_line-yl-yl2 = cgsq_item.CLEAR: output_line,t_item.ENDLOOP.ELSE.LOOP AT lt_temp INTO lw_temp.lw_temp-banfn = number.lw_temp-bnfpo = sy-tabix * 10. "MODIFY lt_temp FROM lw_temp.ENDLOOP.APPEND LINES OF lt_temp TO lt_modi.REFRESH lt_temp.
-
output_line-yl-yl2 = cgsq_item.output_line-yl-yl1 = lw_rsnum-rsnum.output_line-order1 = number.output_line-retid = 'S'.
-
output_line-yl-yl3 = lw_rsnum-rsnum.
-
output_line-rettxt = lw_return2-message && w_return2-message_v1 && lw_return2-message_v2.SPLIT cgsq_item AT ',' INTO TABLE t_item.LOOP AT t_item INTO l_item.output_line-yl-yl2 = l_item.READ TABLE lt_modi INTO DATA(l_modi) WITH KEY itemid = l_item.IF sy-subrc = 0.output_line-yl-yl3 = l_modi-bnfpo.ENDIF.APPEND output_line TO output_body.CLEAR: l_item,l_modi.ENDLOOP.CLEAR: output_line,t_item.ENDIF.CLEAR:lw_rsnum,cgsq_item.ENDLOOP.IF NOT lt_modi[] IS INITIAL.MODIFY zsbbjjh_h FROM TABLE lt_modi.ENDIF.ELSE.
-
MESSAGE '没有可以生成采购申请的数据!' TYPE 'I'.
-
output_line-tlgid = lw_pr-rsnum.
-
output_line-order1 = number.output_line-retid = 'E'.output_line-rettxt = '没有可以生成采购申请的数据'.APPEND output_line TO output_body.CLEAR output_line. ENDIF."反馈头信息 out-mt_un_resp-msghd-msgid = input-mt_data_dump-msghd-msgid. out-mt_un_resp-msghd-tlgid = input-mt_data_dump-msghd-tlgid. out-mt_un_resp-msghd-tlgname = input-mt_data_dump-msghd-tlgname. out-mt_un_resp-msghd-dtsend = sy-datum && sy-uzeit. out-mt_un_resp-msghd-sender = 'ERP'. out-mt_un_resp-msghd-receiver = input-mt_data_dump-msghd-sender. "反馈行信息 out-mt_un_resp-msgbd = output_body.TRY .CREATE OBJECT r_obj.CALL METHOD r_obj->si_un_resp_outEXPORTINGoutput = out.COMMIT WORK AND WAIT.CALL FUNCTION 'ZFUN_PO_LOG'EXPORTINGoutput1 = out
-
output2 = out.CATCH cx_ai_system_fault. ENDTRY." 备份,防止yc影响业务. DATA:ls_zmm_r2log TYPE zmm_r2log . IF out IS NOT INITIAL.MOVE-CORRESPONDING out-mt_un_resp-msghd TO ls_zmm_r2log.LOOP AT out-mt_un_resp-msgbd INTO DATA(line2).ls_zmm_r2log-itemid = line2-itemid .ls_zmm_r2log-order1 = line2-order1.ls_zmm_r2log-retid = line2-retid.ls_zmm_r2log-rettxt = line2-rettxt.ls_zmm_r2log-yl1 = line2-yl-yl1.ls_zmm_r2log-yl2 = line2-yl-yl2.ls_zmm_r2log-date1 = sy-datum.ls_zmm_r2log-time1 = sy-uzeit.MODIFY zmm_r2log FROM ls_zmm_r2log.ENDLOOP.COMMIT WORK. ENDIF.
ENDIF.
ENDMETHOD.