Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE38 - ABAP Редактор => Тема начата: Паганель от Декабрь 30, 2008, 02:11:57 pm
-
field-symbols: <fs_aktiv> type any.
может кто-то пояснить начинаещему абаперу :) простыми словами что есть сие, или ссылку даст на нормальное описание
-
field-symbols: <fs_aktiv> type any.
может кто-то пояснить начинаещему абаперу :) простыми словами что есть сие, или ссылку даст на нормальное описание
Ну <fs_aktiv> может ссылаться в операторе ASSIGN на любую переменную, любого типа, любую структуру и т.д. В общем, типа на что надо на то по ходу и с делают ссылку.
-
В общем чтобы снова не вспоминать, как достучаться до таблиц через field-symbols, небольшой примерчик. Из концепции, в замещениях FI, нужно было дотянуться до позиций документов ММ. В принципе как бы ясно что в контексте выполнения данные находятся в структурах MSEG и XMSEG, собственно сама таблица позиций это XMSEG, откуда знаю, ну скажем так опыт, так вот есть замещение, сделанное по принципу из этой темы: http://sapforum.biz/index.php/topic,57.0.html (Замещение контрольного счета в MIRO). В этом замещении чтобы получить данные позиций документа ММ, к которому создается документ FI, нужно сделать следующее:
DATA: l_mseg LIKE mseg,
lt_mseg LIKE mseg OCCURS 1 WITH HEADER LINE.
FIELD-SYMBOLS: <fs_mseg> TYPE ANY TABLE.
ASSIGN ('(SAPMM07M)xmseg[]') TO <fs_mseg>.
lt_mseg[] = <fs_mseg>[].
UNASSIGN <fs_mseg>.
Код можно у упростить, но я предпочитаю сразу же полученные данные копировать в свою локальную структуру, ссылку тут же освобождать и дальше уже без проблем работать с локальными данными. В общем после этого кода, в lt_mseg имеем позиции документа материала.
-
Не мог бы ты подробнее обьяснить конструкцию
ASSIGN ('(SAPMM07M)xmseg[]')
-
Не мог бы ты подробнее обьяснить конструкцию
ASSIGN ('(SAPMM07M)xmseg[]')
Получает ссылку на внутреннюю таблицу объявленную в программе SAPMM07M. Т.е. фактически обходится межмодульная защита данныъ кода. В принципе можно с полученной ссылкой сразу и работать, без копирования ее в lt_mseg[], но этим можно нарушить данные программы SAPMM07M и получить просто мифические сбои в работе, поэтому я все таки рекомендую после получения ссылки данные копировать во внутреннюю структуру и уже дальше работать со своей переменной.
-
вау, то есть это похоже на tPerson.SomeMetod() или tPerson.Address[] (масив, табличка),
круто, спасибо ....
-
вау, то есть это похоже на tPerson.SomeMetod() или tPerson.Address[] (масив, табличка),
круто, спасибо ....
Не знаю похоже ли это на то что ты написал ::) но такой штукой пользоваться можно, но осторожно, так как мало ли что будет при апгрейдах на новые версии...
-
Не знаю похоже ли это на то что ты написал ::) но такой штукой пользоваться можно, но осторожно, так как мало ли что будет при апгрейдах на новые версии...
Будет - проверено ;D
-
отлично,будем пользоватся, век живи- век учись .....
-
2 Паганель: про использование еще можно посмотреть последний пост про оптимизацию. Чуть позже опишу как работать, когда <fs_aktiv> в твоем первом посте - рабочая область для работы со внутренними таблицами.
-
Спасибо Дима, жду с нетерпением .... :)
Так я вроде ж как про таблицы и показал?! Или ты имеешь в виду объявление вместо FIELD-SYMBOLS: <fs_mseg> TYPE ANY TABLE., делать такую штуку как:
DATA: lt_mseg LIKE mseg OCCURS 1 WITH HEADER LINE.
FIELD-SYMBOLS: <fs_mseg> STRUCTURE mseg DEFAULT lt_mseg.
ASSIGN ('(SAPMM07M)xmseg[]') TO <fs_mseg>.
LOOP AT lt_mseg.
* Чего надо делаем...
ENDLOOP.
UNASSIGN <fs_mseg>.
Или я что не так понял?
-
Так я вроде ж как про таблицы и показал?! Или ты имеешь в виду объявление вместо FIELD-SYMBOLS: <fs_mseg> TYPE ANY TABLE., делать такую штуку как:
DATA: lt_mseg LIKE mseg OCCURS 1 WITH HEADER LINE.
FIELD-SYMBOLS: <fs_mseg> STRUCTURE mseg DEFAULT lt_mseg.
ASSIGN ('(SAPMM07M)xmseg[]') TO <fs_mseg>.
LOOP AT lt_mseg.
* Чего надо делаем...
ENDLOOP.
UNASSIGN <fs_mseg>.
Или я что не так понял?
Все правильно ты показал. А я имел ввиду не про считывание из памяти, а про то, как работать с типом ANY, когда это Work area. Чуть позже, как отлажу на системе...
-
Угадал? :D
DATA wa2 TYPE c LENGTH 512.
FIELD-SYMBOLS <scarr2> TYPE scarr.
ASSIGN wa2 TO <scarr2> CASTING.
<scarr2>-carrid = '...'.
-
Угадал? :D
DATA wa2 TYPE c LENGTH 512.
FIELD-SYMBOLS <scarr2> TYPE scarr.
Почти :)
ASSIGN COMPONENT OF STRUCTURE ..., ну ты понял... ;)
Про динамику, когда с вн. таб. работаем, объявленной через FIELD-SYMBOL. На днях подниму, выложу, счас бы с этим гемором по замещениям оперативно разобраться. :D
P.S. Хех, вместо "Цитировать" кликнул поначалу "Изменить". Ничего не потер из твоего поста?
-
Все правильно ты показал. А я имел ввиду не про считывание из памяти, а про то, как работать с типом ANY, когда это Work area. Чуть позже, как отлажу на системе...
Ну как работать если нужна табличка, вроде бы понятно ... а вот если Work Area ... наверное есть какие-то секреты? :)
-
хакеры хр... хорошие ... :)
Вы лучше обьясните какая разница когда ANY используется для таблички и для воркареа ?
-
хакеры хр... хорошие ... :)
Вы лучше обьясните какая разница когда ANY используется для таблички и для воркареа ?
Для таблички не ANY. Все, в ближайшее время материал соберу, напишу.
-
Немного из засоленного. ;)
DATA: lt_table TYPE REF TO data.
FIELD-SYMBOLS: <gt_lvc_fieldcatalog> TYPE lvc_t_fcat, " Каталог полей
<gt_lvc_outtab> TYPE table, " Таблица
<ls_lvc_outtab> TYPE ANY, " Рабочая область
<lv_field_val> TYPE ANY. " Значение поля
* ..........Наш код........
* здесь же формируем <gt_lvc_fieldcatalog> для задания структуры динамически генерируемой вн. таблицы
* create dynamic table (according to fieldcatalog)
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING it_fieldcatalog = <gt_lvc_fieldcatalog>
IMPORTING ep_table = lt_table.
ASSIGN lt_table->* TO <gt_lvc_outtab>.
LOOP AT <gt_lvc_outtab> ASSIGNING <ls_lvc_outtab>.
............
* Если известно расположение поля (№44) относительно начала структуры
ASSIGN COMPONENT 44 OF STRUCTURE <ls_lvc_outtab> TO <lv_field_val>.
* Или, если известно имя поля (SUMM44):
ASSIGN COMPONENT 'SUMM44' OF STRUCTURE <ls_lvc_outtab> TO <lv_field_val>.
............
ENDLOOP.
-
Не претендую на оригинальность (сам недавно за ABAP взялся) но вот такой вариант имеет место быть
field-SYMBOLS <fs> type any table.
data l_t_spfli type TABLE OF spfli.
data l_s_spfli type spfli.
assign l_t_spfli to <fs>.
select single * into l_s_spfli from spfli.
insert l_s_spfli into table <fs>.
loop at <fs> INTO l_s_spfli.
write l_s_spfli-carrid.
endloop.
-
Не претендую на оригинальность (сам недавно за ABAP взялся) но вот такой вариант имеет место быть
Ну если начали то вот ветка оптимизации ABAP и там этот вопрос раскрыт более подробно зачем так делаеть лучше, ну и вообще веточка получилась полезной:
http://sapforum.biz/index.php/topic,174.msg1919.html#msg1919