Имя: Пароль:
1C
1C 7.7
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) ок, значит останется как есть
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой