ABAP 采购信息记录BAPI
DATA:lv_mode TYPE c, ls_eina TYPE eina, lt_eina TYPE TABLE OF eina, ls_eine TYPE eine, lt_eine TYPE TABLE OF eine, i_eina TYPE mewieina, i_einax TYPE mewieinax, i_eine TYPE mewieine, i_einex TYPE mewieinex, lt_return2 TYPE mewi_t_return, ls_return2 LIKE LINE OF lt_return2, lt_con_vali TYPE TABLE OF mewivalidity, ls_con_vali TYPE mewivalidity, lt_condition TYPE TABLE OF mewicondition, ls_condition TYPE mewicondition, e_eina TYPE mewieina, e_eine TYPE mewieine, ls_mara TYPE mara, lt_mara TYPE TABLE OF mara, lv_msg TYPE bapi_msg. SELECT matnr,werks,ekgrp,plifz FROM marc INTO TABLE @DATA(lt_marc). SORT lt_marc BY matnr werks. SELECT * FROM mara INTO TABLE lt_mara. SORT lt_mara BY matnr. SELECT * FROM eina INTO TABLE lt_eina. SORT lt_eina BY matnr lifnr. SELECT * FROM eine INTO TABLE lt_eine. SORT lt_eine BY infnr ekorg esokz werks. SELECT a~lifnr, "供应商 a~matnr, "物料 a~ekorg, "采购组织 a~werks, "工厂 a~esokz, "信息类型 a~datab, "有效期自 a~datbi, "有效期至 a~knumh "条件记录编号 INTO TABLE @DATA(lt_a017) FROM a017 AS a. SORT lt_a017 BY lifnr matnr ekorg werks esokz. LOOP AT in_tab ASSIGNING FIELD-SYMBOL(<fs_zmms009>). CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING input = <fs_zmms009>-matnr IMPORTING output = <fs_zmms009>-matnr EXCEPTIONS length_error = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. "补齐供应商的前导零 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = <fs_zmms009>-lifnr IMPORTING output = <fs_zmms009>-lifnr. READ TABLE lt_eina INTO ls_eina WITH KEY matnr = <fs_zmms009>-matnr lifnr = <fs_zmms009>-lifnr BINARY SEARCH. IF sy-subrc <> 0. lv_mode = 'I'."新增 ELSE. READ TABLE lt_eine INTO ls_eine WITH KEY infnr = ls_eina-infnr ekorg = <fs_zmms009>-ekorg esokz = <fs_zmms009>-esokz werks = <fs_zmms009>-werks BINARY SEARCH. IF sy-subrc = 0. lv_mode = 'M'."修改 i_eina-info_rec = ls_eina-infnr."采购信息记录号 i_eine-info_rec = ls_eina-infnr." i_einex-info_rec = 'X'. i_einax-vendor = 'X'. i_einax-material = 'X'. ELSE. lv_mode = 'I'."新增 ENDIF. ENDIF. i_eina-vendor = <fs_zmms009>-lifnr."供应商 i_eina-material = <fs_zmms009>-matnr."物料编码 * i_eina-conv_num1 = <fs_zmms009>-umrez."转换分子 * i_eina-conv_den1 = <fs_zmms009>-umren."转换分母 i_eine-conv_num1 = <fs_zmms009>-umrez."转换分子 IF i_eine-conv_num1 IS NOT INITIAL. i_einex-conv_num1 = 'X'. ENDIF. i_eine-conv_den1 = <fs_zmms009>-umren."转换分母 IF i_eine-conv_den1 IS NOT INITIAL. i_einex-conv_den1 = 'X'. ENDIF. i_eine-purch_org = <fs_zmms009>-ekorg."采购组织 IF i_eine-purch_org IS NOT INITIAL. i_einex-purch_org = 'X'. ENDIF. i_eine-info_type = <fs_zmms009>-esokz."信息类别 IF i_eine-info_type IS NOT INITIAL. i_einex-info_type = 'X'. ENDIF. i_eine-plant = <fs_zmms009>-werks."工厂 IF i_eine-plant IS NOT INITIAL. i_einex-plant = 'X'. ENDIF. IF <fs_zmms009>-ekgrp IS INITIAL. READ TABLE lt_marc INTO DATA(ls_marc) WITH KEY matnr = <fs_zmms009>-matnr werks = <fs_zmms009>-werks BINARY SEARCH. IF sy-subrc = 0. i_eine-plnd_delry = ls_marc-plifz. "计划交货时间 <fs_zmms009>-ekgrp = ls_marc-ekgrp. ENDIF. ENDIF. IF i_eine-plnd_delry IS NOT INITIAL. i_einex-plnd_delry = 'X'. ENDIF. i_eine-pur_group = <fs_zmms009>-ekgrp."采购组 IF i_eine-pur_group IS NOT INITIAL. i_einex-pur_group = 'X'. ENDIF. i_eine-currency = <fs_zmms009>-waers."货币码 IF i_eine-currency IS NOT INITIAL. i_einex-currency = 'X'. ENDIF. i_eine-tax_code = <fs_zmms009>-mwskz."税码 IF i_eine-tax_code IS NOT INITIAL. i_einex-tax_code = 'X'. ENDIF. IF <fs_zmms009>-netpr1 IS NOT INITIAL. ls_condition-cond_type = 'PB99'."条件类型 i_eine-net_price = <fs_zmms009>-netpr1."净价 IF i_eine-net_price IS NOT INITIAL. i_einex-net_price = 'X'. ENDIF. ELSEIF <fs_zmms009>-netpr2 IS NOT INITIAL. ls_condition-cond_type = 'PB01'."条件类型 i_eine-net_price = <fs_zmms009>-netpr2."净价 IF i_eine-net_price IS NOT INITIAL. i_einex-net_price = 'X'. ENDIF. ENDIF. "对采购单位进行一次转换 CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING input = <fs_zmms009>-bprme * LANGUAGE = SY-LANGU IMPORTING output = <fs_zmms009>-bprme EXCEPTIONS unit_not_found = 1 OTHERS = 2. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. "对单位进行校验 READ TABLE lt_mara INTO ls_mara WITH KEY matnr = <fs_zmms009>-matnr BINARY SEARCH. IF sy-subrc = 0. IF ls_mara-bstme IS NOT INITIAL. i_eine-orderpr_un = ls_mara-bstme."采购单位 IF i_eine-orderpr_un IS NOT INITIAL. i_einex-orderpr_un = 'X'. ENDIF. IF ls_mara-bstme <> <fs_zmms009>-bprme AND <fs_zmms009>-bprme IS NOT INITIAL. i_eine-orderpr_un = <fs_zmms009>-bprme."采购单位 ENDIF. ELSE. i_eine-orderpr_un = ls_mara-meins."采购单位 IF i_eine-orderpr_un IS NOT INITIAL. i_einex-orderpr_un = 'X'. ENDIF. IF ls_mara-meins <> <fs_zmms009>-bprme AND <fs_zmms009>-bprme IS NOT INITIAL. i_eine-orderpr_un = <fs_zmms009>-bprme."采购单位 ENDIF. ENDIF. ENDIF. i_eine-price_unit = <fs_zmms009>-peinh."价格单位 IF i_eine-price_unit IS NOT INITIAL. i_einex-price_unit = 'X'. ENDIF. i_eine-nrm_po_qty = <fs_zmms009>-norbm."标准采购订单数量 IF i_eine-nrm_po_qty IS NOT INITIAL. i_einex-nrm_po_qty = 'X'. ENDIF. IF i_eina-info_rec <> ''. ls_condition-change_id = 'U'. READ TABLE lt_a017 INTO DATA(ls_a017) WITH KEY lifnr = <fs_zmms009>-lifnr matnr = <fs_zmms009>-matnr ekorg = <fs_zmms009>-ekorg werks = <fs_zmms009>-werks esokz = <fs_zmms009>-esokz BINARY SEARCH. IF sy-subrc = 0. ls_con_vali-serial_id = ls_a017-knumh. ls_condition-serial_id = ls_a017-knumh. ls_condition-cond_count = '01'. ENDIF. ENDIF. ls_con_vali-plant = <fs_zmms009>-werks."工厂 ls_con_vali-valid_from = <fs_zmms009>-datab."有效起始日 ls_con_vali-valid_to = <fs_zmms009>-prdat."有效截止日 APPEND ls_con_vali TO lt_con_vali. ls_condition-currency = <fs_zmms009>-waers."货币码 IF <fs_zmms009>-netpr1 IS NOT INITIAL. ls_condition-cond_value = <fs_zmms009>-netpr1."净价 ELSEIF <fs_zmms009>-netpr2 IS NOT INITIAL. ls_condition-cond_value = <fs_zmms009>-netpr2."净价 ENDIF. ls_condition-cond_p_unt = <fs_zmms009>-peinh."条件定价单位 ls_condition-cond_unit = <fs_zmms009>-bprme."条件单位 APPEND ls_condition TO lt_condition. REFRESH:lt_return2. IF lv_mode = 'I'. CALL FUNCTION 'ME_INITIALIZE_INFORECORD'. CALL FUNCTION 'ME_INFORECORD_MAINTAIN' EXPORTING i_eina = i_eina i_eine = i_eine i_einex = i_einex IMPORTING e_eina = e_eina e_eine = e_eine TABLES return = lt_return2. READ TABLE lt_return2 INTO ls_return2 WITH KEY type = 'E'. IF sy-subrc <> 0. "创建时需要将数据写入到数据库里,不然报错 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. "因为净价和条件不能同时维护,所以分开维护 CLEAR:i_einex-net_price. REFRESH:lt_return2. i_eina-info_rec = e_eina-info_rec."采购信息记录号 i_eine-info_rec = e_eina-info_rec. i_einex-info_rec = 'X'. CALL FUNCTION 'ME_INITIALIZE_INFORECORD'. CALL FUNCTION 'ME_INFORECORD_MAINTAIN' EXPORTING i_eina = i_eina i_eine = i_eine i_einex = i_einex IMPORTING e_eina = e_eina e_eine = e_eine TABLES cond_validity = lt_con_vali condition = lt_condition return = lt_return2. ENDIF. ELSE. "对数据进行修改 CALL FUNCTION 'ME_INITIALIZE_INFORECORD'. CALL FUNCTION 'ME_INFORECORD_MAINTAIN' EXPORTING i_eina = i_eina i_einax = i_einax i_eine = i_eine i_einex = i_einex IMPORTING e_eina = e_eina e_eine = e_eine TABLES * condition = lt_condition return = lt_return2. READ TABLE lt_return2 INTO ls_return2 WITH KEY type = 'E'. IF sy-subrc <> 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF. REFRESH : lt_return2. CLEAR:i_einex-net_price. CALL FUNCTION 'ME_INITIALIZE_INFORECORD'. CALL FUNCTION 'ME_INFORECORD_MAINTAIN' EXPORTING i_eina = i_eina i_einax = i_einax i_eine = i_eine i_einex = i_einex IMPORTING e_eina = e_eina e_eine = e_eine TABLES cond_validity = lt_con_vali condition = lt_condition return = lt_return2. ENDIF. READ TABLE lt_return2 INTO ls_return2 WITH KEY type = 'E'. IF sy-subrc = 0. <fs_zmms009>-msgty = 'E'. <fs_zmms009>-msgtxt = ls_return2-message.CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. <fs_zmms009>-e_infnr = e_eina-info_rec."采购信息记录号 <fs_zmms009>-msgty = 'S'. IF lv_mode = 'I'. <fs_zmms009>-msgtxt = '创建成功' && <fs_zmms009>-e_infnr. ELSE. <fs_zmms009>-msgtxt = '修改成功' && <fs_zmms009>-e_infnr. ENDIF.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF. CLEAR:i_eina,i_einax, i_eine,i_einex, lt_con_vali,lt_condition, ls_eina. CLEAR:lt_return2. ENDLOOP.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)