此博客为原创博客,都是个人工作经历所得,转载请注明出处

动态显示报表

 

*----------------------------------------------------------------------*
* Program ID/Name : YCX0002
* Author's name   : 
* Program title   : HCP系统工资数据底表数据查询
* Project Name    : S4/HANA
* Version         :
* Date written    : 
* Last update     :
* Function Spec ID: LSTZ_FI_DEV_006
*----------------------------------------------------------------------*
REPORT YCX0002 MESSAGE-ID ztz_001.

TABLES: zfit_tz01, "表1工资接口数据表(计提与实际)
        zfit_tz02, "表2社保接口数据表
        zfit_tz03. "表3年终奖接口数据表


*TYPES: BEGIN OF ty_fi01.
*    INCLUDE STRUCTURE zfit_tz01.
*TYPES: sel TYPE c,
*       END OF ty_fi01.
*DATA:gt_fi01 TYPE TABLE OF ty_fi01.
*
*TYPES: BEGIN OF ty_fi02.
*    INCLUDE STRUCTURE zfit_tz02.
*TYPES: sel TYPE c,
*       END OF ty_fi02.
*DATA:gt_fi02 TYPE TABLE OF ty_fi02.
*
*TYPES: BEGIN OF ty_fi03.
*    INCLUDE STRUCTURE zfit_tz03.
*TYPES: sel TYPE c,
*       END OF ty_fi03.
*DATA:gt_fi03 TYPE TABLE OF ty_fi03.

TYPES: ty_field TYPE TABLE OF string.
DATA: gt_flds  TYPE ty_field,
      gt_from  TYPE ty_field,
      gt_where TYPE ty_field.
FIELD-SYMBOLS <fs_fld> TYPE string.

*dynamic table
DATA: gt_dyn_table TYPE REF TO data,
      gs_dyn_line  TYPE REF TO data.
FIELD-SYMBOLS:<fs_dyn_table> TYPE STANDARD TABLE,
              <fs_dyn_wa>,
              <fs_dyn_field>.
FIELD-SYMBOLS:<fs_fieldcate> TYPE lvc_s_fcat.
DATA: gt_fieldcat TYPE lvc_t_fcat.
DATA: gv_tabname   LIKE    dd02l-tabname.

*----------------------------------------------------------------------*
* Micro
*----------------------------------------------------------------------*
"查询字段
DEFINE field.
  APPEND INITIAL LINE TO gt_flds ASSIGNING <fs_fld>.
  <fs_fld> = &1.
END-OF-DEFINITION.
DEFINE from.
  APPEND INITIAL LINE TO gt_from ASSIGNING <fs_fld>.
  <fs_fld> = &1.
END-OF-DEFINITION.
DEFINE whe.
  APPEND INITIAL LINE TO gt_where ASSIGNING <fs_fld>.
  <fs_fld> = &1.
END-OF-DEFINITION.

DATA: gs_kaps LIKE zcov_kaps,
      ok_code TYPE sy-ucomm.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t01.

SELECT-OPTIONS: s_bno    FOR zfit_tz01-batchno ,
                s_psnno  FOR zfit_tz01-psn_dept_no ,
                s_job    FOR zfit_tz01-jobcategory,
                s_rvers1 FOR zfit_tz01-reverse1.

PARAMETERS: rb_01 RADIOBUTTON GROUP g1 USER-COMMAND rb DEFAULT 'X',
            rb_02 RADIOBUTTON GROUP g1,
            rb_03 RADIOBUTTON GROUP g1.

SELECTION-SCREEN END OF BLOCK b1.


START-OF-SELECTION.
  PERFORM frm_get_data.

END-OF-SELECTION.
  PERFORM frm_display.

*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_data .

  CLEAR: gv_tabname.
  CASE abap_true.
    WHEN rb_01.
      gv_tabname = 'ZFIT_TZ01'.
      from: 'ZFIT_TZ01'.
      whe: 'batchno         IN @s_bno',
           'AND psn_dept_no IN @s_psnno',
           'AND jobcategory IN @s_job',
           'AND reverse1    IN @s_rvers1'.

    WHEN rb_02.
      gv_tabname = 'ZFIT_TZ02'.
      from: 'ZFIT_TZ02'.
      whe: 'batchno         IN @s_bno',
           'AND psn_dept_no IN @s_psnno',
           'AND jobcategory IN @s_job'.
    WHEN rb_03.
      gv_tabname = 'ZFIT_TZ03'.
      from: 'ZFIT_TZ03'.
      whe: 'batchno         IN @s_bno',
           'AND psn_dept_no IN @s_psnno',
           'AND jobcategory IN @s_job'.
    WHEN OTHERS.
  ENDCASE.

  PERFORM frm_create_table.
  PERFORM frm_get_fi01.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_display .

  PERFORM frm_get_alv_fieldcat CHANGING gt_fieldcat.
*  ls_gridset-edt_cll_cb = 'X'."编辑回调

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
*     i_callback_pf_status_set = 'FRM_ALV_PF_STATUS_SET'
*     i_callback_user_command  = 'FRM_ALV_USER_COMMAND'
*     i_grid_settings    = ls_gridset
      is_layout_lvc      = VALUE lvc_s_layo( zebra = abap_true cwidth_opt = abap_true ) "box_fname = 'SEL'
      it_fieldcat_lvc    = gt_fieldcat
      i_default          = 'X'
      i_save             = 'A'
      is_variant         = VALUE disvariant( report = sy-repid )
*     it_events          = gt_event
    TABLES
      t_outtab           = <fs_dyn_table>
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_FI01
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_fi01 .

  SELECT *
    FROM (gv_tabname)
   WHERE (gt_where)
    INTO CORRESPONDING FIELDS OF TABLE @<fs_dyn_table>.
  IF sy-subrc NE 0.
    MESSAGE s000 DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
  ELSE.
    DATA(lv_line) = lines( <fs_dyn_table> ).
    MESSAGE s003 WITH lv_line.
  ENDIF.


ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_ALV_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      <-- LT_FIELDCAT
*&---------------------------------------------------------------------*
FORM frm_get_alv_fieldcat  CHANGING ct_fieldcat TYPE lvc_t_fcat.

  LOOP AT ct_fieldcat INTO DATA(ls_fieldcat).
    CASE ls_fieldcat-fieldname.
      WHEN 'PSP001'
        OR 'PSP002'
        OR 'PSP003'
        OR 'PSP004'
        OR 'PSP005'
        OR 'PSP006'
        OR 'PSP007'
        OR 'PSP008'
        OR 'PSP009'
        OR 'PSP010'
        OR 'PSP011'
        OR 'PSP012'
        OR 'PSP013'
        OR 'PSP014'
        OR 'PSP015'
        OR 'PSP016'.
        ls_fieldcat-edit = 'X'.
        ls_fieldcat-checkbox = 'X'.
      WHEN OTHERS.
    ENDCASE.
    MODIFY ct_fieldcat FROM ls_fieldcat.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_TABLE
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_create_table .
  DATA: lv_copos TYPE i.
  DATA: lv_from TYPE numc2.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = gv_tabname
      i_client_never_display = 'X'
    CHANGING
      ct_fieldcat            = gt_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
*    RAISE fcat_error.
  ENDIF.
  SORT gt_fieldcat BY col_pos.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = gt_fieldcat
    IMPORTING
      ep_table        = gt_dyn_table.

  ASSIGN  gt_dyn_table->* TO <fs_dyn_table>.
  IF sy-subrc EQ 0.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_01_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_get_01_fieldcat .

ENDFORM.

 

posted @ 2021-05-15 13:15  Rainystuday  阅读(72)  评论(0编辑  收藏  举报