*&---------------------------------------------------------------------*
*& Report ZSDR008
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2019-10-06
*& Program Type : Report
*& Description : SO交货信息报表
*&---------------------------------------------------------------------*
REPORT ZSDR012.
TABLES:VBAK,VBAP,LIKP,LIPS,VBRK,VBRP.
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.
DATA: IW_CELLCOLOR TYPE LVC_T_SCOL WITH HEADER LINE.
TYPES: BEGIN OF GTS_DATA,
CKBOX TYPE C,
VBELN_SO TYPE VBAK-VBELN, "销售凭证
KUNNR TYPE VBAK-KUNNR, "售达方
NAME1 TYPE KNA1-NAME1, "售达方
VKORG TYPE VBAK-VKORG, "销售组织
BSTNK TYPE VBAK-BSTNK, "客户参考
POSNR_SO TYPE VBAP-POSNR, "销售凭证
MATNR TYPE VBAP-MATNR, "物料编码
MAKTX TYPE MAKT-MAKTX, "物料描述
KDMAT TYPE VBAP-KDMAT, "客户物料
POSTX TYPE KNMT-POSTX, "客户物料描述
KWMENG TYPE VBAP-KWMENG, "数量
VRKME TYPE VBAP-VRKME, "单位
WERKS TYPE VBAP-WERKS, "工厂
NETPR TYPE VBAP-NETPR, "净价
NETWR TYPE VBAP-NETWR, "净值
WAERK TYPE VBAP-WAERK, "货币
VBELN_DN TYPE LIPS-VBELN, "DN单号
POSNR_DN TYPE LIPS-POSNR, "DN单号
WERKS_DN TYPE LIPS-WERKS, "DN工厂
LGORT_DN TYPE LIPS-LGORT, "DN库位
LFIMG_DN TYPE LIPS-LFIMG, "交货数量
KCMENG_DN TYPE LIPS-KCMENG, "累计批数量
UECHA_DN TYPE LIPS-UECHA, "上层项目
MENGE_GZ TYPE MSEG-MENGE, "交货过账数量
MBLNR_GZ TYPE MSEG-MBLNR, "交货过账数量
ZEILE_GZ TYPE MSEG-ZEILE, "交货过账数量
BUDAT_MKPF TYPE MSEG-BUDAT_MKPF, "交货过账数量
VBELN_VF TYPE VBRP-VBELN, "开票凭证
POSNR_VF TYPE VBRP-POSNR, "开票项目
FKIMG_VF TYPE VBRP-FKIMG, "开票数量
NETWR_VF TYPE VBRP-NETWR, "开票净值
MWSBP_VF TYPE VBRP-MWSBP, "开票税额
ZHSJE_VF TYPE VBRP-NETWR, "开票含税金额
CELLCOLOR TYPE LVC_T_SCOL, "单元格颜色
STYLE TYPE LVC_T_STYL, "控制不可编辑
END OF GTS_DATA.
DATA: GT_ALV TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_ALV_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_ALV_B TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_LIPS TYPE TABLE OF LIPS WITH HEADER LINE .
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONS: S_VBELN FOR VBAK-VBELN MODIF ID MXY . "销售凭证
SELECT-OPTIONS: S_KUNNR FOR VBAK-KUNNR MODIF ID MXY . "客户
SELECT-OPTIONS: S_VKORG FOR VBAK-VKORG MODIF ID MXY . "销售组织
SELECT-OPTIONS: S_WERKS FOR VBAP-WERKS MODIF ID MXY . "工厂
SELECT-OPTIONS: S_DNELN FOR LIPS-VBELN MODIF ID MXY . "DN编号
SELECT-OPTIONS: S_MATNR FOR VBAP-MATNR MODIF ID MXY . "物料
SELECTION-SCREEN END OF BLOCK B2.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
DATA GT_VBRP TYPE TABLE OF VBRP WITH HEADER LINE .
DATA GT_MSEG TYPE TABLE OF MSEG WITH HEADER LINE .
DATA GT_VBFA TYPE TABLE OF VBFA WITH HEADER LINE .
CLEAR GT_ALV[].
SELECT
VBAK~VBELN AS VBELN_SO
VBAK~KUNNR
VBAK~VKORG
VBAK~BSTNK
VBAP~POSNR AS POSNR_SO
VBAP~MATNR
VBAP~KWMENG
VBAP~VRKME
VBAP~WERKS
VBAP~NETPR
VBAP~NETWR
VBAP~WAERK
VBAP~KDMAT
LIPS~VBELN AS VBELN_DN
LIPS~POSNR AS POSNR_DN
LIPS~LGORT AS LGORT_DN
LIPS~LFIMG AS LFIMG_DN
LIPS~KCMENG AS KCMENG_DN
LIPS~UECHA AS UECHA_DN
INTO CORRESPONDING FIELDS OF TABLE GT_ALV[]
FROM VBAP
INNER JOIN VBAK ON VBAK~VBELN = VBAP~VBELN
LEFT JOIN LIPS ON LIPS~VGBEL = VBAP~VBELN AND LIPS~VGPOS = VBAP~POSNR
WHERE VBAP~VBELN IN S_VBELN
AND VBAP~WERKS IN S_WERKS
AND VBAP~MATNR IN S_MATNR
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~VKORG IN S_VKORG
.
DELETE GT_ALV[] WHERE VBELN_DN NOT IN S_DNELN .
SORT GT_ALV[] BY VBELN_SO POSNR_SO VBELN_DN POSNR_DN .
GT_ALV_A[] = GT_ALV[].
DELETE GT_ALV[] WHERE UECHA_DN IS NOT INITIAL .
IF GT_ALV[] IS NOT INITIAL.
LOOP AT GT_ALV.
IF GT_ALV-LFIMG_DN IS INITIAL
AND GT_ALV-UECHA_DN IS INITIAL
AND GT_ALV-VBELN_DN IS NOT INITIAL
AND GT_ALV-POSNR_DN IS NOT INITIAL
.
GT_ALV-LFIMG_DN = GT_ALV-KCMENG_DN .
CLEAR IW_CELLCOLOR .
IW_CELLCOLOR-FNAME = 'VBELN_DN'.
IW_CELLCOLOR-COLOR-COL = 3.
IW_CELLCOLOR-COLOR-INT = 1.
IW_CELLCOLOR-COLOR-INV = 0.
APPEND IW_CELLCOLOR TO GT_ALV-CELLCOLOR.
CLEAR IW_CELLCOLOR .
IW_CELLCOLOR-FNAME = 'POSNR_DN'.
IW_CELLCOLOR-COLOR-COL = 3.
IW_CELLCOLOR-COLOR-INT = 1.
IW_CELLCOLOR-COLOR-INV = 0.
APPEND IW_CELLCOLOR TO GT_ALV-CELLCOLOR.
ENDIF.
SELECT SINGLE NAME1 INTO GT_ALV-NAME1 FROM KNA1
WHERE KUNNR = GT_ALV-KUNNR
.
SELECT SINGLE MAKTX INTO GT_ALV-MAKTX FROM MAKT
WHERE MATNR = GT_ALV-MATNR
.
SELECT SINGLE POSTX INTO GT_ALV-POSTX FROM KNMT
WHERE KDMAT = GT_ALV-KDMAT
.
*交货过账数量
CLEAR GT_VBFA[].
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_VBFA[]
FROM VBFA
WHERE VBFA~VBELV = GT_ALV-VBELN_DN
AND VBFA~POSNV = GT_ALV-POSNR_DN
AND VBFA~VBTYP_N IN ( 'R','h' )
AND VBFA~VBTYP_N <> ''
.
LOOP AT GT_VBFA.
IF GT_VBFA-PLMIN = '-'.
GT_VBFA-RFMNG = GT_VBFA-RFMNG * -1 .
ENDIF.
GT_ALV-MENGE_GZ = GT_ALV-MENGE_GZ + GT_VBFA-RFMNG .
GT_ALV-MBLNR_GZ = GT_VBFA-VBELN .
GT_ALV-ZEILE_GZ = GT_VBFA-POSNN .
** 'FKIMG_VF' 'DN开票数量合计',
* GT_ALV-FKIMG_VF = GT_ALV-FKIMG_VF + GT_VBRP-FKIMG .
*
** 'NETWR_VF' 'DN开票净值合计',
* GT_ALV-NETWR_VF = GT_ALV-NETWR_VF + GT_VBRP-NETWR .
*
** 'MWSBP_VF' 'DN开票税额合计'.
* GT_ALV-MWSBP_VF = GT_ALV-MWSBP_VF + GT_VBRP-MWSBP .
CLEAR GT_VBFA.
ENDLOOP.
SELECT SINGLE BUDAT_MKPF INTO GT_ALV-BUDAT_MKPF FROM MSEG
WHERE MBLNR = GT_ALV-MBLNR_GZ
AND ZEILE = GT_ALV-ZEILE_GZ
.
*开票数量
CLEAR GT_VBRP[] .
SELECT
VBRP~FKIMG
VBRP~NETWR
VBRP~MWSBP
INTO CORRESPONDING FIELDS OF TABLE GT_VBRP[]
FROM VBRP
INNER JOIN VBRK ON VBRP~VBELN = VBRK~VBELN
WHERE VBRP~VGBEL = GT_ALV-VBELN_DN
AND VBRP~VGPOS = GT_ALV-POSNR_DN
AND VBRK~FKART <> 'F8'
AND VBRK~FKSTO = ''
AND VBRK~FKSTO = ''
AND VBRK~SFAKN = ''
.
CLEAR GT_ALV-FKIMG_VF.
CLEAR GT_ALV-NETWR_VF.
CLEAR GT_ALV-MWSBP_VF.
LOOP AT GT_VBRP.
* 'FKIMG_VF' 'DN开票数量合计',
GT_ALV-FKIMG_VF = GT_ALV-FKIMG_VF + GT_VBRP-FKIMG .
* 'NETWR_VF' 'DN开票净值合计',
GT_ALV-NETWR_VF = GT_ALV-NETWR_VF + GT_VBRP-NETWR .
* 'MWSBP_VF' 'DN开票税额合计'.
GT_ALV-MWSBP_VF = GT_ALV-MWSBP_VF + GT_VBRP-MWSBP .
CLEAR GT_VBRP.
ENDLOOP.
* 'ZHSJE_VF' 'DN含税金额合计'.
GT_ALV-ZHSJE_VF = GT_ALV-NETWR_VF + GT_ALV-MWSBP_VF .
MODIFY GT_ALV .
CLEAR GT_ALV .
ENDLOOP.
ENDIF.
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_ALV[].
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 = 'VBELN_DN' .
WA_FIELDCAT-REF_TABNAME = 'LIPS'.
WA_FIELDCAT-REF_FIELDNAME = 'VBELN'.
ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'KUNNR' .
WA_FIELDCAT-REF_TABNAME = 'VBAK'.
WA_FIELDCAT-REF_FIELDNAME = 'KUNNR'.
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.
IF WA_FIELDCAT-FIELDNAME = 'TYPBO'
OR WA_FIELDCAT-FIELDNAME = 'TYPAI'
.
WA_FIELDCAT-ICON = 'X'.
ENDIF.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
CLEAR WA_FIELDCAT.
END-OF-DEFINITION.
FILL_FIELD :
'VBELN_SO' '销售凭证',
'POSNR_SO' '销售凭证项目',
'BSTNK ' '客户参考',
'KUNNR' '客户',
'NAME1' '客户名称',
'MATNR' '物料编码',
'MAKTX' '物料描述',
'KDMAT' '客户物料',
'POSTX' '客户物料描述',
'KWMENG' '数量',
'VRKME' '单位',
'WERKS' '工厂',
'NETPR' '净价',
'NETWR' '净值',
'WAERK' '货币',
'VBELN_DN' 'DN单号',
'POSNR_DN' 'DN项目',
'LGORT_DN' '库位',
'LFIMG_DN' '交货单数量',
'MENGE_GZ' '交货过账数量',
'BUDAT_MKPF' '交货过账日期',
'FKIMG_VF' 'DN开票数量合计',
'NETWR_VF' 'DN开票净值合计',
'ZHSJE_VF' 'DN含税金额合计'.
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.
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 = 'VBELN_DN' .
CHECK IS_SELFIELD-TABINDEX > 0.
CLEAR GT_ALV .
READ TABLE GT_ALV INDEX IS_SELFIELD-TABINDEX.
IF GT_ALV-VBELN_DN IS NOT INITIAL.
SET PARAMETER ID 'VL' FIELD GT_ALV-VBELN_DN.
CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
ENDIF.
ELSEIF IS_SELFIELD-FIELDNAME = 'VBELN_SO' .
CHECK IS_SELFIELD-TABINDEX > 0.
CLEAR GT_ALV .
READ TABLE GT_ALV INDEX IS_SELFIELD-TABINDEX.
IF GT_ALV-VBELN_SO IS NOT INITIAL.
SET PARAMETER ID 'AUN' FIELD GT_ALV-VBELN_SO.
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
ENDIF.
ELSEIF IS_SELFIELD-FIELDNAME = 'POSNR_DN' .
CHECK IS_SELFIELD-TABINDEX > 0.
CLEAR GT_ALV .
READ TABLE GT_ALV INDEX IS_SELFIELD-TABINDEX.
IF GT_ALV-VBELN_DN IS NOT INITIAL
AND GT_ALV-POSNR_DN IS NOT INITIAL
.
CLEAR GT_LIPS[].
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_LIPS[] FROM LIPS
WHERE VBELN = GT_ALV-VBELN_DN
AND UECHA = GT_ALV-POSNR_DN
.
IF GT_LIPS[] IS NOT INITIAL.
CALL SCREEN 0100 STARTING AT 3 3.
ENDIF.
ENDIF.
ELSE .
MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
ENDIF .
ENDCASE.
CALL METHOD REF->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
ENDFORM.
START-OF-SELECTION.
PERFORM FOM_GETDATA.
PERFORM FRM_DISPLAY.
*&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_LIPS LINES TBC_01-LINES.
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.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PF_0100'.
SET TITLEBAR 'TITLE_0100'.
ENDMODULE.
SD-SO交货信息报表(开发笔记)
最新推荐文章于 2023-05-24 11:00:30 发布