SAP 批量TECO/撤销TECO

批量TECO/撤销TECO

REPORT xxxx.

*-----------------------------------------------------------------------
* TABLES
*-----------------------------------------------------------------------

TABLES: aufk.

*-----------------------------------------------------------------------
* TYPES
*-----------------------------------------------------------------------

TYPES: BEGIN OF ty_alv,
         werks    TYPE aufk-werks,   "工厂
         aufnr    TYPE aufk-aufnr,   "生产订单
         istat    TYPE tj02-istat,   "生产订单状态代码
         txt04    TYPE tj02t-txt04,  "生产订单状态
         txt30    TYPE tj02t-txt30,  "生产订单状态描述
         objnr    TYPE aufk-objnr,   "对象号
         zicon(4) TYPE c,            "指示灯
         ztype    TYPE c,            "消息类型
         zmsg     TYPE string,       "返回消息
         zsel     TYPE c,
       END OF ty_alv.

*-----------------------------------------------------------------------
* DATA
*-----------------------------------------------------------------------

DATA: gs_alv TYPE ty_alv,
      gt_alv TYPE TABLE OF ty_alv.

*-----------------------------------------------------------------------
* P A R A M E T E R S   &   S E L E C T - O P T I O N S
*-----------------------------------------------------------------------

SELECTION-SCREEN BEGIN OF BLOCK bk1.
SELECT-OPTIONS: s_werks FOR aufk-werks, "工厂
                s_aufnr FOR aufk-aufnr. "生产订单
SELECTION-SCREEN END OF BLOCK bk1.

*----------------------------------------------------------------------*
*       ALV层级关系定义
*----------------------------------------------------------------------*

DATA:gs_fieldcat TYPE lvc_s_fcat,
     gt_fieldcat TYPE lvc_t_fcat.

DATA:gs_layout TYPE lvc_s_layo.

*&---------------------------------------------------------------------*
*&      Define marco
*&---------------------------------------------------------------------*
DEFINE marco_fieldacat.

  &1 = &1 + 1.
  gs_fieldcat-col_pos = &1.
  gs_fieldcat-fieldname = &2.
  gs_fieldcat-coltext = &3.
  gs_fieldcat-icon = &4.
  gs_fieldcat-no_zero = &5.
  gs_fieldcat-checkbox = &6.
  gs_fieldcat-ref_table = &7.
  gs_fieldcat-ref_field = &8.
  gs_fieldcat-edit = &9.
  APPEND gs_fieldcat TO gt_fieldcat.

END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*&     INITIALIZATION
*&---------------------------------------------------------------------*

INITIALIZATION.

*&---------------------------------------------------------------------*
*&     START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  PERFORM frm_set_fieldacat.
  PERFORM frm_layout.
  PERFORM frm_get_data.
  PERFORM frm_display_alv.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_SET_FIELDACAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_fieldacat .

  DATA l_colpos TYPE lvc_s_fcat-col_pos VALUE 0.
  CHECK gt_fieldcat IS INITIAL.

  marco_fieldacat:
  l_colpos 'ZICON'        '指示灯' '' '' '' '' '' '',
  l_colpos 'ZTYPE'        '消息类型' '' '' '' '' '' '',
  l_colpos 'ZMSG'         '返回消息' '' '' '' '' '' '',
  l_colpos 'WERKS'        '工厂' '' '' '' '' '' '',
  l_colpos 'AUFNR'        '生产订单' '' '' '' '' '' '',
  l_colpos 'TXT04'        '生产订单状态' '' '' '' '' '' '',
  l_colpos 'TXT30'        '生产订单状态描述' '' '' '' '' '' ''.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_layout .

  gs_layout-box_fname = 'ZSEL'.
  gs_layout-zebra = 'X'.
  gs_layout-cwidth_opt = 'X'."设置Grid的字段列宽度自动适应

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .

  SELECT
    aufk~werks,
    aufk~aufnr,
    aufk~objnr,
    tj02~istat,
    tj02t~txt04,
    tj02t~txt30
    INTO CORRESPONDING FIELDS OF TABLE @gt_alv
    FROM
      aufk
    INNER JOIN jest ON aufk~objnr EQ jest~objnr AND
                       jest~stat IN ( 'I0002' , 'I0045' ) AND
                       jest~inact NE 'X'
    INNER JOIN tj02 ON jest~stat EQ tj02~istat
    INNER JOIN tj02t ON tj02~istat EQ tj02t~istat AND
                        tj02t~spras EQ @sy-langu
    WHERE
      aufk~werks IN @s_werks AND
      aufk~aufnr IN @s_aufnr.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display_alv .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'FRM_SET_PF_STATUS'
      i_callback_user_command  = 'FRM_USER_COMMAND'
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
      i_save                   = 'A'
    TABLES
      t_outtab                 = gt_alv
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CALL_BAPI
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_call_bapi USING lv_flag.

  DATA lv_check TYPE c.

  DATA: ls_order  TYPE bapi_order_key,
        lt_order  TYPE TABLE OF bapi_order_key,
        ls_return TYPE bapiret2,
        ls_status TYPE jstat,
        lt_status TYPE TABLE OF jstat.

  "TECO
  IF lv_flag EQ 'TECO'.

    LOOP AT gt_alv INTO gs_alv WHERE zsel EQ 'X' .
      ls_order-order_number = gs_alv-aufnr.
      APPEND ls_order TO lt_order.
      CLEAR: ls_order , gs_alv.
    ENDLOOP.

    CALL FUNCTION 'BAPI_PRODORD_COMPLETE_TECH'
      EXPORTING
        scope_compl_tech   = '1'
        work_process_group = 'COWORK_BAPI'
        work_process_max   = 99
      IMPORTING
        return             = ls_return
      TABLES
        orders             = lt_order.

    IF ls_return-type CA 'AE'.

      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

      LOOP AT gt_alv INTO gs_alv WHERE zsel EQ 'X'.

        gs_alv-zicon = icon_led_red.
        gs_alv-ztype = 'E'.

        gs_alv-zmsg = 'TECO失败!'.

        MODIFY gt_alv FROM gs_alv TRANSPORTING zicon ztype zmsg.

        CLEAR gs_alv.

      ENDLOOP.

    ELSE.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.

      LOOP AT gt_alv INTO gs_alv WHERE zsel EQ 'X'.

        gs_alv-zicon = icon_led_green.
        gs_alv-ztype = 'S'.

        gs_alv-zmsg = 'TECO成功!'.

        MODIFY gt_alv FROM gs_alv TRANSPORTING zicon ztype zmsg.

        CLEAR gs_alv.

      ENDLOOP.

    ENDIF.

  ENDIF.

  "撤销TECO
  IF lv_flag EQ 'INTERN'.

    ls_status-stat = 'I0002'.
    ls_status-inact = ''.
    APPEND ls_status TO lt_status.

    ls_status-stat = 'I0045'.
    ls_status-inact = 'X'.
    APPEND ls_status TO lt_status.

    LOOP AT gt_alv INTO gs_alv WHERE zsel EQ 'X' .

      CALL FUNCTION 'STATUS_CHANGE_INTERN'
        EXPORTING
          client              = sy-mandt
          objnr               = gs_alv-objnr
        TABLES
          status              = lt_status
        EXCEPTIONS
          object_not_found    = 1
          status_inconsistent = 2
          status_not_allowed  = 3
          OTHERS              = 4.

      IF ls_return-type CA 'AE'.

        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

        gs_alv-zicon = icon_led_red.
        gs_alv-ztype = 'E'.
        gs_alv-zmsg = '撤销TECO失败!'.

      ELSE.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.

        gs_alv-zicon = icon_led_green.
        gs_alv-ztype = 'S'.
        gs_alv-zmsg = '撤销TECO成功!'.

      ENDIF.

      MODIFY gt_alv FROM gs_alv TRANSPORTING zicon ztype zmsg.

      CLEAR gs_alv.

    ENDLOOP.

  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_PF_STATUS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_set_pf_status USING t_extab TYPE slis_t_extab.

  SET PF-STATUS 'STATUS'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_user_command USING i_ucomm TYPE sy-ucomm
                            i_selfield TYPE slis_selfield.

  DATA lv_flag(10) TYPE c.

  CASE i_ucomm.
    WHEN '&INTERN'.        "撤销TECO
      lv_flag = 'INTERN'.
    WHEN '&TECO'.
      lv_flag = 'TECO'.    "TECO
    WHEN '&IC1'.
      PERFORM frm_update.
  ENDCASE.

  PERFORM frm_call_bapi USING lv_flag.

  i_selfield-refresh = 'X'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPDATE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_update .

  SELECT
    aufk~werks,
    aufk~aufnr,
    aufk~objnr,
    tj02~istat,
    tj02t~txt04,
    tj02t~txt30
  INTO TABLE @DATA(lt_aufk)
  FROM
  aufk
  INNER JOIN jest ON aufk~objnr EQ jest~objnr AND
                     jest~stat IN ( 'I0002' , 'I0045' ) AND
                     jest~inact NE 'X'
  INNER JOIN tj02 ON jest~stat EQ tj02~istat
  INNER JOIN tj02t ON tj02~istat EQ tj02t~istat AND
                      tj02t~spras EQ @sy-langu
  WHERE
    aufk~werks IN @s_werks AND
    aufk~aufnr IN @s_aufnr.

  LOOP AT gt_alv INTO gs_alv.

    READ TABLE lt_aufk INTO DATA(ls_aufk) WITH KEY werks = gs_alv-werks
                                                   aufnr = gs_alv-aufnr.

    IF sy-subrc EQ 0.
      gs_alv-txt04 = ls_aufk-txt04.
      gs_alv-txt30 = ls_aufk-txt30.
    ENDIF.

    MODIFY gt_alv FROM gs_alv TRANSPORTING txt04 txt30.

    CLEAR: gs_alv , ls_aufk.

  ENDLOOP.

ENDFORM.

在这里插入图片描述

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SAP CO02 TECO工单增强可以通过以下步骤实现。 1. 首先,在CMOD中创建一个项目ZCO02并增加增强PPCO0001。这将允许我们修改PPCO0001的功能。 2. 查看和调试SAP源代码,了解数据流向。特别是要了解在变更工单组件和表头未保存之前,这些数据存储在哪里。根据研究结果,我们发现这些数据存储在调用出口函数参数表中的component_table和header_table中。 3. 接下来,设计数据表结构ZPCO02,用于记录更改的信息。表结构包括字段如下:MANDT(客户端)、AUFNR(工单号)、MATNR(物料号)、FILED(字段名)、AENAM(更改人员)、LAEDA(更改日期)、TCODE(事务码)、CHNID(更改指标)、HOSTIP(主机IP)、HOST(主机)、VALUE_OLD(旧值)、VALUE_NEW(新值)、TIMES(更改时间)。 4. 在EXIT_SAPLCOBT_001的ZXCO1U01中编写代码,用于比较component_table中的数据与RESB(组件需求表)中相应保护字段的值,以确定组件的更改记录。对于表头的更改记录,则通过将header_table与视图CAUFV进行比较来确定。如果工单总数更改导致组件数量更改,则可以编写一个程序从ZPCO02中分离出这些记录,并为用户提供使用。其他更改情况需要进一步研究。 5. 最后,根据SAP的要求,启用FLG_DOC标记来控制是否将更改记录写入CDHDR和CDPOS。请注意,批量处理过多的组件可能会导致程序运行出错,因此要谨慎使用这个标记。 通过以上步骤,就可以实现SAP CO02 TECO工单的增强功能,使得可以记录和追踪更改记录。如果你有更好的方法和想法,欢迎分享和讨论。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值