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/ |