直接运行的资产负债表

*&---------------------------------------------------------------------*
*& Report  ZTEST13
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST13 MESSAGE-ID zfirpt .           "报表名称

*&---------------------------------------------------------------------*
*& tables & nodes
*&---------------------------------------------------------------------*
TABLES:  t001,  "公司主数据
         bkpf,  "
         V_TCURR,
         FAGLFLEXT.  "科目余额表

*&---------------------------------------------------------------------*
*& internal tables
*&---------------------------------------------------------------------*
DATABEGIN OF tb_result OCCURS 0"资产负债表结果集
        companyid(4)  TYPE c,
        asset1(30TYPE c,         "资产项目
        row1(2)    TYPE c,         "行次
        start1     LIKE FAGLFLEXT-hslvt,"期初值
        end1       LIKE FAGLFLEXT-hslvt,"期未值
        asset2(30TYPE c,         "资产项目
        row2(2)    TYPE c,         "行次
        start2     LIKE FAGLFLEXT-hslvt,"期初值
        end2       LIKE FAGLFLEXT-hslvt,"期未值
      END OF tb_result.

DATABEGIN OF prt_result OCCURS 0"资产负债表结果集
        companyid(4)  TYPE c,
        asset1(30TYPE c,          "资产项目
        row1(2)    TYPE c,         "行次
        start1(16type c,          "期初值
        end1(16)   type c,          "期未值
        asset2(30TYPE c,          "资产项目
        row2(2)    TYPE c,         "行次
        start2(16type c,          "期初值
        end2(16)   type c,          "期未值
      END OF prt_result.

*&---------------------------------------------------------------------*
*& variant declare
*&---------------------------------------------------------------------*
DATA:  s_butxt(50type c,  "公司名称
      s_m1(23)  TYPE c,
      s_m2(23)  TYPE c,
      s_m3(23)  TYPE c,
      s_m4(23)  TYPE c.

**PARAMTERS FOR OUTPUT FORMAT
DATA: i_lwidth TYPE i VALUE 185,  "横线宽
      i_col1 TYPE i VALUE 35,                               "列1宽
      i_col2 TYPE i VALUE 4,                                "列2宽
      i_col3 TYPE i VALUE 20,                               "列3宽
      i_col4 TYPE i VALUE 20.                               "列4宽
data: DYNPREAD like table of DYNPREAD with header line.
data: DCURR like table of BAPI1093_0 with header line.
TYPE-POOLS: SLIS.
data: FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      FLD_HEAD TYPE SLIS_LISTHEADER,
      SORTCAT  TYPE SLIS_T_SORTINFO_ALV,
      SORTCATLN   LIKE   LINE OF SORTCAT,
      ITAB_LISTHEAD TYPE SLIS_T_LISTHEADER,
      LAYOUT TYPE  SLIS_LAYOUT_ALV,
      V_REPID LIKE SY-REPID,
      rt_extab TYPE slis_t_extab,
      EVENTCAT     TYPE   SLIS_T_EVENT.


data: tmpdate like sy-datum,
      prtdate like sy-datum,
      tempcurr like BAPI1093_1-FROM_CURR,
      EXCH_RATE(10type c,
      txunit(10type c,
      errorflag  type c,
      txcurr(16type c.

*&---------------------------------------------------------------------*
*& selection-screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS:
  s_rbukrs FOR bkpf-bukrs OBLIGATORY .     "公司代码
PARAMETERS:
  i_gjahr LIKE bkpf-gjahr DEFAULT sy-datum+0(4) OBLIGATORY,  "财务年度
  i_monat LIKE bkpf-monat OBLIGATORY,      "期间
*  waers   like bkpf-waers OBLIGATORY.      "货币代码
  p_butxt(40type c.

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

PARAMETERS:                                                 "单选按钮
   p_1  RADIOBUTTON GROUP g1 default 'X',
   p_2  RADIOBUTTON GROUP g1,
   p_3  RADIOBUTTON GROUP g1.

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

SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001.
PARAMETERS:                                                 "单选按钮
   m_1  RADIOBUTTON GROUP g2 default 'X',
   m_2  RADIOBUTTON GROUP g2,
   waers   like bkpf-waers ,      "货币代码
   p_flag as checkbox.
SELECTION-SCREEN END OF BLOCK b01.



*&---------------------------------------------------------------------*
*& initialization
*&---------------------------------------------------------------------*
INITIALIZATION.
    tit = '金额单位'.
*&---------------------------------------------------------------------*
*& AT SELECTION-SCREEN OUTPUT
*&---------------------------------------------------------------------*
*AT SELECTION-SCREEN OUTPUT.
*  perform read_screen.
*  LOOP AT SCREEN.
*    IF m_2 = 'X' AND ( screen-name = 'WAERS' or screen-name = 'P_FLAG'
*       or screen-name = '%_WAERS_%_APP_%-TEXT').
*      screen-active = 1.
*      if screen-name = 'WAERS'.
*        screen-request  = 1.
*        screen-required = 1.
*      endif.
*      MODIFY SCREEN.
*    ENDIF.
*    IF m_2 = '' AND ( screen-name = 'WAERS' or screen-name = 'P_FLAG'
*       or screen-name = '%_WAERS_%_APP_%-TEXT').
*      screen-active = 0.
*      if screen-name = 'WAERS'.
*        screen-request  = 0.
*        screen-required = 0.
*      endif.
*      MODIFY SCREEN.
*    ENDIF.
*  ENDLOOP.


*&---------------------------------------------------------------------*
*& at selection-screen
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
  perform check.

  SELECT * FROM t001 WHERE bukrs IN s_rbukrs .
    errorflag = ''.
    AUTHORITY-CHECK OBJECT 'ZFIRPT'                          "权限判断
             ID 'BUKRS' FIELD t001-bukrs.
    IF sy-subrc = 0.
       errorflag = 'f'.
    endif.
    AUTHORITY-CHECK OBJECT 'ZPARK'                          "权限判断
             ID 'BUKRS' FIELD t001-bukrs.
    IF sy-subrc = 0.
       errorflag = 'f'.
    endif.
    IF errorflag = ''.
        MESSAGE e999(z01) WITH '没有在公司代码' t001-bukrs '操作的权限!'.
    ENDIF.
  ENDSELECT.

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


*&---------------------------------------------------------------------*
*& start-of-selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  concatenate i_gjahr i_monat '01' into tmpdate.        "组合年份
  CALL FUNCTION 'LAST_DAY_OF_MONTHS'
    EXPORTING
      DAY_IN                 = tmpdate                  "根据传入的参数,输出一个月的最后一天
   IMPORTING
     LAST_DAY_OF_MONTH       = prtdate
   EXCEPTIONS
     DAY_IN_NO_DATE          = 1
     OTHERS                  = 2.
* 获得当前汇率
   tempcurr = waers.
   CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'
    EXPORTING
      RATE_TYPE        = 'M'
      FROM_CURR        = tempcurr
      TO_CURRNCY       = 'CNY'
      DATE             = tmpdate
   IMPORTING
     EXCH_RATE        = DCURR
*     RETURN           =
.

  read table DCURR index 1.
       EXCH_RATE = DCURR-EXCH_RATE.

  if p_1 = 'X'.                  "根据单选框的值给变量值
    txunit = '元'.
  endif.
  if p_2 = 'X'.
    txunit(*) = '千元'.
  endif.
  if p_3 = 'X'.
    txunit = '万元'.
  endif.

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

  select single ktext into txcurr       "根据货币单位的值返回货币名称
    from tcurt
   where waers = waers.

   if m_1 = 'X'.
      txcurr = '人民币(汇总)'.
   ELSE.
       If p_flag = 'X'.
         CONCATENATE txcurr '折人民币' into txcurr.
       ENDIF.
   endif.

* 取公司名称
  if s_rbukrs-high is Initial OR s_rbukrs-low = s_rbukrs-high.      "判断是否为空
    SELECT SINGLE butxt INTO s_butxt FROM t001 WHERE bukrs = s_rbukrs-low.
  else.
     if p_butxt is not initial.
        s_butxt = p_butxt.
     else.
        CONCATENATE '从' s_rbukrs-low '到' s_rbukrs-high into s_butxt.
     endif.
  endif.
  if s_rbukrs-low(2) = s_rbukrs-high(2and s_rbukrs-low <> s_rbukrs-high.
    clear s_butxt.
    SELECT SINGLE butxt INTO s_butxt FROM t001 WHERE bukrs = s_rbukrs-low.
    CONCATENATE s_butxt '(汇总)' into s_butxt.
  endif.


  data CURR like table of TCURR with header line.
    SELECT * into corresponding fields of table CURR FROM TCURR
      where KURST = 'M'
        and FCURR = waers
        and TCURR = 'CNY'.


  DATA: f_tols1 LIKE FAGLFLEXT-hslvt,"资产期初总计
        f_tole1 LIKE FAGLFLEXT-hslvt,"资产期末总计
        f_tols2 LIKE FAGLFLEXT-hslvt,"负债期初总计
        f_tole2 LIKE FAGLFLEXT-hslvt,"负债期末总计
        f_sums1 LIKE FAGLFLEXT-hslvt,"资产期初小计
        f_sume1 LIKE FAGLFLEXT-hslvt,"资产期末小计
        f_sums2 LIKE FAGLFLEXT-hslvt,"负债期初小计
        f_sume2 LIKE FAGLFLEXT-hslvt,"负债期末小计
        f_rlts1 LIKE FAGLFLEXT-hslvt,
        f_rlte1 LIKE FAGLFLEXT-hslvt,
*        zx_s LIKE FAGLFLEXT-hslvt,
*        zx_e LIKE FAGLFLEXT-hslvt,
        f_rlts2 LIKE FAGLFLEXT-hslvt,
        f_rlte2 LIKE FAGLFLEXT-hslvt.

  DATA: f_smny1 LIKE FAGLFLEXT-hslvt,
        f_emny1 LIKE FAGLFLEXT-hslvt.

**数据计算

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

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

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

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


  PERFORM add_row USING '  短期投资'   '1101' '3'
                        '  应付手续费' '2111' '48'
                        i_monat s_rbukrs i_gjahr 1 1.
  f_sums2 = f_sums2 + tb_result-start2.
  f_sume2 = f_sume2 + tb_result-end2.
  f_tols1 = f_tols1 + tb_result-start1.
  f_tole1 = f_tole1 + tb_result-end1.
*********************************************************************************************************
  PERFORM add_row USING '  短期投资跌价准备'   '1102' '4'
                        '  待返售债券' '2109' '48'
                        i_monat s_rbukrs i_gjahr 1 1.
  f_sums2 = f_sums2 + tb_result-start2.
  f_sume2 = f_sume2 + tb_result-end2.
  f_tols1 = f_tols1 + tb_result-start1.
  f_tole1 = f_tole1 + tb_result-end1.

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

  f_sums1 = f_tols1.
  f_sume1 = f_tole1.

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

*-----------------------------------流动资产--------------------

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

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


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

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

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

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


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


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


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



  PERFORM add_row USING '    减:累计折旧'   '1602' '31'
                        '  长期负债合计' '' '80'
                        i_monat s_rbukrs i_gjahr 3 2.
  f_sums1 = f_sums1 - tb_result-start1.
  f_sume1 = f_sume1 - tb_result-end1.
  f_tols1 = f_tols1 - tb_result-start1.
  f_tole1 = f_tole1 - tb_result-end1.
  f_tols2 = f_tols2 + f_sums2.
  f_tole2 = f_tole2 + f_sume2.
  f_sums2 = f_sums2 + f_rlts2.  "长期负债合计 + 流动负债合计
  f_sume2 = f_sume2 + f_rlte2.


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


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


  PERFORM add_row USING ' 在建工程'   '1606' '33'
                        '  实收资本' '3101' '83'
                        i_monat s_rbukrs i_gjahr 1 1.
  f_sums1 = f_sums1 + tb_result-start1.
  f_sume1 = f_sume1 + tb_result-end1.
  f_tols1 = f_tols1 + tb_result-start1.
  f_tole1 = f_tole1 + tb_result-end1.
  f_sums2 = tb_result-start2.
  f_sume2 = tb_result-end2.


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

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


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


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


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

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

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

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

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

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



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



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

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

  f_sums1 = f_tols1.
  f_sume1 = f_tole1.

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




***千元
  if p_2 = 'X'.                               "进行单位的换算
    loop at tb_result.
      if tb_result-start1 <> 0.
        tb_result-start1 = tb_result-start1 / 1000.
      endif.
      if tb_result-end1 <> 0.
        tb_result-end1 = tb_result-end1 / 1000.
      endif.
      if tb_result-start2 <> 0.
        tb_result-start2 = tb_result-start2 / 1000.
      endif.
      if tb_result-end2 <> 0.
        tb_result-end2 = tb_result-end2 / 1000.
      endif.
      modify tb_result.
    endloop.
  endif.
***万元
  if p_3 = 'X'.                              "进行单位的换算
    loop at tb_result.
      if tb_result-start1 <> 0.
        tb_result-start1 = tb_result-start1 / 10000.
      endif.
      if tb_result-end1 <> 0.
        tb_result-end1 = tb_result-end1 / 10000.
      endif.
      if tb_result-start2 <> 0.
        tb_result-start2 = tb_result-start2 / 10000.
      endif.
      if tb_result-end2 <> 0.
        tb_result-end2 = tb_result-end2 / 10000.
      endif.
      modify tb_result.
    endloop.
  endif.
*&---------------------------------------------------------------------*
*& end-of-selection
*&---------------------------------------------------------------------*
END-OF-SELECTION.

  loop at tb_result.
    clear prt_result.
    move-corresponding tb_result to prt_result.
    perform num2char using tb_result-start1 changing prt_result-start1.
    perform num2char using tb_result-start2 changing prt_result-start2.
    perform num2char using tb_result-end1 changing prt_result-end1.
    perform num2char using tb_result-end2 changing prt_result-end2.
*    perform num2char using prt_result-start1 changing prt_result-start1.
*    perform num2char using prt_result-start2 changing prt_result-start2.
*    perform num2char using prt_result-end1 changing prt_result-end1.
*    perform num2char using prt_result-end2 changing prt_result-end2.
    append prt_result.
  endloop.
  perform init_fieldcat using ''.
  perform init_layout.
  perform event_build.
  perform listdata.


***************************************************************
*  CACUMONEY
*  查询字段 racct   代表的科目名称
*  子查询语句 saknr 代表的是科目的编号
***************************************************************
FORM cacumoney USING     s_km     i_monat  c_rbukrs  c_gjahr
               CHANGING  f_smny   f_money.
  DATA s_km1(11TYPE c.
  data FAGLFLEXT like table of FAGLFLEXT with header line.
  CONCATENATE s_km '%' INTO s_km1.
  f_smny = 0. f_money = 0.
  if m_1 = 'X'.
    SELECT * into corresponding fields of table FAGLFLEXT FROM FAGLFLEXT
      WHERE rldnr = '0L'
        AND rrcty = '0'
        AND rbukrs IN  s_rbukrs
        AND ryear = c_gjahr
        AND racct LIKE s_km1
        AND rpmax = 16
        AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  else.
    SELECT * into corresponding fields of table FAGLFLEXT FROM FAGLFLEXT
      WHERE rldnr = '0L'
        AND rrcty = '0'
        AND rtcur = waers
        AND rbukrs IN  s_rbukrs
        AND ryear = c_gjahr
        AND racct LIKE s_km1
        AND rpmax = 16
        AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
  endif.

  if s_km = '3141'.
      clear FAGLFLEXT[].
      if m_1 = 'X'.
        SELECT * into corresponding fields of table FAGLFLEXT FROM FAGLFLEXT
          WHERE rldnr = '0L'
            AND rrcty = '0'
            AND rbukrs IN  s_rbukrs
            AND ryear = c_gjahr
            AND ( racct LIKE '3141%' OR racct LIKE '3151%' OR ( racct >= '4101000000' AND racct =< '4701999999' ) )
            AND rpmax = 16
            AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
      else.
        SELECT * into corresponding fields of table FAGLFLEXT FROM FAGLFLEXT
          WHERE rldnr = '0L'
            AND rrcty = '0'
            AND rtcur = waers
            AND rbukrs IN  s_rbukrs
            AND ryear = c_gjahr
            AND ( racct LIKE '3141%' OR racct LIKE '3151%' OR ( racct >= '4101000000' AND racct =< '4701999999' ) )
            AND rpmax = 16
            AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
      endif.
   endif.

   if s_km = '1009010000'.
      clear FAGLFLEXT[].
      if m_1 = 'X'.
        SELECT * into corresponding fields of table FAGLFLEXT FROM FAGLFLEXT
          WHERE rldnr = '0L'
            AND rrcty = '0'
            AND rbukrs IN  s_rbukrs
            AND ryear = c_gjahr
            AND ( racct LIKE '1009010000%' OR racct LIKE '1009020000%' OR  racct LIKE '1009030000%' OR racct LIKE '1003%' OR racct LIKE '1004%' )
            AND rpmax = 16
            AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
      else.
        SELECT * into corresponding fields of table FAGLFLEXT FROM FAGLFLEXT
          WHERE rldnr = '0L'
            AND rrcty = '0'
            AND rtcur = waers
            AND rbukrs IN  s_rbukrs
            AND ryear = c_gjahr
            AND ( racct LIKE '1009010000%' OR racct LIKE '1009020000%' OR  racct LIKE '1009030000%' OR racct LIKE '1003%' OR racct LIKE '1004%' )
            AND rpmax = 16
            AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
      endif.
   endif.

   if s_km = '1009100100'.
      clear FAGLFLEXT[].
      if m_1 = 'X'.
        SELECT * into corresponding fields of table FAGLFLEXT FROM FAGLFLEXT
          WHERE rldnr = '0L'
            AND rrcty = '0'
            AND rbukrs IN  s_rbukrs
            AND ryear = c_gjahr
            AND ( racct LIKE '1009100100%' OR racct LIKE '1009100200%')
            AND rpmax = 16
            AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
      else.
        SELECT * into corresponding fields of table FAGLFLEXT FROM FAGLFLEXT
          WHERE rldnr = '0L'
            AND rrcty = '0'
            AND rtcur = waers
            AND rbukrs IN  s_rbukrs
            AND ryear = c_gjahr
            AND ( racct LIKE '1009100100%' OR racct LIKE '1009100200%')
            AND rpmax = 16
            AND racct IN ( SELECT saknr FROM ska1 WHERE ktopl = 'PICL' ).
      endif.
   endif.
  loop at FAGLFLEXT.
    tb_result-companyid = FAGLFLEXT-RBUKRS.
    if m_1 = 'X' or p_flag = 'X'.
      f_smny = f_smny + FAGLFLEXT-hslvt.
      f_money = f_money + FAGLFLEXT-hslvt.
    else.
      f_smny = f_smny + FAGLFLEXT-tslvt.
      f_money = f_money + FAGLFLEXT-tslvt.
    endif.
    IF i_monat >= 1.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl01.
      else.
        f_money = f_money + FAGLFLEXT-tsl01.
      endif.
    ENDIF.
    IF i_monat >= 2.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl02.
      else.
        f_money = f_money + FAGLFLEXT-tsl02.
      endif.
    ENDIF.
    IF i_monat >= 3.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl03.
      else.
        f_money = f_money + FAGLFLEXT-tsl03.
      endif.
    ENDIF.
    IF i_monat >= 4.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl04.
      else.
        f_money = f_money + FAGLFLEXT-tsl04.
      endif.
    ENDIF.
    IF i_monat >= 5.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl05.
      else.
        f_money = f_money + FAGLFLEXT-tsl05.
      endif.
    ENDIF.
    IF i_monat >= 6.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl06.
      else.
        f_money = f_money + FAGLFLEXT-tsl06.
      endif.
    ENDIF.
    IF i_monat >= 7.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl07.
      else.
        f_money = f_money + FAGLFLEXT-tsl07.
      endif.
    ENDIF.
    IF i_monat >= 8.
     if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl08.
      else.
        f_money = f_money + FAGLFLEXT-tsl08.
      endif.
    ENDIF.
    IF i_monat >= 9.
     if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl09.
      else.
        f_money = f_money + FAGLFLEXT-tsl09.
      endif.
    ENDIF.
    IF i_monat >= 10.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl10.
      else.
        f_money = f_money + FAGLFLEXT-tsl10.
      endif.
    ENDIF.
    IF i_monat >= 11.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl11.
      else.
        f_money = f_money + FAGLFLEXT-tsl11.
      endif.
    ENDIF.
    IF i_monat >= 12.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl12.
      else.
        f_money = f_money + FAGLFLEXT-tsl12.
      endif.
    ENDIF.
    IF i_monat >= 13.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl13.
      else.
        f_money = f_money + FAGLFLEXT-tsl13.
      endif.
    ENDIF.
    IF i_monat >= 14.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl14.
      else.
        f_money = f_money + FAGLFLEXT-tsl14.
      endif.
    ENDIF.
    IF i_monat >= 15.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl15.
      else.
        f_money = f_money + FAGLFLEXT-tsl15.
      endif.
    ENDIF.
    IF i_monat >= 16.
      if m_1 = 'X' or p_flag = 'X'.
        f_money = f_money + FAGLFLEXT-hsl16.
      else.
        f_money = f_money + FAGLFLEXT-tsl16.
      endif.
    ENDIF.
  endloop.
ENDFORM.                    "CACUMONEY


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

  DATA: f_smny LIKE FAGLFLEXT-hslvt,
        f_emny LIKE FAGLFLEXT-hslvt.

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

  IF a_type = 1."非合计项目
    IF a_km1 <> '' AND a_km1 IS NOT INITIAL.     "判断科目编号不为空
      PERFORM cacumoney USING a_km1 a_monat a_rbukrs a_gjahr
                        CHANGING f_smny f_emny.  "调用另外一个函数返回值
      if a_type1 = 2 or a_type1 = 3.
        tb_result-start1  = 0 - f_smny.  "资产或都去反
        tb_result-end1    = 0 - f_emny.
      else.
        tb_result-start1  = f_smny.
        tb_result-end1    = f_emny.
      endif.
    ENDIF.
    IF a_km2 <> '' AND a_km2 IS NOT INITIAL.
      PERFORM cacumoney USING a_km2 a_monat a_rbukrs a_gjahr
                        CHANGING f_smny f_emny.
      IF  a_type1 = 1 or a_type1 = 3 .
        tb_result-start2  = 0 - f_smny.
        tb_result-end2    = 0 - f_emny.
      ELSE.
        tb_result-start2  = f_smny.
        tb_result-end2    = f_emny.
      ENDIF.
    ENDIF.
  ELSEIF a_type = 2."左边资产类合计,右边负债类非合计项目
    tb_result-start1    = f_sums1.
    tb_result-end1      = f_sume1.

    IF a_km2 <> '' AND a_km2 IS NOT INITIAL.
      PERFORM cacumoney USING a_km2 a_monat a_rbukrs a_gjahr
                        CHANGING f_smny f_emny.
      IF a_type1 = 1 or a_type1 = 3.          "负债取反,都取反
        tb_result-start2  = 0 - f_smny.
        tb_result-end2    = 0 - f_emny.
      ELSE.
        tb_result-start2  = f_smny.
        tb_result-end2    = f_emny.
      ENDIF.
    ENDIF.
  ELSEIF a_type = 3."左边资产类非合计,右边负债类合计项目
    IF a_km1 <> '' AND a_km1 IS NOT INITIAL.
      PERFORM cacumoney USING a_km1 a_monat a_rbukrs a_gjahr
                        CHANGING f_smny f_emny.
      if a_type1 = 2 or a_type1 = 3.          "资产取反,或都取反
        tb_result-start1  = 0 - f_smny.
        tb_result-end1    = 0 - f_emny.
      else.
        tb_result-start1  = f_smny.
        tb_result-end1    = f_emny.
      endif.

    ENDIF.
    tb_result-start2    = f_sums2.
    tb_result-end2      = f_sume2.
  ELSEIF a_type = 4."都是合计项目
    tb_result-start1    = f_sums1.
    tb_result-end1      = f_sume1.
    tb_result-start2    = f_sums2.
    tb_result-end2      = f_sume2.
  ENDIF.
  IF a_km1 = '1601'.
      PERFORM cacumoney USING '1503' a_monat a_rbukrs a_gjahr
                        CHANGING f_smny f_emny.
        tb_result-start1  = tb_result-start1 + f_smny.
        tb_result-end1    = tb_result-end1 + f_emny.
  ENDIF.
  APPEND tb_result.

ENDFORM.                    "ADD_ROW

*&--------------------------------------------------------------------*
*&      Form  NUM2CHAR
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->FNUM       text
*      -->SRET       text
*---------------------------------------------------------------------*
FORM num2char USING fnum like tb_result-end1 CHANGING sret.
  WRITE fnum NO-ZERO TO sret.
  IF fnum < 0.
    CONCATENATE '-' sret INTO sret.
  ENDIF.
  if sret CO '0.'.
    sret = '               '.
  endif.
  CONDENSE sret NO-GAPS.
ENDFORM.

form init_layout.
  LAYOUT-ZEBRA = 'X'.
  LAYOUT-F2CODE = '&IC1'.
  LAYOUT-DETAIL_POPUP = 'X'.
  LAYOUT-colwidth_optimize = 'X'.
  LAYOUT-no_vline = ''.
  LAYOUT-no_hline = ''.
*  LAYOUT-numc_sum = 'X'.
  LAYOUT-no_sumchoice = ''.
  LAYOUT-no_subchoice = ''.
  LAYOUT-no_totalline = ''.
  LAYOUT-no_subtotals = ''.
endform.

FORM TOP_OF_PAGE.
  select single butxt into s_butxt
    from t001
      where bukrs = prt_result-companyid.
  write:/42  '中国人保寿险有限公司'.
  write:/48  '资产负债表'.
  write:/48  prtdate.
  write:/2 '单位名称:',s_butxt, 64 '币    种:',txcurr.
  if m_2 = 'X' AND waers <> 'CNY'.
    write:45 '汇率:',EXCH_RATE.
  endif.
  write:/64 '金额单位:',txunit.
ENDFORM.

FORM END_OF_LIST.
  write:/2  '公司负责人:'40 '财务负责人:'60 '复核:' ,85 '制表:'.
ENDFORM.

FORM EVENT_BUILD .
  data: ls_event type slis_alv_event.
  call function 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = EVENTCAT[].
  read table EVENTCAT with key name =  slis_ev_top_of_page
                            into ls_event.
  if sy-subrc = 0.
    move 'TOP_OF_PAGE' to ls_event-form.
    append ls_event to EVENTCAT.
  endif.
  read table EVENTCAT with key name =  slis_ev_end_of_list
                            into ls_event.
  if sy-subrc = 0.
    move 'END_OF_LIST' to ls_event-form.
    append ls_event to EVENTCAT.
  endif.
ENDFORM.                    " EVENT_BUILD

form init_fieldcat using flag.               "初始化表头
*  clear fieldcat[].
*  CLEAR FIELDCAT.
*  FIELDCAT-FIELDNAME = 'COMPANYID'.
*  FIELDCAT-reptext_ddic = '科目'.
*  FIELDCAT-no_out = 'X'.
*  APPEND FIELDCAT.

  clear fieldcat[].
  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME = 'ASSET1'.
  FIELDCAT-reptext_ddic = '项目'.
  APPEND FIELDCAT.

  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME = 'ROW1'.
  FIELDCAT-reptext_ddic = '行次'.
  APPEND FIELDCAT.

  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME = 'START1'.
  FIELDCAT-reptext_ddic = '年初数'.
  FIELDCAT-just = 'R'.
  APPEND FIELDCAT.

  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME = 'END1'.
  FIELDCAT-reptext_ddic = '期末数'.
  FIELDCAT-just = 'R'.
  APPEND FIELDCAT.

  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME = 'ASSET2'.
  FIELDCAT-reptext_ddic = '项目'.
  APPEND FIELDCAT.

  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME = 'ROW2'.
  FIELDCAT-reptext_ddic = '行次'.
  APPEND FIELDCAT.

  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME = 'START2'.
  FIELDCAT-reptext_ddic = '年初数'.
  FIELDCAT-just = 'R'.
  APPEND FIELDCAT.

  CLEAR FIELDCAT.
  FIELDCAT-FIELDNAME = 'END2'.
  FIELDCAT-reptext_ddic = '期末数'.
  FIELDCAT-just = 'R'.
  APPEND FIELDCAT.

*  CLEAR:SORTCAT,SORTCATLN.
**  SORTCATLN-SPOS = 1.
*  SORTCATLN-UP = 'X'.
*  SORTCATLN-FIELDNAME = 'COMPANYID'.
*  SORTCATLN-SUBTOT = 'X'.
*  SORTCATLN-GROUP = '*'.
*  APPEND SORTCATLN to SORTCAT.

endform.

FORM LISTDATA.
 v_repid = sy-repid.
 CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
      EXPORTING
           I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
           I_CALLBACK_PROGRAM      =  V_REPID
           I_CALLBACK_USER_COMMAND =  'USER_COMMAND'
           IS_LAYOUT               =  LAYOUT
           IT_FIELDCAT             =  FIELDCAT[]
           IT_EVENTS               =  EVENTCAT
           IT_SORT                 =  SORTCAT
           IT_EXCLUDING            =  rt_extab
      TABLES
           T_OUTTAB                =  prt_result
      EXCEPTIONS
           PROGRAM_ERROR           = 1
           OTHERS                  = 2.
 IF SY-SUBRC <> 0.
   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
      WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
 ENDIF.
ENDFORM.

FORM set_pf_status using rt_extab TYPE slis_t_extab.
  data: wa_extab type slis_extab.
  wa_extab-fcode = '&OAD'.
  append wa_extab to rt_extab.
  wa_extab-fcode = '&AVE'.
  append wa_extab to rt_extab.
  SET PF-STATUS 'ZSTANDARD' EXCLUDING rt_extab ."copy from BCALV_TEST_LIST.
ENDFORM"Set_pf_status

FORM user_command USING r_ucomm     LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.
IF r_ucomm EQ '&PRT'.
  PERFORM open_form .
  PERFORM write_form USING 'MAIN' 'E1'.
  PERFORM write_form USING 'MAIN' 'E2'.
  loop at prt_result.
    PERFORM write_form USING 'MAIN' 'E3'.
  endloop.
  PERFORM write_form USING 'MAIN' 'E4'.
  PERFORM close_form .
ENDIF.
ENDFORM.  "User_command

FORM open_form .
  CALL FUNCTION 'OPEN_FORM'
   EXPORTING
*     APPLICATION                       = 'TX'
*     ARCHIVE_INDEX                     =
*     ARCHIVE_PARAMS                    =
*     DEVICE                            = 'PRINTER'
*     DIALOG                            = 'X'
      form                              =  'ZFIRP050'
*     language                          = 'M'
*     OPTIONS                           = OPTION
*     MAIL_SENDER                       =
*     MAIL_RECIPIENT                    =
*     MAIL_APPL_OBJECT                  =
*     RAW_DATA_INTERFACE                = '*'
*   IMPORTING
*     LANGUAGE                          =
*     NEW_ARCHIVE_PARAMS                =
*     RESULT                            =
   EXCEPTIONS
     canceled                          = 1
     device                            = 2
     form                              = 3
     options                           = 4
     unclosed                          = 5
     mail_options                      = 6
     archive_error                     = 7
     invalid_fax_number                = 8
     more_params_needed_in_batch       = 9
     spool_error                       = 10
     OTHERS                            = 11  .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.                    "open_form

*&--------------------------------------------------------------------*
*&      Form  write_form
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->L_WINDOW   text
*      -->L_ELEMENT  text
*---------------------------------------------------------------------*
FORM write_form USING l_window l_element.

  CALL FUNCTION 'WRITE_FORM'
   EXPORTING
     element                        = l_element
*     FUNCTION                      = 'SET'
*     TYPE                          = 'BODY'
     window                         = l_window
*   IMPORTING
*     PENDING_LINES                  =
   EXCEPTIONS
     element                        = 1
     function                       = 2
     type                           = 3
     unopened                       = 4
     unstarted                      = 5
     window                         = 6
     bad_pageformat_for_print       = 7
     spool_error                    = 8
     OTHERS                         = 9
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    "write_form

*&--------------------------------------------------------------------*
*&      Form  close_form
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM close_form.
  CALL FUNCTION 'CLOSE_FORM'
*   IMPORTING
*     RESULT                         =
*     RDI_RESULT                     =
*   TABLES
*     OTFDATA                        =
   EXCEPTIONS
     unopened                       = 1
     bad_pageformat_for_print       = 2
     send_error                     = 3
     spool_error                    = 4
     OTHERS                         = 5
            .

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

ENDFORM.                    "close_form

form read_screen.
  clear dynpread[].
  DYNPREAD-FIELDNAME = 'M_2'.
  APPEND DYNPREAD.
CALL FUNCTION 'DYNP_VALUES_READ'
  EXPORTING
    DYNAME                         = sy-repid
    DYNUMB                         = sy-dynnr
  TABLES
    DYNPFIELDS                     = DYNPREAD
 EXCEPTIONS
   INVALID_ABAPWORKAREA           = 1
   INVALID_DYNPROFIELD            = 2
   INVALID_DYNPRONAME             = 3
   INVALID_DYNPRONUMMER           = 4
   INVALID_REQUEST                = 5
   NO_FIELDDESCRIPTION            = 6
   INVALID_PARAMETER              = 7
   UNDEFIND_ERROR                 = 8
   DOUBLE_CONVERSION              = 9
   STEPL_NOT_FOUND                = 10
   OTHERS                         = 11
          .
IF SY-SUBRC <> 0.
   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform.

form check.
  if m_2 = 'X'.
      if waers is initial.
        MESSAGE e398(00WITH '请输入货币币种'.
      endif.
  endif.
endform.

你可能感兴趣的:(直接运行的资产负债表)