Имя: Пароль:
1C
1С v8
Как ускорить выполнение запроса в цикле по документам?
0 burrya
 
12.05.20
10:23
Добрый день.

В продолжении темы: УТП Проведение большого количества документов
Перепроводится большое количество документов за большой период.
Замер показывает что основное время уходит на выполнение нижеследующего запроса...

Как можно ускорить его выполнение?
Может ли помочь пересчет итогов?

ВЫБРАТЬ
    Остатки.Счет КАК СчетУчета,
    Остатки.Субконто1 КАК Номенклатура,
    &ПустаяХарактеристика КАК ХарактеристикаНоменклатуры,
    &ПустаяСерия КАК СерияНоменклатуры,
    &ПустойЗаказ КАК ЗаказПокупателя,
    0 КАК СовпалЗаказ,
    &ПустоеКачество КАК Качество,
    &ПустаяНоменклатурнаяПозиция КАК НоменклатурнаяПозиция,
    &ПустаяДата КАК ДокументОприходованияДата,
    &ПустаяПартия КАК ДокументОприходования,
    &ПустаяДата КАК ДокументОтгрузкиДата,
    &ПустаяОтгрузка КАК ДокументОтгрузки,
    Остатки.Субконто2 КАК Склад,
    Остатки.Организация КАК Организация,
    Остатки.НалоговоеНазначение КАК НалоговоеНазначение,
    СУММА(ВЫБОР КОГДА Остатки.КоличествоОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.КоличествоОстатокДт КОНЕЦ) КАК Количество,
    СУММА(ВЫБОР КОГДА Остатки.СуммаОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.СуммаОстатокДт КОНЕЦ) КАК Стоимость,
    СУММА(ВЫБОР КОГДА Остатки.СуммаНУОстатокДт ЕСТЬ NULL ТОГДА 0 ИНАЧЕ Остатки.СуммаНУОстатокДт КОНЕЦ) КАК СтоимостьНУ
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&МоментКон, Счет В (&СчетаУчетаНС), &ВидыСубконтоНС,Субконто1 В (&Номенклатура) И Субконто2 В (&Склады) И Организация В (&Организации) И (НалоговоеНазначение В(&НалоговыеНазначения))) КАК Остатки

СГРУППИРОВАТЬ ПО
    Остатки.Счет,
    Остатки.Субконто1,
    Остатки.Субконто2,
    Остатки.Организация,
    Остатки.НалоговоеНазначение        
ИТОГИ ПО Номенклатура
1 Ненавижу 1С
 
гуру
12.05.20
10:25
главное чтобы запрос не в цикле запускался
2 burrya
 
12.05.20
10:32
(1) Выполняется один раз для каждого документа...
3 Ненавижу 1С
 
гуру
12.05.20
10:34
(2) значит в цикле, это ужасно
4 timurhv
 
12.05.20
10:48
(0) У вас в запросе "Счет В (&СчетаУчетаНС)", т.е. используется только определенный счет? Может создать таблицу значений, заполнить ее первоначальными остатками до даты проведения. Потом после проведения записывать туда движение документа (либо актуализировать остатки по ключам субконто, счетам и тд) и каждый раз получать уже из таблицы при проведении?
Таблицу можно передавать через дополнительные свойства.
5 timurhv
 
12.05.20
10:51
(0) Если они не рассчитаны на дату перепроведения, то поможет. Но я бы в исходной теме воспользовался (18), можно выгружать движения и не через план обмена.
6 Волшебник
 
12.05.20
11:04
(0) Убрать СГРУППИРОВАТЬ ПО, убрать ИТОГИ ПО
Виртуальная таблица Остатки выдаёт уже сгруппированные итоги.
7 nicxxx
 
12.05.20
12:04
(6) Не спасет. В виртуальных таблицах основное время идет на получение движений от начала периода итогов до момента времени "МоментКон". Хороший совет дан в сообщении (4). Главное при этом, понять, как встроить передачу такой таблицы в контекст обработки проведения. Если используется штатное перепроведение, дополнительные свойства не помогут. В этом случае придется написать свою обработку.
8 VS-1976
 
12.05.20
12:53
1. Если много документов, то зачем таскать постоянно на клиента этот мусор?.

  &ПустаяХарактеристика КАК ХарактеристикаНоменклатуры,
    &ПустаяСерия КАК СерияНоменклатуры,
    &ПустойЗаказ КАК ЗаказПокупателя,
    0 КАК СовпалЗаказ,
    &ПустоеКачество КАК Качество,
    &ПустаяНоменклатурнаяПозиция КАК НоменклатурнаяПозиция,
    &ПустаяДата КАК ДокументОприходованияДата,
    &ПустаяПартия КАК ДокументОприходования,
    &ПустаяДата КАК ДокументОтгрузкиДата,
    &ПустаяОтгрузка КАК ДокументОтгрузки,

2. СГРУППИРОВАТЬ ПО
    Остатки.Счет,
    Остатки.Субконто1,
    Остатки.Субконто2,
    Остатки.Организация,
    Остатки.НалоговоеНазначение        
ИТОГИ ПО Номенклатура

Реально зачем это делать, если Остатки и так группирует по выбираемым полям

3. РегистрБухгалтерии.Хозрасчетный.Остатки(&МоментКон, Счет В (&СчетаУчетаНС), &ВидыСубконтоНС ) КАК Остатки

Попробуй это выкинуть в ГДЕ

Субконто1 В (&Номенклатура)
И Субконто2 В (&Склады)
И Организация В (&Организации)
И (НалоговоеНазначение В(&НалоговыеНазначения))


Если &Номенклатура много, то лучше сделать через соединение:

ВЫБРАТЬ
...

ИЗ
  ( ВЫБРАТЬ
    Ссылка
  ИЗ
    Справочник.Номенклатура
  ГДЕ
    Ссылка В (&Номенклатура) ) КАК тзНоменклатуры

  СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&МоментКон, Счет В (&СчетаУчетаНС), &ВидыСубконтоНС ) КАК Остатки
    ПО тзНоменклатуры.Ссылка = Остатки.Субконто1
     И Остатки.Субконто2 В (&Склады)
     И Организация В (&Организации)
     И (НалоговоеНазначение В(&НалоговыеНазначения))

Возможно часть можно вернуть в фильтр для виртуальной таблицы "Остатки",если значений мало, к примеру:

  СОЕДИНЕНИЕ  РегистрБухгалтерии.Хозрасчетный.Остатки(&МоментКон, Счет В (&СчетаУчетаНС), &ВидыСубконтоНС,Субконто2 В (&Склады) И Организация В (&Организации) И (НалоговоеНазначение В(&НалоговыеНазначения))) КАК Остатки
    ПО тзНоменклатуры.Ссылка = Остатки.Субконто1
9 burrya
 
12.05.20
16:26
(4) - там много видов документов и много мудреніх доработок по движениям - боюсь накосячу...
(5) - этот вариант и реализуем, только даже в копии медленно идет - пара дней на месяц, а вот как перебросить потом движения - никогда не сталкивался с подобным? и рабочая база уйдет вперед.. я так понимаю потом разницу между базами можно будет допровести..
(8) Сделал, буду смотреть, как повлияет..