文章目录
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.