*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_display_data .
IF gt_alv[] is INITIAL.
MESSAGE s001(00) WITH '没有数据可以显示' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
*---------绑定容器
CREATE OBJECT go_container
EXPORTING
container_name = 'CON_ALV'.
CREATE OBJECT go_grid
EXPORTING
i_parent = go_container.
* fieldcat编辑
* PERFORM frm_fieldcat_edit.
PERFORM frm_build_fcat TABLES gt_alv USING gt_fieldcat.
*---------显示alv
gs_layout-stylefname = 'STYLE'.
gs_layout-sel_mode = 'A'.
gs_layout-cwidth_opt = 'X'.
gs_variant-report = sy-cprog.
go_grid->set_table_for_first_display(
EXPORTING
i_save = 'X'
is_layout = gs_layout
is_variant = gs_variant
CHANGING
it_outtab = gt_alv
it_fieldcatalog = gt_fieldcat ).
WRITE lines( gt_alv ) TO gv_lines LEFT-JUSTIFIED NO-SIGN.
gv_title = '收入明细统计报表'.
CALL SCREEN 9000.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_LOG text
* -->P_LT_FCAT text
*----------------------------------------------------------------------*
FORM frm_build_fcat TABLES it_dat TYPE table USING et_dat TYPE lvc_t_fcat.
DATA: ls_desc TYPE x030l,
lv_name TYPE dd02l-tabname,
lv_msgt TYPE string,
ls_fcat TYPE LINE OF lvc_t_fcat,
lr_desc TYPE REF TO cl_abap_structdescr,
lt_flds TYPE cl_abap_structdescr=>included_view,
ls_flds TYPE LINE OF cl_abap_structdescr=>included_view.
CHECK it_dat[] IS NOT INITIAL.
TRY.
lr_desc ?= cl_abap_structdescr=>describe_by_data( it_dat ).
CATCH cx_root INTO DATA(lr_expt).
lv_msgt = lr_expt->get_text( ).
RAISE no_field_catalog.
ENDTRY.
IF lr_desc->is_ddic_type( ) IS NOT INITIAL.
lv_name = lr_desc->get_relative_name( ).
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_buffer_active = space
i_structure_name = lv_name
i_bypassing_buffer = 'X'
CHANGING
ct_fieldcat = et_dat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
FREE et_dat. RAISE no_field_catalog.
ENDIF.
RETURN.
ENDIF.
lt_flds = lr_desc->get_included_view( ).
LOOP AT lt_flds INTO ls_flds.
CLEAR: ls_fcat,ls_desc.
ls_fcat-col_pos = sy-tabix.
ls_fcat-fieldname = ls_flds-name.
IF ls_flds-type->is_ddic_type( ) IS NOT INITIAL.
ls_desc = ls_flds-type->get_ddic_header( ).
ls_fcat-rollname = ls_desc-tabname.
ELSE.
ls_fcat-inttype = ls_flds-type->type_kind.
ls_fcat-intlen = ls_flds-type->length.
ls_fcat-decimals = ls_flds-type->decimals.
ENDIF.
APPEND ls_fcat TO et_dat.
CLEAR ls_flds.
ENDLOOP.
LOOP AT et_dat ASSIGNING FIELD-SYMBOL(<fs_dat>).
IF <fs_dat>-fieldname = 'DATUM'.
<fs_dat>-coltext = '签收日期'.
ENDIF.
IF <fs_dat>-fieldname = 'DATUM2'.
<fs_dat>-coltext = '付款签收日期'.
ENDIF.
IF <fs_dat>-fieldname = 'SKJLID'.
<fs_dat>-outputlen = 36.
ENDIF.
IF <fs_dat>-fieldname = 'ID'.
<fs_dat>-outputlen = 36.
ENDIF.
ENDLOOP.
ENDFORM.