Как быстро найти строку в ТЗ по нескольким колонкам? #169676


#0 by TDI
необходимо найти строку в ТЗ, по заданным условиям, т.е. чтобы колонка1, колонка2, колонка3, колонка4....удовлетворяли некоторому условию... Простым перебором получается очень долго, в ТЗ 10000 строк... Через НайтиСтроку задаётся поиск только по одной колонке... Как ещё можно ?
#1 by GrayT
Давно была ветка по этому поводу, приводилось множество алгоритмов с замером производительности. В поиск.
#2 by Директор PR отдела
Отсортировать по колонке первого поиска. ННС=0; ТЗ.НайтиЗначение Выбрать значения с до пока ВыбЗанчение <> ТЗ.Значение или пока не совпадёт по всем параметрам.
#3 by Парижская фанера
Тогда уж не по колонке "первого поиска", а по колонке обладающей наибольшей селективностью.
#4 by fabrikant
Или добавить индексную колонку и искать по ней
#5 by TDI
всмысле индексную колонку?
#6 by Ангел-Хоронитель
создаешь 2 ТЗ, одна рабочая, вторая для поиска, заполняешь одинаково, причем одна колонка должна быть типа индексная (1,2,3,...). поиск проводишь по второй сортировкой и перебором. в первой для перехода пользуешься "индексом".
#7 by Парижская фанера
фпрямом. Освоешь индексы - можешь требовать от 2500$...
#8 by Директор PR отдела
А это так оптимальней, но не всегда полезно. Индексы тоже не всегда требуется делать :-)
#9 by smaharbA
Тебе данные в ней надо получить или номер строки ?
#10 by Мулька
Вообще не делаю. Делаю колонку поиска-Ключ, где ее значения это Кол1+Кол2+КолN. По ключу и ищу всегда
#11 by Guk
А зачем 2 ТЗ?...
#12 by Бешеная Нога
я тоже
#13 by Бешеная Нога
это и есть индексная колонка
#14 by Ангел-Хоронитель
а первая, рабочая, юзером сортируется, как ему нужно, а со второй я уже и извращаюсь.
#15 by smaharbA
Особенно когда условие начало>тз.колонка1>конец и данные не число
#16 by Ангел-Хоронитель
плохой вариант, а если юзер решит искать не по всем, а только по некоторым?
#17 by Парижская фанера
В смысле - "юзером сортируется"?
#18 by Мулька
Как правило набор комбинаций ограничен. Все можно предусмотреть в коде
#19 by smaharbA
Если условие точное то вообще одно действие...
#20 by Guk
А как сортировка юзером, может изменить состав индекса?...
#21 by Ангел-Хоронитель
ну , блин.... сделал юзер себе ТЗ, отсортировал, как ему нужно. потом решил значение найти, а ему сортировка сбилась....
#22 by Ангел-Хоронитель
а она не может изменить..... я же сказал, типа "индексная"....
#23 by Guk
Вона оно как у вас...
#24 by Ангел-Хоронитель
ну я сталкивался с вариантом в 7000 строк и 8 колонок.... все не предусмотреть :)
#25 by Ангел-Хоронитель
ага, такой вот тяжелый клинический случай :)
#26 by Simod
Можно воспользоваться таким алгоритмом: 1. В ТЗ производится поиск по перечню колонок соответствующих значений и определяется максимальное значение строки ("максимальная глубина"); 2. Осуществляется перебор ТЗ с "максимальной глубины" до конца таблицы с проверкой значений поиска. Порядок проверки значений следует проводить от наиболее часто изменяющегося к наименее (т.е. лучше "Номенклатура, Фирма", чем "Фирма, Номенклатура"). Из достоинств следует отметить отсутствие необходимости сортировки, т.к. поиск в ТЗ после сортировки замедляется. Эффективен для ТЗ большого размера. Лучше использовать ТЗ.ПолучитьСтрокуПоНомеру, чем ТЗ.ПолучитьЗначение (немного быстрее).
#27 by romix
А откуда берется такая большая тз? Не выборкой ли по документам? Может, проще поюзать для этой же задачи регистр?
#28 by smaharbA
Если условие точное те Колонка1==ВыбЗнач1 и Колонка2==ВыбЗнач2 то все просче и быстрее
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С