Текущее время: Сб, июл 19 2025, 04:24

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


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

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


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

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