*****************************************************************************
* System :
* Module : FI
* Program ID :
* Program :
* Author :
* Date :
* Description : 科目余额表
*****************************************************************************
* Modified Recorder :
* Date Task Author Content
* ----------------------------------------------------------------------- *
* 修改日期 请求号 修改者 修改内容
*
*****************************************************************************
REPORT z.
TABLES:sscrfields,acdoca.
* +-------------------------------------------------------------------------------------------+
* | 选择屏幕
* +-------------------------------------------------------------------------------------------+
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-a01.
SELECT-OPTIONS: s_bukrs FOR acdoca-rbukrs ,
s_kmonth FOR acdoca-fiscyearper NO-EXTENSION DEFAULT sy-datum+0(6) TO sy-datum+0(6),
s_racct FOR acdoca-racct,
s_lifnr FOR acdoca-lifnr,
s_kunnr FOR acdoca-kunnr,
s_aufnr FOR acdoca-aufnr, "内部订单编码
s_kostl FOR acdoca-ukostl,"成本中心编码
s_waers FOR acdoca-rwcur ,"原币别编码
s_fkber FOR acdoca-rfarea.
SELECTION-SCREEN: SKIP 1.
PARAMETERS: p_ck_pa AS CHECKBOX, "客户/供应商
p_ck_bw AS CHECKBOX DEFAULT 'X', "显示本位币
p_ck_jy AS CHECKBOX DEFAULT 'X', "显示交易货币
p_ck_jt AS CHECKBOX. "显示集团货币
SELECTION-SCREEN:END OF BLOCK blk1.
SELECTION-SCREEN: FUNCTION KEY 1.
* +-------------------------------------------------------------------------------------------+
* | 本地类LCL_ALV1100定义
* +-------------------------------------------------------------------------------------------+
CLASS lcl_alv1100 DEFINITION.
PUBLIC SECTION.
DATA: mo_container TYPE REF TO cl_gui_docking_container,
mo_alv TYPE REF TO cl_gui_alv_grid,
mt_fcat TYPE lvc_t_fcat,
ms_layout TYPE lvc_s_layo.
METHODS: constructor.
METHODS: display.
METHODS: refresh.
PROTECTED SECTION.
METHODS: data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
METHODS: data_changed_finished FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified et_good_cells .
METHODS: add_button_2toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
METHODS: hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no.
METHODS: after_user_command FOR EVENT after_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm e_saved e_not_processed.
PRIVATE SECTION.
METHODS: set_fcat RETURNING VALUE(rt_fcat) TYPE lvc_t_fcat.
METHODS: get_toolbar_exclude RETURNING VALUE(rt_func) TYPE ui_functions.
ENDCLASS.
* +-------------------------------------------------------------------------------------------+
* | 数据定义
* +-------------------------------------------------------------------------------------------+
TYPES: BEGIN OF ty_out1100 ,
bqqj TYPE char20, " 本期期间
rbukrs TYPE acdoca-rbukrs, " 公司代码
racct TYPE acdoca-racct, " 总账科目
txt20 TYPE skat-txt20, " 总账科目名称
umskz TYPE acdoca-umskz, " 特殊总账标识
kunnr TYPE acdoca-kunnr, " 客户编号
lifnr TYPE acdoca-lifnr, " 供应商编号
partner TYPE but000-partner,
name1 TYPE but000-name_org1, " 客户/供应商名称
rfarea TYPE acdoca-rfarea, " 职能范围
fkbtx TYPE tfkbt-fkbtx, " 职能范围
rwcur TYPE acdoca-rwcur, " 交易币别(原币)
sqjf_jy TYPE acdoca-wsl, " 上期借方余额(原币)
sqdf_jy TYPE acdoca-wsl, " 上期贷方余额(原币)
sqfs_jy TYPE acdoca-wsl, " 上期发生额(原币)
bqjf_jy TYPE acdoca-wsl, " 本期借方发生额(原币)
bqdf_jy TYPE acdoca-wsl, " 本期贷方发生额(原币)
bqfs_jy TYPE acdoca-wsl, " 本期发生额(原币)
qmjf_jy TYPE acdoca-wsl, " 期末借方余额(原币)
qmdf_jy TYPE acdoca-wsl, " 期末贷方余额(原币)
qmfs_jy TYPE acdoca-wsl, " 期末余额(原币)
bnljjf_jy TYPE acdoca-wsl, " 本年累计借方发生额(原币)
bnljdf_jy TYPE acdoca-wsl, " 本年累计贷方发生额(原币)
bnljfs_jy TYPE acdoca-wsl, " 本年累计发生额(原币)
rhcur TYPE acdoca-rhcur, " 本位币
sqjf_bw TYPE acdoca-wsl, " 上期借方余额(本位币) (本币期初余额)(借)
sqdf_bw TYPE acdoca-wsl, " 上期贷方余额(本位币) (本币期初余额)(借)
sqfs_bw TYPE acdoca-wsl, " 上期发生额(本位币) (本币期初余额)(借)
bqjf_bw TYPE acdoca-wsl, " 本期借方发生额(本位币)(本币本期发生额)(借)
bqdf_bw TYPE acdoca-wsl, " 本期贷方发生额(本位币)(本币本期发生额)(贷)
bqfs_bw TYPE acdoca-wsl, " 本期发生额(本位币) (本币本期净额)
qmjf_bw TYPE acdoca-wsl, " 期末借方余额(本位币) 本币期末余额(借)
qmdf_bw TYPE acdoca-wsl, " 期末贷方余额(本位币) 本币期末余额(贷)
qmfs_bw TYPE acdoca-wsl, " 期末余额(本位币) 本币期末余
bnljjf_bw TYPE acdoca-wsl, " 本年累计借方发生额(本位币)
bnljdf_bw TYPE acdoca-wsl, " 本年累计贷方发生额(本位币)
bnljfs_bw TYPE acdoca-wsl, " 本年累计发生额(本位币)
rkcur TYPE acdoca-rkcur, " 集团货币
sqjf_jt TYPE acdoca-wsl, " 上期借方余额(集团货币)
sqdf_jt TYPE acdoca-wsl, " 上期贷方余额(集团货币)
sqfs_jt TYPE acdoca-wsl, " 上期发生额(集团货币)
bqjf_jt TYPE acdoca-wsl, " 本期借方发生额(集团货币)
bqdf_jt TYPE acdoca-wsl, " 本期贷方发生额(集团货币)
bqfs_jt TYPE acdoca-wsl, " 本期发生额(集团货币)
qmjf_jt TYPE acdoca-wsl, " 期末借方余额(集团货币)
qmdf_jt TYPE acdoca-wsl, " 期末贷方余额(集团货币)
qmfs_jt TYPE acdoca-wsl, " 期末余额(集团货币)
bnljjf_jt TYPE acdoca-wsl, " 本年累计借方发生额(集团货币)
bnljdf_jt TYPE acdoca-wsl, " 本年累计贷方发生额(集团货币)
bnljfs_jt TYPE acdoca-wsl, " 本年累计发生额(集团货币)
flag TYPE char1, " 数据来源区分:1科目属性为K/D,2反之
END OF ty_out1100.
DATA: gt_out1100 TYPE TABLE OF ty_out1100,
go_alv1100 TYPE REF TO lcl_alv1100,
gv_rc TYPE sy-subrc.
* +-------------------------------------------------------------------------------------------+
* | I N I T I A L I Z A T I O N
* +-------------------------------------------------------------------------------------------+
INITIALIZATION.
PERFORM init_prog.
* +-------------------------------------------------------------------------------------------+
* | A T S E L E C T I O N - S C R E E N O U T P U T.
* +-------------------------------------------------------------------------------------------+
AT SELECTION-SCREEN OUTPUT.
PERFORM set_selscr_attribute.
* +-------------------------------------------------------------------------------------------+
* | A T S E L E C T I O N - S C R E E N O U T P U T.
* +-------------------------------------------------------------------------------------------+
AT SELECTION-SCREEN.
PERFORM on_selscr_user_command.
* +-------------------------------------------------------------------------------------------+
* | A T S E L E C T I O N - S C R E E N O N
* +-------------------------------------------------------------------------------------------+
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kmonth-low.
s_kmonth-low = zcl_tools=>select_year_and_month( ).
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_kmonth-high.
s_kmonth-high = zcl_tools=>select_year_and_month( ).
* +-------------------------------------------------------------------------------------------+
* | S T A R T O F S E L E C T I O N
* +-------------------------------------------------------------------------------------------+
START-OF-SELECTION.
PERFORM main.
* +-------------------------------------------------------------------------------------------+
* | Module STATUS_1100 OUTPUT
* +-------------------------------------------------------------------------------------------+
MODULE status_1100 OUTPUT.
IF go_alv1100 IS INITIAL.
go_alv1100 = NEW #( ).
go_alv1100->display( ).
ELSE.
go_alv1100->refresh( ).
ENDIF.
SET PF-STATUS 'STATUS_1100'.
SET TITLEBAR 'TITLE_1100' .
ENDMODULE.
* +-------------------------------------------------------------------------------------------+
* | Module USER_COMMAND_1100 INPUT
* +-------------------------------------------------------------------------------------------+
MODULE user_command_1100 INPUT.
CASE sy-ucomm.
WHEN 'ZBACK'.
LEAVE TO SCREEN 0.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
* +-------------------------------------------------------------------------------------------+
* | 本地类LCL_SALV1100实现
* +-------------------------------------------------------------------------------------------+
CLASS lcl_alv1100 IMPLEMENTATION.
* +--------------------------------------------------------------------+
* | 创建并展示
* +--------------------------------------------------------------------+
METHOD constructor.
mo_container = NEW #( repid = sy-repid
dynnr = '1100'
side = 2
extension = 2050 ).
mo_alv = NEW #( mo_container ).
ENDMETHOD.
* +--------------------------------------------------------------------+
* | 展示
* +--------------------------------------------------------------------+
METHOD display.
ms_layout = VALUE #( cwidth_opt = 'X'
sel_mode = 'D' ).
mt_fcat = set_fcat( ) .
mo_alv->register_edit_event( cl_gui_alv_grid=>mc_evt_modified ).
mo_alv->register_edit_event( cl_gui_alv_grid=>mc_evt_enter ).
mo_alv->set_toolbar_interactive( )."激活状态栏
SET HANDLER add_button_2toolbar FOR mo_alv.
SET HANDLER after_user_command FOR mo_alv.
SET HANDLER hotspot_click FOR mo_alv.
mo_alv->set_table_for_first_display(
EXPORTING
is_layout = ms_layout
i_save = 'A'
is_variant = VALUE #( report = sy-repid handle = '1' )
it_toolbar_excluding = get_toolbar_exclude( )
CHANGING
it_outtab = gt_out1100
it_fieldcatalog = mt_fcat ).
IF sy-subrc <> 0.
ENDIF.
ENDMETHOD.
* +---------------------------------------------------------------------------+
* | 设置fieldcat
* +---------------------------------------------------------------------------+
METHOD set_fcat.
TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = DATA(lo_salv)
CHANGING t_table = gt_out1100 ).
rt_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = lo_salv->get_columns( )
r_aggregations = lo_salv->get_aggregations( ) ).
CATCH cx_root INTO DATA(lo_error).
MESSAGE lo_error->get_text( ) TYPE 'I'. RETURN.
ENDTRY.
DELETE rt_fcat WHERE fieldname = 'FLAG'.
DELETE rt_fcat WHERE fieldname = 'KUNNR'.
DELETE rt_fcat WHERE fieldname = 'LIFNR'.
IF p_ck_pa = abap_off..
DELETE rt_fcat WHERE fieldname = 'PARTNER'.
DELETE rt_fcat WHERE fieldname = 'NAME1'.
DELETE rt_fcat WHERE fieldname = 'UMSKZ'.
ENDIF.
IF p_ck_bw = abap_off."本文币
DELETE rt_fcat WHERE fieldname = 'RHCUR'.
DELETE rt_fcat WHERE fieldname+4(3) = '_BW'.
DELETE rt_fcat WHERE fieldname+6(3) = '_BW'.
ENDIF.
IF p_ck_jy = abap_off."交易货币
DELETE rt_fcat WHERE fieldname = 'RWCUR'.
DELETE rt_fcat WHERE fieldname+4(3) = '_JY'.
DELETE rt_fcat WHERE fieldname+6(3) = '_JY'.
ENDIF.
IF p_ck_jt = abap_off."集团货币
DELETE rt_fcat WHERE fieldname = 'RKCUR'.
DELETE rt_fcat WHERE fieldname+4(3) = '_JT'.
DELETE rt_fcat WHERE fieldname+6(3) = '_JT'.
ENDIF.
LOOP AT rt_fcat ASSIGNING FIELD-SYMBOL(<ls_fcat>).
CASE <ls_fcat>-fieldname.
WHEN 'BQQJ'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期期间'.
<ls_fcat>-key = 'X'.
WHEN 'TXT20'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '总账科目描述'.
<ls_fcat>-key = 'X'.
WHEN 'UMSKZ' OR 'RFAREA' OR 'RBUKRS' OR 'FKBTX'.
<ls_fcat>-key = 'X'.
WHEN 'RACCT'.
<ls_fcat>-key = 'X'.
<ls_fcat>-hotspot = 'X'.
WHEN 'PARTNER'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '核算维度编码'.
<ls_fcat>-key = 'X'.
WHEN 'NAME1'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '核算维度名称'.
<ls_fcat>-key = 'X'.
WHEN 'RWCUR'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '原币'.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-just = 'C'.
<ls_fcat>-do_sum = 'X'.
WHEN 'SQJF_JY'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初借方余额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'SQDF_JY'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初贷方余额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'SQFS_JY'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初余额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQJF_JY'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期借方发生额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQDF_JY'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期贷方发生额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQFS_JY' .
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期发生额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN'QMJF_JY' .
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末借方余额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
WHEN 'QMDF_JY' .
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末贷方余额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'QMFS_JY' .
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末余额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
WHEN 'BNLJJF_JY'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计借方发生额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BNLJDF_JY'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计贷方发生额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BNLJFS_JY'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计发生额(原币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C700'.
<ls_fcat>-do_sum = 'X'.
WHEN 'RHCUR'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本位币'.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-just = 'C'.
<ls_fcat>-do_sum = 'X'.
WHEN 'SQJF_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初借方余额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
WHEN 'SQDF_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初贷方余额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'SQFS_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初余额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQJF_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期借方发生额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQDF_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期贷方发生额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQFS_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期发生额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'QMJF_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末借方余额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'QMDF_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末贷方余额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'QMFS_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末余额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BNLJJF_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计借方发生额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BNLJDF_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计贷方发生额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BNLJFS_BW'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计发生额(本位币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C500'.
<ls_fcat>-do_sum = 'X'.
WHEN 'RKCUR'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '集团货币'.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-just = 'C'.
WHEN 'SQJF_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初借方余额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'SQDF_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初贷方余额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN'SQFS_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期初余额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQJF_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期借方发生额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQDF_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期贷方发生额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BQFS_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本期发生额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'QMJF_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末借方余额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'QMDF_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末贷方余额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'QMFS_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '期末余额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BNLJJF_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计借方发生额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BNLJDF_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计贷方发生额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN 'BNLJFS_JT'.
<ls_fcat>-coltext = <ls_fcat>-reptext = '本年累计发生额(集团货币)'.
<ls_fcat>-no_zero = abap_true.
<ls_fcat>-emphasize = 'C400'.
<ls_fcat>-do_sum = 'X'.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
ENDMETHOD.
* +---------------------------------------------------------------------------+
* | 设置排除按钮
* +---------------------------------------------------------------------------+
METHOD get_toolbar_exclude.
APPEND cl_gui_alv_grid=>mc_fc_maximum TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_minimum TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_print TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_graph TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_info TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_find_more TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_check TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_refresh TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy_row TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_cut TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_paste_new_row TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_copy TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_append_row TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_move_row TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_delete_row TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_insert_row TO rt_func.
APPEND cl_gui_alv_grid=>mc_fc_loc_undo TO rt_func.
ENDMETHOD.
* +---------------------------------------------------------------------------+
* | 处理ALV数据改变
* +---------------------------------------------------------------------------+
METHOD data_changed.
ENDMETHOD.
* +---------------------------------------------------------------------------+
* | 添加自定义按钮
* +---------------------------------------------------------------------------+
METHOD add_button_2toolbar.
e_object->mt_toolbar = VALUE #( BASE e_object->mt_toolbar
( icon = icon_export
function = 'DOWNLOAD'
butn_type = '0'
disabled = ''
quickinfo = '下载'
text = '下载' ) ).
ENDMETHOD.
* +---------------------------------------------------------------------------+
* | 自定义按钮
* +---------------------------------------------------------------------------+
METHOD after_user_command.
CASE e_ucomm.
WHEN 'DOWNLOAD'.
PERFORM download_data_2local.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
* +---------------------------------------------------------------------------+
* | Instance Protected Method 热点事件
* +---------------------------------------------------------------------------+
METHOD hotspot_click.
DATA(ls_line) = gt_out1100[ e_row_id-index ] .
CASE e_column_id-fieldname.
WHEN 'RACCT'.
PERFORM call_zfir005 USING ls_line.
ENDCASE.
ENDMETHOD.
* +---------------------------------------------------------------------------+
* | Instance Protected Method 处理ALV数据改变结束事件
* +---------------------------------------------------------------------------+
METHOD data_changed_finished.
ENDMETHOD.
* +---------------------------------------------------------------------------+
* | Static Public Method 刷新
* +---------------------------------------------------------------------------+
METHOD refresh.
mo_alv->refresh_table_display( is_stable = VALUE #( row = 'X' col = 'X' ) ).
mo_alv->set_frontend_layout( ms_layout ).
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Form init_prog
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM init_prog .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form set_selscr_attribute
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM set_selscr_attribute .
LOOP AT SCREEN.
IF screen-name = 'S_BUKRS-LOW' OR screen-name CS 'S_KMONTH'.
screen-required = '2'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form on_selscr_user_command
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM on_selscr_user_command .
CASE sscrfields-ucomm.
WHEN 'FC01'.
WHEN OTHERS. RETURN.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form main
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM main .
PERFORM check_selscr.
CHECK gv_rc = 0.
PERFORM check_authority.
CHECK gv_rc = 0.
PERFORM get_data.
CHECK gv_rc = 0.
CALL SCREEN 1100.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data .
IF s_kmonth-high IS INITIAL.
s_kmonth-high = s_kmonth-low.
ENDIF.
IF s_kunnr[] IS NOT INITIAL OR s_lifnr[] IS NOT INITIAL.
p_ck_pa = abap_on.
ENDIF.
* 取基础数据
PERFORM get_data_basic.
* 处理货币
PERFORM get_data_hb.
* 取描述文本
PERFORM get_data_default_text.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form check_selscr
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM check_selscr .
CLEAR: gv_rc.
IF s_bukrs-low IS INITIAL OR s_bukrs-low = '*'.
MESSAGE '请输入公司代码!' TYPE 'S' DISPLAY LIKE 'E'.
gv_rc = 1. RETURN.
ENDIF.
IF s_kmonth-low IS INITIAL.
MESSAGE '请输入会计期间!' TYPE 'S' DISPLAY LIKE 'E'.
gv_rc = 1. RETURN.
ENDIF.
IF s_kmonth-high IS INITIAL.
MESSAGE '请输入会计期间!' TYPE 'S' DISPLAY LIKE 'E'.
gv_rc = 1. RETURN.
ENDIF.
IF s_kmonth-low+0(4) <> s_kmonth-high+0(4).
MESSAGE |不支持跨年选择!| TYPE 'S' DISPLAY LIKE 'E'.
gv_rc = 2. RETURN.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form check_authority
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM check_authority .
SELECT bukrs FROM t001 WHERE bukrs IN @s_bukrs INTO TABLE @DATA(lt_t001).
LOOP AT lt_t001 ASSIGNING FIELD-SYMBOL(<ls_t001>).
AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
ID 'BUKRS' FIELD <ls_t001>-bukrs.
IF sy-subrc <> 0.
MESSAGE |{ TEXT-t01 }{ <ls_t001>-bukrs }{ TEXT-t03 }| TYPE 'S' DISPLAY LIKE 'E'.
gv_rc = 2. RETURN.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_data_default_text
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data_default_text .
DATA: lt_out LIKE gt_out1100.
*------------------------------------------------------------
* 取供应商/客户描述
lt_out = gt_out1100.
DELETE lt_out WHERE kunnr IS INITIAL AND lifnr IS INITIAL.
SORT lt_out BY kunnr lifnr.
DELETE ADJACENT DUPLICATES FROM lt_out COMPARING kunnr lifnr.
SELECT but000~partner,but000~name_org1,'K' AS flag
FROM but000
INNER JOIN @lt_out AS itab ON but000~partner = itab~kunnr
INTO TABLE @DATA(lt_but000) ##ITAB_KEY_IN_SELECT.
SELECT but000~partner,but000~name_org1,'L' AS flag
FROM but000
INNER JOIN @lt_out AS itab ON but000~partner = itab~lifnr
APPENDING TABLE @lt_but000 ##ITAB_KEY_IN_SELECT.
LOOP AT lt_but000 ASSIGNING FIELD-SYMBOL(<ls_but000>).
CASE <ls_but000>-flag.
WHEN 'K'.
MODIFY gt_out1100 FROM VALUE #( name1 = <ls_but000>-name_org1 )
TRANSPORTING name1
WHERE kunnr = <ls_but000>-partner.
WHEN 'L'.
MODIFY gt_out1100 FROM VALUE #( name1 = <ls_but000>-name_org1 )
TRANSPORTING name1
WHERE lifnr = <ls_but000>-partner.
ENDCASE.
ENDLOOP.
FREE: lt_but000.
*------------------------------------------------------------
* 取科目描述
lt_out = gt_out1100.
DELETE lt_out WHERE racct IS INITIAL.
SORT lt_out BY racct.
DELETE ADJACENT DUPLICATES FROM lt_out COMPARING racct.
SELECT skat~saknr,skat~txt20
FROM skat INNER JOIN @lt_out AS itab ON skat~saknr = itab~racct
WHERE skat~spras = @sy-langu
AND skat~ktopl = '1000'
INTO TABLE @DATA(lt_skat) ##ITAB_KEY_IN_SELECT.
LOOP AT lt_skat ASSIGNING FIELD-SYMBOL(<ls_skat>).
MODIFY gt_out1100 FROM VALUE #( txt20 = <ls_skat>-txt20 )
TRANSPORTING txt20
WHERE racct = <ls_skat>-saknr.
ENDLOOP.
FREE: lt_skat.
*------------------------------------------------------------
* 取功能范围描述
SELECT fkber,fkbtx FROM tfkbt WHERE spras = @sy-langu INTO TABLE @DATA(lt_tfkbt).
LOOP AT lt_tfkbt ASSIGNING FIELD-SYMBOL(<ls_tfkbt>).
MODIFY gt_out1100 FROM VALUE #( fkbtx = <ls_tfkbt>-fkbtx )
TRANSPORTING fkbtx
WHERE rfarea = <ls_tfkbt>-fkber.
ENDLOOP.
FREE: lt_tfkbt.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_data_basic
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data_basic .
DATA: ls_out1100 TYPE ty_out1100.
IF p_ck_pa = abap_on.
SELECT DISTINCT rbukrs,racct,rwcur,rkcur,rhcur,kunnr,lifnr,acdoca~umskz,'1' AS flag,rfarea
FROM acdoca
INNER JOIN skb1 ON acdoca~racct = skb1~saknr
WHERE rldnr = '0L'
AND substring( belnr,1,1 ) <> 'B'
AND rbukrs IN @s_bukrs
AND racct IN @s_racct
AND lifnr IN @s_lifnr
AND kunnr IN @s_kunnr
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
AND rwcur IN @s_waers
AND rfarea IN @s_fkber
AND skb1~mitkz IN ( 'D','K' )
INTO TABLE @DATA(lt_acdoca).
SELECT DISTINCT rbukrs,racct,rwcur,rkcur,rhcur,' ' AS kunnr,' ' AS lifnr,' ' AS umskz,'2' AS flag,rfarea
FROM acdoca
INNER JOIN skb1 ON acdoca~racct = skb1~saknr
WHERE rldnr = '0L'
AND substring( belnr,1,1 ) <> 'B'
AND rbukrs IN @s_bukrs
AND racct IN @s_racct
AND lifnr IN @s_lifnr
AND kunnr IN @s_kunnr
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
AND rwcur IN @s_waers
AND rfarea IN @s_fkber
AND skb1~mitkz NOT IN ( 'D','K' )
APPENDING TABLE @lt_acdoca.
ELSE.
SELECT DISTINCT rbukrs,racct,rwcur,rkcur,rhcur,' ' AS kunnr,' ' AS lifnr,' ' AS umskz,'2' AS flag,rfarea
FROM acdoca
WHERE rldnr = '0L'
AND substring( belnr,1,1 ) <> 'B'
AND rbukrs IN @s_bukrs
AND racct IN @s_racct
AND lifnr IN @s_lifnr
AND kunnr IN @s_kunnr
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
AND rwcur IN @s_waers
AND rfarea IN @s_fkber
APPENDING TABLE @lt_acdoca.
ENDIF.
IF s_lifnr IS NOT INITIAL.
DELETE lt_acdoca WHERE lifnr NOT IN s_lifnr[].
ENDIF.
IF s_kunnr IS NOT INITIAL.
DELETE lt_acdoca WHERE kunnr NOT IN s_kunnr[].
ENDIF.
SORT lt_acdoca BY rbukrs racct rwcur rkcur rhcur kunnr lifnr umskz rfarea.
DELETE ADJACENT DUPLICATES FROM lt_acdoca COMPARING ALL FIELDS.
LOOP AT lt_acdoca ASSIGNING FIELD-SYMBOL(<ls_acdoca>).
CLEAR: ls_out1100.
ls_out1100 = CORRESPONDING #( <ls_acdoca> ).
APPEND ls_out1100 TO gt_out1100.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_data_hb
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data_hb .
DATA: lv_gjahr TYPE gjahr.
IF s_kmonth-high IS INITIAL .
lv_gjahr = s_kmonth-high+0(4).
ELSE.
lv_gjahr = s_kmonth-low+0(4).
ENDIF.
DATA(lt_out1100) = gt_out1100.
SORT lt_out1100 BY rbukrs racct rwcur rkcur rhcur lifnr kunnr umskz flag.
DELETE ADJACENT DUPLICATES FROM lt_out1100 COMPARING rbukrs racct rwcur rkcur rhcur lifnr kunnr umskz flag.
IF p_ck_pa = abap_on.
"上期
SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'S' AS flag,acdoca~rfarea,
SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
FROM acdoca
INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
AND acdoca~racct = itab~racct
AND acdoca~rwcur = itab~rwcur
AND acdoca~rkcur = itab~rkcur
AND acdoca~rhcur = itab~rhcur
AND acdoca~lifnr = itab~lifnr
AND acdoca~kunnr = itab~kunnr
AND acdoca~umskz = itab~umskz
AND acdoca~rfarea = itab~rfarea
WHERE acdoca~rldnr = '0L'
AND substring( acdoca~belnr,1,1 ) <> 'B'
AND acdoca~fiscyearper < @s_kmonth-low
AND itab~flag = '1'
AND acdoca~racct NOT BETWEEN '5001010000' AND '9999999999'
AND acdoca~racct NOT BETWEEN '0000942001' AND '0009943006'
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
INTO TABLE @DATA(lt_acdoca) ##ITAB_KEY_IN_SELECT.
"上期:只取本年
SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'S' AS flag,acdoca~rfarea,
SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
FROM acdoca
INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
AND acdoca~racct = itab~racct
AND acdoca~rwcur = itab~rwcur
AND acdoca~rkcur = itab~rkcur
AND acdoca~rhcur = itab~rhcur
AND acdoca~lifnr = itab~lifnr
AND acdoca~kunnr = itab~kunnr
AND acdoca~umskz = itab~umskz
AND acdoca~rfarea = itab~rfarea
WHERE acdoca~rldnr = '0L'
AND substring( acdoca~belnr,1,1 ) <> 'B'
AND acdoca~fiscyearper < @s_kmonth-low
AND substring( acdoca~fiscyearper,1,4 ) = @lv_gjahr
AND itab~flag = '1'
AND ( acdoca~racct BETWEEN '5001010000' AND '9999999999' OR acdoca~racct BETWEEN '0000942001' AND '0009943006' )
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.
"本期
SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'B' AS flag,acdoca~rfarea,
SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
FROM acdoca
INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
AND acdoca~racct = itab~racct
AND acdoca~rwcur = itab~rwcur
AND acdoca~rkcur = itab~rkcur
AND acdoca~rhcur = itab~rhcur
AND acdoca~lifnr = itab~lifnr
AND acdoca~kunnr = itab~kunnr
AND acdoca~umskz = itab~umskz
AND acdoca~rfarea = itab~rfarea
WHERE acdoca~rldnr = '0L'
AND substring( acdoca~belnr,1,1 ) <> 'B'
AND fiscyearper >= @s_kmonth-low
AND fiscyearper <= @s_kmonth-high
AND itab~flag = '1'
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.
"本年累计
SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'B' AS flag,acdoca~rfarea,
SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
FROM acdoca
INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
AND acdoca~racct = itab~racct
AND acdoca~rwcur = itab~rwcur
AND acdoca~rkcur = itab~rkcur
AND acdoca~rhcur = itab~rhcur
AND acdoca~lifnr = itab~lifnr
AND acdoca~kunnr = itab~kunnr
AND acdoca~umskz = itab~umskz
AND acdoca~rfarea = itab~rfarea
WHERE acdoca~rldnr = '0L'
AND substring( acdoca~belnr,1,1 ) <> 'B'
AND substring( acdoca~fiscyearper,1,4 ) = @lv_gjahr
AND fiscyearper <= @s_kmonth-high
AND itab~flag = '1'
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
INTO TABLE @DATA(lt_acdoca_bnlj) ##ITAB_KEY_IN_SELECT.
ENDIF.
"上期:不带特殊总账
SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,' ' AS umskz,
acdoca~drcrk,' ' AS kunnr,' ' AS lifnr,'S' AS flag,acdoca~rfarea,
SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
FROM acdoca
INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
AND acdoca~racct = itab~racct
AND acdoca~rwcur = itab~rwcur
AND acdoca~rkcur = itab~rkcur
AND acdoca~rhcur = itab~rhcur
AND acdoca~rfarea = itab~rfarea
WHERE rldnr = '0L'
AND substring( acdoca~belnr,1,1 ) <> 'B'
AND fiscyearper < @s_kmonth-low
AND itab~flag = '2'
AND acdoca~racct NOT BETWEEN '5001010000' AND '9999999999'
AND acdoca~racct NOT BETWEEN '0000942001' AND '0009943006'
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~drcrk,acdoca~rfarea
APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.
"上期:不带特殊总账:只取本年
SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,' ' AS umskz,
acdoca~drcrk,' ' AS kunnr,' ' AS lifnr,'S' AS flag,acdoca~rfarea,
SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
FROM acdoca
INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
AND acdoca~racct = itab~racct
AND acdoca~rwcur = itab~rwcur
AND acdoca~rkcur = itab~rkcur
AND acdoca~rhcur = itab~rhcur
AND acdoca~rfarea = itab~rfarea
WHERE rldnr = '0L'
AND substring( acdoca~belnr,1,1 ) <> 'B'
AND fiscyearper < @s_kmonth-low
AND substring( acdoca~fiscyearper,1,4 ) = @lv_gjahr
AND itab~flag = '2'
AND ( acdoca~racct BETWEEN '5001010000' AND '9999999999' OR acdoca~racct BETWEEN '0000942001' AND '0009943006' )
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~drcrk,acdoca~rfarea
APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.
"本期:不带特殊总账
SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,' ' AS umskz,
acdoca~drcrk,' ' AS kunnr,' ' AS lifnr,'B' AS flag,acdoca~rfarea,
SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
FROM acdoca
INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
AND acdoca~racct = itab~racct
AND acdoca~rwcur = itab~rwcur
AND acdoca~rkcur = itab~rkcur
AND acdoca~rhcur = itab~rhcur
AND acdoca~rfarea = itab~rfarea
WHERE rldnr = '0L'
AND substring( acdoca~belnr,1,1 ) <> 'B'
AND acdoca~fiscyearper >= @s_kmonth-low
AND acdoca~fiscyearper <= @s_kmonth-high
AND itab~flag = '2'
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~drcrk,acdoca~rfarea
APPENDING TABLE @lt_acdoca ##ITAB_KEY_IN_SELECT.
"本年累计:不带特殊总账
SELECT acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,acdoca~rhcur,acdoca~umskz,
acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,'B' AS flag,acdoca~rfarea,
SUM( CASE WHEN drcrk = 'S' THEN wsl ELSE 0 - wsl END ) AS wsl,
SUM( CASE WHEN drcrk = 'S' THEN ksl ELSE 0 - ksl END ) AS ksl,
SUM( CASE WHEN drcrk = 'S' THEN hsl ELSE 0 - hsl END ) AS hsl
FROM acdoca
INNER JOIN @lt_out1100 AS itab ON acdoca~rbukrs = itab~rbukrs
AND acdoca~racct = itab~racct
AND acdoca~rwcur = itab~rwcur
AND acdoca~rkcur = itab~rkcur
AND acdoca~rhcur = itab~rhcur
AND acdoca~rfarea = itab~rfarea
WHERE acdoca~rldnr = '0L'
AND substring( acdoca~belnr,1,1 ) <> 'B'
AND substring( acdoca~fiscyearper,1,4 ) = @lv_gjahr
AND fiscyearper <= @s_kmonth-high
AND itab~flag = '2'
AND aufnr IN @s_aufnr
AND rcntr IN @s_kostl
GROUP BY acdoca~rbukrs,acdoca~racct,acdoca~rwcur,acdoca~rkcur,
acdoca~rhcur,acdoca~drcrk,acdoca~kunnr,acdoca~lifnr,acdoca~umskz,acdoca~rfarea
APPENDING TABLE @lt_acdoca_bnlj ##ITAB_KEY_IN_SELECT.
LOOP AT lt_acdoca ASSIGNING FIELD-SYMBOL(<ls_acdoca>).
IF ( <ls_acdoca>-rwcur = 'JPY' OR <ls_acdoca>-rwcur = 'KRW' ) AND <ls_acdoca>-wsl IS NOT INITIAL.
PERFORM conv_currency USING <ls_acdoca>-rwcur CHANGING <ls_acdoca>-wsl .
ENDIF.
IF ( <ls_acdoca>-rkcur = 'JPY' OR <ls_acdoca>-rkcur = 'KRW' ) AND <ls_acdoca>-ksl IS NOT INITIAL.
PERFORM conv_currency USING <ls_acdoca>-rkcur CHANGING <ls_acdoca>-ksl .
ENDIF.
IF ( <ls_acdoca>-rhcur = 'JPY' OR <ls_acdoca>-rhcur = 'KRW' ) AND <ls_acdoca>-hsl IS NOT INITIAL.
PERFORM conv_currency USING <ls_acdoca>-rhcur CHANGING <ls_acdoca>-hsl .
ENDIF.
ENDLOOP.
LOOP AT lt_acdoca_bnlj ASSIGNING FIELD-SYMBOL(<ls_acdoca_bnlj>).
IF ( <ls_acdoca_bnlj>-rwcur = 'JPY' OR <ls_acdoca_bnlj>-rwcur = 'KRW' ) AND <ls_acdoca_bnlj>-wsl IS NOT INITIAL.
PERFORM conv_currency USING <ls_acdoca_bnlj>-rwcur CHANGING <ls_acdoca_bnlj>-wsl .
ENDIF.
IF ( <ls_acdoca_bnlj>-rkcur = 'JPY' OR <ls_acdoca_bnlj>-rkcur = 'KRW' ) AND <ls_acdoca_bnlj>-ksl IS NOT INITIAL.
PERFORM conv_currency USING <ls_acdoca_bnlj>-rkcur CHANGING <ls_acdoca_bnlj>-ksl .
ENDIF.
IF ( <ls_acdoca_bnlj>-rhcur = 'JPY' OR <ls_acdoca_bnlj>-rhcur = 'KRW' ) AND <ls_acdoca_bnlj>-hsl IS NOT INITIAL.
PERFORM conv_currency USING <ls_acdoca_bnlj>-rhcur CHANGING <ls_acdoca_bnlj>-hsl .
ENDIF.
ENDLOOP.
DATA: ls_out1100 TYPE ty_out1100.
LOOP AT gt_out1100 ASSIGNING FIELD-SYMBOL(<ls_out1100>).
ASSIGN lt_acdoca[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
rwcur = <ls_out1100>-rwcur rkcur = <ls_out1100>-rkcur
rhcur = <ls_out1100>-rhcur umskz = <ls_out1100>-umskz
lifnr = <ls_out1100>-lifnr kunnr = <ls_out1100>-kunnr
flag = 'S' drcrk = 'S' rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca>.
IF sy-subrc = 0.
<ls_out1100>-sqjf_jy = <ls_acdoca>-wsl.
<ls_out1100>-sqjf_bw = <ls_acdoca>-hsl.
<ls_out1100>-sqjf_jt = <ls_acdoca>-ksl.
ENDIF.
ASSIGN lt_acdoca[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
rwcur = <ls_out1100>-rwcur rkcur = <ls_out1100>-rkcur
rhcur = <ls_out1100>-rhcur umskz = <ls_out1100>-umskz
lifnr = <ls_out1100>-lifnr kunnr = <ls_out1100>-kunnr
flag = 'S' drcrk = 'H' rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca>.
IF sy-subrc = 0.
<ls_out1100>-sqdf_jy = <ls_acdoca>-wsl.
<ls_out1100>-sqdf_bw = <ls_acdoca>-hsl.
<ls_out1100>-sqdf_jt = <ls_acdoca>-ksl.
ENDIF.
ASSIGN lt_acdoca[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
rwcur = <ls_out1100>-rwcur rkcur = <ls_out1100>-rkcur
rhcur = <ls_out1100>-rhcur umskz = <ls_out1100>-umskz
lifnr = <ls_out1100>-lifnr kunnr = <ls_out1100>-kunnr
flag = 'B' drcrk = 'S' rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca>.
IF sy-subrc = 0.
<ls_out1100>-bqjf_jy = <ls_acdoca>-wsl.
<ls_out1100>-bqjf_bw = <ls_acdoca>-hsl.
<ls_out1100>-bqjf_jt = <ls_acdoca>-ksl.
ENDIF.
ASSIGN lt_acdoca[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
rwcur = <ls_out1100>-rwcur rkcur = <ls_out1100>-rkcur
rhcur = <ls_out1100>-rhcur umskz = <ls_out1100>-umskz
lifnr = <ls_out1100>-lifnr kunnr = <ls_out1100>-kunnr
flag = 'B' drcrk = 'H' rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca>.
IF sy-subrc = 0.
<ls_out1100>-bqdf_jy = <ls_acdoca>-wsl.
<ls_out1100>-bqdf_bw = <ls_acdoca>-hsl.
<ls_out1100>-bqdf_jt = <ls_acdoca>-ksl.
ENDIF.
ASSIGN lt_acdoca_bnlj[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
rwcur = <ls_out1100>-rwcur rkcur = <ls_out1100>-rkcur
rhcur = <ls_out1100>-rhcur umskz = <ls_out1100>-umskz
lifnr = <ls_out1100>-lifnr kunnr = <ls_out1100>-kunnr
flag = 'B' drcrk = 'S' rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca_bnlj>.
IF sy-subrc = 0.
<ls_out1100>-bnljjf_jy = <ls_acdoca>-wsl.
<ls_out1100>-bnljjf_bw = <ls_acdoca>-hsl.
<ls_out1100>-bnljjf_jt = <ls_acdoca>-ksl.
ENDIF.
ASSIGN lt_acdoca_bnlj[ rbukrs = <ls_out1100>-rbukrs racct = <ls_out1100>-racct
rwcur = <ls_out1100>-rwcur rkcur = <ls_out1100>-rkcur
rhcur = <ls_out1100>-rhcur umskz = <ls_out1100>-umskz
lifnr = <ls_out1100>-lifnr kunnr = <ls_out1100>-kunnr
flag = 'B' drcrk = 'H' rfarea = <ls_out1100>-rfarea ] TO <ls_acdoca_bnlj>.
IF sy-subrc = 0.
<ls_out1100>-bnljdf_jy = <ls_acdoca>-wsl.
<ls_out1100>-bnljdf_bw = <ls_acdoca>-hsl.
<ls_out1100>-bnljdf_jt = <ls_acdoca>-ksl.
ENDIF.
<ls_out1100>-bqfs_jy = <ls_out1100>-bqjf_jy - <ls_out1100>-bqdf_jy.
<ls_out1100>-qmjf_jy = <ls_out1100>-sqjf_jy + <ls_out1100>-bqjf_jy.
<ls_out1100>-qmdf_jy = <ls_out1100>-sqdf_jy + <ls_out1100>-bqdf_jy.
<ls_out1100>-sqfs_jy = <ls_out1100>-sqjf_jy - <ls_out1100>-sqdf_jy.
<ls_out1100>-qmfs_jy = <ls_out1100>-qmjf_jy - <ls_out1100>-qmdf_jy.
<ls_out1100>-bnljfs_jy = <ls_out1100>-bnljjf_jy - <ls_out1100>-bnljdf_jy.
<ls_out1100>-bqfs_bw = <ls_out1100>-bqjf_bw - <ls_out1100>-bqdf_bw.
<ls_out1100>-qmjf_bw = <ls_out1100>-sqjf_bw + <ls_out1100>-bqjf_bw.
<ls_out1100>-qmdf_bw = <ls_out1100>-sqdf_bw + <ls_out1100>-bqdf_bw.
<ls_out1100>-sqfs_bw = <ls_out1100>-sqjf_bw - <ls_out1100>-sqdf_bw.
<ls_out1100>-qmfs_bw = <ls_out1100>-qmjf_bw - <ls_out1100>-qmdf_bw.
<ls_out1100>-bnljfs_bw = <ls_out1100>-bnljjf_bw - <ls_out1100>-bnljdf_bw.
<ls_out1100>-bqfs_jt = <ls_out1100>-bqjf_jt - <ls_out1100>-bqdf_jt.
<ls_out1100>-qmjf_jt = <ls_out1100>-sqjf_jt + <ls_out1100>-bqjf_jt.
<ls_out1100>-qmdf_jt = <ls_out1100>-sqdf_jt + <ls_out1100>-bqdf_jt.
<ls_out1100>-sqfs_jt = <ls_out1100>-sqjf_jt - <ls_out1100>-sqdf_jt.
<ls_out1100>-qmfs_jt = <ls_out1100>-qmjf_jt - <ls_out1100>-qmdf_jt.
<ls_out1100>-bnljfs_jt = <ls_out1100>-bnljjf_jt - <ls_out1100>-bnljdf_jt.
"判断金额是否全部为0
ls_out1100 = CORRESPONDING #( <ls_out1100> EXCEPT rbukrs racct txt20 umskz kunnr lifnr
name1 rfarea fkbtx rwcur rhcur rkcur flag bqqj ).
IF ls_out1100 IS INITIAL.
<ls_out1100>-rbukrs = ''.
<ls_out1100>-racct = ''.
ENDIF.
IF s_kmonth-high IS INITIAL OR s_kmonth-low = s_kmonth-high.
<ls_out1100>-bqqj = |{ s_kmonth-low+0(4) }{ s_kmonth-low+5(2) }|.
ELSE.
<ls_out1100>-bqqj = |{ s_kmonth-low+0(4) }{ s_kmonth-low+5(2) }-{ s_kmonth-high+0(4) }{ s_kmonth-high+5(2) }|.
ENDIF.
IF <ls_out1100>-lifnr IS NOT INITIAL.
<ls_out1100>-partner = <ls_out1100>-lifnr.
ENDIF.
IF <ls_out1100>-kunnr IS NOT INITIAL.
<ls_out1100>-partner = <ls_out1100>-kunnr.
ENDIF.
ENDLOOP.
DELETE gt_out1100 WHERE rbukrs IS INITIAL AND racct IS INITIAL.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form download_data_2local
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM download_data_2local .
DATA: lv_cellvalue TYPE string,
lv_row TYPE sy-tabix VALUE 1,
lv_col TYPE sy-tabix,
lv_letter TYPE char50,
lv_file TYPE string,
lv_xstring TYPE xstring,
lv_name TYPE text80.
lv_name = |科目余额表|.
lv_file = zcl_tools=>load_path_2parameter_save( iv_filename = |{ lv_name }-{ sy-datum }.xlsx| ).
IF lv_file IS INITIAL .
RETURN.
ENDIF.
TRY.
DATA(lo_excel) = NEW zcl_excel( ).
DATA(lo_worksheet) = lo_excel->get_active_worksheet( ).
IF s_kmonth-low = s_kmonth-high.
lo_worksheet->set_title( |{ lv_name }-{ s_kmonth-low+0(4) }{ s_kmonth-low+5(2) }| ).
ELSE.
lo_worksheet->set_title( |{ lv_name }-{ s_kmonth-low+0(4) }{ s_kmonth-low+5(2) }到{ s_kmonth-high+0(4) }{ s_kmonth-high+5(2) }| ).
ENDIF.
DATA(lo_style) = lo_excel->add_new_style( ).
DATA(lo_border) = NEW zcl_excel_style_border( ).
lo_style->font->bold = abap_true.
lo_style->font->name = zcl_excel_style_font=>c_name_arial.
lo_style->font->size = 11.
lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center.
lo_style->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center.
lo_border->border_color-rgb = zcl_excel_style_color=>c_black.
lo_border->border_style = zcl_excel_style_borders=>c_diagonal_both.
lo_style->borders->allborders = lo_border.
DATA(lv_style_guid) = lo_style->get_guid( ).
LOOP AT go_alv1100->mt_fcat ASSIGNING FIELD-SYMBOL(<ls_fcat>).
lv_col = lv_col + 1.
lo_worksheet->set_cell( ip_row = 1
ip_column = lv_col
ip_value = <ls_fcat>-reptext
ip_abap_type = cl_abap_typedescr=>typekind_string
ip_style = lv_style_guid ).
ENDLOOP.
CLEAR: lv_style_guid.
lo_style = lo_excel->add_new_style( ).
lo_style->font->bold = abap_false.
lo_style->font->name = zcl_excel_style_font=>c_name_arial.
lo_style->font->size = 11.
lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_right.
lo_style->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center.
lo_border->border_color-rgb = zcl_excel_style_color=>c_black.
lo_border->border_style = zcl_excel_style_borders=>c_diagonal_both.
lo_style->borders->allborders = lo_border.
lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_number_comma_sep1.
lv_style_guid = lo_style->get_guid( ).
lo_style = lo_excel->add_new_style( ).
lo_style->font->bold = abap_false.
lo_style->font->name = zcl_excel_style_font=>c_name_arial.
lo_style->font->size = 11.
lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_left.
lo_style->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center.
lo_border->border_color-rgb = zcl_excel_style_color=>c_black.
lo_border->border_style = zcl_excel_style_borders=>c_diagonal_both.
lo_style->borders->allborders = lo_border.
DATA(lv_style_guid_item_left) = lo_style->get_guid( ).
lo_style = lo_excel->add_new_style( ).
lo_style->font->bold = abap_false.
lo_style->font->name = zcl_excel_style_font=>c_name_arial.
lo_style->font->size = 11.
lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center.
lo_style->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center.
lo_border->border_color-rgb = zcl_excel_style_color=>c_black.
lo_border->border_style = zcl_excel_style_borders=>c_diagonal_both.
lo_style->borders->allborders = lo_border.
DATA(lv_style_guid_item_center) = lo_style->get_guid( ).
LOOP AT gt_out1100 ASSIGNING FIELD-SYMBOL(<ls_item>).
lv_row = lv_row + 1.
CLEAR: lv_cellvalue,lv_col.
LOOP AT go_alv1100->mt_fcat ASSIGNING <ls_fcat>.
CLEAR: lv_cellvalue.
lv_col = lv_col + 1.
ASSIGN COMPONENT <ls_fcat>-fieldname OF STRUCTURE <ls_item> TO FIELD-SYMBOL(<lv_field>).
IF sy-subrc <> 0 OR <lv_field> IS INITIAL.
CONTINUE.
ENDIF.
lv_cellvalue = <lv_field>.
IF <ls_fcat>-fieldname <> 'NAME1' AND <ls_fcat>-fieldname <> 'GTXT20' AND <ls_fcat>-fieldname <> 'TXT20'.
CONDENSE lv_cellvalue NO-GAPS.
ENDIF.
IF <ls_fcat>-fieldname = 'KUNNR' OR <ls_fcat>-fieldname = 'LIFNR' OR <ls_fcat>-fieldname = 'BILKT'.
lv_cellvalue = |{ lv_cellvalue ALPHA = OUT }|.
ENDIF.
IF <ls_fcat>-inttype = 'P' AND <lv_field> < 0.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = lv_cellvalue.
ENDIF.
CASE <ls_fcat>-datatype.
WHEN 'CURR'.
lo_worksheet->set_cell( ip_row = lv_row
ip_column = lv_col
ip_value = lv_cellvalue
"ip_formula = |TEXT({ lv_cellvalue },"#,###")|
ip_abap_type = cl_abap_typedescr=>typekind_float
ip_style = lv_style_guid ).
WHEN 'CUKY'.
lo_worksheet->set_cell( ip_row = lv_row
ip_column = lv_col
ip_value = lv_cellvalue
ip_abap_type = cl_abap_typedescr=>typekind_string
ip_style = lv_style_guid_item_center ).
WHEN OTHERS.
lo_worksheet->set_cell( ip_row = lv_row
ip_column = lv_col
ip_value = lv_cellvalue
ip_abap_type = cl_abap_typedescr=>typekind_string
ip_style = lv_style_guid_item_left ).
ENDCASE.
lo_worksheet->get_column( lv_col )->set_auto_size( ip_auto_size = abap_true ).
ENDLOOP.
ENDLOOP.
lo_worksheet->calculate_column_widths( ).
lo_worksheet->freeze_panes( ip_num_rows = 1 ).
"导出文件
DATA(lo_excel_writer) = NEW zcl_excel_writer_2007( ).
DATA(lv_filecontent) = lo_excel_writer->zif_excel_writer~write_file( lo_excel ).
cl_scp_change_db=>xstr_to_xtab( EXPORTING im_xstring = lv_filecontent
IMPORTING ex_xtab = DATA(lt_filecontenttab) ).
cl_gui_frontend_services=>gui_download(
EXPORTING
bin_filesize = xstrlen( lv_filecontent ) "文件内容大小
filename = lv_file
filetype = 'BIN'
confirm_overwrite = abap_true
CHANGING
data_tab = lt_filecontenttab ).
CATCH zcx_excel INTO DATA(lo_excel_e).
MESSAGE lo_excel_e->get_text( ) TYPE 'I'. RETURN.
ENDTRY.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form conv_currency
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> <FS_ACDOCA>_RWCUR
*& <-- <FS_ACDOCA>_WSL
*&---------------------------------------------------------------------*
FORM conv_currency USING pv_cur TYPE waers CHANGING cv_wsl.
DATA lv_amount TYPE bapicurx-bapicurx.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERN_9'
EXPORTING
currency = pv_cur
amount_internal = CONV bapicurext( cv_wsl )
IMPORTING
amount_external = lv_amount.
cv_wsl = lv_amount.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form call_ZFIR005
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM call_zfir005 USING is_data TYPE ty_out1100.
DATA: lt_sel TYPE TABLE OF rsparams.
IF s_bukrs-low IS NOT INITIAL.
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_BUKRS' sign = 'I' option = 'EQ' low = s_bukrs-low ) ).
ENDIF.
IF is_data-racct IS NOT INITIAL.
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_HKONT' sign = 'I' option = 'EQ' low = is_data-racct ) ).
ENDIF.
IF p_ck_pa = abap_on AND is_data-lifnr IS NOT INITIAL.
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_LIFNR' sign = 'I' option = 'EQ' low = is_data-lifnr ) ).
ENDIF.
IF p_ck_pa = abap_on AND is_data-kunnr IS NOT INITIAL.
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_KUNNR' sign = 'I' option = 'EQ' low = is_data-kunnr ) ).
ENDIF.
IF p_ck_pa = abap_on.
lt_sel = VALUE #( BASE lt_sel ( selname = 'P_DISBAD' sign = 'I' option = 'EQ' low = 'X' ) ).
ENDIF.
lt_sel = VALUE #( BASE lt_sel ( selname = 'P_SUBMIT' sign = 'I' option = 'EQ' low = 'X' ) ).
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_WAERS' sign = 'I' option = 'EQ' low = is_data-rwcur ) ).
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_GJAHR' sign = 'I' option = 'EQ' low = is_data-bqqj+0(4) ) ).
SEARCH is_data-bqqj FOR '-'.
IF sy-subrc <> 0.
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_BUDAT' sign = 'I' option = 'BT'
low = CONV datum( |{ is_data-bqqj+0(6) }01| )
high = CONV datum( |{ zcl_tools=>get_lastday_of_month( CONV kmonth( is_data-bqqj+0(6) ) ) }| ) ) ).
ELSE.
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_BUDAT' sign = 'I' option = 'BT'
low = CONV datum( |{ is_data-bqqj+0(6) }01| )
high = CONV datum( |{ zcl_tools=>get_lastday_of_month( CONV kmonth( is_data-bqqj+7(6) ) ) }| ) ) ).
ENDIF.
LOOP AT s_kostl.
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_KOSTL' sign = s_kostl-sign option = s_kostl-option low = s_kostl-low high = s_kostl-high ) ).
ENDLOOP.
LOOP AT s_aufnr.
lt_sel = VALUE #( BASE lt_sel ( selname = 'S_AUFNR' sign = s_aufnr-sign option = s_aufnr-option low = s_aufnr-low high = s_aufnr-high ) ).
ENDLOOP.
SUBMIT zfir005 WITH SELECTION-TABLE lt_sel AND RETURN.
ENDFORM.
科目余额表
于 2024-01-17 08:57:31 首次发布