Текущее время: Пт, апр 19 2024, 16:53

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Ведение динамических таблиц
СообщениеДобавлено: Вт, май 27 2014, 09:24 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 181
Пол: Мужской
Добрый день, коллеги!
Возник небольшой затык: делаю транзакцию для ведения 5 похожих таблиц.
Внутренняя таблица генерируется динамически, и для ведения необходимо провести сравнение между начальными данными и изменениями, внесенными пользователем, и на этом месте я заткнулся.

Нужно сравнить две динамические таблицы: оригинальную (<orig>), и ту, которая в алв-гриде (<alv>).
Чтобы сравнить, нужно найти такую же строчку в оригинальной, однако я не смог сделать read table <orig> where id = блаблабла, потому что таблица динамическая, компилятор не знает, что там есть такое поле.

Code:
form GET_DIFFERENCE .

FIELD-SYMBOLS: <wa_alv> type any,
               <wa_orig> type any,
               <id> type zcar_par_id.

data: wa_alv type ref to data,
      wa_orig type ref to data.

create data wa_alv like line of <alv>.
assign wa_alv->* to <wa_alv>.

create data wa_orig like line of <orig>.
assign wa_orig->* to <wa_orig>.

loop at <alv> ASSIGNING <wa_alv>.

  clear <wa_orig>.
*  assign COMPONENT 'ID' of STRUCTURE <wa_alv> to <id>.
  read table <orig> from <wa_alv> ASSIGNING <wa_orig>.

endloop.


endform.                    " GET_DIFFERENCE

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Вт, май 27 2014, 09:38 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 07 2013, 22:18
Сообщения: 61
Сделайте дополнительно обычную таблицу, если ключ известен (статичен).
Потом можно будет использовать эту таблицу в качестве индекса.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Вт, май 27 2014, 09:41 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 181
Пол: Мужской
Programmer написал(а):
Сделайте дополнительно обычную таблицу если ключ известен (статичен)
Потом можно будет использовать эту таблицу в качестве индекса.

у всех таблиц один ключ - поле ID.
сделать внутреннюю таблицу с полем ID и потом как? вытаскивать по ID и сравнивать записи через ASSIGN COMPONENT?

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Вт, май 27 2014, 09:54 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, авг 07 2013, 22:18
Сообщения: 61
Code:
read table <orig> from <wa_alv> ASSIGNING <wa_orig>.

Вот эту конструкцию перепишите на: (код приблизительный, просто идея)
Code:
read table lt_index  ASSIGNING <lf_index> where id = bla-bla-bla.
lf_index = sy-tabix.
read table <orig> ASSIGNING <wa_orig> index lf_index.

А потом уже сравнивайте две динамические структуры в цикле
Цитата:
через ASSIGN COMPONENT?


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

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 181
Пол: Мужской
Programmer написал(а):
Code:
read table <orig> from <wa_alv> ASSIGNING <wa_orig>.

Вот эту конструкцию перепишите на: (код приблизительный, просто идея)
Code:
read table lt_index  ASSIGNING <lf_index> where id = bla-bla-bla.
lf_index = sy-tabix.
read table <orig> ASSIGNING <wa_orig> index lf_index.

А потом уже сравнивайте две динамические структуры в цикле
Цитата:
через ASSIGN COMPONENT?

Но ведь индексы не обязательно будут совпадать в оригинальной и измененной, пользователь может пользоваться и сортировкой и допустим удалить+вставить запись, тогда индексы поедут

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Вт, май 27 2014, 10:14 
Специалист
Специалист

Зарегистрирован:
Чт, дек 16 2010, 15:23
Сообщения: 131
Откуда: Набережные Челны
Пол: Мужской
А что мешает для таблицы <orig> определить ключи? Можно еще сделать ее sorted или hashed.

Ну или сделать так
Code:
READ TABLE <orig> WITH KEY ('ID') = <f_any>.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Вт, май 27 2014, 10:25 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, июн 19 2012, 08:33
Сообщения: 181
Пол: Мужской
broker.chelny написал:
Ну или сделать так
Code:
READ TABLE <orig> WITH KEY ('ID') = <f_any>.

Воот, то что нужно, спасибо. Не допер что параметр в скобках и кавычках надо писать

_________________
crusty написал(а):
Логистика - понятие растяжимое


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Вт, май 27 2014, 20:54 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Orgazm написал:
Нужно сравнить две динамические таблицы, оригинальную <orig>, и ту которая в алв-гриде <alv>
А зачем делать 2 таблицы?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Ср, май 28 2014, 07:22 
Почетный гуру
Почетный гуру
Аватара пользователя

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

Для определения удаленных записей, к примеру ;)

Orgazm написал:
Внутренняя таблица генерируется динамически, и для ведения необходимо провести сравнение между начальными данными, и изменениями, внесенными пользователем

Зачем для этого сравнивать 2 таблицы?
Вот похожая тема

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Ср, май 28 2014, 11:02 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Удав написал(а):
Зачем для этого сравнивать 2 таблицы?
Вот похожая тема
Да, я как раз хотел предложить вместо 2-х таблиц поле-индикатор :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Ср, май 28 2014, 12:10 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
Если создан объект словаря, то можно использовать ФМ CHANGEDOCUMENT_PREPARE_TABLES


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Ср, май 28 2014, 14:03 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 22 2010, 19:53
Сообщения: 34
Orgazm написал:
Добрый день коллеги!
Возник небольшой затык: делаю транзакцию для ведения 5 похожих таблиц.
Внутренняя таблица генерируется динамически, и для ведения необходимо провести сравнение между начальными данными, и изменениями, внесенными пользователем, и на этом месте я заткнулся.

Нужно сравнить две динамические таблицы, оригинальную <orig>, и ту которая в алв-гриде <alv>
Чтобы сравнить, нужно найти такую строчку в оригинальной, однако я не сделать read table <orig> where id = блаблабла, потому что таблица динамическая, компилятор не знает что там есть такое поле.

http://wiki.scn.sap.com/wiki/display/Sn ... c+Approach


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Ср, ноя 02 2022, 14:36 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, ноя 08 2018, 14:09
Сообщения: 88
Откуда: Челябинск
Пол: Мужской
Подскажите, а как написать операцию удаления из динамической таблице (без ключа) ?
Например delete <dt> where (FIELD) = space....


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Чт, ноя 03 2022, 08:48 
Специалист
Специалист

Зарегистрирован:
Чт, дек 16 2010, 15:23
Сообщения: 131
Откуда: Набережные Челны
Пол: Мужской
proga19 написал:
Подскажите, а как написать операцию удаления из динамической таблице (без ключа) ?
Например delete <dt> where (FIELD) = space....

Очень просто, ищем через READ TABLE, далее удаляем по индексу.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ведение динамических таблиц
СообщениеДобавлено: Чт, ноя 03 2022, 08:56 
Специалист
Специалист

Зарегистрирован:
Чт, дек 16 2010, 15:23
Сообщения: 131
Откуда: Набережные Челны
Пол: Мужской
Для сравнения 2 внутренних динамических таблиц я обычно использую поле-структуру с ключами.
Т.е. первым полем завожу структуру, а дальше уже остальные данные.


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

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


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

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


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

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