Текущее время: Чт, июл 24 2025, 11:26

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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