二维码

abap中资产负债表的开发

Twilight发表于 2014-03-16 20:46Twilight 最后回复于 2014-03-16 20:46 [复制链接] 6196 0

资产负债表(the Balance Sheet)亦称财务状况表,表示企业在一定日期(通常为各会计期末)的财务状况(即资产、负债和业主权益的状况)的主要会计报表,资产负债表利用会计平衡原则,将合乎会计原则的资产、负债、股东权益”交易科目分为“资产”和“负债及股东权益”两大区块,在经过分录、转帐、分类帐、试算、调整等等会计程序后,以特定日期的静态企业情况为基准,浓缩成一张报表。其报表功用除了企业内部除错、经营方向、防止弊端外,也可让所有阅读者于最短时间了解企业经营状况。

选择屏幕
资产负债表选择屏幕.jpg

程序执行结果屏幕:
资产负债表.jpg

主程序代码:
  1. *&---------------------------------------------------------------------*
  2. *& Report  ZDEMON_030
  3. *&
  4. *&---------------------------------------------------------------------*
  5. *&
  6. *&
  7. *&---------------------------------------------------------------------*

  8. REPORT  zdemon_030 MESSAGE-ID zfirpt.
  9. *&---------------------------------------------------------------------*
  10. *& tables & nodes
  11. *&---------------------------------------------------------------------*
  12. TABLES:  t001,  "公司主数据
  13.          bkpf,  "会计凭证头
  14.          v_tcurr,"视图   货币兑换利率
  15.          faglflext.  "科目余额表

  16. *&---------------------------------------------------------------------*
  17. *& internal tables
  18. *&---------------------------------------------------------------------*
  19. DATA: BEGIN OF tb_result OCCURS 0, "资产负债表结果集
  20.         companyid(4)  TYPE c,
  21.         asset1(30) TYPE c,         "资产项目
  22.         row1(2)    TYPE c,         "行次
  23.         start1     LIKE faglflext-hslvt,"期初值
  24.         end1       LIKE faglflext-hslvt,"期未值
  25.         asset2(30) TYPE c,         "资产项目
  26.         row2(2)    TYPE c,         "行次
  27.         start2     LIKE faglflext-hslvt,"期初值
  28.         end2       LIKE faglflext-hslvt,"期未值
  29.       END OF tb_result.

  30. DATA: BEGIN OF prt_result OCCURS 0, "资产负债表结果集
  31.         companyid(4)  TYPE c,
  32.         asset1(30) TYPE c,          "资产项目
  33.         row1(2)    TYPE c,         "行次
  34.         start1(16) TYPE c,          "期初值
  35.         end1(16)   TYPE c,          "期未值
  36.         asset2(30) TYPE c,          "资产项目
  37.         row2(2)    TYPE c,         "行次
  38.         start2(16) TYPE c,          "期初值
  39.         end2(16)   TYPE c,          "期未值
  40.       END OF prt_result.

  41. *&---------------------------------------------------------------------*
  42. *& variant declare
  43. *&---------------------------------------------------------------------*
  44. DATA:  s_butxt(50) TYPE c,  "公司名称
  45.       s_m1(23)  TYPE c,
  46.       s_m2(23)  TYPE c,
  47.       s_m3(23)  TYPE c,
  48.       s_m4(23)  TYPE c.

  49. **PARAMTERS FOR OUTPUT FORMAT
  50. DATA: i_lwidth TYPE i VALUE 185,  "横线宽
  51.       i_col1 TYPE i VALUE 35,                               "列1宽
  52.       i_col2 TYPE i VALUE 4,                                "列2宽
  53.       i_col3 TYPE i VALUE 20,                               "列3宽
  54.       i_col4 TYPE i VALUE 20.                               "列4宽
  55. DATA: dynpread LIKE TABLE OF dynpread WITH HEADER LINE.
  56. DATA: dcurr LIKE TABLE OF bapi1093_0 WITH HEADER LINE.
  57. TYPE-POOLS: slis.
  58. DATA: fieldcat TYPE slis_t_fieldcat_ALV WITH HEADER LINE,
  59.       fld_head TYPE slis_listheader,
  60.       sortcat  TYPE slis_t_sortinfo_alv,
  61.       sortcatln   LIKE   LINE OF sortcat,
  62.       itab_listhead TYPE slis_t_listheader,
  63.       layout TYPE  slis_layout_alv,
  64.       v_repid LIKE sy-repid,
  65.       rt_extab TYPE slis_t_extab,
  66.       eventcat     TYPE   slis_t_event.


  67. DATA: tmpdate LIKE sy-datum,
  68.       prtdate LIKE sy-datum,
  69.       tempcurr LIKE bapi1093_1-from_curr,
  70.       exch_rate(10) TYPE c,
  71.       txunit(10) TYPE c,
  72.       errorflag  TYPE c,
  73.       txcurr(16) TYPE c.

  74. *&---------------------------------------------------------------------*
  75. *& selection-screen
  76. *&---------------------------------------------------------------------*
  77. SELECT-OPTIONS:
  78.   s_rbukrs FOR bkpf-bukrs OBLIGATORY .     "公司代码
  79. PARAMETERS:
  80.   i_gjahr LIKE bkpf-gjahr DEFAULT sy-datum+0(4) OBLIGATORY,  "财务年度
  81.   i_monat LIKE bkpf-monat OBLIGATORY,      "期间
  82. *  waers   like bkpf-waers OBLIGATORY.      "货币代码
  83.   p_butxt(40) TYPE c.

  84. SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE tit.  "选择屏幕

  85. PARAMETERS:                                                 "单选按钮
  86.    p_1  RADIOBUTTON GROUP g1 DEFAULT 'X',
  87.    p_2  RADIOBUTTON GROUP g1,
  88.    p_3  RADIOBUTTON GROUP g1.

  89. SELECTION-SCREEN END OF BLOCK b02.                          "选择屏幕结束

  90. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
  91. PARAMETERS:                                                 "单选按钮
  92.    m_1  RADIOBUTTON GROUP g2 DEFAULT 'X',
  93.    m_2  RADIOBUTTON GROUP g2,
  94.    waers   LIKE bkpf-waers ,      "货币代码
  95.    p_flag AS CHECKBOX.
  96. SELECTION-SCREEN END OF BLOCK b01.



  97. *&---------------------------------------------------------------------*
  98. *& initialization
  99. *&---------------------------------------------------------------------*
  100. INITIALIZATION.
  101.   tit = '金额单位'.
  102. *&---------------------------------------------------------------------*
  103. *& AT SELECTION-SCREEN OUTPUT
  104. *&---------------------------------------------------------------------*
  105. *AT SELECTION-SCREEN OUTPUT.
  106. *  perform read_screen.
  107. *  LOOP AT SCREEN.
  108. *    IF m_2 = 'X' AND ( screen-name = 'WAERS' or screen-name = 'P_FLAG'
  109. *       or screen-name = '%_WAERS_%_APP_%-TEXT').
  110. *      screen-active = 1.
  111. *      if screen-name = 'WAERS'.
  112. *        screen-request  = 1.
  113. *        screen-required = 1.
  114. *      endif.
  115. *      MODIFY SCREEN.
  116. *    ENDIF.
  117. *    IF m_2 = '' AND ( screen-name = 'WAERS' or screen-name = 'P_FLAG'
  118. *       or screen-name = '%_WAERS_%_APP_%-TEXT').
  119. *      screen-active = 0.
  120. *      if screen-name = 'WAERS'.
  121. *        screen-request  = 0.
  122. *        screen-required = 0.
  123. *      endif.
  124. *      MODIFY SCREEN.
  125. *    ENDIF.
  126. *  ENDLOOP.


  127. *&---------------------------------------------------------------------*
  128. *& at selection-screen
  129. *&---------------------------------------------------------------------*
  130. AT SELECTION-SCREEN.
  131.   PERFORM check.
  132. *-->调试程序时 可以先把这里的权限代码注释掉在运行
  133.   SELECT * FROM t001 WHERE bukrs IN s_rbukrs .
  134.     errorflag = ''.
  135.     AUTHORITY-CHECK OBJECT 'ZFIRPT'                          "权限判断
  136.              ID 'BUKRS' FIELD t001-bukrs.
  137.     IF sy-subrc = 0.
  138.       errorflag = 'f'.
  139.     ENDIF.
  140.     AUTHORITY-CHECK OBJECT 'ZPARK'                          "权限判断
  141.              ID 'BUKRS' FIELD t001-bukrs.
  142.     IF sy-subrc = 0.
  143.       errorflag = 'f'.
  144.     ENDIF.
  145.     IF errorflag = ''.
  146.       MESSAGE e999(z01) WITH '没有在公司代码' t001-bukrs '操作的权限!'.
  147.     ENDIF.
  148.   ENDSELECT.

  149.   IF i_monat < 1 OR i_monat > 16."对期间值必须在1-16之间
  150.     MESSAGE e004.
  151.   ENDIF.


  152. *&---------------------------------------------------------------------*
  153. *& start-of-selection
  154. *&---------------------------------------------------------------------*
  155. START-OF-SELECTION.
  156.   CONCATENATE i_gjahr i_monat '01' INTO tmpdate.        "组合年份
  157.   CALL FUNCTION 'LAST_DAY_OF_MONTHS'
  158.     EXPORTING
  159.       day_in            = tmpdate                  "根据传入的参数,输出一个月的最后一天
  160.     IMPORTING
  161.       last_day_of_month = prtdate
  162.     EXCEPTIONS
  163.       day_in_no_date    = 1
  164.       OTHERS            = 2.
  165. * 获得当前汇率
  166.   tempcurr = waers.
  167.   CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'
  168.     EXPORTING
  169.       rate_type  = 'M'
  170.       from_curr  = tempcurr
  171.       to_currncy = 'CNY'
  172.       date       = tmpdate
  173.     IMPORTING
  174.       exch_rate  = dcurr
  175. *     RETURN     =
  176.     .

  177.   READ TABLE dcurr INDEX 1.
  178.   exch_rate = dcurr-exch_rate.

  179.   IF p_1 = 'X'.                  "根据单选框的值给变量值
  180.     txunit = '元'.
  181.   ENDIF.
  182.   IF p_2 = 'X'.
  183.     txunit(*) = '千元'.
  184.   ENDIF.
  185.   IF p_3 = 'X'.
  186.     txunit = '万元'.
  187.   ENDIF.

  188. *  if p_flag = 'X' and i_monat = '12'.  "判断复选框
  189. *    i_monat = '16'.
  190. *  endif.

  191.   SELECT SINGLE ktext INTO txcurr       "根据货币单位的值返回货币名称
  192.     FROM tcurt
  193.    WHERE waers = waers.

  194.   IF m_1 = 'X'.
  195.     txcurr = '人民币(汇总)'.
  196.   ELSE.
  197.     IF p_flag = 'X'.
  198.       CONCATENATE txcurr '折人民币' INTO txcurr.
  199.     ENDIF.
  200.   ENDIF.

  201. * 取公司名称
  202.   IF s_rbukrs-high IS INITIAL OR s_rbukrs-low = s_rbukrs-high.      "判断是否为空
  203.     SELECT SINGLE butxt INTO s_butxt FROM t001 WHERE bukrs = s_rbukrs-low.
  204.   ELSE.
  205.     IF p_butxt IS NOT INITIAL.
  206.       s_butxt = p_butxt.
  207.     ELSE.
  208.       CONCATENATE '从' s_rbukrs-low '到' s_rbukrs-high INTO s_butxt.
  209.     ENDIF.
  210.   ENDIF.
  211.   IF s_rbukrs-low(2) = s_rbukrs-high(2) AND s_rbukrs-low <> s_rbukrs-high.
  212.     CLEAR s_butxt.
  213.     SELECT SINGLE butxt INTO s_butxt FROM t001 WHERE bukrs = s_rbukrs-low.
  214.     CONCATENATE s_butxt '(汇总)' INTO s_butxt.
  215.   ENDIF.


  216.   DATA curr LIKE TABLE OF tcurr WITH HEADER LINE.
  217.   SELECT * INTO CORRESPONDING FIELDS OF TABLE curr FROM tcurr
  218.     WHERE kurst = 'M'
  219.       AND fcurr = waers
  220.       AND tcurr = 'CNY'.


  221.   DATA: f_tols1 LIKE faglflext-hslvt,"资产期初总计
  222.         f_tole1 LIKE faglflext-hslvt,"资产期末总计
  223.         f_tols2 LIKE faglflext-hslvt,"负债期初总计
  224.         f_tole2 LIKE faglflext-hslvt,"负债期末总计
  225.         f_sums1 LIKE faglflext-hslvt,"资产期初小计
  226.         f_sume1 LIKE faglflext-hslvt,"资产期末小计
  227.         f_sums2 LIKE faglflext-hslvt,"负债期初小计
  228.         f_sume2 LIKE faglflext-hslvt,"负债期末小计
  229.         f_rlts1 LIKE faglflext-hslvt,
  230.         f_rlte1 LIKE faglflext-hslvt,
  231. *        zx_s LIKE FAGLFLEXT-hslvt,
  232. *        zx_e LIKE FAGLFLEXT-hslvt,
  233.         f_rlts2 LIKE faglflext-hslvt,
  234.         f_rlte2 LIKE faglflext-hslvt.

  235.   DATA: f_smny1 LIKE faglflext-hslvt,
  236.         f_emny1 LIKE faglflext-hslvt.

  237. **数据计算

  238.   PERFORM add_row USING '流动资产:' '' ''
  239.                         '流动负债:' '' ''
  240.                         i_monat s_rbukrs i_gjahr 1 1.

  241.   PERFORM add_row USING '  现金'       '1001' '1'
  242.                         '  短期借款'   '2101' '46'
  243.                         i_monat s_rbukrs i_gjahr 1 1.   "期间---公司代码---年份
  244.   f_sums2 = tb_result-start2.                  "初始值
  245.   f_sume2 = tb_result-end2.                    "初始值
  246.   f_tols1 = tb_result-start1.                  "初始值
  247.   f_tole1 = tb_result-end1.                    "初始值

  248.   PERFORM add_row USING '  银行存款'   '1002' '2'
  249.                         '  拆入资金'   '2102' '47'
  250.                         i_monat s_rbukrs i_gjahr 1 1.
  251.   f_sums2 = f_sums2 + tb_result-start2.
  252.   f_sume2 = f_sume2 + tb_result-end2.
  253.   f_tols1 = f_tols1 + tb_result-start1.
  254.   f_tole1 = f_tole1 + tb_result-end1.

  255.   PERFORM add_row USING '  其他货币'   '1009010000' '2'
  256.                         '  应付利息'   '2110' '80'
  257.                         i_monat s_rbukrs i_gjahr 1 1.
  258.   f_sums2 = f_sums2 + tb_result-start2.
  259.   f_sume2 = f_sume2 + tb_result-end2.
  260.   f_tols1 = f_tols1 + tb_result-start1.
  261.   f_tole1 = f_tole1 + tb_result-end1.


  262.   PERFORM add_row USING '  短期投资'   '1101' '3'
  263.                         '  应付手续费' '2111' '48'
  264.                         i_monat s_rbukrs i_gjahr 1 1.
  265.   f_sums2 = f_sums2 + tb_result-start2.
  266.   f_sume2 = f_sume2 + tb_result-end2.
  267.   f_tols1 = f_tols1 + tb_result-start1.
  268.   f_tole1 = f_tole1 + tb_result-end1.
  269. *********************************************************************************************************
  270.   PERFORM add_row USING '  短期投资跌价准备'   '1102' '4'
  271.                         '  待返售债券' '2109' '48'
  272.                         i_monat s_rbukrs i_gjahr 1 1.
  273.   f_sums2 = f_sums2 + tb_result-start2.
  274.   f_sume2 = f_sume2 + tb_result-end2.
  275.   f_tols1 = f_tols1 + tb_result-start1.
  276.   f_tole1 = f_tole1 + tb_result-end1.

  277.   PERFORM add_row USING '  待回购债券'   '1009100100' '4'
  278.                         '  应付佣金' '2112' '49'
  279.                         i_monat s_rbukrs i_gjahr 1 1.
  280.   f_sums2 = f_sums2 + tb_result-start2.
  281.   f_sume2 = f_sume2 + tb_result-end2.
  282.   f_tols1 = f_tols1 + tb_result-start1.
  283.   f_tole1 = f_tole1 + tb_result-end1.


  284.   PERFORM add_row USING '  拆出资金'           '1111' '5'
  285.                         '  应付分保帐款 '       '2113' '50'
  286.                         i_monat s_rbukrs i_gjahr 1 1.
  287.   f_sums2 = f_sums2 + tb_result-start2.
  288.   f_sume2 = f_sume2 + tb_result-end2.
  289.   f_tols1 = f_tols1 + tb_result-start1.
  290.   f_tole1 = f_tole1 + tb_result-end1.

  291.   PERFORM add_row USING '  保单质押贷款'           '1112' '5'
  292.                         '  预收保费'       '2121' '51'
  293.                         i_monat s_rbukrs i_gjahr 1 1.
  294.   f_sums2 = f_sums2 + tb_result-start2.
  295.   f_sume2 = f_sume2 + tb_result-end2.
  296.   f_tols1 = f_tols1 + tb_result-start1.
  297.   f_tole1 = f_tole1 + tb_result-end1.

  298. *------------------------------应收款项开始------------------------------------

  299.   PERFORM add_row USING '  应收利息'           '1121' '6'
  300.                         '  预收分保赔款'       '2122' '52'
  301.                         i_monat s_rbukrs i_gjahr 1 1.
  302.   f_sums1 = tb_result-start1.                 "应收款小计
  303.   f_sume1 = tb_result-end1.                   "应收款小计
  304.   f_sums2 = f_sums2 + tb_result-start2.
  305.   f_sume2 = f_sume2 + tb_result-end2.
  306.   f_tols1 = f_tols1 + tb_result-start1.
  307.   f_tole1 = f_tole1 + tb_result-end1.

  308.   PERFORM add_row USING '  应收红利'    '1125' '6'
  309.                         '  存入分保准备金'     '2131' '53'
  310.                         i_monat s_rbukrs i_gjahr 1 1.
  311.   f_sums1 = f_sums1 + tb_result-start1.               "应收款小计
  312.   f_sume1 = f_sume1 + tb_result-end1.                 "应收款小计
  313.   f_sums2 = f_sums2 + tb_result-start2.
  314.   f_sume2 = f_sume2 + tb_result-end2.
  315.   f_tols1 = f_tols1 + tb_result-start1.
  316.   f_tole1 = f_tole1 + tb_result-end1.

  317.   PERFORM add_row USING '  应收保费'           '1122' '7'
  318.                         '  存入保证金'     '2132' '54'
  319.                         i_monat s_rbukrs i_gjahr 1 1.
  320.   f_sums1 = f_sums1 + tb_result-start1.                "应收款小计
  321.   f_sume1 = f_sume1 + tb_result-end1.                  "应收款小计
  322.   f_sums2 = f_sums2 + tb_result-start2.
  323.   f_sume2 = f_sume2 + tb_result-end2.
  324.   f_tols1 = f_tols1 + tb_result-start1.
  325.   f_tole1 = f_tole1 + tb_result-end1.

  326.   PERFORM add_row USING '  应收分保账款'   '1123' '8'
  327.                         '  应付工资'         '2141' '55'
  328.                         i_monat s_rbukrs i_gjahr 1 1.
  329.   f_sums1 = f_sums1 + tb_result-start1. "应收款项小计 - 减:坏帐准备
  330.   f_sume1 = f_sume1 + tb_result-end1.   "应收款项小计 - 减:坏帐准备
  331.   f_sums2 = f_sums2 + tb_result-start2.
  332.   f_sume2 = f_sume2 + tb_result-end2.
  333.   f_tols1 = f_tols1 + tb_result-start1.
  334.   f_tole1 = f_tole1 + tb_result-end1.

  335.   PERFORM add_row USING '  应收款项小计'       '' '9'
  336.                         '  应付福利费' '2142' '56'
  337.                         i_monat s_rbukrs i_gjahr 2 1.
  338.   f_sums2 = f_sums2 + tb_result-start2.
  339.   f_sume2 = f_sume2 + tb_result-end2.

  340.   PERFORM add_row USING '      减:坏帐准备'  '1124'  '11'
  341.                         '  应付保户红利'  '2143' '57'
  342.                         i_monat s_rbukrs i_gjahr 1 1.
  343.   f_sums1 = f_sums1 - tb_result-start1. "应收款项小计 - 减:坏帐准备
  344.   f_sume1 = f_sume1 - tb_result-end1.   "应收款项小计 - 减:坏帐准备
  345.   f_sums2 = f_sums2 + tb_result-start2.
  346.   f_sume2 = f_sume2 + tb_result-end2.
  347.   f_tols1 = f_tols1 - tb_result-start1.
  348.   f_tole1 = f_tole1 - tb_result-end1.

  349.   PERFORM add_row USING '  应收款项净额'  '' '12'
  350.                         '  应付利润'  '2145' '58'
  351.                         i_monat s_rbukrs i_gjahr 2 1.
  352.   f_sums2 = f_sums2 + tb_result-start2.
  353.   f_sume2 = f_sume2 + tb_result-end2.

  354. *------------------------------应收款项结束-----------------------------

  355.   PERFORM add_row USING '  预付赔款' '1131' '13'
  356.                         '  应交税金' '2146' '59'
  357.                         i_monat s_rbukrs i_gjahr 1 1.
  358.   f_sums2 = f_sums2 + tb_result-start2.
  359.   f_sume2 = f_sume2 + tb_result-end2.
  360.   f_tols1 = f_tols1 + tb_result-start1.
  361.   f_tole1 = f_tole1 + tb_result-end1.

  362.   PERFORM add_row USING '  存出分保准备金' '1141' '14'
  363.                         '  卖出回购证券款'   '2147' '60'
  364.                         i_monat s_rbukrs i_gjahr 1 1.
  365.   f_sums2 = f_sums2 + tb_result-start2.
  366.   f_sume2 = f_sume2 + tb_result-end2.
  367.   f_tols1 = f_tols1 + tb_result-start1.
  368.   f_tole1 = f_tole1 + tb_result-end1.

  369.   PERFORM add_row USING '  存出保证金' '1142' '15'
  370.                         '  其他应付款'   '2149' '61'
  371.                         i_monat s_rbukrs i_gjahr 1 1.
  372.   f_sums2 = f_sums2 + tb_result-start2.
  373.   f_sume2 = f_sume2 + tb_result-end2.
  374.   f_tols1 = f_tols1 + tb_result-start1.
  375.   f_tole1 = f_tole1 + tb_result-end1.

  376.   PERFORM add_row USING '  买入返售证券' '1151' '16'
  377.                         '  预提费用'   '2151' '62'
  378.                         i_monat s_rbukrs i_gjahr 1 1.
  379.   f_sums2 = f_sums2 + tb_result-start2.
  380.   f_sume2 = f_sume2 + tb_result-end2.
  381.   f_tols1 = f_tols1 + tb_result-start1.
  382.   f_tole1 = f_tole1 + tb_result-end1.

  383.   PERFORM add_row USING '  其他应收款'         '1191' '17'
  384.                         '  未决赔款准备金'   '2161' '63'
  385.                         i_monat s_rbukrs i_gjahr 1 1.
  386.   f_sums2 = f_sums2 + tb_result-start2.
  387.   f_sume2 = f_sume2 + tb_result-end2.
  388.   f_tols1 = f_tols1 + tb_result-start1.
  389.   f_tole1 = f_tole1 + tb_result-end1.

  390.   PERFORM add_row USING '  系统往来'         '1199' '66'
  391.                         '  未到期责任准备金'   '2162' '64'
  392.                         i_monat s_rbukrs i_gjahr 1 1.
  393.   f_sums2 = f_sums2 + tb_result-start2.
  394.   f_sume2 = f_sume2 + tb_result-end2.
  395.   f_tols1 = f_tols1 + tb_result-start1.
  396.   f_tole1 = f_tole1 + tb_result-end1.

  397.   PERFORM add_row USING '  委托资产'     '1198' '66'
  398.                         '  保户储金 '   '2171' '65'
  399.                         i_monat s_rbukrs i_gjahr 1 1.
  400.   f_sums2 = f_sums2 + tb_result-start2.
  401.   f_sume2 = f_sume2 + tb_result-end2.
  402.   f_tols1 = f_tols1 + tb_result-start1.
  403.   f_tole1 = f_tole1 + tb_result-end1.

  404.   PERFORM add_row USING '  物料用品'   '1201' '18'
  405.                         '  其他流动负债'   '' '67'
  406.                         i_monat s_rbukrs i_gjahr 1 1.
  407.   f_tols1 = f_tols1 + tb_result-start1.
  408.   f_tole1 = f_tole1 + tb_result-end1.

  409.   PERFORM add_row USING '  低值易耗品'   '1211' '19'
  410.                         '  流动负债合计'   '' '68'
  411.                         i_monat s_rbukrs i_gjahr 3 1.
  412.   f_tols1 = f_tols1 + tb_result-start1.
  413.   f_tole1 = f_tole1 + tb_result-end1.
  414.   f_tols2 = f_sums2.
  415.   f_tole2 = f_sume2.
  416.   f_rlts2 = f_sums2. "流动负债合计临时结果,用于后面计算
  417.   f_rlte2 = f_sume2. "

  418.   PERFORM add_row USING '  待摊费用'   '1301' '20'
  419.                         '   '   '' ''
  420.                         i_monat s_rbukrs i_gjahr 1 1.
  421. *  f_sums2 = f_sums2 + tb_result-start2.
  422. *  f_sume2 = f_sume2 + tb_result-end2.
  423.   f_tols1 = f_tols1 + tb_result-start1.
  424.   f_tole1 = f_tole1 + tb_result-end1.

  425.   PERFORM add_row USING '  待处理流动资产净损失'   '190101' '21'
  426.                         '长期负债: '   '' '69'
  427.                         i_monat s_rbukrs i_gjahr 1 1.
  428.   f_tols1 = f_tols1 + tb_result-start1.
  429.   f_tole1 = f_tole1 + tb_result-end1.


  430.   PERFORM add_row USING '  一年内到期的长期债券投资'   '' '22'
  431.                         '  长期责任准备金'   '' '70'
  432.                         i_monat s_rbukrs i_gjahr 1 1.


  433.   PERFORM add_row USING '  其他流动资产'   '' '23'
  434.                         '  寿险责任准备金   '   '2202' '71'
  435.                         i_monat s_rbukrs i_gjahr 1 1.
  436.   f_sums2 = tb_result-start2.
  437.   f_sume2 = tb_result-end2.

  438.   f_sums1 = f_tols1.
  439.   f_sume1 = f_tole1.

  440.   PERFORM add_row USING '       流动资产合计'   '' '24'
  441.                         '  长期健康险责任准备金 '   '2203' '72'
  442.                         i_monat s_rbukrs i_gjahr 2 1.
  443.   f_sums2 = f_sums2 + tb_result-start2.
  444.   f_sume2 = f_sume2 + tb_result-end2.

  445. *-----------------------------------流动资产--------------------

  446.   PERFORM add_row USING '长期投资:'   '' '25'
  447.                         '  '   '' ''
  448.                         i_monat s_rbukrs i_gjahr 1 1.

  449.   PERFORM add_row USING '  长期股权投资'   '1401' '26'
  450.                         '  保险保障基金'   '2211' '73'
  451.                         i_monat s_rbukrs i_gjahr 1 1.
  452.   f_sums1 = tb_result-start1.
  453.   f_sume1 = tb_result-end1.
  454.   f_tols1 = f_tols1 + tb_result-start1.
  455.   f_tole1 = f_tole1 + tb_result-end1.
  456.   f_sums2 = f_sums2 + tb_result-start2.
  457.   f_sume2 = f_sume2 + tb_result-end2.


  458.   PERFORM add_row USING '  长期债权投资'   '1402' '27'
  459.                         '  长期借款'   '' '74'
  460.                         i_monat s_rbukrs i_gjahr 1 1.
  461.   f_sums1 = f_sums1 + tb_result-start1.
  462.   f_sume1 = f_sume1 + tb_result-end1.
  463.   f_tols1 = f_tols1 + tb_result-start1.
  464.   f_tole1 = f_tole1 + tb_result-end1.

  465.   PERFORM add_row USING '  长期基金投资'   '1403' '35'
  466.                         '  长期应付款'   '' '75'
  467.                         i_monat s_rbukrs i_gjahr 1 1.
  468.   f_sums1 = f_sums1 + tb_result-start1.
  469.   f_sume1 = f_sume1 + tb_result-end1.
  470.   f_tols1 = f_tols1 + tb_result-start1.
  471.   f_tole1 = f_tole1 + tb_result-end1.

  472.   PERFORM add_row USING '  拨付所属资金'   '' ''
  473.                         '  贷币兑换' '2241' ''
  474.                         i_monat s_rbukrs i_gjahr 1 1.
  475.   f_sums2 = f_sums2 + tb_result-start2.
  476.   f_sume2 = f_sume2 + tb_result-end2.

  477.   PERFORM add_row USING '  减:投资风险准备'   '1405' '28'
  478.                         '  住房周转金'   '' '76'
  479.                         i_monat s_rbukrs i_gjahr 1 1.
  480.   f_sums1 = f_sums1 - tb_result-start1.
  481.   f_sume1 = f_sume1 - tb_result-end1.
  482.   f_tols1 = f_tols1 - tb_result-start1.
  483.   f_tole1 = f_tole1 - tb_result-end1.


  484.   PERFORM add_row USING '  长期投资合计'   '' ''
  485.                         '  其他长期负债'   '' '77'
  486.                         i_monat s_rbukrs i_gjahr 2 3.


  487.   PERFORM add_row USING '固定资产:'   '' ''
  488.                         '  独立帐户负债' '' '78'
  489.                         i_monat s_rbukrs i_gjahr 1 3.


  490.   PERFORM add_row USING '  固定资产原值'   '1601' '30'
  491.                         '  独立帐户未实现利得' '' '79'
  492.                         i_monat s_rbukrs i_gjahr 1 1.
  493.   f_sums1 = tb_result-start1.
  494.   f_sume1 = tb_result-end1.
  495.   f_tols1 = f_tols1 + tb_result-start1.
  496.   f_tole1 = f_tole1 + tb_result-end1.



  497.   PERFORM add_row USING '    减:累计折旧'   '1602' '31'
  498.                         '  长期负债合计' '' '80'
  499.                         i_monat s_rbukrs i_gjahr 3 2.
  500.   f_sums1 = f_sums1 - tb_result-start1.
  501.   f_sume1 = f_sume1 - tb_result-end1.
  502.   f_tols1 = f_tols1 - tb_result-start1.
  503.   f_tole1 = f_tole1 - tb_result-end1.
  504.   f_tols2 = f_tols2 + f_sums2.
  505.   f_tole2 = f_tole2 + f_sume2.
  506.   f_sums2 = f_sums2 + f_rlts2.  "长期负债合计 + 流动负债合计
  507.   f_sume2 = f_sume2 + f_rlte2.


  508.   PERFORM add_row USING '    减:固定资产减值准备'   '1603' ''
  509.                         ' 负债合计 ' '' '81'
  510.                         i_monat s_rbukrs i_gjahr 3 1.
  511.   f_sums1 = f_sums1 - tb_result-start1.
  512.   f_sume1 = f_sume1 - tb_result-end1.
  513.   f_tols1 = f_tols1 - tb_result-start1.
  514.   f_tole1 = f_tole1 - tb_result-end1.
  515. *  f_tols2 = f_tols2 + tb_result-start2.
  516. *  f_tole2 = f_tole2 + tb_result-end2.


  517.   PERFORM add_row USING '  固定资产净值'   '' '32'
  518.                         '所有者权益:' '' '82'
  519.                         i_monat s_rbukrs i_gjahr 2 3.


  520.   PERFORM add_row USING ' 在建工程'   '1606' '33'
  521.                         '  实收资本' '3101' '83'
  522.                         i_monat s_rbukrs i_gjahr 1 1.
  523.   f_sums1 = f_sums1 + tb_result-start1.
  524.   f_sume1 = f_sume1 + tb_result-end1.
  525.   f_tols1 = f_tols1 + tb_result-start1.
  526.   f_tole1 = f_tole1 + tb_result-end1.
  527.   f_sums2 = tb_result-start2.
  528.   f_sume2 = tb_result-end2.


  529.   PERFORM add_row USING '  减: 在建工程减值准备 '   '1607' ''
  530.                         '  上级拨入资金' '' ''
  531.                         i_monat s_rbukrs i_gjahr 1 1.
  532.   f_sums1 = f_sums1 - tb_result-start1.
  533.   f_sume1 = f_sume1 - tb_result-end1.
  534.   f_tols1 = f_tols1 - tb_result-start1.
  535.   f_tole1 = f_tole1 - tb_result-end1.

  536.   PERFORM add_row USING ' 固定资产清理'   '1609' '34'
  537.                         '  资本公积' '3111' '84'
  538.                         i_monat s_rbukrs i_gjahr 1 1.
  539.   f_sums1 = f_sums1 + tb_result-start1.
  540.   f_sume1 = f_sume1 + tb_result-end1.
  541.   f_tols1 = f_tols1 + tb_result-start1.
  542.   f_tole1 = f_tole1 + tb_result-end1.
  543.   f_sums2 = f_sums2 + tb_result-start2.
  544.   f_sume2 = f_sume2 + tb_result-end2.


  545.   PERFORM add_row USING ' 待处理固定资产净损失'   '190102' '35'
  546.                         '  盈余公积' '3121' '85'
  547.                         i_monat s_rbukrs i_gjahr 1 1.
  548.   f_sums1 = f_sums1 + tb_result-start1.
  549.   f_sume1 = f_sume1 + tb_result-end1.
  550.   f_tols1 = f_tols1 + tb_result-start1.
  551.   f_tole1 = f_tole1 + tb_result-end1.
  552.   f_sums2 = f_sums2 + tb_result-start2.
  553.   f_sume2 = f_sume2 + tb_result-end2.


  554.   PERFORM add_row USING '      固定资产合计'   '' '36'
  555.                         '  其中: 公益金' '3121030000' '86'
  556.                         i_monat s_rbukrs i_gjahr 2 1.
  557. *  f_sums2 = f_sums2 + tb_result-start2.
  558. *  f_sume2 = f_sume2 + tb_result-end2.


  559.   PERFORM add_row USING '无形资产及其他资产:'   '' '37'
  560.                        '   总准备金' '3131' '87'
  561.                         i_monat s_rbukrs i_gjahr 1 1.
  562.   f_sums2 = f_sums2 + tb_result-start2.
  563.   f_sume2 = f_sume2 + tb_result-end2.

  564.   PERFORM add_row USING '  无形资产'   '1701' '38'
  565.                         '  未分配利润' '3141' '88'
  566.                         i_monat s_rbukrs i_gjahr 1 1.
  567.   f_sums1 = tb_result-start1.
  568.   f_sume1 = tb_result-end1.
  569.   f_tols1 = f_tols1 + tb_result-start1.
  570.   f_tole1 = f_tole1 + tb_result-end1.
  571.   f_sums2 = f_sums2 + tb_result-start2.
  572.   f_sume2 = f_sume2 + tb_result-end2.

  573.   PERFORM add_row USING '  长期待摊费用'   '1711' '39'
  574.                         '   以前年度损益科目' '4801' '88'
  575.                         i_monat s_rbukrs i_gjahr 1 1.
  576.   f_sums1 = f_sums1 + tb_result-start1.
  577.   f_sume1 = f_sume1 + tb_result-end1.
  578.   f_tols1 = f_tols1 + tb_result-start1.
  579.   f_tole1 = f_tole1 + tb_result-end1.
  580.   f_sums2 = f_sums2 + tb_result-start2.
  581.   f_sume2 = f_sume2 + tb_result-end2.

  582.   PERFORM add_row USING '  存出资本保证金'   '1801' '40'
  583.                         '  外币折算差异' '5999' '89'
  584.                         i_monat s_rbukrs i_gjahr 1 1.
  585.   f_sums1 = f_sums1 + tb_result-start1.
  586.   f_sume1 = f_sume1 + tb_result-end1.
  587.   f_tols1 = f_tols1 + tb_result-start1.
  588.   f_tole1 = f_tole1 + tb_result-end1.
  589.   f_sums2 = f_sums2 + tb_result-start2.
  590.   f_sume2 = f_sume2 + tb_result-end2.

  591.   PERFORM add_row USING '  抵债物资'   '' '41'
  592.                         '  所有者权益合计' '' '90'
  593.                         i_monat s_rbukrs i_gjahr 3 1.
  594.   f_sums1 = f_sums1 + tb_result-start1.
  595.   f_sume1 = f_sume1 + tb_result-end1.
  596.   f_sums2 = f_tols2 + f_sums2.
  597.   f_sume2 = f_tole2 + f_sume2.

  598.   PERFORM add_row USING '   其他长期资产'   '' '42'
  599.                         '负债及所有者权益合计' '' '91'
  600.                         i_monat s_rbukrs i_gjahr 3 1.
  601.   f_sums1 = f_sums1 + tb_result-start1.
  602.   f_sume1 = f_sume1 + tb_result-end1.



  603.   PERFORM add_row USING '  独立账户资产'   '' '43'
  604.                         '' '' ''
  605.                         i_monat s_rbukrs i_gjahr 1 1.
  606.   f_sums1 = f_sums1 + tb_result-start1.
  607.   f_sume1 = f_sume1 + tb_result-end1.



  608.   PERFORM add_row USING '  递延税款'   '1831' '43'
  609.                         '  ' '' ''
  610.                         i_monat s_rbukrs i_gjahr 1 1.
  611.   f_tols1 = f_tols1 + tb_result-start1.
  612.   f_tole1 = f_tole1 + tb_result-end1.

  613.   PERFORM add_row USING '  无形资产及其他资产合计'   '' '44'
  614.                         ' ' '' ''
  615.                         i_monat s_rbukrs i_gjahr 2 1.

  616.   f_sums1 = f_tols1.
  617.   f_sume1 = f_tole1.

  618.   PERFORM add_row USING '      资产总计'   '' '45'
  619.                         '' '' ''
  620.                         i_monat s_rbukrs i_gjahr 2 1.




  621. ***千元
  622.   IF p_2 = 'X'.                               "进行单位的换算
  623.     LOOP AT tb_result.
  624.       IF tb_result-start1 <> 0.
  625.         tb_result-start1 = tb_result-start1 / 1000.
  626.       ENDIF.
  627.       IF tb_result-end1 <> 0.
  628.         tb_result-end1 = tb_result-end1 / 1000.
  629.       ENDIF.
  630.       IF tb_result-start2 <> 0.
  631.         tb_result-start2 = tb_result-start2 / 1000.
  632.       ENDIF.
  633.       IF tb_result-end2 <> 0.
  634.         tb_result-end2 = tb_result-end2 / 1000.
  635.       ENDIF.
  636.       MODIFY tb_result.
  637.     ENDLOOP.
  638.   ENDIF.
  639. ***万元
  640.   IF p_3 = 'X'.                              "进行单位的换算
  641.     LOOP AT tb_result.
  642.       IF tb_result-start1 <> 0.
  643.         tb_result-start1 = tb_result-start1 / 10000.
  644.       ENDIF.
  645.       IF tb_result-end1 <> 0.
  646.         tb_result-end1 = tb_result-end1 / 10000.
  647.       ENDIF.
  648.       IF tb_result-start2 <> 0.
  649.         tb_result-start2 = tb_result-start2 / 10000.
  650.       ENDIF.
  651.       IF tb_result-end2 <> 0.
  652.         tb_result-end2 = tb_result-end2 / 10000.
  653.       ENDIF.
  654.       MODIFY tb_result.
  655.     ENDLOOP.
  656.   ENDIF.
  657. *&---------------------------------------------------------------------*
  658. *& end-of-selection
  659. *&---------------------------------------------------------------------*
  660. END-OF-SELECTION.

  661.   LOOP AT tb_result.
  662.     CLEAR prt_result.
  663.     MOVE-CORRESPONDING tb_result TO prt_result.
  664.     PERFORM num2char USING tb_result-start1 CHANGING prt_result-start1.
  665.     PERFORM num2char USING tb_result-start2 CHANGING prt_result-start2.
  666.     PERFORM num2char USING tb_result-end1 CHANGING prt_result-end1.
  667.     PERFORM num2char USING tb_result-end2 CHANGING prt_result-end2.
  668. *    perform num2char using prt_result-start1 changing prt_result-start1.
  669. *    perform num2char using prt_result-start2 changing prt_result-start2.
  670. *    perform num2char using prt_result-end1 changing prt_result-end1.
  671. *    perform num2char using prt_result-end2 changing prt_result-end2.
  672.     APPEND prt_result.
  673.   ENDLOOP.
  674.   PERFORM init_fieldcat USING ''.
  675.   PERFORM init_layout.
  676.   PERFORM event_build.
  677.   PERFORM listdata.


  678. ***************************************************************
  679. *  CACUMONEY
  680. *  查询字段 racct   代表的科目名称
  681. *  子查询语句 saknr 代表的是科目的编号
  682. ***************************************************************
  683. FORM cacumoney USING     s_km     i_monat  c_rbukrs  c_gjahr
  684.                CHANGING  f_smny   f_money.
  685.   DATA s_km1(11) TYPE c.
  686.   DATA faglflext LIKE TABLE OF faglflext WITH HEADER LINE.
  687.   CONCATENATE s_km '%' INTO s_km1.
  688.   f_smny = 0. f_money = 0.
  689.   IF m_1 = 'X'.
  690.     SELECT * INTO CORRESPONDING FIELDS OF TABLE faglflext FROM faglflext
  691.       WHERE rldnr = '0L'
  692.         AND rrcty = '0'
  693.         AND rbukrs IN  s_rbukrs
  694.         AND ryear = c_gjahr
  695.         AND racct LIKE s_km1
  696.         AND rpmax = 16
  697.         AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  698.   ELSE.
  699.     SELECT * INTO CORRESPONDING FIELDS OF TABLE faglflext FROM faglflext
  700.       WHERE rldnr = '0L'
  701.         AND rrcty = '0'
  702.         AND rtcur = waers
  703.         AND rbukrs IN  s_rbukrs
  704.         AND ryear = c_gjahr
  705.         AND racct LIKE s_km1
  706.         AND rpmax = 16
  707.         AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  708.   ENDIF.

  709.   IF s_km = '3141'.
  710.     CLEAR faglflext[].
  711.     IF m_1 = 'X'.
  712.       SELECT * INTO CORRESPONDING FIELDS OF TABLE faglflext FROM faglflext
  713.         WHERE rldnr = '0L'
  714.           AND rrcty = '0'
  715.           AND rbukrs IN  s_rbukrs
  716.           AND ryear = c_gjahr
  717.           AND ( racct LIKE '3141%' OR racct LIKE '3151%' OR ( racct >= '4101000000' AND racct =< '4701999999' ) )
  718.           AND rpmax = 16
  719.           AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  720.     ELSE.
  721.       SELECT * INTO CORRESPONDING FIELDS OF TABLE faglflext FROM faglflext
  722.         WHERE rldnr = '0L'
  723.           AND rrcty = '0'
  724.           AND rtcur = waers
  725.           AND rbukrs IN  s_rbukrs
  726.           AND ryear = c_gjahr
  727.           AND ( racct LIKE '3141%' OR racct LIKE '3151%' OR ( racct >= '4101000000' AND racct =< '4701999999' ) )
  728.           AND rpmax = 16
  729.           AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  730.     ENDIF.
  731.   ENDIF.

  732.   IF s_km = '1009010000'.
  733.     CLEAR faglflext[].
  734.     IF m_1 = 'X'.
  735.       SELECT * INTO CORRESPONDING FIELDS OF TABLE faglflext FROM faglflext
  736.         WHERE rldnr = '0L'
  737.           AND rrcty = '0'
  738.           AND rbukrs IN  s_rbukrs
  739.           AND ryear = c_gjahr
  740.           AND ( racct LIKE '1009010000%' OR racct LIKE '1009020000%' OR  racct LIKE '1009030000%' OR racct LIKE '1003%' OR racct LIKE '1004%' )
  741.           AND rpmax = 16
  742.           AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  743.     ELSE.
  744.       SELECT * INTO CORRESPONDING FIELDS OF TABLE faglflext FROM faglflext
  745.         WHERE rldnr = '0L'
  746.           AND rrcty = '0'
  747.           AND rtcur = waers
  748.           AND rbukrs IN  s_rbukrs
  749.           AND ryear = c_gjahr
  750.           AND ( racct LIKE '1009010000%' OR racct LIKE '1009020000%' OR  racct LIKE '1009030000%' OR racct LIKE '1003%' OR racct LIKE '1004%' )
  751.           AND rpmax = 16
  752.           AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  753.     ENDIF.
  754.   ENDIF.

  755.   IF s_km = '1009100100'.
  756.     CLEAR faglflext[].
  757.     IF m_1 = 'X'.
  758.       SELECT * INTO CORRESPONDING FIELDS OF TABLE faglflext FROM faglflext
  759.         WHERE rldnr = '0L'
  760.           AND rrcty = '0'
  761.           AND rbukrs IN  s_rbukrs
  762.           AND ryear = c_gjahr
  763.           AND ( racct LIKE '1009100100%' OR racct LIKE '1009100200%')
  764.           AND rpmax = 16
  765.           AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  766.     ELSE.
  767.       SELECT * INTO CORRESPONDING FIELDS OF TABLE faglflext FROM faglflext
  768.         WHERE rldnr = '0L'
  769.           AND rrcty = '0'
  770.           AND rtcur = waers
  771.           AND rbukrs IN  s_rbukrs
  772.           AND ryear = c_gjahr
  773.           AND ( racct LIKE '1009100100%' OR racct LIKE '1009100200%')
  774.           AND rpmax = 16
  775.           AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  776.     ENDIF.
  777.   ENDIF.
  778.   LOOP AT faglflext.
  779.     tb_result-companyid = faglflext-rbukrs.
  780.     IF m_1 = 'X' OR p_flag = 'X'.
  781.       f_smny = f_smny + faglflext-hslvt.
  782.       f_money = f_money + faglflext-hslvt.
  783.     ELSE.
  784.       f_smny = f_smny + faglflext-tslvt.
  785.       f_money = f_money + faglflext-tslvt.
  786.     ENDIF.
  787.     IF i_monat >= 1.
  788.       IF m_1 = 'X' OR p_flag = 'X'.
  789.         f_money = f_money + faglflext-hsl01.
  790.       ELSE.
  791.         f_money = f_money + faglflext-tsl01.
  792.       ENDIF.
  793.     ENDIF.
  794.     IF i_monat >= 2.
  795.       IF m_1 = 'X' OR p_flag = 'X'.
  796.         f_money = f_money + faglflext-hsl02.
  797.       ELSE.
  798.         f_money = f_money + faglflext-tsl02.
  799.       ENDIF.
  800.     ENDIF.
  801.     IF i_monat >= 3.
  802.       IF m_1 = 'X' OR p_flag = 'X'.
  803.         f_money = f_money + faglflext-hsl03.
  804.       ELSE.
  805.         f_money = f_money + faglflext-tsl03.
  806.       ENDIF.
  807.     ENDIF.
  808.     IF i_monat >= 4.
  809.       IF m_1 = 'X' OR p_flag = 'X'.
  810.         f_money = f_money + faglflext-hsl04.
  811.       ELSE.
  812.         f_money = f_money + faglflext-tsl04.
  813.       ENDIF.
  814.     ENDIF.
  815.     IF i_monat >= 5.
  816.       IF m_1 = 'X' OR p_flag = 'X'.
  817.         f_money = f_money + faglflext-hsl05.
  818.       ELSE.
  819.         f_money = f_money + faglflext-tsl05.
  820.       ENDIF.
  821.     ENDIF.
  822.     IF i_monat >= 6.
  823.       IF m_1 = 'X' OR p_flag = 'X'.
  824.         f_money = f_money + faglflext-hsl06.
  825.       ELSE.
  826.         f_money = f_money + faglflext-tsl06.
  827.       ENDIF.
  828.     ENDIF.
  829.     IF i_monat >= 7.
  830.       IF m_1 = 'X' OR p_flag = 'X'.
  831.         f_money = f_money + faglflext-hsl07.
  832.       ELSE.
  833.         f_money = f_money + faglflext-tsl07.
  834.       ENDIF.
  835.     ENDIF.
  836.     IF i_monat >= 8.
  837.       IF m_1 = 'X' OR p_flag = 'X'.
  838.         f_money = f_money + faglflext-hsl08.
  839.       ELSE.
  840.         f_money = f_money + faglflext-tsl08.
  841.       ENDIF.
  842.     ENDIF.
  843.     IF i_monat >= 9.
  844.       IF m_1 = 'X' OR p_flag = 'X'.
  845.         f_money = f_money + faglflext-hsl09.
  846.       ELSE.
  847.         f_money = f_money + faglflext-tsl09.
  848.       ENDIF.
  849.     ENDIF.
  850.     IF i_monat >= 10.
  851.       IF m_1 = 'X' OR p_flag = 'X'.
  852.         f_money = f_money + faglflext-hsl10.
  853.       ELSE.
  854.         f_money = f_money + faglflext-tsl10.
  855.       ENDIF.
  856.     ENDIF.
  857.     IF i_monat >= 11.
  858.       IF m_1 = 'X' OR p_flag = 'X'.
  859.         f_money = f_money + faglflext-hsl11.
  860.       ELSE.
  861.         f_money = f_money + faglflext-tsl11.
  862.       ENDIF.
  863.     ENDIF.
  864.     IF i_monat >= 12.
  865.       IF m_1 = 'X' OR p_flag = 'X'.
  866.         f_money = f_money + faglflext-hsl12.
  867.       ELSE.
  868.         f_money = f_money + faglflext-tsl12.
  869.       ENDIF.
  870.     ENDIF.
  871.     IF i_monat >= 13.
  872.       IF m_1 = 'X' OR p_flag = 'X'.
  873.         f_money = f_money + faglflext-hsl13.
  874.       ELSE.
  875.         f_money = f_money + faglflext-tsl13.
  876.       ENDIF.
  877.     ENDIF.
  878.     IF i_monat >= 14.
  879.       IF m_1 = 'X' OR p_flag = 'X'.
  880.         f_money = f_money + faglflext-hsl14.
  881.       ELSE.
  882.         f_money = f_money + faglflext-tsl14.
  883.       ENDIF.
  884.     ENDIF.
  885.     IF i_monat >= 15.
  886.       IF m_1 = 'X' OR p_flag = 'X'.
  887.         f_money = f_money + faglflext-hsl15.
  888.       ELSE.
  889.         f_money = f_money + faglflext-tsl15.
  890.       ENDIF.
  891.     ENDIF.
  892.     IF i_monat >= 16.
  893.       IF m_1 = 'X' OR p_flag = 'X'.
  894.         f_money = f_money + faglflext-hsl16.
  895.       ELSE.
  896.         f_money = f_money + faglflext-tsl16.
  897.       ENDIF.
  898.     ENDIF.
  899.   ENDLOOP.
  900. ENDFORM.                    "CACUMONEY


  901. ***************************************************************
  902. *  ADD_ROW
  903. * a_type  标志行项目是否为合计或者小计
  904. * a_type1 标志金额是否需要取反 1负债类取反;2资产类取反;3都取反
  905. ***************************************************************
  906. FORM add_row USING a_asset1 a_km1 a_row1 "资产科目行号
  907.                    a_asset2 a_km2 a_row2
  908.                    a_monat a_rbukrs a_gjahr a_type a_type1.

  909.   DATA: f_smny LIKE faglflext-hslvt,
  910.         f_emny LIKE faglflext-hslvt.

  911.   CLEAR tb_result.        "清空结果表
  912.   tb_result-asset1  =  a_asset1.    "资产项目
  913.   tb_result-row1    =  a_row1.      "行次
  914.   tb_result-asset2  =  a_asset2.    "资产项目
  915.   tb_result-row2    =  a_row2.      "行次

  916.   IF a_type = 1."非合计项目
  917.     IF a_km1 <> '' AND a_km1 IS NOT INITIAL.     "判断科目编号不为空
  918.       PERFORM cacumoney USING a_km1 a_monat a_rbukrs a_gjahr
  919.                         CHANGING f_smny f_emny.  "调用另外一个函数返回值
  920.       IF a_type1 = 2 OR a_type1 = 3.
  921.         tb_result-start1  = 0 - f_smny.  "资产或都去反
  922.         tb_result-end1    = 0 - f_emny.
  923.       ELSE.
  924.         tb_result-start1  = f_smny.
  925.         tb_result-end1    = f_emny.
  926.       ENDIF.
  927.     ENDIF.
  928.     IF a_km2 <> '' AND a_km2 IS NOT INITIAL.
  929.       PERFORM cacumoney USING a_km2 a_monat a_rbukrs a_gjahr
  930.                         CHANGING f_smny f_emny.
  931.       IF  a_type1 = 1 OR a_type1 = 3 .
  932.         tb_result-start2  = 0 - f_smny.
  933.         tb_result-end2    = 0 - f_emny.
  934.       ELSE.
  935.         tb_result-start2  = f_smny.
  936.         tb_result-end2    = f_emny.
  937.       ENDIF.
  938.     ENDIF.
  939.   ELSEIF a_type = 2."左边资产类合计,右边负债类非合计项目
  940.     tb_result-start1    = f_sums1.
  941.     tb_result-end1      = f_sume1.

  942.     IF a_km2 <> '' AND a_km2 IS NOT INITIAL.
  943.       PERFORM cacumoney USING a_km2 a_monat a_rbukrs a_gjahr
  944.                         CHANGING f_smny f_emny.
  945.       IF a_type1 = 1 OR a_type1 = 3.          "负债取反,都取反
  946.         tb_result-start2  = 0 - f_smny.
  947.         tb_result-end2    = 0 - f_emny.
  948.       ELSE.
  949.         tb_result-start2  = f_smny.
  950.         tb_result-end2    = f_emny.
  951.       ENDIF.
  952.     ENDIF.
  953.   ELSEIF a_type = 3."左边资产类非合计,右边负债类合计项目
  954.     IF a_km1 <> '' AND a_km1 IS NOT INITIAL.
  955.       PERFORM cacumoney USING a_km1 a_monat a_rbukrs a_gjahr
  956.                         CHANGING f_smny f_emny.
  957.       IF a_type1 = 2 OR a_type1 = 3.          "资产取反,或都取反
  958.         tb_result-start1  = 0 - f_smny.
  959.         tb_result-end1    = 0 - f_emny.
  960.       ELSE.
  961.         tb_result-start1  = f_smny.
  962.         tb_result-end1    = f_emny.
  963.       ENDIF.

  964.     ENDIF.
  965.     tb_result-start2    = f_sums2.
  966.     tb_result-end2      = f_sume2.
  967.   ELSEIF a_type = 4."都是合计项目
  968.     tb_result-start1    = f_sums1.
  969.     tb_result-end1      = f_sume1.
  970.     tb_result-start2    = f_sums2.
  971.     tb_result-end2      = f_sume2.
  972.   ENDIF.
  973.   IF a_km1 = '1601'.
  974.     PERFORM cacumoney USING '1503' a_monat a_rbukrs a_gjahr
  975.                       CHANGING f_smny f_emny.
  976.     tb_result-start1  = tb_result-start1 + f_smny.
  977.     tb_result-end1    = tb_result-end1 + f_emny.
  978.   ENDIF.
  979.   APPEND tb_result.

  980. ENDFORM.                    "ADD_ROW

  981. *&--------------------------------------------------------------------*
  982. *&      Form  NUM2CHAR
  983. *&--------------------------------------------------------------------*
  984. *       text
  985. *---------------------------------------------------------------------*
  986. *      -->FNUM       text
  987. *      -->SRET       text
  988. *---------------------------------------------------------------------*
  989. FORM num2char USING fnum LIKE tb_result-end1 CHANGING sret.
  990.   WRITE fnum NO-ZERO TO sret.
  991.   IF fnum < 0.
  992.     CONCATENATE '-' sret INTO sret.
  993.   ENDIF.
  994.   IF sret CO '0.'.
  995.     sret = '               '.
  996.   ENDIF.
  997.   CONDENSE sret NO-GAPS.
  998. ENDFORM.                    "num2char

  999. *&---------------------------------------------------------------------*
  1000. *&      Form  init_layout
  1001. *&---------------------------------------------------------------------*
  1002. *       text
  1003. *----------------------------------------------------------------------*
  1004. FORM init_layout.
  1005.   layout-zebra = 'X'.
  1006.   layout-f2code = '&IC1'.
  1007.   layout-detail_popup = 'X'.
  1008.   layout-colwidth_optimize = 'X'.
  1009.   layout-no_vline = ''.
  1010.   layout-no_hline = ''.
  1011. *  LAYOUT-numc_sum = 'X'.
  1012.   layout-no_sumchoice = ''.
  1013.   layout-no_subchoice = ''.
  1014.   layout-no_totalline = ''.
  1015.   layout-no_subtotals = ''.
  1016. ENDFORM.                    "init_layout

  1017. *&---------------------------------------------------------------------*
  1018. *&      Form  TOP_OF_PAGE
  1019. *&---------------------------------------------------------------------*
  1020. *       text
  1021. *----------------------------------------------------------------------*
  1022. FORM top_of_page.
  1023.   SELECT SINGLE butxt INTO s_butxt
  1024.     FROM t001
  1025.       WHERE bukrs = prt_result-companyid.
  1026.   WRITE:/42  '中国人保寿险有限公司'.
  1027.   WRITE:/48  '资产负债表'.
  1028.   WRITE:/48  prtdate.
  1029.   WRITE:/2 '单位名称:',s_butxt, 64 '币    种:',txcurr.
  1030.   IF m_2 = 'X' AND waers <> 'CNY'.
  1031.     WRITE:45 '汇率:',exch_rate.
  1032.   ENDIF.
  1033.   WRITE:/64 '金额单位:',txunit.
  1034. ENDFORM.                    "TOP_OF_PAGE

  1035. *&---------------------------------------------------------------------*
  1036. *&      Form  END_OF_LIST
  1037. *&---------------------------------------------------------------------*
  1038. *       text
  1039. *----------------------------------------------------------------------*
  1040. FORM end_of_list.
  1041.   WRITE:/2  '公司负责人:', 40 '财务负责人:', 60 '复核:' ,85 '制表:'.
  1042. ENDFORM.                    "END_OF_LIST

  1043. *&---------------------------------------------------------------------*
  1044. *&      Form  EVENT_BUILD
  1045. *&---------------------------------------------------------------------*
  1046. *       text
  1047. *----------------------------------------------------------------------*
  1048. FORM event_build .
  1049.   DATA: ls_event TYPE slis_alv_event.
  1050.   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
  1051.     EXPORTING
  1052.       i_list_type = 0
  1053.     IMPORTING
  1054.       et_events   = eventcat[].
  1055.   READ TABLE eventcat WITH KEY name =  slis_ev_top_of_page
  1056.                             INTO ls_event.
  1057.   IF sy-subrc = 0.
  1058.     MOVE 'TOP_OF_PAGE' TO ls_event-form.
  1059.     APPEND ls_event TO eventcat.
  1060.   ENDIF.
  1061.   READ TABLE eventcat WITH KEY name =  slis_ev_end_of_list
  1062.                             INTO ls_event.
  1063.   IF sy-subrc = 0.
  1064.     MOVE 'END_OF_LIST' TO ls_event-form.
  1065.     APPEND ls_event TO eventcat.
  1066.   ENDIF.
  1067. ENDFORM.                    " EVENT_BUILD

  1068. *&---------------------------------------------------------------------*
  1069. *&      Form  init_fieldcat
  1070. *&---------------------------------------------------------------------*
  1071. *       text
  1072. *----------------------------------------------------------------------*
  1073. *      -->FLAG       text
  1074. *----------------------------------------------------------------------*
  1075. FORM init_fieldcat USING flag.               "初始化表头
  1076. *  clear fieldcat[].
  1077. *  CLEAR FIELDCAT.
  1078. *  FIELDCAT-FIELDNAME = 'COMPANYID'.
  1079. *  FIELDCAT-reptext_ddic = '科目'.
  1080. *  FIELDCAT-no_out = 'X'.
  1081. *  APPEND FIELDCAT.

  1082.   CLEAR fieldcat[].
  1083.   CLEAR fieldcat.
  1084.   fieldcat-fieldname = 'ASSET1'.
  1085.   fieldcat-reptext_ddic = '项目'.
  1086.   APPEND fieldcat.

  1087.   CLEAR fieldcat.
  1088.   fieldcat-fieldname = 'ROW1'.
  1089.   fieldcat-reptext_ddic = '行次'.
  1090.   APPEND fieldcat.

  1091.   CLEAR fieldcat.
  1092.   fieldcat-fieldname = 'START1'.
  1093.   fieldcat-reptext_ddic = '年初数'.
  1094.   fieldcat-just = 'R'.
  1095.   APPEND fieldcat.

  1096.   CLEAR fieldcat.
  1097.   fieldcat-fieldname = 'END1'.
  1098.   fieldcat-reptext_ddic = '期末数'.
  1099.   fieldcat-just = 'R'.
  1100.   APPEND fieldcat.

  1101.   CLEAR fieldcat.
  1102.   fieldcat-fieldname = 'ASSET2'.
  1103.   fieldcat-reptext_ddic = '项目'.
  1104.   APPEND fieldcat.

  1105.   CLEAR fieldcat.
  1106.   fieldcat-fieldname = 'ROW2'.
  1107.   fieldcat-reptext_ddic = '行次'.
  1108.   APPEND fieldcat.

  1109.   CLEAR fieldcat.
  1110.   fieldcat-fieldname = 'START2'.
  1111.   fieldcat-reptext_ddic = '年初数'.
  1112.   fieldcat-just = 'R'.
  1113.   APPEND fieldcat.

  1114.   CLEAR fieldcat.
  1115.   fieldcat-fieldname = 'END2'.
  1116.   fieldcat-reptext_ddic = '期末数'.
  1117.   fieldcat-just = 'R'.
  1118.   APPEND fieldcat.

  1119. *  CLEAR:SORTCAT,SORTCATLN.
  1120. **  SORTCATLN-SPOS = 1.
  1121. *  SORTCATLN-UP = 'X'.
  1122. *  SORTCATLN-FIELDNAME = 'COMPANYID'.
  1123. *  SORTCATLN-SUBTOT = 'X'.
  1124. *  SORTCATLN-GROUP = '*'.
  1125. *  APPEND SORTCATLN to SORTCAT.

  1126. ENDFORM.                    "init_fieldcat

  1127. *&---------------------------------------------------------------------*
  1128. *&      Form  LISTDATA
  1129. *&---------------------------------------------------------------------*
  1130. *       text
  1131. *----------------------------------------------------------------------*
  1132. FORM listdata.
  1133.   v_repid = sy-repid.
  1134.   CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  1135.     EXPORTING
  1136.       i_callback_pf_status_set = 'SET_PF_STATUS'
  1137.       i_callback_program       = v_repid
  1138.       i_callback_user_command  = 'USER_COMMAND'
  1139.       is_layout                = layout
  1140.       it_fieldcat              = fieldcat[]
  1141.       it_events                = eventcat
  1142.       it_sort                  = sortcat
  1143.       it_excluding             = rt_extab
  1144.     TABLES
  1145.       t_outtab                 = prt_result
  1146.     EXCEPTIONS
  1147.       program_error            = 1
  1148.       OTHERS                   = 2.
  1149.   IF sy-subrc <> 0.
  1150.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1151.        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1152.   ENDIF.
  1153. ENDFORM.                    "LISTDATA

  1154. *&---------------------------------------------------------------------*
  1155. *&      Form  set_pf_status
  1156. *&---------------------------------------------------------------------*
  1157. *       text
  1158. *----------------------------------------------------------------------*
  1159. *      -->RT_EXTAB   text
  1160. *----------------------------------------------------------------------*
  1161. FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  1162.   DATA: wa_extab TYPE slis_extab.
  1163.   wa_extab-fcode = '&OAD'.
  1164.   APPEND wa_extab TO rt_extab.
  1165.   wa_extab-fcode = '&AVE'.
  1166.   APPEND wa_extab TO rt_extab.
  1167.   SET PF-STATUS 'ZSTANDARD' EXCLUDING rt_extab ."copy from BCALV_TEST_LIST.
  1168. ENDFORM. "Set_pf_status

  1169. *&---------------------------------------------------------------------*
  1170. *&      Form  user_command
  1171. *&---------------------------------------------------------------------*
  1172. *       text
  1173. *----------------------------------------------------------------------*
  1174. *      -->R_UCOMM      text
  1175. *      -->RS_SELFIELD  text
  1176. *----------------------------------------------------------------------*
  1177. FORM user_command USING r_ucomm     LIKE sy-ucomm
  1178.                         rs_selfield TYPE slis_selfield.
  1179.   IF r_ucomm EQ '&PRT'.
  1180.     PERFORM open_form .
  1181.     PERFORM write_form USING 'MAIN' 'E1'.
  1182.     PERFORM write_form USING 'MAIN' 'E2'.
  1183.     LOOP AT prt_result.
  1184.       PERFORM write_form USING 'MAIN' 'E3'.
  1185.     ENDLOOP.
  1186.     PERFORM write_form USING 'MAIN' 'E4'.
  1187.     PERFORM close_form .
  1188.   ENDIF.
  1189. ENDFORM.  "User_command

  1190. *&---------------------------------------------------------------------*
  1191. *&      Form  open_form
  1192. *&---------------------------------------------------------------------*
  1193. *       text
  1194. *----------------------------------------------------------------------*
  1195. FORM open_form .
  1196.   CALL FUNCTION 'OPEN_FORM'
  1197.    EXPORTING
  1198. *     APPLICATION                       = 'TX'
  1199. *     ARCHIVE_INDEX                     =
  1200. *     ARCHIVE_PARAMS                    =
  1201. *     DEVICE                            = 'PRINTER'
  1202. *     Dialog                            = 'X'
  1203.       form                              =  'ZFIRP050'
  1204. *     language                          = 'M'
  1205. *     OPTIONS                           = OPTION
  1206. *     MAIL_SENDER                       =
  1207. *     MAIL_RECIPIENT                    =
  1208. *     MAIL_APPL_OBJECT                  =
  1209. *     RAW_DATA_INTERFACE                = '*'
  1210. *   IMPORTING
  1211. *     LANGUAGE                          =
  1212. *     NEW_ARCHIVE_PARAMS                =
  1213. *     RESULT                            =
  1214.    EXCEPTIONS
  1215.      canceled                          = 1
  1216.      device                            = 2
  1217.      form                              = 3
  1218.      options                           = 4
  1219.      unclosed                          = 5
  1220.      mail_options                      = 6
  1221.      archive_error                     = 7
  1222.      invalid_fax_number                = 8
  1223.      more_params_needed_in_batch       = 9
  1224.      spool_error                       = 10
  1225.      OTHERS                            = 11  .
  1226.   IF sy-subrc <> 0.
  1227.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1228.        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1229.   ENDIF.

  1230. ENDFORM.                    "open_form

  1231. *&--------------------------------------------------------------------*
  1232. *&      Form  write_form
  1233. *&--------------------------------------------------------------------*
  1234. *       text
  1235. *---------------------------------------------------------------------*
  1236. *      -->L_WINDOW   text
  1237. *      -->L_ELEMENT  text
  1238. *---------------------------------------------------------------------*
  1239. FORM write_form USING l_window l_element.

  1240.   CALL FUNCTION 'WRITE_FORM'
  1241.    EXPORTING
  1242.      element                        = l_element
  1243. *     FUNCTION                      = 'SET'
  1244. *     TYPE                          = 'BODY'
  1245.      window                         = l_window
  1246. *   IMPORTING
  1247. *     PENDING_LINES                  =
  1248.    EXCEPTIONS
  1249.      element                        = 1
  1250.      function                       = 2
  1251.      type                           = 3
  1252.      unopened                       = 4
  1253.      unstarted                      = 5
  1254.      window                         = 6
  1255.      bad_pageformat_for_print       = 7
  1256.      spool_error                    = 8
  1257.      OTHERS                         = 9
  1258.             .
  1259.   IF sy-subrc <> 0.
  1260.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1261.        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1262.   ENDIF.
  1263. ENDFORM.                    "write_form

  1264. *&--------------------------------------------------------------------*
  1265. *&      Form  close_form
  1266. *&--------------------------------------------------------------------*
  1267. *       text
  1268. *---------------------------------------------------------------------*
  1269. FORM close_form.
  1270.   CALL FUNCTION 'CLOSE_FORM'
  1271. *   IMPORTING
  1272. *     RESULT                         =
  1273. *     RDI_RESULT                     =
  1274. *   TABLES
  1275. *     OTFDATA                        =
  1276.    EXCEPTIONS
  1277.      unopened                       = 1
  1278.      bad_pageformat_for_print       = 2
  1279.      send_error                     = 3
  1280.      spool_error                    = 4
  1281.      OTHERS                         = 5
  1282.             .

  1283.   IF sy-subrc <> 0.
  1284.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1285.        WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1286.   ENDIF.

  1287. ENDFORM.                    "close_form

  1288. *&---------------------------------------------------------------------*
  1289. *&      Form  read_screen
  1290. *&---------------------------------------------------------------------*
  1291. *       text
  1292. *----------------------------------------------------------------------*
  1293. FORM read_screen.
  1294.   CLEAR dynpread[].
  1295.   dynpread-fieldname = 'M_2'.
  1296.   APPEND dynpread.
  1297.   CALL FUNCTION 'DYNP_VALUES_READ'
  1298.     EXPORTING
  1299.       dyname               = sy-repid
  1300.       dynumb               = sy-dynnr
  1301.     TABLES
  1302.       dynpfields           = dynpread
  1303.     EXCEPTIONS
  1304.       invalid_abapworkarea = 1
  1305.       invalid_dynprofield  = 2
  1306.       invalid_dynproname   = 3
  1307.       invalid_dynpronummer = 4
  1308.       invalid_request      = 5
  1309.       no_fielddescription  = 6
  1310.       invalid_parameter    = 7
  1311.       undefind_error       = 8
  1312.       double_conversion    = 9
  1313.       stepl_not_found      = 10
  1314.       OTHERS               = 11.
  1315.   IF sy-subrc <> 0.
  1316.     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1317.             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1318.   ENDIF.
  1319. ENDFORM.                    "read_screen

  1320. *&---------------------------------------------------------------------*
  1321. *&      Form  check
  1322. *&---------------------------------------------------------------------*
  1323. *       text
  1324. *----------------------------------------------------------------------*
  1325. FORM check.
  1326.   IF m_2 = 'X'.
  1327.     IF waers IS INITIAL.
  1328.       MESSAGE e398(00) WITH '请输入货币币种'.
  1329.     ENDIF.
  1330.   ENDIF.
  1331. ENDFORM.                    "check
复制代码
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表