Текущее время: Сб, июл 26 2025, 04:07

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 13:41 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, авг 29 2011, 15:55
Сообщения: 91
Пол: Мужской
Доброго всем дня.
Пишу процедуру поиска данных из одной таблицы в другой таблице. Примерно так:
Code:
LOOP AT lt1 ASSIGNING <fs_t1>.
  READ TABLE lt2 FROM <fs_t1> ASSIGNING <fs_t2>.
  IF sy-subrc = 4.
    " похожей записи нет
  ENDIF.
ENDLOOP.

Таблицы lt1 и lt2 содержат по одной записи. Структуры таблиц одинаковые. Записи по значениям полей НЕ СОВПАДАЮТ.
READ TABLE возвращает 0, т.е. строка найдена. При просмотре в отладчике значений <fs_t1> и <fs_t2> они отличаются.
Почему же так происходит?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 13:59 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Если вы хотите найти в lt2 строку идентичную lt1, то неверно пользуетесь опцией FROM.
она предназначена для другого
Цитата:
... [FROM idx1] [TO idx2]


Effect

These additions have the effect that only table rows from row number idx1, or up to row number idx2, are taken into account in the table index used.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:06 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, авг 29 2011, 15:55
Сообщения: 91
Пол: Мужской
bossjohn написал(а):
Если вы хотите найти в lt2 строку идентичную lt1, то неверно пользуетесь опцией FROM.
она предназначена для другого

А как же READ TABLE itab FROM wa ?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:14 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
swd написал:
bossjohn написал(а):
Если вы хотите найти в lt2 строку идентичную lt1, то неверно пользуетесь опцией FROM.
она предназначена для другого

А как же READ TABLE itab FROM wa ?

Упс, прошу прощения, был не внимателен и написал для LOOP :oops:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:20 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июл 15 2009, 05:55
Сообщения: 174
Откуда: Мегион - > СПб
Пол: Мужской
Заголовок: READ TABLE FROM

swd написал:
Таблицы lt1 и lt2 содержат по одной записи. Структуры таблиц одинаковые. Записи по значениям полей НЕ СОВПАДАЮТ.


По значениям каких полей не совпадают. Запись FROM находит по ключу, если ключ явно не объявлен, то комбинация всех clike полей.

_________________
Ничто так не заразительно, как смех начальника...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:28 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
LinevskiySV написал:
Заголовок: READ TABLE FROM

swd написал:
Таблицы lt1 и lt2 содержат по одной записи. Структуры таблиц одинаковые. Записи по значениям полей НЕ СОВПАДАЮТ.


По значениям каких полей не совпадают. Запись FROM находит по ключу, если ключ явно не объявлен, то комбинация всех clike полей.

+1
покажите как объявляли таблицы и что в них содержится


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:34 
Начинающий
Начинающий

Зарегистрирован:
Пн, сен 26 2011, 08:36
Сообщения: 16
Пол: Мужской
Code:
REPORT  TEST.
TYPES: begin of t1,
        num type i,
        text(5) type c,
       end of t1.
data: lt1 type SORTED TABLE OF t1 with UNIQUE key num,
      wa1 like line of lt1,
      lt2 type  SORTED TABLE OF t1 with UNIQUE key num,
      wa2 like line of lt2.
wa1-num = 1.
wa1-text = 'text1'.
append wa1 to lt1.
wa2-num = 2.
wa2-text = 'text2'.
append wa2 to lt2.
FIELD-SYMBOLS: <fs_t1> like line of lt1,
               <fs_t2> like line of lt2.
LOOP AT lt1 ASSIGNING <fs_t1>.
  READ TABLE lt2 FROM <fs_t1> ASSIGNING <fs_t2>.
  IF sy-subrc <> 0.
    write: / 'Похожей записи нет'.
  ELSE.
    write: / 'Записи похожи'.
  ENDIF.
ENDLOOP.

Сравнивается ключ...если поставить num в обоих таблицах 1, то на экран выведется 'Записи похожи', если разный ключ, то 'Похожей записи нет'. Хотя остальные поля и отличаются.


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

Зарегистрирован:
Пн, авг 29 2011, 15:55
Сообщения: 91
Пол: Мужской
Цитата:
По значениям каких полей не совпадают. Запись FROM находит по ключу, если ключ явно не объявлен, то комбинация всех clike полей.

Таблица содержит столбцы:
- дата начала
- дата конца
- сумма без ндс
- сумма ндс
- сумма с ндс
Записи отличаются по суммовым полям, но совпадают по датам.
Все поля не являются ключевыми.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:38 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
swd написал:
Цитата:
По значениям каких полей не совпадают. Запись FROM находит по ключу, если ключ явно не объявлен, то комбинация всех clike полей.

Таблица содержит столбцы:
- дата начала
- дата конца
- сумма без ндс
- сумма ндс
- сумма с ндс
Записи отличаются по суммовым полям, но совпадают по датам.
Все поля не являются ключевыми.

Вот именно об этом и писал LinevskiySV
суммовое поле в данном случае не clike поле и не влияет на результат.


Последний раз редактировалось bossjohn Ср, дек 14 2011, 14:48, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:44 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
swd, а у вас всегда будет по одной записи в таблицах? А то код, как бы это помягче, не самый оптимальный с точки зрения производительности ;)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:46 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, авг 29 2011, 15:55
Сообщения: 91
Пол: Мужской
Цитата:
суммовое поле в данном случае не clike поле и не влияет на результат.

В таком случае как его таковым сделать? Структура таблиц формируется мной программно. Далее туда отбираются данные для сравнения из физической таблицы по заданным критериям.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:53 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
swd написал:
Цитата:
суммовое поле в данном случае не clike поле и не влияет на результат.

В таком случае как его таковым сделать? Структура таблиц формируется мной программно. Далее туда отбираются данные для сравнения из физической таблицы по заданным критериям.

таковым его не сделать, ибо
Цитата:
clike -> Character-type (c, d, n, t, string and character-type flat structures); in non- Unicode programs also x, xstring and any flat structures

может пересмотреть подход к решению задачи ибо
Пономарев Артем написал:
swd, код, как бы это помягче, не самый оптимальный с точки зрения производительности ;)

?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 14:59 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, авг 29 2011, 15:55
Сообщения: 91
Пол: Мужской
Пономарев Артем написал:
swd, а у вас всегда будет по одной записи в таблицах? А то код, как бы это помягче, не самый оптимальный с точки зрения производительности ;)

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 15:07 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
swd, а вы опишите задачу. Потому как "структура таблиц формируется мной программно" намекает, что не все так просто.

А предложения обычные. HASH/SORTED использовать, как первый шаг. Или BINARY SEARCH.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: READ TABLE FROM
СообщениеДобавлено: Ср, дек 14 2011, 15:31 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, авг 29 2011, 15:55
Сообщения: 91
Пол: Мужской
Пономарев Артем написал:
swd, а вы опишите задачу. Потому как "структура таблиц формируется мной программно" намекает, что не все так просто.
А предложения обычные. HASH/SORTED использовать, как первый шаг. Или BINARY SEARCH.

Есть 2 набора записей, выбираемые из одной таблицы. Список отбираемых полей для разных видов объектов лежит в настроечной таблице. Там же у каждого поля есть признак, ключевое оно или нет (к ключевым полям таблицы словаря отношения не имеет). Задача - сравнить эти 2 набора и сформировать таблицу сравнения в виде:
- значения ключевых полей (ключевых - по данным настроечной таблицы)
- вид изменения (запись добавлена, удалена, изменена).
Если бы надо было сравнивать записи таблицы из словаря, можно было бы воспользоваться методом cl_reca_storable=>get_change_indicator. Но в данном случае список полей берется из таблицы настройки. Поэтому и приходится создавать структуру таблицы программно (с помощью cl_alv_table_create=>create_dynamic_table) и изобретать что-то свое для сравнения... Ну или может есть нечто типовое для таких случаев, а я чего-то не знаю. :)


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

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


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

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


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

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