生产订单修改记录报表

1、写在前面

生产订单修改记录报表对于项目上并不陌生。通常会在增强中编写逻辑来判断生产订单主要信息是否有变更,有则保存到日志表,并通过查询报表展示,帮助用户查看生产订单发生的修改。

本文档的代码,只是对现有逻辑的一些优化,通过配置表的方式,设置监控字段,灵活监控生产订单这些字段的变更,也方便迁移到其他项目使用。

利弊不谈,只是换个思路解决问题,感兴趣的读者可以试一下,也一起测试一下是否有隐藏的BUG。

如果仅仅实施一次,也不需要像本文档这么复杂,直接在增强中写死需要监控的字段就可以了。

2、实施过程

2.1、实施保存增强

CMOD实施订单保存增强

保存时调用日志记录函数

2.2、自建表

创建监控字段配置表,配置需要监控的生产订单字段

其中“表名”和“删除标识”是自定义的域

维护上对应结构的字段,可以根据“表名”字段的搜索帮助找到对应字段。例如找到抬头对应的结构为CAUFVDB,可从CAUFVDB结构中找到要监控的抬头字段,工艺、组件同理。

创建更改日志表,用于存放更改的记录

增强中的函数ZPP_CO02_LOG则根据配置表维护的数据,监控对应的数据改变,并保存到日志表中。

创建查询报表将日志表中的数据进行展示,效果如下

3、参考代码

3.1、增强函数

FUNCTION zpp_co02_log.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      HEADER_TABLE STRUCTURE  CAUFVDB
*"      HEADER_TABLE_OLD STRUCTURE  CAUFVDB
*"      POSITION_TABLE STRUCTURE  AFPOB
*"      POSITION_TABLE_OLD STRUCTURE  AAFPO
*"      SEQUENCE_TABLE STRUCTURE  AFFLB
*"      SEQUENCE_TABLE_OLD STRUCTURE  AAFFL
*"      OPERATION_TABLE STRUCTURE  AFVGB
*"      OPERATION_TABLE_OLD_AFVC STRUCTURE  AAFVC
*"      OPERATION_TABLE_OLD_AFVV STRUCTURE  AAFVV
*"      COMPONENT_TABLE STRUCTURE  RESBB
*"      COMPONENT_TABLE_OLD STRUCTURE  ARESB
*"      RELATION_TABLE STRUCTURE  AFABB OPTIONAL
*"      RELATION_TABLE_OLD STRUCTURE  AAFAB OPTIONAL
*"      PSTEXT_TABLE STRUCTURE  NPTXB OPTIONAL
*"      PSTEXT_TABLE_OLD STRUCTURE  ANPTX OPTIONAL
*"      MILESTONE_TABLE STRUCTURE  MLSTB OPTIONAL
*"      MILESTONE_TABLE_OLD STRUCTURE  AMLST OPTIONAL
*"      PLANNED_ORDER_TABLE STRUCTURE  PLAF
*"      STATUS_TABLE STRUCTURE  JEST
*"      STATUS_TABLE_OLD STRUCTURE  JEST
*"      OPERATION_RELATIONS STRUCTURE  PRE_DEC
*"      OPERATION_RELATIONS_OLD STRUCTURE  PRE_DEC
*"      OPERATION_TABLE_OLD_AFVU STRUCTURE  AAFVU
*"      DOCLINK_TABLE STRUCTURE  AFDLD
*"      DOCLINK_TABLE_OLD STRUCTURE  AFDLD
*"----------------------------------------------------------------------

  CHECK sy-tcode = 'CO02'.

  CONSTANTS:c_h TYPE string VALUE '抬头'.
  CONSTANTS:c_r TYPE string VALUE '工艺'.
  CONSTANTS:c_c TYPE string VALUE '组件'.
  CONSTANTS:c_s TYPE string VALUE '订单状态'.

  DATA:lt_log      TYPE TABLE OF zppt_gdbg_log,
       ls_log      TYPE zppt_gdbg_log,
       ls_log_temp TYPE zppt_gdbg_log.

  DATA:lv_tname     TYPE zppt_gdbg_zd-tabname,
       lv_tname_old TYPE zppt_gdbg_zd-tabname.

  "IP和HOST
  DATA: lv_iporg TYPE msxxlist-hostadr,
        lv_ipdec TYPE char16,
        lv_host  TYPE char18.

  DATA:lv_arbpl     TYPE arbpl,
       lv_arbpl_old TYPE arbpl.

  DATA:lv_delete TYPE c,
       lv_seq    TYPE zppt_gdbg_log-seqno.

  FIELD-SYMBOLS:<fs_field>     TYPE any,
                <fs_field_old> TYPE any.


  SELECT SINGLE
    MAX( seqno )
  FROM zppt_gdbg_log
  INTO lv_seq
  WHERE aufnr = header_table-aufnr.

  "生产订单变更日期监控字段
  SELECT
    tabname,"表名
    fieldname,"字段
    ddtext"名称
  FROM zppt_gdbg_zd
  INTO TABLE @DATA(lt_field).

**  Get user IP,hostname
  CALL FUNCTION 'TH_USER_INFO'    " Get user IP,hostname
    EXPORTING
      client   = sy-mandt
      user     = sy-uname
    IMPORTING
      hostaddr = lv_iporg
      terminal = lv_host
    EXCEPTIONS
      OTHERS   = 1.

**"Conv.IP addr to format 'xxx.xxx.xxx.xxx'
  CALL FUNCTION 'GWY_IPADR2STRING'  "Conv.IP addr
    EXPORTING
      ipadr  = lv_iporg
    IMPORTING
      string = lv_ipdec.

  READ TABLE header_table INDEX 1.
  READ TABLE header_table_old INDEX 1.
  READ TABLE position_table INDEX 1.
  READ TABLE position_table_old INDEX 1.

  ls_log_temp-mandt = sy-mandt.
  ls_log_temp-aenam = sy-uname.
  ls_log_temp-laeda = sy-datum.
  ls_log_temp-times = sy-uzeit.
  ls_log_temp-tcode = sy-tcode.
  ls_log_temp-host = lv_host.
  ls_log_temp-ip = lv_ipdec.
  ls_log_temp-aufnr = header_table-aufnr.

*1)生产订单抬头更改记录字段

  LOOP AT lt_field INTO DATA(ls_field) WHERE tabname = 'HEAD'.
    ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE header_table TO <fs_field>.
    IF sy-subrc EQ 0.
      ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE header_table_old TO <fs_field_old>.
      IF sy-subrc EQ 0 AND <fs_field> <> <fs_field_old>.
        ls_log = ls_log_temp.
        lv_seq = lv_seq + 1.
        ls_log-seqno = lv_seq.
        ls_log-object = c_h.
        ls_log-chnid = 'U'.
        ls_log-field = ls_field-ddtext.
        ls_log-value_old = <fs_field_old>.
        ls_log-value_new = <fs_field>.
        APPEND ls_log TO lt_log.
        CLEAR ls_log.
      ENDIF.
    ENDIF.
    CLEAR:ls_field.
  ENDLOOP.

  LOOP AT lt_field INTO ls_field WHERE tabname = 'POSI'.
    ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE position_table TO <fs_field>.
    IF sy-subrc EQ 0.
      ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE position_table_old TO <fs_field_old>.
      IF sy-subrc EQ 0 AND <fs_field> <> <fs_field_old>.
        ls_log = ls_log_temp.
        lv_seq = lv_seq + 1.
        ls_log-seqno = lv_seq.
        ls_log-object = c_h.
        ls_log-chnid = 'U'.
        ls_log-field = ls_field-ddtext.
        ls_log-value_old = <fs_field_old>.
        ls_log-value_new = <fs_field>.
        APPEND ls_log TO lt_log.
        CLEAR ls_log.
      ENDIF.
    ENDIF.
    CLEAR:ls_field.
  ENDLOOP.


*-组件
*2)生产订单组件更改记录字段
*    删除组件时也需要记录以上内容


  LOOP AT component_table WHERE vbkz EQ 'U'
                              OR vbkz EQ 'I'
                              OR vbkz EQ 'D'.

    CASE component_table-vbkz.
      WHEN 'I'.
        LOOP AT lt_field INTO ls_field WHERE tabname = 'COMP'.
          ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE component_table TO <fs_field>.
          IF sy-subrc EQ 0 AND <fs_field> IS NOT INITIAL.
            ls_log = ls_log_temp.
            lv_seq = lv_seq + 1.
            ls_log-seqno = lv_seq.
            ls_log-object = c_c.
            ls_log-chnid = 'I'.
            ls_log-field = ls_field-ddtext.
            ls_log-matnr = component_table-matnr.
            ls_log-value_new = <fs_field>.
            APPEND ls_log TO lt_log.
            CLEAR ls_log.
          ENDIF.
          CLEAR:ls_field.
        ENDLOOP.
      WHEN 'D'.
        CLEAR component_table_old.
        READ TABLE component_table_old WITH KEY rsnum = component_table-rsnum
                                                 rspos = component_table-rspos.
        LOOP AT lt_field INTO ls_field WHERE tabname = 'COMP'.
          ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE component_table_old TO <fs_field_old>.
          IF sy-subrc EQ 0 AND <fs_field_old> IS NOT INITIAL.
            ls_log = ls_log_temp.
            lv_seq = lv_seq + 1.
            ls_log-seqno = lv_seq.
            ls_log-object = c_c.
            ls_log-chnid = 'D'.
            ls_log-field = ls_field-ddtext.
            ls_log-matnr = component_table_old-matnr.
            ls_log-value_old = <fs_field_old>.
            APPEND ls_log TO lt_log.
            CLEAR ls_log.
          ENDIF.
          CLEAR:ls_field.
        ENDLOOP.
      WHEN 'U'.
        CLEAR component_table_old.
        READ TABLE component_table_old WITH KEY rsnum = component_table-rsnum
                                                 rspos = component_table-rspos.

        LOOP AT lt_field INTO ls_field WHERE tabname = 'COMP'.
          ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE component_table TO <fs_field>.
          IF sy-subrc EQ 0.
            ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE component_table_old TO <fs_field_old>.
            IF sy-subrc EQ 0 AND <fs_field> <> <fs_field_old>.
              ls_log = ls_log_temp.
              lv_seq = lv_seq + 1.
              ls_log-seqno = lv_seq.
              ls_log-object = c_c.
              ls_log-chnid = 'U'.
              ls_log-field = ls_field-ddtext.
              ls_log-matnr = component_table-matnr.
              ls_log-value_old = <fs_field_old>.
              ls_log-value_new = <fs_field>.
              APPEND ls_log TO lt_log.
              CLEAR ls_log.
            ENDIF.
          ENDIF.
          CLEAR:ls_field.
        ENDLOOP.
    ENDCASE.
  ENDLOOP.

*-工艺路线
*3)生产订单工艺更改记录字段

  LOOP AT operation_table WHERE vbkz EQ 'U'
                           OR vbkz EQ 'I'
                           OR vbkz EQ 'D'.
    CASE operation_table-vbkz.
      WHEN 'I'.
        LOOP AT lt_field INTO ls_field WHERE tabname = 'OPER'.
          IF ls_field-fieldname = 'ARBPL'."工作中心
            CLEAR:lv_arbpl.
            SELECT SINGLE
              arbpl
            FROM crhd
            INTO lv_arbpl
            WHERE objid = operation_table-arbid.

            IF lv_arbpl IS NOT INITIAL.
              ls_log = ls_log_temp.
              lv_seq = lv_seq + 1.
              ls_log-seqno = lv_seq.
              ls_log-object = c_r.
              ls_log-chnid = 'I'.
              ls_log-field = '工作中心'.
              ls_log-vornr = operation_table-vornr.
              ls_log-value_new = lv_arbpl.
              APPEND ls_log TO lt_log.
              CLEAR ls_log.
            ENDIF.
          ELSE.
            ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE operation_table TO <fs_field>.
            IF sy-subrc EQ 0 AND <fs_field> IS NOT INITIAL.
              ls_log = ls_log_temp.
              lv_seq = lv_seq + 1.
              ls_log-seqno = lv_seq.
              ls_log-object = c_r.
              ls_log-chnid = 'I'.
              ls_log-field = ls_field-ddtext.
              ls_log-vornr = operation_table-vornr.
              ls_log-value_new = <fs_field>.
              APPEND ls_log TO lt_log.
              CLEAR ls_log.
            ENDIF.
          ENDIF.
          CLEAR:ls_field.
        ENDLOOP.
      WHEN 'D'."删除工艺并不会设置为D,要用状态来判断
      WHEN 'U'.
        "用状态判断工艺是否删除
        CLEAR lv_delete.
        READ TABLE status_table
          WITH KEY objnr = operation_table-objnr
                   stat = 'I0013'
                   inact = ''.
        IF sy-subrc = 0.
          lv_delete = 'X'.
        ENDIF.

        CLEAR operation_table_old_afvc.
        READ TABLE operation_table_old_afvc WITH KEY aufpl = operation_table-aufpl
                                                      aplzl = operation_table-aplzl.

        CLEAR operation_table_old_afvv.
        READ TABLE operation_table_old_afvv WITH KEY aufpl = operation_table-aufpl
                                                      aplzl = operation_table-aplzl.


        CLEAR lv_arbpl.
        SELECT SINGLE
            arbpl
        FROM crhd
        INTO lv_arbpl
        WHERE objid = operation_table-arbid.

        CLEAR lv_arbpl_old.
        SELECT SINGLE
            arbpl
        FROM crhd
        INTO lv_arbpl_old
        WHERE objid = operation_table_old_afvc-arbid.

        IF lv_delete = 'X'."删除
          LOOP AT lt_field INTO ls_field WHERE tabname = 'OPER'.
            IF ls_field-fieldname = 'ARBPL'."工作中心
              IF lv_arbpl_old IS NOT INITIAL.
                ls_log = ls_log_temp.
                lv_seq = lv_seq + 1.
                ls_log-seqno = lv_seq.
                ls_log-object = c_r.
                ls_log-chnid = 'D'.
                ls_log-field = '工作中心'.
                ls_log-vornr = operation_table-vornr.
                ls_log-value_old = lv_arbpl_old.
                APPEND ls_log TO lt_log.
                CLEAR ls_log.
              ENDIF.
            ELSE.
              ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE operation_table_old_afvc TO <fs_field_old>.
              IF sy-subrc NE 0.
                ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE operation_table_old_afvv TO <fs_field_old>.
              ENDIF.
              IF sy-subrc EQ 0 AND <fs_field_old> IS NOT INITIAL.
                ls_log = ls_log_temp.
                lv_seq = lv_seq + 1.
                ls_log-seqno = lv_seq.
                ls_log-object = c_r.
                ls_log-chnid = 'D'.
                ls_log-field = ls_field-ddtext.
                ls_log-vornr = operation_table-vornr.
                ls_log-value_old = <fs_field_old>.
                APPEND ls_log TO lt_log.
                CLEAR ls_log.
              ENDIF.
            ENDIF.

            CLEAR:ls_field.
          ENDLOOP.
        ELSE."修改
          LOOP AT lt_field INTO ls_field WHERE tabname = 'OPER'.
            IF ls_field-fieldname = 'ARBPL'."工作中心
              IF lv_arbpl <> lv_arbpl_old.
                ls_log = ls_log_temp.
                lv_seq = lv_seq + 1.
                ls_log-seqno = lv_seq.
                ls_log-object = c_r.
                ls_log-chnid = 'U'.
                ls_log-field = '工作中心'.
                ls_log-vornr = operation_table-vornr.
                ls_log-value_old = lv_arbpl_old.
                ls_log-value_new = lv_arbpl.
                APPEND ls_log TO lt_log.
                CLEAR ls_log.
              ENDIF.
            ELSE.
              ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE operation_table TO <fs_field>.
              IF sy-subrc EQ 0.
                ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE operation_table_old_afvc TO <fs_field_old>.
                IF sy-subrc NE 0.
                  ASSIGN COMPONENT ls_field-fieldname OF STRUCTURE operation_table_old_afvv TO <fs_field_old>.
                ENDIF.
                IF sy-subrc EQ 0 AND <fs_field> <> <fs_field_old>.
                  ls_log = ls_log_temp.
                  lv_seq = lv_seq + 1.
                  ls_log-seqno = lv_seq.
                  ls_log-object = c_r.
                  ls_log-chnid = 'U'.
                  ls_log-field = ls_field-ddtext.
                  ls_log-vornr = operation_table-vornr.
                  ls_log-value_old = <fs_field_old>.
                  ls_log-value_new = <fs_field>.
                  APPEND ls_log TO lt_log.
                  CLEAR ls_log.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDLOOP.
        ENDIF.
      WHEN OTHERS.
    ENDCASE.
  ENDLOOP.

*-生产订单状态
*4)生产订单状态记录
  LOOP AT status_table WHERE objnr = header_table-objnr.

    READ TABLE status_table_old WITH KEY objnr = status_table-objnr
                                   stat = status_table-stat.
    IF sy-subrc = 0.
      IF status_table_old-inact <> status_table-inact.
        ls_log = ls_log_temp.
        lv_seq = lv_seq + 1.
        ls_log-seqno = lv_seq.
        ls_log-object = c_s.
        ls_log-chnid = 'U'.
        ls_log-field = status_table-stat.
        IF status_table_old-inact = 'X'.
          ls_log-value_old = '状态未激活'.
          ls_log-value_new = '状态激活'.
        ELSE.
          ls_log-value_old = '状态激活'.
          ls_log-value_new = '状态未激活'.
        ENDIF.
        APPEND ls_log TO lt_log.
        CLEAR ls_log.
      ENDIF.
    ELSE.
      ls_log = ls_log_temp.
      lv_seq = lv_seq + 1.
      ls_log-seqno = lv_seq.
      ls_log-object = c_s.
      ls_log-chnid = 'U'.
      ls_log-field = status_table-stat.
      ls_log-value_old = ''.
      ls_log-value_new = '状态激活'.
      APPEND ls_log TO lt_log.
      CLEAR ls_log.
    ENDIF.

  ENDLOOP.

  IF lt_log IS NOT INITIAL.
    INSERT zppt_gdbg_log FROM TABLE lt_log.
    REFRESH:lt_log.
  ENDIF.
ENDFUNCTION.

3.2、报表代码

*&---------------------------------------------------------------------*
*& Report: ZPP_GDBG_LOG                                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
* Creation Date :                                           *
* Author        :                                             *
* Description   : 生产订单变更记录报表                                 *
* Tcode         : ZPP_GDBG_LOG                                              *
* Doc : 生产订单变更记录报表
* Notion:
* 依赖增强
*  # 二代增强
*    PPCO0001  : EXIT_SAPLCOBT_001 开发应用程序: PP订单
*  # 增强内部调用函数
*    ZPP_CO02_LOG
*----------------------------------------------------------------------*
REPORT ZPP_GDBG_LOG.

*----------------------------------------------------------------------*
*表声明
*----------------------------------------------------------------------*
TABLES:afko,zppt_gdbg_log,aufk.

*----------------------------------------------------------------------*
*类型池声明
*----------------------------------------------------------------------*
TYPE-POOLS:slis.

*----------------------------------------------------------------------*
* 类型定义
*----------------------------------------------------------------------*
TYPES: BEGIN OF ty_alv.
         include structure zppt_gdbg_log.
TYPES: color(4) TYPE c.
TYPES: END OF ty_alv.

*----------------------------------------------------------------------*
* 声明内表和工作区
*----------------------------------------------------------------------*
DATA:gt_alv TYPE TABLE OF ty_alv,
     gs_alv TYPE ty_alv.

*----------------------------------------------------------------------*
*ALV参数声明
*----------------------------------------------------------------------*

DATA:gt_fieldcat TYPE lvc_t_fcat, "字段目录内表
     gs_fieldcat TYPE lvc_s_fcat, "字段目录工作区
     gs_layout   TYPE lvc_s_layo. "用于定义ALV表单的相关格式、属性

*----------------------------------------------------------------------*
*选 择 屏 幕 定 义 块
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE TEXT-001 .
  SELECT-OPTIONS:s_werks FOR aufk-werks  NO INTERVALS OBLIGATORY,
                  s_aufnr FOR zppt_gdbg_log-aufnr, "生产订单
                  s_aenam FOR zppt_gdbg_log-aenam, "更改者
                  s_laeda FOR zppt_gdbg_log-laeda. "修改日期
SELECTION-SCREEN END OF BLOCK block1 .

*&---------------------------------------------------------------------*
*&  INITIALIZATION:程序初始化时所执行的代码
*&---------------------------------------------------------------------*
INITIALIZATION.

*&---------------------------------------------------------------------*
*&  AT SELECTION-SCREEN:在选择屏幕上执行的代码
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.

*&---------------------------------------------------------------------*
*&  START-OF-SELECTION:程序运行所处理的代码
*&---------------------------------------------------------------------*
START-OF-SELECTION.

  "权限检查
  PERFORM frm_check_srceen.

  "获取取数
  PERFORM frm_get_data.

  "设置字段属性
  PERFORM frm_set_fieldcat.

  "设置输出格式
  PERFORM frm_set_layout.

  "显示ALV
  PERFORM frm_display_alv.

*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK_SRCEEN
*----------------------------------------------------------------------*
FORM frm_check_srceen.

ENDFORM. "frm_check_srceen

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*----------------------------------------------------------------------*
FORM frm_get_data.

  SELECT
    co~aufnr,"
    co~aenam,"
    co~laeda,"
    co~times,"
    co~seqno,"
    co~tcode,"
    co~chnid,"
    co~field,"
    co~object,"
    co~matnr,"
    co~vornr,"
    co~host,"
    co~value_old,"
    co~value_new,"
    co~ip
   FROM zppt_gdbg_log AS co
   INNER JOIN aufk AS fv ON fv~aufnr = co~aufnr
   INTO TABLE @DATA(lt_log)
   WHERE co~aufnr IN @s_aufnr
     AND co~aenam IN @s_aenam
     AND co~laeda IN @s_laeda
     AND fv~werks IN @s_werks.

  LOOP AT lt_log INTO DATA(ls_log).
    CLEAR:gs_alv.
    MOVE-CORRESPONDING ls_log TO gs_alv.
    CASE gs_alv-chnid.
      WHEN 'U'.
        gs_alv-color = 'C510'.
      WHEN 'I'.
        gs_alv-color = 'C710'.
      WHEN 'D'.
        gs_alv-color = 'C610'.
    ENDCASE.
    APPEND gs_alv TO gt_alv.
    CLEAR:ls_log.
  ENDLOOP.

  SORT gt_alv BY aufnr seqno.
ENDFORM. "FRM_GET_DATA

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FIELDCAT
*----------------------------------------------------------------------*
FORM frm_set_fieldcat.

  REFRESH gt_fieldcat.
  DEFINE  init_fill_fcat.
    CLEAR:gs_fieldcat.
    gs_fieldcat-fieldname    = &1.
    gs_fieldcat-coltext      = &2.
    gs_fieldcat-ref_table    = &3.
    gs_fieldcat-ref_field    = &4.
    gs_fieldcat-key          = &5.
    gs_fieldcat-hotspot      = &6.
    gs_fieldcat-edit         = &7.
    gs_fieldcat-no_zero      = &8.
    gs_fieldcat-icon         = &9.
    APPEND gs_fieldcat TO gt_fieldcat.
  END-OF-DEFINITION.

  init_fill_fcat 'AUFNR'     '生产订单' 'ZPPT_GDBG_LOG' 'AUFNR' 'X' '' '' 'X' ''.
  init_fill_fcat 'SEQNO'     '序号' '' '' 'X' '' '' '' ''.
  init_fill_fcat 'FIELD'     '描述' '' '' 'X' '' '' '' ''.
  init_fill_fcat 'VALUE_OLD' '旧值' '' '' '' '' '' '' ''.
  init_fill_fcat 'VALUE_NEW' '新值' '' '' '' '' '' '' ''.
  init_fill_fcat 'OBJECT'    '对象名称' 'ZPPT_GDBG_LOG' 'OBJECT' 'X' '' '' '' ''.
  init_fill_fcat 'MATNR'     '物料' 'ZPPT_GDBG_LOG' 'MATNR' '' '' '' 'X' ''.
  init_fill_fcat 'VORNR'     '组件工序' 'ZPPT_GDBG_LOG' 'VORNR' '' '' '' '' ''.
  init_fill_fcat 'AENAM'     '修改人' 'ZPPT_GDBG_LOG' 'AENAM' '' '' '' '' ''.
  init_fill_fcat 'LAEDA'     '修改日期' 'ZPPT_GDBG_LOG' 'LAEDA' '' '' '' 'X' ''.
  init_fill_fcat 'TIMES'     '修改时间' 'ZPPT_GDBG_LOG' 'TIMES' '' '' '' 'X' ''.
  init_fill_fcat 'TCODE'     '事务代码' 'ZPPT_GDBG_LOG' 'TCODE' '' '' '' '' ''.
  init_fill_fcat 'CHNID'     '修改类型' 'ZPPT_GDBG_LOG' 'CHNID' '' '' '' '' ''.
  init_fill_fcat 'IP'        'IP地址' 'ZPPT_GDBG_LOG' 'IP' '' '' '' '' ''.
  init_fill_fcat 'HOST'      '机器名' 'ZPPT_GDBG_LOG' 'HOST' '' '' '' '' ''.

ENDFORM. "FRM_SET_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*       text  界面格式属性
*----------------------------------------------------------------------*
FORM frm_set_layout .
  CLEAR gs_layout.
  gs_layout-sel_mode   = 'A'.     "选择行模式
  gs_layout-cwidth_opt = 'A'.     "优化列宽设置
  gs_layout-zebra      = 'X'.     "设置斑马线
*  gs_layout-box_fname = 'CHECKBOX'.
  gs_layout-info_fname = 'COLOR'.
ENDFORM. " FRM_SET_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text  界面显示
*----------------------------------------------------------------------*
FORM frm_display_alv .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program      = sy-repid
      is_layout_lvc           = gs_layout
*     i_callback_pf_status_set = 'FRM_SET_STATUS'
      i_callback_user_command = 'FRM_USER_COMMAND'
      it_fieldcat_lvc         = gt_fieldcat
      i_save                  = 'A'
    TABLES
      t_outtab                = gt_alv
    EXCEPTIONS
      program_error           = 1
      OTHERS                  = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM. " FRM_DISPLAY_ALV

*&---------------------------------------------------------------------*
*&      Form  SUB_USER_COMMAND、
*----------------------------------------------------------------------*
FORM frm_user_command USING s_ucomm TYPE sy-ucomm
                             re_selfield TYPE slis_selfield.
  CASE s_ucomm.
    WHEN '&IC1'.
      CLEAR gs_alv.
      READ TABLE gt_alv INTO gs_alv INDEX re_selfield-tabindex.
      IF sy-subrc = 0.
        SET PARAMETER ID 'ANR' FIELD gs_alv-aufnr.
        CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
      ENDIF.

  ENDCASE.

ENDFORM. "SUB_USER_COMMAND


*Selection texts
*----------------------------------------------------------
* S_AENAM         更改者
* S_AUFNR         生产订单
* S_LAEDA         更改日期
* S_WERKS         工厂

 

 
posted @ 2024-11-15 09:12  斌将军  阅读(24)  评论(0编辑  收藏  举报