创建采购信息记录

    1. 前台创建

事务代码:ME11

 

 

 

 

    1. BDC实现

 

创建:

report YTEST005
       
no standard page heading line-size 255.




DATA:   bdcdata LIKE bdcdata    OCCURS WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 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 WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 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_messtabWITH 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 INTOmesstab.

    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 .
  DATAl_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_messtabWHERE 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.
    CLEARgs_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

猜你喜欢

转载自blog.csdn.net/z_x_xing_/article/details/90077395