关于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

 

收集自:http://www.itpub.net/thread-1358808-1-1.html

posted @ 2012-03-12 20:14  VerySky  阅读(1981)  评论(0)    收藏  举报