Имя: Пароль:
1C
 
База работает очень долго
, , ,
0 LeoKeyn
 
10.05.18
15:13
Здравствуйте. База 1с работает на клиент серверном варианте УФ. У
клиента стоит только управляемое приложение. Сервер администрирования
1с и SQL сервер располагаются на разных физических серверах.
Проблема в следующем:
Запускается обработка проверки базы террористов (конфигурация отраслевая не стандартная)
На одном компьютере данный документ заполняется за 20-30 минут, на другом за 4 часа. Выполняется и там и там на тонком клиенте.

Подскажите, пожалуйста, из-за чего такое может быть?
1 Mankubus
 
10.05.18
15:15
(0) замер уже сделал? Профайлер смотрел?
2 lodger
 
10.05.18
15:16
права у юзеров с ограничениями? а то мож у одного RLS, а у другого полные права...
3 LeoKeyn
 
10.05.18
15:17
(2) У обоих полные права, даже тот же пользователь
4 LeoKeyn
 
10.05.18
15:18
(1) Нет, не совсем знаю как это делать, не откажусь от методических материалов)
5 DrShad
 
10.05.18
15:23
даже 20 минут это слишком
6 vis_tmp
 
10.05.18
15:23
(0)Что за отрасль?
7 ptiz
 
10.05.18
15:23
(0) Буду первый: 1С:Антитеррор ? :)
8 H A D G E H O G s
 
10.05.18
15:23
Случаи разные бывают.
Я вот сталкивался с заполнением заказов из Ексель на ТонкомКлиенте.
Вот буквально - открывалась форма документа и менялись реквизиты шапки, вызываясь клиентские процедуры смены реквизита.
Работало сутками.

Думаю, у автора может быть подобное.
9 LeoKeyn
 
10.05.18
15:24
(5) Ну документ очень большой получается
10 LeoKeyn
 
10.05.18
15:24
(7) (6) Ак кредит
11 piter3
 
10.05.18
15:24
(9) Большой это сколько?
12 LeoKeyn
 
10.05.18
15:25
(8) а как исправил, если не секрет?)
13 ProxyInspector
 
10.05.18
15:25
В случае с 1с, следует писать "так называемые Управляемые Формы" и "так называемый серверный вариант". По моим наблюдениям, при определенных условиях, объем ресурсов, потребляемый УФ может существенно превышать объем ресурсов, потребляемых толстым клиентом. Соответственно
1. надо почистить кеш на клиентских компьютерах
2 Проверить скорость локальных дисков
3 Проверить скорость локальной сети
   Ну и вообще говоря УФ не предназначена для работы с большими документами
14 LeoKeyn
 
10.05.18
15:26
(11) 52603 записи, плюс проверка то это идет через некий портал как я понимаю
15 unregistered
 
10.05.18
15:27
(0) > из-за чего такое может быть?

Да из-за чего угодно. Начиная с того, что в первом случае с базой работал один единственный пользователь, а во втором - одновременно сидело 100 человек и интенсивно формировали какие-нибудь отчеты по базе.

При абсолютно равных или хотя бы сопоставимых условиях (одинаковые права пользователей, одинаковые параметры заполнения, одинаковая нагрузка на сервера СУБД и 1С) описанной тобой разницы (в 12 раз!!!) просто не может быть.
Даже если предположить проблемы с сетью в момент передачи результата с сервера на клиента, то разница не должна быть такой. Хотя бог его знает что у вас там за алгоритм.... Может вы там результат гоняете в цикле по каждой строчке с клиента на сервер и обратно...

Я вообще с трудом могу себе представить что такое может заполняться 20-30 минут. Не говоря уже о 4 часах....
Начните с замера производительности.
16 LeoKeyn
 
10.05.18
15:28
(13)
1. Кеш чисты, клиенту только поставили 1с и работает он пока только с этим документом;
2. С этим тоже все в порядке машина новая;
3. Скорость локалки 100мб.
17 DrShad
 
10.05.18
15:29
(16) убейте того кто писал алгоритм заполнения
18 LeoKeyn
 
10.05.18
15:30
(17) получается с этим нужно обращаться к разработчикам или искать проблему в оборудовании?
19 ProxyInspector
 
10.05.18
15:31
(15) Что тут представлять? Берешь УТ-3. Документ УстановкаЦенНоменклатуры на 50 тыс позиций и (0) покажется вам сказкой
20 H A D G E H O G s
 
10.05.18
15:31
(12) Переписал все на серверную обработку.
Да, тяжело, но 5000 строк заказа вместо суток, стало заполняться за 16 секунд. Считая инициализацию libreofice
21 piter3
 
10.05.18
15:31
(18) монетку кинь.И там и там.Код покажи уже
22 H A D G E H O G s
 
10.05.18
15:32
(13) Проблема производительности Тонких форм в солидоле.
В голове у критиканов, ну и, частично, у разработчиков типовых.
23 DrShad
 
10.05.18
15:32
(18) оборудование тут ни при чем
24 H A D G E H O G s
 
10.05.18
15:33
(19) Вы же понимаете, в чем там проблема и можете нам рассказать, ведь так?
25 Любопытная
 
10.05.18
15:33
(18) Замер производительности сделайте для начала и посмотрите, на чем умирает система.
26 ProxyInspector
 
10.05.18
15:33
(22) Проблемы у разработчиков Типовых
27 H A D G E H O G s
 
10.05.18
15:35
(26) Ну так если руки крюки у разрабов типовых, че тогда пургу на ТонкийКлиент гоним?
При желании, можно обойти ограничение на 99 тыс строк и открывать 300тыс строковый документ за пару секунд.
28 ProxyInspector
 
10.05.18
15:35
(24) Конечно понятно, в чем проблема УТ3. И там реально раз в 100 можно ускорить, но все равно работать не возможно
29 H A D G E H O G s
 
10.05.18
15:36
(28) "в чем проблема УТ3"

В чем? В чем конкретно проблема УТЗ?
30 H A D G E H O G s
 
10.05.18
15:36
(28) Конкретно УстановкаЦенНоменклатуры
31 ProxyInspector
 
10.05.18
15:36
Для больших документов на УФ две проблемы - разработчики и сами УФ.
32 H A D G E H O G s
 
10.05.18
15:37
(31) Это понятно, но хочется подробностей.
Что приводит к тормозам УстановкаЦенНоменклатуры ?
33 DrShad
 
10.05.18
15:38
казалось бы, причем тут большой или нет документ и УФ?
34 H A D G E H O G s
 
10.05.18
15:38
(33) Хароший вопрос!
35 DrShad
 
10.05.18
15:38
(32) +1
36 H A D G E H O G s
 
10.05.18
15:38
На который ответит Proxy, ведь он не криворукий разраб из 1С.
37 DrShad
 
10.05.18
15:39
(36) а откуда вообще возникла УТ3? это же украинская конфа
38 H A D G E H O G s
 
10.05.18
15:40
Он, конечно, сейчас открывает конфигуратор с УТ, но это - долго, комп скорее всего стар, без SSD или антивирус злобствует.

Но мы подождем.
39 H A D G E H O G s
 
10.05.18
15:40
(37) Я так понял, что это УТ11.3
40 ProxyInspector
 
10.05.18
15:41
Да
41 DrShad
 
10.05.18
15:41
(39) возможно
42 MaxS
 
10.05.18
15:41
(17) Ещё как вариант - физически сократить количество террористов, потом пометить на удаление в 1С, исключить из учета и база будет работать быстрее.
43 DrShad
 
10.05.18
15:41
(40) хвала великим яйцам, хоть не Украина виновата
44 H A D G E H O G s
 
10.05.18
15:42
(43) Еще ничего не ясно.
45 DrShad
 
10.05.18
15:42
(44) ну да, всяко может статься )))
46 H A D G E H O G s
 
10.05.18
15:42
Сохраняйте спокойствие, приготовьте QR-татуировки к сканированию.
47 unregistered
 
10.05.18
15:43
(14) > 52603 записи

И что? У меня книга покупок в типовой бухне ~28000 записей заполняется несколько минут (может и меньше - никогда не замерял)... При этом и сервера, и клиенты, и сеть - не какие-то супер-пупер-мегакрутые (скорее даже наоборот).
48 DrShad
 
10.05.18
15:43
(46) чьорт побьери
а если я свою дома забыл?
49 H A D G E H O G s
 
10.05.18
15:43
(48) Руку?
50 DrShad
 
10.05.18
15:44
(49) QR-татуировку
51 H A D G E H O G s
 
10.05.18
15:44
Ты еще голову дома забуть, с NFR-меткой! Как мы вас учитывать будем? Вот как с вами тоталитаризм строить?
52 H A D G E H O G s
 
10.05.18
15:45
Ладно, пашутили...
Что там у ProxyInspectora? Открылась форма документа? Готовы ответы на сакральные вопросы?
53 worker-good
 
10.05.18
15:47
(18) Если конфигурация снята с поддержки, то вполне возможны проблемы с блокировками транзакций, которые создал неумелый разработчик. Найдите исходную конфигурацию не снятую с поддержки и посмотрите как там формируется данный документ
54 Вафель
 
10.05.18
15:49
конечно 52 тыщи коннектов к серверу через инет явно быстр не будет
55 ProxyInspector
 
10.05.18
15:50
1. Ут11 разработчики попытались повторить алгоритм УТ, когда из табличной части вида ТипЦен-Цена пытаются формировать таблицу типа ТипЦен1-Цена , ТИпЦен2-Цена , ТИпЦен3-цена. И при изменении любого реквизита вся эта каша гоняется на сервер и обратно.
2. При проведении проверка на дублирование строк производится тупым перебором строк и для каждой строки вызывается ТабличнаяЧасть.НайтиСтроки()
  В результате скорость работы падает как квадрат количества строк. Если документ на 100 строк от отрывается/проводится за 1 сек, 1000 строк за 100 сек, 10 000 строк за несколько минут
56 Вафель
 
10.05.18
15:52
неужели 1сники не смогли гонять диффы вместо полных данных???
вопрос риторический
57 ProxyInspector
 
10.05.18
15:53
Я в свое время убрал все основные ошибки, но все равно комфортной работы с большими документами на УФ не получилось. И от нее пришлось отказаться в пользу толстого клиента.
58 ProxyInspector
 
10.05.18
15:54
Что касается (0), то надо исправить алгоритм заполнения документа и ускорение раз в 100 вполне можно добиться
59 H A D G E H O G s
 
10.05.18
15:56
(55) Ну слава яйцам. Но на самом деле, это только то, что ты смог увидеть через замер.
Проблема - глубже - называется она ДеревоЦен:ДеревоЗначений, решить которую можно, только перенеся ТипЦен в шапку документа.
60 ProxyInspector
 
10.05.18
15:57
Самый простой способ - заполнять таблицу значений, а потом ее грузить в табличную часть. Основные тормоза, как мне кажется - это все те же ТабличнаяЧасть.НайтиСтроки()
61 H A D G E H O G s
 
10.05.18
15:57
И редактируя цены через табличную часть.
62 Вафель
 
10.05.18
15:57
(59) предлагаешь на каждый тип цен по отдельному документу заводить?
А вот в толстых формах ...
63 H A D G E H O G s
 
10.05.18
15:58
(60) Нихрена.
Таблица значений ставит колом сервер 1С на от 10К-20K строк.
64 H A D G E H O G s
 
10.05.18
15:58
(62) "А вот в толстых формах .."

Даа, были времена.
65 Вафель
 
10.05.18
15:58
(63) но найти строки то на тз явно быстрее ибо индекс
66 ProxyInspector
 
10.05.18
15:59
(59) Эта первая проблема - разработчики. Вторая проблема - УФ. Остается. Ты можешь попробовать поработать с обычным документом на 100 тыс строк. Без всяких обработчиков. И убедиться, что работать с ним не возможно.
67 H A D G E H O G s
 
10.05.18
16:00
(66) Я работаю с документом в 300 тыс. строк со всякими обработчиками и норм.
68 LeoKeyn
 
10.05.18
16:00
Вот Процедура



#Область СлужебныйПрограммныйИнтерфейс

Процедура ФоноваяПроверкаПоБазеТеррористов(СтруктураПараметров, АдресХранилища) Экспорт
    
    ДатаПроверки = СтруктураПараметров.ДатаПроверки;
    РеестрПроверки = СтруктураПараметров.РеестрПроверки;
    РеестрСовпадений = СтруктураПараметров.РеестрСовпадений;
    Организация = СтруктураПараметров.Организация;
    ПроверятьТолькоКлиентов = СтруктураПараметров.ПроверятьТолькоКлиентов;
    НеПроверятьСовпаденияАдресов = СтруктураПараметров.НеПроверятьСовпаденияАдресов;
    
    // Выборка юрфизлиц
    
    ЗапросЮрФизЛиц = Новый Запрос;
    ЗапросЮрФизЛиц.Параметры.Вставить("СрокДействия", ДатаПроверки);
    ЗапросЮрФизЛиц.Параметры.Вставить("ДатаОстатков", Новый Граница(КонецДня(ДатаПроверки), ВидГраницы.Включая));
    ЗапросЮрФизЛиц.Параметры.Вставить("Организация", Организация);
    ЗапросЮрФизЛиц.Параметры.Вставить("Все", НЕ ПроверятьТолькоКлиентов);
    ЗапросЮрФизЛиц.Текст = "ВЫБРАТЬ
                           |    ФизическиеЛица.Наименование,
                           |    ФизическиеЛица.ДатаРождения,
                           |    ФизическиеЛица.Ссылка КАК ЮрФизЛицо,
                           |    ФизическиеЛица.ИНН,
                           |    ФизическиеЛица.ОГРН
                           |ПОМЕСТИТЬ ЮрИФизЛица
                           |ИЗ
                           |    Справочник.ФизическиеЛица КАК ФизическиеЛица
                           |ГДЕ
                           |    НЕ ФизическиеЛица.ЭтоГруппа
                           |    И НЕ ФизическиеЛица.ПометкаУдаления
                           |
                           |ОБЪЕДИНИТЬ ВСЕ
                           |
                           |ВЫБРАТЬ
                           |    ЮридическиеЛица.Наименование,
                           |    ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0),
                           |    ЮридическиеЛица.Ссылка,
                           |    ЮридическиеЛица.ИНН,
                           |    ЮридическиеЛица.ОГРН
                           |ИЗ
                           |    Справочник.ЮридическиеЛица КАК ЮридическиеЛица
                           |ГДЕ
                           |    НЕ ЮридическиеЛица.ПометкаУдаления
                           |    И НЕ ЮридическиеЛица.ЭтоГруппа
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    КлиентыОрганизацииОстатки.Клиент.ЮрФизЛицо КАК КлиентЮрФизЛицо,
                           |    ИСТИНА КАК Клиент
                           |ПОМЕСТИТЬ КлиентыОстатки
                           |ИЗ
                           |    РегистрНакопления.КлиентыОрганизации.Остатки(&ДатаОстатков, Организация = &Организация) КАК КлиентыОрганизацииОстатки
                           |ГДЕ
                           |    КлиентыОрганизацииОстатки.КоличествоОстаток = 1
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |    КлиентЮрФизЛицо
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    ЮрИФизЛица.Наименование,
                           |    ЮрИФизЛица.ДатаРождения,
                           |    ЮрИФизЛица.ЮрФизЛицо КАК ЮрФизЛицо,
                           |    ЮрИФизЛица.ИНН,
                           |    ЮрИФизЛица.ОГРН,
                           |    ЕСТЬNULL(КлиентыОстатки.Клиент, ЛОЖЬ) КАК Клиент
                           |ПОМЕСТИТЬ ЮрФизЛицаПредварительно
                           |ИЗ
                           |    ЮрИФизЛица КАК ЮрИФизЛица
                           |        ЛЕВОЕ СОЕДИНЕНИЕ КлиентыОстатки КАК КлиентыОстатки
                           |        ПО ЮрИФизЛица.ЮрФизЛицо = КлиентыОстатки.КлиентЮрФизЛицо
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |    ЮрФизЛицо
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ РАЗЛИЧНЫЕ
                           |    ДокументыФизическихЛицСрезПоследних.Физлицо,
                           |    ДокументыФизическихЛицСрезПоследних.Серия,
                           |    ДокументыФизическихЛицСрезПоследних.Номер
                           |ПОМЕСТИТЬ ДокументыФизЛиц
                           |ИЗ
                           |    РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК ДокументыФизическихЛицСрезПоследних
                           |ГДЕ
                           |    ДокументыФизическихЛицСрезПоследних.ЯвляетсяДокументомУдостоверяющимЛичность
                           |    И (ДокументыФизическихЛицСрезПоследних.СрокДействия >= &СрокДействия
                           |            ИЛИ ДокументыФизическихЛицСрезПоследних.СрокДействия = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0))
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    ПоручителиПоЗаймамСрезПоследних.Поручитель КАК Поручитель,
                           |    ПоручителиПоЗаймамСрезПоследних.Действует
                           |ПОМЕСТИТЬ Поручители
                           |ИЗ
                           |    РегистрСведений.ПоручителиПоЗаймам.СрезПоследних(&ДатаОстатков, ДоговорПоручительства.Организация = &Организация) КАК ПоручителиПоЗаймамСрезПоследних
                           |ГДЕ
                           |    ПоручителиПоЗаймамСрезПоследних.Действует = ИСТИНА
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |    Поручитель
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    ЗалогодателиПоЗаймамСрезПоследних.Залогодатель КАК Залогодатель,
                           |    ЗалогодателиПоЗаймамСрезПоследних.Действует
                           |ПОМЕСТИТЬ Залогодатели
                           |ИЗ
                           |    РегистрСведений.ЗалогодателиПоЗаймам.СрезПоследних(&ДатаОстатков, ДоговорЗалога.Организация = &Организация) КАК ЗалогодателиПоЗаймамСрезПоследних
                           |ГДЕ
                           |    ЗалогодателиПоЗаймамСрезПоследних.Действует = ИСТИНА
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |    Залогодатель
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ РАЗЛИЧНЫЕ
                           |    ЮрФизЛицаПредварительно.Наименование КАК Наименование,
                           |    ЮрФизЛицаПредварительно.ДатаРождения,
                           |    ЮрФизЛицаПредварительно.ЮрФизЛицо,
                           |    ЕСТЬNULL(ДокументыФизЛиц.Серия, """""""") КАК Серия,
                           |    ЕСТЬNULL(ДокументыФизЛиц.Номер, """""""") КАК Номер,
                           |    ЮрФизЛицаПредварительно.ИНН,
                           |    ЮрФизЛицаПредварительно.ОГРН,
                           |    ВЫБОР
                           |        КОГДА Поручители.Действует = ИСТИНА
                           |            ТОГДА ИСТИНА
                           |        ИНАЧЕ ЛОЖЬ
                           |    КОНЕЦ КАК ФлагПоручитель,
                           |    ЮрФизЛицаПредварительно.Клиент КАК ФлагКлиент,
                           |    ВЫБОР
                           |        КОГДА Залогодатели.Действует = ИСТИНА
                           |            ТОГДА ИСТИНА
                           |        ИНАЧЕ ЛОЖЬ
                           |    КОНЕЦ КАК ФлагЗалогодатель
                           |ИЗ
                           |    ЮрФизЛицаПредварительно КАК ЮрФизЛицаПредварительно
                           |        ЛЕВОЕ СОЕДИНЕНИЕ ДокументыФизЛиц КАК ДокументыФизЛиц
                           |        ПО ЮрФизЛицаПредварительно.ЮрФизЛицо = ДокументыФизЛиц.Физлицо
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Поручители КАК Поручители
                           |        ПО ЮрФизЛицаПредварительно.ЮрФизЛицо = Поручители.Поручитель
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Залогодатели КАК Залогодатели
                           |        ПО ЮрФизЛицаПредварительно.ЮрФизЛицо = Залогодатели.Залогодатель
                           |ГДЕ
                           |    (ЮрФизЛицаПредварительно.Клиент
                           |            ИЛИ &Все)
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |    Наименование";
                          
    Проверяемые = ЗапросЮрФизЛиц.Выполнить().Выгрузить();
    
    // Выборка террористов
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    БазаТеррористов.ФИО,
                   |    БазаТеррористов.ДатаРождения,
                   |    БазаТеррористов.Паспорт,
                   |    БазаТеррористов.Адрес,
                   |    БазаТеррористов.МестоРождения
                   |ИЗ
                   |    РегистрСведений.БазаТеррористов КАК БазаТеррористов";
    Террористы = Запрос.Выполнить().Выгрузить();
    
    // Подготовка поисковых запросов (паспорта)
    
    ЗапросПаспорта = Новый Запрос;
    ЗапросПаспорта.УстановитьПараметр("ВнешнийИсточник", Террористы);
    ЗапросПаспорта.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ЗапросПаспорта.Текст = "ВЫБРАТЬ
                           |    БазаТеррористов.ФИО,
                           |    БазаТеррористов.ДатаРождения,
                           |    БазаТеррористов.Паспорт КАК Паспорт
                           |ПОМЕСТИТЬ ВременнаяТаблица
                           |ИЗ
                           |    &ВнешнийИсточник КАК БазаТеррористов
                           |
                           |ИНДЕКСИРОВАТЬ ПО
                           |    Паспорт";
    
    Результат = ЗапросПаспорта.Выполнить();
    
    ЗапросПаспорта.Текст = "ВЫБРАТЬ
                           |    БазаТеррористов.ФИО,
                           |    БазаТеррористов.ДатаРождения,
                           |    БазаТеррористов.Паспорт
                           |ИЗ
                           |    ВременнаяТаблица КАК БазаТеррористов
                           |ГДЕ
                           |    БазаТеррористов.Паспорт ПОДОБНО &Паспорт";
    
    // Подготовка поисковых запросов (адреса)
    
    ЗапросАдреса = Новый Запрос;
    ЗапросАдреса.УстановитьПараметр("ВнешнийИсточник", Террористы);
    ЗапросАдреса.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ЗапросАдреса.Текст = "ВЫБРАТЬ
                         |    БазаТеррористов.ФИО,
                         |    БазаТеррористов.ДатаРождения,
                         |    БазаТеррористов.Адрес КАК Адрес
                         |ПОМЕСТИТЬ ВременнаяТаблица
                         |ИЗ
                         |    &ВнешнийИсточник КАК БазаТеррористов
                         |
                         |ИНДЕКСИРОВАТЬ ПО
                         |    Адрес";
    
    Результат = ЗапросАдреса.Выполнить();
    
    ЗапросАдреса.Текст = "ВЫБРАТЬ
                         |    БазаТеррористов.ФИО,
                         |    БазаТеррористов.ДатаРождения,
                         |    БазаТеррористов.Адрес КАК Адрес
                         |ИЗ
                         |    ВременнаяТаблица КАК БазаТеррористов
                         |ГДЕ
                         |    БазаТеррористов.Адрес ПОДОБНО &Адрес";
    
    
    // Подготовка контактной информации
    
    МассивОбъектов = Проверяемые.ВыгрузитьКолонку("ЮрФизЛицо");
    ТипыКИ = Новый Массив;
    ТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.Адрес);
    Если НЕ НеПроверятьСовпаденияАдресов Тогда
        АдресаПроверяемых = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(МассивОбъектов, ТипыКИ);
    Иначе
        АдресаПроверяемых = Неопределено;
    КонецЕсли;
    
    Для Каждого ТекЛицо Из Проверяемые Цикл
        
        Заметки = "";
        
        // 1. Проверка на ФИО и ДатуРождения
        
        Поиск = Террористы.НайтиСтроки(Новый Структура("ФИО", ВРЕГ(СокрЛП(ТекЛицо.Наименование))));
        
        Если Поиск.Количество() > 0 Тогда
            Если ТипЗнч(ТекЛицо.ЮрФизЛицо) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
                Для Каждого ТекТеррорист Из Поиск Цикл
                    Если ТекЛицо.ДатаРождения = ТекТеррорист.ДатаРождения И ЗначениеЗаполнено(ТекТеррорист.ДатаРождения) Тогда
                        Заметки = Заметки + ?(Заметки <> "", ";" + Символы.ПС, "") + " совпадения по ФИО и дате рождения."
                    ИначеЕсли НЕ ЗначениеЗаполнено(ТекТеррорист.ДатаРождения) Тогда
                        Заметки = Заметки + ?(Заметки <> "", ";" + Символы.ПС, "") + " совпадения по ФИО с лицом в списке без даты рождения."
                    //Иначе
                    //    Заметки = Заметки + ?(Заметки <> "", ";" + Символы.ПС, "") + " совпадения по ФИО с лицом в списке."
                    КонецЕсли;
                КонецЦикла;
            Иначе
                Заметки = Заметки + ?(Заметки <> "", ";" + Символы.ПС, "") + " совпадения по наименованию."
            КонецЕсли;
        КонецЕсли;
        
        // 2. Проверка на совпадение паспорта
        
        Если ТипЗнч(ТекЛицо.ЮрФизЛицо) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
            
            Серия = ТекЛицо.Серия;
            Номер = ТекЛицо.Номер;
                
            Если СтрДлина(Серия) > 0 И СтрДлина(Номер) > 0 Тогда
                
                СтрокаПоиска = "%" + Лев(Серия, 2) + Прав(Серия, 2) + "," + СокрЛП(Номер) + "%";
                
                ЗапросПаспорта.Параметры.Вставить("Паспорт", СтрокаПоиска);
                Поиск = ЗапросПаспорта.Выполнить().Выгрузить();
                
                Если Поиск.Количество() > 0 Тогда
                    Заметки = Заметки + ?(Заметки <> "", ";" + Символы.ПС, "") + "совпадения по серии и номеру паспорта с (" + Поиск[0].ФИО + " / " + Поиск[0].Паспорт + ")";
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЕсли;
        
        Если НЕ НеПроверятьСовпаденияАдресов Тогда
            
            // 3. Проверка на совпадение адреса с адресом террориста
            
            АдресаПроверяемого = АдресаПроверяемых.Скопировать(Новый Структура("Объект", ТекЛицо.ЮрФизЛицо));
            
            Для Каждого ТекАдрес Из АдресаПроверяемого Цикл
                
                Если НЕ ЗначениеЗаполнено(ТекАдрес.ЗначенияПолей) Тогда
                    Продолжить;
                КонецЕсли;
                
                Попытка
                    ЗначенияАдреса = УправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML(ТекАдрес.ЗначенияПолей);
                Исключение
                    // Адрес введен не корректно, не проверяем.
                    Продолжить;
                КонецПопытки;
                
                Если ЗначенияАдреса.Город = "" И ЗначенияАдреса.НаселенныйПункт = "" И ЗначенияАдреса.Улица = "" Тогда
                    // Адрес в произвольном формате и не раскладывается в шаблон поиска, или не заполнен
                    Продолжить;
                КонецЕсли;
                
                СтрокаПоиска = ПолучитьСтрокуПоискаПоАдресу(ЗначенияАдреса);
                
                Если СтрокаПоиска = "%" Тогда
                    // для произвольных адресов может быть пустой шаблон поиска
                    Продолжить;
                КонецЕсли;
                
                ЗапросАдреса.УстановитьПараметр("Адрес", СтрокаПоиска);
                Поиск = ЗапросАдреса.Выполнить().Выгрузить();
                
                Если Поиск.Количество() > 0 Тогда
                    Заметки = Заметки + ?(Заметки <> "", ";" + Символы.ПС, "") + "совпадения по значащим частям адреса [" + ТекАдрес.Представление + "] (" + Поиск[0].ФИО + " / " + Поиск[0].Адрес + ")";
                КонецЕсли;
                
            КонецЦикла;
            
        КонецЕсли;
        
        Если Заметки <> "" Тогда
            НС = РеестрСовпадений.Добавить();
            НС.ЮрФизЛицо = ТекЛицо.ЮрФизЛицо;
            НС.Комментарий = Заметки;
        КонецЕсли;        
        
        НС = РеестрПроверки.Добавить();
        НС.ЮрФизЛицо = ТекЛицо.ЮрФизЛицо;
        НС.Клиент = ТекЛицо.ФлагКлиент;
        НС.Поручитель = ТекЛицо.ФлагПоручитель;
        НС.Залогодатель = ТекЛицо.ФлагЗалогодатель;
        Если ТекЛицо.ФлагКлиент = Ложь И ТекЛицо.ФлагПоручитель = Ложь И ТекЛицо.ФлагЗалогодатель = Ложь Тогда
            НС.Прочий = Истина;
        Иначе
            НС.Прочий = Ложь;
        КонецЕсли;
        НС.ВСписке = ?(Заметки <> "", Истина, Ложь);
        
    КонецЦикла;
    
    РезультатыПроверки = Новый Структура;
    РезультатыПроверки.Вставить("РеестрПроверки", РеестрПроверки);
    РезультатыПроверки.Вставить("РеестрСовпадений", РеестрСовпадений);
    
    СтруктураПараметров.АдресХранилищаРезультатовПроверки = ПоместитьВоВременноеХранилище(РезультатыПроверки, АдресХранилища);
    
КонецПроцедуры    

#КонецОбласти
69 Вафель
 
10.05.18
16:00
(67) без отображения тч?
70 H A D G E H O G s
 
10.05.18
16:01
(69) С отображением ДинСписка :-)
71 ProxyInspector
 
10.05.18
16:01
Я думаю, что ТабличнаяЧасть.НайтиСтроки() выгружает всю табличную часть в dbf, а потом уже ищет в этом файле и так 100 000 раз :)
72 Вафель
 
10.05.18
16:03
(71) найти строки делает простой цикл.
Причем если бы было просто найти, то в среднем цикл был бы в 2 раза короче
73 LeoKeyn
 
10.05.18
16:06
(71) (72) Короче как и  тут понимаю, тут обход всех строк по одной, а внутри обхода еще и цикл по совпадению с базой ТР. Не очень актуально даже на мой взгляд похоже. Я может и ошибаюсь но можно ведь и искать совпадения с помощью запроса нет?
74 xXeNoNx
 
10.05.18
16:07
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    БазаТеррористов.ФИО,
                   |    БазаТеррористов.ДатаРождения,
                   |    БазаТеррористов.Паспорт,
                   |    БазаТеррористов.Адрес,
                   |    БазаТеррористов.МестоРождения
                   |ИЗ
                   |    РегистрСведений.БазаТеррористов КАК БазаТеррористов";
    Террористы = Запрос.Выполнить().Выгрузить();

Используй сразу МВТ, зачем выгружаешь и снова загружаешь?
75 Вафель
 
10.05.18
16:08
твой единственный вариант ускорения - параллельные потоки
76 ProxyInspector
 
10.05.18
16:12
Мы здесь пару лет назад обсуждали проблему нечеткого поиска по базе. Когда надо искать Типа Иванов,Иуанов,Иганов и так далее. Там добивались ускорения раз в 100 за счет запросов
77 ProxyInspector
 
10.05.18
16:17
78 unregistered
 
10.05.18
16:21
(23) > оборудование тут ни при чем

Скорее всего так, но случаи бывают разные.
Может на том компе, где 4 часа заполняется документ, какие-то проблемы со стабильностью работы сети. Сами данные формируются на серваке за те же самые 20-30 минут, а потом 3,5 часа пытаются добраться до клиента. На меньших объемах (на маленьких документах и справочниках) этого не заметишь, а тут вот проявляется.
Такое можно наблюдать при работе тонких клиентов в Wi-Fi сети, где сеть отличается нестабильностью (скачущая нагрузка, помехи и пр.).

Проверить сеть можно простой командой ping с указанием большой величины пакета. Параметр -l 65500. Выполнить на проблемном компьютере команду

ping -l 65500 SERVER1C

где SERVER1C - имя или IP-адрес сервака 1С. Если результат покажет значительное количество потерянных пакетов или слишком длительное время ожидания, то проблема в сети (кабель ножкой стула придавили, карточка сетевая умирает).
Если
79 unregistered
 
10.05.18
16:25
Господа.

Обсуждение алгоритма заполнения соврешенно бессмысленно так как не отвечает на главный вопрос ветки - чем объясняется 12-кратная РАЗНИЦА в скорости заполнения документа на разных компах.

Пусть ваш алгоритм хоть 100 раз идеально вылизан и оптимизирован - как это решит проблему с разницей? Разве что позволит не обращать на неё внимание - типа на "быстром" компьютере документ вместо 20-30 минут будет заполняться за 2-3 минуты, а на "медленном" при этом - 24-36 вместо 4-х часов.
80 ProxyInspector
 
10.05.18
16:25
У (0) все делается на сервере, поэтому надо оптимизировать алгоритм
81 ProxyInspector
 
10.05.18
16:26
(79) При таком раскладе надо смотреть диск и сеть
82 ProxyInspector
 
10.05.18
16:26
Либо (0) что то не договаривает.
Надо запустить замер скорости и все станет ясно
83 Dmitry1c
 
10.05.18
16:27
(82) он проверяет базу террористов.
что он может не договаривать?
84 LeoKeyn
 
10.05.18
16:29
(79) Ну я тоже кроме как на сеть грешить больше ни на что не могу. Решил вот посоветоваться на всякий случай
85 unregistered
 
10.05.18
16:36
(84) > кроме как на сеть грешить больше ни на что не могу

Для этого и нужен замер производительности.
Может после заполнения данных на сервере у вас выполняется какой-то код на клиенте. Какое-нибудь перечитывание формы с перезаполнением элементов формы. И тут выплывает какая-нибудь особенность - отличие "быстрого" компа от "медленного".

Сеть проверьте командой Ping с параметром, как я описал в (78).
86 LeoKeyn
 
10.05.18
16:39
(85) обязательно проверю, как получу доступ к компьютеру, спасибо. Отпишусь о результатах)
87 DrShad
 
10.05.18
16:40
к гадалке не ходи, что кроме сбора данных заполнения еще и форма перерисовывается
88 mistеr
 
10.05.18
17:00
(68) Трэш какой. Гоняют таблицы туда-сюда и в итоге все равно вручную делают то, что должен делать скуль.
89 mistеr
 
10.05.18
17:01
А никого не смутило (14) "проверка то это идет через некий портал"? Возможно, ТС все-таки не договаривает.
90 unregistered
 
10.05.18
17:16
(89) > Возможно, ТС все-таки не договаривает.


Конечно возможно. Но как это проверить? ;)
Мест, где он может не договаривать полно. И "проверка через некий портал" - только лишь одно из многих.
91 alxxsssar
 
10.05.18
17:46
(42) не получится. это загрузка из внешнего файла который присылают Органы
92 alxxsssar
 
10.05.18
17:48
(0) а конфигурации компьютеров одинаковые?
93 Fram
 
10.05.18
18:32
(91) мне кажется, ты не совсем правильно понял что имелось ввиду под "физически сократить"
Основная теорема систематики: Новые системы плодят новые проблемы.