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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вытянуть внутр. таблицу
СообщениеДобавлено: Вт, июн 27 2006, 17:27 
Гость
Здрасьте, уважаемые.

Може кто подскаже?
Ситуация следующая: в своей программулине я вызываю подпрограмму (передавая ей параметры) из стандартной саповской программы, а та (подпрограмма) наполняет одну (лакомую мне) внутреннюю таблицу itab (глобально определенную в программе zzzz). Подскажите, плиз, как корректно вытащить данные из той внутр. таблицы itab к себе в программу?

Подпрограмму зову так:
PERFORM yyyy IN PROGRAM zzzz
USING 'aa'
'bb'
'cc'.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, июн 27 2006, 17:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Code:
FIELD-SYMBOLS: <fs_tab> TYPE TABLE,
                         <fs> TYPE any.


PERFORM yyyy IN PROGRAM zzzz
USING 'aa'
'bb'
'cc'.

ASSIGN ('(ZZZZ)ITAB[]') TO <fs_tab>.

LOOP AT <fs_tab> INTO <FS> ...


ENDLOOP.

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 28 2006, 09:22 
Гость
Ага, спасибо.
Я так понимаю, аналогичная конструкция и с вызовом ФМ также работает.

А обратно задача решается - сформировать нутряную таблицу и подкинуть в ФМ?

И еще вопрос - каков принцип действия динамического assign'а? Т.е. программа отработала, данные висят в памяти (а если, к примеру, refresh вн. таблицы был) и assign их ловит? И как долго данные остаются доступными?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 28 2006, 12:38 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Подробнее - это курс BC402 - есть там раздел про области памяти при выполнении ABAP-программы...
1.Просто определить таблицу с такой структурой в интерфейсе ФМ :)
2.Принцип действия следующий:
а) При первом вызове подпрограммы или ФМ (программа Б) в область памяти загружается глобальная область данных, доступная из вызывающей программы А
б)при других вызовах процедур из программы В глобальные данные не инициализируются, работа идет с теми данными, которые остаются в памяти.
в)при выходе из программы А память программы Б становится недоступна.
Пример:
Code:
PROGRAM B.

DATA: COUNTER TYPE I.

FORM ADD_COUNTER.
  ADD 1 TO COUNTER.
ENDFORM.


Code:
PROGRAM A.

FIELD-SYMBOLS: <FS> TYPE ANY.
END-OF-SELECTION.

  PERFORM ADD_COUNTER IN PROGRAM B.

  ASSIGN ('(B)COUNTER') TO <FS>.
  WRITE: / 'Счетчик', <FS>.

  PERFORM ADD_COUNTER IN PROGRAM B.

  WRITE: / 'Счетчик', <FS>.


Результат:
Счетчик 1
Счетчик 2.

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вытянуть внутр. таблицу
СообщениеДобавлено: Ср, июн 28 2006, 13:07 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, апр 07 2006, 22:15
Сообщения: 184
Jimona написал(а):
как корректно вытащить данные из той внутр. таблицы itab к себе в программу?

Jimona написал(а):
А обратно задача решается - сформировать нутряную таблицу и подкинуть в ФМ?

А зачем сии махинации? :roll:


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 28 2006, 13:19 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, сен 21 2005, 10:01
Сообщения: 651
Откуда: СССР
Надо подумать, прежде чем так делать. Доступ через филдсимволы к переменным другой программы - не есть хороший стиль программирования, хотя иногда бывает нужно...

Поищите другие, "легальные" способы реализации...


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 28 2006, 13:31 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Никто и не говорит, что это хороший стиль программирования. :roll:
Но если разработчик в SAPе(или свой) не предусмотрел передачу всех необходимых данных в процедуру, функцию или метод класса для решения конкретной задачи, то приходится это использовать.

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вытянуть внутр. таблицу
СообщениеДобавлено: Ср, июн 28 2006, 13:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Абапер написал(а):
А зачем сии махинации? :roll:

Конкретный пример:
BAdI для ММ INVOICE_UPDATE, метод CHANGE_AT_SAVE.
Как узнать в этом методе, какая операция проводится в транзакции MIRO:
-счет-фактура?
-кредитовое авизо?
-дополнительное дебетование?
-дополнительное кредитование?

В методе нет параметра VORGANG, поэтому определить его можно только с помощью ASSIGN...

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 28 2006, 13:59 
Гость
Ну дык... Ищу я эти легальные способы.
Опишу кратенько: есть транзакция LSO_PV07 (регистрация списка участников). На первом экране вводится ID объекта "тип курса" (объект D). Далее, появляется список курсов. Нужно, выбрав интересующий курс (объект E), нажать кнопу "Список участников". Появляется окно "Регистрация списка". Туда вводятся значения "тип участника" (объект P) и его ТабНомер. Далее, нажимаем кнопку регистрации.

По условиям задачи, я знаю ID курса (объект E) и список участников. Мне нужно зарегестрировать этот список на курс, т.е. автоматизировать описанное выше. Я могу вызвать вышеуказанную транзакцию, либо ФМ 'LSO_PART_LIST_INSERT'. Но как корректно заполнить список участников, нажать кнопку "Регистрация" и вернуться в свою прогу?

Может я за деревьями леса не вижу? :)


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 28 2006, 14:22 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, сен 21 2005, 10:01
Сообщения: 651
Откуда: СССР
А пакетный ввод чем не устраивает?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, июн 28 2006, 14:38 
Гость
Дык, как при пакетном вводе узнать в какой строке на экранной таблице находится нужный тебе курс - во второй или в пятой?

Почему я и задавал начальный вопрос (см. выше)...

Теперь я запускаю станд. подпрограмму, считываю значения вн. таблицы, где формируется список курсов, определяю номер нужной мне записи и далее - batch input.
Так народ казал, что это "не красиво". Я и пытаюсь найти ту самую "красоту"... :)


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 29 2006, 12:08 
Гость
В продолжение темы спрошу: как вытащить внутреннюю таблицу когда вызов не PERFORM..., а CALL TRANSACTION...? :?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 29 2006, 13:02 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Ср, сен 21 2005, 10:01
Сообщения: 651
Откуда: СССР
Точно также :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 29 2006, 13:44 
Гость
Не точно также.

После PERFORM или CALL FUNCTION конструкция
ASSIGN ('(program)itab[]') TO <fs_tab>.
срабатывает, а после CALL FUNCTION - нет.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 29 2006, 13:45 
Гость
пардон, после CALL TRANSACTION не срабатывает...


Пометить тему как нерешенную
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу 1, 2  След.

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


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

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


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

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