创建采购信息记录
作者:互联网
事务代码:ME11
-
- BDC实现
创建:
report YTEST005
no standard page heading line-size 255.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: ctumode LIKE ctu_params-dismode.
DATA: text TYPE c LENGTH 20.
PERFORM frm_bdc_mm03.
FORM frm_bdc_mm03 .
text = 80.
CONDENSE text.
REFRESH bdcdata.
perform bdc_dynpro using 'SAPMM06I' '0100'.
perform bdc_field using 'BDC_CURSOR'
'EINA-MATNR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'EINA-LIFNR'
'L1900000'. " 供应商
perform bdc_field using 'EINA-MATNR'
'6'. " 物料
perform bdc_field using 'EINE-EKORG'
'8000'. " 采购组织
perform bdc_field using 'EINE-WERKS'
'1010'. " 工厂
PERFORM bdc_field USING 'RM06I-NORMB' " 标准
'X'.
* IF gs_file-esokz = '0'.
* PERFORM bdc_field USING 'RM06I-NORMB' " 标准
* 'X'.
* ELSEIF gs_file-esokz = '3' .
* PERFORM bdc_field USING 'RM06I-LOHNB' " 外协加工
* 'X'.
* ELSEIF gs_file-esokz = 'P'.
* PERFORM bdc_field USING 'RM06I-PIPEL' " 管道
* 'X'.
* ELSEIF gs_file-esokz = '2'.
* PERFORM bdc_field USING 'RM06I-KONSI' " 寄售
* 'X'.
* ENDIF.
perform bdc_dynpro using 'SAPMM06I' '0101'.
perform bdc_field using 'BDC_CURSOR'
'EINA-MAHN1'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
*perform bdc_field using 'EINA-URZLA'
* record-URZLA_006. CN
*perform bdc_field using 'EINA-MEINS'
* record-MEINS_007. PC
*perform bdc_field using 'EINA-UMREZ'
* record-UMREZ_008. 1
*perform bdc_field using 'EINA-UMREN'
* record-UMREN_009. 1
perform bdc_dynpro using 'SAPMM06I' '0102'.
perform bdc_field using 'BDC_CURSOR'
'EINE-NETPR'.
perform bdc_field using 'BDC_OKCODE'
'=KO'.
perform bdc_field using 'EINE-EKGRP'
'M01'. " 采购组
perform bdc_field using 'EINE-WEBRE'
'X'. " 基于收货的发票验证
perform bdc_field using 'EINE-MWSKZ'
'J0'. " 税码
*perform bdc_field using 'EINE-IPRKZ'
* record-IPRKZ_013. D 剩余货架寿命
perform bdc_field using 'EINE-NETPR'
text. " 净价
*perform bdc_field using 'EINE-WAERS'
* record-WAERS_015.
*perform bdc_field using 'EINE-PEINH'
* record-PEINH_016.
*perform bdc_field using 'EINE-BPRME'
* record-BPRME_017.
*perform bdc_field using 'EINE-BPUMZ'
* record-BPUMZ_018.
*perform bdc_field using 'EINE-BPUMN'
* record-BPUMN_019.
perform bdc_dynpro using 'SAPMV13A' '1017'.
perform bdc_field using 'BDC_CURSOR'
'RV13A-DATBI(01)'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_field using 'RV13A-DATAB(01)'
'20190404'. " 有效期从
perform bdc_field using 'RV13A-DATBI(01)'
'20200606'. " 有效期至
*perform bdc_transaction using 'ME11'.
ctumode = 'A'. "N就是一步完成,A是分步enter完成
*ctumode = 'N'. "N就是一步完成,A是分步enter完成
REFRESH messtab.
CALL TRANSACTION 'ME11' USING bdcdata
MODE ctumode
UPDATE 'L'
MESSAGES INTO messtab.
LOOP AT messtab.
WRITE: / messtab-msgtyp,messtab-msgv1,messtab-msgv2,messtab-msgv3,messtab-msgv4.
ENDLOOP.
ENDFORM.
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM. "BDC_FIELD
修改:
report YTEST006
no standard page heading line-size 255.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: ctumode LIKE ctu_params-dismode.
DATA: text TYPE c LENGTH 20.
PERFORM frm_bdc_mm03.
FORM frm_bdc_mm03 .
text = 80.
CONDENSE text.
REFRESH bdcdata.
perform bdc_dynpro using 'SAPMM06I' '0100'.
perform bdc_field using 'BDC_CURSOR'
'EINA-MATNR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'EINA-LIFNR'
'L1900000'. " 供应商
perform bdc_field using 'EINA-MATNR'
'6'. " 物料
perform bdc_field using 'EINE-EKORG'
'8000'. " 采购组织
perform bdc_field using 'EINE-WERKS'
'1010'. " 工厂
perform bdc_field using 'RM06I-NORMB'
'X'.
perform bdc_dynpro using 'SAPMM06I' '0101'.
perform bdc_field using 'BDC_CURSOR'
'EINA-MAHN1'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
*perform bdc_field using 'EINA-URZLA'
* record-URZLA_006.
*perform bdc_field using 'EINA-MEINS'
* record-MEINS_007.
*perform bdc_field using 'EINA-UMREZ'
* record-UMREZ_008.
*perform bdc_field using 'EINA-UMREN'
* record-UMREN_009.
perform bdc_dynpro using 'SAPMM06I' '0102'.
perform bdc_field using 'BDC_CURSOR'
'EINE-APLFZ'.
perform bdc_field using 'BDC_OKCODE'
'=KO'.
*perform bdc_field using 'EINE-APLFZ'
* record-APLFZ_010. " 计划交货时间
perform bdc_field using 'EINE-EKGRP'
'M01'.
*perform bdc_field using 'EINE-NORBM'
* record-NORBM_012.
*perform bdc_field using 'EINE-WEBRE'
* record-WEBRE_013. " 基于收货的发票验证
perform bdc_field using 'EINE-MWSKZ'
'J0'. " 税码
*perform bdc_field using 'EINE-IPRKZ'
* record-IPRKZ_015. “ D 剩余货架寿命
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_CURSOR'
'RV13A-DATBI(01)'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_field using 'KONP-KBETR(01)'
text.
perform bdc_field using 'RV13A-DATAB(01)'
'20660101'.
perform bdc_field using 'RV13A-DATBI(01)'
'20770101'.
*ctumode = 'A'. "N就是一步完成,A是分步enter完成
ctumode = 'N'. "N就是一步完成,A是分步enter完成
REFRESH messtab.
CALL TRANSACTION 'ME12' USING bdcdata
MODE ctumode
UPDATE 'L'
MESSAGES INTO messtab.
LOOP AT messtab.
WRITE: / messtab-msgtyp,messtab-msgv1,messtab-msgv2,messtab-msgv3,messtab-msgv4.
ENDLOOP.
ENDFORM.
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM. "BDC_FIELD
FUNCTION zfmm01.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(LS_INFO) TYPE ZSMM01
*" EXPORTING
*" VALUE(LS_SIGN) TYPE ZESIGN
*" VALUE(LS_MESSAGE) TYPE ZEMESSAGE
*" VALUE(O_INFNR) TYPE INFNR
*"----------------------------------------------------------------------
SELECT
SINGLE
*
FROM eina
INTO @DATA(gs_eina)
WHERE lifnr = @ls_info-lifnr
AND matnr = @ls_info-matnr.
SELECT
SINGLE
*
FROM eine
INTO @DATA(gs_eine)
WHERE infnr = @gs_eina-infnr
AND esokz = @ls_info-esokz.
" 如果采购信息记录不存在,则创建
IF gs_eina IS INITIAL OR ( gs_eina IS NOT INITIAL AND gs_eine IS INITIAL )."**********************************************************************
text = ls_info-netpr.
CONDENSE text.
REFRESH bdcdata.
PERFORM bdc_dynpro USING 'SAPMM06I' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EINA-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'EINA-LIFNR'
ls_info-lifnr. "'L1900000'. " 供应商
PERFORM bdc_field USING 'EINA-MATNR'
ls_info-matnr. "'6'. " 物料
PERFORM bdc_field USING 'EINE-EKORG'
ls_info-ekorg. "'8000'. " 采购组织
PERFORM bdc_field USING 'EINE-WERKS'
ls_info-werks. "'1010'. " 工厂
* PERFORM bdc_field USING 'RM06I-NORMB' " 标准
* 'X'.
IF ls_info-esokz = '0'.
PERFORM bdc_field USING 'RM06I-NORMB' " 标准
'X'.
ELSEIF ls_info-esokz = '3' .
PERFORM bdc_field USING 'RM06I-LOHNB' " 外协加工
'X'.
ELSEIF ls_info-esokz = 'P'.
PERFORM bdc_field USING 'RM06I-PIPEL' " 管道
'X'.
ELSEIF ls_info-esokz = '2'.
PERFORM bdc_field USING 'RM06I-KONSI' " 寄售
'X'.
ENDIF.
PERFORM bdc_dynpro USING 'SAPMM06I' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EINA-MAHN1'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
*perform bdc_field using 'EINA-URZLA'
* record-URZLA_006. CN
*perform bdc_field using 'EINA-MEINS'
* record-MEINS_007. PC
*perform bdc_field using 'EINA-UMREZ'
* record-UMREZ_008. 1
*perform bdc_field using 'EINA-UMREN'
* record-UMREN_009. 1
PERFORM bdc_dynpro USING 'SAPMM06I' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EINE-NETPR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=KO'.
PERFORM bdc_field USING 'EINE-EKGRP'
ls_info-ekgrp. " 采购组
PERFORM bdc_field USING 'EINE-WEBRE'
'X'. " 基于收货的发票验证
PERFORM bdc_field USING 'EINE-MWSKZ'
ls_info-mwskz. "'J0'. " 税码
*perform bdc_field using 'EINE-IPRKZ'
* record-IPRKZ_013. D 剩余货架寿命
PERFORM bdc_field USING 'EINE-NETPR'
text. " 净价
PERFORM bdc_field USING 'EINE-WAERS'
ls_info-waers. " 'CNY'. " 货币
* PERFORM bdc_field USING 'EINE-PEINH'
* ls_info-peinh. " '1'. " 价格单位
PERFORM bdc_field USING 'EINE-BPRME'
ls_info-bprme. " 订单价格单位
*perform bdc_field using 'EINE-BPUMZ'
* record-BPUMZ_018.
*perform bdc_field using 'EINE-BPUMN'
* record-BPUMN_019.
PERFORM bdc_dynpro USING 'SAPMV13A' '1017'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RV13A-DATBI(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
PERFORM bdc_field USING 'RV13A-DATAB(01)'
ls_info-datab. "'20190404'. " 有效期从
PERFORM bdc_field USING 'RV13A-DATBI(01)'
ls_info-datbi. "'20200606'. " 有效期至
*perform bdc_transaction using 'ME11'.
* ctumode = 'A'. "N就是一步完成,A是分步enter完成
ctumode = 'N'. "N就是一步完成,A是分步enter完成
REFRESH messtab.
CALL TRANSACTION 'ME11' USING bdcdata
MODE ctumode
UPDATE 'L'
MESSAGES INTO messtab.
READ TABLE messtab INTO DATA(ls_messtab) WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
PERFORM error_log.
LOOP AT gt_error INTO gs_error.
ls_message = ls_message && gs_error-errlg.
ENDLOOP.
ls_sign = 'E'.
ELSE.
LOOP AT messtab INTO ls_messtab WHERE msgtyp = 'S' AND msgv2 IS NOT INITIAL.
o_infnr = ls_messtab-msgv1.
ENDLOOP.
ls_message = '创建成功'.
ls_sign = 'S'.
ENDIF.
ELSE. " 如果存在则为修改 "********************************************************************
text = ls_info-netpr.
CONDENSE text.
REFRESH bdcdata.
PERFORM bdc_dynpro USING 'SAPMM06I' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EINA-MATNR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'EINA-LIFNR'
ls_info-lifnr."'L1900000'. " 供应商
PERFORM bdc_field USING 'EINA-MATNR'
ls_info-matnr. "'6'. " 物料
PERFORM bdc_field USING 'EINE-EKORG'
ls_info-ekorg. "'8000'. " 采购组织
PERFORM bdc_field USING 'EINE-WERKS'
ls_info-werks." '1010'. " 工厂
* PERFORM bdc_field USING 'RM06I-NORMB'
* 'X'.
IF ls_info-esokz = '0'.
PERFORM bdc_field USING 'RM06I-NORMB' " 标准
'X'.
ELSEIF ls_info-esokz = '3' .
PERFORM bdc_field USING 'RM06I-LOHNB' " 外协加工
'X'.
ELSEIF ls_info-esokz = 'P'.
PERFORM bdc_field USING 'RM06I-PIPEL' " 管道
'X'.
ELSEIF ls_info-esokz = '2'.
PERFORM bdc_field USING 'RM06I-KONSI' " 寄售
'X'.
ENDIF.
PERFORM bdc_dynpro USING 'SAPMM06I' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EINA-MAHN1'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
*perform bdc_field using 'EINA-URZLA'
* record-URZLA_006.
*perform bdc_field using 'EINA-MEINS'
* record-MEINS_007.
*perform bdc_field using 'EINA-UMREZ'
* record-UMREZ_008.
*perform bdc_field using 'EINA-UMREN'
* record-UMREN_009.
PERFORM bdc_dynpro USING 'SAPMM06I' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EINE-APLFZ'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=KO'.
*perform bdc_field using 'EINE-APLFZ'
* record-APLFZ_010. " 计划交货时间
PERFORM bdc_field USING 'EINE-EKGRP'
ls_info-ekgrp. " 'M01'.
*perform bdc_field using 'EINE-NORBM'
* record-NORBM_012.
*perform bdc_field using 'EINE-WEBRE'
* record-WEBRE_013. " 基于收货的发票验证
PERFORM bdc_field USING 'EINE-MWSKZ'
ls_info-mwskz. "'J0'. " 税码
*perform bdc_field using 'EINE-IPRKZ'
* record-IPRKZ_015. “ D 剩余货架寿命
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_CURSOR'
'RV13A-DATBI(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
PERFORM bdc_field USING 'KONP-KBETR(01)'
text.
PERFORM bdc_field USING 'RV13A-DATAB(01)'
ls_info-datab. "'20660101'.
PERFORM bdc_field USING 'RV13A-DATBI(01)'
ls_info-datbi. " '20770101'.
*ctumode = 'A'. "N就是一步完成,A是分步enter完成
ctumode = 'N'. "N就是一步完成,A是分步enter完成
REFRESH messtab.
CALL TRANSACTION 'ME12' USING bdcdata
MODE ctumode
UPDATE 'L'
MESSAGES INTO: messtab.
READ TABLE messtab INTO ls_messtab WITH KEY msgtyp = 'E'.
IF sy-subrc = 0.
PERFORM error_log.
LOOP AT gt_error INTO gs_error.
ls_message = ls_message && gs_error-errlg.
ENDLOOP.
ls_sign = 'E'.
ELSE.
LOOP AT messtab INTO ls_messtab WHERE msgtyp = 'S' AND msgv2 IS NOT INITIAL.
o_infnr = ls_messtab-msgv1.
ENDLOOP.
ls_message = '修改成功'.
ls_sign = 'S'.
ENDIF.
ENDIF.
ENDFUNCTION.
*FORM frm_bdc_mm01 .
*
*ENDFORM.
*
*
*FORM frm_bdc_mm02 .
*
*ENDFORM.
FORM error_log .
DATA: l_aplfz TYPE c LENGTH 3,
l_netpr TYPE c LENGTH 14,
l_norbm TYPE c LENGTH 13,
l_peinh TYPE c LENGTH 5,
l_bpumz TYPE c LENGTH 5,
l_bpumn TYPE c LENGTH 5,
l_tmp TYPE eine-netpr,
l_wrong_flag TYPE c,
l_zkssj TYPE eine-prdat,
l_zjssj TYPE eine-prdat.
* DATA: lt_mestab TYPE STANDARD TABLE OF bdcmsgcoll,
* lw_mestab TYPE bdcmsgcoll.
CLEAR l_wrong_flag.
" 将处理结果加入到信息日志中
LOOP AT messtab INTO DATA(l_messtab) WHERE msgtyp = 'A'
OR msgtyp = 'E'
OR msgtyp = 'W'.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = l_messtab-msgid
msgnr = l_messtab-msgnr
msgv1 = l_messtab-msgv1
msgv2 = l_messtab-msgv2
msgv3 = l_messtab-msgv3
msgv4 = l_messtab-msgv4
IMPORTING
message_text_output = gs_error-errlg.
APPEND gs_error TO gt_error.
CLEAR: gs_error-errlg,
l_messtab.
ENDLOOP.
ENDFORM.
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FI
标签:bdc,记录,perform,创建,field,PERFORM,USING,using,采购 来源: https://blog.csdn.net/z_x_xing_/article/details/90077395