*&---------------------------------------------------------------------*
*& 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