SAP采购信息记录,关联方交易销售价格创建BDC实现
DATA:BEGIN OF ls_data.
INCLUDE TYPE zsmm029_o.
INCLUDE TYPE zsmm028.
DATA END OF ls_data..
DATA lt_data LIKE TABLE OF ls_data.
DATA lv_fail TYPE c.
DATA: o_type_sp TYPE bapi_mtyp,
o_msg_sp TYPE bapi_msg,
o_data_sp TYPE TABLE OF zssd013_o.
DATA: i_data TYPE zssd013_i,
i_eina TYPE zssd013_eina.
IF NOT i_head IS INITIAL.
"供应商取值
SELECT SINGLE
*
INTO @DATA(ls_ztmm002)
FROM
ztmm002
WHERE
lifnr = @i_head-lifnr.
IF NOT ls_ztmm002 IS INITIAL.
"销售组织取值
SELECT SINGLE
*
INTO @DATA(ls_ztmm002_1)
FROM
ztmm002
WHERE
werks = @i_head-ekorg.
ENDIF.
ENDIF.
LOOP AT i_item.
MOVE-CORRESPONDING i_item TO ls_data.
* ls_data-matnr = |{ i_item-matnr ALPHA = IN }|.
* ls_data-lifnr = |{ i_head-lifnr ALPHA = IN }|.
"供应商增加前导零
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_head-lifnr
IMPORTING
output = ls_data-lifnr.
"物料增加前导零
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = i_item-matnr
IMPORTING
output = ls_data-matnr.
ls_data-werks = i_head-werks.
ls_data-ekorg = i_head-ekorg.
APPEND ls_data TO lt_data.
CLEAR ls_data.
ENDLOOP.
MOVE-CORRESPONDING lt_data TO gt_data.
LOOP AT lt_data INTO ls_data.
MOVE-CORRESPONDING ls_data TO gs_data.
ls_data-lifnr = |{ ls_data-lifnr ALPHA = IN }|.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = ls_data-bprme
language = sy-langu
IMPORTING
output = ls_data-bprme
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
AT END OF datbi.
PERFORM frm_bdc.
ENDAT.
"物料去除前导零
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
input = gs_data-matnr
IMPORTING
output = gs_data-matnr.
MOVE-CORRESPONDING gs_data TO o_item.
"物料增加前导零
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = gs_data-matnr
IMPORTING
output = gs_data-matnr.
IF o_item-ztype = 'E'.
o_type = 'E'.
o_msg = '创建失败'.
lv_fail = 'X'.
ELSE.
* "供应商增加前导零
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = i_head-lifnr
* IMPORTING
* output = i_head-lifnr.
"取采购信息记录
SELECT SINGLE
eina~matnr,
eina~lifnr,
eine~infnr,
eine~werks,
eine~ekorg,
eine~esokz,
eine~peinh,
eine~waers,
eine~netpr,
a017~knumh,
konp~kstbm,
konp~kpein,
konp~kmein,
konp~krech,
konp~kbetr,
konp~kopos
INTO CORRESPONDING FIELDS OF @i_eina
FROM
eina
INNER JOIN eine ON eina~infnr EQ eine~infnr
INNER JOIN a017 ON eina~lifnr EQ a017~lifnr AND
eina~matnr EQ a017~matnr AND
eine~ekorg EQ a017~ekorg AND
eine~werks EQ a017~werks AND
eine~esokz EQ a017~esokz
INNER JOIN konp ON a017~knumh = konp~knumh
WHERE
eina~matnr EQ @ls_data-matnr AND
eina~lifnr EQ @ls_data-lifnr AND
eine~werks EQ @i_head-werks AND
eine~ekorg EQ @i_head-ekorg AND
eine~esokz EQ @ls_data-esokz.
o_infnr = i_eina-infnr.
AT END OF matnr.
MOVE-CORRESPONDING gs_data TO i_data.
IF NOT ls_ztmm002 IS INITIAL.
i_data-kunnr = ls_ztmm002-lifnr.
ENDIF.
IF NOT ls_ztmm002_1 IS INITIAL.
i_data-vkorg = ls_ztmm002_1-werks.
ENDIF.
"创建销售价格
CALL FUNCTION 'ZSD_SALES_PRICE_BDC'
EXPORTING
i_head = i_head
i_data = i_data
i_eina = i_eina
IMPORTING
o_type = o_type_sp
o_msg = o_msg_sp.
IF o_type_sp = 'E'.
o_item-ztype = 'E'.
o_item-zmsg = '销售价格创建失败'.
lv_fail = 'X'.
ELSE.
o_item-ztype = 'S'.
o_item-zmsg = '创建成功'.
ENDIF.
ENDAT.
* "供应商去掉前导零
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
* EXPORTING
* input = i_head-lifnr
* IMPORTING
* output = i_head-lifnr.
ENDIF.
APPEND o_item.
CLEAR:ls_data , gs_data.
ENDLOOP.
IF lv_fail IS INITIAL.
o_type = 'S'.
o_msg = '创建成功'.
ENDIF.
CLEAR lv_fail.
创建采购信息记录以及价格
*----------------------------------------------------------------------*
***INCLUDE LZRFC07F01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_BDC
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_bdc .
DATA:lv_infnr TYPE eina-infnr.
* CLEAR gs_data.
* READ TABLE gs_data INTO gs_data INDEX 1.
* DATA lv_infnr TYPE eine-infnr.
* DATA:lv_datbi TYPE a018-datbi,
* lv_datab TYPE a018-datab.
* IF gt_data IS NOT INITIAL.
* SELECT single
* eine~infnr
* INTO
* lv_infnr
* FROM
* eine
* INNER JOIN eina ON eina~infnr = eine~infnr
* FOR ALL ENTRIES IN @gt_data
* WHERE
* eina~matnr = gs_data-matnr AND
* eina~lifnr = gs_data-lifnr AND
* eine~ekorg = gs_data-ekorg AND
* eine~esokz = gs_data-esokz AND
* eine~werks = gs_data-werks.
SELECT
*
INTO TABLE @DATA(lt_eine)
FROM
eine
INNER JOIN eina ON eina~infnr = eine~infnr
* FOR ALL ENTRIES IN @gt_data
WHERE
eina~matnr = @gs_data-matnr AND
eine~werks = @gs_data-werks AND
eina~lifnr = @gs_data-lifnr AND
eine~esokz = @gs_data-esokz AND
eine~ekorg = @gs_data-ekorg.
* ENDIF.
IF NOT lt_eine IS INITIAL. "若已存在采购信息记录,跳过
PERFORM frm_me12.
ELSE.
PERFORM frm_me11.
ENDIF.
* SELECT eine~*
* INTO TABLE @DATA(ls_eine)
* FROM eine
* JOIN eina ON eina~infnr = eine~infnr
* WHERE eina~matnr = @gs_data-matnr
* AND werks = @gs_data-werks
* AND eina~lifnr = @gs_data-lifnr
* AND esokz = @gs_data-esokz
* AND eine~ekorg = @gs_data-ekorg
.
IF gv_flag = 'X' AND sy-subrc = '0'. "创捷或修改条件价格
PERFORM frm_me12_price.
* CLEAR:LV_DATBI,
* LV_DATAB.
* SELECT SINGLE
* DATBI
* DATAB
* INTO ( LV_DATBI, LV_DATAB )
* FROM A017
* WHERE LIFNR = gs_data-LIFNR
* AND MATNR = gs_data-MATNR
* AND EKORG = gs_data-EKORG
* AND ESOKZ = gs_data-ESOKZ
* AND WERKS = gs_data-WERKS.
* IF LV_DATBI = gs_data-DATBI AND LV_DATAB = gs_data-DATAB. "有效日期一样 mek2.
* PERFORM FRM_MEK2.
* ELSE."否则,mek1 .
* PERFORM FRM_MEK1.
* ENDIF.
ENDIF.
ENDFORM.
*& Form FRM_MEK2
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_mek2 .
DATA: lv_netpr TYPE string,
lv_kpein TYPE string,
lv_kstbm TYPE string,
lv_fnam TYPE bdcdata-fnam,
lv_c TYPE c LENGTH 15,
lv_num TYPE n LENGTH 2.
WRITE gs_data-netpr TO lv_c.
lv_netpr = lv_c.
* LV_NETPR = gs_data-NETPR .
lv_kpein = gs_data-peinh.
WRITE gs_data-datab TO gs_data-datab.
WRITE gs_data-datbi TO gs_data-datbi.
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_field USING 'RV13A-KSCHL' 'PB00'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPLV14A' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=WEIT'.
PERFORM bdc_field USING 'RV130-SELKZ(05)' 'X'.
PERFORM bdc_dynpro USING 'RV13A017' '1000'.
PERFORM bdc_field USING 'F001' gs_data-lifnr .
PERFORM bdc_field USING 'F002' gs_data-matnr.
PERFORM bdc_field USING 'F003' gs_data-ekorg.
PERFORM bdc_field USING 'F004' gs_data-werks.
PERFORM bdc_field USING 'F005-LOW' gs_data-esokz.
PERFORM bdc_field USING 'SEL_DATE' gs_data-datab.
PERFORM bdc_field USING 'BDC_CURSOR' 'SEL_DATE'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.
* PERFORM BDC_DYNPRO USING 'SAPMV13A' '1018'.
* PERFORM BDC_FIELD USING 'KONP-KBETR(01)'
* LV_NETPR.
* PERFORM BDC_FIELD USING 'BDC_CURSOR'
* 'KONP-KBETR(01)'.
* PERFORM BDC_FIELD USING 'BDC_OKCODE'
* '=PSTF'.
* PERFORM BDC_DYNPRO USING 'SAPMV13A' '1017'.
* PERFORM BDC_FIELD USING 'KONP-KBETR(01)'
* LV_NETPR.
* PERFORM BDC_FIELD USING 'BDC_OKCODE'
* '/00'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PDAT'.
PERFORM bdc_dynpro USING 'SAPMV13A' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BACK'.
PERFORM bdc_field USING 'KONP-KBETR' lv_netpr.
PERFORM bdc_field USING 'KONP-GKWRT' lv_netpr.
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
* PERFORM BDC_FIELD USING 'KONP-KBETR(01)'
* LV_NETPR.
PERFORM bdc_field USING 'BDC_CURSOR' 'KONP-KBETR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PSTF'.
CLEAR lv_num.
LOOP AT gt_data INTO DATA(ls_alv) WHERE matnr = gs_data-matnr AND
lifnr = gs_data-lifnr AND
ekorg = gs_data-ekorg AND
esokz = gs_data-esokz AND
kbetr > 0.
ENDLOOP.
IF sy-subrc = 0.
DO 10 TIMES.
PERFORM bdc_dynpro USING 'SAPMV13A' '0303'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KONM-KSTBM(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=DLIS'.
ENDDO.
PERFORM bdc_dynpro USING 'SAPMV13A' '0303'.
LOOP AT gt_data INTO ls_alv WHERE matnr = gs_data-matnr AND
lifnr = gs_data-lifnr AND
ekorg = gs_data-ekorg AND
esokz = gs_data-esokz.
* AND DATBI = gs_data-DATBI AND DATAB = gs_data-DATAB.
lv_num = lv_num + 1.
lv_fnam = 'KONM-KSTBM(' && lv_num && ')'.
* LV_KSTBM = LS_ALV-KSTBM.
CLEAR lv_c.
WRITE ls_alv-kstbm TO lv_c.
lv_kstbm = lv_c.
PERFORM bdc_field USING lv_fnam lv_kstbm.
lv_fnam = 'KONM-KBETR(' && lv_num && ')'.
CLEAR lv_c.
WRITE ls_alv-kbetr TO lv_c.
lv_netpr = lv_c.
PERFORM bdc_field USING lv_fnam lv_netpr.
CLEAR ls_alv.
ENDLOOP.
ENDIF.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
CALL TRANSACTION 'MEK2' USING gt_bdcdata
MODE gv_mode
UPDATE gv_update
MESSAGES INTO gt_messtab.
LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = gs_messtab-msgid
no = gs_messtab-msgnr
v1 = gs_messtab-msgv1
v2 = gs_messtab-msgv2
v3 = gs_messtab-msgv3
v4 = gs_messtab-msgv4
IMPORTING
msg = gv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
gs_data-ztype = 'E'.
gs_data-zmsg = gs_data-zmsg && gv_msg.
* gs_return-type = 'E'.
* gs_return-message = gv_msg.
* gs_return-message_v1 = gs_data-lifnr.
* gs_return-message_v2 = gs_data-matnr.
* gs_return-message_v3 = gs_data-ekorg.
* gs_return-message_v4 = gs_data-esokz.
ENDLOOP.
IF gs_data-ztype IS INITIAL.
gs_data-ztype = 'S'.
gs_data-zmsg = '创建更新成功'.
* gs_return-type = 'S'.
* gs_return-message = '创建更新成功'.
* gs_return-message_v1 = gs_data-lifnr.
* gs_return-message_v2 = gs_data-matnr.
* gs_return-message_v3 = gs_data-ekorg.
* gs_return-message_v4 = gs_data-esokz.
ENDIF.
REFRESH: gt_bdcdata,
gt_messtab.
CLEAR gv_msg.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_MEK1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_mek1 .
DATA: lv_netpr TYPE string,
lv_kstbm TYPE string,
lv_kpein TYPE string,
lv_fnam TYPE bdcdata-fnam,
lv_num TYPE n LENGTH 2,
lv_c TYPE c LENGTH 15.
WRITE gs_data-netpr TO lv_c.
lv_netpr = lv_c.
lv_kpein = gs_data-peinh.
WRITE gs_data-datab TO gs_data-datab.
WRITE gs_data-datbi TO gs_data-datbi.
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_field USING 'RV13A-KSCHL' 'PB00'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPLV14A' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE' '=WEIT'.
PERFORM bdc_field USING 'RV130-SELKZ(05)' 'X'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'KOMG-LIFNR' gs_data-lifnr .
PERFORM bdc_field USING 'KOMG-MATNR' gs_data-matnr.
PERFORM bdc_field USING 'KOMG-WERKS' gs_data-werks.
PERFORM bdc_field USING 'KOMG-EKORG' gs_data-ekorg.
PERFORM bdc_field USING 'KOMG-ESOKZ(01)' gs_data-esokz.
PERFORM bdc_field USING 'KONP-KBETR(01)' lv_netpr.
PERFORM bdc_field USING 'KONP-KONWA(01)' gs_data-waers.
PERFORM bdc_field USING 'KONP-KPEIN(01)' lv_kpein.
PERFORM bdc_field USING 'KONP-KMEIN(01)' gs_data-bprme.
PERFORM bdc_field USING 'RV13A-DATAB(01)' gs_data-datab.
PERFORM bdc_field USING 'RV13A-DATBI(01)' gs_data-datbi.
PERFORM bdc_field USING 'BDC_CURSOR' 'KONP-KBETR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PDAT'
.
PERFORM bdc_dynpro USING 'SAPMV13A' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'KONP-GKWRT' lv_netpr.
PERFORM bdc_dynpro USING 'SAPMV13A' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BACK'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PSTF'.
CLEAR lv_num.
LOOP AT gt_data INTO DATA(ls_alv) WHERE matnr = gs_data-matnr AND
lifnr = gs_data-lifnr AND
ekorg = gs_data-ekorg AND
esokz = gs_data-esokz AND
kbetr > 0.
ENDLOOP.
IF sy-subrc = 0.
DO 10 TIMES.
PERFORM bdc_dynpro USING 'SAPMV13A' '0303'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KONM-KSTBM(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=DLIS'.
ENDDO.
PERFORM bdc_dynpro USING 'SAPMV13A' '0303'.
LOOP AT gt_data INTO ls_alv WHERE matnr = gs_data-matnr AND
lifnr = gs_data-lifnr AND
ekorg = gs_data-ekorg AND
esokz = gs_data-esokz.
* AND DATBI = gs_data-DATBI AND DATAB = gs_data-DATAB.
lv_num = lv_num + 1.
lv_fnam = 'KONM-KSTBM(' && lv_num && ')'.
* LV_KSTBM = LS_ALV-KSTBM.
CLEAR lv_c.
WRITE ls_alv-kstbm TO lv_c.
lv_kstbm = lv_c.
PERFORM bdc_field USING lv_fnam lv_kstbm.
lv_fnam = 'KONM-KBETR(' && lv_num && ')'.
* LV_NETPR = LS_ALV-KBETR.
CLEAR lv_c.
WRITE ls_alv-kbetr TO lv_c.
lv_netpr = lv_c.
PERFORM bdc_field USING lv_fnam lv_netpr.
CLEAR ls_alv.
ENDLOOP.
ENDIF.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
CALL TRANSACTION 'MEK1' USING gt_bdcdata
MODE gv_mode
UPDATE gv_update
MESSAGES INTO gt_messtab.
LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = gs_messtab-msgid
no = gs_messtab-msgnr
v1 = gs_messtab-msgv1
v2 = gs_messtab-msgv2
v3 = gs_messtab-msgv3
v4 = gs_messtab-msgv4
IMPORTING
msg = gv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
gs_data-ztype = 'E'.
gs_data-zmsg = gs_data-zmsg && gv_msg.
* gs_return-type = 'E'.
* gs_return-message = gv_msg.
* gs_return-message_v1 = gs_data-lifnr.
* gs_return-message_v2 = gs_data-matnr.
* gs_return-message_v3 = gs_data-ekorg.
* gs_return-message_v4 = gs_data-esokz.
ENDLOOP.
IF gs_data-ztype IS INITIAL.
gs_data-ztype = 'S'.
gs_data-zmsg = gv_msg.
* gs_return-type = 'S'.
* gs_return-message = '创建更新成功'.
* gs_return-message_v1 = gs_data-lifnr.
* gs_return-message_v2 = gs_data-matnr.
* gs_return-message_v3 = gs_data-ekorg.
* gs_return-message_v4 = gs_data-esokz.
ENDIF.
REFRESH: gt_bdcdata,
gt_messtab.
CLEAR gv_msg.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ME11
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_me11 .
DATA: lv_netpr TYPE string,
lv_c TYPE c LENGTH 15,
lv_bpumz TYPE string,
lv_bpumn TYPE string,
lv_peinh TYPE string,
lv_norbm TYPE string,
lv_aplfz TYPE string,
lv_datbi TYPE sy-datum,
lv_datab TYPE sy-datum,
lv_uebto TYPE c LENGTH 5,
lv_minbm TYPE string.
WRITE gs_data-netpr TO lv_c.
lv_netpr = lv_c .
CLEAR lv_c.
WRITE gs_data-norbm TO lv_c.
lv_norbm = lv_c.
CLEAR lv_c.
* WRITE gs_data-uebto TO lv_uebto.
* LV_UEBTO = LV_C.
lv_bpumz = gs_data-bpumz.
lv_bpumn = gs_data-bpumn.
lv_peinh = gs_data-peinh.
lv_aplfz = gs_data-aplfz.
lv_minbm = gs_data-minbm.
WRITE gs_data-datab TO lv_datab.
WRITE gs_data-datbi TO lv_datbi.
* WRITE gs_data-DATAB TO gs_data-DATAB.
* WRITE gs_data-DATBI TO gs_data-DATBI.
PERFORM bdc_dynpro USING 'SAPMM06I' '0100'.
PERFORM bdc_field USING 'EINA-LIFNR' gs_data-lifnr.
PERFORM bdc_field USING 'EINA-MATNR' gs_data-matnr.
PERFORM bdc_field USING 'EINE-EKORG' gs_data-ekorg.
PERFORM bdc_field USING 'EINE-WERKS' gs_data-werks.
PERFORM bdc_field USING 'EINA-INFNR' ''.
CASE gs_data-esokz.
WHEN '0'.
PERFORM: bdc_field USING 'RM06I-NORMB' 'X'.
WHEN '2'.
PERFORM: bdc_field USING 'RM06I-KONSI' 'X'.
WHEN '3'.
PERFORM: bdc_field USING 'RM06I-LOHNB' 'X'.
WHEN 'P'.
PERFORM: bdc_field USING 'RM06I-PIPEL' 'X'.
WHEN OTHERS.
ENDCASE.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPMM06I' '0101'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPMM06I' '0102'.
PERFORM bdc_field USING 'BDC_OKCODE' '=KO'.
PERFORM bdc_field USING 'EINE-APLFZ' lv_aplfz.
PERFORM bdc_field USING 'EINE-EKGRP' gs_data-ekgrp.
PERFORM bdc_field USING 'EINE-NORBM' lv_norbm.
PERFORM bdc_field USING 'EINE-MWSKZ' gs_data-mwskz.
PERFORM bdc_field USING 'EINE-WEBRE' 'X'.
* IF gs_data-esokz = '3'.
* PERFORM bdc_field USING 'EINE-VERID'
* gs_data-verid.
* ENDIF.
PERFORM bdc_field USING 'EINE-NETPR' lv_netpr.
* PERFORM bdc_field USING 'EINE-UEBTK'
* gs_data-uebtk.
PERFORM bdc_field USING 'EINE-UEBTO' lv_uebto.
PERFORM bdc_field USING 'EINE-WAERS' gs_data-waers.
PERFORM bdc_field USING 'EINE-PEINH' lv_peinh.
IF gs_data-bprme IS INITIAL.
gs_data-bprme = gs_data-meins.
ENDIF.
PERFORM bdc_field USING 'EINE-BPRME' gs_data-bprme.
PERFORM bdc_field USING 'EINE-MINBM' lv_minbm.
IF lv_bpumz <> 0.
PERFORM bdc_field USING 'EINE-BPUMZ' lv_bpumz.
ENDIF.
IF lv_bpumn <> 0 .
PERFORM bdc_field USING 'EINE-BPUMN' lv_bpumn.
ENDIF.
PERFORM bdc_field USING 'MMPUR_INCOTERMS_INFORECORDS-INCO1' gs_data-inco1.
PERFORM bdc_field USING 'MMPUR_INCOTERMS_INFORECORDS-INCO2_L' gs_data-inco2.
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'RV13A-DATAB(01)' lv_datab.
PERFORM bdc_field USING 'RV13A-DATBI(01)' lv_datbi.
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
CALL TRANSACTION 'ME11' USING gt_bdcdata
MODE gv_mode
UPDATE gv_update
MESSAGES INTO gt_messtab.
LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = gs_messtab-msgid
no = gs_messtab-msgnr
v1 = gs_messtab-msgv1
v2 = gs_messtab-msgv2
v3 = gs_messtab-msgv3
v4 = gs_messtab-msgv4
IMPORTING
msg = gv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
gs_data-ztype = 'E'.
gs_data-zmsg = gs_data-zmsg && gv_msg.
* gs_return-type = 'E'.
* gs_return-message = gv_msg.
* gs_return-message_v1 = gs_data-lifnr.
* gs_return-message_v2 = gs_data-matnr.
* gs_return-message_v3 = gs_data-ekorg.
* gs_return-message_v4 = gs_data-esokz.
ENDLOOP.
IF gs_data-ztype IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gv_flag = 'X'.
ENDIF.
REFRESH:gt_bdcdata,
gt_messtab.
CLEAR gv_msg.
.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ME12
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_me12 .
DATA:lv_netpr TYPE string,
lv_c TYPE c LENGTH 15,
lv_bpumz TYPE string,
lv_bpumn TYPE string,
lv_peinh TYPE string,
lv_norbm TYPE string,
lv_aplfz TYPE string,
lv_uebto TYPE c LENGTH 5.
WRITE gs_data-netpr TO lv_c.
lv_netpr = lv_c.
CLEAR lv_c.
WRITE gs_data-norbm TO lv_c.
lv_norbm = lv_c.
* LV_NETPR = gs_data-NETPR.
lv_bpumz = gs_data-bpumz.
lv_bpumn = gs_data-bpumn.
lv_peinh = gs_data-peinh.
* LV_NORBM = gs_data-NORBM.
lv_aplfz = gs_data-aplfz.
* WRITE gs_data-uebto TO lv_uebto.
PERFORM bdc_dynpro USING 'SAPMM06I' '0100'.
PERFORM bdc_field USING 'EINA-LIFNR' gs_data-lifnr.
PERFORM bdc_field USING 'EINA-MATNR' gs_data-matnr.
PERFORM bdc_field USING 'EINE-EKORG' gs_data-ekorg.
PERFORM bdc_field USING 'EINE-WERKS' gs_data-werks.
PERFORM bdc_field USING 'EINA-INFNR' ''.
CASE gs_data-esokz.
WHEN '0'.
PERFORM: bdc_field USING 'RM06I-NORMB' 'X'.
WHEN '2'.
PERFORM: bdc_field USING 'RM06I-KONSI' 'X'.
WHEN '3'.
PERFORM: bdc_field USING 'RM06I-LOHNB' 'X'.
WHEN 'P'.
PERFORM: bdc_field USING 'RM06I-PIPEL' 'X'.
WHEN OTHERS.
ENDCASE.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPMM06I' '0101'.
PERFORM bdc_field USING 'BDC_OKCODE' '=EINE'.
PERFORM bdc_dynpro USING 'SAPMM06I' '0102'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
PERFORM bdc_field USING 'EINE-APLFZ' lv_aplfz.
PERFORM bdc_field USING 'EINE-EKGRP' gs_data-ekgrp.
PERFORM bdc_field USING 'EINE-NORBM' lv_norbm.
PERFORM bdc_field USING 'EINE-WEBRE' 'X'.
* PERFORM bdc_field USING 'EINE-UEBTK'
* gs_data-uebtk.
* PERFORM bdc_field USING 'EINE-UEBTO'
* lv_uebto.
* IF gs_data-esokz = '3'.
* PERFORM bdc_field USING 'EINE-VERID'
* gs_data-verid.
* ENDIF.
PERFORM bdc_field USING 'EINE-MWSKZ' gs_data-mwskz.
CALL TRANSACTION 'ME12' USING gt_bdcdata
MODE gv_mode
UPDATE gv_update
MESSAGES INTO gt_messtab.
LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = gs_messtab-msgid
no = gs_messtab-msgnr
v1 = gs_messtab-msgv1
v2 = gs_messtab-msgv2
v3 = gs_messtab-msgv3
v4 = gs_messtab-msgv4
IMPORTING
msg = gv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
gs_data-ztype = 'E'.
gs_data-zmsg = gs_data-zmsg && gv_msg.
* gs_return-message_v1 = gs_data-lifnr.
* gs_return-message_v2 = gs_data-matnr.
* gs_return-message_v3 = gs_data-ekorg.
* gs_return-message_v4 = gs_data-esokz.
ENDLOOP.
IF gs_data-ztype IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
gs_data-ztype = 'S'.
gs_data-zmsg = '修改成功'.
gv_flag = 'X'.
ENDIF.
REFRESH: gt_bdcdata , gt_messtab.
CLEAR gv_msg.
ENDFORM.
FORM frm_me12_price.
DATA: lv_netpr TYPE string,
lv_kstbm TYPE string,
lv_kpein TYPE string,
lv_fnam TYPE bdcdata-fnam,
lv_num TYPE n LENGTH 2,
lv_c TYPE c LENGTH 15.
WRITE gs_data-netpr TO lv_c.
lv_netpr = lv_c .
* WRITE gs_data-NETPR TO LV_NETPR.
* WRITE gs_data-PEINH TO LV_C.
* LV_KPEIN = LV_C .
lv_kpein = gs_data-peinh.
* WRITE gs_data-PEINH TO LV_KPEIN.
* LV_NETPR = gs_data-NETPR.
* LV_KPEIN = gs_data-PEINH.
PERFORM bdc_dynpro USING 'SAPMM06I' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'EINA-LIFNR' gs_data-lifnr.
PERFORM bdc_field USING 'EINA-MATNR' gs_data-matnr.
PERFORM bdc_field USING 'EINE-EKORG' gs_data-ekorg.
PERFORM bdc_field USING 'EINE-WERKS' gs_data-werks.
CASE gs_data-esokz.
WHEN '0'.
PERFORM: bdc_field USING 'RM06I-NORMB' 'X'. " 标准
WHEN '2'.
PERFORM: bdc_field USING 'RM06I-KONSI' 'X'. " 寄售
WHEN '3'.
PERFORM: bdc_field USING 'RM06I-LOHNB' 'X'. " 外协加工
WHEN 'P'.
PERFORM: bdc_field USING 'RM06I-PIPEL' 'X'. " 管道
WHEN OTHERS.
ENDCASE.
PERFORM bdc_dynpro USING 'SAPMM06I' '0101'.
PERFORM bdc_field USING 'BDC_OKCODE' '=EINE'.
" 条件按钮
PERFORM bdc_dynpro USING 'SAPMM06I' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR' 'EINE-UEBTO'.
PERFORM bdc_field USING 'BDC_OKCODE' '=KO'.
" 新的有效期按钮
* PERFORM BDC_DYNPRO USING 'SAPLV14A' '0102'.
* PERFORM BDC_FIELD USING 'BDC_OKCODE'
* '=NEWD'.
PERFORM bdc_dynpro USING 'SAPLV14A' '0102'.
* PERFORM BDC_FIELD USING 'BDC_CURSOR'
* 'VAKE-DATAB(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=NEWD'.
" 新的有效期按钮
* PERFORM bdc_dynpro USING 'SAPLV14A' '0102'.
* PERFORM bdc_field USING 'BDC_CURSOR' 'VAKE-DATAB(01)'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=NEWD'.
" 等级
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KONP-KBETR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PDAT'.
PERFORM bdc_field USING 'KONP-KBETR(01)' lv_netpr.
PERFORM bdc_field USING 'KONP-KONWA(01)' gs_data-waers.
PERFORM bdc_field USING 'KONP-KPEIN(01)' lv_kpein.
PERFORM bdc_field USING 'KONP-KMEIN(01)' gs_data-bprme.
PERFORM bdc_field USING 'RV13A-DATAB(01)' gs_data-datab.
PERFORM bdc_field USING 'RV13A-DATBI(01)' gs_data-datbi.
PERFORM bdc_dynpro USING 'SAPMV13A' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'KONP-GKWRT' lv_netpr.
PERFORM bdc_dynpro USING 'SAPMV13A' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BACK'.
IF gs_data-bpumz <> gs_data-bpumn .
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'BDC_OKCODE' '=UMRE'.
PERFORM bdc_dynpro USING 'SAPMV13A' '0122'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KONP-KUMNE'.
PERFORM bdc_field USING 'BDC_OKCODE' '=WEIT'.
PERFORM bdc_field USING 'KONP-KUMNE' gs_data-bpumn. "分母
PERFORM bdc_field USING 'KONP-KUMZA' gs_data-bpumz. "分子
ENDIF.
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'BDC_OKCODE' '=PSTF'.
CLEAR lv_num.
LOOP AT gt_data INTO DATA(ls_alv) WHERE matnr = gs_data-matnr AND
lifnr = gs_data-lifnr AND
ekorg = gs_data-ekorg AND
esokz = gs_data-esokz AND
kbetr > 0.
ENDLOOP.
IF sy-subrc = 0.
PERFORM bdc_dynpro USING 'SAPMV13A' '0303'.
LOOP AT gt_data INTO ls_alv WHERE matnr = gs_data-matnr AND
lifnr = gs_data-lifnr AND
ekorg = gs_data-ekorg AND
esokz = gs_data-esokz
.
lv_num = lv_num + 1.
lv_fnam = 'KONM-KSTBM(' && lv_num && ')'.
* LV_KSTBM = LS_ALV-KSTBM.
CLEAR lv_c.
WRITE ls_alv-kstbm TO lv_c.
lv_kstbm = lv_c.
PERFORM bdc_field USING lv_fnam lv_kstbm.
lv_fnam = 'KONM-KBETR(' && lv_num && ')'.
* LV_NETPR = LS_ALV-KBETR.
CLEAR lv_c.
WRITE ls_alv-kbetr TO lv_c.
lv_netpr = lv_c.
PERFORM bdc_field USING lv_fnam lv_netpr.
CLEAR ls_alv.
ENDLOOP.
ENDIF.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
* PERFORM bdc_dynpro USING 'SAPMV13A' '1017'. "CHANGE BY 11146 20.07.2021 15:12:19
* PERFORM bdc_field USING 'BDC_CURSOR' 'KONP-KBETR(01)'.
* PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
CALL TRANSACTION 'ME12 ' USING gt_bdcdata
MODE gv_mode
UPDATE gv_update
MESSAGES INTO gt_messtab.
LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = gs_messtab-msgid
no = gs_messtab-msgnr
v1 = gs_messtab-msgv1
v2 = gs_messtab-msgv2
v3 = gs_messtab-msgv3
v4 = gs_messtab-msgv4
IMPORTING
msg = gv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
gs_data-ztype = 'E'.
gs_data-zmsg = gs_data-zmsg && gv_msg.
* gs_return-message_v1 = gs_data-lifnr.
* gs_return-message_v2 = gs_data-matnr.
* gs_return-message_v3 = gs_data-ekorg.
* gs_return-message_v4 = gs_data-esokz.
ENDLOOP.
IF gs_data-ztype IS INITIAL.
gs_data-ztype = 'S'.
gs_data-zmsg = '创建更新成功'.
* gs_return-type = 'S'.
* gs_return-message = '创建更新成功'.
* gs_return-message_v1 = gs_data-lifnr.
* gs_return-message_v2 = gs_data-matnr.
* gs_return-message_v3 = gs_data-ekorg.
* gs_return-message_v4 = gs_data-esokz.
ENDIF.
REFRESH: gt_bdcdata,
gt_messtab.
CLEAR gv_msg.
ENDFORM.
关联方创建销售价格
DATA lt_ftaxp LIKE TABLE OF ftaxp.
DATA lv_kbetr TYPE konp-kbetr.
"获取税率
CALL FUNCTION 'GET_TAX_PERCENTAGE'
EXPORTING
aland = 'CN'
datab = i_data-datab
mwskz = i_data-mwskz
txjcd = ''
TABLES
t_ftaxp = lt_ftaxp.
READ TABLE lt_ftaxp INTO DATA(ls_ftaxp) WITH KEY kschl = 'MWVS'.
lv_kbetr = i_eina-kbetr * ( 1 + ( ls_ftaxp-kbetr / 1000 ) ).
PERFORM bdc_dynpro USING 'SAPMV13A' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RV13A-KSCHL'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
* PERFORM bdc_field USING 'RV13A-KSCHL' i_data-kschl.
PERFORM bdc_field USING 'RV13A-KSCHL' 'ZP01'.
PERFORM bdc_dynpro USING 'SAPLV14A' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RV130-SELKZ(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=WEIT'.
PERFORM bdc_dynpro USING 'SAPMV13A' '1305'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KONP-KONWA(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'KOMG-VKORG' i_data-vkorg.
* PERFORM bdc_field USING 'KOMG-VTWEG' i_data-vtweg.
PERFORM bdc_field USING 'KOMG-VTWEG' '00'.
PERFORM bdc_field USING 'KOMG-KUNNR' i_data-kunnr.
PERFORM bdc_field USING 'KOMG-MATNR(01)' i_data-matnr.
PERFORM bdc_field USING 'KONP-KBETR(01)' lv_kbetr.
PERFORM bdc_field USING 'RV13A-DATAB(01)' i_data-datab.
PERFORM bdc_field USING 'RV13A-DATBI(01)' i_data-datbi.
PERFORM bdc_dynpro USING 'SAPMV13A' '1305'.
PERFORM bdc_field USING 'BDC_CURSOR' 'KOMG-MATNR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SICH'.
CALL TRANSACTION 'VK11' USING gt_bdcdata
MODE gv_mode
UPDATE gv_update
MESSAGES INTO gt_messtab.
LOOP AT gt_messtab INTO gs_messtab WHERE msgtyp CA 'EAX'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = gs_messtab-msgid
no = gs_messtab-msgnr
v1 = gs_messtab-msgv1
v2 = gs_messtab-msgv2
v3 = gs_messtab-msgv3
v4 = gs_messtab-msgv4
IMPORTING
msg = gv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
o_type = 'E'.
o_msg = o_msg && gv_msg.
CLEAR gs_messtab.
ENDLOOP.
IF o_type IS INITIAL.
o_type = 'S'.
o_msg = '创建成功'.
ENDIF.