BAPI_PRODORDCONF_CREATE_TT CO11N 移动类型101、261反冲

博客介绍了使用CO11N进行生产报工,同时根据配置进行101或261货物移动,若货物移动出错可用COGI处理。还阐述了函数调用的增强点,给出了详细的数据定义和函数调用代码,用于获取物料移动数量、计算报工时间等,最后介绍了批次自动确定的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CO11N进行生产报工,同时根据配置进行101或者261货物移动。

如果货物移动出错,可以用COGI进行处理。(后处理错误货物移动)

函数调用的增强点:

MBCFC010  库存管理项目屏幕上的建议批次编号,可用于创建批次

MB_DOCUMENT_BADI:后台进程执行,前台CO11N debug不进入。

FORM FRM_CALL_BAPI .
  DATA:
    LT_TIMETICKETS TYPE TABLE OF   BAPI_PP_TIMETICKET,
    LS_TIMETICKETS TYPE   BAPI_PP_TIMETICKET.
  DATA:LT_LINK_CONF TYPE TABLE OF  BAPI_LINK_CONF_GOODSMOV,
       LS_LINK_CONF TYPE BAPI_LINK_CONF_GOODSMOV.
  DATA:LT_GOODMVT TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
       LS_GOODMVT TYPE BAPI2017_GM_ITEM_CREATE.
  DATA:LT_GOODMVT_POST TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
       LS_GOODMVT_POST TYPE BAPI2017_GM_ITEM_CREATE.
  DATA:LT_DETIAL_RETURN TYPE  TABLE OF BAPI_CORU_RETURN,
       LS_DETAIL_RETURN TYPE BAPI_CORU_RETURN.
  DATA:LS_PROPOSE TYPE BAPI_PP_CONF_PROP .
  DATA:LS_RETURN TYPE BAPIRET1 .
  DATA:LW_AFVC TYPE AFVC .
  DATA: LS_AFVV TYPE AFVV .
  DATA: LV_FLAG TYPE CHAR01 .
  DATA:LV_MESSAGE TYPE STRING .
  DATA:LV_POST TYPE CHAR01 .
*  LS_PROPOSE-QUANTITY = 'X' .                 “更新报工数量
  LS_PROPOSE-DATE_AND_TIME = 'X' .
  LS_PROPOSE-GOODSMOVEMENT  = 'X'. "获取261和101的物料数量信息
* 2.作业时间
  CLEAR: LS_TIMETICKETS,LT_TIMETICKETS[].
  LS_TIMETICKETS-ORDERID       = GS_RESULT_TAB-AUFNR. "工单号
  LS_TIMETICKETS-OPERATION     = GS_RESULT_TAB-VORNR.  "工序号
  LS_TIMETICKETS-YIELD         = GS_RESULT_TAB-REPOM. "工单生产数量
  LS_TIMETICKETS-SEQUENCE      = GS_RESULT_TAB-APLFL.
  APPEND LS_TIMETICKETS TO LT_TIMETICKETS.

*根据数量获取261或者101的物料移动数量
  CALL FUNCTION 'BAPI_PRODORDCONF_GET_TT_PROP'
    EXPORTING
      PROPOSE            = LS_PROPOSE
    IMPORTING
      RETURN             = LS_RETURN
    TABLES
      TIMETICKETS        = LT_TIMETICKETS
      GOODSMOVEMENTS     = LT_GOODMVT
      LINK_CONF_GOODSMOV = LT_LINK_CONF
      DETAIL_RETURN      = LT_DETIAL_RETURN.
  CLEAR LW_AFVC.
  CLEAR LS_AFVV .
  SELECT SINGLE AFVC~APLZL AFVC~AUFPL  AFVC~ARBID
  INTO CORRESPONDING FIELDS OF LW_AFVC
  FROM AFVC INNER JOIN AFKO
  ON    AFVC~AUFPL = AFKO~AUFPL
  WHERE AFKO~AUFNR = GS_RESULT_TAB-AUFNR
  AND   AFVC~VORNR = GS_RESULT_TAB-VORNR.
*获取时间信息
  SELECT SINGLE * FROM AFVV INTO LS_AFVV
  WHERE AUFPL = LW_AFVC-AUFPL
  AND   APLZL = LW_AFVC-APLZL.
  LOOP AT  LT_TIMETICKETS INTO LS_TIMETICKETS .
*计算报工时间信息
    LS_TIMETICKETS-CONF_ACTI_UNIT1 = LS_AFVV-VGE01.
    LS_TIMETICKETS-CONF_ACTI_UNIT2 = LS_AFVV-VGE02.
    LS_TIMETICKETS-CONF_ACTI_UNIT3 = LS_AFVV-VGE03.
    LS_TIMETICKETS-CONF_ACTI_UNIT4 = LS_AFVV-VGE04.
    LS_TIMETICKETS-CONF_ACTI_UNIT5 = LS_AFVV-VGE05.
    LS_TIMETICKETS-CONF_ACTI_UNIT6 = LS_AFVV-VGE06.
    LS_TIMETICKETS-CONF_ACTIVITY1 = LS_TIMETICKETS-YIELD * LS_AFVV-VGW01 / LS_AFVV-BMSCH.
    LS_TIMETICKETS-CONF_ACTIVITY2 = LS_TIMETICKETS-YIELD * LS_AFVV-VGW02 / LS_AFVV-BMSCH.
    LS_TIMETICKETS-CONF_ACTIVITY3 = LS_TIMETICKETS-YIELD * LS_AFVV-VGW03 / LS_AFVV-BMSCH.
    LS_TIMETICKETS-CONF_ACTIVITY4 = LS_TIMETICKETS-YIELD * LS_AFVV-VGW04 / LS_AFVV-BMSCH.
    LS_TIMETICKETS-CONF_ACTIVITY5 = LS_TIMETICKETS-YIELD * LS_AFVV-VGW05 / LS_AFVV-BMSCH.
    LS_TIMETICKETS-CONF_ACTIVITY6 = LS_TIMETICKETS-YIELD * LS_AFVV-VGW06 / LS_AFVV-BMSCH.
*转换为小时。
*    IF LS_TIMETICKETS-CONF_ACTI_UNIT1 EQ 'S' .
*      LS_TIMETICKETS-CONF_ACTI_UNIT1 = 'H'.
*      LS_TIMETICKETS-CONF_ACTIVITY1 =  LS_TIMETICKETS-CONF_ACTIVITY1 / 3600 .
*    ENDIF .
*    IF LS_TIMETICKETS-CONF_ACTI_UNIT2 EQ 'S' .
*      LS_TIMETICKETS-CONF_ACTI_UNIT2 = 'H'.
*      LS_TIMETICKETS-CONF_ACTIVITY2 =  LS_TIMETICKETS-CONF_ACTIVITY2 / 3600 .
*    ENDIF .
*    IF LS_TIMETICKETS-CONF_ACTI_UNIT3 EQ 'S' .
*      LS_TIMETICKETS-CONF_ACTI_UNIT3 = 'H'.
*      LS_TIMETICKETS-CONF_ACTIVITY3 =  LS_TIMETICKETS-CONF_ACTIVITY3 / 3600 .
*    ENDIF .
*    IF LS_TIMETICKETS-CONF_ACTI_UNIT4 EQ 'S' .
*      LS_TIMETICKETS-CONF_ACTI_UNIT4 = 'H'.
*      LS_TIMETICKETS-CONF_ACTIVITY4 =  LS_TIMETICKETS-CONF_ACTIVITY4 / 3600 .
*    ENDIF .
*    IF LS_TIMETICKETS-CONF_ACTI_UNIT5 EQ 'S' .
*      LS_TIMETICKETS-CONF_ACTI_UNIT5 = 'H'.
*      LS_TIMETICKETS-CONF_ACTIVITY5 =  LS_TIMETICKETS-CONF_ACTIVITY5 / 3600 .
*    ENDIF .
*    IF LS_TIMETICKETS-CONF_ACTI_UNIT6 EQ 'S' .
*      LS_TIMETICKETS-CONF_ACTI_UNIT6 = 'H'.
*      LS_TIMETICKETS-CONF_ACTIVITY6 =  LS_TIMETICKETS-CONF_ACTIVITY6 / 3600 .
*    ENDIF .
    MODIFY LT_TIMETICKETS FROM LS_TIMETICKETS .
  ENDLOOP .
  IF LT_GOODMVT IS NOT INITIAL .
    LOOP AT LT_GOODMVT INTO LS_GOODMVT WHERE MOVE_TYPE = '101'.
      LS_GOODMVT-STCK_TYPE = 'X' .
      APPEND LS_GOODMVT TO LT_GOODMVT_POST .
    ENDLOOP .
    LOOP AT LT_GOODMVT INTO LS_GOODMVT WHERE MOVE_TYPE = '261'.

*261批次自动确定
      PERFORM   FRM_CHARG_DETEMINE TABLES LT_GOODMVT_POST USING LS_GOODMVT  .
    ENDLOOP .
    READ TABLE LT_GOODMVT INTO LS_GOODMVT WITH KEY MOVE_TYPE = '101' .
    IF SY-SUBRC <> 0 .
      LV_POST = 'X' .
    ENDIF .
  ENDIF .
*调用BAP进行报工。
  CLEAR LT_LINK_CONF .

*工单确认与物料凭证行项目关联。
  LOOP AT LT_GOODMVT_POST INTO LS_GOODMVT_POST .
    LS_LINK_CONF-INDEX_GOODSMOV = SY-TABIX .
    LS_LINK_CONF-INDEX_CONFIRM = 1 .
    APPEND LS_LINK_CONF TO LT_LINK_CONF .
  ENDLOOP .
  CLEAR: LS_RETURN.
  CLEAR: LT_DETIAL_RETURN.
  CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_TT'
    EXPORTING
      POST_WRONG_ENTRIES = '0'
      TESTRUN            = ''
    IMPORTING
      RETURN             = LS_RETURN
    TABLES
      TIMETICKETS        = LT_TIMETICKETS
      GOODSMOVEMENTS     = LT_GOODMVT_POST
      LINK_CONF_GOODSMOV = LT_LINK_CONF
      DETAIL_RETURN      = LT_DETIAL_RETURN.
  LOOP AT LT_DETIAL_RETURN INTO LS_DETAIL_RETURN WHERE TYPE  CA 'EAX' .
    LV_FLAG = 'X'.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        MSGID               = LS_DETAIL_RETURN-ID
        MSGNR               = LS_DETAIL_RETURN-NUMBER
        MSGV1               = ' '
        MSGV2               = ' '
        MSGV3               = ' '
        MSGV4               = ' '
      IMPORTING
        MESSAGE_TEXT_OUTPUT = LV_MESSAGE.
    CONCATENATE GS_RESULT_TAB-MESSA LV_MESSAGE INTO GS_RESULT_TAB-MESSA .
  ENDLOOP.
  IF LV_FLAG IS INITIAL .

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        WAIT = 'X'
*       IMPORTING
*       RETURN        =
      .
    GS_RESULT_TAB-ICONS = ICON_GREEN_LIGHT .
    GS_RESULT_TAB-MESSA = '报工成功' .
  ELSE .
*回滚。
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
*         IMPORTING
*           RETURN        =
      .
    GS_RESULT_TAB-ICONS = ICON_RED_LIGHT .
  ENDIF .
ENDFORM.

*****************************************************批次自动确定*************************************************************

FORM FRM_CHARG_DETEMINE TABLES  LT_GOODMVT_POST STRUCTURE  BAPI2017_GM_ITEM_CREATE
           USING LS_GOODMVT TYPE BAPI2017_GM_ITEM_CREATE .
  DATA:LT_IMSEG     TYPE TABLE OF IMSEG,
       LS_IMSEG     TYPE IMSEG,
       LV_RUECK     TYPE CO_RUECK,
       LV_RMZHL     TYPE CO_RMZHL,
       LV_NO_DIALOG TYPE XFELD.
  DATA:LS_POST TYPE BAPI2017_GM_ITEM_CREATE .
  LV_NO_DIALOG = 'X' .
  LS_IMSEG-BWART = LS_GOODMVT-MOVE_TYPE .
  LS_IMSEG-MATNR = LS_GOODMVT-MATERIAL .
  LS_IMSEG-WERKS = LS_GOODMVT-PLANT .
  LS_IMSEG-LGORT = LS_GOODMVT-STGE_LOC .
  LS_IMSEG-MENGE = LS_GOODMVT-QUANTITY .
  LS_IMSEG-ERFMG = LS_GOODMVT-ENTRY_QNT .
  LS_IMSEG-RSNUM = LS_GOODMVT-RESERV_NO .
  LS_IMSEG-RSPOS = LS_GOODMVT-RES_ITEM .
  LS_IMSEG-KZEAR = LS_GOODMVT-WITHDRAWN .
  LS_IMSEG-AUFNR = LS_GOODMVT-ORDERID.
  LS_IMSEG-ERFME = LS_GOODMVT-ENTRY_UOM .
  LS_IMSEG-MEINS = LS_GOODMVT-BASE_UOM .
  LS_IMSEG-BDMNG = LS_GOODMVT-QUANTITY .
  LS_IMSEG-BDTER = SY-DATUM .
  LS_IMSEG-CHARG = LS_GOODMVT-BATCH .
  LS_IMSEG-SOBKZ = LS_GOODMVT-SPEC_STOCK.
  LS_IMSEG-KDAUF = LS_GOODMVT-SALES_ORD .
  LS_IMSEG-KDPOS =  LS_GOODMVT-S_ORD_ITEM .
  LS_IMSEG-MAT_KDAUF = LS_GOODMVT-SALES_ORD .
  LS_IMSEG-MAT_KDPOS =  LS_GOODMVT-S_ORD_ITEM .
  CLEAR LS_IMSEG-CHARG.
  APPEND LS_IMSEG TO LT_IMSEG .
  PERFORM BATCH_DETERMINATION  IN PROGRAM SAPLCOWB  IF FOUND
                               TABLES     LT_IMSEG
                                USING     LV_RUECK
                                          LV_RMZHL
                                          LV_NO_DIALOG
                                .
  BREAK ZWANGGF .
  LOOP AT LT_IMSEG INTO LS_IMSEG .
    CLEAR LS_POST .
    MOVE-CORRESPONDING LS_GOODMVT TO LS_POST .
*批次
    LS_POST-BATCH = LS_IMSEG-CHARG .
*数量
    LS_POST-QUANTITY     = LS_IMSEG-ERFMG .
    LS_POST-ENTRY_QNT    = LS_IMSEG-ERFMG .
    APPEND LS_POST TO LT_GOODMVT_POST .
  ENDLOOP .
ENDFORM .

详细说明可参考SDN帖子

https://wiki.scn.sap.com/wiki/display/ERPMan/%5BTEST+CASE%5DHow+to+use+BAPI_PRODORDCONF_CREATE_TT+to+make+confirmation

<think>好的,我现在需要帮助用户解决关于SAP BAPI_PRODORDCONF_CREATE_TT自动最终确认的问题。首先,我得先理解用户的需求。用户可能在使用这个BAPI时遇到了自动最终确认的实现问题,或者错误处理方面的困扰。根据用户提供的引用资料,特别是引用[3]和[4],用户提到在调用BAPI时没有返回错误信息,以及未来日期过账的问题。还有引用[4]提到的需要增强处理错误消息。 首先,我应该回顾一下BAPI_PRODORDCONF_CREATE_TT的基本功能。这个BAPI用于生产订单的报工确认,可能涉及过账工单的工时、物料消耗等。自动最终确认可能指的是在调用这个BAPI后自动将订单状态设为最终确认,而不需要手动操作。不过,用户可能遇到了即使调用BAPI也无法正确触发最终确认的情况,或者错误处理不够明确。 接下来,根据引用[1],提到异步提交的问题。用户可能在使用COMMIT WORK AND WAIT时没有正确同步提交,导致数据不一致。这可能导致自动最终确认未能正确执行。需要检查是否在调用BAPI后正确提交事务,确保数据持久化。 然后,错误处理方面,引用[3]指出BAPI不返回前台CO11N中的错误信息,比如未来日期过账的问题。用户可能在调用BAPI时遇到错误,但无法捕获到具体的错误消息,导致问题难以排查。根据引用[4]的解决方案,需要在增强点调用CM_F_MESSAGES_GET函数来收集错误消息,并触发异常,从而让BAPI的RETURN参数返回这些信息。 所以,自动最终确认的实现可能需要正确设置BAPI的参数,例如POSTGDATE(过账日期)和相关的确认参数。同时,错误处理需要增强,确保错误消息能被正确捕获和返回。 此外,用户可能需要了解如何判断订单是否已经最终确认。引用[2]提到的BAPI_PRODORDCONF_GET_TT_PROP可以用来获取订单属性,可能包括确认状态,这有助于验证BAPI调用后的结果。 在代码示例方面,需要展示如何正确调用BAPI,处理返回参数,以及如何实现增强来捕获错误。同时,要提醒用户注意事务提交的方式,避免异步问题导致的数据不一致。 总结来说,用户的问题集中在如何正确使用BAPI实现自动最终确认,并有效处理可能出现的错误。需要结合参数设置、事务提交、错误增强以及后续状态检查来全面解答。</think>关于SAP BAPI_PRODORDCONF_CREATE_TT的自动最终确认实现及错误处理,以下是分步骤解决方案: 1. **实现自动最终确认的核心参数设置** - 在调用BAPI时需设置`AUTO_FINAL`参数为`X`,表示自动执行最终确认 - 同时必须传递`FINALMODE = X`,否则系统仍会保留中间状态 ```abap CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_TT' EXPORTING postgdate = sy-datum finalmode = 'X' " 强制最终确认 auto_final = 'X'. " 自动标记最终确认 ``` 2. **异步提交问题处理** - 使用`COMMIT WORK AND WAIT`确保异步更新完成[^1] - 检查表`T_RETURN`中的消息类型: ```abap LOOP AT t_return INTO DATA(ls_return) WHERE type = 'E' OR type = 'A'. " 处理错误消息 ENDLOOP. IF sy-subrc = 0. ROLLBACK WORK. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. " 强制同步提交 ENDIF. ``` 3. **错误消息捕获增强实现** - 在用户出口`CMF00001`中增强消息处理: ```abap DATA: lt_messages TYPE cm_t_messages. CALL FUNCTION 'CM_F_MESSAGES_GET' IMPORTING et_messages = lt_messages. IF lt_messages IS NOT INITIAL. " 将消息转移到BAPI返回表 MESSAGE ID 'CK' TYPE 'E' NUMBER '466' RAISING no_costing. [^4] ENDIF. ``` 4. **未来日期过账验证** - 调用前需校验过账日期有效性: ```abap IF postgdate > sy-datum. MESSAGE e001(zmm) WITH '未来日期不允许过账' INTO DATA(lv_msg). RETURN. ENDIF. ``` 5. **确认状态验证方法** - 调用`BAPI_PRODORDCONF_GET_TT_PROP`获取订单属性: ```abap CALL FUNCTION 'BAPI_PRODORDCONF_GET_TT_PROP' EXPORTING orderid = lv_orderid IMPORTING status = lv_status. " 返回状态码CONFSTATUS[^2] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值