SAP中使用BDC创建或修改采购信息记录

     工作中的需求是这样子的:

     在某天,我们公司的采购提了一个需求,说是在从OA创建采购信息记录的时候,价格上限应该自动默认为是价格字段,但是这个在系统里面没有做,采购在创建玩之后需要一个个手工去修改,因此想让我看看能不能通过开发解决。

     再来说说修改之前SAP中是怎么处理的吧:

     一开始我想通过找个跟这个需求有关的BAPI来完成,但是看了网上所谓的BAPI大全之后,发现即使有创建信息记录的BAPI,也没有对应字段去修改价格上限,所以这种方法被我放弃了;后来公司的前辈和我说,我们是通过BDC录屏来做这个事情的。于是在网上找了相关BDC的博客学习了之后,我自己也去录了一下,具体的步骤如下:

1、进SAP的开发(DEV)系统,输入事务码ME11(创建采购信息记录),先去找一组没有用过的数据,然后再问你是否保存该信息记录的时候点“否”,记录下这组数据;

2、输入事务码SHDB(BDC录屏的事务码),进入下面的界面

3、点击上面的“NEW RECODING”,进入创建BDC的界面:


在这个界面中输入BDC的名称,以及BDC操作的事务码,填写完成以后点击下面的"START RECORDING",就可以开始录屏了。

4、接下来进入创建采购信息记录的界面,和业务平时的操作一样,将刚才记录下来的数据填写进去:


5、回车进入下一个界面:


接下来就是填写一些必要的数据:




到了这个界面之后,记得点“条件”按钮,进去修改价格上限


选中该行之后,点击工具栏的“细节”,进入修改价格上限界面:


修改好之后点保存录屏就完成了,此时,你在录屏的时候创建的采购信息也可以查询到了,进入以下的界面:

点击保存,退出。至此录屏的工作就完成了。

6、将录屏发布为程序或FUNCTION MODULE:录屏本身的作用很有局限性,但是在录完屏后可以自动将录屏生成为ABAP程序或是函数模块,这样就会大大增强BDC的功能


7、如果选择发布为FUNCTION MODULE,则会自动发布为具有RFC功能的函数模块,其数据来源是由外部传入;

8、如果选择发布为PROGRAM,则会发布为ABAP程序,可以进SE38对程序进行修改,这种情况数据源一般是另外导入的,所以要配合其他的程序去实现业务操作;

9、我这里选择的是发布为函数模块(因为OA中调用的是函数模块) ,可以进SE37进行查看,或debug。

10、接下来我想说的是,我的BDC函数在开发环境中可以很好的运行,但是传输到测试环境的时候,出现了函数一直运行不停止的现象(这个时候其实信息记录早已建立完成),找了半天也没有找出问题点,但这个问题不解决的话,批量处理的时候就会一直卡着,所以这关必须要过。

11、我在QAS里面录的屏也会出现这种现象,在QAS里面录屏出现这种现象的原因我猜测应该是以下几个方面,第一:QAS里面不允许做开发,第二:QAS里面的配置和DEV的有差异;QAS里面即使不能做开发,那录屏应该还是可以的,所以应该是第二个问题。

12、配置问题我可从来没弄过,但业务又催,所以我就想了一个笨办法(死马当活马医),在原本的录屏中除了有ME11的,还有ME12(修改采购信息记录)的,所以我就把原来的两个函数放到一块儿,让他在创建的时候进ME12修改一下,把价格上限修改过来,结果是:这样做了时候在DEV里面运行不了,但是传输到QAS之后却能正常运行(一般QAS和正式环境的配置都不会有差异),这个问题到这里才算解决

13、另:QAS处理BDC的代码和SAP自动生成的代码有较大差异,现贴出来供参考:

FUNCTION ZBW_SET_CREATE_INFORECORD1.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(CTU) LIKE  APQI-PUTACTIVE DEFAULT 'X'
*"     VALUE(MODE) LIKE  APQI-PUTACTIVE DEFAULT 'N'
*"     VALUE(UPDATE) LIKE  APQI-PUTACTIVE DEFAULT 'L'
*"     VALUE(GROUP) LIKE  APQI-GROUPID OPTIONAL
*"     VALUE(USER) LIKE  APQI-USERID OPTIONAL
*"     VALUE(KEEP) LIKE  APQI-QERASE OPTIONAL
*"     VALUE(HOLDDATE) LIKE  APQI-STARTDATE OPTIONAL
*"     VALUE(NODATA) LIKE  APQI-PUTACTIVE DEFAULT '/'
*"     VALUE(LIFNR_001) LIKE  BDCDATA-FVAL DEFAULT '30108'
*"     VALUE(MATNR_002) LIKE  BDCDATA-FVAL DEFAULT '1310620'
*"     VALUE(EKORG_003) LIKE  BDCDATA-FVAL DEFAULT '1100'
*"     VALUE(WERKS_004) LIKE  BDCDATA-FVAL DEFAULT '1120'
*"     VALUE(NORMB_005) LIKE  BDCDATA-FVAL DEFAULT 'X'
*"     VALUE(URZLA_006) LIKE  BDCDATA-FVAL DEFAULT 'CN'
*"     VALUE(MEINS_007) LIKE  BDCDATA-FVAL DEFAULT 'KG'
*"     VALUE(UMREZ_008) LIKE  BDCDATA-FVAL DEFAULT '1'
*"     VALUE(UMREN_009) LIKE  BDCDATA-FVAL DEFAULT '1'
*"     VALUE(APLFZ_010) LIKE  BDCDATA-FVAL DEFAULT '10'
*"     VALUE(EKGRP_011) LIKE  BDCDATA-FVAL DEFAULT '100'
*"     VALUE(NORBM_012) LIKE  BDCDATA-FVAL DEFAULT '10'
*"     VALUE(WEBRE_013) LIKE  BDCDATA-FVAL DEFAULT 'X'
*"     VALUE(MWSKZ_014) LIKE  BDCDATA-FVAL DEFAULT 'J0'
*"     VALUE(IPRKZ_015) LIKE  BDCDATA-FVAL DEFAULT 'D'
*"     VALUE(NETPR_016) LIKE  BDCDATA-FVAL DEFAULT '            11'
*"     VALUE(WAERS_017) LIKE  BDCDATA-FVAL DEFAULT 'RMB'
*"     VALUE(PEINH_018) LIKE  BDCDATA-FVAL DEFAULT '1'
*"     VALUE(BPRME_019) LIKE  BDCDATA-FVAL DEFAULT 'KG'
*"     VALUE(BPUMZ_020) LIKE  BDCDATA-FVAL DEFAULT '1'
*"     VALUE(BPUMN_021) LIKE  BDCDATA-FVAL DEFAULT '1'
*"     VALUE(DATAB_022) LIKE  BDCDATA-FVAL DEFAULT '2015.04.04'
*"     VALUE(DATBI_023) LIKE  BDCDATA-FVAL DEFAULT '2015.04.18'
*"  EXPORTING
*"     VALUE(MSGTYP) TYPE  STRING
*"     VALUE(L_MSTRING) TYPE  STRING
*"     VALUE(INFNR) TYPE  STRING
*"  TABLES
*"      MESSTAB STRUCTURE  BDCMSGCOLL OPTIONAL
*"----------------------------------------------------------------------

DATA: IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

  • messages of call transaction
    DATA: IT_BDCMSG TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE.
    *Global definition
    DATA: G_MODE(1) VALUE ‘E’,
    MESSAGE(100) TYPE C,
    G_UPDT(1) VALUE ‘S’.

DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

  •   messages of call transaction
    

*DATA: MESSTAB1 LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

  •   error session opened (<span class="hljs-string">' '</span> <span class="hljs-keyword">or</span> <span class="hljs-string">'X'</span>)
    

DATA: E_GROUP_OPENED.

  •   message texts
    

*TABLES: T100.

  • DATA: L_MSTRING(480) TYPE C.
  • DATA: MSGTYP(1) TYPE C.
    DATA:SUBRC like SYST-SUBRC.
    SUBRC = 0.

*perform bdc_nodata using NODATA.
*
*perform open_group using GROUP USER KEEP HOLDDATE CTU.

perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPMM06I’ ‘0100’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINE-WERKS’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-LIFNR’
LIFNR_001.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-MATNR’
MATNR_002.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-EKORG’
EKORG_003.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-WERKS’
WERKS_004.

CLEAR BDCDATA.
IF NORMB_005 = ‘BZ’.
perform BDC_FIELD1 TABLES BDCDATA using ‘RM06I-NORMB’
‘X’.
ELSEIF NORMB_005 = ‘WX’.
perform BDC_FIELD1 TABLES BDCDATA using ‘RM06I-LOHNB’
‘X’.
ELSEIF NORMB_005 = ‘GD’.
perform BDC_FIELD1 TABLES BDCDATA using ‘RM06I-PIPEL’
‘X’.
ELSEIF NORMB_005 = ‘JS’.
perform BDC_FIELD1 TABLES BDCDATA using ‘RM06I-KONSI’
‘X’.
ENDIF.
CLEAR BDCDATA.
perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPMM06I’ ‘0101’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINA-MAHN1’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-URZLA’
URZLA_006.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-MEINS’
MEINS_007.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-UMREZ’
UMREZ_008.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-UMREN’
UMREN_009.

************2015.07.08 取消更新货源清单的功能

*CLEAR BDCDATA.
*PERFORM BDC_DYNPRO1 TABLES BDCDATA USING ‘SAPLMEOR’ ‘0230’.
*CLEAR BDCDATA.
*PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_CURSOR’

  •                          <span class="hljs-string">'EORD-BDATU(01)'</span>.
    

*CLEAR BDCDATA.
*PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_OKCODE’

  •                          <span class="hljs-string">'/00'</span>.
    

*CLEAR BDCDATA.
*PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘EORD-VDATU(01)’

  •                          DATAB_022.
    

*CLEAR BDCDATA.
*PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘EORD-BDATU(01)’

  •                          DATBI_023.
    

*CLEAR BDCDATA.
*PERFORM BDC_DYNPRO1 TABLES BDCDATA USING ‘SAPLMEOR’ ‘0230’.
*CLEAR BDCDATA.
*PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_CURSOR’

  •                          <span class="hljs-string">'EINA-INFNR'</span>.
    

*CLEAR BDCDATA.
*PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_OKCODE’

  •                          <span class="hljs-string">'=EN'</span>.
    

*CLEAR BDCDATA.
*perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPMM06I’ ‘0101’.
*CLEAR BDCDATA.
*perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_CURSOR’

  •                          <span class="hljs-string">'EINA-MAHN1'</span>.
    

*CLEAR BDCDATA.
*perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’

  •                          <span class="hljs-string">'/00'</span>.
    

*CLEAR BDCDATA.
*perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-URZLA’

  •                          URZLA_006.
    

*CLEAR BDCDATA.
*perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-MEINS’

  •                          MEINS_007.
    

*CLEAR BDCDATA.
*perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-UMREZ’

  •                          UMREZ_008.
    

*CLEAR BDCDATA.
*perform BDC_FIELD1 TABLES BDCDATA using ‘EINA-UMREN’

  •                          UMREN_009.
    

CLEAR BDCDATA.
perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPMM06I’ ‘0102’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINE-NETPR’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-APLFZ’
APLFZ_010.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-EKGRP’
EKGRP_011.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-NORBM’
NORBM_012.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-WEBRE’
WEBRE_013.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-MWSKZ’
MWSKZ_014.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-IPRKZ’
IPRKZ_015.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-NETPR’

                   NETPR_016.

*信息记录中的币别有供应商中的订单单位自动带出 因此注释一下代码 20160729 wxb
*CLEAR BDCDATA.
*perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-WAERS’

  •                          WAERS_017.
    

CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-PEINH’
PEINH_018.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-BPRME’
BPRME_019.
"CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-BPUMZ’
BPUMZ_020.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘EINE-BPUMN’
BPUMN_021.
CLEAR BDCDATA.
perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPMM06I’ ‘0105’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINE-ANGNR’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’
‘=KO’.
CLEAR BDCDATA.
perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPMV13A’ ‘0201’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_CURSOR’
‘RV13A-DATBI’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’
‘=BACK’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘RV13A-DATAB’
DATAB_022.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘RV13A-DATBI’
DATBI_023.
CLEAR BDCDATA.
perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPMM06I’ ‘0105’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINE-ANGNR’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPMM06I’ ‘0103’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_CURSOR’
‘RM06I-LTEX1(01)’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform BDC_DYNPRO1 TABLES BDCDATA using ‘SAPLSPO1’ ‘0100’.
CLEAR BDCDATA.
perform BDC_FIELD1 TABLES BDCDATA using ‘BDC_OKCODE’
‘=YES’.
PERFORM BDC_TRANSACTION1 TABLES MESSTAB BDCDATA
USING ‘ME11’
CTU
MODE
UPDATE
L_MSTRING
MSGTYP
INFNR.

if sy-subrc <> 0.
subrc = sy-subrc.
exit.
endif.

增加的修改信息记录功能 20170505 by lcq***********************
perform bdc_dynpro1 TABLES BDCDATA using ‘SAPMM06I’ ‘0100’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINE-WERKS’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINA-LIFNR’
LIFNR_001.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINA-MATNR’
MATNR_002.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINE-EKORG’
EKORG_003.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINE-WERKS’
WERKS_004.
*CLEAR BDCDATA.
*perform bdc_field2 TABLES BDCDATA using ‘RM06I-NORMB’

  •                          NORMB_005.
    CLEAR BDCDATA.
    IF NORMB_005 = 'BZ'.
    

PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RM06I-NORMB’
‘X’.
ELSEIF NORMB_005 = ‘WX’.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RM06I-LOHNB’
‘X’.
ELSEIF NORMB_005 = ‘GD’.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RM06I-PIPEL’
‘X’.
ELSEIF NORMB_005 = ‘JS’.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RM06I-KONSI’
‘X’.
ENDIF.
CLEAR BDCDATA.
perform bdc_dynpro1 TABLES BDCDATA using ‘SAPMM06I’ ‘0101’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINA-MAHN1’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘=KO’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINA-URZLA’
URZLA_006.
*CLEAR BDCDATA.
*perform bdc_field2 TABLES BDCDATA using ‘EINA-REGIO’

  •                          REGIO_007.
    

*CLEAR BDCDATA.
*perform bdc_field2 TABLES BDCDATA using ‘EINA-TELF1’

  •                          TELF1_008.
    
  •  CLEAR BDCDATA.
    

*perform bdc_field2 TABLES BDCDATA using ‘EINA-MEINS’

  •  MEINS_009.
    CLEAR BDCDATA.
    

perform bdc_field1 TABLES BDCDATA using ‘EINA-UMREZ’
UMREZ_008.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINA-UMREN’
UMREN_009.
CLEAR BDCDATA.
perform bdc_dynpro1 TABLES BDCDATA using ‘SAPLV14A’ ‘0102’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_CURSOR’
‘VAKE-DATAB(01)’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘=PICK’.

CLEAR BDCDATA.
PERFORM BDC_DYNPRO1 TABLES BDCDATA USING ‘SAPMV13A’ ‘0201’.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_CURSOR’
‘RV13A-DATAB’.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_OKCODE’
‘=PDAT’.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RV13A-DATAB’
DATAB_022.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RV13A-DATBI’
DATBI_023.
CLEAR BDCDATA.
PERFORM BDC_DYNPRO1 TABLES BDCDATA USING ‘SAPMV13A’ ‘0201’.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_CURSOR’
‘KONP-KSCHL(01)’.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_OKCODE’
‘=PDAT’.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RV13A-DATAB’
DATAB_022.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RV13A-DATBI’
DATBI_023.
CLEAR BDCDATA.
PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RV130-SELKZ(01)’

  •                         SELKZ_01_030.'X'
      'X'.
    
    CLEAR BDCDATA.
    PERFORM BDC_DYNPRO1 TABLES BDCDATA USING ‘SAPMV13A’ ‘0300’.
    CLEAR BDCDATA.
    PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_CURSOR’
    ‘RV13A-DATBI’.
    CLEAR BDCDATA.
    PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘BDC_OKCODE’
    ‘=BACK’.
    CLEAR BDCDATA.
    PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RV13A-DATAB’
    DATAB_022.
    CLEAR BDCDATA.
    PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘RV13A-DATBI’
    DATBI_023.
    CLEAR BDCDATA.
    PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘KONP-KBETR’
    NETPR_016.
    CLEAR BDCDATA.
    PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘KONP-GKWRT’
    NETPR_016.
    CLEAR BDCDATA.
    PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘KONP-STFKZ’
  •                          STFKZ_035."</span>A
      <span class="hljs-string">'A'</span>.
    
    CLEAR BDCDATA.
    PERFORM BDC_FIELD1 TABLES BDCDATA USING ‘KONP-KZNEP’
  •                          KZNEP_036.<span class="hljs-string">"'X'
      'X'.
    
    CLEAR BDCDATA.
    

perform bdc_dynpro1 TABLES BDCDATA using ‘SAPMV13A’ ‘0201’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_CURSOR’
‘KONP-KBETR(01)’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘BACK’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘RV13A-DATAB’
DATAB_022.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘RV13A-DATBI’
DATBI_023.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘KONP-KBETR(01)’
NETPR_016.
CLEAR BDCDATA.
perform bdc_dynpro1 TABLES BDCDATA using ‘SAPMM06I’ ‘0101’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINA-MAHN1’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINA-URZLA’
URZLA_006.
*CLEAR BDCDATA.
*perform bdc_field2 TABLES BDCDATA using ‘EINA-REGIO’

  •                          REGIO_016.
    

*CLEAR BDCDATA.
*perform bdc_field2 TABLES BDCDATA using ‘EINA-TELF1’

  •                          TELF1_017.
    CLEAR BDCDATA.
    

perform bdc_dynpro1 TABLES BDCDATA using ‘SAPMM06I’ ‘0102’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINE-APLFZ’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINE-APLFZ’
APLFZ_010.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINE-EKGRP’
EKGRP_011.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINE-NORBM’
NORBM_012.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINE-WEBRE’
WEBRE_013.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINE-MWSKZ’
MWSKZ_014.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘EINE-IPRKZ’
IPRKZ_015.
CLEAR BDCDATA.
perform bdc_dynpro1 TABLES BDCDATA using ‘SAPMM06I’ ‘0105’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_CURSOR’
‘EINE-ANGNR’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform bdc_dynpro1 TABLES BDCDATA using ‘SAPMM06I’ ‘0103’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_CURSOR’
‘RM06I-LTEX1(01)’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘/00’.
CLEAR BDCDATA.
perform bdc_dynpro1 TABLES BDCDATA using ‘SAPLSPO1’ ‘0100’.
CLEAR BDCDATA.
perform bdc_field1 TABLES BDCDATA using ‘BDC_OKCODE’
‘=YES’.

*perform bdc_transaction tables messtab
*using ‘ME12’

  •                          CTU
    
  •                          MODE
    
  •                          UPDATE.
    

PERFORM BDC_TRANSACTION1 TABLES MESSTAB BDCDATA
USING ‘ME12’
CTU
MODE
UPDATE
L_MSTRING
MSGTYP
INFNR.
if sy-subrc <> 0.
subrc = sy-subrc.
exit.
endif.


perform close_group1 using CTU.

ENDFUNCTION.

*----------------------------------------------------------------------
** data definition
*----------------------------------------------------------------------
** Batchinputdata of single transaction
*DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
** messages of call transaction
*DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
** error session opened (’ ’ or ‘X’)
*DATA: E_GROUP_OPENED.
** message texts
*TABLES: T100.
&---------------------------------------------------------------------
*& Form BDC_DYNPRO
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  --&gt;P_0021   text
    
  •  --&gt;P_0022   text
    

----------------------------------------------------------------------
FORM BDC_DYNPRO1 TABLES BDCDATA STRUCTURE BDCDATA USING VALUE(P_0021)
VALUE(P_0022).

  • DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
  • CLEAR BDCDATA.
    BDCDATA-PROGRAM = P_0021.
    BDCDATA-DYNPRO = P_0022.
    BDCDATA-DYNBEGIN = ‘X’.
    APPEND BDCDATA.

ENDFORM. " BDC_DYNPRO
&---------------------------------------------------------------------
*& Form BDC_FIELD
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  --&gt;P_0026   text
    
  •  --&gt;P_0027   text
    

----------------------------------------------------------------------
FORM BDC_FIELD1 TABLES BDCDATA STRUCTURE BDCDATA
USING VALUE(P_0026)
VALUE(P_0027).

  • DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

IF P_0027 <> ‘/’.

  • CLEAR BDCDATA.
    BDCDATA-FNAM = P_0026.
    BDCDATA-FVAL = P_0027.
    APPEND BDCDATA.
    ENDIF.
    ENDFORM. " BDC_FIELD

&---------------------------------------------------------------------
*& Form BDC_TRANSACTION
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  --&gt;P_MESSTAB  text
    
  •  --&gt;P_0298   text
    
  •  --&gt;P_CTU  text
    
  •  --&gt;P_MODE  text
    
  •  --&gt;P_UPDATE  text
    

----------------------------------------------------------------------
FORM BDC_TRANSACTION1 TABLES P_MESSTAB STRUCTURE BDCMSGCOLL
BDCDATA STRUCTURE BDCDATA
"插入正确名称 <…>
USING VALUE(P_0298)
P_CTU
P_MODE
P_UPDATE
L_MSTRING
MSGTYP
INFNR.

  • DATA: L_MSTRING(480) TYPE C.
  • DATA: MSGTYP(1) TYPE C.

DATA: L_SUBRC LIKE SY-SUBRC.
** batch input session

  • IF SESSION = ‘X’.
  • CALL FUNCTION ‘BDC_INSERT’
  •     EXPORTING TCODE     = TCODE
    
  •     TABLES    DYNPROTAB = BDCDATA.
    
  • IF SMALLLOG <> ‘X’.
  •  <span class="hljs-symbol">WRITE:</span> / <span class="hljs-string">'BDC_INSERT'</span>(I03),
    
  •           TCODE,
    
  •           <span class="hljs-string">'returncode:'</span>(I05),
    
  •           SY-SUBRC,
    
  •           <span class="hljs-string">'RECORD:'</span>,
    
  •           SY-INDEX.
    
  • ENDIF.
    ** call transaction using
  • ELSE.
    DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
    DATA: ZT100 LIKE T100 OCCURS 0 WITH HEADER LINE.
  • DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
    REFRESH MESSTAB.
    CALL TRANSACTION P_0298 USING BDCDATA
    MODE P_MODE
    UPDATE P_UPDATE
    MESSAGES INTO MESSTAB.
    L_SUBRC = SY-SUBRC.
  • IF SMALLLOG <> ‘X’.
    WRITE: / ‘CALL_TRANSACTION’,
    P_0298,
    ‘returncode:’(I05),
    L_SUBRC,
    ‘RECORD:’,
    SY-INDEX.
    LOOP AT MESSTAB.
    SELECT SINGLE * FROM T100 INTO ZT100 WHERE SPRSL = MESSTAB-MSGSPRA
    AND ARBGB = MESSTAB-MSGID
    AND MSGNR = MESSTAB-MSGNR.
    IF SY-SUBRC = 0.
    L_MSTRING = ZT100-TEXT.
    IF L_MSTRING CS ‘&1’.
    REPLACE ‘&1’ WITH MESSTAB-MSGV1 INTO L_MSTRING.
    REPLACE ‘&2’ WITH MESSTAB-MSGV2 INTO L_MSTRING.
    REPLACE ‘&3’ WITH MESSTAB-MSGV3 INTO L_MSTRING.
    REPLACE ‘&4’ WITH MESSTAB-MSGV4 INTO L_MSTRING.
    ELSE.
    REPLACE ‘&’ WITH MESSTAB-MSGV1 INTO L_MSTRING.
    REPLACE ‘&’ WITH MESSTAB-MSGV2 INTO L_MSTRING.
    REPLACE ‘&’ WITH MESSTAB-MSGV3 INTO L_MSTRING.
    REPLACE ‘&’ WITH MESSTAB-MSGV4 INTO L_MSTRING.
    ENDIF.
    CONDENSE L_MSTRING.
  •      <span class="hljs-symbol">WRITE:</span> / MESSTAB-MSGTYP, L_MSTRING(<span class="hljs-number">250</span>).
    

MSGTYP = MESSTAB-MSGTYP.
INFNR = MESSTAB-MSGV1.
ELSE.
WRITE: / MESSTAB.
ENDIF.
ENDLOOP.
SKIP.

  • ENDIF.
    ** Erzeugen fehlermappe ************************************************
  • IF L_SUBRC <> 0 AND E_GROUP <> SPACE.
  •  IF E_GROUP_OPENED = <span class="hljs-string">' '</span>.
    
  •    CALL FUNCTION <span class="hljs-string">'BDC_OPEN_GROUP'</span>
    
  •         EXPORTING  CLIENT   = SY-MANDT
    
  •                    GROUP    = E_GROUP
    
  •                    USER     = E_USER
    
  •                    KEEP     = E_KEEP
    
  •                    HOLDDATE = E_HDATE.
    
  •     E_GROUP_OPENED = <span class="hljs-string">'X'</span>.
    
  •  ENDIF.
    
  •  CALL FUNCTION <span class="hljs-string">'BDC_INSERT'</span>
    
  •       EXPORTING TCODE     = TCODE
    
  •       TABLES    DYNPROTAB = BDCDATA.
    
  • ENDIF.
  • ENDIF.
    REFRESH BDCDATA.

ENDFORM. " BDC_TRANSACTION
&---------------------------------------------------------------------
*& Form CLOSE_GROUP
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  --&gt;P_CTU  text
    

----------------------------------------------------------------------
FORM CLOSE_GROUP1 USING P_CTU.

ENDFORM. " CLOSE_GROUP
&---------------------------------------------------------------------
*& Form OPEN_GROUP
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  --&gt;P_GROUP  text
    
  •  --&gt;P_USER  text
    
  •  --&gt;P_KEEP  text
    
  •  --&gt;P_HOLDDATE  text
    
  •  --&gt;P_CTU  text
    

----------------------------------------------------------------------
FORM OPEN_GROUP1 USING P_GROUP
P_USER
P_KEEP
P_HOLDDATE
P_CTU.

ENDFORM. " OPEN_GROUP




<think>好的,我需要帮助用户解决在SAP系统中更改物料主数据的基本计量单位后,如何同步更新采购信息记录中的订单单位的问题。首先,我需要理解用户的问题场景:当物料主数据的基本计量单位被修改后,用户希望采购信息记录中的订单单位也能自动手动同步更新,以确保数据一致性。 首先,我应该回忆一下SAP中物料主数据和采购信息记录之间的关系。物料主数据包含基本计量单位(Base Unit of Measure),而采购信息记录(Purchase Info Record)中通常会记录与供应商协商的订单单位。这两者是否需要保持一致,者是否有自动更新的机制? 根据引用[4]提到的内容,修改物料主数据中的某些字段可能需要同时更新相关字段,例如价格控制标识需要连同价格确定一起更改。这可能意味着在修改基本计量单位时,也可能需要处理相关依赖项。 接下来,我需要考虑采购信息记录的维护流程。引用[1]提到创建采购信息记录的步骤,但未直接涉及单位变更的同步。可能用户需要手动更新,者通过某些配置批处理作业来实现同步。 另外,引用[3]中提到了物料主数据的收货处理时间和库存管理相关设置,但这些可能不直接影响采购信息记录的单位。不过,系统是否会自动检查单位的一致性,者在采购订单创建时是否会有警告错误,这也是需要考虑的。 可能的解决方案包括: 1. **手动更新采购信息记录**:用户逐个检查并修改相关采购信息记录的订单单位。这可能适用于少量记录的情况,但效率低下。 2. **使用批量修改工具**:例如,SAP的LSMW(Legacy System Migration Workbench)CATT(Computer Aided Test Tool)来批量更新采购信息记录中的订单单位。这需要用户有相应的权限和技术知识。 3. **检查系统配置**:是否有配置选项允许在物料主数据变更时自动更新相关采购信息记录。可能需要查阅SAP的配置文档咨询实施顾问。 4. **使用BAPI增强程序**:通过编写自定义的ABAP代码使用BAPI(如BAPI_MATERIAL_SAVEDATA)来在保存物料主数据时触发采购信息记录的更新。引用[4]提到了使用BAPI时遇到的字段更新问题,需要注意依赖字段的处理。 此外,需要提醒用户,更改基本计量单位可能会影响库存管理、采购订单、生产订单等多个模块,因此需要全面评估影响,并在测试系统中验证后再进行生产系统的更改。 可能还需要检查采购信息记录中的订单单位是否必须与物料主数据的基本单位一致,者是否可以不同。例如,采购时可能以箱为单位,而库存管理以件为单位,此时系统会自动进行单位转换,前提是相关单位已在物料主数据中定义并维护转换率。 总结步骤可能包括:评估影响范围、备份数据、手动批量更新采购信息记录、测试验证。同时,需要注意权限和变更管理流程,确保操作的合规性。</think>在SAP系统中,更改物料主数据的基本计量单位后,采购信息记录的订单单位不会自动同步更新。需通过以下步骤实现同步: ### 一、影响范围分析 1. **物料主数据变更** 修改物料主数据的基本计量单位(事务代码`MM02`)会影响库存管理、采购订单等模块,但**采购信息记录(Info Record)需单独处理**[^1]。 2. **采购信息记录依赖关系** 采购信息记录的订单单位独立存储,需手动通过工具更新。系统不会自动同步,因不同供应商可能使用不同采购单位[^2]。 --- ### 二、同步更新操作步骤 #### 方法1:手动修改(少量记录适用) 1. 进入事务代码`ME11``ME12` 2. 输入供应商、物料号、采购组织等条件 3. 在**`采购组织数据`视图**中修改订单单位 4. 保存时系统会检查单位转换关系 - 需确保新旧单位间已维护转换率(事务代码`CUNI`)[^3] #### 方法2:批量修改使用LSMWBDC) 1. **LSMW脚本示例** ```abap FIELD: EINA-LIFNR, "供应商 EINA-MATNR, "物料号 EINE-EKORG, "采购组织 EINE-EEIND. "订单单位(新值) ``` 2. 需通过`CUNIT`事务维护单位转换关系后再执行 #### 方法3:增强自动更新(需开发支持) 通过用户出口`MM06E005`BAdI`ME_GUI_ME21N`,在保存物料主数据时触发采购信息记录更新: ```abap DATA: lt_eina TYPE TABLE OF eina, lt_eine TYPE TABLE OF eine. SELECT * INTO TABLE lt_eina FROM eina WHERE matnr = matnr_new. LOOP AT lt_eina ASSIGNING FIELD-SYMBOL(<fs_eina>). UPDATE eine SET eeind = new_unit WHERE infnr = <fs_eina>-infnr. ENDLOOP. ``` --- ### 三、关键注意事项 1. **单位转换关系** 必须通过`CUNI`维护新旧单位转换比率,否则采购订单会报错`单位XX与基本单位YY无转换关系`[^3]。 2. **历史单据处理** 已存在的采购订单需通过`ME22N`逐单修改通过`MRKO`批量调整。 3. **价格影响检查** 若采购价格基于旧单位,需重新计算新单位价格(事务代码`ME11`→条件类型`PBXX`)[^4]。 --- ### 四、验证流程 | 步骤 | 操作 | 预期结果 | |------|--------------------------|-----------------------------| | 1 | `MM03`查看物料主数据 | 基本单位显示新值 | | 2 | `ME13`检查采购信息记录 | 订单单位同步更新 | | 3 | `ME21N`创建测试采购订单 | 系统自动带出新单位且无报错 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值