用户监控程序

文章目录

1 Introduction

The example is that the detail of other order is found by it (it include quantity and user).

2 Code

*&---------------------------------------------------------------------*
*& Report ZUD
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*

REPORT zud.

*定义表
TYPE-POOLS : slis .
*TABLES: zsdtqth.

DATA: BEGIN OF gs_out,
        sel,
        bname      LIKE usr21-bname, "  SAP账号
        name_textc TYPE ad_namtext, ""姓名
        department TYPE ad_dprtmnt, ""部门

        z01        TYPE i, " 销售订单号
        z02        TYPE i, " 交货单
        z03        TYPE i, " 对账单
        z04        TYPE i, " 系统发票
        z05        TYPE i, " 收款认领

        z11        TYPE i, " 生产订单
        z12        TYPE i, " 报工
        z13        TYPE i, " 计划订单转PR
        z14        TYPE i, " 生产领料

        z21        TYPE i, " 采购申请
        z22        TYPE i, " 采购订单
        z25        TYPE i, " 采购收货
        z23        TYPE i, " 采购入库
        z24        TYPE i, " 检验批决策
*        z25         TYPE i, " 采购对账单
        z26        TYPE i, " 生产发料
        z27        TYPE i, " 生产入库
        z28        TYPE i, " 其它出入

        z31        TYPE i, " 采购发票校验
        z32        TYPE i, " 付款清账
        z33        TYPE i, " 费用报销单
        z34        TYPE i, " 手工凭证
        z35        TYPE i, " 应收暂估
        z36        TYPE i, " 收款清账
        z37        TYPE i, " 资产凭证
        z38        TYPE i, " 销售发票过账
        z39        TYPE i, " 采购发票过账

        z40        TYPE i, "  BOM
        z41        TYPE i, "  工艺路线
        z42        TYPE i, " 生产版本
        z43        TYPE i, " ECN
        z44        TYPE i, " 过账凭证



      END OF gs_out.

DATA: gt_out LIKE STANDARD TABLE OF gs_out.
*--------------------------------------------------------------------*

*ALV的相关定义
DATA: gv_myrepid LIKE sy-repid .
gv_myrepid = sy-repid . "程序为当前程序

DATA: gt_fieldcat TYPE lvc_t_fcat , "存放列名的列表
      gs_fieldcat TYPE lvc_s_fcat.

DATA: gs_layout TYPE lvc_s_layo . "负责整个ALV的全局属性

*DATA: ALV_TITLE TYPE LVC_TITLE .                "ALV表头

DATA: gs_events TYPE slis_alv_event , "事件
      gt_events TYPE slis_t_event.

DATA: gs_sort TYPE lvc_s_sort , "排序
      gt_sort TYPE lvc_t_sort.

DATA: gs_list TYPE lvc_s_drop. "ALV 控制: 下拉列表框
DATA: gt_list TYPE lvc_t_drop.

DATA: gt_listheader TYPE slis_t_listheader, "ALV 表头
      gs_setting    TYPE lvc_s_glay.            "网格设置

DATA: gs_stbl TYPE lvc_s_stbl. "ALV 控制:刷新稳定性

DATA: gcl_alv_grid TYPE REF TO cl_gui_alv_grid.

SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY NO-EXTENSION.
SELECT-OPTIONS: s_erzet FOR sy-uzeit NO-DISPLAY.
SELECT-OPTIONS: s_bname FOR sy-uname .

SELECTION-SCREEN SKIP 1.

*界面初始化
INITIALIZATION .
  s_erdat-sign = 'I'.
  s_erdat-option = 'BT'.
  s_erdat-low = '19900101'.
  s_erdat-high = sy-datum.
  APPEND s_erdat.


*开始事件(权限判断)
START-OF-SELECTION .

*结束事件
END-OF-SELECTION .
  PERFORM frm_ready_report .
  PERFORM frm_show_alv .

FORM frm_ready_report .

  PERFORM frm_set_fieldcat.   "设置字段
  PERFORM frm_set_layout.     "设置布局
  PERFORM frm_get_data.       "获取数据
  PERFORM frm_set_event.      "设置事件
  PERFORM frm_set_header.     "设置表头

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_PRE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_set_fieldcat .
  CLEAR gs_fieldcat .
  REFRESH gt_fieldcat .
  DATA: lv_no_out TYPE c.
  "动态字段名称赋值
*  DATA: LO_TABDESCR TYPE REF TO CL_ABAP_STRUCTDESCR.
*  DATA: LS_FIELD TYPE DFIES,
*        LT_DFIES TYPE DDFIELDS.
*
*  LO_TABDESCR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_DATA( GS_OUT ).
*  CALL METHOD CL_SALV_DATA_DESCR=>READ_STRUCTDESCR
*    EXPORTING
*      R_STRUCTDESCR = LO_TABDESCR
*    RECEIVING
*      T_DFIES       = LT_DFIES.
*  LOOP AT LT_DFIES INTO LS_FIELD.
*    CLEAR: GS_FIELDCAT.
*    MOVE-CORRESPONDING LS_FIELD TO GS_FIELDCAT.
*    CASE LS_FIELD-FIELDNAME.
*      WHEN 'MANDT' OR 'SEL'.
*        CONTINUE.
**      WHEN 'NAME1'.
**        GS_FIELDCAT-COLTEXT = '客户名称'.
*      WHEN OTHERS.
*    ENDCASE.
*    APPEND GS_FIELDCAT TO GT_FIELDCAT.
*  ENDLOOP.

  "手动字段名称赋值
  DEFINE set_fieldcat.        " 定义字段宏
    CLEAR lv_no_out .

    gs_fieldcat-fieldname    = &1.          "ALV 控制: 内部表字段的字段名称
    gs_fieldcat-tabname      = 'GT_OUT'.    "LVC 标签名称
    gs_fieldcat-seltext = gs_fieldcat-coltext = &2."ALV 控制: 列标题
    gs_fieldcat-outputlen    = &3.          "ALV 控制: 列的字符宽度
    gs_fieldcat-edit         = &4.          "ALV 控制: 为输出编辑掩码
    gs_fieldcat-just         = 'L'.         "ALV 控制: 对齐
    gs_fieldcat-lowercase    = 'X'.         "允许/不允许小写字母
    gs_fieldcat-no_zero      = 'X'.         "
    IF &5 NE ''.
      gs_fieldcat-datatype   = &5.          "ABAP 字典中的数据类型
    ENDIF.
    IF &6 NE ''.
      gs_fieldcat-ref_table  = &6.          "ALV 控制: 内部表字段的参考表名称
    ENDIF.
    IF &7 NE ''.
      gs_fieldcat-ref_field  = &7.          "ALV 控制: 内部表字段的参考字段名称
    ENDIF.
      gs_fieldcat-do_sum     = &8.          "ALV 控制: 总计列值

*       CASE GS_FIELDCAT-FIELDNAME .
*          WHEN 'CJAHR' .
*             GS_FIELDCAT-DO_SUM = 'X' .
*             GS_FIELDCAT-HOTSPOT = 'X' .
*             GS_FIELDCAT-QFIELDNAME = 'ZIEME' .
*        ENDCASE .
**    IF &1 = 'SORTL'.         "客户名称
**       AUTHORITY-CHECK OBJECT 'F_KNA1_GRP'
**         ID 'KTOKD' FIELD '*'
**         ID 'ACTVT' FIELD '03'.
**          IF sy-subrc <> 0.
***              GS_FIELDCAT-NO_OUT = 'X'.
**              lv_no_out = 'X' .
**          ENDIF.
**    ENDIF.
**
**    IF &1 = 'KBETR'.        "价格相关的所有字段
**       AUTHORITY-CHECK OBJECT 'V_KONH_VKS'
**         ID 'KSCHL' FIELD 'ZP01'
**         ID 'ACTVT' FIELD '03'.
**          IF sy-subrc <> 0.
***              GS_FIELDCAT-NO_OUT = 'X'.
**               lv_no_out = 'X' .
**          ENDIF.
**    ENDIF.

    IF &1 = 'ERNAM' .
       gs_fieldcat-convexit = 'ZNAME'.
    ENDIF.

    IF lv_no_out = ''.
      APPEND gs_fieldcat TO gt_fieldcat.
    ENDIF.
    CLEAR gs_fieldcat .
  END-OF-DEFINITION.

  set_fieldcat :

                  'BNAME'  'SAP账号' '' '' '' '' '' '' ,
                  'NAME_TEXTC'  '姓名  '   '' '' '' '' '' '',
                  'DEPARTMENT'  '部门   '   '30' '' '' '' '' '',
                  'Z01'  '销售订单号  '   '' '' '' '' '' '',
                   'Z02'      '交货单  '   '' '' '' '' '' '',
*                   'Z03'      '对账单  '   '' '' '' '' '' '',
                   'Z04'      '系统发票  '   '' '' '' '' '' '',
                   'Z05'      '收款认领  '   '' '' '' '' '' '',

                   'Z11'      '生产订单  '   '' '' '' '' '' '',
                   'Z12'      '报工'   '' '' '' '' '' '',
                   'Z13'      '计划订单转PR  '   '' '' '' '' '' '',
                   'Z14'      '生产发料'   '' '' '' '' '' '',
                   'Z40'      'BOM '   '' '' '' '' '' '',     " add it by jt-jinggl
                   'Z41'      '工艺路线  '   '' '' '' '' '' '', " add it by jt-jinggl
                   'Z42'      '生产版本 '   '' '' '' '' '' '', " add it by jt-jinggl
                   'Z43'      'ECN '   '' '' '' '' '' '',  " add it by jt-jinggl
                   'Z44'      '过账凭证 '   '' '' '' '' '' '',  " add it by jt-jinggl


                   'Z21'      '采购申请  '   '' '' '' '' '' '',
                   'Z22'      '采购订单  '   '' '' '' '' '' '',
                   'Z25'      '采购收货  '   '' '' '' '' '' '',
                   'Z23'      '采购入库  '   '' '' '' '' '' '',
                   'Z24'      '检验批决策  '   '' '' '' '' '' '',
*                   'Z25'      '采购对账单  '   '' '' '' '' '' '',
                   'Z26'      '生产领料'   '' '' '' '' '' '',
                   'Z27'      '生产入库  '   '' '' '' '' '' '',
                   'Z28'      '其它出入'   '' '' '' '' '' '',

                   'Z31'      '采购发票校验  '   '' '' '' '' '' '',
                   'Z32'      '付款清账  '   '' '' '' '' '' '',
                   'Z33'      '费用报销单  '   '' '' '' '' '' '',
                   'Z34'      '手工凭证  '   '' '' '' '' '' '',   " modify it by jt-jinggl
                   'Z35'      '应收暂估  '   '' '' '' '' '' '',
                   'Z36'      '收款清账  '   '' '' '' '' '' '',
                   'Z37'      '资产凭证  '   '' '' '' '' '' '',     " add it by jt-jinggl
                   'Z38'      '销售发票过账  '   '' '' '' '' '' '', " add it by jt-jinggl
                   'Z39'      '采购发票过账  '   '' '' '' '' '' ''.  " add it by jt-jinggl



  DEFINE set_sort .  "定义排序宏
    CLEAR gs_sort .
    gs_sort-fieldname = &1.                "ALV 控制: 内部表字段的字段名
    gs_sort-spos = 1.                      "排序顺序
    gs_sort-up = 'X'.
    gs_sort-subtot = 'X'.                  "输出小计
    APPEND gs_sort TO gt_sort.
    CLEAR gs_sort .
  END-OF-DEFINITION.

ENDFORM. " FRM_PRE_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_set_layout .

  gs_setting-edt_cll_cb = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-zebra = 'X'.
  gs_layout-box_fname = 'SEL'.
  gs_layout-no_merging = 'X'.

ENDFORM. " FRM_SET_LAYOUT

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

*--------------------------------------------------------------------*
  SELECT *
    INTO TABLE @DATA(lt_usr)
    FROM p_user_addr WHERE BNAME  in  @s_bname .
  SORT lt_usr BY bname.
  CHECK NOT lt_usr[] IS INITIAL.

  SELECT *
    INTO TABLE @DATA(lt_usrefus)
    FROM usrefus WHERE BNAME  in  @s_bname .
  SORT lt_usrefus BY bname.

  DATA: BEGIN OF ls_sum,
          ernam TYPE mara-ernam,
          type  TYPE char3,
          count TYPE i,
        END OF ls_sum.
  DATA: lt_sum LIKE STANDARD TABLE OF ls_sum.


*SD模块监控***********************************************************************
  "--> Z01 销售订单
  SELECT vbak~ernam,
         vbak~vbeln
    INTO TABLE @DATA(lt_z01)
    FROM vbap
    INNER JOIN vbak ON vbap~vbeln = vbak~vbeln
  WHERE vbak~erdat IN @s_erdat.
*    AND werks = '1000'.
  SORT lt_z01 BY vbeln .
  DELETE ADJACENT DUPLICATES FROM lt_z01 COMPARING vbeln.
  LOOP AT lt_z01 INTO DATA(ls_z01).
    CLEAR: ls_sum.
    ls_sum-ernam = ls_z01-ernam.
    ADD 1 TO ls_sum-count.
    ls_sum-type = 'Z01'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

  "--> 交货单 Z02
  SELECT ernam COUNT( * ) AS count
    APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
    FROM likp
  WHERE erdat IN s_erdat
*    AND vstel = '1000'
    GROUP BY ernam.
  ls_sum-type = 'Z02'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.
*

*  "--->  Z03 对账单
*  SELECT ernam1 AS ernam COUNT( * ) AS count
*    APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
*    FROM zdzhdhead
*  WHERE erdat1 IN s_erdat
*    GROUP BY ernam1.
*  ls_sum-type = 'Z03'.
*  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.


  "--> 系统发票 Z04
  SELECT ernam COUNT( * ) AS count
    APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
    FROM vbrk
  WHERE erdat IN s_erdat
*    AND vstel = '1000'
    GROUP BY ernam.
  ls_sum-type = 'Z04'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.

  "--> 收款认领 Z05
*  SELECT reno,
**         rezei,
*         ernam
**         rlst
*   INTO TABLE @DATA(lt_zfit016)
*   FROM zfit016
*  WHERE erdat IN @s_erdat.
*
*  SORT lt_zfit016 BY ernam  reno.
*  DELETE ADJACENT DUPLICATES FROM lt_zfit016 COMPARING ernam  reno.
*
*
*  LOOP AT lt_zfit016 INTO DATA(ls_zfit016).
*    CLEAR: ls_sum.
*    ls_sum-ernam = ls_zfit016-ernam.
*    ADD 1 TO ls_sum-count.
*    ls_sum-type = 'Z05'.
*    COLLECT ls_sum INTO lt_sum.
*  ENDLOOP.



*PP模块监控***********************************************************************

  "--> Z11 生产订单
  SELECT aufk~ernam ,
         aufk~aufnr
    INTO TABLE @DATA(lt_z11)
   FROM aufk
   INNER JOIN afpo ON aufk~aufnr = afpo~aufnr
   INNER JOIN mara ON afpo~matnr = mara~matnr
 WHERE aufk~erdat IN @s_erdat
   AND aufk~autyp = '10'.
*   AND mtart IN ('Z001','Z002').
  SORT lt_z11 BY aufnr.
  DELETE ADJACENT DUPLICATES FROM lt_z11 COMPARING aufnr.

  LOOP AT lt_z11 INTO DATA(ls_z11).
    CLEAR ls_sum.
    ls_sum-ernam = ls_z11-ernam.
    ADD 1 TO ls_sum-count.
    ls_sum-type = 'Z11'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

*  --> Z12 报工
  SELECT afru~rueck,
         afru~rmzhl,
         afru~ernam,
         afru~werks
  INTO TABLE @DATA(lt_z12)
    FROM afru
  WHERE afru~ersda IN @s_erdat.
  LOOP AT lt_z12 INTO DATA(ls_z12).
    CLEAR ls_sum.
    ls_sum-ernam = ls_z12-ernam.
    ADD 1 TO ls_sum-count.
    ls_sum-type = 'Z12'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

  "--- Z13 计划订单转PR
  SELECT ernam
         COUNT( * ) AS count
  APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
   FROM eban
  WHERE creationdate IN s_erdat
    AND dispo <> ''
  GROUP BY ernam.

  ls_sum-type = 'Z13'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.



  SELECT DISTINCT
         mkpf~usnam AS ernam ,
         mkpf~mblnr,
         mkpf~mjahr

   FROM matdoc
   INNER JOIN mara ON matdoc~matnr = mara~matnr
   INNER JOIN mkpf ON mkpf~mblnr = matdoc~mblnr AND mkpf~mjahr = matdoc~mjahr
 WHERE mkpf~cpudt IN @s_erdat
   AND matdoc~bwart = '261'
   AND matdoc~aufnr NE ''
     INTO TABLE @DATA(lt_z14).

  SORT lt_z14 BY ernam mblnr mjahr .
  DELETE ADJACENT DUPLICATES FROM lt_z14 COMPARING ernam mblnr mjahr.

  LOOP AT lt_z14 INTO DATA(ls_z14).
    CLEAR: ls_sum.
    ls_sum-ernam = ls_z14-ernam.
    ADD 1 TO ls_sum-count.
    ls_sum-type = 'Z14'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

" add it by jt-jinggl start  20250324


*  --> Z40  BOM
  SELECT ANNAM AS   ernam ,
         COUNT( * ) AS count
  INTO TABLE @DATA(lt_z40)
    FROM MAST
  WHERE MAST~ANDAT IN @s_erdat
    GROUP BY ANNAM .
  LOOP AT lt_z40 INTO DATA(ls_z40).
    CLEAR ls_sum.
    ls_sum-ernam = ls_z40-ernam.
    ls_sum-count =  ls_z40-COUNT.
    ls_sum-type = 'Z40'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

*  --> Z41  工艺路线

  SELECT ANNAM AS   ernam ,
         COUNT( * ) AS count
  INTO TABLE @DATA(lt_z41)
    FROM MAPL
  WHERE MAPL~ANDAT IN @s_erdat
    GROUP BY ANNAM .
  LOOP AT lt_z41 INTO DATA(ls_z41).
    CLEAR ls_sum.
    ls_sum-ernam = ls_z41-ernam.
    ls_sum-count =  ls_z41-COUNT.
    ls_sum-type = 'Z41'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

*  --> Z42  生产版本

   SELECT ANNAM AS   ernam ,
         COUNT( * ) AS count
  INTO TABLE @DATA(lt_z42)
    FROM MKAL_AEND
  WHERE MKAL_AEND~ANDAT IN @s_erdat
    GROUP BY ANNAM .
  LOOP AT lt_z42 INTO DATA(ls_z42).
    CLEAR ls_sum.
    ls_sum-ernam = ls_z42-ernam.
     ls_sum-count =  ls_z42-COUNT.
    ls_sum-type = 'Z42'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

*  --> Z43  ECN

      SELECT ANNAM AS   ernam ,
         COUNT( * ) AS count
  INTO TABLE @DATA(lt_z43)
    FROM AENR
  WHERE AENR~ANDAT IN @s_erdat
    GROUP BY ANNAM .
  LOOP AT lt_z43 INTO DATA(ls_z43).
    CLEAR ls_sum.
    ls_sum-ernam = ls_z43-ernam.
    ls_sum-count =  ls_z43-COUNT.
    ls_sum-type = 'Z43'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

*  --> Z44  过账凭证
      SELECT USNAM AS   ernam ,
         COUNT( * ) AS count
  INTO TABLE @DATA(lt_z44)
    FROM MKPF
  WHERE MKPF~BUDAT IN @s_erdat
    GROUP BY USNAM .
  LOOP AT lt_z44 INTO DATA(ls_z44).
    CLEAR ls_sum.
    ls_sum-ernam = ls_z44-ernam.
    ls_sum-count =  ls_z44-COUNT.
    ls_sum-type = 'Z44'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.


" add it by jt-jinggl end  20250324

*MM模块监控***********************************************************************
  "--- Z21 采购申请
  SELECT ernam
         COUNT( * ) AS count
  APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
   FROM eban
  WHERE creationdate IN s_erdat
  GROUP BY ernam.

  ls_sum-type = 'Z21'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.

  "--> Z22 采购订单
  SELECT ernam COUNT( * ) AS count
    APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
    FROM ekko
   WHERE aedat IN s_erdat
   GROUP BY ernam.

  ls_sum-type = 'Z22'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.

  "--> Z25 采购收货
  SELECT DISTINCT
         mkpf~usnam AS ernam ,
         mkpf~mblnr,
         mkpf~mjahr
   FROM matdoc
   INNER JOIN mara ON matdoc~matnr = mara~matnr
   INNER JOIN mkpf ON mkpf~mblnr = matdoc~mblnr AND mkpf~mjahr = matdoc~mjahr
 WHERE mkpf~cpudt IN @s_erdat
   AND matdoc~bwart = '103'
   AND matdoc~ebeln NE ''
     INTO TABLE @DATA(lt_z25).

  SORT lt_z25 BY ernam mblnr mjahr .
  DELETE ADJACENT DUPLICATES FROM lt_z25 COMPARING ernam mblnr mjahr.

  LOOP AT lt_z25 INTO DATA(ls_z25).
    CLEAR: ls_sum.
    ls_sum-ernam = ls_z25-ernam.
    ADD 1 TO ls_sum-count.
    ls_sum-type = 'Z25'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.

  "--> Z23 采购入库
  SELECT DISTINCT
         mkpf~usnam AS ernam ,
         mkpf~mblnr,
         mkpf~mjahr
   FROM matdoc
   INNER JOIN mara ON matdoc~matnr = mara~matnr
   INNER JOIN mkpf ON mkpf~mblnr = matdoc~mblnr AND mkpf~mjahr = matdoc~mjahr
 WHERE mkpf~cpudt IN @s_erdat
   AND matdoc~bwart = '105'
   AND matdoc~ebeln NE ''
     INTO TABLE @DATA(lt_z23).
*   AND mtart = 'Z001'.

  SORT lt_z23 BY ernam mblnr mjahr .
  DELETE ADJACENT DUPLICATES FROM lt_z23 COMPARING ernam mblnr mjahr.

  LOOP AT lt_z23 INTO DATA(ls_z23).
    CLEAR: ls_sum.
    ls_sum-ernam = ls_z23-ernam.
    ADD 1 TO ls_sum-count.
    ls_sum-type = 'Z23'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.


  "--> Z24 检验批决策
  SELECT ersteller AS ernam COUNT( * ) AS count
    APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
    FROM qals
   WHERE ersteldat IN s_erdat
   GROUP BY ersteller.

  ls_sum-type = 'Z24'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.


*  "--> Z25 采购对账单
*  SELECT uname AS ernam COUNT( * ) AS count
*    APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
*    FROM zjsd_head
*   WHERE aedat IN s_erdat
*   GROUP BY uname.
*
*  ls_sum-type = 'Z25'.
*  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.


  "--- Z26 生产领料
  SELECT ernam
         COUNT( * ) AS count
  APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
   FROM zbar_head
  WHERE erdat IN s_erdat
    AND dj_type IN ( 'F1' )
  GROUP BY ernam.

  ls_sum-type = 'Z26'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.


  "--- Z27 生产入库
  SELECT ernam
         COUNT( * ) AS count
  APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
   FROM zbar_head
  WHERE erdat IN s_erdat
    AND dj_type = 'F4'
  GROUP BY ernam.

  ls_sum-type = 'Z27'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.

  SELECT DISTINCT
         mkpf~usnam AS ernam ,
         mkpf~mblnr,
         mkpf~mjahr
   FROM matdoc
   INNER JOIN mara ON matdoc~matnr = mara~matnr
   INNER JOIN mkpf ON mkpf~mblnr = matdoc~mblnr AND mkpf~mjahr = matdoc~mjahr
 WHERE mkpf~cpudt IN @s_erdat
   AND matdoc~bwart = '101'
   AND matdoc~aufnr NE ''
     INTO TABLE @DATA(lt_z27).

  SORT lt_z27 BY ernam mblnr mjahr .
  DELETE ADJACENT DUPLICATES FROM lt_z27 COMPARING ernam mblnr mjahr.

  LOOP AT lt_z27 INTO DATA(ls_z27).
    CLEAR: ls_sum.
    ls_sum-ernam = ls_z27-ernam.
    ADD 1 TO ls_sum-count.
    ls_sum-type = 'Z27'.
    COLLECT ls_sum INTO lt_sum.
  ENDLOOP.



  "--- Z28 其它出入
  SELECT ernam
         COUNT( * ) AS count
  APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
   FROM zbar_head
  WHERE erdat IN s_erdat
    AND dj_type IN ('F2','F3','F9','F5' )
  GROUP BY ernam.

  ls_sum-type = 'Z28'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.




*FICO模块监控***********************************************************************
  "--- Z31 采购发票校验
  SELECT usnam AS ernam
         COUNT( * ) AS count
  APPENDING CORRESPONDING FIELDS OF TABLE lt_sum
   FROM rbkp
  WHERE cpudt IN s_erdat
  GROUP BY usnam.

  ls_sum-type = 'Z31'.
  MODIFY lt_sum FROM ls_sum TRANSPORTING type WHERE type = ''.

*
*KZ 付款清账    ,
*SA 费用报销单
*Z2 应收暂估
*DZ 收款清账


" add it by jt-jinggl start

*  SELECT usnam  AS ernam,
*         blart,
*         COUNT( * ) AS count
*  FROM bkpf
*  WHERE cpudt IN @s_erdat
*    AND blart IN ( 'KZ','SA','Z2','DZ','AB','OA', 'KA','DA', 'AA','AF','KZ','KA','DA','DZ','RV','RE' )
*       GROUP BY bkpf~usnam,bkpf~blart
*  APPENDING CORRESPONDING FIELDS OF TABLE @lt_sum .

" add it by jt-jinggl end


  SELECT usnam  AS ernam,
         blart,
         COUNT( * ) AS count
  FROM bkpf
  WHERE cpudt IN @s_erdat
    AND blart IN ( 'KZ','SA','Z2','DZ','AB','OA','KA','DA', 'AA','AF','KZ','KA','DA','DZ','RV','RE' )

  GROUP BY bkpf~usnam,bkpf~blart
    INTO TABLE @DATA(lt_bkpf_sum) .

  LOOP AT lt_bkpf_sum INTO DATA(ls_bkpf_sum) .
    CLEAR:ls_sum.
    CASE ls_bkpf_sum-blart.
      WHEN 'KZ'.
        ls_sum-ernam = ls_bkpf_sum-ernam.
        ls_sum-type  = 'Z32'.
        ls_sum-count = ls_bkpf_sum-count.
        APPEND ls_sum  TO lt_sum.


      WHEN 'OA' .
        ls_sum-ernam = ls_bkpf_sum-ernam.
        ls_sum-type  = 'Z33'. "费用报销单 固定用户名
        ls_sum-count = ls_bkpf_sum-count.
        APPEND ls_sum  TO lt_sum.

      WHEN 'KA' OR 'DA' OR 'SA' OR  'AB' OR  'KZ' OR  'DZ' .
*        IF ls_bkpf_sum-ernam = 'OARFC'.
*          ls_sum-ernam = ls_bkpf_sum-ernam.
*          ls_sum-type  = 'Z33'. "费用报销单 固定用户名
*          ls_sum-count = ls_bkpf_sum-count.
*          APPEND ls_sum  TO lt_sum.
*        ELSE.

        ls_sum-ernam = ls_bkpf_sum-ernam.
        ls_sum-type  = 'Z34'."手工凭证
        ls_sum-count = ls_bkpf_sum-count.
        APPEND ls_sum  TO lt_sum.
*        ENDIF.


      WHEN 'Z2'.
        ls_sum-ernam = ls_bkpf_sum-ernam.
        ls_sum-type  = 'Z35'.
        ls_sum-count = ls_bkpf_sum-count.
        APPEND ls_sum  TO lt_sum.
      WHEN 'DZ'.
        ls_sum-ernam = ls_bkpf_sum-ernam.
        ls_sum-type  = 'Z36'.
        ls_sum-count = ls_bkpf_sum-count.
        APPEND ls_sum  TO lt_sum.
"  add it by jt-jinggl start
        WHEN 'AA' OR 'AF'.
        ls_sum-ernam = ls_bkpf_sum-ernam.
        ls_sum-type  = 'Z37'.
        ls_sum-count = ls_bkpf_sum-count.
        APPEND ls_sum  TO lt_sum.

         WHEN 'RV'.
        ls_sum-ernam = ls_bkpf_sum-ernam.
        ls_sum-type  = 'Z38'.
        ls_sum-count = ls_bkpf_sum-count.
        APPEND ls_sum  TO lt_sum.

         WHEN 'DE'.
        ls_sum-ernam = ls_bkpf_sum-ernam.
        ls_sum-type  = 'Z39'.
        ls_sum-count = ls_bkpf_sum-count.
        APPEND ls_sum  TO lt_sum.

 " add it by jt-jinggl end

    ENDCASE.
  ENDLOOP.



*--------------------------------------------------------------------*
  DATA: lv_fname TYPE string.
  LOOP AT lt_sum INTO ls_sum.

    READ TABLE lt_usr INTO DATA(ls_usr) WITH KEY bname = ls_sum-ernam BINARY SEARCH.
    IF ls_sum-type = 'Z05' AND sy-subrc NE 0.
      ls_sum-ernam = 'PP02'.
    ENDIF.

    READ TABLE lt_usr INTO ls_usr WITH KEY bname = ls_sum-ernam BINARY SEARCH.
    CHECK sy-subrc EQ 0.

    CLEAR lv_fname.
    lv_fname = 'GS_OUT-' && ls_sum-type.
    IF ls_sum-type IS INITIAL.
      CONTINUE.
    ENDIF.
    CLEAR gs_out.
    gs_out-bname = ls_sum-ernam.

    ASSIGN (lv_fname) TO FIELD-SYMBOL(<fv>).
    <fv> = ls_sum-count.

    gs_out-department = ls_usr-department.
    gs_out-name_textc = ls_usr-name_textc.

    "---存在别名取 别名
    READ TABLE lt_usrefus INTO DATA(ls_usrefus) WITH KEY bname = ls_sum-ernam BINARY SEARCH.
    IF sy-subrc EQ 0 AND ls_usrefus-useralias IS NOT INITIAL.
      gs_out-name_textc = ls_usrefus-useralias.
    ENDIF.

    COLLECT gs_out INTO gt_out.
    UNASSIGN <fv>.

  ENDLOOP.

  SORT gt_out BY bname.

  DATA : lt_out LIKE gt_out.
*          bname      LIKE usr21-bname, "  SAP账号
*        name_textc TYPE ad_namtext, ""姓名
*        department TYPE ad_dprtmnt, ""部门
  LOOP AT lt_usr INTO ls_usr.
    READ TABLE gt_out TRANSPORTING NO FIELDS WITH KEY bname = ls_usr-bname BINARY SEARCH.
    IF sy-subrc NE 0.
      CLEAR : gs_out.
      gs_out-bname = ls_usr-bname.
      gs_out-name_textc = ls_usr-name_textc.
      gs_out-department = ls_usr-department.

      "---存在别名取 别名
      READ TABLE lt_usrefus INTO ls_usrefus WITH KEY bname = ls_usr-bname BINARY SEARCH.
      IF sy-subrc EQ 0  AND ls_usrefus-useralias IS NOT INITIAL..
        gs_out-name_textc = ls_usrefus-useralias.
      ENDIF.

      APPEND gs_out TO lt_out.
    ENDIF.
  ENDLOOP.

  APPEND LINES OF lt_out TO gt_out.

ENDFORM.

FORM frm_show_alv.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
*     I_INTERFACE_CHECK        = ' '
*     I_BYPASSING_BUFFER       =
*     I_BUFFER_ACTIVE          =
      i_callback_program       = gv_myrepid
      i_callback_pf_status_set = 'FRM_STATUS_SET'
      i_callback_user_command  = 'FRM_USER_COMMAND'
*     I_CALLBACK_TOP_OF_PAGE   = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME         =
*     I_BACKGROUND_ID          = ' '
*     i_grid_title             = grid_title
*     I_GRID_SETTINGS          = GS_SETTING   "编辑回填数据时候打开
      is_layout_lvc            = gs_layout
      it_fieldcat_lvc          = gt_fieldcat
*     IT_EXCLUDING             =
*     IT_SPECIAL_GROUPS_LVC    =
*     IT_SORT_LVC              =
*     IT_FILTER_LVC            =
*     IT_HYPERLINK             =
*     IS_SEL_HIDE              =
*     I_DEFAULT                = 'X'
      i_save                   = 'A'
*     IS_VARIANT               =
      it_events                = gt_events
*     IT_EVENT_EXIT            =
*     IS_PRINT_LVC             =
*     IS_REPREP_ID_LVC         =
*     I_SCREEN_START_COLUMN    = 0
*     I_SCREEN_START_LINE      = 0
*     I_SCREEN_END_COLUMN      = 0
*     I_SCREEN_END_LINE        = 0
*     I_HTML_HEIGHT_TOP        =
*     I_HTML_HEIGHT_END        =
*     IT_ALV_GRAPHICS          =
*     IT_EXCEPT_QINFO_LVC      =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER  =
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 = gt_out
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.
  IF sy-subrc <> 0.
* Implement suGT_OUTle error handling here
  ENDIF.

ENDFORM. " FRM_SHOW_ALV

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_set_header .

ENDFORM. " FRM_SET_HEADER

*&---------------------------------------------------------------------*
*&      Form  FRM_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_top_of_page.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = gt_listheader
*     I_LOGO             =
*     I_END_OF_LIST_GRID =
*     I_ALV_FORM         =
    .
ENDFORM. "FRM_TOP_OF_PAGE

*&---------------------------------------------------------------------*
*&      Form  FRM_STATUS_SET
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_status_set USING rt_extab TYPE slis_t_extab.

  SET PF-STATUS 'STATUS' EXCLUDING rt_extab .

  DATA: lv_title TYPE string.

  lv_title = '业务单据监控'.


  IF s_erdat-high IS INITIAL.
    lv_title = lv_title && '_统计日期: ' && s_erdat-low.
  ELSE.
    lv_title = lv_title && '_统计日期从' && s_erdat-low && '到' && s_erdat-high.
  ENDIF.

  SET TITLEBAR 'TITLE' WITH lv_title.

ENDFORM. "FRM_STATUS_SET


*  ----------------------------------------------------------------------*
*         CLASS lcl_event_receiver DEFINITION
*定义类
*  ----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.
    METHODS data_changed FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING er_data_changed
                e_onf4
                e_onf4_before
                e_onf4_after
                e_ucomm.
    METHODS handle_modify
      FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING e_modified et_good_cells.

ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION

*  ----------------------------------------------------------------------*
*         CLASS lcl_event_receiver IMPLEMENTATION
* 定义方法
*  ----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD data_changed.
    PERFORM handle_data_changed USING er_data_changed.
  ENDMETHOD.
  METHOD handle_modify.
    PERFORM handle_data_finish USING e_modified et_good_cells.
  ENDMETHOD.                    "HANDLE_MODIFY

ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION

FORM handle_data_finish USING e_modified TYPE char01
                               et_good_cells TYPE lvc_t_modi.
*在此处添加你自己的代码,改变传入ALV函数的那个内表的值,就能实现你的功能。
  DATA: eh_good_cells TYPE lvc_s_modi.
  IF e_modified = 'X'.
    LOOP AT et_good_cells INTO eh_good_cells. "修改的行。
    ENDLOOP.
*-------------------------------------------------
* 稳定刷新
    gs_stbl-row = 'X'." 基于行的稳定刷新
    gs_stbl-col = 'X'." 基于列稳定刷新
    CALL METHOD gcl_alv_grid->refresh_table_display
      EXPORTING
        is_stable = gs_stbl.
  ENDIF.

ENDFORM.

FORM handle_data_changed USING p_er_data_changed TYPE REF TO cl_alv_changed_data_protocol.

*如果更新的reason字段长度小于10为则提示用户填入字符数不能低于10
  DATA:mod_data        TYPE lvc_t_modi,
       gs_out_mod_data TYPE lvc_s_modi.

  mod_data = p_er_data_changed->mt_mod_cells.
  LOOP AT mod_data INTO gs_out_mod_data.
  ENDLOOP.

ENDFORM. "handle_data_changed

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_EVENT
*定义事件
*&---------------------------------------------------------------------*
FORM frm_set_event .

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type     = 0
    IMPORTING
      et_events       = gt_events
    EXCEPTIONS
      list_type_wrong = 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.

  gs_events-name = 'CALLER_EXIT'.
  gs_events-form = 'FRM_CALLER_EXIT'.
  APPEND gs_events TO gt_events.

ENDFORM. " FRM_SET_EVENT

*&---------------------------------------------------------------------*
*&      Form  FRM_CALLER_EXIT
* 注册回车事件
*&---------------------------------------------------------------------*
FORM frm_caller_exit USING ls_data TYPE slis_data_caller_exit.

  DATA gt_event_receiver TYPE REF TO lcl_event_receiver.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = gcl_alv_grid.

* 设置enter事件
  CALL METHOD gcl_alv_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  CALL METHOD gcl_alv_grid->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified
    EXCEPTIONS
      error      = 1
      OTHERS     = 2.
  IF sy-subrc <> 0.
*   Implement suGT_OUTle error handling here
  ENDIF.
  CREATE OBJECT gt_event_receiver.
  SET HANDLER gt_event_receiver->handle_modify FOR gcl_alv_grid.
  SET HANDLER gt_event_receiver->data_changed FOR gcl_alv_grid.

ENDFORM. "FRM_CALLER_EXIT

*&---------------------------------------------------------------------*
*&      Form  FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_user_command USING s_ucomm TYPE sy-ucomm
                            re_selfield TYPE slis_selfield.

  CALL METHOD gcl_alv_grid->check_changed_data. "触发数据变更
  CASE s_ucomm.

    WHEN '&IC1'.
*      CLEAR GS_OUT.
*      READ TABLE GT_OUT INTO GS_OUT INDEX RE_SELFIELD-TABINDEX.
*      CASE GS_OUT-KSCHL.
*          WHEN 'ZP01'.
*            SET PARAMETER ID 'VKS' FIELD GS_OUT-KSCHL .
*            SET PARAMETER ID 'VKO' FIELD GS_OUT-VKORG .
*            SET PARAMETER ID 'VTW' FIELD GS_OUT-VKORG .
*            SET PARAMETER ID 'KUN' FIELD GS_OUT-KUNNR .
*            CALL TRANSACTION 'VK12' AND SKIP FIRST SCREEN.
*          WHEN 'ZP00'.
*          WHEN OTHERS.
*      ENDCASE.
  ENDCASE.

ENDFORM. "FRM_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_AUTHORIZATION
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_check_authorization .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_F4_TABNR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_f4_tabnr .

  DATA:BEGIN OF lw_f4,
         tabnr LIKE t682i-kotabnr,
*         gstru LIKE tmc1t-gstru,
         gstxt LIKE tmc1t-gstxt,
       END OF lw_f4.

  DATA:lt_f4 LIKE TABLE OF lw_f4 WITH HEADER LINE.

  SELECT
    kotabnr AS tabnr
    tmc1t~gstxt
     INTO CORRESPONDING FIELDS OF TABLE lt_f4
  FROM t681
    INNER JOIN tmc1t ON tmc1t~gstru = t681~kotab AND tmc1t~spras = sy-langu
  WHERE kotabnr IN ('005')
    AND kvewe = 'A'.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'TABNR'
      dynpprog        = sy-repid
*     callback_program = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'P_TABNR'
      value_org       = 'S'
    TABLES
      value_tab       = lt_f4
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.

  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值