|
v7: Запрос простой и выгрузка в таблицу значений | ☑ | ||
---|---|---|---|---|
0
Wefast
23.09.19
✎
14:32
|
Собственно запросы для меня в 7.7 что то жутко не очевидное.
Мне нужно найти физ лицо по полному наименованию. У данного реквезита св-во Сортировка = 0; Простым перебор по справочнику получается ОЧЕНЬ долго. Да, сосбтвенно мне нужно понять а есть ли однофамильцы в базе. Пишу: Функция НайтиФизЛицо(ФИО) ТЗ = СоздатьОбъект("ТаблицаЗначений"); Запрос= СОздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(е) |ФизЛица = Справочник.ФизЛица.ТекущийЭлемент; |ПолнНаименование = Справочник.ФизЛица.ПолнНаименование; |Группировка ФизЛица без упорядочивания без групп; |Условие(СОКРЛП(ПолнНаименование) = ФИО); |";//}}ЗАПРОС Запрос.Выполнить(ТекстЗапроса); Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Сообщить(ТЗ.ФизЛица); КонецЦикла; КонецФункции В базе один человек. В ТЗ количество строк 2, первая пустая, вторая с моим значением. Еще пока искал как написать запрос наткнулся на мнение что запрос будет так же медленно работать как и обычный перебор. Так ли это и что делать? |
|||
1
NikVars
23.09.19
✎
14:56
|
(0) Так поможет?
https://helpf.pro/faq7/view/303.html |
|||
2
Wefast
23.09.19
✎
15:04
|
(1) нет, у меня же тоже самое. Только в выборке еще пустой элемент
|
|||
3
NikVars
23.09.19
✎
15:05
|
Или универсальной обработкой печать содержимого справочников получить список нужных полей в mxl? потом 8-й передать в ексель и далее сортируй и крути как хош.
|
|||
4
vcv
23.09.19
✎
15:05
|
Скорее всего ошибка концептуальная. В том, что внутри функции НайтиФизЛицо(ФИО) запрос. Вполне вероятно эта функция вызывается при обходе другого запроса для каждого сотрудника. То есть, классический запрос в цикле.
Один раз выберите запросом список физлиц с нужной информацией, выгрузите в таблицу значений, потом по ней устраивайте поиск однофамильцев. И если у вас не миллионы физлиц в базе, будет вполне недолго |
|||
5
Wefast
23.09.19
✎
15:07
|
Запрос.Выгрузить(ТЗ,0,0) - помогло. Там 3 параметр за итоги отвечает. Вот пустой первый элемент в таблице видимо эти итоге и есть
|
|||
6
Chum
23.09.19
✎
15:09
|
(5) а зачем итоги? Если родным запросом долго, то, может, прямым и с Like каким-нибудь?
|
|||
7
Wefast
23.09.19
✎
15:10
|
Обычным перебором быстрее получается
|
|||
8
Wefast
23.09.19
✎
15:10
|
(6) Выгрузить(<?>,,)
Синтаксис: Выгрузить(<ТаблЗнач>,<Флаг>,<Итоги>) Назначение: Выгружает результаты запроса в таблицу значений. Возвращает число: 1 - если выгрузка произошла успешно, иначе - 0. Параметры: <ТаблЗнач> - Таблица значений, куда выгружаются результаты запроса. <Флаг> - необязательный параметр. Число или строка: 0 - значения групп и функций (по умолчанию); 1 - значения групп и функций, дополнительных переменных; 2 - значения упорядочиваний групп и функций; 3 - значения упорядочиваний групп и функций, дополнительных переменных; Строка - '' Товар(1), Товар(2), Товар, Склад, Приход, Расход'', где Товар(1) - значение первого упорядочивания группировки ''Товар''. <Итоги> - необязательный параметр. Число: 0 - итоги по группировкам не выводить; 1 - итоги по группировкам выводить сверху (по умолчанию); 2 - итоги по группировкам выводить снизу; 3 - итоги по группировкам выводить сверху и снизу. |
|||
9
Wefast
23.09.19
✎
15:11
|
(6) по умолчанию итоги выгружаются
|
|||
10
Wefast
23.09.19
✎
15:11
|
(6) > может, прямым и с Like каким-нибудь?
не знаю как это |
|||
11
Peltik
23.09.19
✎
15:21
|
(0) Если "понять а есть ли однофамильцы в базе", то можно попробовать обход с выгрузкой в ТЗ с колонкой "Количество" в которую ставим 1, потом ТЗ.Свернуть("1","2") и вывести все строки ТЗ в которых "Количество" больше 1. Чисто для экспиремента попробовал, справочник в 10К записей обрабатывается секунды за 3
|
|||
12
Wefast
23.09.19
✎
15:29
|
Я загружаю проводки.
одно из значений субконто у меня может быть физлицом, а может и не быть. Я получаю счет, узнаю что за вид субконто1,2,3 и ищу по соответствующему справочнику или перечислению свое значение. Поэтому я пока не представляю как я могу в теории в какой то запрос поместить всех моих физ лиц, чтобы уже искать только по выборке |
|||
13
Wefast
23.09.19
✎
15:29
|
Попробую может поставить "Сортировать" у реквизита полноенаименование и перебор делать более оптимизированный.
|
|||
14
Peltik
23.09.19
✎
15:42
|
(13) зачем уж тогда перебор если стоит "Сортировка", НайтиПоРеквизиту() и пусть сама платформа заморачивается с перебором
|
|||
15
Peltik
23.09.19
✎
15:45
|
правда если будут полные тезки, то перый по списку будет все "лавры" забирать :) (14)
|
|||
16
uno-group
23.09.19
✎
15:56
|
Узнал что это Физ.лицо и ищи элемент зачем искать по представлениям
|
|||
17
Wefast
24.09.19
✎
09:27
|
(16) ну так пока у реквезита не стоит свойство "сортировка", пока не могу делать поиск по реквезиту
|
|||
18
Злопчинский
24.09.19
✎
09:29
|
ПолнНаименование - обычно это строка неограниченной длины. на такой реквизит сортировка и отбор не поставишь.
|
|||
19
Wefast
24.09.19
✎
09:41
|
(18) ок, значит останется как есть
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |