MFBF:作业反冲-----报工过账

本文详细解释了为什么不能使用BAPI_REPMANCONF_CREATE_MTS进行MFBF(制造订单反冲)作业报工过账,并提供了两种情况下的BDC(屏幕输入模拟)代码示例,分别处理产量过账和废品数量过账的场景,展示了如何通过BDC代码实现作业值修改和选择不同过账类型的功能。
摘要由CSDN通过智能技术生成

1、该文章主要是针对MFBF中作业反冲-----(报工过账),这个不能用BAPI_REPMANCONF_CREATE_MTS进行过账的原因有二,
其一,如下图所示的作业值有可能要进行修改,而BAPI_REPMANCONF_CREATE_MTS函数中没有对作业值进行修改的参数
在这里插入图片描述
其二是要在前台选择是产量过账还是废品数量进行过账,BAPI_REPMANCONF_CREATE_MTS函数中没有对这个进行单独的处理
在这里插入图片描述

BDC代码示例如下:

**当产量有值时,调用下面这个BDC进行过账
    if lv_menge is not initial  and lv_zfpsl is initial .
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-RB_LEIST'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=RBTYP'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat. "过账日期
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat. "凭证日期
      perform bdc_field       using 'RM61B-RB_BAUGR'
                                    'X'.
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=RBREF'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat.
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat.
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=ZPKT'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat.
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-REP_POINTS'.
      perform bdc_field       using 'RM61B-MATNR' lv_matnr. "物料号
      perform bdc_field       using 'RM61B-WERKS' lv_werks. "工厂
      perform bdc_field       using 'RM61B-VERID' lv_verid. "生产版本
      perform bdc_field       using 'RM61B-REP_POINTS'
                                    'X'.
      perform bdc_field       using 'RM61B-ROUT_ON'
                                    'X'.
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=GOON'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat.
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-ZPUNKT'.
      perform bdc_field       using 'RM61B-MATNR' lv_matnr.
      perform bdc_field       using 'RM61B-WERKS' lv_werks.
      perform bdc_field       using 'RM61B-VERID' lv_verid.
      perform bdc_field       using 'RM61B-REP_POINTS'
                                    'X'.
      perform bdc_field       using 'RM61B-ZPUNKT' lv_zpunkt. "报告点
      perform bdc_field       using 'RM61B-ROUT_ON'
                                    'X'.
      perform bdc_field       using 'RM61B-REFMG' lv_menge.
      perform bdc_field       using 'RM61B-POSTZ'
                                    'X'.
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=ISTDA'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat.
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat.
      perform bdc_field       using 'RM61B-MATNR' lv_matnr.
      perform bdc_field       using 'RM61B-WERKS' lv_werks.
      perform bdc_field       using 'RM61B-VERID' lv_verid.
      perform bdc_field       using 'RM61B-PLWERK'  lv_werks.
      perform bdc_field       using 'RM61B-REP_POINTS'
                                    'X'.
      perform bdc_field       using 'RM61B-ZPUNKT'  lv_zpunkt.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-REFMG'.
      perform bdc_field       using 'RM61B-ROUT_ON'
                                    'X'.
      perform bdc_field       using 'RM61B-REFMG' lv_menge.
      perform bdc_field       using 'RM61B-POSTZ'
                                    'X'.
      perform bdc_dynpro      using 'SAPLRMAA' '0320'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'OPR_INFO-PLNFL(01)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=GOON'.
      perform bdc_field       using 'OPR_INFO-SEL(01)'
                                    'X'.
      perform bdc_dynpro      using 'SAPLRMAA' '0300'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=POST'.
*      perform bdc_field       using 'BDC_CURSOR'
*                                    'RM61J-ISM06'.
      perform bdc_field       using 'RM61J-ISM01' lv_vgw01. "作业值1
      perform bdc_field       using 'RM61J-ILE01' lv_vge01. "单位1
      perform bdc_field       using 'RM61J-LAR01' 'ACT001'.
      perform bdc_field       using 'RM61J-ISM02' lv_vgw02. "作业值2
      perform bdc_field       using 'RM61J-ILE02' lv_vge02. "单位2
      perform bdc_field       using 'RM61J-LAR02' 'ACT002'.
      perform bdc_field       using 'RM61J-ISM03' lv_vgw03. "作业值3
      perform bdc_field       using 'RM61J-ILE03' lv_vge03. "单位3
      perform bdc_field       using 'RM61J-LAR03' 'ACT003'.
      perform bdc_field       using 'RM61J-ISM04' lv_vgw04. "作业值4
      perform bdc_field       using 'RM61J-ILE04' lv_vge04. "单位4
      perform bdc_field       using 'RM61J-LAR04' 'ACT004'.
      perform bdc_field       using 'RM61J-ISM05' lv_vgw05. "作业值5
      perform bdc_field       using 'RM61J-ILE05' lv_vge05. "单位5
      perform bdc_field       using 'RM61J-LAR05' 'ACT005'.
      perform bdc_field       using 'RM61J-ISM06' lv_vgw06. "作业值6
      perform bdc_field       using 'RM61J-ILE06' lv_vge06. "单位6
      perform bdc_field       using 'RM61J-LAR06' 'ACT006'.

    elseif lv_menge is initial  and lv_zfpsl is  not initial . "废品数量有值时调如下的BDC过账

      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-RB_LEIST'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=RBTYP'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat. "过账日期
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat. "凭证日期
      perform bdc_field       using 'RM61B-RB_BAUGR'
                                    'X'.
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=RBREF'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat.
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-ROUT_ON'.
      perform bdc_field       using 'RM61B-ROUT_ON'
                                    'X'.
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/ETOGG'.
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=ZPKT'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat.
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-REP_POINTS'.
      perform bdc_field       using 'RM61B-MATNR' lv_matnr. "物料号
      perform bdc_field       using 'RM61B-WERKS' lv_werks. "工厂
      perform bdc_field       using 'RM61B-VERID' lv_verid. "生产版本
      perform bdc_field       using 'RM61B-REP_POINTS'  'X'.
      perform bdc_field       using 'RM61B-ROUT_ON' 'X'.
      perform bdc_field       using 'RM61B-REFMG' lv_zfpsl. "废品数量
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=GOON'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat.
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-ZPUNKT'.
      perform bdc_field       using 'RM61B-MATNR' lv_matnr. "物料号
      perform bdc_field       using 'RM61B-WERKS' lv_werks.
      perform bdc_field       using 'RM61B-VERID' lv_verid.
      perform bdc_field       using 'RM61B-REP_POINTS'
                                    'X'.
      perform bdc_field       using 'RM61B-ZPUNKT' lv_zpunkt. "报告点
      perform bdc_field       using 'RM61B-ROUT_ON'
                                    'X'.
      perform bdc_field       using 'RM61B-REFMG' lv_zfpsl.
      perform bdc_field       using 'RM61B-POSTZ'
                                    'X'.
      perform bdc_dynpro      using 'SAPLBARM' '0800'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=ISTDA'.
      perform bdc_field       using 'RM61B-BUDAT' lv_budat.
      perform bdc_field       using 'RM61B-BLDAT' lv_bldat.
      perform bdc_field       using 'RM61B-MATNR' lv_matnr.
      perform bdc_field       using 'RM61B-WERKS' lv_werks.
      perform bdc_field       using 'RM61B-VERID' lv_verid.
      perform bdc_field       using 'RM61B-PLWERK' lv_werks.
      perform bdc_field       using 'RM61B-REP_POINTS'
                                     'X'.
      perform bdc_field       using 'RM61B-ZPUNKT' lv_zpunkt.

      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61B-REFMG'.
      perform bdc_field       using 'RM61B-ROUT_ON'
                                    'X'.
      perform bdc_field       using 'RM61B-REFMG' lv_zfpsl.
      perform bdc_field       using 'RM61B-POSTZ'
                                    'X'.
      perform bdc_dynpro      using 'SAPLRMAA' '0320'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'OPR_INFO-PLNFL(01)'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=GOON'.
      perform bdc_field       using 'OPR_INFO-SEL(01)'
                                    'X'.
      perform bdc_dynpro      using 'SAPLRMAA' '0300'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=POST'.
      perform bdc_field       using 'BDC_CURSOR'
                                    'RM61J-ISM01'.
      perform bdc_field       using 'RM61J-ISM01' lv_vgw01. "作业值1
      perform bdc_field       using 'RM61J-ILE01' lv_vge01. "单位1
      perform bdc_field       using 'RM61J-LAR01' 'ACT001'.
      perform bdc_field       using 'RM61J-ISM02' lv_vgw02. "作业值2
      perform bdc_field       using 'RM61J-ILE02' lv_vge02. "单位2
      perform bdc_field       using 'RM61J-LAR02' 'ACT002'.
      perform bdc_field       using 'RM61J-ISM03' lv_vgw03. "作业值3
      perform bdc_field       using 'RM61J-ILE03' lv_vge03. "单位3
      perform bdc_field       using 'RM61J-LAR03' 'ACT003'.
      perform bdc_field       using 'RM61J-ISM04' lv_vgw04. "作业值4
      perform bdc_field       using 'RM61J-ILE04' lv_vge04. "单位4
      perform bdc_field       using 'RM61J-LAR04' 'ACT004'.
      perform bdc_field       using 'RM61J-ISM05' lv_vgw05. "作业值5
      perform bdc_field       using 'RM61J-ILE05' lv_vge05. "单位5
      perform bdc_field       using 'RM61J-LAR05' 'ACT005'.
      perform bdc_field       using 'RM61J-ISM06' lv_vgw06. "作业值6
      perform bdc_field       using 'RM61J-ILE06' lv_vge06. "单位6
      perform bdc_field       using 'RM61J-LAR06'  'ACT006'.

    endif.

    clear: gt_messtab.

    call transaction 'MFBF'
          using gt_bdcdata
          mode 'N' "A:前台执行 N:后台执行
          update 'S' "S:同步 A:异步
          messages into gt_messtab.


    clear: lt_return.
    call function 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
      tables
        imt_bdcmsgcoll = gt_messtab
        ext_return     = lt_return.

**获取凭证日志号

    read table lt_return into ls_return with key type = 'E'. "#EC CI_STDSEQ
    if sy-subrc eq 0. "BDC出现错误
      <ls_value_icon>  = c_red.
      <ls_value_message>  = ls_return-message.
      continue.
    else. "BDC更新成功
      commit work.
      read table lt_return into ls_return with key type = 'S' id = 'RM'. "#EC CI_STDSEQ  " number = '190' or '191' or '215'.
      if sy-subrc eq 0.
        <ls_value_icon>  = c_green.
        <ls_value_message> = '报工成功!'.
      endif.

    endif.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值