SAPфорум.RU
https://www.sapboard.ru/forum/

Ведение динамических таблиц
https://www.sapboard.ru/forum/viewtopic.php?f=13&t=86986
Страница 1 из 2

Автор:  Orgazm [ Вт, май 27 2014, 09:24 ]
Заголовок сообщения:  Ведение динамических таблиц

Добрый день, коллеги!
Возник небольшой затык: делаю транзакцию для ведения 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

Автор:  Programmer [ Вт, май 27 2014, 09:38 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

Сделайте дополнительно обычную таблицу, если ключ известен (статичен).
Потом можно будет использовать эту таблицу в качестве индекса.

Автор:  Orgazm [ Вт, май 27 2014, 09:41 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

Programmer написал(а):
Сделайте дополнительно обычную таблицу если ключ известен (статичен)
Потом можно будет использовать эту таблицу в качестве индекса.

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

Автор:  Programmer [ Вт, май 27 2014, 09:54 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

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?

Автор:  Orgazm [ Вт, май 27 2014, 10:13 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

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?

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

Автор:  broker.chelny [ Вт, май 27 2014, 10:14 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

А что мешает для таблицы <orig> определить ключи? Можно еще сделать ее sorted или hashed.

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

Автор:  Orgazm [ Вт, май 27 2014, 10:25 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

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

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

Автор:  LAT [ Вт, май 27 2014, 20:54 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

Orgazm написал:
Нужно сравнить две динамические таблицы, оригинальную <orig>, и ту которая в алв-гриде <alv>
А зачем делать 2 таблицы?

Автор:  Удав [ Ср, май 28 2014, 07:22 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

LAT написал(а):
А зачем делать 2 таблицы?

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

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

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

Автор:  LAT [ Ср, май 28 2014, 11:02 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

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

Автор:  olegbash [ Ср, май 28 2014, 12:10 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

Если создан объект словаря, то можно использовать ФМ CHANGEDOCUMENT_PREPARE_TABLES

Автор:  Человек [ Ср, май 28 2014, 14:03 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

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

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

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

Автор:  proga19 [ Ср, ноя 02 2022, 14:36 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

Подскажите, а как написать операцию удаления из динамической таблице (без ключа) ?
Например delete <dt> where (FIELD) = space....

Автор:  broker.chelny [ Чт, ноя 03 2022, 08:48 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

proga19 написал:
Подскажите, а как написать операцию удаления из динамической таблице (без ключа) ?
Например delete <dt> where (FIELD) = space....

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

Автор:  broker.chelny [ Чт, ноя 03 2022, 08:56 ]
Заголовок сообщения:  Re: Ведение динамических таблиц

Для сравнения 2 внутренних динамических таблиц я обычно использую поле-структуру с ключами.
Т.е. первым полем завожу структуру, а дальше уже остальные данные.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/