Текущее время: Вс, июл 20 2025, 01:34

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Оптимизация RANGES
СообщениеДобавлено: Пт, ноя 24 2006, 19:38 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 08:36
Сообщения: 182
Откуда: Russia
Пол: Мужской
Всем привет.
Вопрос по оптимизации RANGES.
Итак имеем некий range, который содержит условия для выборки счетов из таблицы.
range получился путем считывания из своей настроечной таблицы, где настроены условия выбора сумм для расчета строк в отчете. Так как в разные строки могут входить одинаковые счета или их маски, то как в полученном RANGES удалить вхождение одной строки настройки в другую? Написал вот такую тестовую программку:
Code:
report test.
RANGES: r1 FOR GLT0-RACCT,                               
        r2 FOR GLT0-RACCT.                               
DATA: h LIKE glt0-racct,      " поле low                 
      DelRec(1).              " Флаг удаления записи     
                                                         
r1 = 'ICP1010++++++'.           APPEND r1.               
r1 = 'ICP10++++++++'.           APPEND r1.               
r1 = 'ICP1030++++++'.           APPEND r1.               
r1 = 'ICP1040++++++'.           APPEND r1.               
r1 = 'IEQ1070444444'.           APPEND r1.               
r1 = 'IBT10000000001999999999'. APPEND r1.               
                                                         
LOOP AT r1 WHERE option = 'CP' OR option = 'EQ'.         
  h = r1-low.                                           
  CLEAR: DelRec, r2[].                                   
  LOOP AT r1 INTO r2.                                   
    APPEND r2.                                           
    IF h IN r2 AND h <> r2-low.                         
      DelRec = 'X'.                                     
      EXIT.                                             
    ENDIF.                                               
    CLEAR: r2[].                                         
  ENDLOOP.                                               
  IF DelRec = 'X'.                                       
   DELETE r1.                                           
  ENDIF.                                                 
ENDLOOP.                                                 


Сия программа даже работает, хотя я неуверен в правильности самого подхода :) Пока прикидывал по записям вхождения для IEQ ICP и IBT
В переменную h сохраняю номер счтета из поля low , потом в цикле опять иду по ranges и проверяю входит ли h в range слепленный из текущий записи, если входит, то я удаляю строку в которой было h, ну программа простенькая, наверно и так все понятно :)
Ну так вот, например,сам оператор IF '1010++++++' IN 'ICP10++++++++' корректно отрабатывает или у него крышу сносит? :)
Если запустить эту программу, то она оставит в range две записи
'ICP10++++++++' и 'IBT10000000001999999999' , хотя казалось бы, что первая запись входит во вторую(может она еще по буквам как-то пытается сравнить :roll: )
Если запись 'ICP10++++++++' изменить на 'ICP101+++++++' , то пограмма благополучно вернет в ranges только запись с BT :)
Короче затупил под вечер или чего-то недопонимаю :)

_________________
С Уважением Серега


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, ноя 24 2006, 21:42 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Счетов вообще-то не так уж и много. Безо всякой оптимизации ranges можно считать все счета, им соответствующие, в отдельную таблицу, а потом воспользоваться FOR ALL ENTRIES IN.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 27 2006, 09:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Сергей Королев написал:
Безо всякой оптимизации ranges можно считать все счета,


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

R256 написал:
IF '1010++++++' IN

Плюсы как wildcards работают только справа от IN.

Реализовать, конечно, можно, но вариантов перебирать придётся довольно много OPTION = {EQ,NE,CP,NP,GE,LT,LE,GT}, SIGN = {I,E}.
Если нет, конечно, уже готового ФМ...


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

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


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

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


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

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