Имя: Пароль:
1C
1С v8
Розница 2.3. От чего зависит скорость выполнения запроса по остаткам номенклатуры
,
0 slafor
 
22.05.21
21:38
В Рознице 2.3 есть самописный отчет по количеству позиций номенклатуры в разрезе групп. То есть, допустим, в группе "Стройматериалы" - столько-то позиций (элементов) в справочнике, в группе "Электрика" - столько-то, ну и т.д.
Делается запрос по справочнику Номенклатуры, а потом - другой запрос, по остаткам различных элементов номенклатуры на определенную дату, причем тоже в разрезе групп. Это - две временных таблицы, потом берем данные одной из них - из справочника, и делаем левое соединение с временной таблицы по остаткам. И все.
Так вот, почему-то получается так, что запрос выполняется очень долго при получении данных за Январь 2021 г., где-то порядка 15 минут. Зато за Декабрь 2020 г. - всего 1 минуту. И что самое интересно, если сначала выполнить запрос за Декабрь 2020 г. - то и за Январь 2021 г. он тоже будет выполняться порядка минуты. Прямо чудеса какие-то.
Итоги в РН Товары на складах (из которого берутся остатки) рассчитаны правильно, на апрель 2021 г.. Все условия в самом запросе - в условиях виртуальной таблицы, а не в "ГДЕ", как и положено. Индексацию в ВТ не делаю, да и, как я понял, от этого не сильно зависит - за Декабрь 2020 г. и без нее запрос "летает".

Сейчас перезапустил базу - за Январь 2021 г. опять меньше минуты. Но проблема возникла не сегодня, и уверен, что завтра опять повторится "долгое ожидание" результата.

Почему такое возможно?
1 piter3
 
22.05.21
22:11
Итоги, обслуживания может треба база
2 slafor
 
22.05.21
22:15
(1) Итоги установлены и рассчитаны на конец апреля 2021 г. А что еще нужно сделать?

Да, база файловая, но все манипуляции я провожу на копии - она тоже, соответственно, файловая
3 slafor
 
22.05.21
22:16
(2) + Больше меня никто в эту копию не заходит. Никогда.
4 piter3
 
22.05.21
22:16
(2) текст запроса секретен?
5 slafor
 
22.05.21
22:24
Да нет...

ВЫБРАТЬ
    Номенклатура.Родитель КАК Родитель,
    СУММА(1) КАК Всего,
    Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ Ном
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ

СГРУППИРОВАТЬ ПО
    Номенклатура.Родитель,
    Номенклатура.Ссылка
;
                      ////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура.Ссылка КАК НоменклатураСсылка,
    ТоварыНаСкладахОстатки.Номенклатура.Родитель КАК НоменклатураРодитель,
    СУММА(1) КАК ВНаличии
ПОМЕСТИТЬ Ост
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)) КАК ТоварыНаСкладахОстатки

СГРУППИРОВАТЬ ПО
    ТоварыНаСкладахОстатки.Номенклатура.Родитель,
    ТоварыНаСкладахОстатки.Номенклатура.Ссылка
;
                       ////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Ном.Родитель КАК Родитель,
    СУММА(Ном.Всего) КАК Всего,
    ЕСТЬNULL(СУММА(Ост.ВНаличии), 0) КАК ВНаличии
ИЗ
    Ном КАК Ном
        ЛЕВОЕ СОЕДИНЕНИЕ Ост КАК Ост
        ПО Ном.Ссылка = Ост.НоменклатураСсылка

СГРУППИРОВАТЬ ПО
    Ном.Родитель
6 slafor
 
22.05.21
22:26
В ВТ Ном немного не дописал:
после ГДЕ там следует Номенклатура.Родитель <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
7 slafor
 
22.05.21
22:27
Это значит, что я не беру элементы первого уровня )
8 piter3
 
22.05.21
22:32
По файловой не подскажу, а что мешает выбрать остатки, а уж потом по родителю играться
9 piter3
 
22.05.21
22:34
По иерархии что-то было, не могу вспомнить, в ней дело скорее всего
10 acanta
 
22.05.21
22:43
А зачем выбирать то, что не требуется для итогового запроса?
11 piter3
 
22.05.21
22:58
Ладно, а какая задача?
12 slafor
 
22.05.21
23:06
(8) Мне нужно, чтобы в результат попали ВСЕ элементы из справочника Номенклатуры, за исключением элементов первого уровня. Есть они в остатках или нет - не важно.
13 hhhh
 
22.05.21
23:12
(7) там важен параметр Дата, если начало месяца, например 1 декабря или 1 января, причем на 0ч, 0мин и 0сек, то остатки берутся из таблицы итогов - это быстро. А если например дата в середине месяца, то остаток рассчитывается по реальной таблице регистра - это очень долго.
14 slafor
 
23.05.21
00:10
(13) То есть если я буду ставить не конец месяца, как обычно, а начало следующего 0:00:00, то остатки будут браться очень быстро?
Спасибо, попробую. Хотя... за декабрь я ведь тоже ставлю концом месяца, а расчеты идут быстро )
15 Маленький Вопросик
 
23.05.21
09:20
(0) от ДНК )))))
16 Garykom
 
гуру
23.05.21
10:59
(0) например антивирус тупо шерстит если в исключения не добавил
17 slafor
 
23.05.21
13:09
(16) Может быть, и антивирус. Но как узнать, есть он или нет...

Дело в том, что я работаю в этой копии удаленно, через VPN - RDP. А сегодня запустил базу у себя на компе - вообще задержек нет.
18 slafor
 
23.05.21
19:26
(17) Вот написал и как себе назло )
Теперь долго грузится везде, и на моем компе, и по удаленному доступу... Причем вне зависимости от даты.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс