财务报表之多公司利润表

财务报表之多公司利润表
财务报表之多公司利润表
核心代码:
-------------------------------------------------------------*
REPORT zxxxxx MESSAGE-ID zxxxxx.
&---------------------------------------------------------------------
--------------------------------------------------------------------
*& Tables Declaration
--------------------------------------------------------------------
TABLES: bkpf,skb1,faglflext,skat,bseg,bsis,proj.
DATA : t_out TYPE TABLE OF zsfi_0005 WITH HEADER LINE .
DATA : wa_out LIKE zsfi_0005 .
DATA :
gt_fagl TYPE TABLE OF fagl_011pc WITH HEADER LINE,
gt_out LIKE TABLE OF zsfi_0005 WITH HEADER LINE.

DATA:gw_out LIKE LINE OF gt_out.

DATA: gt_out06 LIKE TABLE OF zsfi_0006 WITH HEADER LINE.

  • -------------ALV--------------------------------*
    TYPE-POOLS: slis.

DATA: "gt_output TYPE STANDARD TABLE OF ty_output,
gs_layout TYPE lvc_s_layo,
gt_fieldcat TYPE lvc_t_fcat,
gt_event TYPE slis_t_event,
gw_fieldcat LIKE LINE OF gt_fieldcat,
go_alv_grid TYPE REF TO cl_gui_alv_grid.

DATA gt_sort TYPE slis_t_sortinfo_alv.
DATA gs_variant TYPE disvariant.
DATA: sla TYPE lvc_s_layo.

DATA : g_butxt TYPE butxt .
*---- 针对3个保证金科目 从BSEG 里面取数.
DATA: th_bseg TYPE bseg.
DATA: td_bseg TYPE STANDARD TABLE OF bseg.

DATA: ls_wwwdata TYPE wwwdatatab.
DATA: v_excel TYPE ole2_object. " Excel object
DATA: v_book TYPE ole2_object.
DATA: v_sheet TYPE ole2_object.
DATA: v_cell TYPE ole2_object.
TYPES: ty_range_ergsl_tt TYPE RANGE OF ergsl.
DATA : g_but(1) TYPE c .

TYPES: BEGIN OF ty_kostl,
typ,"正常科目/功能范围+科目
number TYPE i,
sign TYPE c LENGTH 1,
option TYPE c LENGTH 2,
low LIKE csks-kostl,
high LIKE csks-kostl,
END OF ty_kostl.
DATA: gs_kostl TYPE ty_kostl.
DATA: gt_kostl TYPE TABLE OF ty_kostl.

TYPES: BEGIN OF ty_fkber,
typ, "正常功能范围/单独功能范围+科目
number TYPE i,
sign TYPE c LENGTH 1,
option TYPE c LENGTH 2,
low LIKE bseg-fkber_long,
high LIKE bseg-fkber_long,
END OF ty_fkber.
DATA gs_fkber TYPE ty_fkber.
DATA gt_fkber TYPE TABLE OF ty_fkber.

DATA:gt_get_hkont TYPE RANGE OF bseg-hkont.
DATA:gs_get_hkont LIKE LINE OF gt_get_hkont.
DATA:gt_get_budat TYPE RANGE OF bkpf-budat.
DATA:gs_get_budat LIKE LINE OF gt_get_budat.
DATA gt_get_fkber TYPE RANGE OF bseg-fkber.
DATA gs_get_fkber LIKE LINE OF gt_get_fkber.

DATA gt_get_rfarea TYPE RANGE OF bseg-fkber.
DATA gs_get_rfarea LIKE LINE OF gt_get_rfarea.
DATA:gt_get_racct TYPE RANGE OF bseg-hkont.
DATA:gs_get_racct LIKE LINE OF gt_get_hkont.

DATA: BEGIN OF gs_t001,
bukrs TYPE t001-bukrs,
END OF gs_t001,
gt_t001 LIKE TABLE OF gs_t001.

FIELD-SYMBOLS: <dyn_output> TYPE STANDARD TABLE,
<dyn_wa> TYPE any.

FIELD-SYMBOLS: <l_i> TYPE any,
<l_tslvt> TYPE any, "
<l_tslvt1> TYPE any, "
<l_tslvt2> TYPE any. "

DEFINE add_out.
&1-TYPENAME = &2 .
&1-i = &3 .
APPEND &1 .
END-OF-DEFINITION.

TYPES: BEGIN OF ty_output,
typename TYPE zde_type, " 行项目内容
i TYPE i, " 行次
tslvt TYPE hslvt12, " 业务货币的余额结转
tslvt1 TYPE hslvt12, " 本期累计数
tslvt2 TYPE hslvt12, " 去年同期累计数
*

  •     text2    TYPE text40,    " 负债和所有者权益
    
  •     hangci2  TYPE i,         " 行次
    
  •     hqmye2   TYPE hslvt12,   " 期末余额
    
  •     hncye2   TYPE hslvt12,   " 年初余额
    
  •     hsntq2   TYPE hslvt12,   " 上年同期
     END OF ty_output.
    

DATA: gt_range_bukrs TYPE fagl_range_t_bukrs,
gs_range_bukrs TYPE LINE OF fagl_range_t_bukrs.
DATA p_r2 TYPE c VALUE IS INITIAL .
--------------------------------------------------------------------
*& Selection Screen
--------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
*PARAMETERS : p_bukrs LIKE bkpf-bukrs MEMORY ID buk OBLIGATORY,
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs OBLIGATORY MEMORY ID buk.
PARAMETERS :
p_gjahr LIKE bkpf-gjahr DEFAULT sy-datum+0(4) OBLIGATORY,
p_monat LIKE bkpf-monat DEFAULT sy-datum+4(2) OBLIGATORY,
p_versn LIKE t011-versn DEFAULT ‘COFT’ OBLIGATORY.
*PARAMETERS p_r2 AS CHECKBOX no-display.
SELECTION-SCREEN END OF BLOCK bl1 .

SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-002.
PARAMETERS p_r1 AS CHECKBOX.
SELECT-OPTIONS: s_prctr FOR bsis-prctr ,
s_gsber FOR bseg-gsber .
SELECTION-SCREEN END OF BLOCK bl2 .

--------------------------------------------------------------------

INITIALIZATION.

IF p_monat > ‘16’ OR p_monat < ‘1’.
MESSAGE s070 DISPLAY LIKE ‘E’.
STOP .
ENDIF.

LOAD-OF-PROGRAM.
gs_variant-report = sy-repid.

START-OF-SELECTION.

SELECT SINGLE butxt INTO g_butxt FROM t001 WHERE bukrs IN s_bukrs .
IF NOT sy-subrc = 0 .
MESSAGE s053 DISPLAY LIKE ‘E’.
STOP .
ENDIF.

PERFORM auth_check .
*表头制作
PERFORM frm_create_it.
PERFORM frm_setdata.
*获取数据
LOOP AT gt_t001 INTO gs_t001.

CLEAR:gt_range_bukrs[].
gs_range_bukrs-sign = 'I' .
gs_range_bukrs-option = 'EQ' .
gs_range_bukrs-low = gs_t001-bukrs .
APPEND gs_range_bukrs TO gt_range_bukrs.

PERFORM frm_get_data.

PERFORM data_process.
CLEAR:gs_t001.

ENDLOOP.

  • 数据展示
    PERFORM prm_alvout.
    &---------------------------------------------------------------------
    *& Form auth_check
    &---------------------------------------------------------------------
  •   text
    

----------------------------------------------------------------------
FORM auth_check .
*检查公司代码

*取公司代码—
SELECT bukrs
INTO TABLE gt_t001
FROM t001
WHERE bukrs IN s_bukrs.
IF sy-subrc <> 0.
MESSAGE s022.
LEAVE LIST-PROCESSING.
ENDIF.
*
LOOP AT gt_t001 INTO gs_t001.
AUTHORITY-CHECK OBJECT ‘F_BKPF_BUK’
ID ‘BUKRS’ FIELD gs_t001-bukrs
ID ‘ACTVT’ FIELD ‘03’.
IF sy-subrc <> 0.
MESSAGE s001 WITH gs_t001-bukrs DISPLAY LIKE ‘E’.
STOP.
ENDIF.
ENDLOOP.

  • ENDIF.
    ENDFORM. " AUTH_CHECK
    &---------------------------------------------------------------------
    *& Form alv_fieldcat_build
    &---------------------------------------------------------------------
  •   text
    

----------------------------------------------------------------------
FORM alv_fieldcat_build CHANGING ct_fieldcat TYPE lvc_t_fcat.

DATA: l_pos TYPE i VALUE 3,
l_fieldname TYPE lvc_s_fcat-fieldname,
l_reptext TYPE lvc_s_fcat-reptext.

CLEAR ct_fieldcat.
*
PERFORM alv_fieldcat_fill USING 1 ‘TYPENAME’ ‘’ ‘X’ ‘项 目’ ‘CHAR’ CHANGING ct_fieldcat.
PERFORM alv_fieldcat_fill USING 2 ‘I’ ‘’ ‘X’ ‘行 次’ ‘CHAR’ CHANGING ct_fieldcat.
*
LOOP AT gt_t001 INTO gs_t001.
l_fieldname = ‘TSLVT’ && gs_t001-bukrs.
l_reptext = gs_t001-bukrs && ‘本期数’.
PERFORM alv_fieldcat_fill USING l_pos l_fieldname ‘’ ‘’ l_reptext ‘CURR’ CHANGING ct_fieldcat.

l_fieldname = 'TSLVT1'       && gs_t001-bukrs.
l_reptext   = gs_t001-bukrs && '本期累计数'.
PERFORM alv_fieldcat_fill USING l_pos l_fieldname  '' '' l_reptext 'CURR' CHANGING ct_fieldcat.


l_fieldname = 'TSLVT2'       && gs_t001-bukrs.
l_reptext   = gs_t001-bukrs && '上年同期累计数'.
PERFORM alv_fieldcat_fill USING l_pos l_fieldname  '' '' l_reptext 'CURR' CHANGING ct_fieldcat.
l_pos = l_pos + 1.

ENDLOOP.
ENDFORM. "alv_fieldcat_build
&---------------------------------------------------------------------
*& Form alv_fieldcat_fill
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  -->COL_POS      text
    
  •  -->FIELDNAME    text
    
  •  -->NO_OUT       text
    
  •  -->REPTEXT      text
    
  •  -->CT_FIELDCAT  text
    

----------------------------------------------------------------------
FORM alv_fieldcat_fill USING col_pos TYPE lvc_s_fcat-col_pos
fieldname TYPE lvc_s_fcat-fieldname
no_out TYPE lvc_s_fcat-no_out
lzero TYPE lvc_s_fcat-lzero
reptext TYPE lvc_s_fcat-reptext
datatype TYPE lvc_s_fcat-datatype
CHANGING ct_fieldcat TYPE lvc_t_fcat.

DATA: ls_fieldcat TYPE lvc_s_fcat.

ls_fieldcat-col_pos = col_pos.

ls_fieldcat-fieldname = to_upper( fieldname ).
ls_fieldcat-no_out = no_out.
ls_fieldcat-reptext = reptext.
ls_fieldcat-lzero = lzero.
ls_fieldcat-datatype = datatype .
APPEND ls_fieldcat TO ct_fieldcat.

ENDFORM. "alv_fieldcat_fill
&---------------------------------------------------------------------
*& Form GET_DATA
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_get_data .
    DATA : lt_i011z LIKE TABLE OF rf011z WITH HEADER LINE.
    DATA : lt_x011f LIKE TABLE OF rf011f WITH HEADER LINE.
    DATA : lt_balance LIKE TABLE OF fdbl_balance_line WITH HEADER LINE.
    DATA : l_ergso TYPE rf011z-ergso .
    DATA : l_period TYPE fdbl_balance_line-period .
    DATA :
  • gt_range_bukrs TYPE fagl_range_t_bukrs WITH HEADER LINE,
    s_racct TYPE fagl_range_t_racct WITH HEADER LINE,
    s_prctr1 TYPE fagl_range_t_prctr WITH HEADER LINE,
    s_rfarea TYPE fagl_range_t_rfarea WITH HEADER LINE,
    s_gsber1 TYPE fagl_range_t_gsber WITH HEADER LINE,
    i_gjahr TYPE gjahr,
    l_flg(1) TYPE c,
    l_i TYPE i.

IF p_r1 = ‘X’.
s_prctr1[] = s_prctr[] .
s_gsber1[] = s_gsber[] .
ENDIF.

SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_fagl FROM fagl_011pc WHERE versn = p_versn .

CALL FUNCTION ‘FI_IMPORT_BALANCE_SHEET_POS’
EXPORTING
version = p_versn
TABLES
i011z = lt_i011z
x011f = lt_x011f
EXCEPTIONS
new_balance_sheet = 1
OTHERS = 2.
IF sy-subrc <> 0.

  • Implement suitable error handling here
    MESSAGE s054 WITH ‘出错了!’ DISPLAY LIKE ‘E’ .
    ENDIF.

    DATA: lt_range_ergsl TYPE ty_range_ergsl_tt.

  • REFRESH gt_kostl.
    LOOP AT gt_out INTO wa_out .

    CLEAR lt_i011z .
    CLEAR lt_balance .
    CLEAR i_gjahr .
    CLEAR l_period .
    CLEAR l_flg .
    REFRESH :
    s_racct ,
    s_rfarea ,
    lt_balance .
    REFRESH lt_range_ergsl.

    CASE wa_out-i .
    WHEN 1 .
    REFRESH lt_range_ergsl .
    PERFORM fagl_011pc_get_children USING ‘601’ CHANGING lt_range_ergsl.
    IF lt_range_ergsl[] IS INITIAL .
    CONTINUE .
    ENDIF.
    CLEAR lt_i011z .
    LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl.
    s_racct-sign = ‘I’ .
    s_racct-option = ‘BT’ .
    s_racct-high = lt_i011z-bilkt .
    s_racct-low = lt_i011z-vonkt .
    APPEND s_racct.

        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 2. "营业收入
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '601' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 3. "主营业务收入  “6001主营业务收入”发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6001' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 4."其他业务收入  “6051其他业务收入”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6051' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 8  . "    二、营业总成本  60\605\604\603\602 余额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '602' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      CLEAR i_gjahr .
      i_gjahr = p_gjahr .
      g_but =  p_r2 .
      CALL FUNCTION 'ZFM_FI_0001'
        EXPORTING
          i_bukrs  = gt_range_bukrs[]
          i_racct  = s_racct[]
          i_prctr  = s_prctr1[]
          i_rfarea = s_rfarea[]
          i_gsber  = s_gsber1[]
          i_gjahr  = i_gjahr
          i_flg    = l_flg
          i_monat  = p_monat
          i_vbkpf  = g_but
        IMPORTING
          e_tab    = t_out.
      REFRESH s_racct .
    
      LOOP AT lt_x011f WHERE  ergsl IN  lt_range_ergsl .
    
        s_rfarea-sign = 'I' .
        s_rfarea-option = 'BT' .
        s_rfarea-high = lt_x011f-vonfb .
        s_rfarea-low = lt_x011f-bisfb .
        APPEND s_rfarea.
    
        PERFORM frm_collect_rfarea USING s_rfarea.
    
        CLEAR s_rfarea .
      ENDLOOP.
    
  •   s_racct-sign = 'I' .
      s_racct-option = 'BT' .
      s_racct-low  = '6601000000' .
      s_racct-high =  '6601999999'.
      APPEND s_racct.
    
      PERFORM frm_collect_racct USING s_racct.
    
      CLEAR s_racct .
    
      CALL FUNCTION 'ZFM_FI_0001'
        EXPORTING
          i_bukrs  = gt_range_bukrs[]
          i_racct  = s_racct[]
          i_prctr  = s_prctr1[]
          i_rfarea = s_rfarea[]
          i_gsber  = s_gsber1[]
          i_gjahr  = i_gjahr
          i_flg    = l_flg
          i_monat  = p_monat
          i_vbkpf  = g_but
        IMPORTING
          e_tab    = wa_out.
    
      wa_out-tslvt = wa_out-tslvt + t_out-tslvt .
      wa_out-tslvt1 = wa_out-tslvt1 + t_out-tslvt1 .
      wa_out-tslvt2 = wa_out-tslvt2 + t_out-tslvt2 .
      MODIFY gt_out FROM wa_out .
      CLEAR wa_out .
      CLEAR t_out .
      CONTINUE .
    
    WHEN 9 .
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6400' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 10 ."其中:主营业务成本   “6401主营业务成本”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6401' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 11 ."其他业务成本  “6402其他业务成本”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6402' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP..
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 19 ."               营业税金及附加  “6403营业税金及附加”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6403' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso = '6403'.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
  •    l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 20 ."               销售费用	功能范围0002
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6601' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
    
      LOOP AT lt_x011f WHERE  ergsl IN  lt_range_ergsl .
    
        s_rfarea-sign = 'I' .
        s_rfarea-option = 'BT' .
        s_rfarea-high = lt_x011f-bisfb .
        s_rfarea-low = lt_x011f-vonfb  .
        APPEND s_rfarea.
    
        PERFORM frm_collect_fkber USING s_rfarea.
    
        CLEAR s_rfarea .
      ENDLOOP.
    
  •   s_racct-sign = 'I' .
      s_racct-option = 'BT' .
      s_racct-low  = '6601000000' .
      s_racct-high =  '6601999999'.
      APPEND s_racct.
    
      PERFORM frm_collect_kostl USING s_racct.
    
      CLEAR s_racct .
    
    
    WHEN 21 ."               管理费用	功能范围0001
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6602' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
    
      LOOP AT lt_x011f WHERE  ergsl IN  lt_range_ergsl .
    
        s_rfarea-sign = 'I' .
        s_rfarea-option = 'BT' .
        s_rfarea-high = lt_x011f-bisfb .
        s_rfarea-low = lt_x011f-vonfb  .
        APPEND s_rfarea.
    
        PERFORM frm_collect_fkber USING s_rfarea.
    
        CLEAR s_rfarea .
      ENDLOOP. .
    
      s_racct-sign = 'I' .
      s_racct-option = 'BT' .
      s_racct-low  = '6601000000' .
      s_racct-high =  '6601999999'.
      APPEND s_racct.
    
      PERFORM frm_collect_kostl USING s_racct.
    
      CLEAR s_racct .
    
    WHEN 22 . "               其中:研究与开发费
    
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '5301' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      LOOP AT lt_x011f WHERE ergsl IN  lt_range_ergsl .
    
        s_rfarea-sign = 'I' .
        s_rfarea-option = 'BT' .
        s_rfarea-high = lt_x011f-bisfb .
        s_rfarea-low = lt_x011f-vonfb  .
        APPEND s_rfarea.
    
        PERFORM frm_collect_fkber USING s_rfarea.
    
        CLEAR s_rfarea .
      ENDLOOP.
      s_racct-sign = 'I' .
      s_racct-option = 'BT' .
      s_racct-low  = '6601000000' .
      s_racct-high =  '6601999999'.
      APPEND s_racct.
    
      PERFORM frm_collect_kostl USING s_racct.
    
      CLEAR s_racct .
    
    WHEN 23 . "财务费用
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6603' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
  •    l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 24 ."               其中:利息支出  ”660301利息支出”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '660301' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 25 ."                        利息收入  “660302利息收入”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '660302' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 26 ."                        汇兑净损失(净收益以“-”填列)  “660303汇兑损益”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '660303' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
  •    l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 27 ."               资产减值损失	“6701资产减值损失”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6701' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
  •    l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 29 .  " 加:公允价值变动收益(损失以“-”号填列)  ”6101公允价值变动损益”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6101' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 30 .  "    投资收益(损失以“-”号填列)	“6111投资收益”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6111' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 33 .  "          资产处置收益(损失以“-”号填列)“60\605\604\603\  6113余额 *-1
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6113' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 34 .  "    其他收益(损失以“-”号填列)“6112投资收益”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6112' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 35 .  "营业利润
    
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '603' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      CLEAR i_gjahr .
      i_gjahr = p_gjahr .
      g_but =  p_r2 .
      CALL FUNCTION 'ZFM_FI_0001'
        EXPORTING
          i_bukrs  = gt_range_bukrs[]
          i_racct  = s_racct[]
          i_prctr  = s_prctr1[]
          i_rfarea = s_rfarea[]
          i_gsber  = s_gsber1[]
          i_gjahr  = i_gjahr
          i_flg    = l_flg
          i_monat  = p_monat
          i_vbkpf  = g_but
        IMPORTING
          e_tab    = t_out.
    
      REFRESH s_racct .
      LOOP AT lt_x011f WHERE  ergsl IN  lt_range_ergsl .
    
        s_rfarea-sign = 'I' .
        s_rfarea-option = 'BT' .
        s_rfarea-high = lt_x011f-vonfb .
        s_rfarea-low = lt_x011f-bisfb .
        APPEND s_rfarea.
    
        PERFORM frm_collect_rfarea USING s_rfarea.
    
        CLEAR s_rfarea .
      ENDLOOP.
    
  •   s_racct-sign = 'I' .
      s_racct-option = 'BT' .
      s_racct-low  = '6601000000' .
      s_racct-high =  '6601999999'.
      APPEND s_racct.
    
      PERFORM frm_collect_racct USING s_racct.
    
      CLEAR s_racct .
    
      CALL FUNCTION 'ZFM_FI_0001'
        EXPORTING
          i_bukrs  = gt_range_bukrs[]
          i_racct  = s_racct[]
          i_prctr  = s_prctr1[]
          i_rfarea = s_rfarea[]
          i_gsber  = s_gsber1[]
          i_gjahr  = i_gjahr
          i_flg    = l_flg
          i_monat  = p_monat
          i_vbkpf  = g_but
        IMPORTING
          e_tab    = wa_out.
    
      wa_out-tslvt = ( wa_out-tslvt + t_out-tslvt ) * -1  .
      wa_out-tslvt1 = (  wa_out-tslvt1 + t_out-tslvt1 ) * -1 .
      wa_out-tslvt2 = (  wa_out-tslvt2 + t_out-tslvt2 ) * -1 .
      MODIFY gt_out FROM wa_out .
      CLEAR wa_out .
      CLEAR t_out .
    
      CONTINUE .
    
    WHEN 36 .  "    加:营业外收入  “6301营业外收入”发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6301' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
    
      ENDLOOP.
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 37 ."      其中:非流动资产处置利得  “630101非流动资产处置利得”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '630101' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 38 ."      “630103债务重组利得+630102非货币性资产交换利得”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '630102' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
    
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
    
      l_flg = 'X' .
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    WHEN 39 ."               政府补助	“630104政府补助”+“630105\营业外收入\税收返还+630106+630107”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '630104' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
    
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
      l_flg = 'X' .
    
    WHEN 40 .
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '630103' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
      l_flg = 'X' .
    WHEN 41 ."减:营业外支出	“6711营业外支出”发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6711' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 42 ."      其中:非流动资产处置损失
    
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '671101' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 43 ."                     非货币性资产交换损失
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '671102' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 44 ."            债务重组损失
    
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '671103' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 45 ."   四、利润总额(亏损总额以“-”号填列)
    
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '604' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      CLEAR i_gjahr .
      i_gjahr = p_gjahr .
      g_but =  p_r2 .
      CALL FUNCTION 'ZFM_FI_0001'
        EXPORTING
          i_bukrs  = gt_range_bukrs[]
          i_racct  = s_racct[]
          i_prctr  = s_prctr1[]
          i_rfarea = s_rfarea[]
          i_gsber  = s_gsber1[]
          i_gjahr  = i_gjahr
          i_flg    = l_flg
          i_monat  = p_monat
          i_vbkpf  = g_but
        IMPORTING
          e_tab    = t_out.
    
    
      REFRESH s_racct .
    
      LOOP AT lt_x011f WHERE  ergsl IN  lt_range_ergsl .
    
        s_rfarea-sign = 'I' .
        s_rfarea-option = 'BT' .
        s_rfarea-high = lt_x011f-vonfb .
        s_rfarea-low = lt_x011f-bisfb .
        APPEND s_rfarea.
    
        PERFORM frm_collect_rfarea USING s_rfarea.
    
        CLEAR s_rfarea .
      ENDLOOP.
    
  •   s_racct-sign = 'I' .
      s_racct-option = 'BT' .
      s_racct-low  = '6601000000' .
      s_racct-high =  '6601999999'.
      APPEND s_racct.
    
      PERFORM frm_collect_racct USING s_racct.
    
      CLEAR s_racct .
    
      CALL FUNCTION 'ZFM_FI_0001'
        EXPORTING
          i_bukrs  = gt_range_bukrs[]
          i_racct  = s_racct[]
          i_prctr  = s_prctr1[]
          i_rfarea = s_rfarea[]
          i_gsber  = s_gsber1[]
          i_gjahr  = i_gjahr
          i_flg    = l_flg
          i_monat  = p_monat
          i_vbkpf  = g_but
        IMPORTING
          e_tab    = wa_out.
    
    
      wa_out-tslvt = ( wa_out-tslvt + t_out-tslvt ) * -1  .
      wa_out-tslvt1 = (  wa_out-tslvt1 + t_out-tslvt1 ) * -1 .
      wa_out-tslvt2 = (  wa_out-tslvt2 + t_out-tslvt2 ) * -1 .
      MODIFY gt_out FROM wa_out .
      CLEAR wa_out .
      CLEAR t_out .
    
      CONTINUE .
    
    WHEN 46 ."减:所得税费用	“6801所得税费用”的发生额
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '6801' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      IF lt_range_ergsl[] IS INITIAL .
    
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
    
    WHEN 47 OR 49 ."五、净利润(净亏损以“-”号填列)*
    
    
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '605' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN  lt_range_ergsl.
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      CLEAR i_gjahr .
      i_gjahr = p_gjahr .
      g_but =  p_r2 .
      CALL FUNCTION 'ZFM_FI_0001'
        EXPORTING
          i_bukrs  = gt_range_bukrs[]
          i_racct  = s_racct[]
          i_prctr  = s_prctr1[]
          i_rfarea = s_rfarea[]
          i_gsber  = s_gsber1[]
          i_gjahr  = i_gjahr
          i_flg    = l_flg
          i_monat  = p_monat
          i_vbkpf  = g_but
        IMPORTING
          e_tab    = t_out.
    
    
      REFRESH s_racct .
    
      LOOP AT lt_x011f WHERE  ergsl IN  lt_range_ergsl .
    
        s_rfarea-sign = 'I' .
        s_rfarea-option = 'BT' .
        s_rfarea-high = lt_x011f-vonfb .
        s_rfarea-low = lt_x011f-bisfb .
        APPEND s_rfarea.
    
        PERFORM frm_collect_rfarea USING s_rfarea.
    
        CLEAR s_rfarea .
      ENDLOOP.
    
  •   s_racct-sign = 'I' .
      s_racct-option = 'BT' .
      s_racct-low  = '6601000000' .
      s_racct-high =  '6601999999'.
      APPEND s_racct.
    
      PERFORM frm_collect_racct USING s_racct.
    
      CLEAR s_racct .
    
      CALL FUNCTION 'ZFM_FI_0001'
        EXPORTING
          i_bukrs  = gt_range_bukrs[]
          i_racct  = s_racct[]
          i_prctr  = s_prctr1[]
          i_rfarea = s_rfarea[]
          i_gsber  = s_gsber1[]
          i_gjahr  = i_gjahr
          i_flg    = l_flg
          i_monat  = p_monat
          i_vbkpf  = g_but
        IMPORTING
          e_tab    = wa_out.
    
      wa_out-tslvt = ( wa_out-tslvt + t_out-tslvt ) * -1  .
      wa_out-tslvt1 = (  wa_out-tslvt1 + t_out-tslvt1 ) * -1 .
      wa_out-tslvt2 = (  wa_out-tslvt2 + t_out-tslvt2 ) * -1 .
      MODIFY gt_out FROM wa_out .
      CLEAR wa_out .
      CLEAR t_out .
    
      CONTINUE .
    
    WHEN 56 ."其中:1.权益法下在被投资单位以后将重分类进损益的其他综合收益中享有的份额
    
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '400401' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
    
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
      l_flg = 'X' .
    WHEN 60 ."
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '400498' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
    
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
      l_flg = 'X' .
    
    WHEN 61 ."
      REFRESH lt_range_ergsl .
      PERFORM fagl_011pc_get_children USING '4004' CHANGING lt_range_ergsl.
      IF lt_range_ergsl[] IS INITIAL .
        CONTINUE .
      ENDIF.
      CLEAR lt_i011z .
      LOOP AT lt_i011z WHERE ergso IN lt_range_ergsl .
        s_racct-sign = 'I' .
        s_racct-option = 'BT' .
        s_racct-high = lt_i011z-bilkt .
        s_racct-low = lt_i011z-vonkt .
        APPEND s_racct.
    
        PERFORM frm_collect_kostl USING s_racct.
    
        CLEAR s_racct .
      ENDLOOP.
      IF s_racct[] IS INITIAL  .
        CONTINUE .
      ENDIF.
      l_flg = 'X' .
    
    WHEN OTHERS.
    
      CONTINUE .
    

    ENDCASE.
    CLEAR i_gjahr .
    i_gjahr = p_gjahr .
    g_but = p_r2 .
    CALL FUNCTION ‘ZFM_FI_0001’
    EXPORTING
    i_bukrs = gt_range_bukrs[]
    i_racct = s_racct[]
    i_prctr = s_prctr1[]
    i_rfarea = s_rfarea[]
    i_gsber = s_gsber1[]
    i_gjahr = i_gjahr
    i_flg = l_flg
    i_monat = p_monat
    i_vbkpf = g_but
    IMPORTING
    e_tab = wa_out.
    MODIFY gt_out FROM wa_out .
    CLEAR wa_out .
    ENDLOOP.

ENDFORM.
&---------------------------------------------------------------------
*& Form PRM_ALVOUT
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM prm_alvout .
    DATA: lv_title TYPE lvc_title,
    lv_callback_program TYPE sy-repid.

DELETE <dyn_output> INDEX 1.

gs_layout-cwidth_opt = ‘X’. " 优化列宽
gs_layout-zebra = ‘X’. " 斑马线
lv_callback_program = sy-repid.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = lv_callback_program
i_callback_pf_status_set = ‘PF_STATUS_SET’
i_callback_user_command = ‘USER_COMMAND’
i_callback_top_of_page = ‘ALV_TOP_OF_PAGE’
i_grid_title = lv_title

  • I_GRID_SETTINGS          =
    is_layout_lvc            = gs_layout
    it_fieldcat_lvc          = gt_fieldcat
    
    TABLES
    t_outtab = <dyn_output> "GT_OUTPUT
    EXCEPTIONS
    program_error = 1
    OTHERS = 2.
    IF sy-subrc <> 0.
  • Implement suitable error handling here
    ENDIF.

ENDFORM.
*&---------------------------------------------------------------------
*& Form html_top_of_page
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  -->CL_DD      text
    

----------------------------------------------------------------------
FORM html_top_of_page USING cl_dd TYPE REF TO cl_dd_document.
DATA: m_p TYPE i.
DATA: m_buff TYPE string.
DATA: text TYPE char255 .
DATA: l_butxt TYPE butxt .
DATA: code(255) TYPE c .
DATA: sdydo_html_table TYPE sdydo_html_line OCCURS 0.
DATA: wa LIKE LINE OF sdydo_html_table.
CLEAR : m_buff .

DATA: lt_list_commentary TYPE slis_t_listheader,
ls_line TYPE slis_listheader,
l_lin TYPE i,
l_char(10) TYPE c.
*表头其实完全可以是一个html文件,自己使用html语言进行格式控制
m_buff = ’

’ &&
'编制单位: ’ && g_butxt && ‘’ && '期  间: ’ && p_gjahr && ‘年’ && p_monat && ‘月

单  位: 元’ .

CALL METHOD cl_dd->html_insert
EXPORTING
contents = m_buff
CHANGING
position = m_p.
CLEAR m_buff .
ENDFORM. "ALV_top_of_page
---------------------------------------------------------------------

  • Description: the purpose of this subroutine
    ---------------------------------------------------------------------
    FORM alv_top_of_page .

    DATA: lt_list_commentary TYPE slis_t_listheader,
    ls_line TYPE slis_listheader,
    l_lin TYPE i,
    l_char(10) TYPE c.

    DATA: lv_butxt TYPE t001-butxt.

    CLEAR ls_line.
    ls_line-typ = ‘S’.
    ls_line-key = '编制单位: '.
    ls_line-info = g_butxt.
    APPEND ls_line TO lt_list_commentary.

    CLEAR ls_line.
    ls_line-typ = ‘S’.
    ls_line-key = ‘期 间:’.
    ls_line-info = p_gjahr && ‘年’ && p_monat && '月 '.
    APPEND ls_line TO lt_list_commentary.

    CLEAR ls_line.
    ls_line-typ = ‘S’.
    ls_line-key = ‘单  位:’.
    ls_line-info = ‘元’.
    APPEND ls_line TO lt_list_commentary.

    CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
    EXPORTING
    it_list_commentary = lt_list_commentary

  • i_logo             = 'ENJOYSAP_LOGO'
    i_end_of_list_grid = space
    i_alv_form         = 'X'.
    

ENDFORM.

FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS ‘S_ZFI_0002_GUI’ .
ENDFORM. " f_set_pf_status

*&---------------------------------------------------------------------
**& Form f_user_command
*&---------------------------------------------------------------------
** 捕捉用户动作
*----------------------------------------------------------------------
FORM user_command USING p_ucomm TYPE sy-ucomm
p_rs_selfield TYPE slis_selfield .

DATA: it_date1 TYPE budat.
DATA: it_date2 TYPE budat.
DATA ls_out LIKE LINE OF t_out.
RANGES lr_bukrs FOR bkpf-bukrs.

  • DATA: lr_grid TYPE REF TO cl_gui_alv_grid.
    CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
    IMPORTING
    e_grid = lr_grid.
    CALL METHOD lr_grid->check_changed_data.
    CASE p_ucomm .
    WHEN ‘DOW’ . "导出

  • 文件下载
    PERFORM frm_download_proc.
    WHEN ‘&IC1’."双击

    READ TABLE t_out INTO ls_out INDEX p_rs_selfield-tabindex.
    
    CLEAR:gt_get_hkont.
    CLEAR:gt_get_budat.
    CONCATENATE p_gjahr p_monat '01' INTO gs_get_budat-low.
    
    CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
      EXPORTING
        day_in            = gs_get_budat-low
      IMPORTING
        last_day_of_month = gs_get_budat-high.
    
    gs_get_budat-sign    = 'I'.
    gs_get_budat-option  = 'BT'.
    gs_get_budat-low     = gs_get_budat-low.
    gs_get_budat-high    = gs_get_budat-high.
    APPEND gs_get_budat TO gt_get_budat.
    CLEAR:gs_get_budat.
    
    DATA:lv_hangci1 TYPE i.
    CLEAR:lv_hangci1.
    IF p_rs_selfield-fieldname = 'TYPENAME'   OR
       p_rs_selfield-fieldname = 'TSLVT'      OR
       p_rs_selfield-fieldname = 'TSLVT1'     OR
       p_rs_selfield-fieldname = 'TSLVT2'     .
      lv_hangci1 = ls_out-i.
      IF ls_out-tslvt = 0 AND ls_out-tslvt1 = 0 AND ls_out-tslvt2 = 0.
        MESSAGE e004 WITH '暂无明细数据!' DISPLAY LIKE 'E'.
      ENDIF.
    ENDIF.
    
    LOOP AT gt_kostl INTO gs_kostl WHERE number = lv_hangci1
                                     AND typ    = ''.
      gs_get_hkont-sign   = gs_kostl-sign.
      gs_get_hkont-option = gs_kostl-option.
      gs_get_hkont-low    = gs_kostl-low.
      gs_get_hkont-high   = gs_kostl-high.
      APPEND gs_get_hkont TO gt_get_hkont.
      CLEAR:gs_get_hkont,gs_kostl.
    ENDLOOP.
    
    REFRESH gt_get_racct.
    LOOP AT gt_kostl INTO gs_kostl WHERE number = lv_hangci1
                                     AND typ    = 'X'.
      gs_get_racct-sign   = gs_kostl-sign.
      gs_get_racct-option = gs_kostl-option.
      gs_get_racct-low    = gs_kostl-low.
      gs_get_racct-high   = gs_kostl-high.
      APPEND gs_get_racct TO gt_get_racct.
      CLEAR:gs_get_racct,gs_kostl.
    ENDLOOP.
    
  •  REFRESH LR_BUKRS.
    
  •  LR_BUKRS-SIGN   = 'I'.
    
  •  LR_BUKRS-OPTION = 'EQ'.
    
  •  LR_BUKRS-LOW = P_BUKRS.
    
  •  APPEND LR_BUKRS.
    
  • REFRESH gt_get_fkber.
    LOOP AT gt_fkber INTO gs_fkber WHERE number = lv_hangci1
                                     AND typ = ''.
      gs_get_fkber-sign   = gs_fkber-sign.
      gs_get_fkber-option = gs_fkber-option.
      gs_get_fkber-low    = gs_fkber-low.
      gs_get_fkber-high   = gs_fkber-high.
      APPEND gs_get_fkber TO gt_get_fkber.
      CLEAR: gs_get_fkber,gs_fkber.
    ENDLOOP.
    
  • REFRESH gt_get_rfarea.
    LOOP AT gt_fkber INTO gs_fkber WHERE number = lv_hangci1
                                      AND typ = 'X'.
      gs_get_rfarea-sign   = gs_fkber-sign.
      gs_get_rfarea-option = gs_fkber-option.
      gs_get_rfarea-low    = gs_fkber-low.
      gs_get_rfarea-high   = gs_fkber-high.
      APPEND gs_get_rfarea TO gt_get_rfarea.
      CLEAR: gs_get_rfarea,gs_fkber.
    ENDLOOP.
    
  • AUTHORITY-CHECK OBJECT 'S_TCODE'
            ID 'TCD' FIELD 'ZJYFI0008'.
    IF sy-subrc <> 0.
    
  • Implement a suitable exception handling here
    MESSAGE e000 WITH ‘无事务码ZJYFI0008操作权限。’.
    ENDIF.

    SUBMIT zzljyfirp_0008       "走程序    下面所带的是参数
      WITH s_bukrs  IN s_bukrs        "公司代码
      WITH s_hkont  IN gt_get_hkont  "科目
      WITH s_budat  IN gt_get_budat  "年度日期
      WITH s_prctr  IN s_prctr
      WITH s_gsber  IN s_gsber
      WITH s_fkberl IN gt_get_fkber
    
      WITH s_rfarea IN gt_get_rfarea
      WITH s_racct  IN gt_get_racct
    
  •      WITH P_N_M   = 'X'
      WITH p_hwaer  = 'X'
      WITH p_lvl1   = 'X'
      WITH p_drill  = 'X'
      WITH p_rep    = '2'
      WITH p_kostl  = 'X'
      WITH p_prctr  = 'X'
      WITH p_kunnr  = 'X'
      WITH p_lifnr  = 'X'
      WITH p_pre    = p_r2
      AND RETURN.
    

    WHEN OTHERS.

    ENDCASE.
    p_rs_selfield-refresh = ‘X’.

ENDFORM. "USER_COMMAND
&---------------------------------------------------------------------
*& Form FRM_CREATE_IT
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_create_it .
    DATA l_ref TYPE REF TO data.
    PERFORM alv_fieldcat_build CHANGING gt_fieldcat.

CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = gt_fieldcat
IMPORTING
ep_table = l_ref.

ASSIGN l_ref->* TO <dyn_output>.
APPEND INITIAL LINE TO <dyn_output> ASSIGNING <dyn_wa>.
PERFORM :
frm_setcol USING ’ 一、营业总收入 ’ 1 ,
frm_setcol USING '其中:营业收入 ’ 2 ,
frm_setcol USING '其中:主营业务收入 ’ 3 ,
frm_setcol USING '其他业务收入 ’ 4 ,
frm_setcol USING '利息收入 ’ 5 ,
frm_setcol USING '已赚保费 ’ 6 ,
frm_setcol USING '手续费及佣金收入 ’ 7 ,
frm_setcol USING ’ 二、营业总成本 ’ 8 ,
frm_setcol USING '其中:营业成本 ’ 9 ,
frm_setcol USING '其中:主营业务成本 ’ 10 ,
frm_setcol USING '其他业务成本 ’ 11 ,
frm_setcol USING '利息支出 ’ 12 ,
frm_setcol USING '手续费及佣金支出 ’ 13 ,
frm_setcol USING '退保金 ’ 14 ,
frm_setcol USING '赔付支出净额 ’ 15 ,
frm_setcol USING '提取保险合同准备金净额 ’ 16 ,
frm_setcol USING '保单红利支出 ’ 17 ,
frm_setcol USING '分保费用 ’ 18 ,
frm_setcol USING '营业税金及附加 ’ 19 ,
frm_setcol USING '销售费用 ’ 20 ,
frm_setcol USING '管理费用 ’ 21 ,
frm_setcol USING '其中:研究与开发费 ’ 22 ,
frm_setcol USING '财务费用 ’ 23 ,
frm_setcol USING '其中:利息支出 ’ 24 ,
frm_setcol USING '利息收入 ’ 25 ,
frm_setcol USING '汇兑净损失(净收益以“-”填列) ’ 26 ,
frm_setcol USING '资产减值损失 ’ 27 ,
frm_setcol USING '其他 ’ 28 ,
frm_setcol USING '加:公允价值变动收益(损失以“-”号填列) ’ 29 ,
frm_setcol USING '投资收益(损失以“-”号填列) ’ 30 ,
frm_setcol USING '其中:对联营企业和合营企业的投资收益 ’ 31 ,
frm_setcol USING '汇兑收益(损失以“-”号填列) ’ 32 ,
frm_setcol USING '资产处置收益(损失以“-”号填列) ’ 33 ,
frm_setcol USING '其他收益(损失以“-”号填列) ’ 34 ,
frm_setcol USING ’ 三、营业利润(亏损以“-”号填列) ’ 35 ,
frm_setcol USING ’ 加:营业外收入 ’ 36 ,
frm_setcol USING '其中:非流动资产处置利得 ’ 37 ,
frm_setcol USING '非货币性资产交换利得 ’ 38 ,
frm_setcol USING '政府补助 ’ 39 ,
frm_setcol USING '债务重组利得 ’ 40 ,
frm_setcol USING ’ 减:营业外支出 ’ 41 ,
frm_setcol USING '其中:非流动资产处置损失 ’ 42 ,
frm_setcol USING '非货币性资产交换损失 ’ 43 ,
frm_setcol USING '债务重组损失 ’ 44 ,
frm_setcol USING '四、利润总额(亏损总额以“-”号填列) ’ 45 ,
frm_setcol USING '减:所得税费用 ’ 46 ,
frm_setcol USING '五、净利润(净亏损以“-”号填列)* ’ 47 ,
frm_setcol USING '其中:被合并方在合并前实现的净利润 ’ 48 ,
frm_setcol USING '归属于母公司所有者的净利润 ’ 49 ,
frm_setcol USING '少数股东损益 ’ 50 ,
frm_setcol USING '六、其他综合收益的税后净额 ’ 51 ,
frm_setcol USING '(一)以后不能重分类进损益的其他综合收益 ’ 52 ,
frm_setcol USING ’ 其中:1.重新计量设定受益计划净负债或净资产的变动 ’ 53 ,
frm_setcol USING ’ 2.权益法下在被投资单位不能重分类进损益的其他综合收益中享有的份额 ’ 54 ,
frm_setcol USING '(二)以后将重分类进损益的其他综合收益 ’ 55 ,
frm_setcol USING ’ 其中:1.权益法下在被投资单位以后将重分类进损益的其他综合收益中享有的份额 ’ 56 ,
frm_setcol USING '3.持有至到期投资重分类为可供出售金融资产损益 ’ 58 ,
frm_setcol USING '4.现金流量套期损益的有效部分 ’ 59 ,
frm_setcol USING ’ 七、综合收益总额 ’ 61 ,
frm_setcol USING ’ 归属于母公司所有者的综合收益总额 ’ 62 ,
frm_setcol USING ’ 归属于少数股东的综合收益总额 ’ 63 ,
frm_setcol USING ’ 八、每股收益: ’ 64 ,
frm_setcol USING '(一)基本每股收益 ’ 65 ,
frm_setcol USING '(二)稀释每股收益 ’ 66 .

  • SORT <dyn_output>.
  • DELETE <dyn_output> INDEX 1.

ENDFORM.

FORM fagl_011pc_get_children USING VALUE(i_ergsl) TYPE fagl_011pc-ergsl
CHANGING ct_range_ergsl TYPE ty_range_ergsl_tt.

DATA: ls_fagl_011pc TYPE fagl_011pc,
ls_fagl_011pc_temp TYPE fagl_011pc.

DATA: ls_range_ergsl TYPE LINE OF ty_range_ergsl_tt.

CHECK i_ergsl IS NOT INITIAL.

READ TABLE gt_fagl INTO ls_fagl_011pc_temp WITH KEY ergsl = i_ergsl.
IF sy-subrc = 0.
*" 先添加自己作为一个节点
CLEAR ls_range_ergsl.
ls_range_ergsl-sign = ‘I’.
ls_range_ergsl-option = ‘EQ’.
ls_range_ergsl-low = i_ergsl.
APPEND ls_range_ergsl TO ct_range_ergsl.

LOOP AT gt_fagl INTO ls_fagl_011pc WHERE parent = ls_fagl_011pc_temp-id.

*" 递归
PERFORM fagl_011pc_get_children USING ls_fagl_011pc-ergsl
CHANGING ct_range_ergsl.

ENDLOOP.

ELSE.
" do nothing…不存在的节点
ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_COLLECT_FKBER
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  -->P_S_RFAREA  text
    

----------------------------------------------------------------------
FORM frm_collect_fkber USING ps_fkber TYPE fagl_range_farea.
gs_fkber-number = wa_out-i.
gs_fkber-sign = ps_fkber-sign.
gs_fkber-option = ps_fkber-option.
gs_fkber-low = ps_fkber-low.
gs_fkber-high = ps_fkber-high.
APPEND gs_fkber TO gt_fkber.
CLEAR:gs_fkber.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_COLLECT_KOSTL
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_collect_kostl USING ps_racct TYPE fagl_range_racct.
    gs_kostl-number = wa_out-i.
    gs_kostl-sign = ‘I’.
    gs_kostl-option = ‘BT’.
    gs_kostl-low = ps_racct-low.
    gs_kostl-high = ps_racct-high.
    APPEND gs_kostl TO gt_kostl.
    CLEAR:gs_kostl.
    ENDFORM.
    &---------------------------------------------------------------------
    *& Form FRM_COLLECT_RACCT
    &---------------------------------------------------------------------
  •   text
    

----------------------------------------------------------------------

  •  -->P_S_RACCT  text
    

----------------------------------------------------------------------
FORM frm_collect_racct USING ps_racct TYPE fagl_range_racct.
gs_kostl-typ = ‘X’.
gs_kostl-number = wa_out-i.
gs_kostl-sign = ‘I’.
gs_kostl-option = ‘BT’.
gs_kostl-low = ps_racct-low.
gs_kostl-high = ps_racct-high.
APPEND gs_kostl TO gt_kostl.
CLEAR:gs_kostl.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_COLLECT_RFAREA
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  -->P_S_RFAREA  text
    

----------------------------------------------------------------------
FORM frm_collect_rfarea USING ps_rfarea TYPE fagl_range_farea.
gs_fkber-typ = ‘X’.
gs_fkber-number = wa_out-i.
gs_fkber-sign = ps_rfarea-sign.
gs_fkber-option = ps_rfarea-option.
gs_fkber-low = ps_rfarea-low.
gs_fkber-high = ps_rfarea-high.
APPEND gs_fkber TO gt_fkber.
CLEAR:gs_fkber.
ENDFORM.
&---------------------------------------------------------------------
*& Form frm_setcol
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  •  -->P_S_RFAREA  text
    

----------------------------------------------------------------------
FORM frm_setcol
USING typname TYPE zsfi_0005-typename
num TYPE zsfi_0005-i.
FIELD-SYMBOLS: <l_typename>,
.

ASSIGN COMPONENT ‘TYPENAME’ OF STRUCTURE <dyn_wa> TO <l_typename>.
ASSIGN COMPONENT ‘I’ OF STRUCTURE <dyn_wa> TO .
<l_typename> = typname.
= num.
APPEND <dyn_wa> TO <dyn_output>.
CLEAR:<dyn_wa>.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_SETDATA
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_setdata .
    add_out :
    gt_out ’ 一、营业总收入 ’ 1 ,
    gt_out ’ 其中:营业收入 ’ 2 ,
    gt_out ’ 其中:主营业务收入 ’ 3 ,
    gt_out ’ 其他业务收入 ’ 4 ,
    gt_out ’ 利息收入 ’ 5 ,
    gt_out ’ 已赚保费 ’ 6 ,
    gt_out ’ 手续费及佣金收入 ’ 7 ,
    gt_out ’ 二、营业总成本 ’ 8 ,
    gt_out ’ 其中:营业成本 ’ 9 ,
    gt_out ’ 其中:主营业务成本 ’ 10 ,
    gt_out ’ 其他业务成本 ’ 11 ,
    gt_out ’ 利息支出 ’ 12 ,
    gt_out ’ 手续费及佣金支出 ’ 13 ,
    gt_out ’ 退保金 ’ 14 ,
    gt_out ’ 赔付支出净额 ’ 15 ,
    gt_out ’ 提取保险合同准备金净额 ’ 16 ,
    gt_out ’ 保单红利支出 ’ 17 ,
    gt_out ’ 分保费用 ’ 18 ,
    gt_out ’ 营业税金及附加 ’ 19 ,
    gt_out ’ 销售费用 ’ 20 ,
    gt_out ’ 管理费用 ’ 21 ,
    gt_out ’ 其中:研究与开发费 ’ 22 ,
    gt_out ’ 财务费用 ’ 23 ,
    gt_out ’ 其中:利息支出 ’ 24 ,
    gt_out ’ 利息收入 ’ 25 ,
    gt_out ’ 汇兑净损失(净收益以“-”填列) ’ 26 ,
    gt_out ’ 资产减值损失 ’ 27 ,
    gt_out ’ 其他 ’ 28 ,
    gt_out ’ 加:公允价值变动收益(损失以“-”号填列) ’ 29 ,
    gt_out ’ 投资收益(损失以“-”号填列) ’ 30 ,
    gt_out ’ 其中:对联营企业和合营企业的投资收益 ’ 31 ,
    gt_out ’ 汇兑收益(损失以“-”号填列) ’ 32 ,
    gt_out ’ 资产处置收益(损失以“-”号填列) ’ 33 ,
    gt_out ’ 其他收益(损失以“-”号填列) ’ 34 ,
    gt_out ’ 三、营业利润(亏损以“-”号填列) ’ 35 ,
    gt_out ’ 加:营业外收入 ’ 36 ,
    gt_out ’ 其中:非流动资产处置利得 ’ 37 ,
    gt_out ’ 非货币性资产交换利得 ’ 38 ,
    gt_out ’ 政府补助 ’ 39 ,
    gt_out ’ 债务重组利得 ’ 40 ,
    gt_out ’ 减:营业外支出 ’ 41 ,
    gt_out ’ 其中:非流动资产处置损失 ’ 42 ,
    gt_out ’ 非货币性资产交换损失 ’ 43 ,
    gt_out ’ 债务重组损失 ’ 44 ,
    gt_out ’ 四、利润总额(亏损总额以“-”号填列) ’ 45 ,
    gt_out ’ 减:所得税费用 ’ 46 ,
    gt_out ’ 五、净利润(净亏损以“-”号填列)* ’ 47 ,
    gt_out ’ 其中:被合并方在合并前实现的净利润 ’ 48 ,
    gt_out ’ 归属于母公司所有者的净利润 ’ 49 ,
    gt_out ’ 少数股东损益 ’ 50 ,
    gt_out ’ 六、其他综合收益的税后净额 ’ 51 ,
    gt_out ’ (一)以后不能重分类进损益的其他综合收益 ’ 52 ,
    gt_out ’ 其中:1.重新计量设定受益计划净负债或净资产的变动 ’ 53 ,
    gt_out ’ 2.权益法下在被投资单位不能重分类进损益的其他综合收益中享有的份额 ’ 54 ,
    gt_out ’ (二)以后将重分类进损益的其他综合收益 ’ 55 ,
    gt_out ’ 其中:1.权益法下在被投资单位以后将重分类进损益的其他综合收益中享有的份额 ’ 56 ,
    gt_out ’ 2.可供出售金融资产公允价值变动损益 ’ 57 ,
    gt_out ’ 3.持有至到期投资重分类为可供出售金融资产损益 ’ 58 ,
    gt_out ’ 4.现金流量套期损益的有效部分 ’ 59 ,
    gt_out ’ 5.外币财务报表折算差额 ’ 60 ,
    gt_out ’ 七、综合收益总额 ’ 61 ,
    gt_out ’ 归属于母公司所有者的综合收益总额 ’ 62 ,
    gt_out ’ 归属于少数股东的综合收益总额 ’ 63 ,
    gt_out ’ 八、每股收益: ’ 64 ,
    gt_out ’ (一)基本每股收益 ’ 65 ,
    gt_out ’ (二)稀释每股收益 ’ 66 .
    ENDFORM.
    &---------------------------------------------------------------------
    *& Form DATA_PROCESS
    &---------------------------------------------------------------------
  •   text
    

----------------------------------------------------------------------

  • –> p1 text
  • <-- p2 text
    ----------------------------------------------------------------------
    FORM data_process .
    FIELD-SYMBOLS: <l_i> TYPE any,
    <l_tslvt> TYPE any, "
    <l_tslvt1> TYPE any, "
    <l_tslvt2> TYPE any. "

DATA l_fieldname TYPE lvc_s_fcat-fieldname.
LOOP AT <dyn_output> ASSIGNING <dyn_wa>.
IF sy-tabix = 1.

ELSE.
  ASSIGN COMPONENT 'I' OF STRUCTURE <dyn_wa> TO <l_i>.

  l_fieldname = 'TSLVT'       && gs_t001-bukrs.

  ASSIGN COMPONENT l_fieldname OF STRUCTURE <dyn_wa> TO <l_tslvt>.

  l_fieldname = 'TSLVT1'       && gs_t001-bukrs.
  ASSIGN COMPONENT l_fieldname OF STRUCTURE <dyn_wa> TO <l_tslvt1>.

  l_fieldname = 'TSLVT2'       && gs_t001-bukrs.
  ASSIGN COMPONENT l_fieldname OF STRUCTURE <dyn_wa> TO <l_tslvt2>.
  • READ TABLE gt_out INTO gw_out WITH KEY i = <l_i>.
    IF sy-subrc = 0.
      <l_tslvt> = gw_out-tslvt.
      <l_tslvt1> = gw_out-tslvt1.
      <l_tslvt2> = gw_out-tslvt2.
    ENDIF.
    
    ENDIF.
    ENDLOOP.
    ENDFORM.
    &---------------------------------------------------------------------
    *& Form FRM_DOWNLOAD_PROC
    &---------------------------------------------------------------------
  •   text
    

----------------------------------------------------------------------

  • –> p1 text

  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_download_proc .

  • 局部定义
    DATA: l_file TYPE rlgrap-filename.

    DATA: l_filename TYPE string.
    *路径
    DATA: l_fullpath TYPE string,
    l_path TYPE string,
    l_user_action TYPE i,
    l_encoding TYPE abap_encoding.

    CLEAR ls_wwwdata.
    ls_wwwdata-relid = ‘MI’.

    CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
    window_title = ‘下载到本地文件’
    default_extension = ‘XLSX’ "缺省文件类型
    default_file_name = ‘利润表.XLSX’
    file_filter =
    ‘文本文件(.TXT)|.TXT|Excel 文件 (.XLSX)|.XLS;.XLSX|所有文件 (.)|.*|’
    with_encoding = ‘X’
    initial_directory = ‘C:’
    CHANGING
    filename = l_filename "获得用户输入文件名
    path = l_path "获得用户所选路径
    fullpath = l_fullpath "路径加文件名
    user_action = l_user_action
    file_encoding = l_encoding.

    IF sy-subrc <> 0 OR l_user_action <>
    cl_gui_frontend_services=>action_ok.
    RETURN.
    ENDIF.

    ls_wwwdata-objid = ‘ZFIISREP011’.

    l_file = l_fullpath .
    CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT’
    EXPORTING
    key = ls_wwwdata
    destination = l_file.

  • 打开EXCEL并定位到sheet1
    CREATE OBJECT v_excel ‘EXCEL.APPLICATION’ . "创建EXCEL对象
    CALL METHOD OF v_excel ‘WORKBOOKS’ = v_book. "**工作簿

  • SET PROPERTY OF v_excel ‘VISIBLE’ = 1. "设置EXCEL属性可视

  • GET PROPERTY OF v_excel ‘ActiveWorkbook’ = v_book.

CALL METHOD OF
v_book
‘OPEN’
EXPORTING
#1 = l_file. "打开指定路径EXCEL工作簿
CALL METHOD OF
v_excel
‘WORKSHEETS’ = v_sheet
EXPORTING
#1 = 1.
CALL METHOD OF v_sheet ‘ACTIVATE’.

  • CALL METHOD OF

  • v_sheet

  • ‘SELECT’.

  • EXCEL文件赋值
    PERFORM frm_excel_proc.

  • SET PROPERTY OF v_excel ‘VISIBLE’ = 1. "设置EXCEL属性可视
    GET PROPERTY OF v_excel ‘ActiveWorkbook’ = v_book. "必须加上,否则无法保存excel.

CALL METHOD OF
v_book
‘Save’.

  • CALL METHOD OF v_book ‘SAVEA’ EXPORTING #1 = l_fullpath ."#2 = 1. "将excel文件保存
    关闭WORKSHEET*
  • CALL METHOD OF v_sheet ‘CLOSE’.
    关闭WORKBOOK
    CALL METHOD OF v_book ‘CLOSE’.
    关闭EXCEL对象
    CALL METHOD OF v_excel ‘QUIT’.
  • SET PROPERTY OF G_excel ‘Visible’ = 1.
  • SET PROPERTY OF G_excel ‘DisplayAlerts’ = 0.

FREE OBJECT v_sheet. "释放操作
FREE OBJECT v_book.
FREE OBJECT v_excel.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_EXCEL_PROC
&---------------------------------------------------------------------

  •   text
    

----------------------------------------------------------------------

  • –> p1 text

  • <-- p2 text
    ----------------------------------------------------------------------
    FORM frm_excel_proc .

  • 局部定义
    DATA:
    lh_lrb LIKE t_out,
    lw_date(12) TYPE c,
    lw_date1(20) TYPE c,
    lw_name TYPE xubname,
    lw_nametxt(30) TYPE c,
    lw_department TYPE string,
    lw_x TYPE i,
    lw_r TYPE i,
    lw_c TYPE i,
    l_firstname TYPE ad_namefir,
    l_lastname TYPE ad_namelas,
    l_fullname TYPE ad_namtext.
    *begin 注释代码 因为现实是多公司 无法确定写哪家公司 所以先注释掉 by yangq 2018-11-27

  • DATA: l_butxt TYPE t001-butxt.

  • CLEAR l_butxt.

  • SELECT SINGLE butxt

  • INTO l_butxt

  • FROM t001

  • WHERE bukrs = p_bukrs.

  • CLEAR lw_department.

  • CONCATENATE ‘编制单位:’ l_butxt

  • INTO lw_department.

  • cell_fill USING 3 2 lw_department.
    *end 注释代码 因为现实是多公司 无法确定写哪家公司 所以先注释掉 by yangq 2018-11-27
    *—End of Modification 20170123

  • 日期的赋值
    CONCATENATE p_gjahr
    ‘年’
    p_monat
    ‘月’
    INTO lw_date.

    PERFORM cell_fill USING 3 3 lw_date.

    CLEAR lw_date .
    lw_name = sy-uname .

    CALL FUNCTION ‘FDM_CUST_USER_NAME_READ_SINGLE’
    EXPORTING
    i_user_id = lw_name
    IMPORTING
    e_firstname = l_firstname
    e_lastname = l_lastname
    e_fullname = l_fullname.

    CONCATENATE '编制人 : ’ l_lastname l_firstname INTO lw_nametxt .
    CONDENSE lw_nametxt NO-GAPS. "去掉空格字符
    CONCATENATE ‘日期:’ sy-datum(4) ‘.’ sy-datum+4(2) ‘.’ sy-datum(2) INTO lw_date1 .

    PERFORM cell_fill USING 71 3 lw_nametxt.
    PERFORM cell_fill USING 71 4 lw_date1.

  • 抬头部分
    "lw_x TYPE i,
    DATA: lv_cel TYPE i.
    lw_x = 0.
    lv_cel = 2.

    LOOP AT gt_fieldcat INTO gw_fieldcat.
    lw_x = lw_x + 1.
    IF lw_x >= 3.

    PERFORM cell_fill USING 4 lv_cel  gw_fieldcat-reptext. "本月发生额
    lv_cel = lv_cel + 1.
    

    ENDIF.
    CLEAR:gw_fieldcat.
    ENDLOOP.

*数据内容
DATA l_fieldname TYPE lvc_s_fcat-fieldname.
lw_r = 4.
LOOP AT <dyn_output> ASSIGNING <dyn_wa>.
lv_cel = 2.
lw_r = lw_r + 1.
lw_c = 1.
*
LOOP AT gt_fieldcat INTO gw_fieldcat.
lw_c = lw_c + 1.
lv_cel = lv_cel + 1.
IF lv_cel >= 3.
*
ASSIGN COMPONENT lv_cel OF STRUCTURE <dyn_wa> TO <l_tslvt>.

    IF sy-subrc = 0 AND <l_tslvt> IS ASSIGNED.
      PERFORM cell_fill USING lw_r lw_c  <l_tslvt>. "本月发生额
    ENDIF.

  ENDIF.
  CLEAR:gw_fieldcat,l_fieldname.
ENDLOOP.
  • ENDLOOP.

  • 资产负债出力表的循环处理

  • LOOP AT t_out INTO lh_lrb.

  • CLEAR lw_x.

** EXCEL填充值

  • lw_x = lh_lrb-i + 4. "计算行
  • PERFORM cell_fill USING lw_x 3 lh_lrb-tslvt. "本月发生额
  • PERFORM cell_fill USING lw_x 4 lh_lrb-tslvt1. "期末累计
  • PERFORM cell_fill USING lw_x 5 lh_lrb-tslvt2. "上年同期
  • ENDLOOP.
    ENDFORM.
    &---------------------------------------------------------------------
    *& Form CELL_FILL
    &---------------------------------------------------------------------
  •   text
    

----------------------------------------------------------------------

  •  -->P_3      text
    
  •  -->P_3      text
    
  •  -->P_LW_DATE  text
    

----------------------------------------------------------------------
FORM cell_fill USING i j val.

  • get cell
    CALL METHOD OF
    v_excel
    ‘Cells’ = v_cell
    EXPORTING
    #1 = i
    #2 = j.

  • set cell value
    SET PROPERTY OF v_cell ‘Value’ = val .

ENDFORM.

相关文章: