Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема начата: inik от Август 01, 2013, 09:57:22 am

Название: select-options для классифиц.признаков
Отправлено: inik от Август 01, 2013, 09:57:22 am
Здравствуйте!

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

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

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

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

Inik
Название: Re: select-options для классифиц.признаков
Отправлено: Uukrul от Август 01, 2013, 08:49:20 pm
Не понял какая глубокая мысль была размещать вопрос в ветке управления материальными потоками, поэтому перенес тему в абап-разработки.

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

Как понимаю, надо будет использовать динамически составленный select-options.
Но как его прикрутить к репорту? И т.д.
Ну я знаю только одни вариант, выносить построение экрана в отдельный программный блок, дальше просто делать динамическое создание текста программы с последующей генерацией этого текста, ну и дальше формирование уже динамических запросов. Но если честно все это очень хлопотно и очень напряжно,  так что я лично с этим не заморачивался бы.
Название: Re: select-options для классифиц.признаков
Отправлено: inik от Август 02, 2013, 09:25:10 am
UUkrul, большое спасибо за ответ!

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

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

Получается какой-то салат.
Название: Re: select-options для классифиц.признаков
Отправлено: Uukrul от Август 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: Но работать динамически с этими сгенерированными признаками, честно скажу устанете.
Название: Re: select-options для классифиц.признаков
Отправлено: Dmitriy от Август 02, 2013, 12:05:12 pm
Цитировать
PS: Но работать динамически с этими сгенерированными признаками, честно скажу устанете.
ИМХО, не ввязывайтесь в это дело. В CO-PA видел такие фишки: есть отчет-образец, на основе которого генерируется рабочая программа, в зависимости от настроек, там и SELECT-OPTIONS и динамические критерии выбора... Оно, конечно, героически все можно преодолеть, но здесь будет такая тема: чем более универсально попытаетесь сделать, тем менее универсальным все это дело получится.
Название: Re: select-options для классифиц.признаков
Отправлено: inik от Август 05, 2013, 05:34:56 pm
Спасибо за разъяснения!

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

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

Пункты 2 и 3. Здесь моя цель: создать инслуд с селекционным экраном и этот инслуд в моём репорте сразу использовать(не во второй, а в первый старт репорта)
Для реализации пунктов  2 и 3  я ориентируюсь на 3ий вариант на странице
http://help.sap.com/saphelp_40b/helpdata/en/9f/db998835c111d1829f0000e829fbfe/content.htm
Проблема: таким образом я могу изменить и сразу использовать инклуд, но не могу писать в него  селекционный экран.

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


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

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




Название: Re: select-options для классифиц.признаков
Отправлено: Dmitriy от Август 05, 2013, 06:00:57 pm
You are not allowed to view links. Register or Login
Спасибо за разъяснения!
Спасибо за помощь!
SAP Бог вам в помощь... Ищущий - и да обрящет.
Название: Re: select-options для классифиц.признаков
Отправлено: Uukrul от Август 05, 2013, 10:10:35 pm
You are not allowed to view links. Register or Login
Вы пишите "генерируете этот инклуд ", может вы имеете в виду другой способ?
 "далее вызываете уже этот экран" - какой старт программы имеется в виду?
Похоже без примера, мне сложно будет объяснить что я имел в виду. Но к сожалению, раньше следующего понедельника, у меня скорее всего что доступа к системе не будет, поэтому раньше пример сделать не получиться.
Название: Re: select-options для классифиц.признаков
Отправлено: inik от Август 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-ом?

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

Название: Re: select-options для классифиц.признаков
Отправлено: Dmitriy от Август 09, 2013, 06:27:35 pm
You are not allowed to view links. Register or Login
EXPORT TO MEMORY ID
Difference Between SAP and ABAP Memory (http://www.sapnet.ru/viewtopic.php?t=426)
Код: You are not allowed to view links. Register or Login
CREATE OBJECT obj AREA HANDLE hdl.http://scn.sap.com/thread/1912099 (http://scn.sap.com/thread/1912099)
Глобальный класс сейчас делают вместо IMPORT/EXPORT, saphelp пишет, что быстрее, да и покошернее будет, галку ставите и F1. Там готовые куски кода вам покажет по использованию.


Название: Re: select-options для классифиц.признаков
Отправлено: Uukrul от Август 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.

*----
* Далее можем работать с полученными параметрами формирую динамческие запросы
* по переданным значениям.
*----
Название: Re: select-options для классифиц.признаков
Отправлено: inik от Август 24, 2013, 07:42:22 pm
Большое спасибо за ответ!

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

Всем удачи!
Название: Re: select-options для классифиц.признаков
Отправлено: Uukrul от Сентябрь 03, 2013, 02:06:06 pm
Любителям писать динамические программы, собственно вот интересный модулЁк системы: LABRAF11, в котором создается на лету подпрограмма, она же генерируется и тут же вызывается на выполнение.

Кстати, имя отчета там начинается на ! и вообще хитрый отчетик создается. Похоже он доступен только в момент генерации в памяти и что самое интересное его можно сразу вызвать на выполнение, без всяких INSERT REPORT и т.д. кажется то что надо. В общем за пример берем работу этого модуля.
Название: Re: select-options для классифиц.признаков
Отправлено: inik от Сентябрь 14, 2013, 06:04:51 pm
Здравствуйте!

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

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

Спасибо!
Название: Re: select-options для классифиц.признаков
Отправлено: Uukrul от Сентябрь 14, 2013, 08:37:06 pm
You are not allowed to view links. Register or Login
Как вычитывается иерархия или наследственность классов?
Тут посмотрите, может что-то полезное будет из функций: http://sapforum.biz/index.php?topic=170.0