Имя: Пароль:
1C
1С v8
Выборка движений документа запросом очень долго
,
0 Chesnok
 
02.12.19
17:13
Привет всем гуру.

Почему простой запрос к движениям документа выполняется так долго?
Первый раз 60 сек., второй и последующие 21 сек.
База файловая, документов с гулькин нос.

Запрос (в МассивОбъектов один документ) :

         ВЫБРАТЬ
     |    ХозрасчетныйДвиженияССубконто.СчетДт КАК СчетДт,
     |    ХозрасчетныйДвиженияССубконто.Сумма КАК Сумма,
     |    ХозрасчетныйДвиженияССубконто.СубконтоДт1 КАК Номенклатура,
     |    ХозрасчетныйДвиженияССубконто.СубконтоДт3 КАК Сотрудник,
     |    ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор
     |ПОМЕСТИТЬ ВТДвижения
     |ИЗ
     |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто
     |ГДЕ
     |    ХозрасчетныйДвиженияССубконто.Регистратор В(&МассивОбъектов)
     |    И (ХозрасчетныйДвиженияССубконто.СчетДт = &Счет10_9 ИЛИ ХозрасчетныйДвиженияССубконто.СчетДт = &Счет10_11)

Через чтение движений гораздо быстрее:

Движения = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
Движения.Отбор.Регистратор.Установить(ВыборкаПоДокументам.Документ);
Движения.Прочитать();
Для Каждого Движение Из Движения Цикл
     Если (Движение.СчетДт = ПланыСчетов.Хозрасчетный.ИнвентарьИХозяйственныеПринадлежностиВЭкспл) ИЛИ (Движение.СчетДт = ПланыСчетов.Хозрасчетный.СпецодеждаВЭксплуатации) Тогда
    НоваяСтрока = ТаблДвиж.Добавить();
    НоваяСтрока.Сотрудник = Движение.СубконтоДт.РаботникиОрганизаций;
    НоваяСтрока.Номенклатура = Движение.СубконтоДт.Номенклатура;
    НоваяСтрока.Сумма = Движение.Сумма;
     КонецЕсли;
КонецЦикла;
1 hhhh
 
02.12.19
17:16
|ИЗ
     |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ХозрасчетныйДвиженияССубконто

период обозначь. А то ты выбираешь таблицу за много-много лет
2 dka80
 
02.12.19
17:18
И (ХозрасчетныйДвиженияССубконто.СчетДт = &Счет10_9 ИЛИ ХозрасчетныйДвиженияССубконто.СчетДт = &Счет10_11)
Перенеси в параметры виртуальной таблицы
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , СчетДт В (&Счет10_9, &Счет10_11), , ) КАК ХозрасчетныйДвиженияССубконто
3 dka80
 
02.12.19
17:19
И регистратор туда же: в параметры вирт табилцы
4 dka80
 
02.12.19
17:20
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(, , СчетДт В (&Счет10_9, &Счет10_11) И Регистратор В(&Регистратор), , ) КАК ХозрасчетныйДвиженияССубконто
5 Cyberhawk
 
02.12.19
17:39
(1) Откуда он возьмет период, если ему известны только регистраторы и пара счетов?
6 hhhh
 
02.12.19
18:03
(5) дата первого регистратора из &МассивОбъектов
7 Chesnok
 
02.12.19
18:15
(1) А почему на выборку не накладывается фильтр по регистратору?
ХозрасчетныйДвиженияССубконто.Регистратор В(&МассивОбъектов)
8 Chesnok
 
02.12.19
18:16
(2) Сейчас попробую
9 Chesnok
 
02.12.19
18:26
(7) Вопрос снят, почитал ИТС:
"Однако такое решение будет неоптимальным, так как сначала виртуальная таблица выберет все записи из таблицы остатков, а затем уже на полученную выборку будет наложен отбор по значению номенклатуры."
10 Cyberhawk
 
03.12.19
09:38
(6) Подход ненадежный, а значит и не нужный
11 ДенисЧ
 
03.12.19
09:40
А почему бы условие на регистратор не перенести в условия вирттаблицы?