Имя: Пароль:
1C
1С v8
Очень долго выполняется запрос
,
0 Kalina
 
27.02.20
11:27
Здравствуйте 1с КА 1.1 она же УПП
вроде обычный запрос, Регистр Сведений НетДокументов - самодельный регистр - бухи помечают в нем есть у них бумажные документы или нет, 1 Измерение - Документ, 1 Ресурс - Булево (есть или нет), 6 Реквизитов - Контрагент, Сумма, Ответственный и т.д.
база файловая, но это не отмазка - припроведении используется куча регистров, а тормозит тока на этом
вызывается из Подписки На События - ПриЗаписи
    Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |    НетДокументов.Документ.Ссылка КАК Док
                  |ИЗ
                  |    РегистрСведений.НетДокументов КАК НетДокументов
                  |ГДЕ
                  |    НетДокументов.Документ.Ссылка = &Документ";
Буду признателен за подробный, разжеваный ответ :)
С Уважением Kalina
1 butterbean
 
27.02.20
11:28
для начала - убрать Документ.Ссылка, оставить просто Документ
2 fisher
 
27.02.20
11:31
(1) +1
И на всякий случай проверить наличие RLS по этому регистру.
3 butterbean
 
27.02.20
11:32
(1)+ понять зачем вообще этот запрос и что он делает - в примере фигня, т.к. он просто выдает одну ссылку на передаваемый в качестве параметра документ
4 fisher
 
27.02.20
11:34
(0) НетДокументов.Документ.Ссылка - приводит к неявному соединению с таблицей документов. А так как вангую, что это измерение составного типа, то приводит к неявному соединению со ВСЕМИ таблицами регистраторов.
5 Kalina
 
27.02.20
11:36
(3) Запрос проверяет - есть ли запись про этот документ, если запись есть, то делает ничего
если нет - создает запись
если Док помечают на удаление - удаляет запись из Регистра
(4)  ну да (Поступление и Реализация) и что делать ?
6 fisher
 
27.02.20
11:37
(5) Тебе же сказали уже. Чукча писатель?
    Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |    НетДокументов.Документ КАК Док
                  |ИЗ
                  |    РегистрСведений.НетДокументов КАК НетДокументов
                  |ГДЕ
                  |    НетДокументов.Документ = &Документ";
7 Timon1405
 
27.02.20
11:38
читать (1) до просветления
8 novichok79
 
27.02.20
11:39
план запроса в студию ёпт
9 Kalina
 
27.02.20
11:41
(6) сам чукча, ведм себя себя прилично
10 novichok79
 
27.02.20
11:42
RLS + убрать ссылку + план запроса.
что тут думать то
11 fisher
 
27.02.20
11:44
(9) Чукча - это описание состояния. Иногда бываю и я, да. Если оскорбил - извиняюсь.
12 Kalina
 
27.02.20
11:51
(6) Ссылку убрал - ругается на условие  
|    НетДокументов.Документ = &Документ";
тип поля в РС.Документ - ссылка - в параметре &Документ тада тоже ведь ссылку надо ставить ?
13 palsergeich
 
27.02.20
11:54
(12) ага
14 fisher
 
27.02.20
11:56
(12) Так и до этого надо было ссылку ставить. Не понимаю, почему у тебя раньше не ругалось, а тут вдруг начало.
15 ДенисЧ
 
27.02.20
11:56
(12) А ты что ставил? О_о
16 Kalina
 
27.02.20
11:56
Запрос.УстановитьПараметр("Документ", Документ.Ссылка);
    Запрос.Текст ="ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |    НетДокументов.Документ КАК Док
                  |ИЗ
                  |    РегистрСведений.НетДокументов КАК НетДокументов
                  |ГДЕ
                  |    НетДокументов.Документ = &Документ";

вот так стал работать раза в 2 быстрее
спасибо друзья
мож еще что можно сделать для разгона ? :)
17 unenu
 
27.02.20
11:58
самое лучшее закрыть тему и не позориться
18 fisher
 
27.02.20
12:00
(16) Ну, оптимизировать уже дальше некуда. Проверь наличие RLS и если их нет - только комп мощнее или регистр почистить, ежели так разбух, что даже индекс не шибко спасает.
19 Галахад
 
гуру
27.02.20
12:00
А медленно это сколько? В цифрах.
20 Йохохо
 
27.02.20
12:02
(16) передать в привилегированный модуль и выкинуть разрешенные
или регистр переименовать в НетРазрешенныхДокументов, а то суть не отражает
21 Kalina
 
27.02.20
12:05
(19) 52 Документа 10-15 строк 80 сек ГрупповойОбработкойСпраовчниковДокументов
до этого было раза в 2 дольще
22 Галахад
 
гуру
27.02.20
12:09
(21) Гм. Запрос сколько выполняется?
23 FIXXXL
 
27.02.20
12:10
Я бы выкинул запрос. Ибо "сначала проверяем, потом пишем".
Создавай НаборЗаписей, Прочитать(), если пустой Добавить()-Записать(), не пустой - ничего не делать
24 fisher
 
27.02.20
12:16
(21) Зуб даю, что теперь у тебя узкое место не этот запрос. Сделай замер производительности.
25 dmpl
 
27.02.20
12:21
(16) Убрать запрос из цикла, и информацию по всем документам получать одним запросом.
26 Kalina
 
27.02.20
12:22
(22) если ты об этом
ОбщийМодуль.МоиДоработки.Модуль    224    Запись = Запрос.Выполнить().Выбрать();    1    0,001916    0,33

(24) да, стало гораздо лучше
спасибо
но непойму почему, ведь Ссылку выбрать гораздо легче чем документ ?
она уже хранится в Регистре (НетДокументов.Документ - тип знач - Ссылка)
и в Условии ведь тоже ссылка используется ?
27 dezss
 
27.02.20
12:29
(26) Потому что поле Документ в таблице этого регистра хранится, а поле Ссылка хранится в другой таблице, даже в 2-х, поэтому обращение через 2-ю точку делает неявное левое соединение с теми таблицами.
А вообще, на мой взгляд, (23) дело говорит.
28 hhhh
 
27.02.20
12:29
(26) где  в условии ссылка?
29 fisher
 
27.02.20
12:30
(26) А почему запрос выполняется 224 раза на 52 документа? Но все равно суммарное общее время - треть секунды.
Там уже и так ссылка. А любое обращение в запросе через точку от ссылки трактуется уже как обращение к связанной таблице-источнику. В результате вместо того, чтобы просто проверить та или не та ссылка в регистре, платформа сначала "цепляет" к регистру таблицы всех источников и уже в них ищет на совпадение ссылки как ключевого поля в этой таблице.
30 Курцвейл
 
27.02.20
12:34
(29) Это номер строки в обработке
31 Kalina
 
27.02.20
12:36
(28)вот  Запрос.УстановитьПараметр("Документ", Документ.Ссылка);
     |    НетДокументов.Документ = &Документ";
(29) номер строки
32 fisher
 
27.02.20
12:38
Хм... А что такое тогда 0,001916 и 0,33?
33 mzelensky
 
27.02.20
12:38
А еще вопрсо по структуре регистра. Какие Измерения у него, в каком порядке расположены, есть ли индексирование полей ?
34 goodprog
 
27.02.20
12:39
(29) очень похоже на запрос в цикле) Доков всего 224, 52 из них без документов
35 Kalina
 
27.02.20
12:42
(29) Спасибо, кажется начинаю просветляться :)
(34) нет - вызывается один раз при записи документа - просто на групповой обработке удобнее отлаживать, да и проблема возникает тока при например восстановлении последовательности
когда перепроводится одновременно много документов, я даже не сразу увидел эту проблему
36 fisher
 
27.02.20
12:43
(32) +
По-моему, если не путаю, тогда одна из этих цифр - абсолютное время выполнения, а вторая - доля в общем времени выполнения. В общем, как ни трактуй, а дело уже не в этом запросе :
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn