Автор Тема: Возврат больше чем одного значения из кодов поиска  (Прочитано 12691 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 780
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
В общем виде есть например свой экран диалоговой транзакции, на нем к примеру есть следующие поля (пример из пальца высосан, ну чтобы было понятно, что я имею в виду):

1. Код БЕ
2. Код завода
3. Код склада
4. Код материала
5. Код партии

Для каждого из полей понятно что привязано средство поиска, но тут возникает следующая проблема, например выбрав код завода в принципе в PAI/PBO можно легко определить код БЕ и подставить значение в поле 1. Со складом уже такой вариант не пройдет, так как на разных заводах могут быть склады с одинаковыми кодами, хотя когда пользователь выбирает в коде поиска склад, то рядом уж точно фигурирует завод. В отчетах с селекционными экранами, если эти поля объявлены в одной структуре, то при выборе склада, завод тоже переносится, причем если завод уже введен, то код поиска открывается уже со складами для введенного завода. Удобно?! Вполне... Причем для остальных полей, например выбрав партию теоретически мы сразу же определяем и все предыдущие поля. Но загвоздка в том, что из кода поиска значения эти по факту не доступны. В общем виде в свое время меня это напрягло и даже как-то попытался решать эту задачу, но в свое время то ли забил, то ли как обычно небыло времени. Вопрос в следующем, такую задачу решал кто-то? У меня кажется получилось найти общее решение такой задачки, вот и думаю может я это велосипед изобрел  ;D ?!

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Moderator
  • Newbie
  • *****
  • Сообщений: 380
  • Репутация: +0/-0
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Честно говоря, не понял, в чем состоит задача. Вот он наш PAI:
Код: You are not allowed to view links. Register or Login
PROCESS ON VALUE-REQUEST.
  FIELD field1 MODULE f4_field1.
  ...
  FIELD fieldN MODULE f4_fieldN.
Иерархия полей строится стандартно. Внутри модулей f4_* вызываем SH, функций несколько. Как закинешь параметры, так и будет. Нужно еще помнить, что выставляются ID-шники... Да, можно и в поиске по партиям, я думаю, по клику на строке в SH выкидывать значения высших орг. уровней (БЕ, завод), были бы в строке. Выкладывай код, на конкретном примере лучше смотреть. К тому же ещё есть SH-exits. ;)  
« Последнее редактирование: Июль 29, 2010, 11:54:44 pm от Dmitriy »

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 780
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
В общем для простоты накидал программку:
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  Y_TEST_HELP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  y_test_help.

DATA: BEGIN OF gt_data,
  werks LIKE t001w-werks,   "Завод
  lgort LIKE t001l-lgort,       "Склад
END OF gt_data.

DATA: ok_code LIKE sy-ucomm.


*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'PF0100'.
  SET TITLEBAR 'CAPTION0100'.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN  'BACK' OR 'EXIT' OR 'CANC'.
      CLEAR ok_code.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0100  INPUT
Для вызова определил транзакцию Y_TEST c номером экрана 100. На экране два поля, рисунок 0100-1.png. Поля ссылаются на поля структуры gt_data. На самом экране для полей поставил "Кнопка допустимых значений" в значение 1, рисунок 0100-2.png, теперь к полям привязаны коды поиска по умолчанию. Далее запускаем программу переходим в поле склад и нажав F4 получаем некий список складов. Если посмотреть на список то присутствует поле завод и поле склад и эти поля являются параметрами экспорта и импорта. Выбрав склад, он копируется в поле склада, но вот завод для выбранного склада не заполняется, аналогично если завод уже заполнен, я хочу получить при нажатии F4 только список складов к уже введенному заводу. Прошу учесть, что найти завод по складу однозначно в общем случае нельзя, так как на разных заводах могут быть склады с одинаковыми значениями кодов. И второе не всегда есть коды ID-параметров для полей, гу если задача решается в общем случае.

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

PSS: Картинки забыл прицепить...
« Последнее редактирование: Август 04, 2010, 06:13:49 pm от Uukrul »

Оффлайн dev403k

  • Newbie
  • *
  • Сообщений: 12
  • Репутация: +4/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Мне тоже приходилось сталкиваться с такой проблемой.
Поскольку не нашла оптимальных решений решила ее обходными путями.

p_idmove – номер документа (поле на селекционном экране)
p_YEMOVE – год документа  (поле на селекционном экране)

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_idmove.
  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      tabname    = 'ZMM_....'   "таблица
      fieldname  = 'IDMOVE'    "ключевое поле таблицы
    TABLES
      return_tab = exp_tab.

*Возращ. таблица со строками ключевых полей. Ключевых поля 2: документ и год

READ TABLE exp_tab INTO lt_exp_tab WITH KEY fieldname = 'IDMOVE'.
  IF sy-subrc = 0.
    p_idmove = lt_exp_tab-fieldval.
  ENDIF.

READ TABLE exp_tab INTO lt_exp_tab WITH KEY fieldname = 'YEMOVE'.
  IF sy-subrc = 0.
*Считываем значение год документа и перерисовываем поле на экране
    lt_screen-fieldname  = 'P_YEMOVE'.
    lt_screen-fieldvalue = lt_exp_tab-fieldval.
    APPEND lt_screen.

    CALL FUNCTION 'DYNP_VALUES_UPDATE'
      EXPORTING
        dyname     = sy-repid
        dynumb     = sy-dynnr
      TABLES
        dynpfields = lt_screen.

  ENDIF.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 780
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Ну у меня это вылилось в написанный ФМ, You are not allowed to view links. Register or Login для простой работы со средствами поиска. Так сказать решил задачу в общем виде.