ALV报表开发

根据结构自动创建field catlog

  • alv字段列表。
    DATA: GT_FIELDCAT TYPE LVC_T_FCAT.
    DATA: GS_FIELDCAT TYPE LVC_S_FCAT.

CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’
EXPORTING

  • I_BUFFER_ACTIVE        =
    
    I_STRUCTURE_NAME = ‘ZSDS_UI_REPORTS_ALV’ "alv 结构名
  • I_CLIENT_NEVER_DISPLAY = 'X'
    
  • I_BYPASSING_BUFFER     =
    
  • I_INTERNAL_TABNAME     =
    
    CHANGING
    CT_FIELDCAT = GT_FIELDCAT
    EXCEPTIONS
    INCONSISTENT_INTERFACE = 1
    PROGRAM_ERROR = 2
    OTHERS = 3.
    IF SY-SUBRC <> 0.
  • Implement suitable error handling here
    ENDIF.

ALV 单元的编辑 ,带出其他值
REPORT zasustesthjh001.

TABLES : t001 , knb1 .

DATA : BEGIN OF ls_data ,
kunnr TYPE knb1 -kunnr ,
name1 TYPE kna1 -name1 ,
bukrs TYPE t001 -bukrs ,
butxt TYPE t001 -butxt ,
END OF ls_data .

DATA: lt_data LIKE TABLE OF ls_data WITH HEADER LINE .

INCLUDE zpublic_alv .

START-OF-SELECTION .

SELECT bukrs kunnr FROM knb1 INTO CORRESPONDING FIELDS OF TABLE lt_data .

DEFINE alv_edit_dic.
gt_field-fieldname = &1.
gt_field-scrtext_l = &2.
gt_field-outputlen = &3.
gt_field-edit = ‘X’.
gt_field-ref_field = &4.
gt_field-ref_table = &5.
append gt_field.
clear gt_field.
END-OF-DEFINITION.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
  i_list_type     = 0
IMPORTING
  et_events       = gt_event
EXCEPTIONS
  list_type_wrong = 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.

gs_event-NAME = ‘CALLER_EXIT’.
gs_event-FORM = ‘CALLER_EXIT’.
APPEND gs_event TO gt_event.
gs_event-name = ‘DATA_CHANGED’.
gs_event-form = ‘FRM_DATA_CHANGED’.
APPEND gs_event TO gt_event.

alv_edit_dic ‘KUNNR’ ‘客户编号’ 10 ‘KUNNR’ ‘KNA1’ .
alv1 name1 客户名称 .
alv_edit_dic ‘BUKRS’ ‘公司代码’ 4 ‘BUKRS’ ‘T001’ .
alv1 butxt 公司代码名称 .

gs_layout- cwidth_opt = ‘X’ ."自动优化列宽
gs_layout-zebra = ‘X’. "显示

call function ‘REUSE_ALV_GRID_DISPLAY_LVC’
exporting
i_callback_program = sy -repid
it_fieldcat_lvc = gt_field[]
is_layout_lvc = gs_layout
i_grid_title = sy -title
i_callback_pf_status_set = ‘’
i_callback_user_command = ‘USERCOMMAND’
i_save = ‘A’

  •  it_sort                  = gt_sort[]
    it_sort_lvc              = gt_sort_lvc
    it_events                = gt_event          "传入方法
    
    tables
    t_outtab = lt_data

endform .

FORM frm_data_changed USING p_changed TYPE REF TO
cl_alv_changed_data_protocol .

DATA : lvc_s_stbl TYPE lvc_s_stbl .

DATA : tem_grid TYPE REF TO cl_gui_alv_grid…
DATA : ls_mod TYPE lvc_s_modi, lv_kunnr TYPE char10 .
DATA : lbutxt TYPE char40, lname1 TYPE char40 .

FIELD-SYMBOLS .

CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = tem_grid.

  • 設定 ENTER 事件
    CALL METHOD tem_grid->register_edit_event
    EXPORTING
    i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
    error = 1
    OTHERS = 2.

    LOOP AT p_changed->mt_mod_cells INTO ls_mod .
    *根据修改值修改其他值 eg:
    IF ls_mod-fieldname = ‘Z_JHBL’ OR ls_mod-fieldname = ‘Z_HL’ OR
    ls_mod-fieldname CS ‘Z_VOL’ OR ls_mod-fieldname CS ‘Z_DJ’ .

  •  CALL METHOD p_changed->modify_cell
    
  •    EXPORTING
    
  •      i_row_id    = ls_mod-row_id
    
  •      i_fieldname = 'NAME1'
    
  •      i_value     = lname1.
    
    READ TABLE gt_data ASSIGNING FIELD-SYMBOL(<fs_data>) INDEX ls_mod-row_id  .
    IF sy-subrc = 0.
      ASSIGN COMPONENT  ls_mod-fieldname OF STRUCTURE <fs_data> TO <fs> .
      <fs>  = ls_mod-value .
      PERFORM frm_data_calc USING  <fs_data> .
    

*刷新内表
lvc_s_stbl-row = ‘X’ .
lvc_s_stbl-col = ‘X’ .

    CALL METHOD tem_grid->refresh_table_display EXPORTING is_stable = lvc_s_stbl .

  ENDIF.

ENDIF.

ENDLOOP.

ENDFORM.

*设置下拉列表,使Grid和内表能链接上
---------------------------------------------------------------------
FORM caller_exit USING ls_data TYPE slis_data_caller_exit .

DATA : l_ref_alv TYPE REF TO cl_gui_alv_grid…

CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = l_ref_alv.

  • CALL METHOD ref_grid->check_changed_data.

  • 设置enter事件
    CALL METHOD l_ref_alv->register_edit_event
    EXPORTING
    i_event_id = cl_gui_alv_grid=>mc_evt_enter
    EXCEPTIONS
    error = 1
    OTHERS = 2.

    IF sy-batch IS INITIAL.
    CALL METHOD l_ref_alv->register_edit_event
    EXPORTING

  •   i_event_id = cl_gui_alv_grid=>mc_evt_enter. "回车时触发
      i_event_id = cl_gui_alv_grid=>mc_evt_modified. "单元格更改触发
    

    ENDIF .

  • CREATE OBJECT GT_EVENT_RECEIVER.

  • SET HANDLER GT_EVENT_RECEIVER->HANDLE_MODIFY FOR L_REF_ALV.

ENDFORM.

==========================================================
ALV F4 帮助

TYPE-POOLS:slis.

CLASS lcl_event_receiver DEFINITION DEFERRED.
DATA: gt_fcat TYPE lvc_t_fcat,
gs_fcat TYPE lvc_s_fcat,
gt_f4 TYPE lvc_t_f4,
gs_f4 TYPE lvc_s_f4,
gs_event TYPE slis_alv_event,
gt_event TYPE slis_t_event,
gs_layout TYPE lvc_s_layo,
gs_glay TYPE lvc_s_glay.

DATA: event_receiver TYPE REF TO lcl_event_receiver,
go_grid TYPE REF TO cl_gui_alv_grid.

DATA: BEGIN OF gs_data ,
pernr TYPE persno,
nachn TYPE nachn,
gesch TYPE gesch,
END OF gs_data,
gt_data LIKE TABLE OF gs_data.

DATA: BEGIN OF gs_f4value,
gesch TYPE gesch,
ztext TYPE text,
END OF gs_f4value,
gt_f4value LIKE TABLE OF gs_f4value.

————————————————————————————————————————

  • CLASS LCL_EVENT_RECEIVER DEFINITION
    ———————————————————————————————————————-
    CLASS lcl_event_receiver DEFINITION.
    PUBLIC SECTION.
    METHODS:
    handle_f4 FOR EVENT onf4 OF cl_gui_alv_grid
    IMPORTING e_fieldname
    e_fieldvalue
    es_row_no
    er_event_data
    et_bad_cells
    e_display.
    ENDCLASS.
    ———————————————————————————————————————-
  • CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
    ———————————————————————————————————————-
    CLASS lcl_event_receiver IMPLEMENTATION.
    METHOD handle_f4.
    PERFORM f_f4_help USING e_fieldname
    es_row_no.
    er_event_data->m_event_handled = ‘x’ .
    PERFORM refresh_table_alv.
    ENDMETHOD.
    ENDCLASS.

START-OF-SELECTION.
PERFORM f_get_data.
PERFORM f_show_data.

FORM f_get_data .
SELECT pernr nachn FROM pa0002 INTO CORRESPONDING FIELDS OF TABLE gt_data
WHERE begda LE sy-datum AND endda GE sy-datum.
CLEAR gs_f4value.
gs_f4value-gesch = .
gs_f4value-ztext = ‘男’.
APPEND gs_f4value TO gt_f4value.
CLEAR gs_f4value.
gs_f4value-gesch = .
gs_f4value-ztext = ‘女’.
APPEND gs_f4value TO gt_f4value.
ENDFORM.

FORM f_show_data .
DEFINE %%fcat.
CLEAR gs_fcat.
gs_fcat-fieldname = &.
gs_fcat-scrtext_l = &.
IF & = ‘GESCH’.
gs_fcat-edit = ‘X’.
gs_fcat-f4availabl = ‘X’.
ENDIF.
APPEND gs_fcat TO gt_fcat.
END-OF-DEFINITION.
%%fcat: ‘PERNR’ ‘人员编号’,
‘NACHN’ ‘姓名’,
‘GESCH’ ‘性别’.
gs_event-name = ‘CALLER_EXIT’.
gs_event-form = ‘F_CALLER_EXIT’.
APPEND gs_event TO gt_event.
gs_glay-edt_cll_cb = ‘X’.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = ‘PF_STATUS_SET’
it_fieldcat_lvc = gt_fcat
it_events = gt_event
i_grid_settings = gs_glay
TABLES
t_outtab = gt_data.
ENDFORM.

FORM f_caller_exit USING e_grid TYPE slis_data_caller_exit.
gs_f4-fieldname = ‘GESCH’.
gs_f4-register = ‘X’.

  • gs_f4-getbefore = ‘X’.
  • gs_f4-chngeafter = ‘X’.
    INSERT gs_f4 INTO TABLE gt_f4.
    CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
    IMPORTING
    e_grid = go_grid.
    CREATE OBJECT event_receiver.
    SET HANDLER event_receiver->handle_f4 FOR go_grid.
    CALL METHOD go_grid->register_f4_for_fields
    EXPORTING
    it_f4 = gt_f4[].
    ENDFORM.

FORM f_f4_help USING e_fieldname TYPE lvc_fname es_row_no TYPE lvc_s_roid.
DATA: lt_ddshretval TYPE STANDARD TABLE OF ddshretval,
ls_ddshretval TYPE ddshretval.

CHECK e_fieldname = ‘GESCH’.
REFRESH lt_ddshretval.

CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’
EXPORTING
retfield = ‘GESCH’ "
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = ‘GESCH’
value_org = ‘S’
callback_program = sy-repid
TABLES
value_tab = gt_f4value
return_tab = lt_ddshretval
EXCEPTIONS
parameter_error =
no_values_found =
OTHERS = .

IF sy-subrc = AND lt_ddshretval IS NOT INITIAL .
CLEAR ls_ddshretval.
READ TABLE lt_ddshretval INTO ls_ddshretval INDEX .
IF ls_ddshretval-fieldval IS NOT INITIAL.
CLEAR gs_data.
READ TABLE gt_data INTO gs_data INDEX es_row_no-row_id.
gs_data-gesch = ls_ddshretval-fieldval.
MODIFY gt_data FROM gs_data INDEX es_row_no-row_id
TRANSPORTING gesch.
ENDIF.
ENDIF.
ENDFORM.

FORM refresh_table_alv .
DATA: ls_stbl TYPE lvc_s_stbl.
ls_stbl-row = ‘X’."
ls_stbl-col = ‘X’.
CALL METHOD go_grid->refresh_table_display
EXPORTING
is_stable = ls_stbl.
ENDFORM.

FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS ‘STATUS_ALV’.
ENDFORM.

ALV 刷新

** PERFORM FRM_REFRESH_ALV(ZCO41N) USING REF_GRID GW_LAYOUT.**

FORM frm_refresh_alv USING p_grid TYPE REF TO cl_gui_alv_grid
pw_layout TYPE lvc_s_layo.

DATA: ls_stable TYPE lvc_s_stbl.
ls_stable-row = ‘X’.
ls_stable-col = ‘X’.

CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’
IMPORTING
e_grid = p_grid.

IF p_grid IS INITIAL.
EXIT.
ENDIF.

p_grid->get_frontend_layout( IMPORTING es_layout = pw_layout ).
pw_layout-cwidth_opt = ‘X’.
p_grid->set_frontend_layout( is_layout = pw_layout ).

CALL METHOD p_grid->refresh_table_display
EXPORTING
is_stable = ls_stable
EXCEPTIONS
finished = 1
OTHERS = 2.

ENDFORM.

**ALV 下拉处理 **

***Begin 下拉值的设置
GT_DDVAL TYPE LVC_T_DROP,

CLEAR GS_DDVAL.
GS_DDVAL-HANDLE = 2 .
GS_DDVAL-VALUE = ‘AOU’.
APPEND GS_DDVAL TO GT_DDVAL.

CLEAR GS_DDVAL.
GS_DDVAL-HANDLE = 2 .
GS_DDVAL-VALUE = ‘DEMO’.
APPEND GS_DDVAL TO GT_DDVAL.

CLEAR GS_DDVAL.
GS_DDVAL-HANDLE = 2 .
GS_DDVAL-VALUE = '普通 '.
APPEND GS_DDVAL TO GT_DDVAL.

CALL METHOD L_GRID->SET_DROP_DOWN_TABLE
EXPORTING
IT_DROP_DOWN = GT_DDVAL.

WA_FIELD-DRDN_ALIAS = ‘’.
WA_FIELD-DRDN_HNDL = handle_id .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值