应用场景:录入手工凭证行项目中,对利润中心等字段可以下拉框选择
1. alv绑定内表type中定义字段
DD_HANDLE TYPE INT4, " 下拉菜单
2. alv fieldcat中对需要的field设置下拉
wa_fieldcat-drdn_field = 'DD_HANDLE'.
3. oo alv creat_event for drop_down_table
FORM frm_creat_event_exits USING l_ref_alv TYPE REF TO cl_gui_alv_grid.
CALL METHOD l_ref_alv->set_drop_down_table
EXPORTING
it_drop_down = gt_ddval.
ENDFORM.
METHOD DISP_ALV7. " 凭证行项目数据 --
DATA: LV_IPOS TYPE I,
WA_LAYT TYPE LVC_S_LAYO,
WA_FCAT TYPE LVC_S_FCAT,
LT_FCAT TYPE LVC_T_FCAT,
WA_EXPT TYPE UI_FUNC,
LT_EXPT TYPE UI_FUNCTIONS.
DATA: LR_EVNT TYPE REF TO LCL_ALVEVNT.
CLEAR WA_LAYT.
WA_LAYT-ZEBRA = 'X'.
WA_LAYT-SEL_MODE = 'A'.
LV_IPOS = 0. REFRESH LT_FCAT.
DEFINE ADD_FCAT.
CLEAR wa_fcat.
lv_ipos = lv_ipos + 1.
wa_fcat-col_pos = lv_ipos.
wa_fcat-fieldname = &1.
wa_fcat-coltext = &2.
wa_fcat-outputlen = &3.
wa_fcat-ref_field = &4.
wa_fcat-ref_table = &5.
wa_fcat-edit = iv_dat.
wa_fcat-just = 'C'.
wa_fcat-datatype = 'CHAR'.
wa_fcat-tabname = c_tbname7.
wa_fcat-no_zero = 'X'.
IF &1 = 'ZZBS_CODE'.
wa_fcat-lzero = 'X'.
ENDIF.
*================ tuqd alv 下拉菜单======*
* IF &1 = 'PRCTR'.
* wa_fcat-edit = 'X'.
* wa_fcat-ref_field = 'PRCTR'.
* wa_fcat-ref_table = 'CEPC'.
* wa_fcat-drdn_field = 'DD_HANDLE'.
* ENDIF.
*======================================*
*=================控制ALV单元格不能修改======*
IF sy-tcode = 'ZFI003D' OR P_TCODE = 'ZFI003D'.
IF &1 <> 'PRCTR'.
wa_fcat-edit = ''.
ENDIF.
IF &1 = 'PRCTR'.
wa_fcat-drdn_field = 'DD_HANDLE'.
ENDIF.
ENDIF.
*======================================*
APPEND wa_fcat TO lt_fcat.
END-OF-DEFINITION.
ADD_FCAT 'BKTXT' TEXT-001 '45' 'BKTXT' 'ZSFI0091'. " 摘要 --
* add_fcat 'BELNR' text-c78 '10' 'BELNR' 'ZSFI0091'. " 凭证编号 --
" wa_fcat-hotspot = 'X'. " 热点 --
" modify lt_fcat from wa_fcat index sy-tabix transporting hotspot.
ADD_FCAT 'BUKRS' TEXT-C01 '08' 'BUKRS' 'ZSFI0091'. " 公司代码 --
ADD_FCAT 'HKONT' TEXT-002 '10' 'HKONT' 'ZSFI0091'. " 科目编码 --
ADD_FCAT 'SAKXT' TEXT-003 '18' 'SAKXT' 'ZSFI0091'. " 科目名称 --
ADD_FCAT 'JFAMT' TEXT-004 '10' 'JFAMT' 'ZSFI0091'. " 借方金额 --
ADD_FCAT 'DFAMT' TEXT-005 '10' 'DFAMT' 'ZSFI0091'. " 贷方金额 --
ADD_FCAT 'BWAMT' TEXT-006 '08' 'BWAMT' 'ZSFI0091'. " 本位币金额 --
IF sy-tcode = 'ZFI003D' OR P_TCODE = 'ZFI003D'.
ADD_FCAT 'PRCTR' TEXT-C77 '20' '' ''. " 利润中心(带描述) --
ELSE.
ADD_FCAT 'PRCTR' TEXT-C77 '10' 'PRCTR' 'ZSFI0091'. " 利润中心 --
ENDIF.
ADD_FCAT 'LIFNR' TEXT-007 '08' 'LIFNR' 'ZSFI0091'. " 供应商编码 --
ADD_FCAT 'VNAME' TEXT-008 '15' 'VNAME' 'ZSFI0091'. " 供应商名称 --
ADD_FCAT 'KOSTL' TEXT-016 '10' 'KOSTL' 'ZSFI0091'. " 成本中心-- USER BY C-ZHANGQ15 20191223
ADD_FCAT 'CTTNR' TEXT-009 '10' 'CTTNR' 'ZSFI0091'. " 合同编号 --
* ADD_FCAT 'ZZMENGE' TEXT-115 '10' 'ZZMENGE' 'ZSFI0091'. " 往来类型 --
ADD_FCAT 'WLTYP' TEXT-115 '10' 'WLTYP' 'ZSFI0091'. " 辅助核算类型 --
ADD_FCAT 'ZZBS_CODE' TEXT-116 '20' 'ZZBS_CODE' 'ZSFI0091'. "业务类型 --
ADD_FCAT 'KUNNR' TEXT-117 '10' 'KUNNR' 'ZSFI0091'. "客户编号--
ADD_FCAT 'KNAME' TEXT-118 '15' 'KNAME' 'ZSFI0091'. "客户名称--
ADD_FCAT 'ZZROOM' TEXT-119 '30' 'ZZROOM' 'ZSFI0091'. "房源--
ADD_FCAT 'SWBMT' text-010 '22' 'SWBMT' 'ZSFI0091'. " 税码 --
ADD_FCAT 'FZTYP' text-120 '10' 'FZTYP' 'ZSFI0091'. " 辅助核算内容 --
ADD_FCAT 'FZHSN' text-121 '30' 'FZHSN' 'ZSFI0091'. " 辅助核算内容 --
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_CHECK.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
APPEND WA_EXPT TO LT_EXPT.
WA_EXPT = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
APPEND WA_EXPT TO LT_EXPT.
IF LR_COT7 IS INITIAL.
CREATE OBJECT LR_COT7 EXPORTING CONTAINER_NAME = C_CONALV7.
CREATE OBJECT ALV_GRD7 EXPORTING I_PARENT = LR_COT7.
PERFORM FRM_CREAT_EVENT_EXITS USING ALV_GRD7 .
CALL METHOD ALV_GRD7->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
CALL METHOD ALV_GRD7->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_SAVE = 'X'
IS_LAYOUT = WA_LAYT " 设置列格式 --
IT_TOOLBAR_EXCLUDING = LT_EXPT
CHANGING
IT_FIELDCATALOG = LT_FCAT " 设置列名称等属性 --
IT_OUTTAB = CT_DAT. " ALV数据 --ELSE.
ELSE.
PERFORM FRM_CREAT_EVENT_EXITS USING ALV_GRD7 .
ALV_GRD7->REFRESH_TABLE_DISPLAY( IS_STABLE = conv #( 'XX' ) ).
ENDIF.
CREATE OBJECT LR_EVNT TYPE LCL_ALVEVNT.
SET HANDLER LR_EVNT->HANDLE_HOTSPOT_CLICK FOR ALV_GRD7.
FREE: LT_FCAT, LT_EXPT, LR_EVNT.
ENDMETHOD. " disp_alv7 --
4. 对下拉框绑定赋值
设置利润中心下拉菜单
PERFORM frm_fill_drdown_data TABLES lt_data lt_cepc_bukrs.
FORM frm_fill_drdown_data TABLES lt_alv TYPE tt_alv7 lt_cepc STRUCTURE cepc_bukrs.
DATA lv_count TYPE i.
DATA lv_ltext TYPE cepct-ltext.
* 设置利润中心下拉菜单
LOOP AT lt_alv.
ADD 1 TO lv_count.
LOOP AT lt_cepc.
CLEAR gw_ddval.
gw_ddval-handle = lv_count.
gw_ddval-value = lt_cepc-prctr.
CLEAR lv_ltext.
SELECT SINGLE ltext INTO lv_ltext FROM cepct WHERE prctr = lt_cepc-prctr AND spras = sy-langu.
gw_ddval-value+11(20) = lv_ltext.
APPEND gw_ddval TO gt_ddval.
SORT gt_ddval BY handle value.
DELETE ADJACENT DUPLICATES FROM gt_ddval COMPARING handle value.
ENDLOOP.
lt_alv-dd_handle = lv_count.
MODIFY lt_alv TRANSPORTING dd_handle.
ENDLOOP.
ENDFORM.