+ Sapforum.Biz » Инструменты » ABAP - Инструментальные средстваТема:
|- select-options для классифиц.признаков




Автор Тема: select-options для классифиц.признаков  (Прочитано 10016 раз)

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

Оффлайн inik

  • Newbie
  • *
  • Сообщений: 9
  • Reputation Power: 0
  • inik has no influence.
  • Пол: Женский
  • YearsYearsYearsYearsYears
select-options для классифиц.признаков
« : Август 01, 2013, 09:57:22 am »
Здравствуйте!

Моя задача - использовать классифиц. признаки в селекции(select) данных.
При этом надо признаки селектировать через select-options.

Может ли кто дать совет, как это можно реализовать?

Как понимаю, надо будет использовать динамически составленный select-options.
Но как его прикрутить к репорту? И т.д.

Пожалуйста поделитесь опытом или советом.

Inik

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 656
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: select-options для классифиц.признаков
« Ответ #1 : Август 01, 2013, 08:49:20 pm »
Не понял какая глубокая мысль была размещать вопрос в ветке управления материальными потоками, поэтому перенес тему в абап-разработки.

You are not allowed to view links. Register or Login
Моя задача - использовать классифиц. признаки в селекции(select) данных.
При этом надо признаки селектировать через select-options.

Как понимаю, надо будет использовать динамически составленный select-options.
Но как его прикрутить к репорту? И т.д.
Ну я знаю только одни вариант, выносить построение экрана в отдельный программный блок, дальше просто делать динамическое создание текста программы с последующей генерацией этого текста, ну и дальше формирование уже динамических запросов. Но если честно все это очень хлопотно и очень напряжно,  так что я лично с этим не заморачивался бы.

Оффлайн inik

  • Newbie
  • *
  • Сообщений: 9
  • Reputation Power: 0
  • inik has no influence.
  • Пол: Женский
  • YearsYearsYearsYearsYears
Re: select-options для классифиц.признаков
« Ответ #2 : Август 02, 2013, 09:25:10 am »
UUkrul, большое спасибо за ответ!

Но "выносить построение экрана в отдельный программный блок, дальше просто делать динамическое создание текста программы с последующей генерацией этого текста" это уже второй шаг.

Вначале признаки не известны, через класс и вид класса их нужно селектировать.
Значит для первого шага уже нужен экран.
Потом только  динамически можно создать select-options для признаков.
При этом это должен быть report, а не  modulpool.

Получается какой-то салат.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 656
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: select-options для классифиц.признаков
« Ответ #3 : Август 02, 2013, 10:53:24 am »
Ну сначала давайте посмотрим на то как это делает сам SAP, а он это делает очень просто, без всяких селекционных экранов, для примера есть стандартная транзакции по работе с классификацией: CL30N - Поиск объекта в классах. Первый экран это ввод имени и типа класса, а далее переходим на второй экран, где признаки класса у нас перечисляются в виде таблицы, рисунок CL30N.png, т.е. ни о какой селекционный экран, никто даже и не пытается строить динамически. В общем я сильно советую задуматься почему даже гнездо этого решило не делать  и таки не делать.

Если вам все таки хочется быть первопроходцем в этом не легком деле, не вопрос, можете попробовать:
You are not allowed to view links. Register or Login
Вначале признаки не известны, через класс и вид класса их нужно селектировать.
Значит для первого шага уже нужен экран.
1. На экране 1000 программы типа REPORT запрашиваете имя и тип класса по аналогии с транзакцией CL30N.
2. В основной программе есть include в котором описываете селеционный экран используя команду: SELECTION-SCREEN BEGIN OF SCREEN 0101 AS WINDOW.
3. После ввода имени класса у вас есть кнопка на экране по нажатию на которую, читаете признаки класса, формируете текст этого инклуда с перечислением поле = признак класса, генерируете этот инклуд и далее вызываете уже этот экран. Получите свой селекционный экран в диалоговом окне.
4. Пользователь заполняет значения нажимает ОК, программа возвращается на основной экран, где рисуете кнопку типа с иконкой, что есть подробные данные признаков и дальше уже выполняете программу.

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

Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: select-options для классифиц.признаков
« Ответ #4 : Август 02, 2013, 12:05:12 pm »
Цитировать
PS: Но работать динамически с этими сгенерированными признаками, честно скажу устанете.
ИМХО, не ввязывайтесь в это дело. В CO-PA видел такие фишки: есть отчет-образец, на основе которого генерируется рабочая программа, в зависимости от настроек, там и SELECT-OPTIONS и динамические критерии выбора... Оно, конечно, героически все можно преодолеть, но здесь будет такая тема: чем более универсально попытаетесь сделать, тем менее универсальным все это дело получится.

Оффлайн inik

  • Newbie
  • *
  • Сообщений: 9
  • Reputation Power: 0
  • inik has no influence.
  • Пол: Женский
  • YearsYearsYearsYearsYears
Re: select-options для классифиц.признаков
« Ответ #5 : Август 05, 2013, 05:34:56 pm »
Спасибо за разъяснения!

К 3-му пункту:
"После ввода имени класса у вас есть кнопка на экране по нажатию на которую, читаете признаки класса, формируете текст этого инклуда с перечислением поле = признак класса, генерируете этот инклуд и далее вызываете уже этот экран. Получите свой селекционный экран в диалоговом окне."

Как же я получаю селекционный экран?
По пунктам:
1. "формируете текст этого инклуда с перечислением поле = признак класса"  = т.е. динамически создаю инслуд,  в инклуде select-options.
2. "генерируете этот инклуд "
3. "далее вызываете уже этот экран"

Пункты 2 и 3. Здесь моя цель: создать инслуд с селекционным экраном и этот инслуд в моём репорте сразу использовать(не во второй, а в первый старт репорта)
Для реализации пунктов  2 и 3  я ориентируюсь на 3ий вариант на странице
You are not allowed to view links. Register or Login
Проблема: таким образом я могу изменить и сразу использовать инклуд, но не могу писать в него  селекционный экран.

Вы пишите "генерируете этот инклуд ", может вы имеете в виду другой способ?
 "далее вызываете уже этот экран" - какой старт программы имеется в виду?


P.S. Совсем не связываться с этим не могу. В проекте нестыковки в передаче старых данных реализуются через классификацию...

Спасибо за помощь!





Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: select-options для классифиц.признаков
« Ответ #6 : Август 05, 2013, 06:00:57 pm »
You are not allowed to view links. Register or Login
Спасибо за разъяснения!
Спасибо за помощь!
SAP Бог вам в помощь... Ищущий - и да обрящет.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 656
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: select-options для классифиц.признаков
« Ответ #7 : Август 05, 2013, 10:10:35 pm »
You are not allowed to view links. Register or Login
Вы пишите "генерируете этот инклуд ", может вы имеете в виду другой способ?
 "далее вызываете уже этот экран" - какой старт программы имеется в виду?
Похоже без примера, мне сложно будет объяснить что я имел в виду. Но к сожалению, раньше следующего понедельника, у меня скорее всего что доступа к системе не будет, поэтому раньше пример сделать не получиться.

Оффлайн inik

  • Newbie
  • *
  • Сообщений: 9
  • Reputation Power: 0
  • inik has no influence.
  • Пол: Женский
  • YearsYearsYearsYearsYears
Re: select-options для классифиц.признаков
« Ответ #8 : Август 09, 2013, 05:47:16 pm »
Я построила мой первый вариант таким образом:

В report1 на селекционном  экране parameters для класса и вида класса, плюс button.
После нажатия button  через insert report пишется динамично селекционный экран для выбора кл.признаков в report2,
а также INITIALIZATION и START-OF-SELECTION. Таким образом report2 селектирует данные и при помощи
EXPORT TO MEMORY ID посылает внутреннию таблицу с результатами обратно.

1. Uukrul, вы такое имели в виду?
Если Вас не затруднит, приведите пожалуйста ваш пример.

2. Когда создаю select-options, например
select-options s_mm1 for zsel_help-zsnum,

то заранее создаю тип, здесь zsel_help-zsnum, тип для типа признака.
Это верно, или это делается по-другому?

3. При вызове первым report-ом  report2( где selection-screen begin of screen 0101 as window.) естественно пропадает селекционный экран
от report1. Как можно реализовать всё это дело, чтобы селекционный экран не пропадал и report1 оставался report-ом?

Всем спасибо и удачных выходных!


Оффлайн Dmitriy

  • SAP ECC 6.0
  • Кухня
  • Newbie
  • *
  • Сообщений: 380
  • Reputation Power: 0
  • Dmitriy has no influence.
  • Пол: Мужской
  • Embracive Fire
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYears
Re: select-options для классифиц.признаков
« Ответ #9 : Август 09, 2013, 06:27:35 pm »
You are not allowed to view links. Register or Login
EXPORT TO MEMORY ID
You are not allowed to view links. Register or Login
Код: You are not allowed to view links. Register or Login
CREATE OBJECT obj AREA HANDLE hdl.You are not allowed to view links. Register or Login
Глобальный класс сейчас делают вместо IMPORT/EXPORT, saphelp пишет, что быстрее, да и покошернее будет, галку ставите и F1. Там готовые куски кода вам покажет по использованию.



Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 656
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: select-options для классифиц.признаков
« Ответ #10 : Август 13, 2013, 01:13:53 pm »
You are not allowed to view links. Register or Login
В report1 на селекционном  экране parameters для класса и вида класса, плюс button.
После нажатия button  через insert report пишется динамично селекционный экран для выбора кл.признаков в report2,
а также INITIALIZATION и START-OF-SELECTION. Таким образом report2 селектирует данные и при помощи
EXPORT TO MEMORY ID посылает внутреннию таблицу с результатами обратно.

1. Uukrul, вы такое имели в виду?

Да где-то такой вариант имел в виду. Ниже пример того как это реализовывал. Вызов репорта 2 как и его генерацию вешаем на кнопку, как вы и написали, в примере там просто все идет линейно, но это общий принцип так сказать.
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YTSH_CLASS_REPORT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ytsh_class_report.

DATA: lt_itab TYPE TABLE OF string,
      l_prog TYPE sy-repid,

      l_mess TYPE string,
      l_lin  TYPE i,
      l_wrd  TYPE string,
      l_dir  TYPE trdir.


*----
* Пишем код новой программы который формируем динамически, перечисляя в нем все
* поля из заданного на экране класса. Кстати там же можно получить и типы полей
*----
APPEND '*&---------------------------------------------------------------------*' TO lt_itab.
APPEND '*&  YTSH_TEST_SELOPT'                                                     TO lt_itab.
APPEND '*&---------------------------------------------------------------------*' TO lt_itab.
APPEND 'REPORT ytsh_class_report.'                                                TO lt_itab.
APPEND 'TABLES: ekko, ekpo.'                                                      TO lt_itab.
APPEND 'SELECTION-SCREEN BEGIN OF SCREEN 1200 AS WINDOW.'                         TO lt_itab.
APPEND 'SELECT-OPTIONS: s_werks  FOR ekpo-werks,'                                 TO lt_itab.
APPEND '                s_vendor FOR ekko-lifnr,'                                 TO lt_itab.
APPEND '                s_order  FOR ekko-ebeln,'                                 TO lt_itab.
APPEND '                s_order1 FOR ekko-ebeln,'                                 TO lt_itab.
APPEND '                s_order2 FOR ekko-ebeln.'                                 TO lt_itab.
APPEND 'SELECTION-SCREEN END OF SCREEN 1200.'                                     TO lt_itab.
APPEND 'CALL SCREEN 1200 STARTING AT 10 5.'                                       TO lt_itab.
*----
* Далее введенные параметры экрана записываем во внутренню таблицу и эту таблицу например
* передаем через IMPORT\EXPORT в текущую вызываемую программу или через глобальный класс
*----

*----
* Было лень формировать структуру trdir, поэтому создал пустую программу YTSH_TEST_SELOPT,
* а далее просто читаю ее параметры. Наполнение программы типа - REPORT динамическое,
* сфорировано выше.
*----
SELECT SINGLE * INTO l_dir
FROM trdir WHERE name = 'YTSH_TEST_SELOPT'.

* Проверка синтаксиса
SYNTAX-CHECK FOR lt_itab MESSAGE l_mess LINE l_lin WORD l_wrd
             DIRECTORY ENTRY l_dir.
IF sy-subrc = 0.
  l_prog = 'YTSH_TEST_SELOPT'.
  INSERT REPORT l_prog FROM lt_itab FIXED-POINT ARITHMETIC 'X'
                                    UNICODE ENABLING 'X'.
  COMMIT WORK AND WAIT.
  GENERATE REPORT l_prog MESSAGE l_mess LINE l_lin WORD l_wrd.
  COMMIT WORK AND WAIT.

* Вызов сгенерированного отчета
  SUBMIT ytsh_test_selopt AND RETURN.
ENDIF.

*----
* Далее можем работать с полученными параметрами формирую динамческие запросы
* по переданным значениям.
*----

Оффлайн inik

  • Newbie
  • *
  • Сообщений: 9
  • Reputation Power: 0
  • inik has no influence.
  • Пол: Женский
  • YearsYearsYearsYearsYears
Re: select-options для классифиц.признаков
« Ответ #11 : Август 24, 2013, 07:42:22 pm »
Большое спасибо за ответ!

Почти весь август в отпуске, допуска к системе поэтому нет.
Выйду, Всё ещё раз пересмотрю, в сентября вплотную приступаем к проекту.

Всем удачи!

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 656
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: select-options для классифиц.признаков
« Ответ #12 : Сентябрь 03, 2013, 02:06:06 pm »
Любителям писать динамические программы, собственно вот интересный модулЁк системы: LABRAF11, в котором создается на лету подпрограмма, она же генерируется и тут же вызывается на выполнение.

Кстати, имя отчета там начинается на ! и вообще хитрый отчетик создается. Похоже он доступен только в момент генерации в памяти и что самое интересное его можно сразу вызвать на выполнение, без всяких INSERT REPORT и т.д. кажется то что надо. В общем за пример берем работу этого модуля.
« Последнее редактирование: Сентябрь 03, 2013, 02:12:00 pm от Uukrul »

Оффлайн inik

  • Newbie
  • *
  • Сообщений: 9
  • Reputation Power: 0
  • inik has no influence.
  • Пол: Женский
  • YearsYearsYearsYearsYears
Re: select-options для классифиц.признаков
« Ответ #13 : Сентябрь 14, 2013, 06:04:51 pm »
Здравствуйте!

К теме классификация.
Как вычитывается иерархия или наследственность классов?

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

Спасибо!

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 656
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Re: select-options для классифиц.признаков
« Ответ #14 : Сентябрь 14, 2013, 08:37:06 pm »
You are not allowed to view links. Register or Login
Как вычитывается иерархия или наследственность классов?
Тут посмотрите, может что-то полезное будет из функций: You are not allowed to view links. Register or Login