*&---------------------------------------------------------------------*
*& Report ZSDR011
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2019-10-06
*& Program Type : Report
*& Description : 客户寄售库存在途数及天数报表
*&---------------------------------------------------------------------*
REPORT ZSDR011.
TABLES:LIKP,VBAK,LIPS.
TYPE-POOLS:SLIS,T001W,ICON.
DATA OK_CODE TYPE SY-UCOMM.
DATA OK_SAVE TYPE SY-UCOMM.
"定义ALV输出所需变量
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: LS_STYLE TYPE LVC_S_STYL,
LT_STYLE TYPE TABLE OF LVC_S_STYL.
TYPES: BEGIN OF GTS_DATA,
KUNNR TYPE LIKP-KUNNR, "客户
NAME1 TYPE KNA1-NAME1, "客户名称
MATNR TYPE LIPS-MATNR, "物料
MAKTX TYPE MAKT-MAKTX, "物料描述
WERKS TYPE LIPS-WERKS, "工厂
KULAB TYPE MSKU-KULAB, "非限制库存总数
LFIMG TYPE LIPS-LFIMG, "在途总数
VRKME TYPE LIPS-VRKME, "单位
VBELN TYPE VBAK-VBELN, "销售凭证
KUNFK TYPE VBAK-KUNNR, "付款放
END OF GTS_DATA.
TYPES: BEGIN OF GTS_DATA_SUB,
VBELN TYPE LIPS-VBELN, "DN编号
DATUM TYPE ZTSD_ST03-DATUM, "计划到货日期
KUNNR TYPE LIKP-KUNNR, "客户
NAME1 TYPE KNA1-NAME1, "客户名称
MATNR TYPE LIPS-MATNR, "物料
MAKTX TYPE MAKT-MAKTX, "物料描述
WERKS TYPE LIPS-WERKS, "工厂
LFIMG TYPE LIPS-LFIMG, "在途总数
VRKME TYPE LIPS-VRKME, "单位
WADAT TYPE LIKP-WADAT, "DN单的计划发货日期
ZTDAT TYPE CHAR12, "在途天数
END OF GTS_DATA_SUB.
DATA: GT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA1 TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA2 TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_SUB TYPE TABLE OF GTS_DATA_SUB WITH HEADER LINE.
DATA: GT_DATA_A TYPE TABLE OF GTS_DATA_SUB WITH HEADER LINE.
DATA: GT_DATA_B TYPE TABLE OF GTS_DATA_SUB WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONS: S_KUNSD FOR LIKP-KUNNR MODIF ID MXY . "客户(售达方)
SELECT-OPTIONS: S_KUNFK FOR VBAK-KUNNR MODIF ID MXY . "客户(付款方)
SELECT-OPTIONS: S_MATNR FOR LIPS-MATNR MODIF ID MXY . "物料
SELECT-OPTIONS: S_VKORG FOR VBAK-VKORG MODIF ID MXY . "销售组织
SELECT-OPTIONS: S_WERKS FOR LIPS-WERKS MODIF ID MXY . "工厂
SELECT-OPTIONS: S_WADAT FOR LIKP-WADAT_IST MODIF ID MXY . "发货过账日期
SELECT-OPTIONS: S_AUART FOR VBAK-AUART MODIF ID MXY DEFAULT 'KB'. "订单类型
SELECTION-SCREEN END OF BLOCK B2.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
DATA GT_MSKU TYPE TABLE OF MSKU WITH HEADER LINE .
* 1.先找出满足所有查询条件的DN单信息(主表:LIPS)
CLEAR GT_DATA[] .
SELECT
LIKP~KUNNR
LIPS~MATNR
LIPS~WERKS
LIPS~VRKME
VBAK~VBELN
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
FROM LIPS
INNER JOIN LIKP ON LIPS~VBELN = LIKP~VBELN
INNER JOIN VBAK ON LIPS~KDAUF = VBAK~VBELN
WHERE LIKP~KUNNR IN S_KUNSD
* AND VBAK~KUNNR IN S_KUNFK
AND LIPS~MATNR IN S_MATNR
AND VBAK~VKORG IN S_VKORG
AND LIPS~WERKS IN S_WERKS
AND LIKP~WADAT_IST IN S_WADAT
AND VBAK~AUART IN S_AUART
.
* 2. 按 客户(售达方) + 物料 + 工厂 的查询条件找出客户寄售库存信息(主表:MSKU)
CLEAR GT_DATA1[] .
SELECT KUNNR WERKS MATNR INTO CORRESPONDING FIELDS OF TABLE GT_DATA1[] FROM MSKU
* WHERE SOBKZ = 'W'
WHERE KUNNR IN S_KUNSD
AND WERKS IN S_WERKS
AND MATNR IN S_MATNR
.
LOOP AT GT_DATA1.
SELECT SINGLE MEINS AS VRKME INTO CORRESPONDING FIELDS OF GT_DATA1 FROM MARA
WHERE MATNR = GT_DATA1-MATNR.
MODIFY GT_DATA1.
CLEAR GT_DATA1.
ENDLOOP.
* 3.按 客户(售达方) + 物料 + 工厂,并且 计划到货日期 > 当天日期的 ZZZZ表信息(主表:ZZZZ表)
CLEAR GT_DATA2[] .
SELECT KUNNR WERKS MATNR VRKME INTO CORRESPONDING FIELDS OF TABLE GT_DATA2[] FROM ZTSD_ST03
WHERE KUNNR IN S_KUNSD
AND WERKS IN S_WERKS
AND MATNR IN S_MATNR
AND DATUM > SY-DATUM
.
APPEND LINES OF GT_DATA1[] TO GT_DATA[] .
APPEND LINES OF GT_DATA2[] TO GT_DATA[] .
SORT GT_DATA[] BY KUNNR WERKS MATNR .
DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING KUNNR WERKS MATNR.
LOOP AT GT_DATA.
SELECT SINGLE KUNNR INTO GT_DATA-KUNFK FROM VBPA
WHERE VBPA~VBELN = GT_DATA-VBELN
AND VBPA~PARVW = 'AG'
.
IF GT_DATA-KUNFK IN S_KUNFK.
SELECT SINGLE NAME1 INTO GT_DATA-NAME1 FROM KNA1
WHERE KUNNR = GT_DATA-KUNNR
.
SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
WHERE MATNR = GT_DATA-MATNR
.
*相同客户+工厂+物料 的非限制客户寄售库存(特殊库存W) 汇总数msku-KULAB
CLEAR GT_MSKU[] .
SELECT KULAB INTO CORRESPONDING FIELDS OF TABLE GT_MSKU[] FROM MSKU
WHERE SOBKZ = 'W'
AND KUNNR = GT_DATA-KUNNR
AND WERKS = GT_DATA-WERKS
AND MATNR = GT_DATA-MATNR
.
LOOP AT GT_MSKU.
GT_DATA-KULAB = GT_DATA-KULAB + GT_MSKU-KULAB .
CLEAR GT_MSKU .
ENDLOOP.
*1.已发货过账的DN(LIKP-WBSTK = C),
* 并且 DN单的计划发货日期大于当天(LIKP-WADAT 》 sy-datum),
* 相同客户+物料+工厂的DN单 交货数的总和(lips-LFIMG)
CLEAR GT_DATA_SUB[] .
SELECT
LIKP~KUNNR
LIPS~MATNR
LIPS~WERKS
LIPS~VRKME
LIPS~VBELN
LIPS~LFIMG
LIKP~WADAT
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_SUB[]
FROM LIPS
INNER JOIN LIKP ON LIPS~VBELN = LIKP~VBELN
WHERE LIKP~WBSTK = 'C'
AND LIKP~KUNNR = GT_DATA-KUNNR
AND LIPS~MATNR = GT_DATA-MATNR
AND LIPS~WERKS = GT_DATA-WERKS
AND LIKP~WADAT > SY-DATUM
.
LOOP AT GT_DATA_SUB.
GT_DATA-LFIMG = GT_DATA-LFIMG + GT_DATA_SUB-LFIMG .
CLEAR GT_DATA_SUB .
ENDLOOP.
*2.自定义客户库存在途期初表,相同客户+物料+工厂的,并且客户计划到货日期大于当天的 数量(ZZZZ-数量)
CLEAR GT_DATA_SUB[] .
SELECT KUNNR WERKS MATNR DATUM LFIMG VRKME INTO CORRESPONDING FIELDS OF TABLE GT_DATA_SUB[] FROM ZTSD_ST03
WHERE KUNNR = GT_DATA-KUNNR
AND WERKS = GT_DATA-MATNR
AND MATNR = GT_DATA-WERKS
AND DATUM > SY-DATUM
.
LOOP AT GT_DATA_SUB.
GT_DATA-LFIMG = GT_DATA-LFIMG + GT_DATA_SUB-LFIMG .
CLEAR GT_DATA_SUB .
ENDLOOP.
MODIFY GT_DATA.
ELSE.
DELETE GT_DATA.
ENDIF.
CLEAR GT_DATA.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
CLEAR S_LAYOUT.
S_LAYOUT-ZEBRA = 'X'.
S_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
S_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "单元格颜色内表字段
* s_layout-box_fieldname = 'BOX'.
PERFORM FRM_FILL_FIELD .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_SAVE = 'A'
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
* i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = GT_DATA[].
ENDFORM.
FORM FRM_FILL_FIELD .
DATA: WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DEFINE FILL_FIELD.
WA_FIELDCAT-FIELDNAME = &1.
WA_FIELDCAT-SELTEXT_L = &2.
IF WA_FIELDCAT-FIELDNAME = 'CKBOX' .
WA_FIELDCAT-CHECKBOX = 'X'.
WA_FIELDCAT-EDIT = 'X'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'MENGE_T' .
WA_FIELDCAT-REF_TABNAME = 'AUFM'.
WA_FIELDCAT-REF_FIELDNAME = 'MENGE'.
WA_FIELDCAT-OUTPUTLEN = '13'.
WA_FIELDCAT-EDIT = 'X'.
ENDIF .
IF WA_FIELDCAT-FIELDNAME = 'LGORT_T' .
WA_FIELDCAT-EDIT = 'X'.
ENDIF .
IF WA_FIELDCAT-FIELDNAME = 'PLNBEZ'
OR WA_FIELDCAT-FIELDNAME = 'MATNR'
OR WA_FIELDCAT-FIELDNAME = 'MATNRT'
.
WA_FIELDCAT-REF_TABNAME = 'MARA'.
WA_FIELDCAT-REF_FIELDNAME = 'MATNR'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'ARKTX' OR WA_FIELDCAT-FIELDNAME = 'WAKTX' .
WA_FIELDCAT-REF_TABNAME = 'VBAP'.
WA_FIELDCAT-REF_FIELDNAME = 'ARKTX'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'AUFNR' .
WA_FIELDCAT-REF_TABNAME = 'AUFK'.
WA_FIELDCAT-REF_FIELDNAME = 'AUFNR'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'BLDAT'
OR WA_FIELDCAT-FIELDNAME = 'BUDAT'
.
WA_FIELDCAT-REF_TABNAME = 'MATDOC'.
WA_FIELDCAT-REF_FIELDNAME = 'BLDAT'.
* WA_FIELDCAT-EDIT = 'X'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'MESSAGE' .
WA_FIELDCAT-OUTPUTLEN = '100'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'TYPBO'
OR WA_FIELDCAT-FIELDNAME = 'TYPAI'
.
WA_FIELDCAT-ICON = 'X'.
WA_FIELDCAT-OUTPUTLEN = '13'.
ENDIF.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
CLEAR WA_FIELDCAT.
END-OF-DEFINITION.
FILL_FIELD :
'WERKS' '工厂',
'KUNNR' '客户',
'NAME1' '客户名称',
'MATNR' '物料',
'MAKTX' '物料描述',
'KULAB' '非限制库存总数',
'LFIMG' '在途总数',
'VRKME' '单位'.
ENDFORM.
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN1'.
ENDFORM.
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
IS_SELFIELD TYPE SLIS_SELFIELD.
DATA: REF TYPE REF TO CL_GUI_ALV_GRID.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
RANGES: L_WERKS FOR T001W-WERKS.
RANGES: L_MATNR FOR MARA-MATNR.
DATA:L_BUKRS TYPE T001K-BUKRS.
DATA: S_TABLE TYPE TABLE OF RSPARAMS WITH HEADER LINE.
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF.
CALL METHOD REF->CHECK_CHANGED_DATA.
CASE I_UCOMM.
WHEN '&IC1'."表示双击
IF IS_SELFIELD-FIELDNAME = 'KULAB' .
CHECK IS_SELFIELD-TABINDEX > 0.
CLEAR GT_DATA .
READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
CLEAR S_TABLE[].
CLEAR S_TABLE.
S_TABLE-SELNAME = 'MATNR'.
S_TABLE-SIGN = 'I' .
S_TABLE-OPTION = 'EQ' .
S_TABLE-LOW = GT_DATA-MATNR.
APPEND S_TABLE TO S_TABLE[].
CLEAR S_TABLE.
S_TABLE-SELNAME = 'WERKS'.
S_TABLE-SIGN = 'I' .
S_TABLE-OPTION = 'EQ' .
S_TABLE-LOW = GT_DATA-WERKS.
APPEND S_TABLE TO S_TABLE[].
CLEAR S_TABLE.
S_TABLE-SELNAME = 'KUNNR'.
S_TABLE-SIGN = 'I' .
S_TABLE-OPTION = 'EQ' .
S_TABLE-LOW = GT_DATA-KUNNR.
APPEND S_TABLE TO S_TABLE[].
SUBMIT RM07MKON WITH SELECTION-TABLE S_TABLE AND RETURN.
ELSEIF IS_SELFIELD-FIELDNAME = 'LFIMG' .
CHECK IS_SELFIELD-TABINDEX > 0.
CLEAR GT_DATA .
READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
CLEAR GT_DATA_A[] .
SELECT
LIKP~KUNNR
LIPS~MATNR
LIPS~WERKS
LIPS~VRKME
LIPS~VBELN
LIPS~LFIMG
LIKP~WADAT
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_A[]
FROM LIPS
INNER JOIN LIKP ON LIPS~VBELN = LIKP~VBELN
WHERE LIKP~WBSTK = 'C'
AND LIKP~KUNNR = GT_DATA-KUNNR
AND LIPS~MATNR = GT_DATA-MATNR
AND LIPS~WERKS = GT_DATA-WERKS
AND LIKP~WADAT > SY-DATUM
.
LOOP AT GT_DATA_A.
SELECT SINGLE NAME1 INTO GT_DATA_A-NAME1 FROM KNA1
WHERE KUNNR = GT_DATA_A-KUNNR
.
SELECT SINGLE MAKTX INTO GT_DATA_A-MAKTX FROM MAKT
WHERE MATNR = GT_DATA_A-MATNR
.
GT_DATA_A-ZTDAT = GT_DATA_A-WADAT - SY-DATUM .
MODIFY GT_DATA_A .
CLEAR GT_DATA_A .
ENDLOOP.
CLEAR GT_DATA_B[] .
SELECT KUNNR WERKS MATNR DATUM LFIMG VRKME INTO CORRESPONDING FIELDS OF TABLE GT_DATA_B[] FROM ZTSD_ST03
WHERE KUNNR = GT_DATA-KUNNR
AND WERKS = GT_DATA-MATNR
AND MATNR = GT_DATA-WERKS
AND DATUM > SY-DATUM
.
LOOP AT GT_DATA_B.
SELECT SINGLE NAME1 INTO GT_DATA_B-NAME1 FROM KNA1
WHERE KUNNR = GT_DATA_B-KUNNR
.
SELECT SINGLE MAKTX INTO GT_DATA_B-MAKTX FROM MAKT
WHERE MATNR = GT_DATA_B-MATNR
.
GT_DATA_B-ZTDAT = GT_DATA_B-DATUM - SY-DATUM .
MODIFY GT_DATA_B .
CLEAR GT_DATA_B .
ENDLOOP.
APPEND LINES OF GT_DATA_B[] TO GT_DATA_A[] .
CALL SCREEN 0100 STARTING AT 3 3.
ELSE .
MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
ENDIF.
ENDCASE.
CALL METHOD REF->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
ENDFORM.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TBC_01' ITSELF
CONTROLS: TBC_01 TYPE TABLEVIEW USING SCREEN 0100.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TBC_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TBC_01_CHANGE_TC_ATTR OUTPUT.
DESCRIBE TABLE GT_DATA_A LINES TBC_01-LINES.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PF_0100'.
SET TITLEBAR 'TITLE_0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CANCEL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE CANCEL INPUT.
LEAVE TO SCREEN 0 .
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
OK_SAVE = SY-UCOMM .
CLEAR SY-UCOMM .
CLEAR OK_CODE .
CASE OK_SAVE.
WHEN 'BACK' .
LEAVE TO SCREEN 0 .
WHEN OTHERS .
ENDCASE .
ENDMODULE.
START-OF-SELECTION.
PERFORM FOM_GETDATA.
PERFORM FRM_DISPLAY.
SD-客户寄售库存在途数及天数报表(开发笔记)
最新推荐文章于 2025-03-05 10:29:14 发布