采购订单创建BAPI:BAPI_PO_CREATE1
DATA:lt_zsdt008 LIKE TABLE OF zsdt008, ls_zsdt008 LIKE LINE OF lt_zsdt008, ls_zsdt001 TYPE zsdt001, lt_zsdt007 LIKE TABLE OF zsdt007, ls_zsdt007 LIKE LINE OF lt_zsdt007, r_zjylx TYPE zrfcid. "获取采购源头数据 CLEAR:lt_zsdt007,ls_zsdt007. SELECT * INTO TABLE lt_zsdt007 FROM zsdt007 WHERE zrfc_logid = i_id. IF lt_zsdt007 IS INITIAL. e_code = 'E'. e_msg = '无可执行数据'. RETURN. ENDIF. READ TABLE lt_zsdt007 INTO ls_zsdt007 INDEX 1. IMPORT r_zjylx FROM MEMORY ID 'ZSDU001_F01_T001_LX'. IF r_zjylx IS INITIAL. r_zjylx = ls_zsdt007-zrfcid. ENDIF. CLEAR:ls_zsdt001. SELECT SINGLE * INTO ls_zsdt001 FROM zsdt001 WHERE zrfcid = r_zjylx AND canum = i_canum. PERFORM create_po TABLES lt_zsdt007 et_return USING i_id i_canum ls_zsdt001 CHANGING e_code e_msg e_flow_end. FORM create_po TABLES p_lt_zsdt007 STRUCTURE zsdt007 p_et_return STRUCTURE zrfct005 USING p_i_id TYPE zrfc_logid p_i_canum TYPE canum p_ls_zsdt001 TYPE zsdt001 CHANGING p_e_code TYPE msgty p_e_msg TYPE msgtxt p_e_flow_end TYPE char1. DATA:poheader TYPE bapimepoheader, poheaderx TYPE bapimepoheaderx, poitem LIKE TABLE OF bapimepoitem WITH HEADER LINE, poitemx LIKE TABLE OF bapimepoitemx WITH HEADER LINE, poschedule LIKE TABLE OF bapimeposchedule WITH HEADER LINE, poschedulex LIKE TABLE OF bapimeposchedulx WITH HEADER LINE, pocond LIKE TABLE OF bapimepocond WITH HEADER LINE, pocond2 LIKE TABLE OF bapimepocond WITH HEADER LINE, pocondx LIKE TABLE OF bapimepocondx WITH HEADER LINE, pocondx2 LIKE TABLE OF bapimepocondx WITH HEADER LINE, popartner LIKE TABLE OF bapiekkop WITH HEADER LINE, return LIKE TABLE OF bapiret2 WITH HEADER LINE, l_eblen TYPE ebeln, lt_zsdt008 LIKE TABLE OF zsdt008, ls_zsdt008 LIKE LINE OF lt_zsdt008. DATA:ls_zsdt007 TYPE zsdt007. DATA:ls_zrfct002 TYPE zrfct002. DATA:ls_source TYPE TABLE OF zrfcs001, lv_waerk TYPE waerk. CLEAR:poheader, poheaderx, lv_waerk, poitem[],poitem, poitemx[],poitem, poschedule[],poschedule, poschedulex[],poschedulex, pocond[],pocond, pocondx[],pocondx, return[],return. DATA:ls_zsdt007_1 TYPE zsdt007. DATA:lv_mtart TYPE mara-mtart. DATA:ebelp TYPE ekpo-ebelp. CLEAR:ebelp. DATA:lv_buspartno_dp TYPE gparn, lv_buspartno_mn TYPE gparn, lv_buspartno_se TYPE gparn, lv_buspartno_vd TYPE gparn. DATA:lv_menge_in TYPE ekpo-menge, lv_menge_out TYPE ekpo-menge, lv_matnr TYPE mara-matnr, lv_meins_in TYPE mara-meins, lv_meins_out TYPE mara-meins. IMPORT gv_waerk TO lv_waerk FROM MEMORY ID 'ZSDU001_F01_T001'. DATA:lv_from_cur TYPE bapi1093_1-from_curr, lv_to_cur TYPE bapi1093_1-to_currncy, ls_rate TYPE bapi1093_0, ls_return TYPE bapiret1. DATA:lv_lifnr TYPE lifnr, lv_ekorg TYPE ekorg, lv_bukrs TYPE bukrs. DATA:lv_menge TYPE bapimepoitem-quantity. SORT p_lt_zsdt007 BY lifnr bukrs ekorg. DATA:lv_string TYPE p DECIMALS 10. LOOP AT p_lt_zsdt007 INTO ls_zsdt007. ebelp = ebelp + 10. MOVE-CORRESPONDING ls_zsdt007 TO ls_zsdt007_1. ****按照供应商+采购组织进行拆分创建采购订单 AT FIRST. poheader-doc_type = ls_zsdt007_1-bsart. "订单类型(采购) poheader-vendor = ls_zsdt007_1-lifnr. "供应商 ****UPDATE BY JT 20221128 S 抬头数据赋值调整 IF poheader-doc_type = 'ZITO' OR poheader-doc_type = 'ZFTO'. * poheader-purch_org = ls_zsdt007_1-ekorg. "采购组织 * poheader-pur_group = ls_zsdt007_1-ekgrp. "采购组 IF ls_zsdt007_1-ekorg IS NOT INITIAL. poheader-purch_org = ls_zsdt007_1-ekorg. ELSE. poheader-purch_org = p_ls_zsdt001-ekorg. ENDIF. IF ls_zsdt007_1-ekgrp IS NOT INITIAL. poheader-pur_group = ls_zsdt007_1-ekgrp. ELSE. poheader-pur_group = p_ls_zsdt001-ekgrp. ENDIF. ELSE. poheader-purch_org = ls_zsdt007_1-ekorg. "采购组织 poheader-pur_group = ls_zsdt007_1-ekgrp. "采购组 ENDIF. poheader-comp_code = ls_zsdt007_1-bukrs. "公司代码 poheader-ref_1 = ls_zsdt007_1-ihrez. "您得参考 * poheader-doc_date = sy-datum. "凭证日期 poheader-doc_date = ls_zsdt007_1-bedat. "凭证日期 poheader-langu = sy-langu. "语言 * IF p_ls_zsdt001-waers IS NOT INITIAL. poheader-currency = p_ls_zsdt001-waers. "采购订单货币 * ELSE. * poheader-currency = ls_zsdt007-koein. "货币 * ENDIF. ****UPDATE BY JT 20221128 E 抬头数据赋值调整 poheaderx-doc_type = 'X'. poheaderx-vendor = 'X'. poheaderx-purch_org = 'X'. poheaderx-pur_group = 'X'. poheaderx-comp_code = 'X'. poheaderx-ref_1 = 'X'. poheaderx-doc_date = 'X'. poheaderx-langu = 'X'. poheaderx-currency = 'X'."货币 ENDAT. * AT NEW banfn. "采购订单抬头数据 * ENDAT. "采购订单行项目数据 poitem-po_item = ebelp. poitemx-po_item = ebelp. poitem-material = ls_zsdt007-matnr."物料 poitemx-material = 'X'. poitem-plant = ls_zsdt007-werks."工厂 poitemx-plant = 'X'. IF ls_zsdt007-retpo <> 'X'."退货项目判断 * IF ls_zsdt007-werks = '7888'. * SELECT SINGLE lgfsb INTO poitem-stge_loc FROM marc WHERE matnr = ls_zsdt007-matnr AND werks = ls_zsdt007-werks. * ELSE. * CLEAR:lv_mtart. * SELECT SINGLE mtart INTO lv_mtart FROM mara WHERE matnr = ls_zsdt007-matnr. * SELECT SINGLE lgort INTO poitem-stge_loc FROM zsdt003 WHERE mtart = lv_mtart AND werks = ls_zsdt007-werks. * ENDIF. poitem-preq_no = ls_zsdt007-banfn."采购申请 poitemx-preq_no = 'X'. poitem-preq_item = ls_zsdt007-bnfpo."采购申请项目 poitemx-preq_item = 'X'. ELSE. poitem-stge_loc = ls_zsdt007-lgort. poitem-ret_item = 'X'."退货 poitemx-ret_item = 'X'. ENDIF. poitemx-stge_loc = 'X'. * SELECT SINGLE poitem-quantity = ls_zsdt007-menge. ****UPDATE BY JT 20221128 S 行项目数量及单位 IF poheader-doc_type = 'ZITO' OR poheader-doc_type = 'ZFTO'. SELECT SINGLE meins FROM eban INTO poitem-po_unit WHERE banfn = ls_zsdt007-banfn AND bnfpo = ls_zsdt007-bnfpo. * SELECT SINGLE meins FROM zsdt035 INTO poitem-po_unit WHERE werks = ls_zsdt007-werks * AND matnr = ls_zsdt007-matnr * AND datab <= sy-datum * AND datbi >= sy-datum. ENDIF. IF poheader-doc_type = 'ZIMP' OR poheader-doc_type = 'ZAIM' OR poheader-doc_type = 'ZFAI' OR poheader-doc_type = 'ZPTO'. SELECT SINGLE meins FROM eban INTO @DATA(lv_meins) WHERE banfn = @ls_zsdt007-banfn AND bnfpo = @ls_zsdt007-bnfpo. poitem-po_unit = ls_zsdt007-bprme. IF poitem-po_unit NE lv_meins AND ls_zsdt007-umrez NE 0. lv_string = poitem-quantity * ls_zsdt007-umren / ls_zsdt007-umrez. CALL FUNCTION 'ROUND' EXPORTING decimals = 3 input = lv_string sign = '-' IMPORTING output = poitem-quantity. ENDIF. lv_menge = poitem-quantity. CLEAR:lv_meins. ELSE. lv_menge = ls_zsdt007-menge."数量 ENDIF. ****UPDATE BY JT 20221128 E 行项目数量及单位 * SELECT SINGLE meins FROM mara INTO @DATA(lv_meins) WHERE matnr = @ls_zsdt007-matnr."单位 * SELECT SINGLE * INTO @DATA(ls_eina) FROM eina WHERE matnr = @ls_zsdt007-matnr AND lifnr = @poheader-vendor. * IF ls_eina-meins IS INITIAL. * SELECT SINGLE bstme FROM mara INTO poitem-po_unit WHERE matnr = ls_zsdt007-matnr."单位 * IF poitem-po_unit IS INITIAL. * SELECT SINGLE meins FROM mara INTO poitem-po_unit WHERE matnr = ls_zsdt007-matnr."单位 * ELSE. * IF poitem-po_unit NE lv_meins. * CLEAR:lv_menge_in,lv_matnr,lv_meins_in,lv_meins_out,lv_menge_out. * lv_menge_in = ls_zsdt007-menge. * lv_meins_out = poitem-po_unit. * lv_meins_in = lv_meins. * lv_matnr = ls_zsdt007-matnr. * CALL FUNCTION 'MD_CONVERT_MATERIAL_UNIT' * EXPORTING * i_matnr = lv_matnr * i_in_me = lv_meins_in * i_out_me = lv_meins_out * i_menge = lv_menge_in * IMPORTING * e_menge = lv_menge_out * EXCEPTIONS * error_in_application = 1 * error = 2 * OTHERS = 3. * poitem-po_unit = lv_meins_out. * poitem-quantity = lv_menge_out. * ENDIF. * * ENDIF. * ELSE. * IF ls_eina-meins NE lv_meins. * poitem-quantity = ls_zsdt007-menge * ls_eina-umren / ls_eina-umrez. * poitem-po_unit = ls_eina-meins. * ELSE. * poitem-quantity = ls_zsdt007-menge. * poitem-po_unit = ls_eina-meins. * ENDIF. * ENDIF. * CLEAR:lv_meins. * poitem-quantity = lv_menge_out."数量 poitemx-quantity = 'X'. poitemx-po_unit = 'X'. ****UPDATE BY JT 20221128 S 税码 * poitem-tax_code = ls_zsdt007-mwskz. " 税码 IF p_ls_zsdt001-mwskz IS NOT INITIAL. poitem-tax_code = p_ls_zsdt001-mwskz. ELSE. poitem-tax_code = ls_zsdt007-mwskz. ENDIF. ****UPDATE BY JT 20221128 E 税码 poitemx-tax_code = 'X'. poitem-no_rounding = 'X'. poitemx-no_rounding = 'X'. APPEND:poitem,poitemx. CLEAR:poitem,poitemx. poschedule-po_item = ebelp."行项目 poschedulex-po_item = ebelp. poschedule-del_datcat_ext = 'D'. "交货日期的类别 poschedulex-del_datcat_ext = 'X'. IF ls_zsdt007-retpo <> 'X'. "退货项目 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = ls_zsdt007-banfn IMPORTING output = ls_zsdt007-banfn. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = ls_zsdt007-bnfpo IMPORTING output = ls_zsdt007-bnfpo. "交货日期 poschedule-delivery_date = ls_zsdt007-lfdat. ELSE. poschedule-delivery_date = sy-datum. ENDIF. poschedulex-delivery_date = 'X'. * poschedule-quantity = ls_zsdt007-menge."数量 poschedule-quantity = lv_menge. CLEAR:lv_menge. poschedulex-quantity = 'X'. APPEND:poschedule,poschedulex. CLEAR:poschedule,poschedulex. pocond-itm_number = ebelp. pocond-cond_type = 'PB00'. " Give the pricing condition type that derives netprice pocond-cond_value = ls_zsdt007-brtwr. IF poheader-doc_type = 'ZIMP' OR poheader-doc_type = 'ZAIM' OR poheader-doc_type = 'ZFAI' OR poheader-doc_type = 'ZPTO'. pocond-currency = ls_zsdt007-koein. pocond-cond_unit = ls_zsdt007-kmein. pocondx-cond_unit = 'X'. pocond-numconvert = ls_zsdt007-kumza. pocondx-numconvert = 'X'. pocond-denominato = ls_zsdt007-kumne. pocondx-denominato = 'X'. ENDIF. * pocond-change_id = 'U'. *====================================================================* "*== add Tuq 17.11.2022 12:12:51 * IF poheader-doc_type = 'ZITO' OR poheader-doc_type = 'ZFTO'. * pocond-cond_value = ls_zsdt007-brtwr * ls_zsdt007-kpein. * ELSE. * ENDIF. "*== end Tuq 17.11.2022 12:12:51 ****UPDATE BY JT 20221128 S 条件货币 * pocond-currency = ls_zsdt007-koein. ****UPDATE BY JT 20221128 S 条件货币 pocond-cond_p_unt = ls_zsdt007-kpein. IF poheader-doc_type = 'ZITO' OR poheader-doc_type = 'ZFTO'. * SELECT SINGLE waers INTO pocond-currency FROM zsdt035 WHERE werks = ls_zsdt007-werks * AND matnr = ls_zsdt007-matnr * AND datab <= sy-datum * AND datbi >= sy-datum. pocond-itm_number = ebelp. pocond-currency = ls_zsdt007-koein. * SELECT SINGLE meins FROM mara INTO poitem-po_unit WHERE matnr = ls_zsdt007-matnr."单位 * poitem-quantity = ls_zsdt007-menge. IF p_ls_zsdt001-kschl IS NOT INITIAL. SELECT COUNT(*) FROM a017 WHERE lifnr = poheader-vendor AND matnr = ls_zsdt007-matnr AND ekorg = poheader-purch_org AND werks = ls_zsdt007-werks "删除标识 AND a017~datbi >= ls_zsdt007-bedat"sy-datum "有效期至 AND a017~datab <= ls_zsdt007-bedat" sy-datum "有效期自 AND a017~kschl = p_ls_zsdt001-kschl "条件类型 AND a017~esokz = '0'. IF sy-subrc = 0. pocond-change_id = 'U'. pocond-cond_type = p_ls_zsdt001-kschl. ELSE. SELECT COUNT(*) FROM a018 WHERE lifnr = poheader-vendor AND matnr = ls_zsdt007-matnr AND ekorg = poheader-purch_org AND a018~datbi >= ls_zsdt007-bedat"sy-datum "有效期至 AND a018~datab <= ls_zsdt007-bedat"sy-datum "有效期自 AND a018~kschl = p_ls_zsdt001-kschl "条件类型 AND a018~esokz = '0'. IF sy-subrc = 0. pocond-change_id = 'U'. pocond-cond_type = p_ls_zsdt001-kschl . ELSE. pocond-change_id = 'U'. pocond-cond_type = 'PBXX'. ENDIF. ENDIF. ELSE. pocond-change_id = 'U'. pocond-cond_type = 'PBXX'. ENDIF. ENDIF. IF pocond-currency NE poheader-currency. CLEAR:lv_from_cur,lv_to_cur,ls_rate,ls_return. lv_from_cur = poheader-currency. lv_to_cur = pocond-currency. CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL' EXPORTING rate_type = 'M' from_curr = lv_from_cur to_currncy = lv_to_cur date = sy-datum IMPORTING exch_rate = ls_rate return = ls_return. IF ls_return-type NE 'E'. pocond-conexchrat = ls_rate-exch_rate. pocondx-conexchrat = 'X'. ENDIF. ENDIF. * SELECT COUNT(*) * FROM a017 * WHERE lifnr = poheader-vendor * AND matnr = ls_zsdt007-matnr * AND ekorg = ls_zsdt007-ekorg * AND werks = ls_zsdt007-werks "删除标识 * AND a017~datbi >= sy-datum "有效期至 * AND a017~datab <= sy-datum "有效期自 * AND a017~kschl = 'PB00' "条件类型 * AND a017~esokz = '0'. * IF sy-subrc = 0. * pocond-change_id = 'U'. * ELSE. * SELECT COUNT(*) * FROM a018 * WHERE lifnr = poheader-vendor * AND matnr = ls_zsdt007-matnr * AND ekorg = ls_zsdt007-ekorg * AND a018~datbi >= sy-datum "有效期至 * AND a018~datab <= sy-datum "有效期自 * AND a018~kschl = 'PB00' "条件类型 * AND a018~esokz = '0'. * IF sy-subrc = 0. * pocond-change_id = 'U'. * ELSE. * pocond-change_id = 'I'. * pocond-cond_type = 'PBXX'. * ENDIF. * ENDIF. * pocond-change_id = 'U'. pocondx-itm_number = ebelp. pocondx-itm_numberx = 'X'. pocondx-cond_type = 'X'. pocondx-cond_value = 'X'. pocondx-currency = 'X'. pocondx-cond_p_unt = 'X'. pocondx-change_id = 'X'. IF poheader-doc_type = 'ZIMP' OR poheader-doc_type = 'ZAIM' OR poheader-doc_type = 'ZFAI' OR poheader-doc_type = 'ZPTO'. DO 2 TIMES. pocond-change_id = 'D'. IF sy-index = 2. pocond-change_id = 'I'. ENDIF. APPEND pocond. APPEND pocondx. ENDDO. pocond2-change_id = 'D'. pocond2-cond_type = 'PBXX'. pocond2-itm_number = ebelp. APPEND pocond2 TO pocond. CLEAR:pocond2. pocondx2-change_id = 'X'. pocondx2-cond_type = 'X'. pocondx2-itm_number = 'X'. APPEND pocondx2 TO pocondx. CLEAR:pocondx2. ELSE. APPEND pocond. APPEND pocondx. ENDIF. CLEAR:pocond,pocondx. CLEAR:ls_zsdt007_1,ls_zsdt007. ENDLOOP. DATA:ls_zsdt001 TYPE zsdt001, lt_zsdt001 TYPE TABLE OF zsdt001. SELECT * INTO TABLE lt_zsdt001 FROM zsdt001 WHERE zrfcid = p_ls_zsdt001-zrfcid. IF poheader-doc_type = 'ZITO' OR poheader-doc_type = 'ZFTO'. READ TABLE p_lt_zsdt007 INTO ls_zsdt007 INDEX 1. IF ls_zsdt007-zjsgc IS NOT INITIAL. lv_buspartno_dp = ls_zsdt007-zjsgc. ELSE. READ TABLE lt_zsdt001 INTO ls_zsdt001 WITH KEY canum = '0040'. lv_buspartno_dp = ls_zsdt001-werks. ENDIF. IF lv_buspartno_dp IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = lv_buspartno_dp IMPORTING output = lv_buspartno_dp. popartner-partnerdesc = 'DP'. popartner-langu = sy-langu. popartner-buspartno = lv_buspartno_dp. APPEND popartner. CLEAR:popartner. ENDIF. IF ls_zsdt007-zjhgc IS NOT INITIAL. lv_buspartno_mn = ls_zsdt007-zjhgc. ELSE. READ TABLE lt_zsdt001 INTO ls_zsdt001 WITH KEY canum = '0010'. lv_buspartno_mn = ls_zsdt001-zwerks. ENDIF. IF lv_buspartno_mn IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = lv_buspartno_mn IMPORTING output = lv_buspartno_mn. popartner-partnerdesc = 'MN'. popartner-langu = sy-langu. popartner-buspartno = lv_buspartno_mn. APPEND popartner. CLEAR:popartner. ENDIF. ENDIF. IF poheader-doc_type = 'ZPTO'. READ TABLE p_lt_zsdt007 INTO ls_zsdt007 INDEX 1. IF ls_zsdt007-zjsgc IS NOT INITIAL. lv_buspartno_dp = ls_zsdt007-zjsgc. ELSE. READ TABLE lt_zsdt001 INTO ls_zsdt001 WITH KEY canum = '0040'. lv_buspartno_dp = ls_zsdt001-werks. ENDIF. IF lv_buspartno_dp IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = lv_buspartno_dp IMPORTING output = lv_buspartno_dp. popartner-partnerdesc = 'DP'. popartner-langu = sy-langu. popartner-buspartno = lv_buspartno_dp. APPEND popartner. CLEAR:popartner. ENDIF. IF ls_zsdt007-zzcgc IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = ls_zsdt007-zzcgc IMPORTING output = lv_buspartno_se. popartner-partnerdesc = 'SE'. popartner-langu = sy-langu. popartner-buspartno = lv_buspartno_se. APPEND popartner. CLEAR:popartner. ENDIF. IF ls_zsdt007-zcggys IS NOT INITIAL. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = ls_zsdt007-zcggys IMPORTING output = lv_buspartno_vd. popartner-partnerdesc = 'VD'. popartner-langu = sy-langu. popartner-buspartno = lv_buspartno_vd. APPEND popartner. CLEAR:popartner. ENDIF. ENDIF. CALL FUNCTION 'BAPI_PO_CREATE1' EXPORTING poheader = poheader poheaderx = poheaderx no_price_from_po = 'X' IMPORTING exppurchaseorder = l_eblen TABLES return = return poitem = poitem poitemx = poitemx poschedule = poschedule poschedulex = poschedulex pocond = pocond pocondx = pocondx popartner = popartner. LOOP AT return WHERE type = 'E' OR type = 'A'. CONCATENATE p_e_msg return-message INTO p_e_msg SEPARATED BY '/'. ENDLOOP. IF sy-subrc <> '0'. CALL METHOD zcl_rfc=>get_source EXPORTING i_id = p_i_id i_canum = p_i_canum IMPORTING e_zrfct002 = ls_zrfct002. * RECEIVING * R_SOURCE = LS_SOURCE. CLEAR:ls_zsdt008. ls_zsdt008-canum = ls_zrfct002-canum. ls_zsdt008-objtype = ls_zrfct002-objtype_save. ls_zsdt008-objkey = l_eblen. ls_zsdt008-zrfcid = ls_zrfct002-zrfcid. ls_zsdt008-zrfc_logid = p_i_id. APPEND ls_zsdt008 TO lt_zsdt008. MODIFY zsdt008 FROM TABLE lt_zsdt008. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. p_e_code = 'S'. CONCATENATE 'PO:' l_eblen '创建成功' INTO p_e_msg. DATA:ls_zrfct005 TYPE zrfct005. CLEAR:ls_zrfct005. ls_zrfct005-status = '53'. ls_zrfct005-msgty = p_e_code. ls_zrfct005-msgid = '00'. ls_zrfct005-msgno = '001'. ls_zrfct005-msgv1 = p_e_msg. ls_zrfct005-msgv4 = l_eblen. APPEND ls_zrfct005 TO p_et_return. * P_ET_RETURN[] = VALUE #( ( * STATUS = '53' "通过状态53来保存KEY数据 * MSGTY = P_E_CODE * MSGID = '00' * MSGNO = '001' * MSGV1 = P_E_MSG * MSGV4 = L_EBLEN ) ). *------------------写入长文本------------------- DATA:ls_ekpo TYPE ekpo, lt_ekpo TYPE TABLE OF ekpo. DO 20 TIMES. SELECT * INTO TABLE lt_ekpo FROM ekpo WHERE ebeln = l_eblen. IF sy-subrc = 0. EXIT. ENDIF. WAIT UP TO '0.1' SECONDS. ENDDO. LOOP AT lt_ekpo INTO ls_ekpo. READ TABLE p_lt_zsdt007 INTO ls_zsdt007 INDEX sy-tabix. IF sy-subrc <> 0. CONTINUE. ENDIF. IF ls_zsdt007-ztext1 IS NOT INITIAL. PERFORM frm_text_save USING 'F07' ls_zsdt007-ztext1 ls_ekpo-ebeln ls_ekpo-ebelp 'EKPO'. ENDIF. IF ls_zsdt007-ztext2 IS NOT INITIAL. PERFORM frm_text_save USING 'F01' ls_zsdt007-ztext2 ls_ekpo-ebeln ls_ekpo-ebelp 'EKPO'. ENDIF. IF ls_zsdt007-ztext3 IS NOT INITIAL. PERFORM frm_text_save USING 'F02' ls_zsdt007-ztext3 ls_ekpo-ebeln ls_ekpo-ebelp 'EKPO'. ENDIF. IF ls_zsdt007-ztext4 IS NOT INITIAL. PERFORM frm_text_save USING 'F03' ls_zsdt007-ztext4 ls_ekpo-ebeln ls_ekpo-ebelp 'EKPO'. ENDIF. ENDLOOP. *------------------写入长文本------------------- ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. p_e_code = 'E'. ENDIF. ENDFORM.
标签:poheader,BAPI,TYPE,zsdt007,lv,订单,ABAP,ls,poitem From: https://www.cnblogs.com/ap-ad-java-abap/p/16987775.html