Всем привет.
Вопрос по оптимизации 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' , хотя казалось бы, что первая запись входит во вторую(может она еще по буквам как-то пытается сравнить

)
Если запись 'ICP10++++++++' изменить на 'ICP101+++++++' , то пограмма благополучно вернет в ranges только запись с BT
Короче затупил под вечер или чего-то недопонимаю
