Текущее время: Вт, май 13 2025, 19:50

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Использование таблицы другой программы
СообщениеДобавлено: Ср, ноя 17 2004, 12:17 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, сен 17 2004, 08:10
Сообщения: 1024
Уважаемые!

Напомните, плз, как можно использовать таблицу другой программы. Ну то есть например в ФМ внутреннюю таблицу вызывающей программы. Помню, что был такой механизм с FIELD-SYMBOLS, но в точности не вспомнить!

_________________
- Ничего не поделаешь, - возразил Кот. - Все мы здесь не в своем уме - и ты, и я!
- Откуда вы знаете, что я не в своем уме? - спросила Алиса.
- Конечно, не в своем, - ответил Кот. - Иначе как бы ты здесь оказалась? :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 17 2004, 13:01 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, сен 21 2004, 17:54
Сообщения: 67
Механизм этот называется динамический assign.

If the name of the field you want to assign has the form "(Program name)Field name", the system looks for the field "Field name" in the global data of the program called "Program name". The system can only find it if the program has already been loaded.
Warning: This variant should only be used internally at SAP by experts. Incompatible changes or developments may occur at any time without warning.


ТАК ВОТ, раз уж затронули эту тему - никогда реально не видел, чтоб она гадина реально считывала значения как написано. В чем прикол?

Господа почетные гуру - плиз внесите ясность........


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование таблицы другой программы
СообщениеДобавлено: Ср, ноя 17 2004, 13:02 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Manticore написал(а):
Уважаемые!

Напомните, плз, как можно использовать таблицу другой программы. Ну то есть например в ФМ внутреннюю таблицу вызывающей программы. Помню, что был такой механизм с FIELD-SYMBOLS, но в точности не вспомнить!

В круглых скобках имя программы. Только не помню справа или слева дописыватся к имени переменной


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование таблицы другой программы
СообщениеДобавлено: Ср, ноя 17 2004, 13:04 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 14:35
Сообщения: 1519
Откуда: В ВЕЧНОМ БАНЕ
sy-uname написал(а):
Manticore написал(а):
Уважаемые!

Напомните, плз, как можно использовать таблицу другой программы. Ну то есть например в ФМ внутреннюю таблицу вызывающей программы. Помню, что был такой механизм с FIELD-SYMBOLS, но в точности не вспомнить!

В круглых скобках имя программы. Только не помню справа или слева дописыватся к имени переменной

Доступ то есть, только у меня вроде как значения в переменых пустые :roll: после такого обращения...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 17 2004, 13:15 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 01 2004, 07:44
Сообщения: 174
Только осторожнее с данными конструкциями :wink:

TYPE-POOLS: mrm.

DATA dref TYPE REF TO data.
FIELD-SYMBOLS: <rbkpv> TYPE mrm_rbkpv.

CREATE DATA dref TYPE mrm_rbkpv.
ASSIGN dref->* TO <rbkpv>.
ASSIGN ('(SAPLMR1M)rbkpv') TO <rbkpv>.

...
UNASSIGN <rbkpv>.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 17 2004, 13:15 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, сен 17 2004, 08:10
Сообщения: 1024
Не претендуя на звание почетного гуру, вношу ясность.
:lol:
Code:
PROGRAM zprogram.
...
data counter(3).
....

CALL FUNCTION 'ZFUNCT'



Code:
FUNCTION zfunct.
...
data str(60).
FIELD-SYMBOLS dat.
str = '(ZPROGRAM)counter'.
ASSIGN (str) to dat.
...


После этого в <dat> содержится значение counter из вызывающей программы.

_________________
- Ничего не поделаешь, - возразил Кот. - Все мы здесь не в своем уме - и ты, и я!
- Откуда вы знаете, что я не в своем уме? - спросила Алиса.
- Конечно, не в своем, - ответил Кот. - Иначе как бы ты здесь оказалась? :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 17 2004, 13:54 
Гость
а можно - гораздо проще :)

Пример
две программы:

REPORT ZTEST53 .
data: tt like t001 occurs 0 with header line.
clear: tt. refresh tt.
select * from t001 appending table tt.
export tt to memory id 'Z_TT'.
submit ztest54 and return.

REPORT ZTEST54 .
data: tt like t001 occurs 0 with header line.
import tt from memory id 'Z_TT'.
loop at tt.
write:/ tt-bukrs, tt-butxt.
endloop.

запустить ZTEST53, там заполнится таблица
и вывести ее можно уже в ZTEST54


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 17 2004, 14:44 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, сен 21 2004, 17:54
Сообщения: 67
может вы и правы в конкретном случае, но вот только реально когда нужно (в экзитах например всяких) - фиг чего видно :cry:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 17 2004, 14:54 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, сен 17 2004, 08:10
Сообщения: 1024
2 BH:
Ваша конструкция хороша, когда есть возможность вставить в программу-отправитель EXPORT. А если ее нет, этой возможности? ПОэтому без динамичесого assign не обойтись!

_________________
- Ничего не поделаешь, - возразил Кот. - Все мы здесь не в своем уме - и ты, и я!
- Откуда вы знаете, что я не в своем уме? - спросила Алиса.
- Конечно, не в своем, - ответил Кот. - Иначе как бы ты здесь оказалась? :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, ноя 18 2004, 10:14 
Специалист
Специалист

Зарегистрирован:
Вт, авг 24 2004, 16:49
Сообщения: 186
Откуда: SAP ERP60
Пол: Мужской
Вот где-то попалось, но сам не проверял :(

доступ к переменным за областью видимости:

Code:
field-symbols: <x1_kop> type any.
assign ('(SAPMV45A)kopieren') to <x1_kop>.
if sy-subrc eq 0.
...
endif.



и для таблицы

Code:


types: begin of ls_pot .
        include structure bekpo.
types: end of ls_pot,
       lt_pot type table of ls_pot.
field-symbols: <lt_pot> type lt_pot.
    assign ('(SAPMM06E)pot[]') to <lt_pot>.
    if sy-subrc eq 0.
      loop at <lt_pot> into l_pot
        where ebelp eq ekpo-ebelp.
        l_pot-updkz = 'U'.
        modify <lt_pot> from l_pot.
      endloop.
    endif.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 01 2004, 10:34 
Гость
vvk написал(а):
Только осторожнее с данными конструкциями :wink:

TYPE-POOLS: mrm.

DATA dref TYPE REF TO data.
FIELD-SYMBOLS: <rbkpv> TYPE mrm_rbkpv.

CREATE DATA dref TYPE mrm_rbkpv.
ASSIGN dref->* TO <rbkpv>.
ASSIGN ('(SAPLMR1M)rbkpv') TO <rbkpv>.

...
UNASSIGN <rbkpv>.


Для 4.7 - это, имхо, самый правильный вариант.
Только забыл про WA.
Филд-символс таблицы - это таблица без хидерлайна.

Надо вот так (проверено неоднократно - работает; рекомендую занести в FAQ).
Вариант 1: использовать констркцию ASSIGN LOCAL COPY OF... TO...
Так сделано в REUSE ALV.
Вариант 2:
=========================
FUNCTION-POOL /A111/DB_TOOLS. "MESSAGE-ID ..

DATA:
g_t_tabdata type ref to data,
g_wa_tabdata type ref to data .
field-symbols: <g_t_tabdata> type table,
<g_wa_tabdata> .
=========================
Где-нибудь потом:
========================

create: data g_t_tabdata type table of (P_NAME OF_TYPE_TABLE),
data g_wa_tabdata type (P_NAME OF_TYPE_TABLE) .

assign: g_t_tabdata->* to <g_t_tabdata>,
g_wa_tabdata->* to <g_wa_tabdata>.
.................
.................
loop at <g_t_tabdata> into <g_wa_tabdata>.
.....
endloop.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 01 2004, 10:43 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Тьфу - когда надо, Гостем не пускает.
Когда не надо - пускает.
Я это был.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, дек 01 2004, 11:19 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, сен 23 2004, 18:43
Сообщения: 1556
Откуда: Москва
Anonymous написал(а):
create: data g_t_tabdata type table of (P_NAME OF_TYPE_TABLE),
data g_wa_tabdata type (P_NAME OF_TYPE_TABLE) .
endloop.


Сорри, описка.
"P_NAME OF_TYPE_TABLE" = "P_NAME_OF_TYPE_TABLE" .

Типа, параметр такой - имя типа.

_________________
Hе иди по течению, не иди против течения - иди поперек него, если хочешь достичь берега.
Слова Ванталы. Дела Ванталы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование таблицы другой программы
СообщениеДобавлено: Ср, дек 01 2004, 16:30 
Гость
Manticore написал(а):
Уважаемые!

Напомните, плз, как можно использовать таблицу другой программы. Ну то есть например в ФМ внутреннюю таблицу вызывающей программы. Помню, что был такой механизм с FIELD-SYMBOLS, но в точности не вспомнить!


Если речь идет конкретно про ФМ , то достаточно
1. в закладку "Таблицы" вставить имя , например T_INTERNAL.
2. вызов из программы
TABLES
T_INTERNAL = p_it ", где p_it ваша внутренняя таблица.
3. В теле ФМ:

*" TABLES
*" T_INTERNAL
.....................
DATA: c_index type I,
begin of t_names occurs 0,
fname type fieldname,
end of t_names.
DATA : FIELDTYPE(1).

FIELD-SYMBOLS: <fs_tab>.
................
if i_with_header eq 'X'.
read table t_names index c_index.
assign component t_names-fname of structure t_internal
to <fs_tab>.
else.
assign component c_index of structure t_internal to <fs_tab>.
endif.
check sy-subrc eq 0.
DESCRIBE FIELD <fs_tab> TYPE FIELDTYPE.
case FIELDTYPE.
..........................................


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения: Re: Использование таблицы другой программы
СообщениеДобавлено: Ср, дек 01 2004, 19:02 
Гость
Anonymous написал(а):
DATA: c_index type I,
begin of t_names occurs 0,
fname type fieldname,
end of t_names.
DATA : FIELDTYPE(1).

FIELD-SYMBOLS: <fs_tab>.
................
if i_with_header eq 'X'.
read table t_names index c_index.
assign component t_names-fname of structure t_internal
to <fs_tab>.
else.
assign component c_index of structure t_internal to <fs_tab>.
endif.
check sy-subrc eq 0.
DESCRIBE FIELD <fs_tab> TYPE FIELDTYPE.
case FIELDTYPE.
..........................................


Если уж так извращаться, то тогда уж лучше использовать
DESCRIBE FIELD STRUCT INTO ...
Code:
DATA: T_TD TYPE SYDES_DESC .

DESCRIBE FIELD t_table INTO T_TD.
loop at t_td.
.....
endloop.


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

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


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

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


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

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