关于oo模式的ALV中日期字段的F4帮助的问题
关于oo模式的ALV中日期字段的F4帮助的问题
oo模式的ALV中 有字段 “登录日期” 想在该字段点F4按钮显示系统的日期选择框。要如何实现
用的是set_table_for_first_display 来显示alv的
其实不用写代码了,在字段目录里面稍微设置下表中中参考表和参考字段就可以了 gs_fieldcat-ref_table.
gs_fieldcat-ref_field
也可:
在Module POOL的PAI事件里定义
PROCESS ON VALUE-REQUEST.
FIELD P1KSCHL module f4_help_for_KSCHL.
*&------------------------------------------------------------------*
*& Module F4_HELP_FOR_KSCHL INPUT
*&------------------------------------------------------------------*
MODULE F4_HELP_FOR_KSCHL INPUT.
DATA: BEGIN OF ITHP_KSCHL OCCURS 0,
KSCHL LIKE NAST-KSCHL,
END OF ITHP_KSCHL.
SELECT NAST~KSCHL INTO TABLE ITHP_KSCHL
FROM NAST.
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
retfield = 'P1KSCHL'
dynpprog = sy-repid
dynpnr = sy-dynnr
* dynprofield = ''
value_org = 'S'
tables
value_tab = ithp_KSCHL.
ENDMODULE. " F4_HELP_FOR_KSCHL INPUT
或:
* F4 HELP
*&---------------------------------------------------------------------*
*& Class GCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
* ALV イベント(定義)
*----------------------------------------------------------------------*
class GCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS: CATCH_DOUBLECLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING
E_COLUMN
ES_ROW_NO
SENDER.
METHODS: ON_F4_HELP
FOR EVENT ONF4 OF CL_GUI_ALV_GRID
IMPORTING
E_FIELDNAME
ES_ROW_NO
ER_EVENT_DATA
ET_BAD_CELLS
E_DISPLAY.
endclass. "GCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
*& Class (Implementation) GCL_EVENT_RECEIVER
*&---------------------------------------------------------------------*
* ALV イベント実装
*----------------------------------------------------------------------*
class GCL_EVENT_RECEIVER implementation.
METHOD CATCH_DOUBLECLICK.
READ TABLE IT_ALV INTO IH_ALV INDEX ES_ROW_NO-ROW_ID.
IF IH_ALV-MATNR IS NOT INITIAL.
IF E_COLUMN = C_MATNR
OR E_COLUMN = C_MAKTX.
SET PARAMETER ID C_PMT_MXX FIELD 'E'.
SET PARAMETER ID C_PMT_MAT FIELD IH_ALV-MATNR.
SET PARAMETER ID C_PMT_WRK FIELD IH_ALV-WERKS.
SET PARAMETER ID C_PMT_LAG FIELD IH_ALV-LGORT.
CALL TRANSACTION C_MM03 AND SKIP FIRST SCREEN.
ENDIF.
IF E_COLUMN = C_EBELN "購買伝票番号
OR E_COLUMN = C_EBELP. "明細番号
CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
EXPORTING
i_ebeln = IH_ALV-ebeln
I_EBELP = IH_ALV-ebelp
EXCEPTIONS
NOT_FOUND = 1
NO_AUTHORITY = 2
INVALID_CALL = 3
PREVIEW_NOT_POSSIBLE = 4
OTHERS = 5
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
* F4 HELP
METHOD ON_F4_HELP.
IF E_FIELDNAME = C_BUDAT.
READ TABLE IT_ALV INTO IH_ALV INDEX ES_ROW_NO-ROW_ID.
CLEAR: IH_ALV-BUDAT.
* 照会して日付を選択
CALL FUNCTION 'F4_DATE'
EXPORTING
DATE_FOR_FIRST_MONTH = SY-DATUM
IMPORTING
SELECT_DATE = IH_ALV-BUDAT
EXCEPTIONS
CALENDAR_BUFFER_NOT_LOADABLE = 1
DATE_AFTER_RANGE = 2
DATE_BEFORE_RANGE = 3
DATE_INVALID = 4
FACTORY_CALENDAR_NOT_FOUND = 5
HOLIDAY_CALENDAR_NOT_FOUND = 6
PARAMETER_CONFLICT = 7
OTHERS = 8
.
MODIFY IT_ALV FROM IH_ALV INDEX ES_ROW_NO-ROW_ID.
* ALV リフレッシュ
CALL METHOD G_ALV->refresh_table_display.
ENDIF.
ENDMETHOD.
endclass. "GCL_EVENT_RECEIVER
PBO alv display中写
* F4 ヘルプ項目設定
PERFORM F_REGISTER_F4_DATA.
CREATE OBJECT W_EVENT_RECEIVER.
SET HANDLER W_EVENT_RECEIVER->CATCH_DOUBLECLICK FOR G_ALV.
SET HANDLER W_EVENT_RECEIVER->ON_F4_HELP FOR G_ALV.
form F_REGISTER_F4_DATA .
DATA: W_IT_F4 TYPE LVC_T_F4,
W_IH_F4 TYPE LVC_S_F4.
W_IH_F4-FIELDNAME = C_BUDAT.
W_IH_F4-REGISTER = C_ON.
W_IH_F4-GETBEFORE = C_ON.
W_IH_F4-CHNGEAFTER = C_ON.
W_IH_F4-INTERNAL = C_ON.
APPEND W_IH_F4 TO W_IT_F4.
CALL METHOD G_ALV->REGISTER_F4_FOR_FIELDS
EXPORTING
IT_F4 = W_IT_F4.
endform. " F_REGISTER_F4_DATA

浙公网安备 33010602011771号