В общем возникла необходимость в процедуре поиска строки таблицы значений по нескольким параметрам.
В 8-ке то всё элементарно, но в 7.7 с этим проблема.
НайтиЗначение() находит первую строку где находится искомое значение. Может у кого-то есть готовая функция которая ищет строку по нескольким параметрам.
Если у кого-то есть, поделитесь пожалуйста.
З.ы. я когда-то пользовался такой, но с 7.7 уже не работаю несколько лет, вот и подзабыл немного, а нужно как обычно вчера.
Написать самому функцию, которая переберёт все строки и сравнит с нужным фильтром.
как вариант при формировании ТаблицыЗначений добавить ключевое поле (тбл.Поле1 + "$$$"+тбл.Поле2) - потом искать по нему. ну или 1с++ - индексированная таблица
Сильно громоздко (в плане выполнения)
Допустим у меня цикл из 100000 записей и нужно найти в таблице значений (допустим имеет тоже 100000 записей) строку по параметрам.
Каждый раз перебирать тз напряжно.
Думал может есть более оптимальное решение
Цитата(Batchir @ 23.08.11, 14:47) необходимо зарегистрироваться для просмотра ссылки
Допустим у меня цикл из 100000 записей и нужно найти в таблице значений (допустим имеет тоже 100000 записей) строку по параметрам.
Вариант с ключевым полем подойдет
alex040269
23.08.11, 14:20
Цитата(g789 @ 23.08.11, 14:58) необходимо зарегистрироваться для просмотра ссылки
Вариант с ключевым полем подойдет
или строки вставлять не в конец, а в нужное место в тз, тогда тз будет упорядоченной и искать можно половинным делением, хотя с ключевым полем должно работать очень даже неплохо.
Цитата(g789 @ 23.08.11, 13:44) необходимо зарегистрироваться для просмотра ссылки
как вариант при формировании ТаблицыЗначений добавить ключевое поле (тбл.Поле1 + "$$$"+тбл.Поле2) - потом искать по нему. ну или 1с++ - индексированная таблица
Тоже пользовалась подобным алгоритмом, только это называла индексными полями, что не принципиально. Работает достаточно быстро при поиске, но теряется время при формировании подобных индексов. Кстати, разделитель значений в индексном поле совсем необязателен.
Цитата(5_kopeek @ 23.08.11, 16:36) необходимо зарегистрироваться для просмотра ссылки
Кстати, разделитель значений в индексном поле совсем необязателен.
Конечно не обязателен, но бывает полезен - я использую, обычно, несколько символов, которых гарантированно не будет в полях поиска, так спокойней.
Цитата(g789 @ 23.08.11, 14:44) необходимо зарегистрироваться для просмотра ссылки
как вариант при формировании ТаблицыЗначений добавить ключевое поле (тбл.Поле1 + "$$$"+тбл.Поле2) - потом искать по нему. ну или 1с++ - индексированная таблица
Индексная колонка +1
alex040269
23.08.11, 15:56
Цитата(5_kopeek @ 23.08.11, 16:36) необходимо зарегистрироваться для просмотра ссылки
Кстати, разделитель значений в индексном поле совсем необязателен.
Тогда нужно выравнивать значения складываемых полей по длине.
Цитата(alex040269 @ 23.08.11, 15:56) необходимо зарегистрироваться для просмотра ссылки
Тогда нужно выравнивать значения складываемых полей по длине.
Зачем? Индексные поля не заменяют поля данных, они лишь служат для быстрого поиска нужной строки по нескольким критериям.
Цитата(5_kopeek @ 24.08.11, 0:14) необходимо зарегистрироваться для просмотра ссылки
они лишь служат для быстрого поиска нужной строки по нескольким критериям.
Думаю, автор это и имеет ввиду, просто иногда, разделитель может быть весьма полезен, поэтому так и написано.
Можете растолковать пример, а то что то я до сих пор не в теме
Я например получаю запросам данные и выгружаю их в таблицу значения для того что бы в дальнейшем из этой таблицы получать необходимые мне данные.
Вот например есть таблица со 100000 строками:
_____ Колонка1 | Колонка2 | Колонка3 | Колонка4 | Колонка5|
1____ Значение1|Значение2|Значение3|Значение4|Значение5|
2____ Значение1|Значение2|Значение3|Значение4|Значение5|
и т.д.
Затем программно добавляется индексная колонка Колонка6.
Насколько я понял для каждой строки в её значение добавляется что то типа
""+ Значение1+"$$$"+Значение2+"$$$"+Значение3+"$$$"+Значение4+"$$$"+Значение5.
Как потом осуществить поиск строки по значениям (Значение3 И Значение4)
или (Значение1 и Значение3 и Значение5)
Цитата(Batchir @ 24.08.11, 11:46) необходимо зарегистрироваться для просмотра ссылки
_____ Колонка1 | Колонка2 | Колонка3 | Колонка4 | Колонка5|
1____ Значение1|Значение2|Значение3|Значение4|Значение5|
2____ Значение1|Значение2|Значение3|Значение4|Значение5|
и т.д.
Затем программно добавляется индексная колонка Колонка6.
Насколько я понял для каждой строки в её значение добавляется что то типа
""+ Значение1+"$$$"+Значение2+"$$$"+Значение3+"$$$"+Значение4+"$$$"+Значение5.
Как потом осуществить поиск строки по значениям (Значение3 И Значение4)
или (Значение1 и Значение3 и Значение5)
Насколько я понимаю, поиск можно осуществить, если заранее известно, по каким колонкам будете искать.
Цитата(kalyamov @ 24.08.11, 19:04) необходимо зарегистрироваться для просмотра ссылки
Насколько я понимаю, поиск можно осуществить, если заранее известно, по каким колонкам будете искать.
Это я понял. Индексная колонка строиться на основании тех данных, по которым нужно искать.
Но как назло нужен именно поиск по разным наборам колонок.
Но всё равно всем спасибо, значит заранее обдумаю все варианты поиска которые мне нужны и создам столько индексных колонок сколько нужно.
Цитата(Batchir @ 24.08.11, 21:04) необходимо зарегистрироваться для просмотра ссылки
Это я понял. Индексная колонка строиться на основании тех данных, по которым нужно искать.
Но как назло нужен именно поиск по разным наборам колонок.
Но всё равно всем спасибо, значит заранее обдумаю все варианты поиска которые мне нужны и создам столько индексных колонок сколько нужно.
Подкину, как вариант и как более быстрый быстрый способ по сравнению с ТЗ - работа с внешней таблицей: MS SQL, DBF.
Как вариант использовать можно, но разве у ДБФ нет проблем с украинскими символами?
Цитата(Batchir @ 24.08.11, 21:04) необходимо зарегистрироваться для просмотра ссылки
Это я понял. Индексная колонка строиться на основании тех данных, по которым нужно искать.
Но как назло нужен именно поиск по разным наборам колонок.
Но всё равно всем спасибо, значит заранее обдумаю все варианты поиска которые мне нужны и создам столько индексных колонок сколько нужно.
Есть еще вариант 1С++ "ИндекснаяТаблица" - но это только предположения, что там можно решить вопрос.
Нет, 1С++ не подходит, нужно решение без внешних компонент.
Ну собственно повторюсь Индексные колонки подходят, просто нужно заранее подготовить все необходимые колонки.
alex040269
25.08.11, 8:40
Цитата(Batchir @ 24.08.11, 21:37) необходимо зарегистрироваться для просмотра ссылки
Как вариант использовать можно, но разве у ДБФ нет проблем с украинскими символами?
Если в виндузной кодировке, то кажись нет!
Цитата(kalyamov @ 24.08.11, 22:22) необходимо зарегистрироваться для просмотра ссылки
Есть еще вариант 1С++ "ИндекснаяТаблица" - но это только предположения, что там можно решить вопрос.
1С++ конечно вещь, но я бы 3ды подумал прикручивая ее к рабочей базе
В общем всем спасибо поставленная задача решена с помощью индексных колонок
Я 1С++ ставил только для прямых запросов, в свое время это давало хорошую отсрочку для перехода с 7.7. на 8.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.