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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了