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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Вт, янв 13 2009, 14:39 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
Добрый вечер (утро/день)!
Речь идет о расширении основной записи единицы оборудования.
В транзакции ie02 предусмотрена закладка "Прочее". Ее появление настраивают через SPRO.
Для добавления полей на эту закладку существует пользовательское расширение ITOB0001.
Надо что б для каждого типа единицы оборудования на закладке "Прочее" (тр-ия ie02) появлялся свой набор полей..
Создал подэкран предусмотренный расширением. Номер экрана 1000. На этом экране создал область подэкрана. В логике выполнения экрана 1000 в PBO такой вот код:
Code:
CALL SUBSCREEN: SUB INCLUDING SY-REPID '1001'.

На экране 1001 расположен один из необходимых мне наборов полей.
На экране 1002 расположен другой необходимый мне набор полей. ))

Так вот как бы так сделать, чтобы отображался то один подэкран, то другой- в зависимости от значения поля ITOB-EQTYP ?

Такой вот код в логике выполнения экрана естественно не работает (ну что б понятно было что я хочу):
Code:
IF ITOB-EQTYP = 1.
CALL SUBSCREEN: SUB INCLUDING SY-REPID '1001'.
ELSE.
CALL SUBSCREEN: SUB INCLUDING SY-REPID '1002'.
ENDIF.


Как же быть??
Пытался номер подэкрана присваивать переменно и писать вот так:
Логика подэкрана
Code:
PROCESS BEFORE OUTPUT.
  MODULE STATUS_1000.
  CALL SUBSCREEN: SUB INCLUDING SY-REPID screen.
PROCESS AFTER INPUT.
  CALL SUBSCREEN: SUB.



Код модуля в топовом инклуде
Code:
MODULE STATUS_1000 OUTPUT.
  DATA: SCREEN type i.
  TABLES: ITOB.
  IF ITOB-EQTYP = 1.
    screen = '1001'.
  ELSE.
    screen = '1002'.
  ENDIF.

ENDMODULE.                 " STATUS_1000  OUTPUT


Но это приводит к ошибке: Program "SAPLXTOB" tried to use screen 00.
The screen does not exist.

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Последний раз редактировалось Hexogon Вт, янв 13 2009, 14:49, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Вт, янв 13 2009, 14:44 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hexogon написал:
... Создал подэкран предусмотренный расширением. Номер экрана 1000. На этом экране создал область подэкрана. В логике выполнения экрана 1000 в PBO такой вот код:
Code:
CALL SUBSCREEN: SUB INCLUDING SY-REPID '1001'.

На экране 1001 расположен один из необходимых мне наборов полей.
На экране 1002 расположен другой необходимый мне набор полей. ))

Так вот как бы так сделать, чтобы отображался то один подэкран, то другой- в зависимости от значения поля ITOB-EQTYP ?

Такой вот код в логике выполнения экрана естественно не работает (ну что б понятно было что я хочу):
Code:
IF ITOB-EQTYP = 1.
CALL SUBSCREEN: SUB INCLUDING SY-REPID '1001'.
ELSE.
CALL SUBSCREEN: SUB INCLUDING SY-REPID '1002'.
ENDIF.


Как же быть??

Это что, влияние праздников? Мыслительный процесс совсем прекратился? Читать справку хотя бы пробовали?
Подсказка - второй параметр после INCLUDING (впрочем как и первый) может быть задан не только константой, но и переменной.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Вт, янв 13 2009, 14:51 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
Ок, понял. Значит всетаки можно )). Буду разбираться с вышеуказанной ошиПкой.
Благодарю за ответ.

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 10:44 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
Менять подэкраны по условию я научился. Но вот опять проблема: поле ITOB-EQTYP, когда процесс выполения программы доходит до инклуда пользовательского расширения (где я вставил свой условный выбор подэкранов), оказывается незаполненным.
Смотрел отладчиком. Запустил транзакцию IE02, набрал в командной строке /h и переключил на закладку "Прочее". Запустился отладчик. Пока процесс идет в Главных программах SAPLIT00 и SAPMIEQ0, поле ITOB-EQTYP заполнено (=1). Как только процесс переходит к Главной программе SAPLXTOB (это пул функций), где находятся инклюды пользовательского расширения ITOB0001 в одном из которых я испольую указанное поле, это поле становится незаполненным.
Я на всякий случай присвоил своей переменной значение упомянутого поля в том месте, где оно заполненно, но моя переменная конечно тоже оказалась пустой в нужном мне инклюде.
Что делать в таких случаях? Я слишком мало знаю об архитектуре выполнения программ. Ума не приложу..

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 12:01 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hexogon написал:
Менять подэкраны по условию я научился. Но вот опять проблема: поле ITOB-EQTYP, когда процесс выполения программы доходит до инклуда пользовательского расширения (где я вставил свой условный выбор подэкранов), оказывается незаполненным.
Смотрел отладчиком. Запустил транзакцию IE02, набрал в командной строке /h и переключил на закладку "Прочее". Запустился отладчик. Пока процесс идет в Главных программах SAPLIT00 и SAPMIEQ0, поле ITOB-EQTYP заполнено (=1). Как только процесс переходит к Главной программе SAPLXTOB (это пул функций), где находятся инклюды пользовательского расширения ITOB0001 в одном из которых я испольую указанное поле, это поле становится незаполненным.
Я на всякий случай присвоил своей переменной значение упомянутого поля в том месте, где оно заполненно, но моя переменная конечно тоже оказалась пустой в нужном мне инклюде.
Что делать в таких случаях? Я слишком мало знаю об архитектуре выполнения программ. Ума не приложу..

Узнайте больше на help.sap.com sdn.sap.com а так же на курсах SAP!
Для затравки посмотрите на Abap memory chart

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 12:46 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
sy-uname написал(а):
Для затравки посмотрите на Abap memory chart


Большое спасибо! Ничего не понятно, но нарисовано круто!! )))

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 12:54 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hexogon написал:
sy-uname написал(а):
Для затравки посмотрите на Abap memory chart


Большое спасибо! Ничего не понятно, но нарисовано круто!! )))

Тогда читайте BC400

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 15:38 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
Посмотрел я на картинку где разрисована архитектура Aplication Server. И подумал, что может быть удастся передать значение поля через GET PARAMETER :

Code:
MODULE STATUS_1001 OUTPUT.

  TABLES:  EQUI.
  DATA: screen(4) type c,
            EQ like ITOB-EQTYP.
 
  GET parameter ID 'EQT' field EQ.  " EQT - именно такой индентификатор
                                                    "у этого поля на экране транзакции IE02
  IF EQ = 1.
    screen = '1003'.
  ELSE.
    screen = '1002'.
  ENDIF.

ENDMODULE.                 " STATUS_1001  OUTPUT


Но в SAP Memory этой информации нет. Тоесть процесс выполнения программы скачет между двумя Terminal Session? Необходимо применить "Export...Shared/Import...Shared"? Насколько верны мои рассуждения?

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 15:51 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hexogon написал:
Посмотрел я на картинку где разрисована архитектура Aplication Server. И подумал, что может быть удастся передать значение поля через GET PARAMETER :

... Но в SAP Memory этой информации нет. Тоесть процесс выполнения программы скачет между двумя Terminal Session? Необходимо применить "Export...Shared/Import...Shared"? Насколько верны мои рассуждения?

Абсолютно неверно. И картинку Вы рассмотрели невнимательно. Процесс (точнее выполнение отчёта или транзакции) "скачет" между различными програмными группами, в пределах Internal session.
А в передаваемых в расширение параметрах точно нет необходимого поля?

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 16:17 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
Хм.. Вообще в раширении есть два функциональных модуля. В них импортируется таблица ITOB (которая мне и нужна). Также в расширении ITOB0001 есть возможность создать пятьэкранов (1000...1004).
Создаю экран 1001. На нем рисую область для подэкранов, которые должны подменяться в зависимости от значения поля ITOB-EQTYP.
В PBO 1001 экрана пишу MODULE STATUS_1001. щелкаю по нему два раза и код этого модуля предлогается набрать в инклуде, который уже не принадлежит ни одному из функциональных модулей (куда импортируется необходима мне таблица).
Пытался создать модуль вручную в инклюде, который принадлежит одному из ФМ расширения, но не выходит - ошибка (Incorrect nesting: Before the statement "MODULE", the structure
introduced by "FUNCTION" must be concluded with "ENDFUNCTION". ). Нельзя вообщем.
Ну а код с GET PARAMETER составлен верно?
Вообщем буду ковырять.

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 16:26 
Специалист
Специалист

Зарегистрирован:
Пт, сен 05 2008, 08:08
Сообщения: 134
Пол: Женский
В ФМ, куда передается таблица, переприсвойте её глобальной переменной, вот и все. INCLUD для глобальных данных пользователя в функц. группе должен быть.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Ср, янв 14 2009, 16:33 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Hexogon написал:
Хм.. Вообще в раширении есть два функциональных модуля. В них импортируется таблица ITOB (которая мне и нужна). Также в расширении ITOB0001 есть возможность создать пятьэкранов (1000...1004).

А эти два ФМ вызываются тогда когда требуется?
Цитата:
Создаю экран 1001. На нем рисую область для подэкранов, которые должны подменяться в зависимости от значения поля ITOB-EQTYP.
В PBO 1001 экрана пишу MODULE STATUS_1001. щелкаю по нему два раза и код этого модуля предлогается набрать в инклуде, который уже не принадлежит ни одному из функциональных модулей (куда импортируется необходима мне таблица).
Пытался создать модуль вручную в инклюде, который принадлежит одному из ФМ расширения, но не выходит - ошибка (Incorrect nesting: Before the statement "MODULE", the structure
introduced by "FUNCTION" must be concluded with "ENDFUNCTION". ). Нельзя вообщем.

И это правильно.
Как можно заниматься написанием расширений стандарта, не зная и не представляя в элементарном виде как работает ABAP? Попросите старших товарищей провести ликбез, что ли.
Цитата:
Ну а код с GET PARAMETER составлен верно?
Вообщем буду ковырять.

Код верен, но не надёжен. Если нигде ранее явно не делается set parameter.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Чт, янв 15 2009, 06:51 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
К сожелению, у меня нет старших товарищей, разбирющихся в АБАПЕ. Только Кречмер, презентации и форум ;-)

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ОС IE02 расширение ITOB0001- смена подэкранов по условию
СообщениеДобавлено: Чт, янв 15 2009, 08:18 
Специалист
Специалист

Зарегистрирован:
Чт, сен 04 2008, 12:40
Сообщения: 119
Откуда: Пермь
Пол: Мужской
Благодаря sy-uname и подсказке Yellow Raven все получилось.
Действительно есть ИНКЛЮД для глобальных данных.
Оба ФМ пользовательского расширения ITOB0001 входят в ПулФункций SAPLXTOB:

Code:
*******************************************************************
*   System-defined Include-files.                                 *
*******************************************************************
  INCLUDE LXTOBTOP.                          " Global Data
  INCLUDE LXTOBUXX.                          " Function Modules

*******************************************************************
  INCLUDE LXTOBF00.
                         " SAP-Formpool for Customer-Use
  INCLUDE ZXTOBZZZ.                          " Subprograms and Modules


В INCLUDE LXTOBTOP находится инклюд для определения пользовательских глобальных данных(INCLUDE ZXTOBTOP). В нем я инициализировал переменную для условного выбора подэкранов:
Code:
DATA: EQ like   EQUI-EQTYP.

В Include ZXTOBU01 присвоил переменной EQ значение текущего типа единицы оборудования:
Code:
TABLES: ISTRU_EQ.
ISTRU_EQ-ZZVIDINSR = I_DATA_EQUI-ZZVIDINSR.
E_SUBSCREEN_NUMBER = '1001'.
EQ = I_DATA_EQUI-EQTYP. " I_DATA_EQUI - это импорт таблицы EQUI

На экране 1001 (предусмотрен расширением):
Code:
PROCESS BEFORE OUTPUT.
  MODULE STATUS_1001.
  CALL SUBSCREEN: SUB INCLUDING SY-REPID screen.

PROCESS AFTER INPUT.
  CALL SUBSCREEN: SUB.
  MODULE USER_COMMAND_1001.

MODULE STATUS_1001 система мне предложила создать в INCLUDE ZXTOBO03:
Code:
*----------------------------------------------------------------------*
***INCLUDE ZXTOBO03 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_1001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_1001 OUTPUT.

  TABLES:  EQUI.
  DATA: screen(4) type c.

  IF EQ = 1.             " Тип единицы оборудования
    screen = '1003'.   " Тут вместо стандартных экранов 1000...1004
  ELSE.                     "можно насоздавать своих сколь угодно много.
    screen = '1002'.
  ENDIF.

ENDMODULE.                 " STATUS_1001  OUTPUT

_________________
Если долго биться головой об стену, то вскоре в стене появится небольшое отверстие ...


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

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


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

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


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

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