Текущее время: Вс, июл 27 2025, 13:20

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Ручное средство поиска
СообщениеДобавлено: Чт, апр 24 2014, 10:57 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 182
Пол: Мужской
Добрый день, коллеги!

Была проблема - множественный выбор на экране, ограничить средство поиска только двумя значениями, 7 и 12.
Вот это я подвесил на ф4:
Code:
  call function 'F4IF_FIELD_VALUE_REQUEST'
    exporting
      tabname                   = 'TCJ_POSITIONS'
      fieldname                 = 'TRANSACT_NUMBER'
*   SEARCHHELP                = ' '
*   SHLPPARAM                 = ' '
   DYNPPROG                  = sy-repid
   DYNPNR                    = sy-dynnr
   DYNPROFIELD               = 'S_TRNUM'
*   STEPL                     = 0
*   VALUE                     = 'C'
     multiple_choice           = 'X'
*   DISPLAY                   = ' '
*   SUPPRESS_RECORDLIST       = ' '
   CALLBACK_PROGRAM          = sy-repid
   CALLBACK_FORM             = 'SH_TRANSACT_NUMBER'
*   CALLBACK_METHOD           =
*   SELECTION_SCREEN          = '1000'
* IMPORTING
*   USER_RESET                =
   tables
     return_tab                = lt_ret
* EXCEPTIONS
*   FIELD_NOT_FOUND           = 1
*   NO_HELP_FOR_FIELD         = 2
*   INCONSISTENT_HELP         = 3
*   NO_VALUES_FOUND           = 4
*   OTHERS                    = 5
            .

if sy-subrc = 0.
    loop at lt_ret into ls_ret.
      case ls_ret-fieldname.
        when 'TRANSACT_NUMBER'.

          ls_dynpro_values-fieldname  = 'S_TRNUM-LOW'.
          ls_dynpro_values-fieldvalue = ls_ret-fieldval.
          append ls_dynpro_values to lt_dynpro_values.
      endcase.
    endloop.

    call function 'DYNP_VALUES_UPDATE'
      exporting
        dyname     = sy-cprog
        dynumb     = sy-dynnr
      tables
        dynpfields = lt_dynpro_values.
  endif.


В подпрограмме обрезаются значения вывода только до двух, чтоб пользователь больше не видел:
Code:
form sh_transact_number
  tables
    record_tab structure seahlpres
  changing
    shlp        type shlp_descr
    callcontrol like ddshf4ctrl.


  data: ls_selopt type DDSHSELOPT.

  ls_selopt-shlpname = shlp-shlpname.
  ls_selopt-shlpfield = 'TRANSACT_NUMBER'.
  ls_selopt-sign = 'I'.
  ls_selopt-option = 'EQ'.
  ls_selopt-low = '  7'.

  append ls_selopt to shlp-selopt.

  ls_selopt-shlpname = shlp-shlpname.
  ls_selopt-shlpfield = 'TRANSACT_NUMBER'.
  ls_selopt-sign = 'I'.
  ls_selopt-option = 'EQ'.
  ls_selopt-low = ' 12'.

  append ls_selopt to shlp-selopt.

endform.                    "sh_transact_number



Но dynp_values_update упорно не хочет обновлять мой множественный выбор на селекционном экране, записывает только последнее выбранное значение. Для множественного выбора какой то особенный ФМник или я что-то не так делаю?

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ручное средство поиска
СообщениеДобавлено: Чт, апр 24 2014, 14:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
Code:
    ...
    loop at lt_ret into ls_ret.
      case ls_ret-fieldname.
        when 'TRANSACT_NUMBER'.
          concatenate 'IEQ' ls_ret-fieldval into s_trnum.
          append s_trnum.
          ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ручное средство поиска
СообщениеДобавлено: Чт, апр 24 2014, 15:22 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 182
Пол: Мужской
trop написал(а):
Code:
    ...
    loop at lt_ret into ls_ret.
      case ls_ret-fieldname.
        when 'TRANSACT_NUMBER'.
          concatenate 'IEQ' ls_ret-fieldval into s_trnum.
          append s_trnum.
          ...

выдает 2 одинаковых значения - последние добавленные. При этом в s_trnum лежит две разные записи ( как надо ). Но на экране видно что это оба 12 и 12

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ручное средство поиска
СообщениеДобавлено: Чт, апр 24 2014, 20:28 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
+после заполнения:
Code:
READ TABLE s_trnum INDEX 1 ...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ручное средство поиска
СообщениеДобавлено: Пт, апр 25 2014, 09:22 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 182
Пол: Мужской
LAT написал(а):
+после заполнения:
Code:
READ TABLE s_trnum INDEX 1 ...

А это зачем?

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ручное средство поиска
СообщениеДобавлено: Пт, май 02 2014, 00:26 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 22 2013, 01:09
Сообщения: 108
Откуда: г. Жлобин, Республика Беларусь
Пол: Мужской
Orgazm написал:
Code:
if sy-subrc = 0.
    loop at lt_ret into ls_ret.
      case ls_ret-fieldname.
        when 'TRANSACT_NUMBER'.
          ls_dynpro_values-fieldname  = 'S_TRNUM-LOW'.
          ls_dynpro_values-fieldvalue = ls_ret-fieldval.
          append ls_dynpro_values to lt_dynpro_values.
      endcase.
    endloop.

    call function 'DYNP_VALUES_UPDATE'
      exporting
        dyname     = sy-cprog
        dynumb     = sy-dynnr
      tables
        dynpfields = lt_dynpro_values.
  endif.

Вот этот фрагмент надо переделать в следующий
Code:
if sy-subrc = 0.
   refresh s_trnum.
   loop at lt_ret into ls_ret.
      case ls_ret-fieldname.
        when 'TRANSACT_NUMBER'.
           s_trnum-sign = 'I'.
           s_trnum-option = 'EQ'.
           s_trnum-low = ls_ret-fieldval.
           append s_trnum.
      endcase.
    endloop.

    read table s_trnum index 1.
    ls_dynpro_values-fieldname  = 'S_TRNUM-LOW'.
    ls_dynpro_values-fieldvalue = s_trnum-low.
    append ls_dynpro_values to lt_dynpro_values.

    call function 'DYNP_VALUES_UPDATE'
      exporting
        dyname     = sy-cprog
        dynumb     = sy-dynnr
      tables
        dynpfields = lt_dynpro_values.
  endif.

У вас на экране только одно поле, поэтому и нужно в него вписывать только одно значение (первое в полученном списке) и обновлять. А все остальные занести прямо в select-options s_trnum. Все остальное сделает система.

_________________
Когда другие слепо следуют за истиной, помни - ничто не истина.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

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


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

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


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

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