首页 > 其他分享 >FICO 资产负债表

FICO 资产负债表

时间:2024-01-22 15:35:34浏览次数:27  
标签:wa 资产 INTO lptab faglflext bal TYPE FICO 负债表

*&---------------------------------------------------------------------*
*& Report ZFIR_004
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zfir_004.
*&---------------------------------------------------------------------*
*& Report ZFIR_001
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.

"定义输出报表项目
DATA: wa_ZELBSCT LIKE zelbsct,
      it_ZELBSCT LIKE STANDARD TABLE OF wa_ZELBSCT.

TABLES:sscrfields,faglflext.
DATA: functxt       TYPE smp_dyntxt.

"定义报表逻辑处理临时变量
TYPES t_racct LIKE RANGE OF faglflext-racct.
DATA w_racct TYPE LINE OF t_racct.
DATA: BEGIN OF wa_lptab,
        zverno  LIKE zelbsct-zverno,
        ziid    LIKE zelbsct-ziid,
        zidx    LIKE zelbsct-zidx,
        zity    LIKE zelbsct-zity,
        zisba   LIKE zelbsct-zisba,
        zides   LIKE zelbsct-zides,
        zssaknr LIKE zelbsct-zssaknr,
        zesaknr LIKE zelbsct-zesaknr,
        zcfml1  LIKE zelbsct-zcfml1,
*        zsid    LIKE ZELBSCT-zsid,
        s_racct LIKE STANDARD TABLE OF w_racct,
*        zcfri   LIKE ZELBSCT-zcfri,
*        zctoi   LIKE ZELBSCT-zctoi,
*        zcfml   LIKE ZELBSCT-zcfml,
        zdflag  LIKE zelbsct-zdflag,
        zcflag  LIKE zelbsct-zcflag,
*        zhide   LIKE ZELBSCT-zhide,
*        zcrpid  LIKE ZELBSCT-zcrpid,
        l_bal   TYPE wertv12,
        c_bal   TYPE wertv12,
      END OF wa_lptab,
      wa_temp_lptab LIKE wa_lptab,
      it_lptab      LIKE STANDARD TABLE OF wa_lptab.

"定义输出内表
DATA: BEGIN OF wa_bcout,
        bzides LIKE zelbsct-zides,
        zhc01  TYPE i,
        zhc02  TYPE i,
        bl_bal TYPE wertv12,
        bc_bal TYPE wertv12,
        szides LIKE zelbsct-zides,
        sl_bal TYPE wertv12,
        sc_bal TYPE wertv12,
      END OF wa_bcout,
      it_bcout LIKE STANDARD TABLE OF wa_bcout.

"定义余额内表
DATA: wa_faglflext  LIKE faglflext,
      it_faglflext  LIKE STANDARD TABLE OF faglflext,
      it_faglflextx LIKE STANDARD TABLE OF faglflext.

"JS计算基本类型定义
TYPES: BEGIN OF variants,
         field     TYPE string,
         value(16) TYPE c,
       END OF variants,
       variants_table_type TYPE STANDARD TABLE OF variants.

"JS计算变量
DATA: variants_str TYPE variants,
      variants_tab TYPE variants_table_type.

"全局临时变量
DATA idx LIKE sy-tabix.

"定義ALV數據輸出
DATA: it_fieldcat     TYPE STANDARD TABLE OF lvc_s_fcat,  "ALV字段目录
      it_sub_fieldcat TYPE STANDARD TABLE OF lvc_s_fcat,  "Drilldown
      it_layout       TYPE lvc_s_layo,  "ALV总体布局
      it_sub_layout   TYPE lvc_s_layo,  "Drilldown ALV总体布局
      i_grid_settings TYPE  lvc_s_glay, "定义回调
      it_event        TYPE slis_t_event, "ALV的事件内表
      st_event        LIKE LINE OF it_event, "ALV的单个事件对象
      wa_sort_lvc     TYPE lvc_s_sort,
      it_sort_lvc     TYPE lvc_t_sort.
TYPES: ty_lvc_s_fcat LIKE STANDARD TABLE OF lvc_s_fcat.

"定义版本查询帮助内表
DATA: BEGIN OF wa_zverno,
        zverno LIKE zelbsct-zverno,
      END OF wa_zverno,
      it_zverno LIKE STANDARD TABLE OF wa_zverno.

"动态读取值
DATA: wa_dynpread LIKE dynpread,
      lt_dynpread LIKE STANDARD TABLE OF wa_dynpread.

"EXCEL 定义

DATA: l_filename TYPE string.
DATA: v_excel TYPE ole2_object,  "定义取表格是使用,关于取文件的格式与第几个表
      v_sheet TYPE ole2_object,
      v_book  TYPE ole2_object,
      v_cell  TYPE ole2_object.
DATA:gv_bnlr TYPE acdoca-hsl.
*---------- block 1 ----------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK 1 WITH FRAME TITLE TEXT-s01.
*  PARAMETERS: p_rbukrs LIKE faglflext-rbukrs OBLIGATORY,
*              p_zverno LIKE ZELBSCT-zverno OBLIGATORY,
*              p_ryear  LIKE faglflext-ryear OBLIGATORY DEFAULT sy-datlo+0(4),
*              p_rpmax  TYPE faglflext-rpmax OBLIGATORY DEFAULT sy-datlo+4(2),
*              p_rldnr  TYPE faglflext-rldnr OBLIGATORY DEFAULT '0L'.
  PARAMETERS: p_zverno TYPE zelbsct-zverno OBLIGATORY DEFAULT '1000',
              p_rbukrs TYPE faglflext-rbukrs OBLIGATORY.
  "  SELECT-OPTIONS: p_prctr FOR faglflext-prctr.
  PARAMETERS: p_ryear TYPE faglflext-ryear OBLIGATORY DEFAULT sy-datum+0(4),
              p_monat TYPE bkpf-monat OBLIGATORY DEFAULT sy-datum+4(2).
*-----------------End of block 1----------------------------------------
SELECTION-SCREEN END OF BLOCK 1.

SELECTION-SCREEN: FUNCTION KEY 1.

***********************************************************************************************
*INITIALIZATION.
***********************************************************************************************
INITIALIZATION.
  functxt-icon_id = icon_tools.
  functxt-icon_text = '资产负债表配置' .
  functxt-quickinfo = '资产负债表配置' .
  sscrfields-functxt_01 = functxt.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_zverno.
  PERFORM frm_search_version.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
*    WHEN 'FC01'.
*      AUTHORITY-CHECK OBJECT 'S_TCODE'
*               ID 'TCD' FIELD 'ZFIC15'.
*      IF sy-subrc = 0.
*        CALL TRANSACTION 'ZFIC05'.
*      ENDIF.
    WHEN 'FC01'.
      TRY.
          CALL TRANSACTION 'ZFI006_T' WITH AUTHORITY-CHECK.
        CATCH cx_sy_authorization_error.

      ENDTRY.

    WHEN OTHERS.
      PERFORM frm_init_check.
      PERFORM frm_getctdata.
  ENDCASE.

START-OF-SELECTION.
  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' FOR USER SY-UNAME
                                      ID 'BUKRS' FIELD p_rbukrs
                                      ID 'ACTVT' DUMMY.
  IF SY-SUBRC IS NOT INITIAL.
    MESSAGE '您无此公司权限!' TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ENDIF.
  PERFORM frm_genlpdata.
  PERFORM frm_catdata.
  PERFORM frm_catformula.
  PERFORM frm_proout.
  PERFORM frm_alv_display.



FORM frm_search_version.
  "附加要读取的值
  wa_dynpread-fieldname = 'P_RBUKRS'.
  APPEND wa_dynpread TO lt_dynpread .

  "读取公司代码的值
  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname     = sy-repid
      dynumb     = sy-dynnr
    TABLES
      dynpfields = lt_dynpread.

  READ TABLE lt_dynpread INTO wa_dynpread INDEX 1.

  "从数据库取得相关数据
*  SELECT zverno FROM ZELBSCT INTO CORRESPONDING FIELDS OF TABLE it_zverno WHERE bukrs = wa_dynpread-fieldvalue.
  SELECT zverno FROM zelbsct INTO CORRESPONDING FIELDS OF TABLE it_zverno .

  "删除重复项目
  IF NOT it_zverno IS INITIAL.
    DELETE ADJACENT DUPLICATES FROM it_zverno COMPARING zverno.
  ENDIF.

  "显示查询帮助
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield         = 'ZVERNO'
      dynpprog         = sy-repid
      dynpnr           = sy-dynnr
      dynprofield      = 'ZVERNO'
      value_org        = 'S'
      callback_program = sy-repid
    TABLES
      value_tab        = it_zverno.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_GETCTDATA
*&---------------------------------------------------------------------*
*       初始化检查
*----------------------------------------------------------------------*
FORM frm_init_check.
*  IF P_RPMAX < 1 OR P_RPMAX > 12.
*    MESSAGE TEXT-M02 TYPE 'E'.
*    STOP.
*  ENDIF.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_GETCTDATA
*&---------------------------------------------------------------------*
*       取得配置数据
*----------------------------------------------------------------------*
FORM frm_getctdata .
*  SELECT * FROM ZELBSCT INTO CORRESPONDING FIELDS OF TABLE it_ZELBSCT WHERE bukrs = p_rbukrs AND zverno = p_zverno.
  SELECT * FROM zelbsct INTO CORRESPONDING FIELDS OF TABLE it_ZELBSCT WHERE zverno = p_zverno.
  IF it_ZELBSCT IS INITIAL.
    MESSAGE TEXT-m01 TYPE 'E'.
    STOP.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_GENLPDATA
*&---------------------------------------------------------------------*
*       生成逻辑处理数据
*----------------------------------------------------------------------*
FORM frm_genlpdata .
  "状态栏显示
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text = TEXT-g01.

  LOOP AT it_ZELBSCT INTO wa_ZELBSCT.
    READ TABLE it_lptab INTO wa_lptab WITH KEY ziid = wa_ZELBSCT-ziid.
    IF sy-subrc = 0.
      idx = sy-tabix.
      "成功读取,则附加科目
      "处理科目
      IF wa_ZELBSCT-zity = 1. "表示普通项目,需要系统里面取数
        IF wa_ZELBSCT-zssaknr <> '' AND wa_ZELBSCT-zesaknr <> ''.
          w_racct-low = wa_ZELBSCT-zssaknr.
          w_racct-high = wa_ZELBSCT-zesaknr.
          w_racct-option = 'BT'.
          w_racct-sign = 'I'.
          APPEND w_racct TO wa_lptab-s_racct.
        ELSEIF wa_ZELBSCT-zssaknr <> ''.
          w_racct-low = wa_ZELBSCT-zssaknr.
          w_racct-option = 'EQ'.
          w_racct-sign = 'I'.
          APPEND w_racct TO wa_lptab-s_racct.
        ELSE.
          "到科目不为空不处理,两个都为空也不处理
        ENDIF.

        "修改内表
        MODIFY it_lptab FROM wa_lptab INDEX idx.

        "清空数据
        CLEAR:  w_racct,
        wa_lptab.
      ENDIF.
    ELSE.
      "表示面要增加到新行
      MOVE-CORRESPONDING wa_ZELBSCT TO wa_lptab.

      "处理科目
      IF wa_ZELBSCT-zity = 1. "表示普通项目,需要系统里面取数
        IF wa_ZELBSCT-zssaknr <> '' AND wa_ZELBSCT-zesaknr <> ''.
          w_racct-low = wa_ZELBSCT-zssaknr.
          w_racct-high = wa_ZELBSCT-zesaknr.
          w_racct-option = 'BT'.
          w_racct-sign = 'I'.
          APPEND w_racct TO wa_lptab-s_racct.
        ELSEIF wa_ZELBSCT-zssaknr <> ''.
          w_racct-low = wa_ZELBSCT-zssaknr.
          w_racct-option = 'EQ'.
          w_racct-sign = 'I'.
          APPEND w_racct TO wa_lptab-s_racct.
        ELSE.
          "到科目不为空不处理,两个都为空也不处理
        ENDIF.
        CLEAR  w_racct.
      ENDIF.

      "增加行
      APPEND wa_lptab TO it_lptab.
      CLEAR wa_lptab.
    ENDIF.
    CLEAR wa_ZELBSCT.
  ENDLOOP.

  "对内表IT_LPTAB进行排序
*  SORT it_lptab BY zisba DESCENDING zsid ziid ASCENDING .
  SORT it_lptab BY zisba DESCENDING ziid ASCENDING .
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CATDATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_catdata .
  LOOP AT it_lptab INTO wa_lptab WHERE zity = 1 AND zides NE '未分配利润'.
    IF NOT wa_lptab-s_racct IS INITIAL.
*      PERFORM frm_get_line_blan TABLES wa_lptab-s_racct
*                                CHANGING wa_lptab-l_bal
*                                         wa_lptab-c_bal
*                                         wa_lptab-zdflag
*                                         wa_lptab-zcflag.
      PERFORM frm_get_line_blan TABLES wa_lptab-s_racct   "科目号
      CHANGING wa_lptab-l_bal
        wa_lptab-c_bal
        wa_lptab-zdflag
        wa_lptab-zcflag
*                                   wa_lptab-zisba
        .
      MODIFY it_lptab FROM wa_lptab.
    ENDIF.
    CLEAR wa_lptab.
  ENDLOOP.

  LOOP AT it_lptab INTO wa_lptab WHERE zides = '未分配利润'.
    IF NOT wa_lptab-s_racct IS INITIAL.
      PERFORM frm_get_line_blanx TABLES wa_lptab-s_racct   "科目号
      CHANGING wa_lptab-l_bal
        wa_lptab-c_bal
        wa_lptab-zdflag
        wa_lptab-zcflag
*                                   wa_lptab-zisba
        .
      MODIFY it_lptab FROM wa_lptab.
    ENDIF.
    CLEAR wa_lptab.
  ENDLOOP.

********BEGIN OF EL_YXZ AT 17.03.2021 11:38:49

*  SUBMIT ZFIR_002 WITH p_rbukrs = p_rbukrs
*  WITH p_zverno = p_zverno
*  WITH p_ryear  = p_ryear
*  WITH p_rpmax  = p_monat
* " WITH s_prctr  IN p_prctr
*  WITH gv_flag  = 'X' AND RETURN.
*
*  IMPORT gv_bnlr FROM MEMORY ID 'BNLR'.
*  FREE MEMORY ID 'BNLR'.
*
*  READ TABLE it_lptab INTO DATA(ls_lptab) INDEX 61.
*  IF sy-subrc = 0.
*    ls_lptab-c_bal = ls_lptab-l_bal + gv_bnlr.
**    ls_lptab-c_bal = ls_lptab-c_bal * -1.
*    MODIFY it_lptab FROM ls_lptab  INDEX 61 TRANSPORTING c_bal.
*    CLEAR:gv_bnlr.
*  ENDIF.

********END OF EL_YXZ AT 17.03.2021 11:38:49
ENDFORM.
*
FORM  frm_get_line_blanx TABLES i_it_saknr TYPE t_racct
CHANGING l_bal TYPE wertv12
  c_bal TYPE wertv12
  dflag TYPE c
  cflag TYPE c
  .

      "定义临时余额
      DATA temp_blan TYPE wertv12.
      DATA lp_ryear TYPE faglflext-ryear .
      "定义动态引用字段
      FIELD-SYMBOLS: <dy_var>.
      DATA: fieldname TYPE string,
            fn_monat  TYPE monat,
            cu_monat  TYPE monat.

      DATA :lt_zfit002a TYPE TABLE OF ZFIT001A.
      DATA :ls_zfit002a TYPE ZFIT001A.
      DATA :lt_zfit002ax TYPE TABLE OF ZFIT001A.
      DATA :ls_zfit002ax TYPE ZFIT001A.
      "取得数据
      IF dflag = 'X' AND cflag = '' .
        SELECT * FROM faglflext INTO TABLE it_faglflextx WHERE ryear = p_ryear
        AND drcrk = 'S'
        AND rbukrs = p_rbukrs
        AND racct IN i_it_saknr.
        "   AND prctr IN p_prctr.
    ELSEIF dflag = '' AND cflag = 'X'.
        SELECT * FROM faglflext INTO TABLE it_faglflextx WHERE ryear = p_ryear
        AND drcrk = 'H'
        AND rbukrs = p_rbukrs
        AND racct IN i_it_saknr.
        "  AND prctr IN p_prctr.
      ELSE.
        SELECT * FROM faglflext INTO TABLE it_faglflextx WHERE ryear = p_ryear
        AND rbukrs = p_rbukrs
        AND racct IN i_it_saknr.
        "   AND prctr IN p_prctr.
      ENDIF.

      SELECT  *  FROM ZFIT001A  INTO TABLE lt_zfit002a WHERE ziid = 'P240' AND ryear = p_ryear AND RBUKRS = p_rbukrs AND RPMAX = p_monat.
      lp_ryear =   p_ryear - 1 .
      SELECT  *  FROM ZFIT001A  INTO TABLE lt_zfit002ax WHERE  ziid = 'P240' AND ryear = lp_ryear AND RBUKRS = p_rbukrs AND RPMAX = p_monat.
      LOOP AT lt_zfit002a INTO ls_zfit002a.
      ENDLOOP.
      LOOP AT lt_zfit002ax INTO ls_zfit002ax.
      ENDLOOP.
      "处理期间数据
      c_bal = ls_zfit002a-bc_bal.
      IF NOT it_faglflextx IS INITIAL.
        LOOP AT it_faglflextx INTO wa_faglflext.
          "清空临时数据
          CLEAR cu_monat.
          "取得当期余额
          "增加年末结转余额
          c_bal = c_bal + wa_faglflext-hslvt." + ls_zfit002a-bc_bal.
          fn_monat = p_monat.

          DO fn_monat TIMES.
            cu_monat = cu_monat + 1.
            CONCATENATE 'HSL' cu_monat INTO fieldname.
            ASSIGN COMPONENT fieldname OF STRUCTURE wa_faglflext TO <dy_var>.
            c_bal = c_bal + <dy_var>.
          ENDDO.

          "清空临时数据
          CLEAR cu_monat.
          "Begin of changes on 20171011
          " 取得上期余额
          "  增加年初结转余额
          l_bal = l_bal + wa_faglflext-hslvt + ls_zfit002ax-bl_bal.
*      fn_monat = fn_monat - 1.
*      DO fn_monat TIMES.
*        cu_monat = cu_monat + 1.
*        CONCATENATE 'HSL' cu_monat INTO fieldname.
*        ASSIGN COMPONENT fieldname OF STRUCTURE wa_faglflext TO <dy_var>.
*        l_bal = l_bal + <dy_var>.
*      ENDDO.
          "End of changes on 20171011.

          CLEAR wa_faglflext.
        ENDLOOP.

      ENDIF.
ENDFORM.

FORM frm_get_line_blan TABLES i_it_saknr TYPE t_racct
CHANGING l_bal TYPE wertv12
  c_bal TYPE wertv12
  dflag TYPE c
  cflag TYPE c
  .

  "定义临时余额
  DATA temp_blan TYPE wertv12.

  "定义动态引用字段
  FIELD-SYMBOLS: <dy_var>.
  DATA: fieldname TYPE string,
        fn_monat  TYPE monat,
        cu_monat  TYPE monat.




  "取得数据
  IF dflag = 'X' AND cflag = '' .
    SELECT * FROM faglflext INTO TABLE it_faglflext WHERE ryear = p_ryear
    AND drcrk = 'S'
    AND rbukrs = p_rbukrs
    AND racct IN i_it_saknr.
    "   AND prctr IN p_prctr.
  ELSEIF dflag = '' AND cflag = 'X'.
    SELECT * FROM faglflext INTO TABLE it_faglflext WHERE ryear = p_ryear
    AND drcrk = 'H'
    AND rbukrs = p_rbukrs
    AND racct IN i_it_saknr.
    "  AND prctr IN p_prctr.
  ELSE.
    SELECT * FROM faglflext INTO TABLE it_faglflext WHERE ryear = p_ryear
    AND rbukrs = p_rbukrs
    AND racct IN i_it_saknr.
    "   AND prctr IN p_prctr.
  ENDIF.
  "处理期间数据
  IF NOT it_faglflext IS INITIAL.
    LOOP AT it_faglflext INTO wa_faglflext.
      "清空临时数据
      CLEAR cu_monat.
      "取得当期余额
      "增加年末结转余额
      c_bal = c_bal + wa_faglflext-hslvt.
      fn_monat = p_monat.

      DO fn_monat TIMES.
        cu_monat = cu_monat + 1.
        CONCATENATE 'HSL' cu_monat INTO fieldname.
        ASSIGN COMPONENT fieldname OF STRUCTURE wa_faglflext TO <dy_var>.
        c_bal = c_bal + <dy_var>.
      ENDDO.

*      "清空临时数据
*      CLEAR cu_monat.
*      "Begin of changes on 20171011
*      " 取得上期余额
*      "  增加年初结转余额
      l_bal = l_bal + wa_faglflext-hslvt.
*      fn_monat = fn_monat - 1.
*      DO fn_monat TIMES.
*        cu_monat = cu_monat + 1.
*        CONCATENATE 'HSL' cu_monat INTO fieldname.
*        ASSIGN COMPONENT fieldname OF STRUCTURE wa_faglflext TO <dy_var>.
*        l_bal = l_bal + <dy_var>.
*      ENDDO.
*      "End of changes on 20171011.
      "清空临时数据
      CLEAR wa_faglflext.
    ENDLOOP.
  ENDIF.

*  "*Begin of changes on 20171011************************************************
*  DATA: lv_ryear TYPE faglflext-ryear.
*  lv_ryear = p_ryear - 1.
*  IF dflag = 'X' AND cflag = ''.
*    SELECT * FROM faglflext INTO TABLE it_faglflext WHERE ryear = p_ryear
*                                                AND rbukrs = p_rbukrs
*                                                AND racct IN i_it_saknr.
*                                             "   AND prctr IN p_prctr.
**                                              AND prctr = p_prctr.
*  ELSEIF dflag = '' AND cflag = 'X'.
*    SELECT * FROM faglflext INTO TABLE it_faglflext WHERE ryear = p_ryear
*                                                AND rbukrs = p_rbukrs
*                                                AND racct IN i_it_saknr.
*                                              "  AND prctr IN p_prctr.
*  ELSE.
*    SELECT * FROM faglflext INTO TABLE it_faglflext WHERE ryear = p_ryear
*                                                AND rbukrs = p_rbukrs
*                                                AND racct IN i_it_saknr.
*                                             "   AND prctr IN p_prctr.
*  ENDIF.
*
*  "处理期间数据
*  IF NOT it_faglflext IS INITIAL.
*    LOOP AT it_faglflext INTO wa_faglflext.
*      "清空临时数据
*      CLEAR cu_monat.
*
*      "取得上期余额
*      "增加年初结转余额
*      l_bal = l_bal + wa_faglflext-hslvt.
**      fn_monat = 12.
**      DO fn_monat TIMES.
**        cu_monat = cu_monat + 1.
**        CONCATENATE 'HSL' cu_monat INTO fieldname.
**        ASSIGN COMPONENT fieldname OF STRUCTURE wa_faglflext TO <dy_var>.
**        l_bal = l_bal + <dy_var>.
**      ENDDO.
*
*      "清空临时数据
*      CLEAR wa_faglflext.
*    ENDLOOP.
*  ENDIF.
*  "*End changes on 20171011************************************************
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CATFORMULA
*&---------------------------------------------------------------------*
*       公式计算
*----------------------------------------------------------------------*
FORM frm_catformula .
  "定义临时数据
  DATA: BEGIN OF wa_ziid,
          ziid LIKE zelbsct-ziid,
        END OF wa_ziid,
        it_ziid LIKE STANDARD TABLE OF wa_ziid.
  DATA: ft_formula TYPE string,
        temp_bal   TYPE wertv12.


  LOOP AT it_lptab INTO wa_lptab WHERE zity = 2.
*  LOOP AT it_lptab INTO wa_lptab WHERE zity = 3.
    idx = sy-tabix.

    "加载计算当期变量
    LOOP AT it_lptab INTO wa_temp_lptab.
      variants_str-field = wa_temp_lptab-ziid.
      variants_str-value = wa_temp_lptab-c_bal.
      APPEND variants_str TO variants_tab.
      CLEAR wa_temp_lptab.
    ENDLOOP.

    "组合从到的合计公式
*    IF wa_lptab-zcfri <> '' AND wa_lptab-zctoi <> ''.
*      SELECT ziid FROM ZELBSCT INTO CORRESPONDING FIELDS OF TABLE it_ziid WHERE bukrs = p_rbukrs AND zverno = p_zverno AND ziid BETWEEN wa_lptab-zcfri AND wa_lptab-zctoi.
*      IF NOT it_ziid IS INITIAL.
*        "清空临时公式
*        CLEAR ft_formula.
*
*        "删除重复项
*        DELETE ADJACENT DUPLICATES FROM it_ziid COMPARING ziid.
*
*        "组合汇总公式
*        LOOP AT it_ziid INTO wa_ziid.
*          IF ft_formula IS INITIAL.
*            ft_formula = wa_ziid-ziid.
*          ELSE.
*            CONCATENATE ft_formula '+' wa_ziid-ziid INTO ft_formula.
*          ENDIF.
*        ENDLOOP.
*      ENDIF.
*    ELSEIF wa_lptab-zcfri <> '' AND wa_lptab-zctoi = ''.
*      "如果只有从有值,到没有值,则把从的值赋于公式
*      ft_formula = wa_lptab-zcfri.
*    ELSE.
*      "不做组合公式
*    ENDIF.

    "组合从到的合计公式
    IF wa_lptab-zssaknr <> '' AND wa_lptab-zesaknr <> ''.
      SELECT ziid FROM zelbsct INTO CORRESPONDING FIELDS OF TABLE it_ziid WHERE zverno = p_zverno AND ziid BETWEEN wa_lptab-zssaknr AND wa_lptab-zesaknr.
      IF NOT it_ziid IS INITIAL.
        "清空临时公式
        CLEAR ft_formula.

        "删除重复项
        DELETE ADJACENT DUPLICATES FROM it_ziid COMPARING ziid.

        "组合汇总公式
        LOOP AT it_ziid INTO wa_ziid.
          IF ft_formula IS INITIAL.
            ft_formula = wa_ziid-ziid.
          ELSE.
            CONCATENATE ft_formula '+' wa_ziid-ziid INTO ft_formula.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ELSEIF wa_lptab-zssaknr <> '' AND wa_lptab-zesaknr = ''.
      "如果只有从有值,到没有值,则把从的值赋于公式
      ft_formula = wa_lptab-zssaknr.
    ELSE.
      "不做组合公式
    ENDIF.


    "计算当期结果(从到的组合公式)
    IF NOT ft_formula IS INITIAL.
      PERFORM get_value_formula USING variants_tab
            ft_formula
      CHANGING temp_bal.

      "将值赋于结构变量
      wa_lptab-c_bal = wa_lptab-c_bal + temp_bal.
      CLEAR temp_bal.
    ENDIF.

    "计算当期结果(从公式中)
    IF NOT wa_lptab-zcfml1 IS INITIAL.
      PERFORM get_value_formula USING variants_tab
            wa_lptab-zcfml1
      CHANGING temp_bal.

      "将值赋于结构变量
      wa_lptab-c_bal = wa_lptab-c_bal + temp_bal.
      CLEAR temp_bal.
    ENDIF.


    "清空临时变量内表
    CLEAR: variants_tab.

    "加载计算上期变量
    LOOP AT it_lptab INTO wa_temp_lptab.
      variants_str-field = wa_temp_lptab-ziid.
      variants_str-value = wa_temp_lptab-l_bal.
      APPEND variants_str TO variants_tab.
      CLEAR wa_temp_lptab.
    ENDLOOP.

    "计算上期结果(从到的组合公式)
    IF NOT ft_formula IS INITIAL.
      PERFORM get_value_formula USING variants_tab
            ft_formula
      CHANGING temp_bal.

      "将值赋于结构变量
      wa_lptab-l_bal = wa_lptab-l_bal + temp_bal.
      CLEAR temp_bal.
    ENDIF.

    "计算上期结果(从公式中)
    IF NOT wa_lptab-zcfml1 IS INITIAL.
      PERFORM get_value_formula USING variants_tab
            wa_lptab-zcfml1
      CHANGING temp_bal.

      "将值赋于结构变量
      wa_lptab-l_bal = wa_lptab-l_bal + temp_bal.
      CLEAR temp_bal.
    ENDIF.

    "修改内表
    MODIFY it_lptab FROM wa_lptab INDEX idx.
    CLEAR: variants_tab,
    wa_lptab,
    ft_formula.
  ENDLOOP.
ENDFORM.



*&---------------------------------------------------------------------*
*&      Form  get_value_formula
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM get_value_formula USING i_variants_tab TYPE variants_table_type  i_formula  CHANGING i_result .
  DATA: source         TYPE string,
        return_value   TYPE string, "p DECIMALS 2,
        js_processor   TYPE REF TO cl_java_script,
        i_variants_str TYPE variants,
        sep            VALUE space.


  js_processor = cl_java_script=>create( ).

  "组合JS源代码
  "返回结果JS变量
  CONCATENATE source 'var js_result = 0;' INTO source.
  LOOP AT i_variants_tab INTO i_variants_str.

    IF i_variants_str-value IS INITIAL.
      CONCATENATE source 'var' i_variants_str-field '=' '0' INTO source SEPARATED BY sep.
    ELSE.
      "处理计算值
      SHIFT i_variants_str-value LEFT DELETING LEADING ''.
      CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
        CHANGING
          value = i_variants_str-value.
      CONCATENATE source 'var' i_variants_str-field '=' i_variants_str-value INTO source SEPARATED BY sep.
    ENDIF.
    CONCATENATE source ';' INTO source.

  ENDLOOP.

  "组合计算公式
  CONCATENATE source 'js_result' '=' i_formula INTO source SEPARATED BY sep.
  CONCATENATE source ';' INTO source.

  "计算并返回结果
  TRY.
      CALL METHOD js_processor->evaluate
        EXPORTING
          java_script = source
        RECEIVING
          result      = return_value.
      i_result =  return_value.
    CATCH cx_dynamic_check .
  ENDTRY.
ENDFORM.                    "get_value_formula

*&---------------------------------------------------------------------*
*&      Form  FRM_PROOUT
*&---------------------------------------------------------------------*
*       处理输出
*----------------------------------------------------------------------*
FORM frm_proout.
  DATA vcal TYPE i.

  "状态栏显示
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text = TEXT-g02.

*  "先处理资产类的数据,以资产类排序码的为基准输出
*  LOOP AT it_lptab INTO wa_lptab WHERE zisba = 'X' AND zhide <> 'X'.
*    wa_bcout-bzides = wa_lptab-zides.
*    wa_bcout-bl_bal = wa_lptab-l_bal.
*    wa_bcout-bc_bal = wa_lptab-c_bal.
*    APPEND wa_bcout TO it_bcout.
*
*    "清空数据
*    CLEAR: wa_lptab,
*           wa_bcout.
*  ENDLOOP.
  "先处理资产类的数据,以资产类排序码的为基准输出
  LOOP AT it_lptab INTO wa_lptab WHERE zisba = 'X' .
    wa_bcout-bzides = wa_lptab-zides.
    wa_bcout-zhc01 = sy-tabix.
    wa_bcout-bl_bal = wa_lptab-l_bal.
    wa_bcout-bc_bal = wa_lptab-c_bal.
    APPEND wa_bcout TO it_bcout.

    "清空数据
    CLEAR: wa_lptab,
    wa_bcout.
  ENDLOOP.

  "处理负债输出(负债类的输出金额全部*-1)
  LOOP AT it_lptab INTO wa_lptab WHERE zisba = ''.
    vcal = vcal + 1.
    READ TABLE it_bcout INTO wa_bcout INDEX vcal.
    IF sy-subrc = 0.
      wa_bcout-zhc02 = 34 + vcal.
      wa_bcout-szides = wa_lptab-zides.
      IF wa_lptab-ziid = 'L310' .
        wa_bcout-sl_bal = wa_lptab-l_bal.
        wa_bcout-sc_bal = wa_lptab-c_bal.
      ELSE.
        wa_bcout-sl_bal = wa_lptab-l_bal * -1.
        wa_bcout-sc_bal = wa_lptab-c_bal * -1.
      ENDIF.
      MODIFY it_bcout FROM wa_bcout INDEX vcal.
    ELSE.
      wa_bcout-zhc02 = 34 + vcal.
      wa_bcout-szides = wa_lptab-zides.
      IF wa_lptab-ziid = 'L310' .
        wa_bcout-sl_bal = wa_lptab-l_bal.
        wa_bcout-sc_bal = wa_lptab-c_bal.
      ELSE.
        wa_bcout-sl_bal = wa_lptab-l_bal * -1.
        wa_bcout-sc_bal = wa_lptab-c_bal * -1.
      ENDIF.
      APPEND wa_bcout TO it_bcout.
    ENDIF.
    "清空数据
    CLEAR: wa_lptab,
    wa_bcout.
  ENDLOOP.
ENDFORM.


FORM frm_alv_display .
  PERFORM frm_set_grid.
  PERFORM frm_set_fieldcat.
  PERFORM frm_call_function.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_GRID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_set_grid .
  "设置布局
*  IT_LAYOUT-GRID_TITLE  = TEXT-004.
*  IT_LAYOUT-CWIDTH_OPT = 'X'.
  it_layout-zebra = 'X'.

  "清空排序内表数据
  CLEAR: wa_sort_lvc,
  it_sort_lvc.

  "排序1数据lifnr
*  wa_sort_lvc-spos = 1.
*  IF x_kunnr = 'X'.
*    wa_sort_lvc-fieldname   = 'KUNNR'.  " 排序字段
*  ELSE.
*    wa_sort_lvc-fieldname   = 'LIFNR'.  " 排序字段
*  ENDIF.
*  wa_sort_lvc-up          = 'X'.         "升序
*  wa_sort_lvc-subtot      = 'X'.
*  APPEND wa_sort_lvc TO it_sort_lvc .
*  CLEAR wa_sort_lvc .
*
*  "排序2数据
*  wa_sort_lvc-spos = 2.
*  wa_sort_lvc-fieldname   = 'ZUONR'.  " 排序字段
*  wa_sort_lvc-up          = 'X'.         "升序
*  wa_sort_lvc-subtot      = 'X'.
*  APPEND wa_sort_lvc TO it_sort_lvc .
*  CLEAR wa_sort_lvc .
*
*  "排序2数据
*  wa_sort_lvc-spos = 3.
*  wa_sort_lvc-fieldname   = 'WAERS'.  " 排序字段
*  wa_sort_lvc-up          = 'X'.         "升序
*  wa_sort_lvc-subtot      = 'X'.
*  APPEND wa_sort_lvc TO it_sort_lvc .
*  CLEAR wa_sort_lvc .
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_set_fieldcat .
  DATA i_col_pos TYPE i.
  PERFORM frm_set_value USING 'BZIDES' '' '' '资产' '30' '' '' '' '' '' '' '' it_fieldcat i_col_pos.
  PERFORM frm_set_value USING 'ZHC01' '' '' '行次' '5' '' '' '' '' '' '' '' it_fieldcat i_col_pos.
*  PERFORM FRM_SET_VALUE USING 'BL_BAL' '' '' '期初余额' '15' '' '' '' '' '' '' '' IT_FIELDCAT I_COL_POS.   "CHANGED ON 20171011
  PERFORM frm_set_value USING 'BL_BAL' '' '' '年初余额' '15' '' '' '' '' '' '' '' it_fieldcat i_col_pos.    "ADDED ON 20171011
  PERFORM frm_set_value USING 'BC_BAL' '' '' '期末余额' '15' '' '' '' '' '' '' '' it_fieldcat i_col_pos.
  PERFORM frm_set_value USING 'SZIDES' '' '' '负债和所有者权益' '30' '' '' '' '' '' '' '' it_fieldcat i_col_pos.
  PERFORM frm_set_value USING 'ZHC02' '' '' '行次' '5' '' '' '' '' '' '' '' it_fieldcat i_col_pos.
*  PERFORM FRM_SET_VALUE USING 'SL_BAL' '' '' '期初余额' '15' '' '' '' '' '' '' '' IT_FIELDCAT I_COL_POS.   "CHANGED ON 20171011
  PERFORM frm_set_value USING 'SL_BAL' '' '' '年初余额' '15' '' '' '' '' '' '' '' it_fieldcat i_col_pos.     "ADDED ON 20171011
  PERFORM frm_set_value USING 'SC_BAL' '' '' '期末余额' '15' '' '' '' '' '' '' '' it_fieldcat i_col_pos.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CALL_FUNCTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_call_function .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_pf_status_set = 'SET_PF_STATUS'
      i_callback_user_command  = 'ALV_USER_COMMAND'
      i_callback_top_of_page   = 'FRM_TOP_PAGE'
      i_callback_program       = sy-repid
      is_layout_lvc            = it_layout
      it_fieldcat_lvc          = it_fieldcat
      it_sort_lvc              = it_sort_lvc
      i_save                   = 'A'
      it_events                = it_event
    TABLES
      t_outtab                 = it_bcout
    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 frm_set_value USING i_fieldname
      i_ref_tablename
      i_ref_fieldname
      i_seltext
      i_outputlen
      i_checkbox
      i_edit
      i_fix_column
      i_icon
      i_key
      i_dosum
      i_c_color
CHANGING it_fieldcat TYPE ty_lvc_s_fcat
  i_col_pos.
  DATA wa_fieldcat LIKE lvc_s_fcat.
  i_col_pos = i_col_pos + 1.
  IF i_edit = 'X'.
    wa_fieldcat-ref_table = i_ref_tablename.
    IF i_ref_tablename <> ''.
      wa_fieldcat-ref_field = i_ref_fieldname.
    ENDIF.
  ENDIF.
  wa_fieldcat-col_pos = i_col_pos.
  wa_fieldcat-fieldname = i_fieldname.
  wa_fieldcat-reptext = i_seltext.
  wa_fieldcat-scrtext_l = i_seltext.
  wa_fieldcat-scrtext_m = i_seltext.
  wa_fieldcat-scrtext_s = i_seltext.
  wa_fieldcat-outputlen = i_outputlen.
  wa_fieldcat-edit = i_edit.
  wa_fieldcat-checkbox = i_checkbox.
  wa_fieldcat-fix_column = i_fix_column.
  wa_fieldcat-icon = i_icon.
  wa_fieldcat-key = i_key.
  wa_fieldcat-do_sum = i_dosum.
  wa_fieldcat-emphasize = i_c_color.
  wa_fieldcat-no_zero = 'X'.

  APPEND wa_fieldcat TO it_fieldcat.
  CLEAR wa_fieldcat.
ENDFORM.

"设置自定义工具栏
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'ZALV_TOOLBAR'."从标准拷出来并修改的STATUS
ENDFORM.

"执行自定义工具栏命令
FORM alv_user_command USING r_ucomm LIKE sy-ucomm
      rs_selfield TYPE slis_selfield.
  DATA:ref_grid TYPE REF TO cl_gui_alv_grid.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      e_grid = ref_grid.

  CASE r_ucomm.
    WHEN '&UDCD'.
    WHEN 'ZSAVE'.
      PERFORM frm_data_save_to_exccel .
  ENDCASE.

  CALL METHOD ref_grid->check_changed_data.
  rs_selfield-refresh = 'X'.  "刷新内表
ENDFORM.

* 创建表
FORM frm_data_save_to_exccel.
  DATA:
    l_name         LIKE wwwdatatab,
    v_sheet_number TYPE i,
    l_index(4)     TYPE c,
    l_index2(4)    TYPE c,
    ld_rc          TYPE i,
    ld_separator   TYPE c,
    l_mime         LIKE w3mime OCCURS 10.
  DATA:l_head(30)          TYPE c.

  DATA: l_cell1       TYPE ole2_object,
        l_fullpath    TYPE string,
        l_activesheet TYPE ole2_object.

  DATA: sd_user_action TYPE i.
  DATA: sd_loc_fn      TYPE string.
  DATA: sd_loc_dir     TYPE string.

  DATA:g_count    TYPE i,
       l_date     TYPE sy-datum,
       l_str1(20) TYPE c,
       l_str2(20) TYPE c,
       l_str3(20) TYPE c,
       l_str4(20) TYPE c.

  TYPES: BEGIN OF ty_s_senderline,
           line(4096) TYPE c,
         END OF ty_s_senderline,
         ty_t_sender TYPE ty_s_senderline  OCCURS 0.
  DATA: g_excle_body TYPE ty_s_senderline.
  DATA: str_head TYPE ty_s_senderline.
  DATA: str_body TYPE ty_s_senderline.
  DATA: excel_tab TYPE ty_t_sender.

  "下载模板
  PERFORM frm_down_load_excel.
*Begin of changes on 20171011
  IF l_filename IS INITIAL.
    MESSAGE 'file not seleted' TYPE 'S'.
    EXIT.
  ENDIF.
  v_sheet_number = 1.        " ADDED ON 20171011
*end of changes on 20171011.

  PERFORM frm_open_excel1 USING l_filename v_sheet_number.
* V_SHEET_NUMBER = 1.             "CHANGED ON 20171011
  ld_separator = cl_abap_char_utilities=>horizontal_tab.
  "处理数据
  DESCRIBE TABLE it_bcout LINES g_count.

  l_index = 1.

  LOOP AT it_bcout INTO wa_bcout.
    l_str1  = wa_bcout-bl_bal .
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
      CHANGING
        value = l_str1.
    l_str2  = wa_bcout-bc_bal .
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
      CHANGING
        value = l_str2.
*    l_str3  = wa_bcout-sc_bal .        "changed on 20171017
    l_str3  = wa_bcout-sl_bal .         "added on 20171017
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
      CHANGING
        value = l_str3.
    l_str4  = wa_bcout-sc_bal .
    CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
      CHANGING
        value = l_str4.

    l_index2 = l_index +  g_count.

    CONCATENATE wa_bcout-bzides l_index  l_str1 l_str2
    wa_bcout-szides l_index2  l_str3 l_str4
    INTO str_body-line SEPARATED BY ld_separator.
    APPEND str_body TO excel_tab.
    l_index =  l_index + 1.
    "added on 20171018
    AT LAST.
      CONCATENATE '单位负责人:'    ''     ''
      '财务负责人:'    ''     ''
      '制表人:'         ''    ''
      INTO str_body-line SEPARATED BY ld_separator .
      APPEND str_body TO excel_tab.
    ENDAT.
    "added on 20171018
  ENDLOOP.


  SELECT SINGLE butxt INTO l_head FROM t001 WHERE bukrs = p_rbukrs.
  CONCATENATE '编制单位:' l_head  INTO l_head.
  PERFORM sub_cell_fill USING 2 1  l_head.
*  CONCATENATE p_ryear p_rpmax+1(2) '01' INTO l_date.

*
*  CALL FUNCTION 'LAST_DAY_OF_MONTHS'        "最后一天 汇率
*    EXPORTING
*      day_in            = l_date
*    IMPORTING
*      last_day_of_month = l_date
*    EXCEPTIONS
*      day_in_no_date    = 1
*      OTHERS            = 2.
*  CONCATENATE p_ryear '年' p_rpmax+1(2) '月' l_date+6(2) '日' INTO l_head.
  CONCATENATE '年度月份:' p_ryear '/' p_monat INTO l_head.
  PERFORM sub_cell_fill USING 2 5  l_head.
  "PERFORM sub_merger USING 2 1   2 4.
  CONCATENATE '单位:' '元' INTO l_head.
  PERFORM sub_cell_fill USING 2 8 l_head.

  CALL METHOD cl_gui_frontend_services=>clipboard_export  "数据复制到剪贴板
    IMPORTING
      data                 = excel_tab
    CHANGING
      rc                   = ld_rc
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  GET PROPERTY OF v_excel 'ActiveSheet' = v_sheet .
  CALL METHOD OF  v_excel 'Cells' = l_cell1
  EXPORTING
    #1 = 6        " #1 = 4                                "从那里选中的行列
    #2 = 1.

  CALL METHOD OF l_cell1 'SELECT'.
  CALL METHOD OF v_sheet 'PASTE'. "活动的单元个粘贴
*Begin of changes on 20171011
  "  CALL METHOD OF V_SHEET 'SAVE'
  "    EXPORTING
  "      #1 = L_FILENAME
  "      #2 = 1.
*End of changes on 20171011.

  l_index = l_index + 1.
  g_count = g_count + 3.
  PERFORM set_border USING 4  1 g_count   8.
  FREE OBJECT V_sheet.
  CALL METHOD OF v_book 'Close'.
  CALL METHOD OF v_excel 'Quit'.
  FREE OBJECT:l_cell1,l_activesheet,v_sheet, v_book ,v_excel.
  CLEAR: l_filename ,excel_tab.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_top_page
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_top_page .
  DATA: lt_list_commentary TYPE slis_t_listheader,
        ls_list_commentary TYPE slis_listheader.

  CLEAR ls_list_commentary.
  ls_list_commentary-typ  = 'H'.
  ls_list_commentary-key  = ' '.
  ls_list_commentary-info = '资产负债表'.
  APPEND ls_list_commentary TO lt_list_commentary.

  CLEAR ls_list_commentary.
  ls_list_commentary-typ  = 'S'.
  ls_list_commentary-key  = ' '.
  CONCATENATE '报表版本:' p_zverno INTO ls_list_commentary-info.
  APPEND ls_list_commentary TO lt_list_commentary.

  CLEAR ls_list_commentary.
  ls_list_commentary-typ  = 'S'.
  ls_list_commentary-key  = ' '.
  CONCATENATE '公司代码:' p_rbukrs INTO ls_list_commentary-info.
  APPEND ls_list_commentary TO lt_list_commentary.

  CLEAR ls_list_commentary.
  ls_list_commentary-typ  = 'S'.
  ls_list_commentary-key  = ' '.
  "IF p_prctr-high IS NOT INITIAL.
  "  CONCATENATE '利润中心:' p_prctr-low '-' p_prctr-high INTO ls_list_commentary-info.
  "ELSE.
  "  CONCATENATE '利润中心:' p_prctr-low INTO ls_list_commentary-info.
  "ENDIF.
  APPEND ls_list_commentary TO lt_list_commentary.

  CLEAR ls_list_commentary.
  ls_list_commentary-typ  = 'S'.
  ls_list_commentary-key  = ' '.
  CONCATENATE '会计年度:' p_ryear INTO ls_list_commentary-info.
  APPEND ls_list_commentary TO lt_list_commentary.

  CLEAR ls_list_commentary.
  ls_list_commentary-typ  = 'S'.
  ls_list_commentary-key  = ' '.
  CONCATENATE '会计期间:' p_monat INTO ls_list_commentary-info.
  APPEND ls_list_commentary TO lt_list_commentary.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = lt_list_commentary.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  f_getxlsdir
*&---------------------------------------------------------------------*

FORM frm_down_load_excel .

  DATA: lv_filename TYPE string,
        lv_path     TYPE string,
        lv_fullpath TYPE string,
        lv_title    TYPE string.
  DATA: co_objid TYPE wwwdatatab-objid .

  DATA: ls_indcatortxt TYPE string,
        p_filename     TYPE sapb-sappfad.
  DATA: lo_objdata     LIKE wwwdatatab,
        lo_mime        LIKE w3mime,
        ls_destination LIKE rlgrap-filename,
        ls_objnam      TYPE string,
        li_rc          LIKE sy-subrc,
        ls_errtxt      TYPE string.

  co_objid = 'ZFIR_001'.
  lv_title =  '资产负债表'.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = '模板保存为EXCEL'
      default_extension    = 'xls'
      default_file_name    = lv_title
*     file_filter          = '.xls'
      file_filter          = 'Excel 文件 (*.XLS)'
      initial_directory    = 'D:/'
*     DEFAULT_FILE_NAME    = p_filename
    CHANGING
      filename             = lv_filename
      path                 = lv_path
      fullpath             = l_filename
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    STOP .
  ENDIF.
*Begin of changes on 20171011
  IF l_filename IS INITIAL.
    EXIT.
  ENDIF.
*end of changes on 20171011.

  CONCATENATE co_objid '.XLS' INTO ls_objnam.
  CONDENSE ls_objnam NO-GAPS.
  SELECT SINGLE relid objid FROM wwwdata
  INTO CORRESPONDING FIELDS OF lo_objdata
  WHERE srtf2    = 0
  AND relid    = 'MI'
  AND objid    = co_objid .
  IF sy-subrc NE 0 OR lo_objdata-objid EQ space .
    CONCATENATE '模板文件:' ls_objnam '不存在,请用TCODE:SMW0进行加载' INTO ls_errtxt.
    MESSAGE ls_errtxt  TYPE  'E' .
  ENDIF.
  ls_destination = l_filename.
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = lo_objdata
      destination = ls_destination
    IMPORTING
      rc          = li_rc.
  IF li_rc NE 0.
    CONCATENATE '模板文件:' ls_objnam '下载失败' INTO ls_errtxt.
    MESSAGE ls_errtxt TYPE 'E' .
  ENDIF.

ENDFORM.                    "f_getxlsdir

FORM frm_open_excel1 USING pa_path pa_sheet_number.
  CREATE OBJECT v_excel 'Excel.Application'.
  SET PROPERTY OF v_excel 'Visible' = 1.

  CALL METHOD OF v_excel 'Workbooks' = v_book.
  CALL METHOD OF v_book 'Open' = v_sheet
  EXPORTING #1 = pa_path.
  IF sy-subrc <> 0.
    MESSAGE s001(zhrm) WITH 'Open file failed!'.
*    STOP.      "changed on 210171011
    EXIT.        "added on 20171011
  ENDIF.
  CALL METHOD OF v_excel 'WORKSheets' = v_sheet
  EXPORTING #1 = pa_sheet_number.
ENDFORM. " FRM_OPEN_EXCEL

FORM    sub_cell_fill USING l_rowi l_coli l_ivalue.
  CALL METHOD OF
  v_excel
  'CELLS' = v_cell
  EXPORTING
    #1 = l_rowi
    #2 = l_coli.
  SET PROPERTY OF v_cell 'VALUE' = l_ivalue.
  FREE OBJECT:v_cell.
ENDFORM. " SUB_CELL_FILL
FORM sub_frame USING p_firstrow
      p_firstcol
      p_secondrow
      p_secondcol.
  DATA: l_cell1 TYPE ole2_object,
        l_cells TYPE ole2_object,
        l_cell2 TYPE ole2_object.

  CALL METHOD OF
  v_excel
  'Cells' = l_cell1
  EXPORTING
    #1 = p_firstrow
    #2 = p_firstcol.

  CALL METHOD OF
  v_excel
  'Cells' = l_cell2
  EXPORTING
    #1 = p_secondrow
    #2 = p_secondcol.

  CALL METHOD OF
  v_excel
  'Range' = l_cells
  EXPORTING
    #1 = l_cell1
    #2 = l_cell2.

  CALL METHOD OF
    l_cells
    'Select'.

  CALL METHOD OF
    l_cells
    'BorderAround'
    EXPORTING
      #1 = 1 "continuous line
      #2 = 2. "thick

  FREE OBJECT: l_cell1,l_cell2,l_cells.

ENDFORM. " SUB_FRAME

FORM set_border USING p_firstrow   p_firstcol    p_secondrow   p_secondcol.

  DATA: l_cell1      TYPE ole2_object,
        l_cells      TYPE ole2_object,
        l_boder_cell TYPE ole2_object,
        l_borders    TYPE ole2_object,
        l_cell2      TYPE ole2_object.

  CALL METHOD OF v_excel 'Cells' = l_cell1
  EXPORTING
    #1 = p_firstrow
    #2 = p_firstcol.

  CALL METHOD OF v_excel 'Cells' = l_cell2
  EXPORTING
    #1 = p_secondrow
    #2 = p_secondcol.

  CALL METHOD OF v_excel 'Range' = l_boder_cell
  EXPORTING
    #1 = l_cell1
    #2 = l_cell2.


  CALL METHOD OF l_boder_cell 'BORDERS' = l_borders.
  SET PROPERTY OF l_borders 'LINESTYLE' = 1.
  SET PROPERTY OF l_borders 'WEIGHT' = 10.

  FREE OBJECT: l_borders ,l_cell1 ,l_cell2 ,l_borders.
ENDFORM.

FORM sub_merger USING    p_firstrow
      p_firstcol
      p_secondrow
      p_secondcol.


  DATA: l_cell1   TYPE ole2_object,
        l_cells   TYPE ole2_object,
        l_columns TYPE ole2_object,
        l_cell2   TYPE ole2_object.
  CALL METHOD OF
  v_excel
  'Cells' = l_cell1
  EXPORTING
    #1 = p_firstrow
    #2 = p_firstcol.
  CALL METHOD OF
  v_excel
  'Cells' = l_cell2
  EXPORTING
    #1 = p_secondrow
    #2 = p_secondcol.
  CALL METHOD OF
  v_excel
  'Range' = l_cells
  EXPORTING
    #1 = l_cell1
    #2 = l_cell2.
  CALL METHOD OF
    l_cells
    'Select'.

  CALL METHOD OF
    l_cells
    'Merge'.

  GET PROPERTY OF l_cells 'Columns' = l_columns.

  CALL METHOD OF
    l_columns
    'AutoFit'.
  FREE OBJECT: l_cell1,l_cell2,l_cells,l_columns.
ENDFORM. " SUB_MERGER

 

标签:wa,资产,INTO,lptab,faglflext,bal,TYPE,FICO,负债表
From: https://www.cnblogs.com/Anyohh233/p/17980145

相关文章

  • FICO 三大报表运算维护表计算规则(表里维护行次的)
    1+2+3"内表整理科目报表项目汇总后计算公式1+2+3DATA:lv_strTYPEstring,lv_str1TYPEstring,lt_numTYPETABLEOFstring,lt_signTYPETABLEOFstring,lv_indexTYPECHAR4,lv_iTYPEi,lv_sumTYPEpDECIMALS3.......
  • 组织过程管理与过程资产开发过程
    ......
  • 实现连贯IT硬件资产管理的6个最佳实践
    随着业务的发展,对更好服务体验的需求成倍增加,服务运营必须跟上这一需求。此外,在应对持续的经济逆风和IT人才紧缩等全球挑战的同时,企业需要利用现有的IT投资实现更多目标。从配置IT资产和利用数据中心到确保跨区域的服务可用性,有凝聚力的IT资产管理策略可以帮助企业掌握这......
  • 浮动许可证软件资产管理:降本增效的秘密武器!
    随着信息化建设的发展,软件已经成为企业运营的重要工具。然而,许多企业在采购软件时,却常常面临许可证不足、浪费严重的问题。这些问题不仅增加了企业的运营成本,也影响了企业的运营效率。那么,如何有效地管理软件资产,降低采购成本,提高运营效率呢?答案就是——软件资产管理。软件资产管理......
  • 交易性金融资产
    1.取得:借:交易性金融资产——成本应收股利/应收利息(取得时已宣告但尚未发放的现金股利或已到期但尚未领取的债券信息)贷:其他货币资金——存出投资款(支付的价款) 借:投资收益(交易费用)应交税费——应交增值税(进项税额)贷:其他货币资金等(支付的交易费用及增值税)==========......
  • 亿信华辰:数据资源、数据资产和数据要素的概念辨析
    从商业决策到科学研究,从个性化服务到社会治理,数据都在发挥着越来越重要的作用。然而,对于数据资源、数据资产和数据要素这三个概念,人们往往容易混淆。为了更好地理解和利用数据,有必要对这三个概念进行深入的辨析。下面亿信华辰将逐一探讨这三个概念的定义、特征以及相互关系,以期帮助......
  • 数据资产入表:工业数字化新机遇
    来源:中国工业新闻网作者:工业互联网周刊副主编耿鹏飞1月1日,《企业数据资源相关会计处理暂行规定》(以下简称《暂行规定》)正式实施。企业数据资产入表迈出了“从0到1”的关键一步。数据是数字化、智能化的“成果”,也是驱动数字化、智能化的“要素”。数据资产入表,意味着工业数字化迎......
  • ERD助力研发资产沉淀&研发提效
    一、从痛点中思考答案痛点一:复杂系统的设计和逻辑碎片化散落,缺少沉淀导致系统后期维护、迭代以及架构升级都非常困难。痛点二:由于新需求或新项目导致的系统的老旧逻辑梳理往往耗费大量人力,甚至造成人才的流失。痛点三:多团队共建场景下需要参与各方了解跨应用系统的整体设计,沟通......
  • 亿信华辰:以数据资产入表为抓手,推动数据资产化
    在数字化时代,数据已经成为企业的重要资产。数据资产化是将数据视为一种有价值的资产,对其进行有效管理和利用的过程。而数据资产入表则是将数据资产纳入财务报表,以反映其价值和对企业财务状况的影响。本文亿信华辰将深入探讨数据资产化与数据资产入表之间的关系,分析两者如何相互影响......
  • 数字化时代下的数字化资产及其治理 |京东云技术团队
    1什么是数字化资产维克托·迈尔·舍恩伯格在《大数据时代》中提到:“虽然数据还没有被列入企业的资产负债表,但这只是一个时间问题。”数据资源将和土地、人力、资金等生产要素一样,成为企业的资产。业界对于数据资产的定义是企业或组织拥有或控制的,能在未来带来经济利益的数据资源。......