DATA:LS_EINA TYPE EINA,
LS_EINE TYPE EINE,
LS_MARA TYPE MARA,
LS_A017 TYPE A017.
DATA: I_EINA TYPE MEWIEINA,
I_EINAX TYPE MEWIEINAX,
I_EINE TYPE MEWIEINE,
I_EINEX TYPE MEWIEINEX,
E_EINA TYPE MEWIEINA,
E_EINE TYPE MEWIEINE,
LV_TEST TYPE BAPIFLAG-BAPIFLAG,
LS_KONM TYPE MEWISCALEQUAN,
LT_KONM TYPE TABLE OF MEWISCALEQUAN,
LS_CON_VALI TYPE MEWIVALIDITY,
LT_CON_VALI TYPE TABLE OF MEWIVALIDITY,
LS_CONDITION TYPE MEWICONDITION,
LT_CONDITION TYPE TABLE OF MEWICONDITION,
LS_RETURN2 TYPE BAPIRETURN,
LT_RETURN2 TYPE TABLE OF BAPIRETURN.
LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>) WHERE box = 'X' .
"补齐供应商的前导零
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_alv>-lifnr
IMPORTING
output = <fs_alv>-lifnr.
CLEAR:ls_eina,ls_eine,ls_mara.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_eina
FROM eina
WHERE matnr = <fs_alv>-matnr
AND lifnr = <fs_alv>-lifnr.
IF sy-subrc = 0.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_eine
FROM eine
WHERE infnr = ls_eina-infnr
AND ekorg = <fs_alv>-ekorg "采购组织
AND esokz = <fs_alv>-esokz "采购信息记录分类
AND werks = <fs_alv>-werks."工厂
IF sy-subrc = 0.
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'.
ENDIF.
ENDIF.
i_eina-vendor = <fs_alv>-lifnr."供应商
i_eina-material = <fs_alv>-matnr."物料编码
i_eina-manufacturer = <fs_alv>-mfrnr."制造商
IF i_eina-manufacturer IS NOT INITIAL.
i_einaX-manufacturer = 'X'.
ENDIF.
i_eine-purch_org = <fs_alv>-ekorg."采购组织
IF i_eine-purch_org IS NOT INITIAL.
i_einex-purch_org = 'X'.
ENDIF.
i_eine-info_type = <fs_alv>-esokz."信息类别
IF i_eine-info_type IS NOT INITIAL.
i_einex-info_type = 'X'.
ENDIF.
i_eine-plant = <fs_alv>-werks."工厂
IF i_eine-plant IS NOT INITIAL.
i_einex-plant = 'X'.
ENDIF.
i_eine-pur_group = <fs_alv>-ekgrp."采购组
IF i_eine-pur_group IS NOT INITIAL.
i_einex-pur_group = 'X'.
ENDIF.
i_eine-currency = <fs_alv>-waers."货币码
IF i_eine-currency IS NOT INITIAL.
i_einex-currency = 'X'.
ENDIF.
i_eine-tax_code = <fs_alv>-mwskz."税码
IF i_eine-tax_code IS NOT INITIAL.
i_einex-tax_code = 'X'.
ENDIF.
i_eine-plnd_delry = <fs_alv>-aplfz."计划交货时间(天)
IF i_eine-plnd_delry IS NOT INITIAL.
i_einex-plnd_delry = 'X'.
ENDIF.
i_eine-net_price = <fs_alv>-netpr."净价
IF i_eine-net_price IS NOT INITIAL.
i_einex-net_price = 'X'.
ENDIF.
"对采购单位进行一次转换
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = <fs_alv>-bprme
* LANGUAGE = SY-LANGU
IMPORTING
output = <fs_alv>-bprme
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
"对采购订单单位进行一次转换
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = <fs_alv>-meins
* LANGUAGE = SY-LANGU
IMPORTING
output = <fs_alv>-meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
i_eina-po_unit = <fs_alv>-meins.
IF i_eina-po_unit IS NOT INITIAL."采购订单单位
i_einax-po_unit = 'X'.
ENDIF.
i_eina-conv_num1 = <fs_alv>-umrez.
IF i_eina-conv_num1 IS NOT INITIAL."采购订单单位转换分子
i_einax-conv_num1 = 'X'.
ENDIF.
i_eina-conv_den1 = <fs_alv>-umren.
IF i_eina-conv_den1 IS NOT INITIAL."采购订单单位转换分母
i_einax-conv_den1 = 'X'.
ENDIF.
i_eine-orderpr_un = <fs_alv>-bprme."采购单位
IF i_eine-orderpr_un IS NOT INITIAL.
i_einex-orderpr_un = 'X'.
ENDIF.
i_eine-price_unit = <fs_alv>-peinh."价格单位
IF i_eine-price_unit IS NOT INITIAL.
i_einex-price_unit = 'X'.
ENDIF.
i_eine-conv_num1 = <fs_alv>-bpumz."价格单位转换订购单位分子
IF i_eine-conv_num1 IS NOT INITIAL.
i_einex-conv_num1 = 'X'.
ENDIF.
i_eine-conv_den1 = <fs_alv>-umren."价格单位转换订购单位分子
IF i_eine-conv_den1 IS NOT INITIAL.
i_einex-conv_den1 = 'X'.
ENDIF.
i_eine-nrm_po_qty = '1'."标准采购订单数量
i_einex-nrm_po_qty = 'X'.
CLEAR:ls_con_vali,ls_condition.
CLEAR:ls_a017.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_a017
FROM a017
WHERE kschl = 'ZP01' "条件类型
AND lifnr = <fs_alv>-lifnr "供应商帐户号
AND matnr = <fs_alv>-matnr "物料
AND ekorg = <fs_alv>-ekorg "采购组织
AND werks = <fs_alv>-werks "工厂
AND datab = <fs_alv>-datab "起始时间
AND datbi = <fs_alv>-datbi "截止时间
AND esokz = <fs_alv>-esokz. "采购信息记录分类-(0:标准 3:分包合同)
ls_con_vali-serial_id = ls_a017-knumh.
ls_con_vali-plant = <fs_alv>-werks."工厂
ls_con_vali-valid_from = <fs_alv>-datab."有效起始日
ls_con_vali-valid_to = <fs_alv>-datbi."有效截止日
APPEND ls_con_vali TO lt_con_vali.
ls_condition-serial_id = ls_a017-knumh.
ls_condition-cond_count = '01'.
ls_condition-cond_type = 'ZP01'."固定值
ls_condition-currency = <fs_alv>-waers."货币码
ls_condition-cond_value = <fs_alv>-netpr."净价
ls_condition-cond_p_unt = <fs_alv>-peinh."条件定价单位
ls_condition-cond_unit = <fs_alv>-bprme."条件单位
APPEND ls_condition TO lt_condition.
CLEAR:ls_konm,lt_konm[].
IF <fs_alv>-kstbm1 IS NOT INITIAL.
ls_konm-serial_no = ls_a017-knumh.
ls_konm-cond_count = '01'.
ls_konm-line_no = '0001'.
ls_konm-scale_base_qty = <fs_alv>-kstbm1.
ls_konm-cond_value = <fs_alv>-kbetr1.
APPEND ls_konm TO lt_konm.
ENDIF.
IF <fs_alv>-kstbm2 IS NOT INITIAL.
ls_konm-serial_no = ls_a017-knumh.
ls_konm-cond_count = '01'.
ls_konm-line_no = '0004'.
ls_konm-scale_base_qty = <fs_alv>-kstbm2.
ls_konm-cond_value = <fs_alv>-kbetr2.
APPEND ls_konm TO lt_konm.
ENDIF.
IF <fs_alv>-kstbm3 IS NOT INITIAL.
ls_konm-serial_no = ls_a017-knumh.
ls_konm-cond_count = '01'.
ls_konm-line_no = '0007'.
ls_konm-scale_base_qty = <fs_alv>-kstbm3.
ls_konm-cond_value = <fs_alv>-kbetr3.
APPEND ls_konm TO lt_konm.
ENDIF.
IF <fs_alv>-kstbm4 IS NOT INITIAL.
ls_konm-serial_no = ls_a017-knumh.
ls_konm-cond_count = '01'.
ls_konm-line_no = '0010'.
ls_konm-scale_base_qty = <fs_alv>-kstbm4.
ls_konm-cond_value = <fs_alv>-kbetr4.
APPEND ls_konm TO lt_konm.
ENDIF.
lv_test = ''."是否测试,如果为'X',则为测试
CLEAR:lt_return2.
IF <fs_alv>-mode = 'I'.
CALL FUNCTION 'ME_INFORECORD_MAINTAIN'
EXPORTING
i_eina = i_eina
i_einax = i_einax
i_eine = i_eine
i_einex = i_einex
testrun = lv_test
IMPORTING
e_eina = e_eina
e_eine = e_eine
TABLES
* TXT_LINES =
* cond_validity = lt_con_vali
* condition = lt_condition
* COND_SCALE_VALUE =
* cond_scale_quan = lt_konm
return = lt_return2.
READ TABLE lt_return2 INTO ls_return2 WITH KEY type = 'E'.
IF sy-subrc <> 0 AND lv_test = ''.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
"因为净价和条件不能同时维护,所以分开维护
CLEAR:i_einex-net_price.
CLEAR: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_INFORECORD_MAINTAIN'
EXPORTING
i_eina = i_eina
i_einax = i_einax
i_eine = i_eine
i_einex = i_einex
testrun = lv_test
IMPORTING
e_eina = e_eina
e_eine = e_eine
TABLES
* TXT_LINES =
cond_validity = lt_con_vali
condition = lt_condition
* COND_SCALE_VALUE =
cond_scale_quan = lt_konm
return = lt_return2.
ENDIF.
ELSE.
"对数据进行修改
CALL FUNCTION 'ME_INFORECORD_MAINTAIN'
EXPORTING
i_eina = i_eina
i_einax = i_einax
i_eine = i_eine
i_einex = i_einex
testrun = lv_test
IMPORTING
e_eina = e_eina
e_eine = e_eine
TABLES
* TXT_LINES =
* cond_validity = lt_con_vali
* condition = lt_condition
* COND_SCALE_VALUE =
* cond_scale_quan = lt_konm
return = lt_return2.
CLEAR:i_einex-net_price."一定要清空这个变量,不然程序会报错
CALL FUNCTION 'ME_INFORECORD_MAINTAIN'
EXPORTING
i_eina = i_eina
** I_EINAX =
i_eine = i_eine
i_einex = i_einex
testrun = lv_test
IMPORTING
e_eina = e_eina
e_eine = e_eine
TABLES
** TXT_LINES =
cond_validity = lt_con_vali
condition = lt_condition
** COND_SCALE_VALUE =
cond_scale_quan = lt_konm
return = lt_return2.
ENDIF.
LOOP AT lt_return2 INTO ls_return2 WHERE type = 'E' OR type = 'A'.
<fs_alv>-msg = <fs_alv>-msg && ls_return2-message .
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
<fs_alv>-msg = '创建失败'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
<fs_alv>-msg = '创建成功'.
ENDIF.
CLEAR:i_eina,i_einax,
i_eine,i_einex,
lt_con_vali[],lt_condition[],lt_konm[],
ls_eina.
CLEAR:lt_return2[],ls_return2.
ENDLOOP.
————————————————
版权声明:本文为CSDN博主「wo是路人甲か钟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接: