Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Поиск строки таблицы значений по нескольким параметрам 2 страниц V   1 2 >          
Batchir Подменю пользователя
сообщение 23.08.11, 12:53
Сообщение #1

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

В общем возникла необходимость в процедуре поиска строки таблицы значений по нескольким параметрам.
В 8-ке то всё элементарно, но в 7.7 с этим проблема.
НайтиЗначение() находит первую строку где находится искомое значение. Может у кого-то есть готовая функция которая ищет строку по нескольким параметрам.

Если у кого-то есть, поделитесь пожалуйста.

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

Vofka Подменю пользователя
сообщение 23.08.11, 13:32
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4522 раз
Рейтинг: 3645.4

Написать самому функцию, которая переберёт все строки и сравнит с нужным фильтром.

g789 Подменю пользователя
сообщение 23.08.11, 13:44
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 62
Спасибо сказали: 14 раз
Рейтинг: 0

как вариант при формировании ТаблицыЗначений добавить ключевое поле (тбл.Поле1 + "$$$"+тбл.Поле2) - потом искать по нему. ну или 1с++ - индексированная таблица

Спасибо сказали: Batchir,

Batchir Подменю пользователя
сообщение 23.08.11, 13:47
Сообщение #4

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

Сильно громоздко (в плане выполнения)
Допустим у меня цикл из 100000 записей и нужно найти в таблице значений (допустим имеет тоже 100000 записей) строку по параметрам.
Каждый раз перебирать тз напряжно.
Думал может есть более оптимальное решение

g789 Подменю пользователя
сообщение 23.08.11, 13:58
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 62
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(Batchir @ 23.08.11, 14:47) *
Допустим у меня цикл из 100000 записей и нужно найти в таблице значений (допустим имеет тоже 100000 записей) строку по параметрам.

Вариант с ключевым полем подойдет

alex040269 Подменю пользователя
сообщение 23.08.11, 14:20
Сообщение #6

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(g789 @ 23.08.11, 14:58) *
Вариант с ключевым полем подойдет


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


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

5_kopeek Подменю пользователя
сообщение 23.08.11, 15:36
Сообщение #7

Ветеран
*******
Женщине-одинэснику
Группа: Пользователи*
Сообщений: 940
Спасибо сказали: 285 раз
Рейтинг: 0

Цитата(g789 @ 23.08.11, 13:44) *
как вариант при формировании ТаблицыЗначений добавить ключевое поле (тбл.Поле1 + "$$$"+тбл.Поле2) - потом искать по нему. ну или 1с++ - индексированная таблица

Тоже пользовалась подобным алгоритмом, только это называла индексными полями, что не принципиально. Работает достаточно быстро при поиске, но теряется время при формировании подобных индексов. Кстати, разделитель значений в индексном поле совсем необязателен.

Спасибо сказали: Batchir,

g789 Подменю пользователя
сообщение 23.08.11, 15:43
Сообщение #8

Говорящий
***
Группа: Пользователи
Сообщений: 62
Спасибо сказали: 14 раз
Рейтинг: 0

Цитата(5_kopeek @ 23.08.11, 16:36) *
Кстати, разделитель значений в индексном поле совсем необязателен.

Конечно не обязателен, но бывает полезен - я использую, обычно, несколько символов, которых гарантированно не будет в полях поиска, так спокойней.

Fynjy Подменю пользователя
сообщение 23.08.11, 15:47
Сообщение #9

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Цитата(g789 @ 23.08.11, 14:44) *
как вариант при формировании ТаблицыЗначений добавить ключевое поле (тбл.Поле1 + "$$$"+тбл.Поле2) - потом искать по нему. ну или 1с++ - индексированная таблица

Индексная колонка +1


Signature

alex040269 Подменю пользователя
сообщение 23.08.11, 15:56
Сообщение #10

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(5_kopeek @ 23.08.11, 16:36) *
Кстати, разделитель значений в индексном поле совсем необязателен.


Тогда нужно выравнивать значения складываемых полей по длине.


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

5_kopeek Подменю пользователя
сообщение 23.08.11, 23:14
Сообщение #11

Ветеран
*******
Женщине-одинэснику
Группа: Пользователи*
Сообщений: 940
Спасибо сказали: 285 раз
Рейтинг: 0

Цитата(alex040269 @ 23.08.11, 15:56) *
Тогда нужно выравнивать значения складываемых полей по длине.

Зачем? Индексные поля не заменяют поля данных, они лишь служат для быстрого поиска нужной строки по нескольким критериям.

kalyamov Подменю пользователя
сообщение 24.08.11, 0:40
Сообщение #12

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0

Цитата(5_kopeek @ 24.08.11, 0:14) *
они лишь служат для быстрого поиска нужной строки по нескольким критериям.


Думаю, автор это и имеет ввиду, просто иногда, разделитель может быть весьма полезен, поэтому так и написано.

Batchir Подменю пользователя
сообщение 24.08.11, 10:46
Сообщение #13

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

Можете растолковать пример, а то что то я до сих пор не в теме
Я например получаю запросам данные и выгружаю их в таблицу значения для того что бы в дальнейшем из этой таблицы получать необходимые мне данные.
Вот например есть таблица со 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)

kalyamov Подменю пользователя
сообщение 24.08.11, 18:04
Сообщение #14

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0

Цитата(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)

Насколько я понимаю, поиск можно осуществить, если заранее известно, по каким колонкам будете искать.

Batchir Подменю пользователя
сообщение 24.08.11, 20:04
Сообщение #15

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

Цитата(kalyamov @ 24.08.11, 19:04) *
Насколько я понимаю, поиск можно осуществить, если заранее известно, по каким колонкам будете искать.

Это я понял. Индексная колонка строиться на основании тех данных, по которым нужно искать.
Но как назло нужен именно поиск по разным наборам колонок.

Но всё равно всем спасибо, значит заранее обдумаю все варианты поиска которые мне нужны и создам столько индексных колонок сколько нужно.

Fynjy Подменю пользователя
сообщение 24.08.11, 20:31
Сообщение #16

Сенсей Чака Норриса
**********
За вредность
Группа: Пользователи
Сообщений: 1994
Из: Ахметов сити
Спасибо сказали: 333 раз
Рейтинг: 0

Цитата(Batchir @ 24.08.11, 21:04) *
Это я понял. Индексная колонка строиться на основании тех данных, по которым нужно искать.
Но как назло нужен именно поиск по разным наборам колонок.

Но всё равно всем спасибо, значит заранее обдумаю все варианты поиска которые мне нужны и создам столько индексных колонок сколько нужно.

Подкину, как вариант и как более быстрый быстрый способ по сравнению с ТЗ - работа с внешней таблицей: MS SQL, DBF.


Signature

Спасибо сказали: Batchir,

Batchir Подменю пользователя
сообщение 24.08.11, 20:37
Сообщение #17

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

Как вариант использовать можно, но разве у ДБФ нет проблем с украинскими символами?

kalyamov Подменю пользователя
сообщение 24.08.11, 21:22
Сообщение #18

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0

Цитата(Batchir @ 24.08.11, 21:04) *
Это я понял. Индексная колонка строиться на основании тех данных, по которым нужно искать.
Но как назло нужен именно поиск по разным наборам колонок.

Но всё равно всем спасибо, значит заранее обдумаю все варианты поиска которые мне нужны и создам столько индексных колонок сколько нужно.


Есть еще вариант 1С++ "ИндекснаяТаблица" - но это только предположения, что там можно решить вопрос.

Batchir Подменю пользователя
сообщение 24.08.11, 21:33
Сообщение #19

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

Нет, 1С++ не подходит, нужно решение без внешних компонент.
Ну собственно повторюсь Индексные колонки подходят, просто нужно заранее подготовить все необходимые колонки.

alex040269 Подменю пользователя
сообщение 25.08.11, 8:40
Сообщение #20

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(Batchir @ 24.08.11, 21:37) *
Как вариант использовать можно, но разве у ДБФ нет проблем с украинскими символами?

Если в виндузной кодировке, то кажись нет!


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 23.05.24, 7:51
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!