ZR_FI_015

*===============================基本信息===============================*
* 标题:合并损益报表
* 创建日期:2005-01-20         
*===============================定    义===============================*

************************************************************************
* 基本代码
************************************************************************
REPORT ZR_FI_015
NO STANDARD PAGE HEADING
LINE-COUNT 65
LINE-SIZE  135
MESSAGE-ID ZFI1.

************************************************************************
* INCLUDE:包含文件
************************************************************************
INCLUDE OLE2INCL.

************************************************************************
* TABLE: 定义TABLE
************************************************************************
TABLES:
  SKAT,         "总帐科目主记录(科目表:说明)
  GLT0,         "总帐科目主记录业务额
  T001,         "公司代码
  RF011Z,       "将资产负债表行项目分配到科目
  RF011Q.       "会计报表项说明文字
************************************************************************
*INTERNAL TABLES
************************************************************************
*定义内表ITABS(作为辅助使用)
  DATA: BEGIN OF ITABS OCCURS 10.
        INCLUDE STRUCTURE GLT0.
        DATA: TAMOUNT LIKE GLT0-HSLVT.
  DATA: END OF ITABS.

*定义本期数内表ITAB1
DATA: BEGIN OF ITAB1,
        CPXSSR LIKE GLT0-HSLVT,    "1产品销售收入
        CLCB LIKE GLT0-HSLVT,      "2材料成本
        CLCBCY LIKE GLT0-HSLVT,    "3材料成本差异
        SCCBCY LIKE GLT0-HSLVT,    "4生产成本差异
        JGCGTZ LIKE GLT0-HSLVT,    "41价格重估调整
        CPXSSJ LIKE GLT0-HSLVT,    "5产品销售税金几附加
        YTCKSJ LIKE GLT0-HSLVT,    "6预提当月出口税金
        CPXSML LIKE GLT0-HSLVT,    "7产品销售毛利

        XSFY LIKE GLT0-HSLVT,      "8销售费用
        GLFY LIKE GLT0-HSLVT,      "9管理费用
        CWFY LIKE GLT0-HSLVT,      "10财务费用
        YYFYHJ LIKE GLT0-HSLVT,    "11营业费用合计

        QTYWZC LIKE GLT0-HSLVT,     "12其他业务支出
        YYWZC LIKE GLT0-HSLVT,      "13营业外支出
        QTYWZCHJ LIKE GLT0-HSLVT,   "14其他支出合计

        QTYWSR LIKE GLT0-HSLVT,     "15其他业务收入
        YYWSR LIKE GLT0-HSLVT,      "16营业处收入
        QTYWSRHJ LIKE GLT0-HSLVT,   "17其他业务收入合计


        SQJLR LIKE GLT0-HSLVT,      "18税前净利润
        SDS   LIKE GLT0-HSLVT,      "19所得税
        JLR LIKE GLT0-HSLVT,        "20净利润
      END OF ITAB1.

*定义本期占销售百分比数内表ITAB2
DATA: ITAB2 LIKE ITAB1.
*定义去年本期数内表ITAB3
DATA: ITAB3 LIKE ITAB1.
*定义去年本期数占销售百分比内表ITAB4
DATA: ITAB4 LIKE ITAB1.
*定义本本期比去年本期百分比内表ITAB5
DATA: ITAB5 LIKE ITAB1.

*定义本年累计数内表ITAB6
DATA: ITAB6 LIKE ITAB1.
*定义去年累计数占销售百分比内表ITAB7
DATA: ITAB7 LIKE ITAB1.
*定义去年累计数内表ITAB8
DATA: ITAB8 LIKE ITAB1.
*定义去年累计数占销售百分比内表ITAB9
DATA: ITAB9 LIKE ITAB1.
*定义本去年累计数比去年本期百分比内表ITAB10
DATA: ITAB10 LIKE ITAB1.

*定义字符型字段的内表-本期数(用于转换数值的负号显示形式)
DATA: BEGIN OF ITAB1_C OCCURS 0,
        CPXSSR(20),    "1产品销售收入
        CLCB(20),      "2材料成本
        CLCBCY(20),    "3材料成本差异
        SCCBCY(20),    "4生产成本差异
        JGCGTZ(20),    "41价格重估调整
        CPXSSJ(20),    "5产品销售税金几附加
        YTCKSJ(20),    "6预提当月出口税金
        CPXSML(20),    "7产品销售毛利

        XSFY(20),      "8销售费用
        GLFY(20),      "9管理费用
        CWFY(20),      "10财务费用
        YYFYHJ(20),    "11营业费用合计

        QTYWZC(20),     "12其他业务支出
        YYWZC(20),      "13营业外支出
        QTYWZCHJ(20),   "14其他支出合计

        QTYWSR(20),     "15其他业务收入
        YYWSR(20),      "16营业处收入
        QTYWSRHJ(20),   "17其他业务收入合计


        SQJLR(20),      "18税前净利润
        SDS(20),        "19所得税
        JLR(20),        "20净利润
      END OF ITAB1_C.

*定义去年本期数内表ITAB3
DATA: ITAB3_C LIKE ITAB1_C.

*定义本年累计数内表ITAB6
DATA: ITAB6_C LIKE ITAB1_C.
*定义去年累计数内表ITAB8
DATA: ITAB8_C LIKE ITAB1_C.

*定义内表,处理非寄售出退货信息
DATA: BEGIN OF IT_PRINT_001 OCCURS 0.
        DATA FLAG.
        DATA CNO LIKE KNA1-KUNNR.          "客户代码,送达方
        DATA CNAME LIKE KNA1-NAME1.        "客户名称
        DATA CLASS LIKE KNA1-NAME1.        "事务类别
        DATA ORDERNO LIKE LIKP-VBELN.      "交退货单号
        DATA ORDERDATE LIKE LIKP-ERDAT.    "交货单/退货交货单日期
        DATA OLDERDATE LIKE LIKP-ERDAT.    "交货单原始日期
        DATA OTHERNO LIKE LIKP-VBELN.      "交货单参考单号
        DATA PRODNO LIKE LIPS-MATNR.       "产品型号
        DATA PRODNAME LIKE MAKT-MAKTX.     "产品名称
        DATA PRODQTY LIKE LIPS-LFIMG.      "数量
        DATA PRICE LIKE LIPS-NETPR.        "单价
        DATA AMOUNT LIKE LIPS-NETPR.       "金额

        DATA PRODQTY_C(20).
        DATA AMOUNT_C(20).
        DATA AUART LIKE VBAK-AUART.         "订单类型
        DATA VGBEL LIKE LIPS-VGBEL.         "参考凭证的凭证号(销售订单号)
        DATA VGPOS LIKE LIPS-VGPOS.         "销售和分销凭证的项目号
        DATA KDMAT LIKE LIPS-KDMAT.         "客户物料号
        DATA BSTNK LIKE VBAK-BSTNK.         "采购订单编号
        DATA VTWEG LIKE VBAK-VTWEG.         "分销渠道
        DATA VKORG LIKE VBAK-VKORG.         "公司代码
DATA: END OF IT_PRINT_001.

*定义内表IT_PRINT_003
DATA: BEGIN OF IT_PRINT_003 OCCURS 10.
        INCLUDE STRUCTURE MBEWH.
      DATA: MBEWH_DATE LIKE LIKP-ERDAT.
      DATA: BELNR LIKE MLCRP-BELNR.
DATA: END OF IT_PRINT_003.
*定义内表IT_PRINT_103
DATA: BEGIN OF IT_PRINT_103 OCCURS 10.
        INCLUDE STRUCTURE MLCRP.
      DATA: MBEWH_DATE LIKE LIKP-ERDAT.
DATA: END OF IT_PRINT_103.

*取销售净价及货币
DATA: BEGIN OF IT_PRINT_004 OCCURS 0.
        DATA NETPR LIKE VBAP-NETPR.        "净价
        DATA WAERK LIKE VBAP-WAERK.        "SD 凭证货币
        DATA KPEIN LIKE VBAP-KPEIN.        "条件定价单位
DATA: END OF IT_PRINT_004.
*取汇率
DATA: BEGIN OF IT_PRINT_005 OCCURS 0.
        DATA UKURS LIKE TCURR-UKURS.        "汇率
        DATA GDATU LIKE TCURR-GDATU.        "汇率有效起始日期
DATA: END OF IT_PRINT_005.

*定义内表IT_PRINT_006(为取损益表上的值)
DATA: BEGIN OF IT_PRINT_006 OCCURS 10.
        INCLUDE STRUCTURE ZFI01.
DATA: END OF IT_PRINT_006.

*定义2005/2期未数据内表
DATA: BEGIN OF ITAB_FIRST OCCURS 10.
        INCLUDE STRUCTURE ZFI04.
DATA: END OF ITAB_FIRST.

*往数据库增加运行日志
  DATA: BEGIN OF IT_ZREPORTLOG OCCURS  0.
    INCLUDE TYPE ZREPORTLOG.
  DATA: END OF IT_ZREPORTLOG.

************************************************************************
* CONSTANTS : 定义常量
************************************************************************
DATA: L_PRICE_SR TYPE P DECIMALS 6,
      L_PRICE_CB TYPE P DECIMALS 6,
      L_AMOUNT_SR LIKE LIPS-NETPR,
      L_AMOUNT_CB LIKE LIPS-NETPR,
      L_TAX TYPE P DECIMALS 2 VALUE '0.17'.

************************************************************************
* TYPE : 定义数据类型
************************************************************************
TYPE-POOLS: SLIS.

************************************************************************
* DATA : 定义变量
************************************************************************
*单据表格上相关坐标值定义
DATA: A1 TYPE I VALUE 0,
      A2 TYPE I VALUE 0,
      A3 TYPE I VALUE 0,
      A4 TYPE I VALUE 0,
      A5 TYPE I VALUE 0,
      A6 TYPE I VALUE 0,
      A7 TYPE I VALUE 0,
      A8 TYPE I VALUE 0,
      A9 TYPE I VALUE 0,
      A10 TYPE I VALUE 0,
      A11 TYPE I VALUE 0,
      A12 TYPE I VALUE 0.

DATA: B1 TYPE I VALUE 0,
      B2 TYPE I VALUE 0,
      B3 TYPE I VALUE 0,
      B4 TYPE I VALUE 0,
      B5 TYPE I VALUE 0,
      B6 TYPE I VALUE 0,
      B7 TYPE I VALUE 0,
      B8 TYPE I VALUE 0,
      B9 TYPE I VALUE 0,
      B10 TYPE I VALUE 0,
      B11 TYPE I VALUE 0.

DATA: G_DAY(2),
      G_LEN TYPE I,
      G_MOD TYPE I,
      P_RYEAR_L(4),                 "去年度
      G_BUKRS LIKE GLT0-BUKRS, "公司
      G_PRODNO LIKE LIPS-MATNR,
      G_DATE LIKE LIKP-ERDAT,
      G_PRICE TYPE P DECIMALS 6,
      G_VGBEL LIKE VBAK-VGBEL.
************************************************************************
* DEFINE: 定义宏
************************************************************************
*普通报表格式的输出宏
DATA L8(15).
DEFINE GRID1.                                           "数据输出 负号前至
  CLEAR L8.
  MOVE &1 TO L8.
  IF &1 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT /A1   SY-VLINE.
  WRITE: AT  B1   L8  LEFT-JUSTIFIED.
  WRITE: AT  A2   SY-VLINE.
  CLEAR L8.
  MOVE &2 TO L8.
  IF &2 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  B2   L8  LEFT-JUSTIFIED.
  WRITE: AT  A3   SY-VLINE.
  CLEAR L8.
  MOVE &3 TO L8.
  IF &3 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  B3   L8 LEFT-JUSTIFIED.
  WRITE: AT  A4   SY-VLINE.
  CLEAR L8.
  MOVE &4 TO L8.
  IF &4 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  B4   L8 LEFT-JUSTIFIED.
  CLEAR L8.
  MOVE &5 TO L8.
  IF &5 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  A5   SY-VLINE.
  WRITE: AT  B5   L8 LEFT-JUSTIFIED.
  WRITE: AT  A6   SY-VLINE.
  WRITE: AT  B6   &6 LEFT-JUSTIFIED.
  WRITE: AT  A7   SY-VLINE.
  CLEAR L8.
  MOVE &7 TO L8.
  IF &7 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  B7   L8 LEFT-JUSTIFIED.
  WRITE: AT  A8   SY-VLINE.
  CLEAR L8.
  MOVE &8 TO L8.
  IF &8 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  B8   L8 LEFT-JUSTIFIED.
  WRITE: AT  A9   SY-VLINE.
  CLEAR L8.
  MOVE &9 TO L8.
  IF &9 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  B9   L8 LEFT-JUSTIFIED.
END-OF-DEFINITION.

DEFINE GRID11.
  WRITE: AT  A10   SY-VLINE.
  CLEAR L8.
  MOVE &1 TO L8.
  IF &1 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  B10   L8 LEFT-JUSTIFIED.
  WRITE: AT  A11   SY-VLINE.
  CLEAR L8.
  MOVE &2 TO L8.
  IF &2 < 0.
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
       CHANGING
          VALUE   = L8
     EXCEPTIONS
         OTHERS  = 1.
  ENDIF.
  SHIFT L8 LEFT DELETING LEADING SPACE.
  WRITE: AT  B11   L8 LEFT-JUSTIFIED.
  WRITE: AT  A12   SY-VLINE.
END-OF-DEFINITION.

DEFINE GRID2.                                       "输出表头
  WRITE: AT /A1   SY-VLINE.
  WRITE: AT  B1   &1  LEFT-JUSTIFIED.
  WRITE: AT  A2   SY-VLINE.
  WRITE: AT  B2   &2  LEFT-JUSTIFIED.
  WRITE: AT  A3   SY-VLINE.
  WRITE: AT  B3   &3 LEFT-JUSTIFIED.
  WRITE: AT  A4   SY-VLINE.
  WRITE: AT  B4   &4 LEFT-JUSTIFIED.
  WRITE: AT  A5   SY-VLINE.
  WRITE: AT  B5   &5 LEFT-JUSTIFIED.
  WRITE: AT  A6   SY-VLINE.
  WRITE: AT  B6   &6 LEFT-JUSTIFIED.
  WRITE: AT  A7   SY-VLINE.
  WRITE: AT  B7   &7 LEFT-JUSTIFIED.
  WRITE: AT  A8   SY-VLINE.
  WRITE: AT  B8   &8 LEFT-JUSTIFIED.
  WRITE: AT  A9   SY-VLINE.
  WRITE: AT  B9   &9 LEFT-JUSTIFIED.
END-OF-DEFINITION.

DEFINE GRID22.                                       "输出表头
  WRITE: AT  A10   SY-VLINE.
  WRITE: AT  B10   &1 LEFT-JUSTIFIED.
  WRITE: AT  A11   SY-VLINE.
  WRITE: AT  B11   &2 LEFT-JUSTIFIED.
  WRITE: AT  A12   SY-VLINE.
END-OF-DEFINITION.
************************************************************************
*  SELECTION SCREEN : 定义报表筛选条件
************************************************************************
*确定过滤参数
SELECTION-SCREEN BEGIN OF BLOCK BLK_001 WITH FRAME. TITLE BLK_001 .
   SELECTION-SCREEN SKIP.
    PARAMETERS : P_RYEAR(4) TYPE C OBLIGATORY DEFAULT SY-DATUM+0(4)."报表年度
    PARAMETERS : P_MONAT(2) TYPE C OBLIGATORY DEFAULT SY-DATUM+4(2)."报表期间
   SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK BLK_001.


*===============================事    件===============================*
************************************************************************
* INITIALIZATION.启动程序开始执行
************************************************************************
INITIALIZATION.
  BLK_001 = '检索参数'.
  PERFORM. SUB_INI.
  P_RYEAR = SY-DATUM(4).       "会计年度
  P_RYEAR_L = P_RYEAR - 1.
************************************************************************
* AT SELECTION SCREEN:
************************************************************************
AT SELECTION-SCREEN.
  PERFORM. F_CHECK_INPUT.       "检查用户输入
************************************************************************
* START OF SELECTION:
************************************************************************
START-OF-SELECTION.
*往数据库增加运行日志
  IT_ZREPORTLOG-MANDT = SY-MANDT.
  IT_ZREPORTLOG-TCODE = SY-TCODE.
  IT_ZREPORTLOG-DATUM = SY-DATUM.
  IT_ZREPORTLOG-UZEIT = SY-UZEIT.
  IT_ZREPORTLOG-UNAME = SY-UNAME.
  IT_ZREPORTLOG-TITLE = SY-TITLE.
  APPEND IT_ZREPORTLOG.
  INSERT INTO ZREPORTLOG VALUES IT_ZREPORTLOG .

  PERFORM. CAL_DAY.    "每月天数判断

  PERFORM. F_READ_DATA_GLT0.       "去GLT0
  PERFORM. F_READ_DATA_GLT0_999.   "取0999 的 GLT0
  PERFORM. F_READ_DATA_XS.         "去销售订单数据

  PERFORM. F_CHANGE.         "去负号
  PERFORM. SUB_TOTAL.        "最终数据合计及总计
  PERFORM. SUB_JS.           "计算百分比
************************************************************************
* END OF SELECTION
************************************************************************
END-OF-SELECTION.
  PERFORM. F_PRINT_REPORT.
************************************************************************
* TOP OF PAGE
************************************************************************
TOP-OF-PAGE.
  PERFORM. SUB_HEAD.
************************************************************************
* END OF PAGE
************************************************************************
END-OF-PAGE.
  PERFORM. SUB_BOTTOM.


*===============================子 例 程===============================*
*&---------------------------------------------------------------------*
*过滤条件有效性检查
*&---------------------------------------------------------------------*
FORM. F_CHECK_INPUT.
DATA: L_DATE LIKE LIKP-ERDAT.

  IF STRLEN( P_MONAT ) = 1.
    CONCATENATE '0' P_MONAT INTO P_MONAT.
  ENDIF.

  CONCATENATE P_RYEAR P_MONAT '01' INTO L_DATE.
  IF L_DATE <= '20050201'.
    MESSAGE E001.    "不能运行该期间的报表!
  ENDIF.

  IF ( P_MONAT < '01' ) OR ( P_MONAT > '16' ).
    MESSAGE E000.    "该会计期间不存在!
  ENDIF.
ENDFORM.                    " F_CHECK_INPUT
*&---------------------------------------------------------------------*
*从数据库中读取数据,填充报表输出时所用的内表
*&---------------------------------------------------------------------*
FORM. F_READ_DATA_GLT0 .
  PERFORM. GET_BN_GLT0.
  PERFORM. GET_QN_GLT0.
ENDFORM.                    " F_READ_DATA
*&---------------------------------------------------------------------*
*&      去负号
*&---------------------------------------------------------------------*
FORM. F_CHANGE.
*本月和本年累计
*差异
ITAB1-CLCBCY = 0 - ITAB1-CLCBCY.
ITAB6-CLCBCY = 0 - ITAB6-CLCBCY.
ITAB1-SCCBCY = 0 - ITAB1-SCCBCY.
ITAB6-SCCBCY = 0 - ITAB6-SCCBCY.
*ITAB1-JGCGTZ = 0 - ITAB1-JGCGTZ.
*ITAB6-JGCGTZ = 0 - ITAB6-JGCGTZ.

*本月数
*ITAB1-QTYWSR = 0 - ITAB1-QTYWSR.
ITAB1-QTYWZC = 0 - ITAB1-QTYWZC.
ITAB1-YYWSR = 0 - ITAB1-YYWSR.

*本年累计数
*ITAB6-QTYWSR = 0 - ITAB6-QTYWSR.
ITAB6-QTYWZC = 0 - ITAB6-QTYWZC.
ITAB6-YYWSR = 0 - ITAB6-YYWSR.

*上年本月和上年累计
*差异
ITAB3-CLCBCY = 0 - ITAB3-CLCBCY.
ITAB8-CLCBCY = 0 - ITAB8-CLCBCY.
ITAB3-SCCBCY = 0 - ITAB3-SCCBCY.
ITAB8-SCCBCY = 0 - ITAB8-SCCBCY.
*ITAB3-JGCGTZ = 0 - ITAB3-JGCGTZ.
*ITAB8-JGCGTZ = 0 - ITAB8-JGCGTZ.

*本月数
*ITAB1-QTYWSR = 0 - ITAB1-QTYWSR.
ITAB3-QTYWZC = 0 - ITAB3-QTYWZC.
ITAB3-YYWSR = 0 - ITAB3-YYWSR.

*本年累计数
*ITAB6-QTYWSR = 0 - ITAB6-QTYWSR.
ITAB8-QTYWZC = 0 - ITAB8-QTYWZC.
ITAB8-YYWSR = 0 - ITAB8-YYWSR.

ENDFORM.
*&---------------------------------------------------------------------*
*&      最终数据合计及总计
*&---------------------------------------------------------------------*
FORM. SUB_TOTAL.
*计算本年
*处理ITAB1本期
  "7产品销售毛利 1-2-3-4-5-8
  ITAB1-CPXSML = ITAB1-CPXSSR - ITAB1-CLCB  - ITAB1-CLCBCY - ITAB1-SCCBCY
               - ITAB1-JGCGTZ - ITAB1-CPXSSJ - ITAB1-YTCKSJ.

  "11营业费用合计
  ITAB1-YYFYHJ = ITAB1-XSFY + ITAB1-GLFY + ITAB1-CWFY.

  "14其他指出合计
  ITAB1-QTYWZCHJ = ITAB1-QTYWZC + ITAB1-YYWZC.

  "17其他收入合计
  ITAB1-QTYWSRHJ = ITAB1-QTYWSR + ITAB1-YYWSR.

  "18税前净利润
  ITAB1-SQJLR = ITAB1-CPXSML - ITAB1-YYFYHJ - ITAB1-QTYWZCHJ + ITAB1-QTYWSRHJ.

  "20净利润
  ITAB1-JLR = ITAB1-SQJLR - ITAB1-SDS.

*处理ITAB6本年累计
  "7产品销售毛利 1-2-3-4-5-8
  ITAB6-CPXSML = ITAB6-CPXSSR - ITAB6-CLCB  - ITAB6-CLCBCY - ITAB6-SCCBCY
               - ITAB6-JGCGTZ - ITAB6-CPXSSJ - ITAB6-YTCKSJ.

  "11营业费用合计
  ITAB6-YYFYHJ = ITAB6-XSFY + ITAB6-GLFY + ITAB6-CWFY.

  "14其他指出合计
  ITAB6-QTYWZCHJ = ITAB6-QTYWZC + ITAB6-YYWZC.

  "17其他收入合计
  ITAB6-QTYWSRHJ = ITAB6-QTYWSR + ITAB6-YYWSR.

  "18税前净利润
  ITAB6-SQJLR = ITAB6-CPXSML - ITAB6-YYFYHJ - ITAB6-QTYWZCHJ + ITAB6-QTYWSRHJ.

  "20净利润
  ITAB6-JLR = ITAB6-SQJLR - ITAB6-SDS.

*计算去年
*处理ITAB3本期
  "7产品销售毛利 1-2-3-4-5-8
  ITAB3-CPXSML = ITAB3-CPXSSR - ITAB3-CLCB  - ITAB3-CLCBCY - ITAB3-SCCBCY
               - ITAB3-JGCGTZ - ITAB3-CPXSSJ - ITAB3-YTCKSJ.

  "11营业费用合计
  ITAB3-YYFYHJ = ITAB3-XSFY + ITAB3-GLFY + ITAB3-CWFY.

  "14其他指出合计
  ITAB3-QTYWZCHJ = ITAB3-QTYWZC + ITAB3-YYWZC.

  "17其他收入合计
  ITAB3-QTYWSRHJ = ITAB3-QTYWSR + ITAB3-YYWSR.

  "18税前净利润
  ITAB3-SQJLR = ITAB3-CPXSML - ITAB3-YYFYHJ - ITAB3-QTYWZCHJ + ITAB3-QTYWSRHJ.

  "20净利润
  ITAB3-JLR = ITAB3-SQJLR - ITAB3-SDS.

*处理ITAB6本年累计
  "7产品销售毛利 1-2-3-4-5-8
  ITAB8-CPXSML = ITAB8-CPXSSR - ITAB8-CLCB  - ITAB8-CLCBCY - ITAB8-SCCBCY
               - ITAB8-JGCGTZ - ITAB8-CPXSSJ - ITAB8-YTCKSJ.

  "11营业费用合计
  ITAB8-YYFYHJ = ITAB8-XSFY + ITAB8-GLFY + ITAB8-CWFY.

  "14其他指出合计
  ITAB8-QTYWZCHJ = ITAB8-QTYWZC + ITAB8-YYWZC.

  "17其他收入合计
  ITAB8-QTYWSRHJ = ITAB8-QTYWSR + ITAB8-YYWSR.

  "18税前净利润
  ITAB8-SQJLR = ITAB8-CPXSML - ITAB8-YYFYHJ - ITAB8-QTYWZCHJ + ITAB8-QTYWSRHJ.

  "20净利润
  ITAB8-JLR = ITAB8-SQJLR - ITAB8-SDS.
ENDFORM.
*&---------------------------------------------------------------------*
*普通报表格式的打印
*&---------------------------------------------------------------------*
FORM. F_PRINT_REPORT.
GRID1 ITAB1-CPXSSR ITAB2-CPXSSR ITAB3-CPXSSR ITAB4-CPXSSR ITAB5-CPXSSR
      '产品销售收入' ITAB6-CPXSSR ITAB7-CPXSSR ITAB8-CPXSSR.
GRID11 ITAB9-CPXSSR ITAB10-CPXSSR.
ULINE.

GRID1 ITAB1-CLCB ITAB2-CLCB ITAB3-CLCB ITAB4-CLCB ITAB5-CLCB
      '产品销售成本' ITAB6-CLCB ITAB7-CLCB ITAB8-CLCB.
GRID11 ITAB9-CLCB ITAB10-CLCB.
ULINE.

GRID1 ITAB1-CLCBCY ITAB2-CLCBCY ITAB3-CLCBCY ITAB4-CLCBCY ITAB5-CLCBCY
      '材料成本差异' ITAB6-CLCBCY ITAB7-CLCBCY ITAB8-CLCBCY.
GRID11 ITAB9-CLCBCY ITAB10-CLCBCY.
ULINE.

GRID1 ITAB1-SCCBCY ITAB2-SCCBCY ITAB3-SCCBCY ITAB4-SCCBCY ITAB5-SCCBCY
      '生产成本差异' ITAB6-SCCBCY ITAB7-SCCBCY ITAB8-SCCBCY.
GRID11 ITAB9-SCCBCY ITAB10-SCCBCY.
ULINE.

GRID1 ITAB1-JGCGTZ ITAB2-JGCGTZ ITAB3-JGCGTZ ITAB4-JGCGTZ ITAB5-JGCGTZ
      '价格重估调整' ITAB6-JGCGTZ ITAB7-JGCGTZ ITAB8-JGCGTZ.
GRID11 ITAB9-JGCGTZ ITAB10-JGCGTZ.
ULINE.

GRID1 ITAB1-CPXSSJ ITAB2-CPXSSJ ITAB3-CPXSSJ ITAB4-CPXSSJ ITAB5-CPXSSJ
      '产品销售税金及附加' ITAB6-CPXSSJ ITAB7-CPXSSJ ITAB8-CPXSSJ.
GRID11 ITAB9-CPXSSJ ITAB10-CPXSSJ.
ULINE.

GRID1 ITAB1-YTCKSJ ITAB2-YTCKSJ ITAB3-YTCKSJ ITAB4-YTCKSJ ITAB5-YTCKSJ
      '预提当月出口税金' ITAB6-YTCKSJ ITAB7-YTCKSJ ITAB8-YTCKSJ.
GRID11 ITAB9-YTCKSJ ITAB10-YTCKSJ.
ULINE.

GRID1 ITAB1-CPXSML ITAB2-CPXSML ITAB3-CPXSML ITAB4-CPXSML ITAB5-CPXSML
      '产品销售毛利' ITAB6-CPXSML ITAB7-CPXSML ITAB8-CPXSML.
GRID11 ITAB9-CPXSML ITAB10-CPXSML.
ULINE.

GRID1 ITAB1-XSFY ITAB2-XSFY ITAB3-XSFY ITAB4-XSFY ITAB5-XSFY
      '销售费用' ITAB6-XSFY ITAB7-XSFY ITAB8-XSFY.
GRID11 ITAB9-XSFY ITAB10-XSFY.
ULINE.

GRID1 ITAB1-GLFY ITAB2-GLFY ITAB3-GLFY ITAB4-GLFY ITAB5-GLFY
      '管理费用' ITAB6-GLFY ITAB7-GLFY ITAB8-GLFY.
GRID11 ITAB9-GLFY ITAB10-GLFY.
ULINE.

GRID1 ITAB1-CWFY ITAB2-CWFY ITAB3-CWFY ITAB4-CWFY ITAB5-CWFY
      '财务费用' ITAB6-CWFY ITAB7-CWFY ITAB8-CWFY.
GRID11 ITAB9-CWFY ITAB10-CWFY.
ULINE.

GRID1 ITAB1-YYFYHJ ITAB2-YYFYHJ ITAB3-YYFYHJ ITAB4-YYFYHJ ITAB5-YYFYHJ
      '营业费用合计' ITAB6-YYFYHJ ITAB7-YYFYHJ ITAB8-YYFYHJ.
GRID11 ITAB9-YYFYHJ ITAB10-YYFYHJ.
ULINE.

GRID1 ITAB1-QTYWZC ITAB2-QTYWZC ITAB3-QTYWZC ITAB4-QTYWZC ITAB5-QTYWZC
      '其它业务支出' ITAB6-QTYWZC ITAB7-QTYWZC ITAB8-QTYWZC.
GRID11 ITAB9-QTYWZC ITAB10-QTYWZC.
ULINE.

GRID1 ITAB1-YYWZC ITAB2-YYWZC ITAB3-YYWZC ITAB4-YYWZC ITAB5-YYWZC
      '营业外支出' ITAB6-YYWZC ITAB7-YYWZC ITAB8-YYWZC.
GRID11 ITAB9-YYWZC ITAB10-YYWZC.
ULINE.

GRID1 ITAB1-QTYWZCHJ ITAB2-QTYWZCHJ ITAB3-QTYWZCHJ ITAB4-QTYWZCHJ ITAB5-QTYWZCHJ
      '其它支出合计' ITAB6-QTYWZCHJ ITAB7-QTYWZCHJ ITAB8-QTYWZCHJ.
GRID11 ITAB9-QTYWZCHJ ITAB10-QTYWZCHJ.
ULINE.

GRID1 ITAB1-QTYWSR ITAB2-QTYWSR ITAB3-QTYWSR ITAB4-QTYWSR ITAB5-QTYWSR
      '其它业务收入' ITAB6-QTYWSR ITAB7-QTYWSR ITAB8-QTYWSR.
GRID11 ITAB9-QTYWSR ITAB10-QTYWSR.
ULINE.

GRID1 ITAB1-YYWSR ITAB2-YYWSR ITAB3-YYWSR ITAB4-YYWSR ITAB5-YYWSR
      '营业外收入' ITAB6-YYWSR ITAB7-YYWSR ITAB8-YYWSR.
GRID11 ITAB9-YYWSR ITAB10-YYWSR.
ULINE.

GRID1 ITAB1-QTYWSRHJ ITAB2-QTYWSRHJ ITAB3-QTYWSRHJ ITAB4-QTYWSRHJ ITAB5-QTYWSRHJ
      '其它业务收入合计' ITAB6-QTYWSRHJ ITAB7-QTYWSRHJ ITAB8-QTYWSRHJ.
GRID11 ITAB9-QTYWSRHJ ITAB10-QTYWSRHJ.
ULINE.

GRID1 ITAB1-SQJLR ITAB2-SQJLR ITAB3-SQJLR ITAB4-SQJLR ITAB5-SQJLR
      '税前净利润' ITAB6-SQJLR ITAB7-SQJLR ITAB8-SQJLR.
GRID11 ITAB9-SQJLR ITAB10-SQJLR.
ULINE.

GRID1 ITAB1-SDS ITAB2-SDS ITAB3-SDS ITAB4-SDS ITAB5-SDS
      '所得税' ITAB6-SDS ITAB7-SDS ITAB8-SDS.
GRID11 ITAB9-SDS ITAB10-SDS.
ULINE.

GRID1 ITAB1-JLR ITAB2-JLR ITAB3-JLR ITAB4-JLR ITAB5-JLR
      '净利润' ITAB6-JLR ITAB7-JLR ITAB8-JLR.
GRID11 ITAB9-JLR ITAB10-JLR.
ULINE.

PERFORM. SUB_BOTTOM.

*-将本期值保存到ZFI01中.
*  PERFORM. F_SAVE.
ENDFORM.                     " F_PRINT_REPORT
*&---------------------------------------------------------------------*
*&      将本期值保存到ZFI01中
*&---------------------------------------------------------------------*
FORM. F_SAVE.
*DATA: FLAG TYPE I,
*      L_DATE LIKE LIKP-KODAT,
*      L_RYEAR(4),
*      L_MONAT(2),
*      L_DAY(2),
*      L_MOD TYPE I.
*
*  SELECT *
*    FROM ZFI01
*    INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_006
*    WHERE WERKS = P_BUKRS AND
*          RYEAR = P_RYEAR AND
*          RPMAX = P_MONAT.
*
*  FLAG = 0.
*  LOOP AT IT_PRINT_006.
*    UPDATE ZFI01
*      SET AMOUNT = ITAB1-JLR
*          JGCGTZ = ITAB1-JGCGTZ
*          FLAG = '2'
*          AEDAT = SY-DATUM
*          AENAM = SY-UNAME
*      WHERE WERKS = P_BUKRS AND
*            RYEAR = P_RYEAR AND
*            RPMAX = P_MONAT.
*    FLAG = 1.
*  ENDLOOP.
*
*  "整理日期
*  L_RYEAR = P_RYEAR.
*  L_MONAT = P_MONAT.
*
*  IF L_MONAT = '04' OR L_MONAT = '06' OR
*    L_MONAT = '09' OR L_MONAT = '11'.
*    L_DAY = '30'.
*  ELSEIF L_MONAT = '02'.
*    L_MOD = L_RYEAR MOD 4.
*    IF L_MOD = 0.
*      L_DAY = '29'.
*    ELSE.
*      L_DAY = '28'.
*    ENDIF.
*  ELSE.
*    L_DAY = '31'.
*  ENDIF.
*
*  CONCATENATE L_RYEAR L_MONAT L_DAY INTO L_DATE.
*
*  CLEAR IT_PRINT_006.
*  REFRESH IT_PRINT_006.
*  IT_PRINT_006-FLAG = '2'.         "1表示对内损益表,2表示合并损益表
*  IT_PRINT_006-WERKS = P_BUKRS.
*  IT_PRINT_006-RYEAR = P_RYEAR.
*  IT_PRINT_006-RPMAX = P_MONAT.
*  IT_PRINT_006-PODAT = L_DATE.
*  IT_PRINT_006-AMOUNT = ITAB1-JLR.
*  IT_PRINT_006-JGCGTZ = ITAB1-JGCGTZ.
*  IT_PRINT_006-TEXT = ''.
*  IT_PRINT_006-ERDAT = SY-DATUM.
*  IT_PRINT_006-AEDAT = SY-DATUM.
*  IT_PRINT_006-ERNAM = SY-UNAME.
*  IT_PRINT_006-AENAM = SY-UNAME.
*
*  IF FLAG = 0.
*    INSERT INTO ZFI01
*      VALUES IT_PRINT_006 .
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      单据表头显示
*&---------------------------------------------------------------------*
FORM. SUB_HEAD.
DATA:L_COMP(22),
     L_TAXNO(15).

  "取税款所属期
  IF P_MONAT > '12'.
    P_MONAT = '12'.
  ENDIF.

  WRITE: /55  '合 并 损 益 表'.
  SKIP.
*  WRITE: /2 '纳税人识别号:',L_TAXNO.
*  WRITE: 88 '纳税人名称:',L_COMP.
  WRITE: /2 '报表期间:',P_RYEAR,'-',P_MONAT,'-','01',
            '至',P_RYEAR,'-',P_MONAT,'-',G_DAY.
  WRITE: 88 '填表日期:',SY-DATUM,'    金额单位:人民币元'.
  ULINE  AT /A1 .

  GRID2  '本月数' '占销售%' '去年同期数' '占销售%' '比去年%' '项目' '本年累计数' '占销售%' '去年同期数'.
  GRID22 '占销售%' '比去年%'.
  ULINE.
ENDFORM.                    " SUB_OUTPUTHEAD
*&---------------------------------------------------------------------
*&      单据表尾显示
*&---------------------------------------------------------------------
FORM. SUB_BOTTOM.
 WRITE: AT 2 '单位负责人:','                财会负责人:'.
 WRITE: AT 80 '复核:','                  制表:'.
ENDFORM.                    "SUB_BOTTOM
*&---------------------------------------------------------------------*
*       各月天数判断
*----------------------------------------------------------------------*
FORM. CAL_DAY.
 IF P_MONAT = '04' OR P_MONAT = '06' OR
   P_MONAT = '09' OR P_MONAT = '11'.
   G_DAY = '30'.
 ELSEIF P_MONAT = '02'.
   G_MOD = P_RYEAR MOD 4.
   IF G_MOD = 0.
     G_DAY = '29'.
   ELSE.
     G_DAY = '28'.
   ENDIF.
 ELSE.
   G_DAY = '31'.
 ENDIF.
 CONDENSE G_DAY NO-GAPS.
ENDFORM.                    "CAL_DAY
*&---------------------------------------------------------------------*
*&      计算单价
*&---------------------------------------------------------------------*
FORM. F_GET_PRICE.
DATA: L_DATE LIKE LIKP-KODAT,
      L_RYEAR(4),
      L_MONAT(2),
      L_DAY(2),
      L_MOD TYPE I,
      L_PEINH LIKE MBEW-PEINH.        "价格单位

  CLEAR IT_PRINT_003.
  REFRESH IT_PRINT_003.
  CLEAR IT_PRINT_103.
  REFRESH IT_PRINT_103.
*--取价格释放的记录(MBEWH)
  SELECT *
    FROM MBEWH
    INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_003
    WHERE MATNR = G_PRODNO                "物料号
      AND BWKEY = G_BUKRS                 "估价范围
      AND BWTAR = ''                      "评估类型
      AND VPRSV = 'S'.                    "价格控制指示符

*--取价格更改的记录(MR21)
  SELECT A~BELNR                      "物料明细帐凭证/价格更改凭证的编号
         A~KJAHR                      "库存年度
         A~POSNR                      "物料明细帐凭证项目
         A~BDATJ                      "记帐日期 YYYY
         A~POPER                      "过帐期间
         A~STPRS_NEW                  "新的标准价格
         A~PEINH_NEW                  "物料分类帐信息价格单位
         B~MATNR                      "物料号
    FROM MLCRP AS A INNER JOIN MLIT AS B ON A~BELNR = B~BELNR
         AND A~POSNR = B~POSNR
    INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_103
    WHERE B~MATNR = G_PRODNO                 "物料号
      AND B~BWKEY = G_BUKRS.                 "估价范围

  "MBEWH与MR21两记录合并
  LOOP AT IT_PRINT_103.
    IT_PRINT_003-BELNR = IT_PRINT_103-BELNR.
    IT_PRINT_003-LFGJA = IT_PRINT_103-BDATJ.
    IT_PRINT_003-LFMON = IT_PRINT_103-POPER.
    IT_PRINT_003-STPRS = IT_PRINT_103-STPRS_NEW.
    IT_PRINT_003-PEINH = IT_PRINT_103-PEINH_NEW.
    APPEND IT_PRINT_003.
  ENDLOOP.

  "整理日期
  LOOP AT IT_PRINT_003.
    L_RYEAR = IT_PRINT_003-LFGJA.
    L_MONAT = IT_PRINT_003-LFMON.

    IF L_MONAT = '04' OR L_MONAT = '06' OR
      L_MONAT = '09' OR L_MONAT = '11'.
      L_DAY = '30'.
    ELSEIF L_MONAT = '02'.
      L_MOD = L_RYEAR MOD 4.
      IF L_MOD = 0.
        L_DAY = '29'.
      ELSE.
        L_DAY = '28'.
      ENDIF.
    ELSE.
      L_DAY = '31'.
    ENDIF.

    CONCATENATE L_RYEAR L_MONAT L_DAY INTO L_DATE.
    IT_PRINT_003-MBEWH_DATE = L_DATE.
    MODIFY IT_PRINT_003.
  ENDLOOP.

  "排序日期递增、编号递减
  SORT IT_PRINT_003 BY MBEWH_DATE ASCENDING BELNR DESCENDING.
*  SORT IT_PRINT_003 BY MBEWH_DATE DESCENDING BELNR ASCENDING.

  "取最近的价格
  G_PRICE = 0.
  LOOP AT IT_PRINT_003.
    IF IT_PRINT_003-MBEWH_DATE >= G_DATE.
      G_PRICE = IT_PRINT_003-STPRS / IT_PRINT_003-PEINH.
      EXIT.
    ENDIF.
  ENDLOOP.

  "假如上面取不到值,用如下处理。
  IF G_PRICE = 0.
    "取该物料的价格单位
    L_PEINH = 1.
    SELECT SINGLE PEINH
       FROM MBEW
       INTO L_PEINH
      WHERE MATNR = G_PRODNO      "物料号
        AND BWKEY = G_BUKRS.      "估价范围

    "取物料标准价格及金额
    SELECT SINGLE STPRS
      FROM MBEW
      INTO G_PRICE
      WHERE MATNR = G_PRODNO     "物料号
        AND BWKEY = G_BUKRS.     "估价范围
    G_PRICE = G_PRICE / L_PEINH.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      单据表格上相关坐标值初始
*&---------------------------------------------------------------------*
FORM. SUB_INI .
  MOVE 1   TO  A1.   "项目
  MOVE 2   TO  B1.
  MOVE 17  TO  A2.   "行次
  MOVE 18  TO  B2.
  MOVE 25  TO  A3.   "本月数
  MOVE 26  TO  B3.
  MOVE 41  TO  A4.   "本年累计数
  MOVE 42  TO  B4.
  MOVE 49 TO  A5.
  MOVE 50 TO  B5.
  MOVE 58 TO  A6.
  MOVE 59 TO  B6.
  MOVE 77 TO  A7.
  MOVE 78 TO  B7.
  MOVE 93 TO  A8.
  MOVE 94 TO  B8.
  MOVE 101 TO  A9.
  MOVE 102 TO  B9.
  MOVE 117 TO  A10.
  MOVE 118 TO  B10.
  MOVE 125 TO  A11.
  MOVE 126 TO  B11.
  MOVE 135 TO  A12.
ENDFORM.                    " SUB_INI
*&---------------------------------------------------------------------*
*&      Form  F_READ_DATA_XS
*&---------------------------------------------------------------------*
FORM. F_READ_DATA_XS .
  PERFORM. GET_BQ.               "本期
  PERFORM. GET_BNLJ.             "本年累计
  PERFORM. GET_BQ_Q.             "去年本期
  PERFORM. GET_BNLJ_Q.           "去年累计

  PERFORM. F_JGCGTZ.             "价格重估调整
ENDFORM.                    " F_READ_DATA_XS
*&---------------------------------------------------------------------*
*&      Form  get_bq
*&---------------------------------------------------------------------*
FORM. GET_BQ .
*日期初始化
DATA: G_DATE1 LIKE LIKP-LFDAT,             "月初日期
      G_DATE2 LIKE LIKP-LFDAT.             "月末日期

  G_DATE1(4) = P_RYEAR.
  G_DATE1+4(2) = P_MONAT.
  G_DATE1+6(2) = '01'.
  G_DATE2 = G_DATE1.
  IF P_MONAT = '12'.
    G_DATE2(4) = P_RYEAR + 1.
    G_DATE2+4(2) = '01'.
    G_DATE2 = G_DATE2 - 1.
  ELSE.
    G_DATE2+4(2) = P_MONAT + 1.
    G_DATE2 = G_DATE2 - 1.
  ENDIF.
*END

*取发货的数据
  L_AMOUNT_SR = 0.
  L_AMOUNT_CB = 0.
  REFRESH IT_PRINT_001.

  "取交货数量
  SELECT A~MATNR AS PRODNO               "物料号
         A~LFIMG AS PRODQTY              "实际已交货量
         B~KUNNR AS CNO                  "送达方
         B~VBELN AS ORDERNO              "交货单号
         B~KODAT AS ORDERDATE            "拣配日期
         B~LFART AS CLASS                "交货类型
         A~VGBEL                         "参考凭证的凭证号(销售订单号)
         A~KDMAT                         "
         D~BSTNK                         "客户采购订单编号
         D~VTWEG                         "分销渠道
         D~VKORG                         "公司代码
         A~VGPOS                         "参考项目号
    FROM LIPS AS A INNER JOIN LIKP AS B ON A~VBELN = B~VBELN
         INNER JOIN VBUK AS C ON A~VBELN = C~VBELN
         INNER JOIN VBAK AS D ON A~VGBEL = D~VBELN
*         INNER JOIN VBUP AS E ON A~VBELN = E~VBELN
    INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
    WHERE B~KODAT >= G_DATE1 AND
          B~KODAT <= G_DATE2 AND
*          D~VKORG = P_BUKRS AND         "公司代码
          B~LFART = 'LF' AND            "交货
          A~ERNAM <> 'SD01' AND         "去掉补单记录
          A~ERNAM <> 'SD02' AND
          A~ERNAM <> 'SD03' AND
          ( D~AUART = 'ZDL' OR          "代理销售订单
            D~AUART = 'ZOR') AND        "
*          C~WBSTK <> 'C' AND            "说明不包含已发货过账
          ( C~KOSTK = 'B' OR            "全部拣配/堆放状态
            C~KOSTK = 'C' ).
*            AND C~FKSTK <> 'C'.             "出具发票状态

  "取单价及金额
  LOOP AT IT_PRINT_001.
    "取销售收入
    REFRESH IT_PRINT_004.
    REFRESH IT_PRINT_005.
    L_PRICE_SR = 0.
    L_PRICE_CB = 0.
    SELECT NETPR WAERK KPEIN
      FROM VBAP
      INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_004
      WHERE VBELN = IT_PRINT_001-VGBEL AND
            MATNR = IT_PRINT_001-PRODNO AND
            POSNR = IT_PRINT_001-VGPOS.

      LOOP AT IT_PRINT_004.
        L_PRICE_SR = IT_PRINT_004-NETPR / IT_PRINT_004-KPEIN.

        "取外币汇率及其单价
        IF IT_PRINT_004-WAERK <> 'RMB'."取外币汇率及其单价
          SELECT UKURS GDATU
            FROM TCURR
            INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_005
            WHERE KURST = 'M'                 "汇率类型
              AND FCURR = IT_PRINT_004-WAERK  "从货币
              AND TCURR = 'RMB'.              "最终货币

          SORT IT_PRINT_005 DESCENDING BY GDATU.
          LOOP AT IT_PRINT_005.
            L_PRICE_SR = IT_PRINT_004-NETPR * IT_PRINT_005-UKURS / IT_PRINT_004-KPEIN.
            EXIT.
          ENDLOOP.
        ENDIF.
        EXIT.
      ENDLOOP.

    L_AMOUNT_SR = L_AMOUNT_SR + L_PRICE_SR * IT_PRINT_001-PRODQTY.

    "取标准成本
     G_BUKRS = IT_PRINT_001-VKORG.
     G_PRODNO = IT_PRINT_001-PRODNO.
     G_DATE = IT_PRINT_001-ORDERDATE.
     PERFORM. F_GET_PRICE.
     L_AMOUNT_CB = L_AMOUNT_CB + G_PRICE * IT_PRINT_001-PRODQTY.
  ENDLOOP.

  "取退货金额
  REFRESH IT_PRINT_001.
  SELECT A~MATNR AS PRODNO               "物料号
         A~LFIMG AS PRODQTY              "实际已交货量
         B~KUNNR AS CNO                  "送达方
         B~VBELN AS ORDERNO              "交货单号
         B~WADAT_IST AS ORDERDATE        "发货过账日期
         B~LFART AS CLASS                "交货类型
         A~VGBEL                         "参考凭证的凭证号(销售订单号)
         A~KDMAT
         D~BSTNK                         "客户采购订单编号
         D~VTWEG                         "分销渠道
         D~VKORG
         A~VGPOS                         "参考项目号
    FROM LIPS AS A INNER JOIN LIKP AS B ON A~VBELN = B~VBELN
         INNER JOIN VBUK AS C ON A~VBELN = C~VBELN
         INNER JOIN VBAK AS D ON A~VGBEL = D~VBELN
*         INNER JOIN VBUP AS E ON A~VBELN = E~VBELN
    INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
    WHERE B~WADAT_IST >= G_DATE1 AND
          B~WADAT_IST <= G_DATE2 AND
*          D~VKORG = P_BUKRS AND         "公司代码
          B~LFART = 'LR'    AND         "退货
          A~ERNAM <> 'SD01' AND         "去掉补单记录
          A~ERNAM <> 'SD02' AND
          A~ERNAM <> 'SD03' AND
          D~AUART = 'ZRE'   AND         "标准退货订单
          C~WBSTK = 'C'.                "已发货过账
*          ( C~KOSTK = 'B' OR            "全部拣配/堆放状态
*            C~KOSTK = 'C' ).
*            C~FKSTK <> 'C'.             "出具发票状态

  "取单价及金额
  LOOP AT IT_PRINT_001.
    L_PRICE_SR = 0.
    L_PRICE_CB = 0.
    "取销售收入
    REFRESH IT_PRINT_004.
    REFRESH IT_PRINT_005.
    SELECT NETPR WAERK KPEIN
      FROM VBAP
      INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_004
      WHERE VBELN = IT_PRINT_001-VGBEL AND
            MATNR = IT_PRINT_001-PRODNO AND
            POSNR = IT_PRINT_001-VGPOS.

      LOOP AT IT_PRINT_004.
        L_PRICE_SR = IT_PRINT_004-NETPR / IT_PRINT_004-KPEIN.

        "取外币汇率及其单价
        IF IT_PRINT_004-WAERK <> 'RMB'."取外币汇率及其单价
          SELECT UKURS GDATU
            FROM TCURR
            INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_005
            WHERE KURST = 'M'                 "汇率类型
              AND FCURR = IT_PRINT_004-WAERK  "从货币
              AND TCURR = 'RMB'.              "最终货币

          SORT IT_PRINT_005 DESCENDING BY GDATU.
          LOOP AT IT_PRINT_005.
            L_PRICE_SR = IT_PRINT_004-NETPR * IT_PRINT_005-UKURS / IT_PRINT_004-KPEIN.
            EXIT.
          ENDLOOP.
        ENDIF.
        EXIT.
      ENDLOOP.

  &nbsp

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/765243/viewspace-253298/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/765243/viewspace-253298/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值