二维码

[help] ABAP实现年月六位长度的搜索帮助

Twilight发表于 2015-09-22 16:43mckz8888 最后回复于 2015-09-22 17:04 [复制链接] 4952 1

日期的标准搜索帮助都是“年月日”8位长度的,那么如果只需年月怎么实现呢。

1、程序代码:
  1. TABLES:s295.
  2. SELECT-OPTIONS:s_spmon FOR s295-spmon NO-EXTENSION OBLIGATORY DEFAULT sy-datum+0(6)."年月

  3. INITIALIZATION.

  4. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_spmon-low.
  5.   PERFORM frm_monat_f4.

  6. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_spmon-high.
  7.   PERFORM frm_monat_f4.

  8. AT SELECTION-SCREEN ON s_spmon.
  9.   IF s_spmon-low > sy-datum+0(6).
  10.     MESSAGE '选择的月份不能大于当前月份!' TYPE 'E'.
  11.   ENDIF.

  12. FORM  frm_monat_f4.
  13.   DATA: BEGIN OF mf_dynpfields OCCURS 1.
  14.           INCLUDE STRUCTURE dynpread.
  15.   DATA: END   OF mf_dynpfields.
  16.   DATA: mf_returncode LIKE sy-subrc,
  17.         mf_monat      LIKE isellist-month,
  18.         mf_hlp_repid  LIKE sy-repid.
  19.   FIELD-SYMBOLS: <mf_feld>.
  20.   GET CURSOR FIELD mf_dynpfields-fieldname.
  21.   APPEND mf_dynpfields.
  22.   mf_hlp_repid = sy-repid.
  23.   DO 2 TIMES.
  24.     CALL FUNCTION 'DYNP_VALUES_READ'
  25.       EXPORTING
  26.         dyname               = mf_hlp_repid
  27.         dynumb               = sy-dynnr
  28.       TABLES
  29.         dynpfields           = mf_dynpfields
  30.       EXCEPTIONS
  31.         invalid_abapworkarea = 01
  32.         invalid_dynprofield  = 02
  33.         invalid_dynproname   = 03
  34.         invalid_dynpronummer = 04
  35.         invalid_request      = 05
  36.         no_fielddescription  = 06
  37.         undefind_error       = 07.
  38.     IF sy-subrc = 3.
  39.       mf_hlp_repid = 'SAPLALDB'.
  40.     ELSE.
  41.       READ TABLE mf_dynpfields INDEX 1.
  42.       TRANSLATE mf_dynpfields-fieldvalue USING '_ '.
  43.       EXIT.
  44.     ENDIF.
  45.   ENDDO.
  46.   IF sy-subrc = 0.
  47.     CALL FUNCTION 'CONVERSION_EXIT_PERI_INPUT'
  48.       EXPORTING
  49.         input         = mf_dynpfields-fieldvalue
  50.       IMPORTING
  51.         output        = mf_monat
  52.       EXCEPTIONS
  53.         error_message = 1.
  54.     IF mf_monat IS INITIAL.
  55.       mf_monat = sy-datlo(6).
  56.     ENDIF.
  57.     CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
  58.       EXPORTING
  59.         actual_month               = mf_monat
  60.       IMPORTING
  61.         selected_month             = mf_monat
  62.         return_code                = mf_returncode
  63.       EXCEPTIONS
  64.         factory_calendar_not_found = 01
  65.         holiday_calendar_not_found = 02
  66.         month_not_found            = 03.
  67.     IF sy-subrc = 0 AND mf_returncode = 0.
  68.       CALL FUNCTION 'CONVERSION_EXIT_PERI_OUTPUT'
  69.         EXPORTING
  70.           input  = mf_monat
  71.         IMPORTING
  72.           output = mf_dynpfields-fieldvalue.
  73.       COLLECT mf_dynpfields.
  74.       CALL FUNCTION 'DYNP_VALUES_UPDATE'
  75.         EXPORTING
  76.           dyname               = mf_hlp_repid
  77.           dynumb               = sy-dynnr
  78.         TABLES
  79.           dynpfields           = mf_dynpfields
  80.         EXCEPTIONS
  81.           invalid_abapworkarea = 01
  82.           invalid_dynprofield  = 02
  83.           invalid_dynproname   = 03
  84.           invalid_dynpronummer = 04
  85.           invalid_request      = 05
  86.           no_fielddescription  = 06
  87.           undefind_error       = 07.
  88.     ENDIF.
  89.   ENDIF.
  90. ENDFORM.
复制代码


2、测试效果:
年月搜索帮助.jpg
回复

使用道具 举报

mckz8888
刚出的呀  我试试  谢谢分享
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表