************************************************************************
**----------------------------------------------------------------------
* Associated program: No programs are associated
*-----------------------------------------------------------------------
* Restriction: No restriction
************************************************************************
*----------------------------------------------------------------------*
* TABLE DECLARATION
*----------------------------------------------------------------------*
TABLES:BKPF,
MARA,
VBRK,
MKPF,
MSEG,
MMIM_REP_CUST,
MBEW,
CKMLCR,
EBEW,
VBRP,
EKKN.
*&---------------------------------------------------------------------*
* STRUCTURE DECLARATION
*&---------------------------------------------------------------------*
TYPES : BEGIN OF T_TAB,
PRDHA LIKE MARA-PRDHA, "产品层次
WERKS LIKE VBRP-WERKS, "工厂
MONAT LIKE VBRK-POPER, "期间
MENGE LIKE VBRP-FKLMG, "数量
MATNR LIKE VBRP-MATNR, "物料
KUNNR LIKE VBRK-KUNAG, "客户
MEINS LIKE VBRP-MEINS, "单位
BUDAT LIKE VBRK-FKDAT, "发票日期
WAERS LIKE VBRK-WAERK, "本位币 default to CNY
VBELN LIKE VBRP-VBELN, "发票号
POSNR LIKE VBRP-POSNR, "行号
MAKTX LIKE VBRP-ARKTX, "物料描述
MAKTL LIKE VBRP-MATKL, "物料组
KURSK LIKE VBRP-KURSK, "决定价格的汇率
WAVWR LIKE VBRP-WAVWR, "标准成本
NETWR LIKE VBRP-NETWR, "出具发票项目的凭证货币净值
KZWI2 LIKE VBRP-KZWI2, "海运费和保险费
KZWI3 LIKE VBRP-KZWI3, "海运费和保险费
WAERK2 LIKE VBRK-WAERK,"凭证币别
NETWR2 LIKE VBRP-NETWR, "本位币值
PVPRS LIKE CKMLCR-PVPRS, "单位实际成本
WAVWR2 LIKE VBRP-WAVWR, "实际成本值
KURRF_DAT LIKE VBRK-KURRF_DAT,"换算日期
VGBEL TYPE VBRP-VGBEL, "参考单据的单据编号
VGPOS TYPE VBRP-VGPOS, "参考项目的项目号
AUBEL LIKE VBRP-AUBEL,"销售单
AUPOS LIKE VBRP-AUPOS,"销售单行项目
AUTYP LIKE VBRP-AUTYP, "单据类型
SONO LIKE EKKN-VBELN, "销售单
SOIT LIKE EKKN-VBELP, "行项目
AUTYPT(50) TYPE C, "单据类型
SHKZG(1) TYPE C,
HKONT TYPE BSEG-HKONT, "总账科目
BUKRS TYPE VBRK-BUKRS, "公司代码
PAOBJNR TYPE VBRP-PAOBJNR, "获利字段
END OF T_TAB.
TYPES : BEGIN OF T_VALUE,
MONAT LIKE BKPF-MONAT, "期间
KUNNR LIKE KNA1-KUNNR, "客户编号
MATNR LIKE MARA-MATNR, "物料号
PRDHA LIKE MARA-PRDHA, "产品层次
VTEXT LIKE T179T-VTEXT, "层次名称
WERKS LIKE MARC-WERKS, "评估范围
MAKTX LIKE MAKT-MAKTX, "物料描述.
MATKL LIKE VBRP-MATKL, "物料组
WAERS LIKE CKMLCR-WAERS, "币别
MEINS LIKE MARA-MEINS, "主档单位
MENGE LIKE MSEG-MENGE, "销售数量
MENGE2 LIKE MSEG-MENGE, "总重量
NETWR2 LIKE VBRP-NETWR, "总价值
KSTBW LIKE KONP-KSTBW, "平均售价
STPRS LIKE MBEW-STPRS, "单位标准成本
PVPRS LIKE CKMLCR-PVPRS, "单位实际成本
PEINH LIKE CKMLCR-PEINH, "价格单位
DWMIS LIKE CKMLCR-PVPRS, "单位实际毛利
ZSJCB LIKE CKMLCR-PVPRS, "总实际成本
ZMLIS LIKE CKMLCR-PVPRS, "总毛利
MLILU LIKE CKMLCR-PVPRS, "毛利率(数)
MLILU_C TYPE C LENGTH 29, "毛利率(数)
NAME1 LIKE KNA1-NAME1, "客户名称
WAVWR LIKE VBRP-WAVWR, "标准成本
WAVWR2 LIKE VBRP-WAVWR, "实际成本值
WAVWR3 LIKE VBRP-WAVWR, "标准和实际的差异
VBELN LIKE VBRP-VBELN, "发票
POSNR LIKE VBRP-POSNR, "行
AUBEL LIKE VBRP-AUBEL, "销售单
AUPOS LIKE VBRP-AUPOS, "销售单行项目
AUTYP LIKE VBRP-AUTYP, "单据类型
AUTYPT(50) TYPE C, "类型名称
MLILU1 LIKE CKMLCR-PVPRS, "单位差异(数)
HKONT TYPE BSEG-HKONT, "总账科目
END OF T_VALUE.
DATA: BEGIN OF L_OUT,
KALNR TYPE CKMLHD-KALNR,
MLAST TYPE CKMLHD-MLAST,
MATNR TYPE CKMLHD-MATNR,
BWKEY TYPE CKMLHD-BWKEY,
BWTAR TYPE CKMLHD-BWTAR,
SOBKZ TYPE CKMLHD-SOBKZ,
VBELN TYPE CKMLHD-VBELN,
POSNR TYPE CKMLHD-POSNR,
PSPNR TYPE CKMLHD-PSPNR,
BDATJ TYPE CKMLPP-BDATJ,
POPER TYPE CKMLPP-POPER,
STATUS TYPE CKMLPP-STATUS,
STATUS_TEXT TYPE DD07V-DDTEXT,
CURTP TYPE CKMLCR-CURTP,
BKLAS TYPE MBEW-BKLAS,
MTART TYPE MARA-MTART,
MATKL TYPE MARA-MATKL,
SPART TYPE MARA-SPART,
KTEXT TYPE MAKT-MAKTX,
VPRSV TYPE CKMLCR-VPRSV,
LBKUM TYPE CKMLPP-LBKUM,
MEINS TYPE MARA-MEINS,
SALK3 TYPE CKMLCR-SALK3,
SALKV TYPE CKMLCR-SALKV,
EB_DIF TYPE CKI_DOC_ML-EB_DIF,
STPRS TYPE CKMLCR-STPRS,
PVPRS TYPE CKMLCR-PVPRS,
PRABW_PRZ TYPE CK_PRABW_PRZ,
PEINH TYPE CKMLCR-PEINH,
WAERS TYPE WAERS,
END OF L_OUT.
TYPES:BEGIN OF T_BSEG,
BUKRS TYPE BUKRS, "公司代码
BELNR TYPE BELNR_D, "会计凭证
GJAHR TYPE GJAHR, "会计年度
BUZEI TYPE BUZEI, "会计凭证行项目
KOART TYPE KOART, "科目类型
SHKZG TYPE SHKZG, "借方/贷方标识
PSWBT TYPE PSWBT, "总帐中更新的金额
PSWSL TYPE PSWSL, "更新总分类帐交易数字货币
DMBTR TYPE DMBTR, "按本位币计的金额
HKONT TYPE HKONT, "总分类帐帐目
END OF T_BSEG.
TYPES:BEGIN OF T_GLPCA,
DRCRK TYPE SHKZG, "借方/贷方标识
TSL TYPE VTCUR_PCA,"业务货币计价的金额
END OF T_GLPCA.
*&---------------------------------------------------------------------*
* INTERNAL TABLE DECLARATION
*&---------------------------------------------------------------------*
DATA :
I_GLPCA TYPE STANDARD TABLE OF T_GLPCA,
I_BSEG TYPE STANDARD TABLE OF T_BSEG,
I_TAB TYPE STANDARD TABLE OF T_TAB,
I_VALUE TYPE STANDARD TABLE OF T_VALUE.
RANGES S_BUDAT FOR MKPF-BUDAT.
*&---------------------------------------------------------------------*
* WORK AREA DECLARATION
*&---------------------------------------------------------------------*
DATA :
WA_GLPCA TYPE T_GLPCA,
WA_TAB TYPE T_TAB,
WA_VALUE TYPE T_VALUE.
*&---------------------------------------------------------------------*
* VARIANT DECLARATION
*&---------------------------------------------------------------------*
DATA: L_ALV_FILED TYPE SLIS_FIELDCAT_ALV.
DATA: L_ALV_FILEDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: GT_SORT TYPE SLIS_T_SORTINFO_ALV.
DATA: GT_COLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE.
DATA: I_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: I_GRID_SETTINGS TYPE LVC_S_GLAY.
DATA: PGM LIKE SY-REPID.
DATA: COL_POS TYPE I VALUE 0.
DATA: I_EVENTS TYPE SLIS_T_EVENT.
DATA: WA_EVENTS TYPE SLIS_ALV_EVENT.
*&---------------------------------------------------------------------*
* Constant DECLARATION
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* SELECTION SCREEN DECLARATION
*&---------------------------------------------------------------------*
* Selection screen
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETER : P_R1 RADIOBUTTON GROUP G1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(10) TEXT-007 FOR FIELD P_R1 .
SELECTION-SCREEN POSITION 30.
PARAMETER : P_R2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 35(10) TEXT-008 FOR FIELD P_R2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_MJAHR LIKE MKPF-MJAHR OBLIGATORY.
SELECT-OPTIONS:S_MONAT FOR BKPF-MONAT OBLIGATORY.
SELECT-OPTIONS S_MATNR FOR MSEG-MATNR MEMORY ID MAT
MATCHCODE OBJECT MAT1.
SELECT-OPTIONS:S_BUKRS FOR VBRK-BUKRS MEMORY ID BUK DEFAULT '1200',
S_WERKS FOR MSEG-WERKS MEMORY ID WRK DEFAULT '1201'.
*转到会计的状态
SELECT-OPTIONS S_RFBSK FOR VBRK-RFBSK DEFAULT 'C'.
*产品层次
SELECT-OPTIONS S_PRDHA FOR MARA-PRDHA.
*SELECT-OPTIONS S_LGORT FOR MSEG-LGORT MEMORY ID LAG NO-DISPLAY.
*SELECT-OPTIONS S_CHARG FOR MSEG-CHARG MEMORY ID CHA NO-DISPLAY.
*SELECT-OPTIONS S_LIFNR FOR MSEG-LIFNR MEMORY ID LIF NO-DISPLAY.
SELECT-OPTIONS S_KUNNR FOR MSEG-KUNNR MEMORY ID KUN.
*SELECT-OPTIONS S_BWART FOR MSEG-BWART MEMORY ID BWA NO-DISPLAY.
*SELECT-OPTIONS S_SOBKZ FOR MSEG-SOBKZ NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK B1.
*SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
*SELECT-OPTIONS S_BUDAT FOR MKPF-BUDAT NO-DISPLAY.
*SELECT-OPTIONS S_USNAM FOR MKPF-USNAM MEMORY ID USR NO-DISPLAY.
*SELECT-OPTIONS S_VGART FOR MKPF-VGART NO-DISPLAY.
*SELECT-OPTIONS S_XBLNR FOR MKPF-XBLNR NO-DISPLAY.
*SELECTION-SCREEN END OF BLOCK B2.
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
*set initial values
P_MJAHR = '2011'.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
* SET PARAMETER ID 'MAT' FIELD S_MATNR-LOW.
SET PARAMETER ID 'WRK' FIELD S_WERKS-LOW.
SET PARAMETER ID 'KUN' FIELD S_KUNNR-LOW.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*取数
PERFORM FRM_GET_DATA.
IF I_TAB IS INITIAL.
MESSAGE TEXT-006 TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
*&---------------------------------------------------------------------*
* END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*处理
IF I_TAB IS NOT INITIAL.
PERFORM FRM_PROCESS_DATA.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
*取月第一天
DATA:L_DATE_START LIKE SY-DATUM.
*取月最后一天
DATA:L_DATE_END LIKE SY-DATUM.
*取月份
DATA:T_MONTH TYPE C LENGTH 10.
DATA:T_LEN TYPE I.
DATA:T_STR TYPE I.
REFRESH:I_TAB.
REFRESH:S_BUDAT.
*取过账年月
IF S_MONAT-LOW IS NOT INITIAL AND S_MONAT-HIGH IS NOT INITIAL.
CONCATENATE '00000' S_MONAT-HIGH INTO T_MONTH.
T_LEN = STRLEN( T_MONTH ).
T_STR = T_LEN - 2.
T_MONTH = T_MONTH+T_STR(2).
CONCATENATE P_MJAHR S_MONAT-HIGH '01' INTO L_DATE_START.
S_BUDAT-SIGN = 'I'.
S_BUDAT-OPTION = 'BT'.
CONCATENATE P_MJAHR S_MONAT-LOW '01' INTO S_BUDAT-LOW.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = L_DATE_START
IMPORTING
E_DATE = L_DATE_END.
S_BUDAT-HIGH = L_DATE_END.
APPEND S_BUDAT.
ELSE.
IF S_MONAT-LOW IS NOT INITIAL.
CONCATENATE '00000' S_MONAT-LOW INTO T_MONTH.
T_LEN = STRLEN( T_MONTH ).
T_STR = T_LEN - 2.
T_MONTH = T_MONTH+T_STR(2).
CONCATENATE P_MJAHR S_MONAT-LOW '01' INTO L_DATE_START.
S_BUDAT-SIGN = 'I'.
S_BUDAT-OPTION = 'BT'.
CONCATENATE P_MJAHR S_MONAT-LOW '01' INTO S_BUDAT-LOW.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = L_DATE_START
IMPORTING
E_DATE = L_DATE_END.
S_BUDAT-HIGH = L_DATE_END.
APPEND S_BUDAT.
ENDIF.
IF S_MONAT-HIGH IS NOT INITIAL.
CONCATENATE '00000' S_MONAT-HIGH INTO T_MONTH.
T_LEN = STRLEN( T_MONTH ).
T_STR = T_LEN - 2.
T_MONTH = T_MONTH+T_STR(2).
CONCATENATE P_MJAHR S_MONAT-HIGH '01' INTO L_DATE_START.
S_BUDAT-SIGN = 'I'.
S_BUDAT-OPTION = 'BT'.
CONCATENATE P_MJAHR S_MONAT-HIGH '01' INTO S_BUDAT-HIGH.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = L_DATE_START
IMPORTING
E_DATE = L_DATE_END.
S_BUDAT-HIGH = L_DATE_END.
APPEND S_BUDAT.
ENDIF.
ENDIF.
* - show the current activity and the progress
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = TEXT-003. "Reading MM documents
SELECT
VBRP~WERKS AS WERKS
VBRK~POPER AS MONAT
VBRP~FKLMG AS MENGE
VBRP~MATNR AS MATNR
VBRK~KUNRG AS KUNNR
VBRP~MEINS AS MEINS
VBRK~FKDAT AS BUDAT
VBRK~WAERK AS WAERS
VBRP~VBELN
VBRP~POSNR
VBRP~ARKTX AS MAKTX
VBRP~MATKL
VBRP~KURSK
VBRP~NETWR
VBRK~WAERK AS WAERK2
VBRP~WERKS
VBRK~KURRF_DAT
VBRP~WAVWR "标准成本
MARA~PRDHA
VBRP~AUBEL
VBRP~AUPOS
VBRP~AUTYP
VBRP~KZWI2
VBRP~KZWI3
VBRP~VGBEL
VBRP~VGPOS
VBRK~BUKRS
VBRP~PAOBJNR "获利字段
INTO CORRESPONDING FIELDS OF TABLE I_TAB
*出具发票:抬头数据
FROM VBRK
*出具发票:项数据
INNER JOIN VBRP ON VBRK~VBELN = VBRP~VBELN
*常规物料数据
INNER JOIN MARA ON MARA~MATNR = VBRP~MATNR
WHERE
*物料
VBRP~MATNR IN S_MATNR AND
*工厂
VBRP~WERKS IN S_WERKS AND
*客户
VBRK~KUNRG IN S_KUNNR AND
*出具发票凭证被取消
VBRK~FKSTO = '' AND
*已取消的出具发票凭证编号
VBRK~SFAKN = '' AND
*转到会计的状态
VBRK~RFBSK IN S_RFBSK AND " C 过账凭证已经建立
*产品层次
MARA~PRDHA IN S_PRDHA AND
*出具发票索引和打印的出具发票日期
VBRK~FKDAT IN S_BUDAT AND
* VBRK~FKDAT >= S_BUDAT-LOW AND VBRK~FKDAT <= S_BUDAT-HIGH AND
*公司代码
VBRK~BUKRS IN S_BUKRS
*退货项目
* AND VBRP~SHKZG <> 'X'
.
* DELETE I_TAB WHERE AUTYP = 'V'.
*验证 : FAGLFLEXA
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PROCESS_DATA .
DATA : LV_BELNR TYPE BELNR_D.
* show the current activity and the progress
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = TEXT-005. "Preparing list output
*----------------------------------------删除发货数量为0的记录
* DELETE I_TAB WHERE MENGE <= 0.
"在显示报表前计算所有数据(实际成本提取,销售数量/金额/汇率/标准成本 从发票中提取)
LOOP AT I_TAB INTO WA_TAB.
CLEAR:MBEW.
CLEAR:CKMLCR.
CLEAR:EBEW.
*期间
WA_TAB-MONAT = WA_TAB-BUDAT+4(2).
*评估币别
WA_TAB-WAERS = 'CNY'.
* SELECT SINGLE BELNR
* INTO LV_BELNR
* FROM BKPF
* WHERE GJAHR = P_MJAHR
* AND BUKRS = WA_TAB-BUKRS
* AND AWKEY = WA_TAB-VBELN."发票号
* SELECT *
* INTO CORRESPONDING FIELDS OF TABLE I_BSEG
* FROM BSEG "会计核算凭证段
* WHERE GJAHR = P_MJAHR
* AND BUKRS = WA_TAB-BUKRS
* AND BELNR = LV_BELNR
* AND WERKS = WA_TAB-WERKS
* AND MATNR = WA_TAB-MATNR
* AND PAOBJNR = WA_TAB-PAOBJNR
** AND KOART = 'S' "总账科目
* .
* SELECT SINGLE PSWBT
* INTO WA_TAB-NETWR2
* FROM BSEG "会计核算凭证段
* WHERE GJAHR = P_MJAHR
* AND BUKRS = WA_TAB-BUKRS
* AND BELNR = LV_BELNR
* AND WERKS = WA_TAB-WERKS
* AND MATNR = WA_TAB-MATNR
* AND PAOBJNR = WA_TAB-PAOBJNR
* AND KOART = 'S' "总账科目
* AND HKONT = '6001100001'
* .
*扣除海运费跟保险费之后的销售收入
REFRESH I_GLPCA.
SELECT TSL DRCRK
INTO CORRESPONDING FIELDS OF TABLE I_GLPCA
FROM GLPCA "成本控制-利润中心会计:实际行项目
WHERE REFDOCNR = WA_TAB-VBELN
AND REFRYEAR = P_MJAHR
AND REFDOCLN = WA_TAB-POSNR
AND RACCT = '6001100001'
AND MATNR = WA_TAB-MATNR
AND WERKS = WA_TAB-WERKS
.
CLEAR WA_TAB-NETWR2.
LOOP AT I_GLPCA INTO WA_GLPCA.
* IF WA_GLPCA-DRCRK = 'H'.
* WA_TAB-NETWR2 = WA_TAB-NETWR2 - WA_GLPCA-TSL.
* ELSE.
* WA_TAB-NETWR2 = WA_TAB-NETWR2 + WA_GLPCA-TSL.
* ENDIF.
WA_TAB-NETWR2 = WA_TAB-NETWR2 + WA_GLPCA-TSL.
ENDLOOP.
WA_TAB-NETWR2 = - WA_TAB-NETWR2.
*销售收入 货币净值 - 海运费跟保险费
* WA_TAB-NETWR = WA_TAB-NETWR - WA_TAB-KZWI2 - WA_TAB-KZWI3.
* WA_TAB-NETWR2 = WA_TAB-NETWR.
*取单据类型的名称
PERFORM FRM_SET_TEXT.
"按订单库存取实际成本
IF WA_TAB-AUTYP = 'C'.
SELECT SINGLE *
FROM EBEW "销售订单库存评估
WHERE MATNR = WA_TAB-MATNR AND
BWKEY = WA_TAB-WERKS AND
VBELN = WA_TAB-AUBEL AND
POSNR = WA_TAB-AUPOS.
SELECT SINGLE *
FROM CKMLCR "物料分类帐:期间汇总记录值
WHERE KALNR = EBEW-KALN1 AND
BDATJ = P_MJAHR AND
POPER = WA_TAB-MONAT ."AND VPRSV = 'V'.
WA_TAB-WAVWR2 = CKMLCR-PVPRS / CKMLCR-PEINH * WA_TAB-MENGE ."实际成本值
"周期单位价格 * 价格单位
WA_TAB-PVPRS = CKMLCR-PVPRS / CKMLCR-PEINH ."实际成本价格
ENDIF.
IF WA_TAB-PVPRS <= 0 OR WA_TAB-WAVWR2 <= 0 OR WA_TAB-AUTYP <> 'C'.
"根据PO号取SO,订单库存取实际成本
IF WA_TAB-AUTYP = 'V'.
CLEAR:EKKN.
SELECT SINGLE *
FROM EKKN "采购凭证中的帐户设置
WHERE EBELN = WA_TAB-AUBEL AND
EBELP = WA_TAB-AUPOS.
IF EKKN IS NOT INITIAL.
"销售单
WA_TAB-SONO = EKKN-VBELN.
"销售行
WA_TAB-SOIT = EKKN-VBELP.
SELECT SINGLE *
FROM EBEW "销售订单库存评估
WHERE MATNR = WA_TAB-MATNR AND
BWKEY = WA_TAB-WERKS AND
VBELN = WA_TAB-SONO AND
POSNR = WA_TAB-SOIT.
SELECT SINGLE *
FROM CKMLCR "物料分类帐:期间汇总记录值
WHERE KALNR = EBEW-KALN1 AND
BDATJ = P_MJAHR AND
POPER = WA_TAB-MONAT ."AND VPRSV = 'V'.
WA_TAB-WAVWR2 = CKMLCR-PVPRS / CKMLCR-PEINH * WA_TAB-MENGE ."实际成本值
WA_TAB-PVPRS = CKMLCR-PVPRS / CKMLCR-PEINH ."实际成本价格
ENDIF.
* ENDIF.
ELSE.
SELECT SINGLE *
FROM MBEW "物料评估
WHERE MATNR = WA_TAB-MATNR AND
BWKEY = WA_TAB-WERKS .
SELECT SINGLE *
FROM CKMLCR "物料分类帐:期间汇总记录值
WHERE KALNR = MBEW-KALN1 AND "成本估算号 - 产品成本核算
BDATJ = P_MJAHR AND
POPER = WA_TAB-MONAT ."AND VPRSV = 'V'.
WA_TAB-WAVWR2 = CKMLCR-PVPRS / CKMLCR-PEINH * WA_TAB-MENGE ."实际成本值
WA_TAB-PVPRS = CKMLCR-PVPRS / CKMLCR-PEINH ."实际单位成本价格
ENDIF.
ENDIF.
IF WA_TAB-WAERK2 <> 'CNY'.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
DATE = WA_TAB-KURRF_DAT "换算日期
FOREIGN_CURRENCY = WA_TAB-WAERK2 "凭证币别
FOREIGN_AMOUNT = WA_TAB-NETWR2 "出具发票项目的凭证货币净值
LOCAL_CURRENCY = 'CNY'
IMPORTING
LOCAL_AMOUNT = WA_TAB-NETWR2 "本位币值
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
DATE = WA_TAB-KURRF_DAT
FOREIGN_CURRENCY = WA_TAB-WAERK2
FOREIGN_AMOUNT = WA_TAB-WAVWR
LOCAL_CURRENCY = 'CNY'
IMPORTING
LOCAL_AMOUNT = WA_TAB-WAVWR "标准成本
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
ENDIF.
MODIFY I_TAB FROM WA_TAB.
ENDLOOP.
*-----------------------------------------------------------------
DELETE I_TAB WHERE KUNNR = '' OR PRDHA = '' OR MATNR = ''.
SORT I_TAB BY MONAT WERKS PRDHA KUNNR MATNR.
LOOP AT I_TAB INTO WA_TAB .
CLEAR:WA_VALUE.
WA_VALUE-MONAT = WA_TAB-MONAT.
WA_VALUE-PRDHA = WA_TAB-PRDHA.
WA_VALUE-KUNNR = WA_TAB-KUNNR.
WA_VALUE-MATNR = WA_TAB-MATNR.
WA_VALUE-WERKS = WA_TAB-WERKS.
WA_VALUE-MEINS = WA_TAB-MEINS.
WA_VALUE-WAERS = WA_TAB-WAERS.
WA_VALUE-VBELN = WA_TAB-VBELN.
WA_VALUE-POSNR = WA_TAB-POSNR.
COLLECT WA_VALUE INTO I_VALUE.
ENDLOOP.
LOOP AT I_VALUE INTO WA_VALUE.
"发票号 发票行
LOOP AT I_TAB INTO WA_TAB WHERE VBELN = WA_VALUE-VBELN
AND POSNR = WA_VALUE-POSNR.
WA_VALUE-WAVWR2 = WA_VALUE-WAVWR2 + WA_TAB-WAVWR2. "实际成本
WA_VALUE-WAVWR = WA_VALUE-WAVWR + WA_TAB-WAVWR. "标准成本
WA_VALUE-MENGE = WA_VALUE-MENGE + WA_TAB-MENGE. "库存单位的数量
WA_VALUE-NETWR2 = WA_VALUE-NETWR2 + WA_TAB-NETWR2. "本位币净值
WA_VALUE-AUBEL = WA_TAB-AUBEL. "销售单
WA_VALUE-AUPOS = WA_TAB-AUPOS. "销售行
WA_VALUE-AUTYP = WA_TAB-AUTYP. "单据类型
WA_VALUE-AUTYPT = WA_TAB-AUTYPT. "类型名称
ENDLOOP.
*价格单位
WA_VALUE-PEINH = 100.
*总实际成本
WA_VALUE-ZSJCB = WA_VALUE-WAVWR2.
"销售单价 = 销售开票价值 / 销售开票数量
IF WA_VALUE-MENGE > 0.
WA_VALUE-KSTBW = WA_VALUE-NETWR2 / WA_VALUE-MENGE * 100. "单位销售价格 = 总净值 / 总数量
WA_VALUE-STPRS = WA_VALUE-WAVWR / WA_VALUE-MENGE * 100. "标准成本每100
WA_VALUE-PVPRS = WA_VALUE-WAVWR2 / WA_VALUE-MENGE * 100. "实际成本每100
ENDIF.
DATA:LV_SJ LIKE CKMLCR-PVPRS.
LV_SJ = WA_VALUE-PVPRS / WA_VALUE-PEINH. "单位实际成本
WA_VALUE-DWMIS = WA_VALUE-KSTBW / 100 - LV_SJ. "单位毛利 = 销售均价 - 单位实际成本
*总毛利 = 收入 - 实际成本
WA_VALUE-ZMLIS = WA_VALUE-NETWR2 - WA_VALUE-WAVWR2.
*毛利率 = 毛利 / 实际成本
IF WA_VALUE-ZMLIS <> 0.
IF WA_VALUE-NETWR2 > 0 .
WA_VALUE-MLILU = WA_VALUE-ZMLIS / WA_VALUE-NETWR2 * 100.
* ELSE.
* WA_VALUE-MLILU = 0.
ENDIF.
WA_VALUE-MLILU_C = WA_VALUE-MLILU.
CONDENSE WA_VALUE-MLILU_C.
CONCATENATE WA_VALUE-MLILU_C ' %' INTO WA_VALUE-MLILU_C SEPARATED BY ' '.
ENDIF.
*产品层次描述
SELECT SINGLE VTEXT
INTO WA_VALUE-VTEXT
FROM T179T
WHERE PRODH = WA_VALUE-PRDHA AND
SPRAS = '1'.
*物料描述
SELECT SINGLE MAKTX
INTO WA_VALUE-MAKTX
FROM MAKT
WHERE MATNR = WA_VALUE-MATNR.
*客户名称
SELECT SINGLE NAME1
INTO WA_VALUE-NAME1
FROM KNA1
WHERE KUNNR = WA_VALUE-KUNNR.
*标准成本 - 实际成本
WA_VALUE-WAVWR3 = WA_VALUE-WAVWR - WA_VALUE-WAVWR2. "计算差异
*单位标准成本 - 单位实际成本
WA_VALUE-MLILU1 = WA_VALUE-STPRS - WA_VALUE-PVPRS. "单位差异
*总账科目
WA_VALUE-HKONT = '6001100001'.
MODIFY I_VALUE FROM WA_VALUE.
ENDLOOP.
*-------------------------------------
CLEAR:GT_SORT.
REFRESH:GT_SORT.
CLEAR:L_ALV_FILEDCAT.
REFRESH:L_ALV_FILEDCAT.
IF P_R1 = 'X'.
PERFORM INITIAL_FIELDS USING 5 'MONAT' '期间' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'WERKS' '评估范围' '' '' ''.
PERFORM INITIAL_FIELDS USING 15 'VTEXT' '产品层次描述' '' '' ''.
PERFORM INITIAL_FIELDS USING 22 'MAKTX' '物料描述' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'WAERS' '评估币别' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'MEINS' '物料单位' '' '' ''.
PERFORM INITIAL_FIELDS USING 13 'MENGE' '实际发货数量' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'NETWR2' '销售收入' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR' '标准成本' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR3' '差异' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR2' '实际成本' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'ZMLIS' '销售毛利' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 10 'MLILU_C' '毛利率' '' '' ''.
PERFORM INITIAL_FIELDS USING 16 'KSTBW' '平均售价(每100个)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'STPRS' '单位标准成本(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'MLILU1' '单位差异(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'PVPRS' '单位实际成本(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'DWMIS' '单位毛利' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'PRDHA' '产品层次' '' '' ''.
PERFORM INITIAL_FIELDS USING 6 'KUNNR' '客户编号' '' '' ''.
PERFORM INITIAL_FIELDS USING 32 'NAME1' '客户名称' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'MATNR' '物料号码' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'AUBEL' '销售单' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'AUPOS' '销售行' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'AUTYP' '单据类型' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'AUTYPT' '单据类型名称' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'VBELN' '发票号' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'POSNR' '发票行' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'HKONT' '总账科目' '' '' ''.
ELSEIF P_R2 = 'X'.
PERFORM INITIAL_FIELDS USING 5 'MONAT' '期间' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'WERKS' '评估范围' '' '' ''.
PERFORM INITIAL_FIELDS USING 32 'NAME1' '客户名称' '' '' ''.
PERFORM INITIAL_FIELDS USING 15 'VTEXT' '产品层次描述' '' '' ''.
PERFORM INITIAL_FIELDS USING 22 'MAKTX' '物料描述' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'WAERS' '评估币别' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'MEINS' '物料单位' '' '' ''.
PERFORM INITIAL_FIELDS USING 13 'MENGE' '实际发货数量' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'NETWR2' '销售收入' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR' '标准成本' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR3' '差异' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR2' '实际成本' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'ZMLIS' '销售毛利' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 10 'MLILU_C' '毛利率' '' '' ''.
PERFORM INITIAL_FIELDS USING 16 'KSTBW' '平均售价(每100个)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'STPRS' '单位标准成本(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'MLILU1' '单位差异(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'PVPRS' '单位实际成本(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'DWMIS' '单位毛利' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'PRDHA' '产品层次' '' '' ''.
PERFORM INITIAL_FIELDS USING 6 'KUNNR' '客户编号' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'MATNR' '物料号码' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'AUBEL' '销售单' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'AUPOS' '销售行' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'AUTYP' '单据类型' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'AUTYPT' '单据类型名称' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'VBELN' '发票号' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'POSNR' '发票行' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'HKONT' '总账科目' '' '' ''.
ENDIF.
LOOP AT L_ALV_FILEDCAT INTO L_ALV_FILED.
IF L_ALV_FILED-FIELDNAME = 'MEINS'.
L_ALV_FILED-REF_FIELDNAME = 'MEINS'.
L_ALV_FILED-REF_TABNAME = 'VBRP'.
ENDIF.
IF L_ALV_FILED-FIELDNAME = 'MENGE'.
L_ALV_FILED-QFIELDNAME = 'MEINS'.
ENDIF.
MODIFY L_ALV_FILEDCAT FROM L_ALV_FILED.
ENDLOOP.
*Hot spot
FIELD-SYMBOLS:<FS1> LIKE LINE OF L_ALV_FILEDCAT.
LOOP AT L_ALV_FILEDCAT ASSIGNING <FS1>.
IF <FS1>-FIELDNAME = 'VBELN'.
<FS1>-HOTSPOT = 'X'.
EXIT.
ENDIF.
ENDLOOP.
FIELD-SYMBOLS:<FS2> LIKE LINE OF L_ALV_FILEDCAT.
LOOP AT L_ALV_FILEDCAT ASSIGNING <FS2>.
IF <FS2>-FIELDNAME = 'MATNR'.
<FS2>-HOTSPOT = 'X'.
EXIT.
ENDIF.
ENDLOOP.
PGM = SY-REPID.
*Layout setting
CLEAR:I_LAYOUT.
I_LAYOUT-GROUP_CHANGE_EDIT = 'X'.
IF P_R1 = 'X'.
I_LAYOUT-WINDOW_TITLEBAR = '销售毛利报表 -- 按产品层次'.
ELSEIF P_R2 = 'X'.
I_LAYOUT-WINDOW_TITLEBAR = '销售毛利报表 -- 按客户'.
ENDIF.
I_LAYOUT-DETAIL_POPUP = 'X'. "双击事件
I_LAYOUT-GET_SELINFOS = 'X'. "明细显示
* I_LAYOUT-ZEBRA = 'X'. "斑马线
* I_LAYOUT-NO_TOTALLINE = 'X'. "没有最后的总计行
* I_LAYOUT-NO_SUBCHOICE = 'X'. "没可选择的子合计
* I_LAYOUT-NO_SUBTOTALS = 'X'.
* Perform to populate ALV event
PERFORM SUB_GET_EVENT.
*Sort condition setting
IF P_R1 = 'X'.
SORT I_VALUE BY MONAT WERKS PRDHA KUNNR MATNR AUBEL AUPOS VBELN POSNR.
ELSEIF P_R2 = 'X'.
SORT I_VALUE BY MONAT WERKS KUNNR PRDHA MATNR AUBEL AUPOS VBELN POSNR.
ENDIF.
*分类汇总
PERFORM ALV_DATA_GROUP .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_CALLBACK_PF_STATUS_SET = 'ALV_USER_TOOLBAR'
IT_FIELDCAT = L_ALV_FILEDCAT
IT_SORT = GT_SORT[]
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = I_LAYOUT
* i_callback_top_of_page = 'USER_TOP_PAGE'
I_CALLBACK_PROGRAM = PGM
IT_EVENTS = I_EVENTS
I_GRID_TITLE = '销售毛利'
I_GRID_SETTINGS = I_GRID_SETTINGS
I_SAVE = 'X'
TABLES
T_OUTTAB = I_VALUE.
ENDFORM. " FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form INITIAL_FIELDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LENTH text
* -->FNAME text
* -->TEXT text
* -->DO_SUM text
* -->COLUMN_COLOR text
* -->IS_ICON text
*----------------------------------------------------------------------*
FORM INITIAL_FIELDS USING LENTH TYPE I
FNAME TYPE C
TEXT TYPE C
DO_SUM TYPE C
COLUMN_COLOR TYPE C
IS_ICON TYPE C.
L_ALV_FILED-COL_POS = COL_POS + 1.
L_ALV_FILED-OUTPUTLEN = LENTH.
L_ALV_FILED-FIELDNAME = FNAME.
L_ALV_FILED-SELTEXT_M = TEXT.
L_ALV_FILED-DO_SUM = DO_SUM.
L_ALV_FILED-EMPHASIZE = COLUMN_COLOR.
L_ALV_FILED-ICON = IS_ICON.
L_ALV_FILED-NO_ZERO = 'X'.
APPEND L_ALV_FILED TO L_ALV_FILEDCAT.
ENDFORM. "initial_fields
*&---------------------------------------------------------------------*
*& Form FRM_SET_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_SET_TEXT.
*Domain : VBTYP
IF WA_TAB-AUTYP = 'A'. WA_TAB-AUTYPT = '询价'. ENDIF.
IF WA_TAB-AUTYP = 'B'. WA_TAB-AUTYPT = '报价'. ENDIF.
IF WA_TAB-AUTYP = 'C'. WA_TAB-AUTYPT = '订单'. ENDIF.
IF WA_TAB-AUTYP = 'D'. WA_TAB-AUTYPT = '项目建议'. ENDIF.
IF WA_TAB-AUTYP = 'E'. WA_TAB-AUTYPT = '计划协议'. ENDIF.
IF WA_TAB-AUTYP = 'F'. WA_TAB-AUTYPT = '带有外部服务代理的计划协议 '. ENDIF.
IF WA_TAB-AUTYP = 'G'. WA_TAB-AUTYPT = '合同'. ENDIF.
IF WA_TAB-AUTYP = 'H'. WA_TAB-AUTYPT = '退货 '. ENDIF.
IF WA_TAB-AUTYP = 'I'. WA_TAB-AUTYPT = '免费订单'. ENDIF.
IF WA_TAB-AUTYP = 'J'. WA_TAB-AUTYPT = '交货'. ENDIF.
IF WA_TAB-AUTYP = 'K'. WA_TAB-AUTYPT = '贷项凭单请求'. ENDIF.
IF WA_TAB-AUTYP = 'L'. WA_TAB-AUTYPT = '借项凭单请求'. ENDIF.
IF WA_TAB-AUTYP = 'M'. WA_TAB-AUTYPT = '发票'. ENDIF.
IF WA_TAB-AUTYP = 'N'. WA_TAB-AUTYPT = '取消发票'. ENDIF.
IF WA_TAB-AUTYP = 'O'. WA_TAB-AUTYPT = '贷项凭单'. ENDIF.
IF WA_TAB-AUTYP = 'P'. WA_TAB-AUTYPT = '借方备忘录 '. ENDIF.
IF WA_TAB-AUTYP = 'Q'. WA_TAB-AUTYPT = 'WMS 传输订单'. ENDIF.
IF WA_TAB-AUTYP = 'R'. WA_TAB-AUTYPT = '货物移动'. ENDIF.
IF WA_TAB-AUTYP = 'S'. WA_TAB-AUTYPT = '贷项凭单取消'. ENDIF.
IF WA_TAB-AUTYP = 'T'. WA_TAB-AUTYPT = '定单的退货 '. ENDIF.
IF WA_TAB-AUTYP = 'U'. WA_TAB-AUTYPT = '形式发票'. ENDIF.
IF WA_TAB-AUTYP = 'V'. WA_TAB-AUTYPT = '采购订单'. ENDIF.
IF WA_TAB-AUTYP = 'W'. WA_TAB-AUTYPT = '独立需求计划 '. ENDIF.
IF WA_TAB-AUTYP = 'X'. WA_TAB-AUTYPT = '处理单位'. ENDIF.
IF WA_TAB-AUTYP = '0'. WA_TAB-AUTYPT = '主要联系人 '. ENDIF.
IF WA_TAB-AUTYP = '1'. WA_TAB-AUTYPT = '销售活动(CAS)'. ENDIF.
IF WA_TAB-AUTYP = '2'. WA_TAB-AUTYPT = '外部交易'. ENDIF.
IF WA_TAB-AUTYP = '3'. WA_TAB-AUTYPT = '发票清单'. ENDIF.
IF WA_TAB-AUTYP = '4'. WA_TAB-AUTYPT = '贷项凭单清单'. ENDIF.
IF WA_TAB-AUTYP = '5'. WA_TAB-AUTYPT = '公司间发票 '. ENDIF.
IF WA_TAB-AUTYP = '6'. WA_TAB-AUTYPT = '公司间贷项凭单 '. ENDIF.
IF WA_TAB-AUTYP = '7'. WA_TAB-AUTYPT = '发货/运货通知'. ENDIF.
IF WA_TAB-AUTYP = '8'. WA_TAB-AUTYPT = '运输'. ENDIF.
IF WA_TAB-AUTYP = 'a'. WA_TAB-AUTYPT = '装运成本'. ENDIF.
IF WA_TAB-AUTYP = 'b'. WA_TAB-AUTYPT = 'CRM 机会'. ENDIF.
IF WA_TAB-AUTYP = 'c'. WA_TAB-AUTYPT = '未校验的交付'. ENDIF.
IF WA_TAB-AUTYP = 'd'. WA_TAB-AUTYPT = '贸易合同'. ENDIF.
IF WA_TAB-AUTYP = 'e'. WA_TAB-AUTYPT = '分配表 '. ENDIF.
IF WA_TAB-AUTYP = 'g'. WA_TAB-AUTYPT = '粗加工收据(只有 IS-零售) '. ENDIF.
IF WA_TAB-AUTYP = 'h'. WA_TAB-AUTYPT = '取消发货'. ENDIF.
IF WA_TAB-AUTYP = 'i'. WA_TAB-AUTYPT = '收货'. ENDIF.
IF WA_TAB-AUTYP = 'j'. WA_TAB-AUTYPT = 'JIT call'. ENDIF.
IF WA_TAB-AUTYP = 'p'. WA_TAB-AUTYPT = '货物移动(文档)'. ENDIF.
IF WA_TAB-AUTYP = 'r'. WA_TAB-AUTYPT = 'TD传输(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 's'. WA_TAB-AUTYPT = '装载确认,重过帐(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 't'. WA_TAB-AUTYPT = '获得 / 丢失 (仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 'u'. WA_TAB-AUTYPT = '再进入存储(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 'v'. WA_TAB-AUTYPT = '数据校对(仅 IS-Oil) '. ENDIF.
IF WA_TAB-AUTYP = 'w'. WA_TAB-AUTYPT = '预定(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 'x'. WA_TAB-AUTYPT = '装载确认,货物收据(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = '$'. WA_TAB-AUTYPT = '(AFS)'. ENDIF.
ENDFORM. "FRM_SET_TEXT
*&---------------------------------------------------------------------*
*& Form user_command5
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
*显示发票
IF RS_SELFIELD-FIELDNAME = 'VBELN'.
SET PARAMETER ID 'VF' FIELD RS_SELFIELD-VALUE.
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ENDIF.
IF RS_SELFIELD-FIELDNAME = 'MATNR'.
CLEAR:L_OUT.
CLEAR:WA_VALUE.
READ TABLE I_VALUE INTO WA_VALUE INDEX RS_SELFIELD-TABINDEX.
SELECT SINGLE *
FROM VBRP "出具发票:项数据
WHERE VBELN = WA_VALUE-VBELN AND
POSNR = WA_VALUE-POSNR.
IF VBRP-AUTYP = 'C'. "销售订单
L_OUT-MATNR = WA_VALUE-MATNR.
L_OUT-BWKEY = WA_VALUE-WERKS.
L_OUT-BWTAR = ''.
L_OUT-VBELN = VBRP-AUBEL.
L_OUT-POSNR = VBRP-AUPOS.
L_OUT-PSPNR = '00000000'.
L_OUT-BDATJ = P_MJAHR.
L_OUT-POPER = WA_VALUE-MONAT.
ELSE.
IF VBRP-AUTYP = 'V'. "采购订单
SELECT SINGLE *
FROM EKKN "采购凭证中的帐户设置
WHERE EBELN = VBRP-AUBEL AND
EBELP = VBRP-AUPOS.
L_OUT-MATNR = WA_VALUE-MATNR.
L_OUT-BWKEY = WA_VALUE-WERKS.
L_OUT-BWTAR = ''.
L_OUT-VBELN = EKKN-VBELN.
L_OUT-POSNR = EKKN-VBELP.
L_OUT-PSPNR = '00000000'.
L_OUT-BDATJ = P_MJAHR.
L_OUT-POPER = WA_VALUE-MONAT.
ELSE. "其它
L_OUT-MATNR = WA_VALUE-MATNR.
L_OUT-BWKEY = WA_VALUE-WERKS.
L_OUT-BWTAR = ''.
L_OUT-PSPNR = '00000000'.
L_OUT-BDATJ = P_MJAHR.
L_OUT-POPER = WA_VALUE-MONAT.
ENDIF.
ENDIF.
*物料帐对话控制 - CKM3
CALL FUNCTION 'CKM8_ML_DATA_DISPLAY'
EXPORTING
I_MATNR = L_OUT-MATNR
I_BWKEY = L_OUT-BWKEY
I_BWTAR = L_OUT-BWTAR
I_VBELN = L_OUT-VBELN
I_POSNR = L_OUT-POSNR
I_PSPNR = L_OUT-PSPNR
I_BDATJ = L_OUT-BDATJ
I_POPER = L_OUT-POPER
I_CURTP = '10'.
ENDIF.
ENDFORM. "user_command5
*&---------------------------------------------------------------------*
*& Form ALV_DATA_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ALV_DATA_GROUP .
DATA :
LS_SORT TYPE SLIS_SORTINFO_ALV.
IF P_R1 = 'X'.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'MONAT'.
LS_SORT-SPOS = 1.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
* LS_SORT-COMP = 'X'."没有了小按钮,直接展开
* LS_SORT-OBLIGATORY = 'X'.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'WERKS'.
LS_SORT-SPOS = 2.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'VTEXT'.
LS_SORT-SPOS = 3.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
* CLEAR LS_SORT.
* LS_SORT-FIELDNAME = 'NAME1'.
* LS_SORT-SPOS = 4.
* LS_SORT-UP = 'X'.
* LS_SORT-SUBTOT = 'X'.
* LS_SORT-GROUP = 'X'.
* APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'MAKTX'.
LS_SORT-SPOS = 4.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
* CLEAR LS_SORT.
* LS_SORT-FIELDNAME = 'HKONT'.
* LS_SORT-SPOS = 5.
* LS_SORT-UP = 'X'.
* LS_SORT-SUBTOT = 'X'.
* LS_SORT-GROUP = 'X'.
* LS_SORT-EXPA = 'X'. "默认显示合计
* APPEND LS_SORT TO GT_SORT.
ELSEIF P_R2 = 'X'.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'MONAT'.
LS_SORT-SPOS = 1.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'WERKS'.
LS_SORT-SPOS = 2.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'NAME1'.
LS_SORT-SPOS = 3.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'VTEXT'.
LS_SORT-SPOS = 4.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'MAKTX'.
LS_SORT-SPOS = 5.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
ENDIF.
ENDFORM. " ALV_DATA_GROUP
*&---------------------------------------------------------------------*
*& Form SUB_GET_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_GET_EVENT .
CONSTANTS :
C_FORMNAME_SUBTOTAL_TEXT TYPE SLIS_FORMNAME VALUE 'SUBTOTAL_TEXT'.
* CONSTANTS:
** Events
* SLIS_EV_ITEM_DATA_EXPAND TYPE SLIS_FORMNAME VALUE 'ITEM_DATA_EXPAND',
* SLIS_EV_REPREP_SEL_MODIFY TYPE SLIS_FORMNAME VALUE 'REPREP_SEL_MODIFY',
* SLIS_EV_CALLER_EXIT_AT_START TYPE SLIS_FORMNAME VALUE 'CALLER_EXIT',
* SLIS_EV_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND',
* SLIS_EV_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
* SLIS_EV_DATA_CHANGED TYPE SLIS_FORMNAME VALUE 'DATA_CHANGED',
* SLIS_EV_TOP_OF_COVERPAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_COVERPAGE',
* SLIS_EV_END_OF_COVERPAGE TYPE SLIS_FORMNAME VALUE 'END_OF_COVERPAGE',
* SLIS_EV_FOREIGN_TOP_OF_PAGE TYPE SLIS_FORMNAME
* VALUE 'FOREIGN_TOP_OF_PAGE',
* SLIS_EV_FOREIGN_END_OF_PAGE TYPE SLIS_FORMNAME
* VALUE 'FOREIGN_END_OF_PAGE',
* SLIS_EV_PF_STATUS_SET TYPE SLIS_FORMNAME VALUE 'PF_STATUS_SET',
* SLIS_EV_LIST_MODIFY TYPE SLIS_FORMNAME VALUE 'LIST_MODIFY',
* SLIS_EV_TOP_OF_LIST TYPE SLIS_FORMNAME VALUE 'TOP_OF_LIST',
* SLIS_EV_END_OF_PAGE TYPE SLIS_FORMNAME VALUE 'END_OF_PAGE',
* SLIS_EV_END_OF_LIST TYPE SLIS_FORMNAME VALUE 'END_OF_LIST',
* SLIS_EV_AFTER_LINE_OUTPUT TYPE SLIS_FORMNAME VALUE 'AFTER_LINE_OUTPUT',
* SLIS_EV_BEFORE_LINE_OUTPUT TYPE SLIS_FORMNAME VALUE
* 'BEFORE_LINE_OUTPUT',
* SLIS_EV_SUBTOTAL_TEXT TYPE SLIS_FORMNAME VALUE 'SUBTOTAL_TEXT',
* SLIS_EV_GROUPLEVEL_CHANGE TYPE SLIS_FORMNAME VALUE 'GROUPLEVEL_CHANGE',
* SLIS_EV_CONTEXT_MENU TYPE SLIS_FORMNAME VALUE 'CONTEXT_MENU'.
CLEAR : WA_EVENTS.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 4
IMPORTING
ET_EVENTS = I_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG = 0
OTHERS = 0.
* Subtotal
READ TABLE I_EVENTS INTO WA_EVENTS
WITH KEY NAME = SLIS_EV_SUBTOTAL_TEXT.
IF SY-SUBRC = 0.
MOVE C_FORMNAME_SUBTOTAL_TEXT TO WA_EVENTS-FORM.
MODIFY I_EVENTS FROM WA_EVENTS INDEX SY-TABIX.
ENDIF.
ENDFORM. " SUB_GET_EVENT
*&---------------------------------------------------------------------*
*& Form subtotal_text
*&---------------------------------------------------------------------*
* Build subtotal text
*----------------------------------------------------------------------*
* P_total Total
* p_subtot_text Subtotal text info
*----------------------------------------------------------------------*
FORM SUBTOTAL_TEXT CHANGING
P_TOTAL TYPE ANY
P_SUBTOT_TEXT TYPE SLIS_SUBTOT_TEXT.
* IF P_SUBTOT_TEXT-CRITERIA = 'WERKS'.
* P_SUBTOT_TEXT-DISPLAY_TEXT_FOR_SUBTOTAL = '*'.
* ENDIF.
ENDFORM. "subtotal_text
**----------------------------------------------------------------------
* Associated program: No programs are associated
*-----------------------------------------------------------------------
* Restriction: No restriction
************************************************************************
REPORT ZFI_MARGIN
NO STANDARD PAGE HEADING.
TYPE-POOLS: MBARC, SLIS.*----------------------------------------------------------------------*
* TABLE DECLARATION
*----------------------------------------------------------------------*
TABLES:BKPF,
MARA,
VBRK,
MKPF,
MSEG,
MMIM_REP_CUST,
MBEW,
CKMLCR,
EBEW,
VBRP,
EKKN.
*&---------------------------------------------------------------------*
* STRUCTURE DECLARATION
*&---------------------------------------------------------------------*
TYPES : BEGIN OF T_TAB,
PRDHA LIKE MARA-PRDHA, "产品层次
WERKS LIKE VBRP-WERKS, "工厂
MONAT LIKE VBRK-POPER, "期间
MENGE LIKE VBRP-FKLMG, "数量
MATNR LIKE VBRP-MATNR, "物料
KUNNR LIKE VBRK-KUNAG, "客户
MEINS LIKE VBRP-MEINS, "单位
BUDAT LIKE VBRK-FKDAT, "发票日期
WAERS LIKE VBRK-WAERK, "本位币 default to CNY
VBELN LIKE VBRP-VBELN, "发票号
POSNR LIKE VBRP-POSNR, "行号
MAKTX LIKE VBRP-ARKTX, "物料描述
MAKTL LIKE VBRP-MATKL, "物料组
KURSK LIKE VBRP-KURSK, "决定价格的汇率
WAVWR LIKE VBRP-WAVWR, "标准成本
NETWR LIKE VBRP-NETWR, "出具发票项目的凭证货币净值
KZWI2 LIKE VBRP-KZWI2, "海运费和保险费
KZWI3 LIKE VBRP-KZWI3, "海运费和保险费
WAERK2 LIKE VBRK-WAERK,"凭证币别
NETWR2 LIKE VBRP-NETWR, "本位币值
PVPRS LIKE CKMLCR-PVPRS, "单位实际成本
WAVWR2 LIKE VBRP-WAVWR, "实际成本值
KURRF_DAT LIKE VBRK-KURRF_DAT,"换算日期
VGBEL TYPE VBRP-VGBEL, "参考单据的单据编号
VGPOS TYPE VBRP-VGPOS, "参考项目的项目号
AUBEL LIKE VBRP-AUBEL,"销售单
AUPOS LIKE VBRP-AUPOS,"销售单行项目
AUTYP LIKE VBRP-AUTYP, "单据类型
SONO LIKE EKKN-VBELN, "销售单
SOIT LIKE EKKN-VBELP, "行项目
AUTYPT(50) TYPE C, "单据类型
SHKZG(1) TYPE C,
HKONT TYPE BSEG-HKONT, "总账科目
BUKRS TYPE VBRK-BUKRS, "公司代码
PAOBJNR TYPE VBRP-PAOBJNR, "获利字段
END OF T_TAB.
TYPES : BEGIN OF T_VALUE,
MONAT LIKE BKPF-MONAT, "期间
KUNNR LIKE KNA1-KUNNR, "客户编号
MATNR LIKE MARA-MATNR, "物料号
PRDHA LIKE MARA-PRDHA, "产品层次
VTEXT LIKE T179T-VTEXT, "层次名称
WERKS LIKE MARC-WERKS, "评估范围
MAKTX LIKE MAKT-MAKTX, "物料描述.
MATKL LIKE VBRP-MATKL, "物料组
WAERS LIKE CKMLCR-WAERS, "币别
MEINS LIKE MARA-MEINS, "主档单位
MENGE LIKE MSEG-MENGE, "销售数量
MENGE2 LIKE MSEG-MENGE, "总重量
NETWR2 LIKE VBRP-NETWR, "总价值
KSTBW LIKE KONP-KSTBW, "平均售价
STPRS LIKE MBEW-STPRS, "单位标准成本
PVPRS LIKE CKMLCR-PVPRS, "单位实际成本
PEINH LIKE CKMLCR-PEINH, "价格单位
DWMIS LIKE CKMLCR-PVPRS, "单位实际毛利
ZSJCB LIKE CKMLCR-PVPRS, "总实际成本
ZMLIS LIKE CKMLCR-PVPRS, "总毛利
MLILU LIKE CKMLCR-PVPRS, "毛利率(数)
MLILU_C TYPE C LENGTH 29, "毛利率(数)
NAME1 LIKE KNA1-NAME1, "客户名称
WAVWR LIKE VBRP-WAVWR, "标准成本
WAVWR2 LIKE VBRP-WAVWR, "实际成本值
WAVWR3 LIKE VBRP-WAVWR, "标准和实际的差异
VBELN LIKE VBRP-VBELN, "发票
POSNR LIKE VBRP-POSNR, "行
AUBEL LIKE VBRP-AUBEL, "销售单
AUPOS LIKE VBRP-AUPOS, "销售单行项目
AUTYP LIKE VBRP-AUTYP, "单据类型
AUTYPT(50) TYPE C, "类型名称
MLILU1 LIKE CKMLCR-PVPRS, "单位差异(数)
HKONT TYPE BSEG-HKONT, "总账科目
END OF T_VALUE.
DATA: BEGIN OF L_OUT,
KALNR TYPE CKMLHD-KALNR,
MLAST TYPE CKMLHD-MLAST,
MATNR TYPE CKMLHD-MATNR,
BWKEY TYPE CKMLHD-BWKEY,
BWTAR TYPE CKMLHD-BWTAR,
SOBKZ TYPE CKMLHD-SOBKZ,
VBELN TYPE CKMLHD-VBELN,
POSNR TYPE CKMLHD-POSNR,
PSPNR TYPE CKMLHD-PSPNR,
BDATJ TYPE CKMLPP-BDATJ,
POPER TYPE CKMLPP-POPER,
STATUS TYPE CKMLPP-STATUS,
STATUS_TEXT TYPE DD07V-DDTEXT,
CURTP TYPE CKMLCR-CURTP,
BKLAS TYPE MBEW-BKLAS,
MTART TYPE MARA-MTART,
MATKL TYPE MARA-MATKL,
SPART TYPE MARA-SPART,
KTEXT TYPE MAKT-MAKTX,
VPRSV TYPE CKMLCR-VPRSV,
LBKUM TYPE CKMLPP-LBKUM,
MEINS TYPE MARA-MEINS,
SALK3 TYPE CKMLCR-SALK3,
SALKV TYPE CKMLCR-SALKV,
EB_DIF TYPE CKI_DOC_ML-EB_DIF,
STPRS TYPE CKMLCR-STPRS,
PVPRS TYPE CKMLCR-PVPRS,
PRABW_PRZ TYPE CK_PRABW_PRZ,
PEINH TYPE CKMLCR-PEINH,
WAERS TYPE WAERS,
END OF L_OUT.
TYPES:BEGIN OF T_BSEG,
BUKRS TYPE BUKRS, "公司代码
BELNR TYPE BELNR_D, "会计凭证
GJAHR TYPE GJAHR, "会计年度
BUZEI TYPE BUZEI, "会计凭证行项目
KOART TYPE KOART, "科目类型
SHKZG TYPE SHKZG, "借方/贷方标识
PSWBT TYPE PSWBT, "总帐中更新的金额
PSWSL TYPE PSWSL, "更新总分类帐交易数字货币
DMBTR TYPE DMBTR, "按本位币计的金额
HKONT TYPE HKONT, "总分类帐帐目
END OF T_BSEG.
TYPES:BEGIN OF T_GLPCA,
DRCRK TYPE SHKZG, "借方/贷方标识
TSL TYPE VTCUR_PCA,"业务货币计价的金额
END OF T_GLPCA.
*&---------------------------------------------------------------------*
* INTERNAL TABLE DECLARATION
*&---------------------------------------------------------------------*
DATA :
I_GLPCA TYPE STANDARD TABLE OF T_GLPCA,
I_BSEG TYPE STANDARD TABLE OF T_BSEG,
I_TAB TYPE STANDARD TABLE OF T_TAB,
I_VALUE TYPE STANDARD TABLE OF T_VALUE.
RANGES S_BUDAT FOR MKPF-BUDAT.
*&---------------------------------------------------------------------*
* WORK AREA DECLARATION
*&---------------------------------------------------------------------*
DATA :
WA_GLPCA TYPE T_GLPCA,
WA_TAB TYPE T_TAB,
WA_VALUE TYPE T_VALUE.
*&---------------------------------------------------------------------*
* VARIANT DECLARATION
*&---------------------------------------------------------------------*
DATA: L_ALV_FILED TYPE SLIS_FIELDCAT_ALV.
DATA: L_ALV_FILEDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: GT_SORT TYPE SLIS_T_SORTINFO_ALV.
DATA: GT_COLOR TYPE SLIS_T_SPECIALCOL_ALV WITH HEADER LINE.
DATA: I_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: I_GRID_SETTINGS TYPE LVC_S_GLAY.
DATA: PGM LIKE SY-REPID.
DATA: COL_POS TYPE I VALUE 0.
DATA: I_EVENTS TYPE SLIS_T_EVENT.
DATA: WA_EVENTS TYPE SLIS_ALV_EVENT.
*&---------------------------------------------------------------------*
* Constant DECLARATION
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* SELECTION SCREEN DECLARATION
*&---------------------------------------------------------------------*
* Selection screen
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETER : P_R1 RADIOBUTTON GROUP G1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(10) TEXT-007 FOR FIELD P_R1 .
SELECTION-SCREEN POSITION 30.
PARAMETER : P_R2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 35(10) TEXT-008 FOR FIELD P_R2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_MJAHR LIKE MKPF-MJAHR OBLIGATORY.
SELECT-OPTIONS:S_MONAT FOR BKPF-MONAT OBLIGATORY.
SELECT-OPTIONS S_MATNR FOR MSEG-MATNR MEMORY ID MAT
MATCHCODE OBJECT MAT1.
SELECT-OPTIONS:S_BUKRS FOR VBRK-BUKRS MEMORY ID BUK DEFAULT '1200',
S_WERKS FOR MSEG-WERKS MEMORY ID WRK DEFAULT '1201'.
*转到会计的状态
SELECT-OPTIONS S_RFBSK FOR VBRK-RFBSK DEFAULT 'C'.
*产品层次
SELECT-OPTIONS S_PRDHA FOR MARA-PRDHA.
*SELECT-OPTIONS S_LGORT FOR MSEG-LGORT MEMORY ID LAG NO-DISPLAY.
*SELECT-OPTIONS S_CHARG FOR MSEG-CHARG MEMORY ID CHA NO-DISPLAY.
*SELECT-OPTIONS S_LIFNR FOR MSEG-LIFNR MEMORY ID LIF NO-DISPLAY.
SELECT-OPTIONS S_KUNNR FOR MSEG-KUNNR MEMORY ID KUN.
*SELECT-OPTIONS S_BWART FOR MSEG-BWART MEMORY ID BWA NO-DISPLAY.
*SELECT-OPTIONS S_SOBKZ FOR MSEG-SOBKZ NO-DISPLAY.
SELECTION-SCREEN END OF BLOCK B1.
*SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
*SELECT-OPTIONS S_BUDAT FOR MKPF-BUDAT NO-DISPLAY.
*SELECT-OPTIONS S_USNAM FOR MKPF-USNAM MEMORY ID USR NO-DISPLAY.
*SELECT-OPTIONS S_VGART FOR MKPF-VGART NO-DISPLAY.
*SELECT-OPTIONS S_XBLNR FOR MKPF-XBLNR NO-DISPLAY.
*SELECTION-SCREEN END OF BLOCK B2.
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
*set initial values
P_MJAHR = '2011'.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*&---------------------------------------------------------------------*
* AT SELECTION-SCREEN
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
* SET PARAMETER ID 'MAT' FIELD S_MATNR-LOW.
SET PARAMETER ID 'WRK' FIELD S_WERKS-LOW.
SET PARAMETER ID 'KUN' FIELD S_KUNNR-LOW.
*&---------------------------------------------------------------------*
* START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*取数
PERFORM FRM_GET_DATA.
IF I_TAB IS INITIAL.
MESSAGE TEXT-006 TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
*&---------------------------------------------------------------------*
* END-OF-SELECTION
*&---------------------------------------------------------------------*
END-OF-SELECTION.
*处理
IF I_TAB IS NOT INITIAL.
PERFORM FRM_PROCESS_DATA.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
*取月第一天
DATA:L_DATE_START LIKE SY-DATUM.
*取月最后一天
DATA:L_DATE_END LIKE SY-DATUM.
*取月份
DATA:T_MONTH TYPE C LENGTH 10.
DATA:T_LEN TYPE I.
DATA:T_STR TYPE I.
REFRESH:I_TAB.
REFRESH:S_BUDAT.
*取过账年月
IF S_MONAT-LOW IS NOT INITIAL AND S_MONAT-HIGH IS NOT INITIAL.
CONCATENATE '00000' S_MONAT-HIGH INTO T_MONTH.
T_LEN = STRLEN( T_MONTH ).
T_STR = T_LEN - 2.
T_MONTH = T_MONTH+T_STR(2).
CONCATENATE P_MJAHR S_MONAT-HIGH '01' INTO L_DATE_START.
S_BUDAT-SIGN = 'I'.
S_BUDAT-OPTION = 'BT'.
CONCATENATE P_MJAHR S_MONAT-LOW '01' INTO S_BUDAT-LOW.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = L_DATE_START
IMPORTING
E_DATE = L_DATE_END.
S_BUDAT-HIGH = L_DATE_END.
APPEND S_BUDAT.
ELSE.
IF S_MONAT-LOW IS NOT INITIAL.
CONCATENATE '00000' S_MONAT-LOW INTO T_MONTH.
T_LEN = STRLEN( T_MONTH ).
T_STR = T_LEN - 2.
T_MONTH = T_MONTH+T_STR(2).
CONCATENATE P_MJAHR S_MONAT-LOW '01' INTO L_DATE_START.
S_BUDAT-SIGN = 'I'.
S_BUDAT-OPTION = 'BT'.
CONCATENATE P_MJAHR S_MONAT-LOW '01' INTO S_BUDAT-LOW.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = L_DATE_START
IMPORTING
E_DATE = L_DATE_END.
S_BUDAT-HIGH = L_DATE_END.
APPEND S_BUDAT.
ENDIF.
IF S_MONAT-HIGH IS NOT INITIAL.
CONCATENATE '00000' S_MONAT-HIGH INTO T_MONTH.
T_LEN = STRLEN( T_MONTH ).
T_STR = T_LEN - 2.
T_MONTH = T_MONTH+T_STR(2).
CONCATENATE P_MJAHR S_MONAT-HIGH '01' INTO L_DATE_START.
S_BUDAT-SIGN = 'I'.
S_BUDAT-OPTION = 'BT'.
CONCATENATE P_MJAHR S_MONAT-HIGH '01' INTO S_BUDAT-HIGH.
CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
EXPORTING
I_DATE = L_DATE_START
IMPORTING
E_DATE = L_DATE_END.
S_BUDAT-HIGH = L_DATE_END.
APPEND S_BUDAT.
ENDIF.
ENDIF.
* - show the current activity and the progress
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = TEXT-003. "Reading MM documents
SELECT
VBRP~WERKS AS WERKS
VBRK~POPER AS MONAT
VBRP~FKLMG AS MENGE
VBRP~MATNR AS MATNR
VBRK~KUNRG AS KUNNR
VBRP~MEINS AS MEINS
VBRK~FKDAT AS BUDAT
VBRK~WAERK AS WAERS
VBRP~VBELN
VBRP~POSNR
VBRP~ARKTX AS MAKTX
VBRP~MATKL
VBRP~KURSK
VBRP~NETWR
VBRK~WAERK AS WAERK2
VBRP~WERKS
VBRK~KURRF_DAT
VBRP~WAVWR "标准成本
MARA~PRDHA
VBRP~AUBEL
VBRP~AUPOS
VBRP~AUTYP
VBRP~KZWI2
VBRP~KZWI3
VBRP~VGBEL
VBRP~VGPOS
VBRK~BUKRS
VBRP~PAOBJNR "获利字段
INTO CORRESPONDING FIELDS OF TABLE I_TAB
*出具发票:抬头数据
FROM VBRK
*出具发票:项数据
INNER JOIN VBRP ON VBRK~VBELN = VBRP~VBELN
*常规物料数据
INNER JOIN MARA ON MARA~MATNR = VBRP~MATNR
WHERE
*物料
VBRP~MATNR IN S_MATNR AND
*工厂
VBRP~WERKS IN S_WERKS AND
*客户
VBRK~KUNRG IN S_KUNNR AND
*出具发票凭证被取消
VBRK~FKSTO = '' AND
*已取消的出具发票凭证编号
VBRK~SFAKN = '' AND
*转到会计的状态
VBRK~RFBSK IN S_RFBSK AND " C 过账凭证已经建立
*产品层次
MARA~PRDHA IN S_PRDHA AND
*出具发票索引和打印的出具发票日期
VBRK~FKDAT IN S_BUDAT AND
* VBRK~FKDAT >= S_BUDAT-LOW AND VBRK~FKDAT <= S_BUDAT-HIGH AND
*公司代码
VBRK~BUKRS IN S_BUKRS
*退货项目
* AND VBRP~SHKZG <> 'X'
.
* DELETE I_TAB WHERE AUTYP = 'V'.
*验证 : FAGLFLEXA
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_PROCESS_DATA .
DATA : LV_BELNR TYPE BELNR_D.
* show the current activity and the progress
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = TEXT-005. "Preparing list output
*----------------------------------------删除发货数量为0的记录
* DELETE I_TAB WHERE MENGE <= 0.
"在显示报表前计算所有数据(实际成本提取,销售数量/金额/汇率/标准成本 从发票中提取)
LOOP AT I_TAB INTO WA_TAB.
CLEAR:MBEW.
CLEAR:CKMLCR.
CLEAR:EBEW.
*期间
WA_TAB-MONAT = WA_TAB-BUDAT+4(2).
*评估币别
WA_TAB-WAERS = 'CNY'.
* SELECT SINGLE BELNR
* INTO LV_BELNR
* FROM BKPF
* WHERE GJAHR = P_MJAHR
* AND BUKRS = WA_TAB-BUKRS
* AND AWKEY = WA_TAB-VBELN."发票号
* SELECT *
* INTO CORRESPONDING FIELDS OF TABLE I_BSEG
* FROM BSEG "会计核算凭证段
* WHERE GJAHR = P_MJAHR
* AND BUKRS = WA_TAB-BUKRS
* AND BELNR = LV_BELNR
* AND WERKS = WA_TAB-WERKS
* AND MATNR = WA_TAB-MATNR
* AND PAOBJNR = WA_TAB-PAOBJNR
** AND KOART = 'S' "总账科目
* .
* SELECT SINGLE PSWBT
* INTO WA_TAB-NETWR2
* FROM BSEG "会计核算凭证段
* WHERE GJAHR = P_MJAHR
* AND BUKRS = WA_TAB-BUKRS
* AND BELNR = LV_BELNR
* AND WERKS = WA_TAB-WERKS
* AND MATNR = WA_TAB-MATNR
* AND PAOBJNR = WA_TAB-PAOBJNR
* AND KOART = 'S' "总账科目
* AND HKONT = '6001100001'
* .
*扣除海运费跟保险费之后的销售收入
REFRESH I_GLPCA.
SELECT TSL DRCRK
INTO CORRESPONDING FIELDS OF TABLE I_GLPCA
FROM GLPCA "成本控制-利润中心会计:实际行项目
WHERE REFDOCNR = WA_TAB-VBELN
AND REFRYEAR = P_MJAHR
AND REFDOCLN = WA_TAB-POSNR
AND RACCT = '6001100001'
AND MATNR = WA_TAB-MATNR
AND WERKS = WA_TAB-WERKS
.
CLEAR WA_TAB-NETWR2.
LOOP AT I_GLPCA INTO WA_GLPCA.
* IF WA_GLPCA-DRCRK = 'H'.
* WA_TAB-NETWR2 = WA_TAB-NETWR2 - WA_GLPCA-TSL.
* ELSE.
* WA_TAB-NETWR2 = WA_TAB-NETWR2 + WA_GLPCA-TSL.
* ENDIF.
WA_TAB-NETWR2 = WA_TAB-NETWR2 + WA_GLPCA-TSL.
ENDLOOP.
WA_TAB-NETWR2 = - WA_TAB-NETWR2.
*销售收入 货币净值 - 海运费跟保险费
* WA_TAB-NETWR = WA_TAB-NETWR - WA_TAB-KZWI2 - WA_TAB-KZWI3.
* WA_TAB-NETWR2 = WA_TAB-NETWR.
*取单据类型的名称
PERFORM FRM_SET_TEXT.
"按订单库存取实际成本
IF WA_TAB-AUTYP = 'C'.
SELECT SINGLE *
FROM EBEW "销售订单库存评估
WHERE MATNR = WA_TAB-MATNR AND
BWKEY = WA_TAB-WERKS AND
VBELN = WA_TAB-AUBEL AND
POSNR = WA_TAB-AUPOS.
SELECT SINGLE *
FROM CKMLCR "物料分类帐:期间汇总记录值
WHERE KALNR = EBEW-KALN1 AND
BDATJ = P_MJAHR AND
POPER = WA_TAB-MONAT ."AND VPRSV = 'V'.
WA_TAB-WAVWR2 = CKMLCR-PVPRS / CKMLCR-PEINH * WA_TAB-MENGE ."实际成本值
"周期单位价格 * 价格单位
WA_TAB-PVPRS = CKMLCR-PVPRS / CKMLCR-PEINH ."实际成本价格
ENDIF.
IF WA_TAB-PVPRS <= 0 OR WA_TAB-WAVWR2 <= 0 OR WA_TAB-AUTYP <> 'C'.
"根据PO号取SO,订单库存取实际成本
IF WA_TAB-AUTYP = 'V'.
CLEAR:EKKN.
SELECT SINGLE *
FROM EKKN "采购凭证中的帐户设置
WHERE EBELN = WA_TAB-AUBEL AND
EBELP = WA_TAB-AUPOS.
IF EKKN IS NOT INITIAL.
"销售单
WA_TAB-SONO = EKKN-VBELN.
"销售行
WA_TAB-SOIT = EKKN-VBELP.
SELECT SINGLE *
FROM EBEW "销售订单库存评估
WHERE MATNR = WA_TAB-MATNR AND
BWKEY = WA_TAB-WERKS AND
VBELN = WA_TAB-SONO AND
POSNR = WA_TAB-SOIT.
SELECT SINGLE *
FROM CKMLCR "物料分类帐:期间汇总记录值
WHERE KALNR = EBEW-KALN1 AND
BDATJ = P_MJAHR AND
POPER = WA_TAB-MONAT ."AND VPRSV = 'V'.
WA_TAB-WAVWR2 = CKMLCR-PVPRS / CKMLCR-PEINH * WA_TAB-MENGE ."实际成本值
WA_TAB-PVPRS = CKMLCR-PVPRS / CKMLCR-PEINH ."实际成本价格
ENDIF.
* ENDIF.
ELSE.
SELECT SINGLE *
FROM MBEW "物料评估
WHERE MATNR = WA_TAB-MATNR AND
BWKEY = WA_TAB-WERKS .
SELECT SINGLE *
FROM CKMLCR "物料分类帐:期间汇总记录值
WHERE KALNR = MBEW-KALN1 AND "成本估算号 - 产品成本核算
BDATJ = P_MJAHR AND
POPER = WA_TAB-MONAT ."AND VPRSV = 'V'.
WA_TAB-WAVWR2 = CKMLCR-PVPRS / CKMLCR-PEINH * WA_TAB-MENGE ."实际成本值
WA_TAB-PVPRS = CKMLCR-PVPRS / CKMLCR-PEINH ."实际单位成本价格
ENDIF.
ENDIF.
IF WA_TAB-WAERK2 <> 'CNY'.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
DATE = WA_TAB-KURRF_DAT "换算日期
FOREIGN_CURRENCY = WA_TAB-WAERK2 "凭证币别
FOREIGN_AMOUNT = WA_TAB-NETWR2 "出具发票项目的凭证货币净值
LOCAL_CURRENCY = 'CNY'
IMPORTING
LOCAL_AMOUNT = WA_TAB-NETWR2 "本位币值
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
DATE = WA_TAB-KURRF_DAT
FOREIGN_CURRENCY = WA_TAB-WAERK2
FOREIGN_AMOUNT = WA_TAB-WAVWR
LOCAL_CURRENCY = 'CNY'
IMPORTING
LOCAL_AMOUNT = WA_TAB-WAVWR "标准成本
EXCEPTIONS
NO_RATE_FOUND = 1
OVERFLOW = 2
NO_FACTORS_FOUND = 3
NO_SPREAD_FOUND = 4
DERIVED_2_TIMES = 5
OTHERS = 6.
ENDIF.
MODIFY I_TAB FROM WA_TAB.
ENDLOOP.
*-----------------------------------------------------------------
DELETE I_TAB WHERE KUNNR = '' OR PRDHA = '' OR MATNR = ''.
SORT I_TAB BY MONAT WERKS PRDHA KUNNR MATNR.
LOOP AT I_TAB INTO WA_TAB .
CLEAR:WA_VALUE.
WA_VALUE-MONAT = WA_TAB-MONAT.
WA_VALUE-PRDHA = WA_TAB-PRDHA.
WA_VALUE-KUNNR = WA_TAB-KUNNR.
WA_VALUE-MATNR = WA_TAB-MATNR.
WA_VALUE-WERKS = WA_TAB-WERKS.
WA_VALUE-MEINS = WA_TAB-MEINS.
WA_VALUE-WAERS = WA_TAB-WAERS.
WA_VALUE-VBELN = WA_TAB-VBELN.
WA_VALUE-POSNR = WA_TAB-POSNR.
COLLECT WA_VALUE INTO I_VALUE.
ENDLOOP.
LOOP AT I_VALUE INTO WA_VALUE.
"发票号 发票行
LOOP AT I_TAB INTO WA_TAB WHERE VBELN = WA_VALUE-VBELN
AND POSNR = WA_VALUE-POSNR.
WA_VALUE-WAVWR2 = WA_VALUE-WAVWR2 + WA_TAB-WAVWR2. "实际成本
WA_VALUE-WAVWR = WA_VALUE-WAVWR + WA_TAB-WAVWR. "标准成本
WA_VALUE-MENGE = WA_VALUE-MENGE + WA_TAB-MENGE. "库存单位的数量
WA_VALUE-NETWR2 = WA_VALUE-NETWR2 + WA_TAB-NETWR2. "本位币净值
WA_VALUE-AUBEL = WA_TAB-AUBEL. "销售单
WA_VALUE-AUPOS = WA_TAB-AUPOS. "销售行
WA_VALUE-AUTYP = WA_TAB-AUTYP. "单据类型
WA_VALUE-AUTYPT = WA_TAB-AUTYPT. "类型名称
ENDLOOP.
*价格单位
WA_VALUE-PEINH = 100.
*总实际成本
WA_VALUE-ZSJCB = WA_VALUE-WAVWR2.
"销售单价 = 销售开票价值 / 销售开票数量
IF WA_VALUE-MENGE > 0.
WA_VALUE-KSTBW = WA_VALUE-NETWR2 / WA_VALUE-MENGE * 100. "单位销售价格 = 总净值 / 总数量
WA_VALUE-STPRS = WA_VALUE-WAVWR / WA_VALUE-MENGE * 100. "标准成本每100
WA_VALUE-PVPRS = WA_VALUE-WAVWR2 / WA_VALUE-MENGE * 100. "实际成本每100
ENDIF.
DATA:LV_SJ LIKE CKMLCR-PVPRS.
LV_SJ = WA_VALUE-PVPRS / WA_VALUE-PEINH. "单位实际成本
WA_VALUE-DWMIS = WA_VALUE-KSTBW / 100 - LV_SJ. "单位毛利 = 销售均价 - 单位实际成本
*总毛利 = 收入 - 实际成本
WA_VALUE-ZMLIS = WA_VALUE-NETWR2 - WA_VALUE-WAVWR2.
*毛利率 = 毛利 / 实际成本
IF WA_VALUE-ZMLIS <> 0.
IF WA_VALUE-NETWR2 > 0 .
WA_VALUE-MLILU = WA_VALUE-ZMLIS / WA_VALUE-NETWR2 * 100.
* ELSE.
* WA_VALUE-MLILU = 0.
ENDIF.
WA_VALUE-MLILU_C = WA_VALUE-MLILU.
CONDENSE WA_VALUE-MLILU_C.
CONCATENATE WA_VALUE-MLILU_C ' %' INTO WA_VALUE-MLILU_C SEPARATED BY ' '.
ENDIF.
*产品层次描述
SELECT SINGLE VTEXT
INTO WA_VALUE-VTEXT
FROM T179T
WHERE PRODH = WA_VALUE-PRDHA AND
SPRAS = '1'.
*物料描述
SELECT SINGLE MAKTX
INTO WA_VALUE-MAKTX
FROM MAKT
WHERE MATNR = WA_VALUE-MATNR.
*客户名称
SELECT SINGLE NAME1
INTO WA_VALUE-NAME1
FROM KNA1
WHERE KUNNR = WA_VALUE-KUNNR.
*标准成本 - 实际成本
WA_VALUE-WAVWR3 = WA_VALUE-WAVWR - WA_VALUE-WAVWR2. "计算差异
*单位标准成本 - 单位实际成本
WA_VALUE-MLILU1 = WA_VALUE-STPRS - WA_VALUE-PVPRS. "单位差异
*总账科目
WA_VALUE-HKONT = '6001100001'.
MODIFY I_VALUE FROM WA_VALUE.
ENDLOOP.
*-------------------------------------
CLEAR:GT_SORT.
REFRESH:GT_SORT.
CLEAR:L_ALV_FILEDCAT.
REFRESH:L_ALV_FILEDCAT.
IF P_R1 = 'X'.
PERFORM INITIAL_FIELDS USING 5 'MONAT' '期间' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'WERKS' '评估范围' '' '' ''.
PERFORM INITIAL_FIELDS USING 15 'VTEXT' '产品层次描述' '' '' ''.
PERFORM INITIAL_FIELDS USING 22 'MAKTX' '物料描述' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'WAERS' '评估币别' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'MEINS' '物料单位' '' '' ''.
PERFORM INITIAL_FIELDS USING 13 'MENGE' '实际发货数量' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'NETWR2' '销售收入' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR' '标准成本' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR3' '差异' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR2' '实际成本' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'ZMLIS' '销售毛利' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 10 'MLILU_C' '毛利率' '' '' ''.
PERFORM INITIAL_FIELDS USING 16 'KSTBW' '平均售价(每100个)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'STPRS' '单位标准成本(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'MLILU1' '单位差异(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'PVPRS' '单位实际成本(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'DWMIS' '单位毛利' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'PRDHA' '产品层次' '' '' ''.
PERFORM INITIAL_FIELDS USING 6 'KUNNR' '客户编号' '' '' ''.
PERFORM INITIAL_FIELDS USING 32 'NAME1' '客户名称' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'MATNR' '物料号码' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'AUBEL' '销售单' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'AUPOS' '销售行' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'AUTYP' '单据类型' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'AUTYPT' '单据类型名称' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'VBELN' '发票号' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'POSNR' '发票行' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'HKONT' '总账科目' '' '' ''.
ELSEIF P_R2 = 'X'.
PERFORM INITIAL_FIELDS USING 5 'MONAT' '期间' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'WERKS' '评估范围' '' '' ''.
PERFORM INITIAL_FIELDS USING 32 'NAME1' '客户名称' '' '' ''.
PERFORM INITIAL_FIELDS USING 15 'VTEXT' '产品层次描述' '' '' ''.
PERFORM INITIAL_FIELDS USING 22 'MAKTX' '物料描述' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'WAERS' '评估币别' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'MEINS' '物料单位' '' '' ''.
PERFORM INITIAL_FIELDS USING 13 'MENGE' '实际发货数量' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'NETWR2' '销售收入' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR' '标准成本' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR3' '差异' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'WAVWR2' '实际成本' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 18 'ZMLIS' '销售毛利' 'X' '' ''.
PERFORM INITIAL_FIELDS USING 10 'MLILU_C' '毛利率' '' '' ''.
PERFORM INITIAL_FIELDS USING 16 'KSTBW' '平均售价(每100个)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'STPRS' '单位标准成本(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'MLILU1' '单位差异(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 20 'PVPRS' '单位实际成本(每100)' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'DWMIS' '单位毛利' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'PRDHA' '产品层次' '' '' ''.
PERFORM INITIAL_FIELDS USING 6 'KUNNR' '客户编号' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'MATNR' '物料号码' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'AUBEL' '销售单' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'AUPOS' '销售行' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'AUTYP' '单据类型' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'AUTYPT' '单据类型名称' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'VBELN' '发票号' '' '' ''.
PERFORM INITIAL_FIELDS USING 5 'POSNR' '发票行' '' '' ''.
PERFORM INITIAL_FIELDS USING 10 'HKONT' '总账科目' '' '' ''.
ENDIF.
LOOP AT L_ALV_FILEDCAT INTO L_ALV_FILED.
IF L_ALV_FILED-FIELDNAME = 'MEINS'.
L_ALV_FILED-REF_FIELDNAME = 'MEINS'.
L_ALV_FILED-REF_TABNAME = 'VBRP'.
ENDIF.
IF L_ALV_FILED-FIELDNAME = 'MENGE'.
L_ALV_FILED-QFIELDNAME = 'MEINS'.
ENDIF.
MODIFY L_ALV_FILEDCAT FROM L_ALV_FILED.
ENDLOOP.
*Hot spot
FIELD-SYMBOLS:<FS1> LIKE LINE OF L_ALV_FILEDCAT.
LOOP AT L_ALV_FILEDCAT ASSIGNING <FS1>.
IF <FS1>-FIELDNAME = 'VBELN'.
<FS1>-HOTSPOT = 'X'.
EXIT.
ENDIF.
ENDLOOP.
FIELD-SYMBOLS:<FS2> LIKE LINE OF L_ALV_FILEDCAT.
LOOP AT L_ALV_FILEDCAT ASSIGNING <FS2>.
IF <FS2>-FIELDNAME = 'MATNR'.
<FS2>-HOTSPOT = 'X'.
EXIT.
ENDIF.
ENDLOOP.
PGM = SY-REPID.
*Layout setting
CLEAR:I_LAYOUT.
I_LAYOUT-GROUP_CHANGE_EDIT = 'X'.
IF P_R1 = 'X'.
I_LAYOUT-WINDOW_TITLEBAR = '销售毛利报表 -- 按产品层次'.
ELSEIF P_R2 = 'X'.
I_LAYOUT-WINDOW_TITLEBAR = '销售毛利报表 -- 按客户'.
ENDIF.
I_LAYOUT-DETAIL_POPUP = 'X'. "双击事件
I_LAYOUT-GET_SELINFOS = 'X'. "明细显示
* I_LAYOUT-ZEBRA = 'X'. "斑马线
* I_LAYOUT-NO_TOTALLINE = 'X'. "没有最后的总计行
* I_LAYOUT-NO_SUBCHOICE = 'X'. "没可选择的子合计
* I_LAYOUT-NO_SUBTOTALS = 'X'.
* Perform to populate ALV event
PERFORM SUB_GET_EVENT.
*Sort condition setting
IF P_R1 = 'X'.
SORT I_VALUE BY MONAT WERKS PRDHA KUNNR MATNR AUBEL AUPOS VBELN POSNR.
ELSEIF P_R2 = 'X'.
SORT I_VALUE BY MONAT WERKS KUNNR PRDHA MATNR AUBEL AUPOS VBELN POSNR.
ENDIF.
*分类汇总
PERFORM ALV_DATA_GROUP .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_CALLBACK_PF_STATUS_SET = 'ALV_USER_TOOLBAR'
IT_FIELDCAT = L_ALV_FILEDCAT
IT_SORT = GT_SORT[]
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IS_LAYOUT = I_LAYOUT
* i_callback_top_of_page = 'USER_TOP_PAGE'
I_CALLBACK_PROGRAM = PGM
IT_EVENTS = I_EVENTS
I_GRID_TITLE = '销售毛利'
I_GRID_SETTINGS = I_GRID_SETTINGS
I_SAVE = 'X'
TABLES
T_OUTTAB = I_VALUE.
ENDFORM. " FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form INITIAL_FIELDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LENTH text
* -->FNAME text
* -->TEXT text
* -->DO_SUM text
* -->COLUMN_COLOR text
* -->IS_ICON text
*----------------------------------------------------------------------*
FORM INITIAL_FIELDS USING LENTH TYPE I
FNAME TYPE C
TEXT TYPE C
DO_SUM TYPE C
COLUMN_COLOR TYPE C
IS_ICON TYPE C.
L_ALV_FILED-COL_POS = COL_POS + 1.
L_ALV_FILED-OUTPUTLEN = LENTH.
L_ALV_FILED-FIELDNAME = FNAME.
L_ALV_FILED-SELTEXT_M = TEXT.
L_ALV_FILED-DO_SUM = DO_SUM.
L_ALV_FILED-EMPHASIZE = COLUMN_COLOR.
L_ALV_FILED-ICON = IS_ICON.
L_ALV_FILED-NO_ZERO = 'X'.
APPEND L_ALV_FILED TO L_ALV_FILEDCAT.
ENDFORM. "initial_fields
*&---------------------------------------------------------------------*
*& Form FRM_SET_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FRM_SET_TEXT.
*Domain : VBTYP
IF WA_TAB-AUTYP = 'A'. WA_TAB-AUTYPT = '询价'. ENDIF.
IF WA_TAB-AUTYP = 'B'. WA_TAB-AUTYPT = '报价'. ENDIF.
IF WA_TAB-AUTYP = 'C'. WA_TAB-AUTYPT = '订单'. ENDIF.
IF WA_TAB-AUTYP = 'D'. WA_TAB-AUTYPT = '项目建议'. ENDIF.
IF WA_TAB-AUTYP = 'E'. WA_TAB-AUTYPT = '计划协议'. ENDIF.
IF WA_TAB-AUTYP = 'F'. WA_TAB-AUTYPT = '带有外部服务代理的计划协议 '. ENDIF.
IF WA_TAB-AUTYP = 'G'. WA_TAB-AUTYPT = '合同'. ENDIF.
IF WA_TAB-AUTYP = 'H'. WA_TAB-AUTYPT = '退货 '. ENDIF.
IF WA_TAB-AUTYP = 'I'. WA_TAB-AUTYPT = '免费订单'. ENDIF.
IF WA_TAB-AUTYP = 'J'. WA_TAB-AUTYPT = '交货'. ENDIF.
IF WA_TAB-AUTYP = 'K'. WA_TAB-AUTYPT = '贷项凭单请求'. ENDIF.
IF WA_TAB-AUTYP = 'L'. WA_TAB-AUTYPT = '借项凭单请求'. ENDIF.
IF WA_TAB-AUTYP = 'M'. WA_TAB-AUTYPT = '发票'. ENDIF.
IF WA_TAB-AUTYP = 'N'. WA_TAB-AUTYPT = '取消发票'. ENDIF.
IF WA_TAB-AUTYP = 'O'. WA_TAB-AUTYPT = '贷项凭单'. ENDIF.
IF WA_TAB-AUTYP = 'P'. WA_TAB-AUTYPT = '借方备忘录 '. ENDIF.
IF WA_TAB-AUTYP = 'Q'. WA_TAB-AUTYPT = 'WMS 传输订单'. ENDIF.
IF WA_TAB-AUTYP = 'R'. WA_TAB-AUTYPT = '货物移动'. ENDIF.
IF WA_TAB-AUTYP = 'S'. WA_TAB-AUTYPT = '贷项凭单取消'. ENDIF.
IF WA_TAB-AUTYP = 'T'. WA_TAB-AUTYPT = '定单的退货 '. ENDIF.
IF WA_TAB-AUTYP = 'U'. WA_TAB-AUTYPT = '形式发票'. ENDIF.
IF WA_TAB-AUTYP = 'V'. WA_TAB-AUTYPT = '采购订单'. ENDIF.
IF WA_TAB-AUTYP = 'W'. WA_TAB-AUTYPT = '独立需求计划 '. ENDIF.
IF WA_TAB-AUTYP = 'X'. WA_TAB-AUTYPT = '处理单位'. ENDIF.
IF WA_TAB-AUTYP = '0'. WA_TAB-AUTYPT = '主要联系人 '. ENDIF.
IF WA_TAB-AUTYP = '1'. WA_TAB-AUTYPT = '销售活动(CAS)'. ENDIF.
IF WA_TAB-AUTYP = '2'. WA_TAB-AUTYPT = '外部交易'. ENDIF.
IF WA_TAB-AUTYP = '3'. WA_TAB-AUTYPT = '发票清单'. ENDIF.
IF WA_TAB-AUTYP = '4'. WA_TAB-AUTYPT = '贷项凭单清单'. ENDIF.
IF WA_TAB-AUTYP = '5'. WA_TAB-AUTYPT = '公司间发票 '. ENDIF.
IF WA_TAB-AUTYP = '6'. WA_TAB-AUTYPT = '公司间贷项凭单 '. ENDIF.
IF WA_TAB-AUTYP = '7'. WA_TAB-AUTYPT = '发货/运货通知'. ENDIF.
IF WA_TAB-AUTYP = '8'. WA_TAB-AUTYPT = '运输'. ENDIF.
IF WA_TAB-AUTYP = 'a'. WA_TAB-AUTYPT = '装运成本'. ENDIF.
IF WA_TAB-AUTYP = 'b'. WA_TAB-AUTYPT = 'CRM 机会'. ENDIF.
IF WA_TAB-AUTYP = 'c'. WA_TAB-AUTYPT = '未校验的交付'. ENDIF.
IF WA_TAB-AUTYP = 'd'. WA_TAB-AUTYPT = '贸易合同'. ENDIF.
IF WA_TAB-AUTYP = 'e'. WA_TAB-AUTYPT = '分配表 '. ENDIF.
IF WA_TAB-AUTYP = 'g'. WA_TAB-AUTYPT = '粗加工收据(只有 IS-零售) '. ENDIF.
IF WA_TAB-AUTYP = 'h'. WA_TAB-AUTYPT = '取消发货'. ENDIF.
IF WA_TAB-AUTYP = 'i'. WA_TAB-AUTYPT = '收货'. ENDIF.
IF WA_TAB-AUTYP = 'j'. WA_TAB-AUTYPT = 'JIT call'. ENDIF.
IF WA_TAB-AUTYP = 'p'. WA_TAB-AUTYPT = '货物移动(文档)'. ENDIF.
IF WA_TAB-AUTYP = 'r'. WA_TAB-AUTYPT = 'TD传输(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 's'. WA_TAB-AUTYPT = '装载确认,重过帐(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 't'. WA_TAB-AUTYPT = '获得 / 丢失 (仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 'u'. WA_TAB-AUTYPT = '再进入存储(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 'v'. WA_TAB-AUTYPT = '数据校对(仅 IS-Oil) '. ENDIF.
IF WA_TAB-AUTYP = 'w'. WA_TAB-AUTYPT = '预定(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = 'x'. WA_TAB-AUTYPT = '装载确认,货物收据(仅IS-Oil)'. ENDIF.
IF WA_TAB-AUTYP = '$'. WA_TAB-AUTYPT = '(AFS)'. ENDIF.
ENDFORM. "FRM_SET_TEXT
*&---------------------------------------------------------------------*
*& Form user_command5
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
*显示发票
IF RS_SELFIELD-FIELDNAME = 'VBELN'.
SET PARAMETER ID 'VF' FIELD RS_SELFIELD-VALUE.
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ENDIF.
IF RS_SELFIELD-FIELDNAME = 'MATNR'.
CLEAR:L_OUT.
CLEAR:WA_VALUE.
READ TABLE I_VALUE INTO WA_VALUE INDEX RS_SELFIELD-TABINDEX.
SELECT SINGLE *
FROM VBRP "出具发票:项数据
WHERE VBELN = WA_VALUE-VBELN AND
POSNR = WA_VALUE-POSNR.
IF VBRP-AUTYP = 'C'. "销售订单
L_OUT-MATNR = WA_VALUE-MATNR.
L_OUT-BWKEY = WA_VALUE-WERKS.
L_OUT-BWTAR = ''.
L_OUT-VBELN = VBRP-AUBEL.
L_OUT-POSNR = VBRP-AUPOS.
L_OUT-PSPNR = '00000000'.
L_OUT-BDATJ = P_MJAHR.
L_OUT-POPER = WA_VALUE-MONAT.
ELSE.
IF VBRP-AUTYP = 'V'. "采购订单
SELECT SINGLE *
FROM EKKN "采购凭证中的帐户设置
WHERE EBELN = VBRP-AUBEL AND
EBELP = VBRP-AUPOS.
L_OUT-MATNR = WA_VALUE-MATNR.
L_OUT-BWKEY = WA_VALUE-WERKS.
L_OUT-BWTAR = ''.
L_OUT-VBELN = EKKN-VBELN.
L_OUT-POSNR = EKKN-VBELP.
L_OUT-PSPNR = '00000000'.
L_OUT-BDATJ = P_MJAHR.
L_OUT-POPER = WA_VALUE-MONAT.
ELSE. "其它
L_OUT-MATNR = WA_VALUE-MATNR.
L_OUT-BWKEY = WA_VALUE-WERKS.
L_OUT-BWTAR = ''.
L_OUT-PSPNR = '00000000'.
L_OUT-BDATJ = P_MJAHR.
L_OUT-POPER = WA_VALUE-MONAT.
ENDIF.
ENDIF.
*物料帐对话控制 - CKM3
CALL FUNCTION 'CKM8_ML_DATA_DISPLAY'
EXPORTING
I_MATNR = L_OUT-MATNR
I_BWKEY = L_OUT-BWKEY
I_BWTAR = L_OUT-BWTAR
I_VBELN = L_OUT-VBELN
I_POSNR = L_OUT-POSNR
I_PSPNR = L_OUT-PSPNR
I_BDATJ = L_OUT-BDATJ
I_POPER = L_OUT-POPER
I_CURTP = '10'.
ENDIF.
ENDFORM. "user_command5
*&---------------------------------------------------------------------*
*& Form ALV_DATA_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM ALV_DATA_GROUP .
DATA :
LS_SORT TYPE SLIS_SORTINFO_ALV.
IF P_R1 = 'X'.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'MONAT'.
LS_SORT-SPOS = 1.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
* LS_SORT-COMP = 'X'."没有了小按钮,直接展开
* LS_SORT-OBLIGATORY = 'X'.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'WERKS'.
LS_SORT-SPOS = 2.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'VTEXT'.
LS_SORT-SPOS = 3.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
* CLEAR LS_SORT.
* LS_SORT-FIELDNAME = 'NAME1'.
* LS_SORT-SPOS = 4.
* LS_SORT-UP = 'X'.
* LS_SORT-SUBTOT = 'X'.
* LS_SORT-GROUP = 'X'.
* APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'MAKTX'.
LS_SORT-SPOS = 4.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
* CLEAR LS_SORT.
* LS_SORT-FIELDNAME = 'HKONT'.
* LS_SORT-SPOS = 5.
* LS_SORT-UP = 'X'.
* LS_SORT-SUBTOT = 'X'.
* LS_SORT-GROUP = 'X'.
* LS_SORT-EXPA = 'X'. "默认显示合计
* APPEND LS_SORT TO GT_SORT.
ELSEIF P_R2 = 'X'.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'MONAT'.
LS_SORT-SPOS = 1.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'WERKS'.
LS_SORT-SPOS = 2.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'NAME1'.
LS_SORT-SPOS = 3.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'VTEXT'.
LS_SORT-SPOS = 4.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
CLEAR LS_SORT.
LS_SORT-FIELDNAME = 'MAKTX'.
LS_SORT-SPOS = 5.
LS_SORT-UP = 'X'.
LS_SORT-SUBTOT = 'X'.
LS_SORT-GROUP = 'X'.
LS_SORT-EXPA = 'X'. "默认显示合计
APPEND LS_SORT TO GT_SORT.
ENDIF.
ENDFORM. " ALV_DATA_GROUP
*&---------------------------------------------------------------------*
*& Form SUB_GET_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SUB_GET_EVENT .
CONSTANTS :
C_FORMNAME_SUBTOTAL_TEXT TYPE SLIS_FORMNAME VALUE 'SUBTOTAL_TEXT'.
* CONSTANTS:
** Events
* SLIS_EV_ITEM_DATA_EXPAND TYPE SLIS_FORMNAME VALUE 'ITEM_DATA_EXPAND',
* SLIS_EV_REPREP_SEL_MODIFY TYPE SLIS_FORMNAME VALUE 'REPREP_SEL_MODIFY',
* SLIS_EV_CALLER_EXIT_AT_START TYPE SLIS_FORMNAME VALUE 'CALLER_EXIT',
* SLIS_EV_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND',
* SLIS_EV_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE',
* SLIS_EV_DATA_CHANGED TYPE SLIS_FORMNAME VALUE 'DATA_CHANGED',
* SLIS_EV_TOP_OF_COVERPAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_COVERPAGE',
* SLIS_EV_END_OF_COVERPAGE TYPE SLIS_FORMNAME VALUE 'END_OF_COVERPAGE',
* SLIS_EV_FOREIGN_TOP_OF_PAGE TYPE SLIS_FORMNAME
* VALUE 'FOREIGN_TOP_OF_PAGE',
* SLIS_EV_FOREIGN_END_OF_PAGE TYPE SLIS_FORMNAME
* VALUE 'FOREIGN_END_OF_PAGE',
* SLIS_EV_PF_STATUS_SET TYPE SLIS_FORMNAME VALUE 'PF_STATUS_SET',
* SLIS_EV_LIST_MODIFY TYPE SLIS_FORMNAME VALUE 'LIST_MODIFY',
* SLIS_EV_TOP_OF_LIST TYPE SLIS_FORMNAME VALUE 'TOP_OF_LIST',
* SLIS_EV_END_OF_PAGE TYPE SLIS_FORMNAME VALUE 'END_OF_PAGE',
* SLIS_EV_END_OF_LIST TYPE SLIS_FORMNAME VALUE 'END_OF_LIST',
* SLIS_EV_AFTER_LINE_OUTPUT TYPE SLIS_FORMNAME VALUE 'AFTER_LINE_OUTPUT',
* SLIS_EV_BEFORE_LINE_OUTPUT TYPE SLIS_FORMNAME VALUE
* 'BEFORE_LINE_OUTPUT',
* SLIS_EV_SUBTOTAL_TEXT TYPE SLIS_FORMNAME VALUE 'SUBTOTAL_TEXT',
* SLIS_EV_GROUPLEVEL_CHANGE TYPE SLIS_FORMNAME VALUE 'GROUPLEVEL_CHANGE',
* SLIS_EV_CONTEXT_MENU TYPE SLIS_FORMNAME VALUE 'CONTEXT_MENU'.
CLEAR : WA_EVENTS.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 4
IMPORTING
ET_EVENTS = I_EVENTS
EXCEPTIONS
LIST_TYPE_WRONG = 0
OTHERS = 0.
* Subtotal
READ TABLE I_EVENTS INTO WA_EVENTS
WITH KEY NAME = SLIS_EV_SUBTOTAL_TEXT.
IF SY-SUBRC = 0.
MOVE C_FORMNAME_SUBTOTAL_TEXT TO WA_EVENTS-FORM.
MODIFY I_EVENTS FROM WA_EVENTS INDEX SY-TABIX.
ENDIF.
ENDFORM. " SUB_GET_EVENT
*&---------------------------------------------------------------------*
*& Form subtotal_text
*&---------------------------------------------------------------------*
* Build subtotal text
*----------------------------------------------------------------------*
* P_total Total
* p_subtot_text Subtotal text info
*----------------------------------------------------------------------*
FORM SUBTOTAL_TEXT CHANGING
P_TOTAL TYPE ANY
P_SUBTOT_TEXT TYPE SLIS_SUBTOT_TEXT.
* IF P_SUBTOT_TEXT-CRITERIA = 'WERKS'.
* P_SUBTOT_TEXT-DISPLAY_TEXT_FOR_SUBTOTAL = '*'.
* ENDIF.
ENDFORM. "subtotal_text