Текущее время: Вт, июл 22 2025, 19:50

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Проблема со средством поиска
СообщениеДобавлено: Пт, ноя 19 2010, 10:08 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
Ну, ладно господа. Видимо не умею я свои мысли излагать и доводить до слушателей.

За сим, прикладываю скриншоты:
1 - селекционник отчета
2 - селекционник справки (с программным сокрытием полей)
3 - результат отбора справки (с программным сокрытием полей)
4 - селекционник справки (без программного сокрытия полей)
5 - результат отбора справки (без программного сокрытия полей)
6 - вид на комплексное СП
7 - одно из элементарных средств поиска
8 - ракурс, поставляющий данные для этого элементарного средства поиска

Механизм - для ограничения справки по датам берется значение из поля <месяц>. Формируется первое и последнее число месяца. В справке в поля с датами вставляются ограничения, а сами поля скрываются.

Блок события - вызов справки
Code:
AT SELECTION-SCREEN ON VALUE-REQUEST FOR SO_PERNR-LOW .

  DATA
    : shlp          TYPE shlp_descr_t
    , lop           TYPE ddshselops WITH HEADER LINE
    , return_values LIKE TABLE OF ddshretval
    , fieldname(30)
    , lt_dynpfields LIKE dynpread OCCURS 0 WITH HEADER LINE
    , lt_imp_props  TYPE ddshfprops
    .

  DATA
    : lv_begper  TYPE sy-datum
    , lv_endper  TYPE sy-datum
    , lv_bp_shlp TYPE rsdsselop_
    , lv_ep_shlp TYPE rsdsselop_
    .

  CONSTANTS shlpname TYPE shlpname VALUE 'ZPREM'.

  FIELD-SYMBOLS
    : <fs>      LIKE LINE OF shlp-interface
    , <fs_ret>  LIKE LINE OF return_values
    , <fs_prop> LIKE LINE OF shlp-fieldprop
    , <value>   LIKE pa0001-orgeh
    .

  IF PA_MONAT IS INITIAL.
    MESSAGE 'Не указан рабочий месяц!'
      TYPE 'E' .
  ELSE.
* first date of work month
    lv_begper(4) = pa_monat+2(4) .
    lv_begper+4(2) = pa_monat(2) .
    lv_begper+6(2) = '01' .

    CONCATENATE lv_begper+6(2) lv_begper+4(2) lv_begper(4)
      INTO lv_bp_shlp .

* last date of work month
    lv_endper = lv_begper .
    lv_endper = lv_endper + 32 .
    lv_endper+6(2) = '01' .
    lv_endper = lv_endper - 1 .

    CONCATENATE lv_endper+6(2) lv_endper+4(2) lv_endper(4)
      INTO lv_ep_shlp .

* get search help description
    CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
         EXPORTING shlpname = shlpname
         IMPORTING shlp     = shlp .

* set field PERNR to return
    READ TABLE shlp-interface ASSIGNING <fs>
      WITH KEY shlpfield = 'PERNR' .
    IF sy-subrc EQ 0 .
      <fs>-valfield = 'X' .
      UNASSIGN <fs> .
    ENDIF .

* set field ORGEH to return
    READ TABLE shlp-interface ASSIGNING <fs>
      WITH KEY shlpfield = 'ORGEH' .
    IF sy-subrc EQ 0 .
      <fs>-valfield = 'X' .
      UNASSIGN <fs> .
    ENDIF .

*----------------------------------------------------------------------*

* set data to MASSN field
    lop-shlpname = shlpname .
    lop-shlpfield = 'MASSN' .
    lop-sign = 'I' .
    lop-option = 'NE' .
    lop-low  = '10' .
    APPEND lop TO shlp-selopt . CLEAR lop .

* set data to BEGDA_0002 field
    lop-shlpname = shlpname .
    lop-shlpfield = 'BEGDA_0002' .
    lop-sign = 'I' .
    lop-option = 'LE' .
    lop-low  = lv_ep_shlp .
    APPEND lop TO shlp-selopt . CLEAR lop .

* set data to ENDDA_0002 field
    lop-shlpname = shlpname .
    lop-shlpfield = 'ENDDA_0002' .
    lop-sign = 'I' .
    lop-option = 'GE' .
    lop-low  = lv_ep_shlp .
    APPEND lop TO shlp-selopt . CLEAR lop .

* set data to BEGDA_0003 field
    lop-shlpname = shlpname .
    lop-shlpfield = 'BEGDA_0003' .
    lop-sign = 'I' .
    lop-option = 'LE' .
    lop-low  = lv_ep_shlp .
    APPEND lop TO shlp-selopt . CLEAR lop .

* set data to ENDDA_0003 field
    lop-shlpname = shlpname .
    lop-shlpfield = 'ENDDA_0003' .
    lop-sign = 'I' .
    lop-option = 'GE' .
    lop-low  = lv_ep_shlp .
    APPEND lop TO shlp-selopt . CLEAR lop .

* set data to BEGDA_0001 field
    lop-shlpname = shlpname .
    lop-shlpfield = 'BEGDA_0001' .
    lop-sign = 'I' .
    lop-option = 'LE' .
    lop-low  = lv_ep_shlp .
    APPEND lop TO shlp-selopt . CLEAR lop .

* set data to ENDDA_0001 field
    lop-shlpname = shlpname .
    lop-shlpfield = 'ENDDA_0001' .
    lop-sign = 'I' .
    lop-option = 'GE' .
    lop-low  = lv_ep_shlp .
    APPEND lop TO shlp-selopt . CLEAR lop .

* set data to BEGDA_0000 field
    lop-shlpname = shlpname .
    lop-shlpfield = 'BEGDA_0000' .
    lop-sign = 'I' .
    lop-option = 'LE' .
    lop-low  = lv_ep_shlp .
    APPEND lop TO shlp-selopt . CLEAR lop .

* set data to ENDDA_0000 field
    lop-shlpname = shlpname .
    lop-shlpfield = 'ENDDA_0000' .
    lop-sign = 'I' .
    lop-option = 'GE' .
    lop-low  = lv_ep_shlp .
    APPEND lop TO shlp-selopt . CLEAR lop .

*----------------------------------------------------------------------*

* block MASSN field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'MASSN' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

* block BEGDA_0002 field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'BEGDA_0002' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

* block ENDDA_0002 field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'ENDDA_0002' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

* block BEGDA_0003 field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'BEGDA_0003' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

* block ENDDA_0003 field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'ENDDA_0003' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

* block BEGDA_0001 field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'BEGDA_0001' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

* block ENDDA_0001 field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'ENDDA_0001' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

* block BEGDA_0000 field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'BEGDA_0000' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

* block ENDDA_0000 field
    READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
      WITH KEY fieldname  = 'ENDDA_0000' .
    IF sy-subrc EQ 0 .
*      <fs_prop>-shlpseldis = 'X' .
      <fs_prop>-shlpselpos = 0 .
      <fs_prop>-shlplispos = 0 .
      UNASSIGN <fs_prop> .
    ENDIF .

*----------------------------------------------------------------------*

    MOVE shlp-fieldprop TO lt_imp_props .
    LOOP AT shlp-interface ASSIGNING <fs>
      WHERE valfield = 'X' .
      DELETE lt_imp_props WHERE fieldname = <fs>-shlpfield .
    ENDLOOP .

    EXPORT lt_imp_props TO MEMORY ID 'ZHR_SHLP_PROPS' .

*----------------------------------------------------------------------*

* Show Search Help Dialogue

    CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
         EXPORTING shlp          = shlp
         TABLES    return_values = return_values .

    FREE MEMORY ID 'ZHR_SHLP_PROPS' .

* Set Selection to Screen Fields
    READ TABLE return_values ASSIGNING <fs_ret>
      WITH KEY shlpname  = shlpname
               fieldname = 'PERNR' .
    IF sy-subrc EQ 0.
      so_pernr-low = <fs_ret>-fieldval .
      UNASSIGN <fs_ret> .
    ENDIF .

    READ TABLE return_values ASSIGNING <fs_ret>
      WITH KEY shlpname  = shlpname
               fieldname = 'ORGEH' .
    IF sy-subrc EQ 0 .
      lt_dynpfields-fieldname = 'PA_ORGEH' .
      lt_dynpfields-fieldvalue = <fs_ret>-fieldval .
      APPEND lt_dynpfields .
      UNASSIGN <fs_ret> .

* Set Selection to Screen Fields
      CALL FUNCTION 'DYNP_VALUES_UPDATE'
           EXPORTING
                DYNAME               = sy-repid
                DYNUMB               = sy-dynnr
           TABLES
                DYNPFIELDS           = lt_dynpfields
           EXCEPTIONS
                INVALID_ABAPWORKAREA = 1
                INVALID_DYNPROFIELD  = 2
                INVALID_DYNPRONAME   = 3
                INVALID_DYNPRONUMMER = 4
                INVALID_REQUEST      = 5
                NO_FIELDDESCRIPTION  = 6
                UNDEFIND_ERROR       = 7
                OTHERS               = 8 .
    ENDIF .
  ENDIF .



Обработка ограничения средства поиска в расширении.
Code:
  IF callcontrol-step = 'PRESEL'.
    IMPORT lt_imp_props FROM MEMORY ID 'ZHR_SHLP_PROPS'.

    IF sy-subrc EQ 0.
      LOOP AT lt_imp_props.
        READ TABLE shlp-fieldprop ASSIGNING <fs_prop>
          WITH KEY fieldname  = lt_imp_props-fieldname.

        IF sy-subrc EQ 0.
          <fs_prop>-shlpselpos = lt_imp_props-shlpselpos.
          <fs_prop>-shlplispos = lt_imp_props-shlplispos.
        ENDIF.
      ENDLOOP.
    ENDIF.

    EXIT.
  ENDIF.


Напоминаю, что этот огород я начал городить, так как применение сокрытия полей к комплексному СП не возымело действия. Пришлось засовывать ограничение в расширения к элементарным СП.

Если у кого есть предложение более красивого способа, то с удовольствием посмотрю и поучусь.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема со средством поиска
СообщениеДобавлено: Пт, ноя 19 2010, 10:22 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
Фоты не приложил. Сорри.

1 - http://www.freeimagehosting.net/uploads/03d44634e5.jpg
2 - http://www.freeimagehosting.net/uploads/669a10c84e.jpg
3 - http://www.freeimagehosting.net/uploads/c67dd2f93f.jpg
4 - http://www.freeimagehosting.net/uploads/d52cbb778e.jpg
5 - http://www.freeimagehosting.net/uploads/13499050c8.jpg
6 - http://www.freeimagehosting.net/uploads/982cdc3980.jpg
7 - http://www.freeimagehosting.net/uploads/3a71626ae8.jpg
8 - http://www.freeimagehosting.net/uploads/c53daef070.jpg


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема со средством поиска
СообщениеДобавлено: Пн, ноя 22 2010, 08:38 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, окт 15 2010, 14:06
Сообщения: 292
art1m0n написал:
эти врем.интервалы вы задаете на экране к.средства?

Да, задаю программно через селекционник комплексного СП


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB