assign component abap что это

Assign component abap что это

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

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

Использование ASSIGN

Старший специалист

Зарегистрирован:
Пт, авг 24 2007, 11:29
Сообщения: 350

Следующая задача: Есть 10 ranges, есть табличка в которую входят имена этих ranges + сама структура типа ranges.
Хочу динамически заполнить мои 10 ranges.
Написал следующее:

NAME_RANGES = имя моиего 1 из 10 ranges.
Теперь нужно сделать APPEND моему NAME_RANGES.
Подскажите, пожалуйста как это сделать.

Директор

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской

field-symbols: type any table,
type any.
data: type ref to data.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.

Гуру-эксперт

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской

FIELD-SYMBOLS:
TYPE STANDARD TABLE,
TYPE ANY.

Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988

Следующая задача: Есть 10 ranges, есть табличка в которую входят имена этих ranges + сама структура типа ranges.
Хочу динамически заполнить мои 10 ranges.
Написал следующее:

Старший специалист

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 344
Пол: Мужской

field-symbols: type any table,
type any.
data: type ref to data.

растолкуйте что такое

Директор

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской

Я правда выше не объявил его, вернее объявил но не до конца.

data: ref type ref to data.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.

Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988

растолкуйте что такое

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей

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

Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…

Источник

Dynamic Programming with Field Symbols

Introduction

Field Symbols allows you to access content of variable to which its point to. This pointing to a variable is done using ASSIGN statement. Field Symbol does not store any value it simply point to the memory where variable value is store. Any operation to change value direct affects variable. Field symbols are different in a way that one field symbol can be assigned to different variable throughout the program life time and statement executed using field symbol will affect different variable depending on where it point to.

You can declare field symbols using

You can use ANY to define a generic field symbol which will then inherit properties of variable its assigned to or you can use a specific type to restrict assignment to compatible variable. This means that if you have field symbol defined as I (integer) and you try to assign it to any other kind of variable then you will get ‘type-incompatible’ syntax error.

ASSIGN

Assignment of field symbol is done using ASSIGN statement. Below is an example where I have declared a generic field symbol and assigned it different component of MARA work area.

Caution

Accessing field symbol before its assigned to a variable is something which will trigger runtime error ‘Field symbol has not yet been assigned’. An unassigned field symbol cannot be checked when you activate the program and because of this reason programs using field symbol, if checks are not done properly, often produce runtime error.

Whist using field symbols you have to take extra care to check if field symbol points to a variable before you start any operation on it. If you are accessing field symbol ASSIGN statement you must check of assignment has executed successfully.

Performance Gain

Field symbols can also be used to access internal table content and it particularly have performance advantage as content of table is not moved to workarea instead field symbol is simply pointed to right record.

Note that if you change content of field symbol after READ internal table statement or within LOOP you are modifying the content of field symbol as there is no work area.

Dynamic Stuff

ASSIGN COMPONENT statement has two variations which allows you to access field of workarea at runtime. In first variantion you can specify field name in terms of number. It’s like saying assign first (or second, third or so on) component of workarea to field symbol. In below code program simply access all component of work area within WHILE loop and exit when assignment fail, which it will once it has accessed all component.

In second variation, which I find more useful, you can specify component name instead of number to access that field of work area.

Источник

Assign component abap что это

SAP NetWeaver AS ABAP Release 752, ©Copyright 2017 SAP AG. All rights reserved.

Structures are data objects (comprised of components of any data type) that are saved in sequence in the memory. The data type of a structure is a structured type or a structure defined in the ABAP Dictionary.

Types of Structures

Structures are named as follows (depending on the type of the component):

A structure that contains static or dynamic components is (formally) a static or dynamic data object, respectively.

The following figure illustrates a deep structure.

The term «nested structure» must not be confused with the term «deep structure». A nested structure is flat if it only contains flat components and subcomponents. A nested structure is deep when it has at least one deep component or subcomponent.

DATA:
BEGIN OF struct,
name TYPE c LENGTH 10 VALUE ‘SCARR’,
scarr TYPE scarr,
END OF struct.

SELECT SINGLE *
FROM scarr
WHERE carrid = ‘LH’
INTO CORRESPONDING FIELDS OF @struct-scarr.

cl_demo_output=>new(
)->write_data( struct-name
)->write_data( struct-scarr-carrid
)->write_data( struct-scarr-carrname
)->display( ).

Deep structure The following structure contains deep components only.

DATA:
BEGIN OF struct,
text TYPE string,
hex TYPE xstring,
tab TYPE STANDARD TABLE OF i WITH EMPTY KEY,
dref TYPE REF TO i,
iref TYPE REF TO if_demo_output,
END OF struct.

SELECT carrid, carrname
FROM scarr
INTO @DATA(wa).
cl_demo_output=>write( | < wa-carrid WIDTH = 5
>< wa-carrname >| ).
ENDSELECT.
cl_demo_output=>display( ).

DATA(dref) = NEW scarr( ).

SELECT *
FROM scarr
INTO @dref->*.
cl_demo_output=>write( |< dref->carrid WIDTH = 5
>< dref->carrname >| ).
ENDSELECT.
cl_demo_output=>display( ).

Das folgende Beispiel zeigt, dass sich eine flache Struktur mit rein zeichenartigen Komponenten sowohl wie eine Struktur als auch wie ein zeichenartiges Datenobjekt verhalten kann.

DATA:
BEGIN OF struct,
col1 TYPE c LENGTH 5 VALUE ‘12345’,
col2 TYPE c LENGTH 5 VALUE ‘abcde’,
END OF struct.

cl_demo_output=>new(
)->write_data( struct
)->write_data( struct-col1
)->write_data( struct-col2
)->write_data( CONV string( struct )
)->display( ).

Using Deep Structures

The data content of deep structures is not saved in full within the memory bounds of the structure and the deep components are instead just references to the actual data. This means that some general restrictions apply when using deep structures (unlike flat structures):

These restrictions are particularly important if single components in existing flat character-like structures are converted to strings, which makes the entire structure deep.

The following two deep structures are not compatible and cannot be converted to each other.

DATA:
BEGIN OF struct1,
col1 TYPE c LENGTH 4,
col2 TYPE REF TO data,
END OF struct1,
BEGIN OF struct2,
col1a TYPE c LENGTH 2,
col1b TYPE c LENGTH 2,
col2 TYPE REF TO data,
END OF struct2.

struct1 = struct2. «syntax error

Using Deep ABAP Dictionary Structures

The same restrictions apply to deep structures defined in ABAP Dictionary as to deep structures defined in ABAP programs. Further restrictions apply only when the following language elements forbidden in classes are used (only flat ABAP Dictionary structures can be specified in classes):

The substructures of nested structures and structured components of classes or interfaces can be declared as boxed components.

This translation does not reflect the current version of the documentation.

Continue
Boxed Components
Examples of structures

Источник

ABAP Blog

Все о разработке в решениях от SAP

ABAP Blog

Все о разработке в решениях от SAP

Ссылки

Цитаты

Прежде всего следует узнать, не что система выполняет, а над ЧЕМ она это выполняет!

Бертран Мейер

Новое

Последние комментарии

Динамическое программирование в ABAP

На днях довелось прослушать курс BC402 в рамках программы «Вечерний ABAP», хочется выразить благодарность компании SAP за такую возможность, а также отметить профессионализм преподавателя, в роли которого выступал Василий Ковальский. Сам курс посвящен обзору довольно обширных тем, которые, так или иначе, пригодятся всем ABAP программистам в их повседневной деятельности. Одной из рассматриваемых тем данного курса была возможность динамического программирования в ABAP, о которой и хотелось бы поговорить далее.

Ключевой особенностью программного обеспечения является его способность к изменению и приспособлению к меняющимся условиям. Одним из инструментов обеспечивающих такое приспособление является динамическое программирование.

В ABAP под динамическим программированием могут пониматься следующие вещи:

В данной статье будут рассмотрены последние 2 способа, информацию по остальным можно получить из официальной справки, а также из курса BC402.

Для динамического программирования необходимо понять, что такое ссылочные переменные и указатели на поля (field symbols) и в чем их отличия.

Для разработчиков, только начинающих изучение ABAP термин field-symbols часто может вызывать путаницу. Те из них, кто работал с языками C/C++, зачастую путают их с типом указателя (Pointer). Но field-symbols не являются указателями на область памяти, они лишь являются указателями на переменную или объект данных которые являются видимыми в текущем блоке кода (можно использовать термин alias).

На следующем рисунке хорошо видны основные отличия.

У нас есть три объекта:

Обобщенные типы

В дополнение к стандартным типам данных, в ABAP существует так же ряд обобщенных типов, использование которых возможно только в случае: формальных параметров методов (функций, процедур), field-symbols и ссылочных переменных. Часто используя динамическое программирование, приходится иметь дело с заранее не известными типами данных, для этого нужно знать каким образом их можно представить в виде обобщенных типов.

Перечень таких типов определен ниже:

Тип Описание
any Любой тип данных
any table Любая внутренняя таблица
clike Обобщенный символьный тип (c, d, n, t, string, а так же плоские структуры, состоящие из элементов символьных типов)
csequence Текстовая последовательность (c, string)
data Любой тип данных (аналогично any в случае объявления TYPE data, если объявлять TYPE REF TO DATA, будут подразумеваться ссылки на данные, но не объектные ссылки). Данный тип может быть использован в ссылочных переменных (рассмотрено ниже).
decfloat Числовой тип с плавающей запятой, один из следующих: decfloat16, decfloat34.
hashed table Любая хеш таблица
index table Любая стандартная или сортированная внутренняя таблица.
numeric Числовой тип (i (b, s), p, decfloat16, decfloat34, f)
object Любой объектный тип
simple Любой элементарный тип данных включая плоские структуры состоящие из символьных элементов.
sorted table Любая сортированная таблица
standard table Любая стандартная таблица
table Аналогично предыдущему
xsequence Байтовая последовательность (x, xstring)

Предположим мы пишем некую процедуру, в параметрах которой хотели бы видеть любую сортированную или стандартную таблицу, сделать это можно с помощью обобщенного типа index table:

Источник

Assign component abap что это

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

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

Обработка данных динамической структуры

Читайте также:  что делать если в туалет упала пластмассовая
Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

Есть функция которая обрабатывает таблицы, передаваемых в качестве парамтера

FUNCTION ZSP_FM_MAKE.
*»———————————————————————-
*»*»Локальный интерфейс:
*» CHANGING
*» REFERENCE(TBVIEW) TYPE STANDARD TABLE OPTIONAL
*»———————————————————————-
DATA: rfTable TYPE REF TO Cl_Abap_TableDescr,
rfField TYPE REF TO Cl_Abap_StructDescr,
rcList TYPE Abap_Compdescr.

Почетный гуру

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3030
Откуда: Москва

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

Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

Почетный гуру

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3030
Откуда: Москва

FUNCTION ZSP_FM_MAKE.
*»———————————————————————-
*»*»Локальный интерфейс:
*» CHANGING
*» REFERENCE(TBVIEW) TYPE STANDARD TABLE OPTIONAL
*»———————————————————————-
DATA: rfTable TYPE REF TO Cl_Abap_TableDescr,
rfField TYPE REF TO Cl_Abap_StructDescr,
rcList TYPE Abap_Compdescr.

FIELD-SYMBOLS: TYPE any,
TYPE any.

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

Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

В недостатке знаний и навыков общения с ABAP-ом
Спасибо большое.

Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

FIELD-SYMBOLS: TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any.

Почетный гуру

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3030
Откуда: Москва

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

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

Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

FUNCTION ZSP_FM_MAKE.
*»———————————————————————-
*»*»Локальный интерфейс:
*» IMPORTING
*» VALUE(STWHAT) TYPE STRING
*» VALUE(STFIND) TYPE STRING
*» VALUE(STLOAD) TYPE STRING
*» VALUE(STSAVE) TYPE STRING
*» CHANGING
*» REFERENCE(TBLOAD) TYPE STANDARD TABLE
*» REFERENCE(TBSAVE) TYPE STANDARD TABLE
*»———————————————————————-

FIELD-SYMBOLS: TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any.

Или установить ключ отдельно командой ДО цикла возможно

Читайте также:  Что значит флюиды в человеке
Почетный гуру

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3030
Откуда: Москва

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

Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

DATA: spfli_tab TYPE SORTED TABLE OF spfli
WITH UNIQUE KEY carrid connid,
spfli_key LIKE LINE OF spfli_tab.

FIELD-SYMBOLS TYPE spfli.

SELECT *
FROM spfli
INTO TABLE spfli_tab
WHERE carrid = ‘LH’.

spfli_key-carrid = ‘LH’.
spfli_key-connid = ‘0400’.

Почетный гуру

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3030
Откуда: Москва

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

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

Специалист

Зарегистрирован:
Вт, фев 15 2011, 15:02
Сообщения: 122

Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

Ассистент

Зарегистрирован:
Пт, янв 25 2013, 17:37
Сообщения: 44

FUNCTION ZSP_FM_MAKE.
*»———————————————————————-
*»*»Локальный интерфейс:
*» IMPORTING
*» VALUE(STWHAT) TYPE STRING
*» VALUE(STFIND) TYPE STRING
*» VALUE(STLOAD) TYPE STRING
*» VALUE(STSAVE) TYPE STRING
*» CHANGING
*» REFERENCE(TBLOAD) TYPE STANDARD TABLE
*» REFERENCE(TBSAVE) TYPE STANDARD TABLE
*»———————————————————————-

FIELD-SYMBOLS: TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any,
TYPE Any.

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

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

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

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

Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…

Источник

Сказочный портал