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

Часовой пояс: 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 часа


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

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


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

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