Имя: Пароль:
1C
 
Долгое время выполнения типового запроса по партиям
0 ender10
 
23.09.19
11:07
Добрый день, появилась проблема длительного проведения документов в УПП (бывает до 5 минут, согласно встроенным замерам), удалось локализовать основную проблему - очень долго выполняются запросы к регистрам партий (причем и к управленческому и к БУ), пример запроса к управленческому регистру:
ВЫБРАТЬ
    ПартииТоваровНаСкладах.Номенклатура,
    ПартииТоваровНаСкладах.ДокументОприходования,
    ПартииТоваровНаСкладах.Склад,
    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
    ПартииТоваровНаСкладах.СерияНоменклатуры,
    ПартииТоваровНаСкладах.Качество,
    ПартииТоваровНаСкладах.Заказ,
    ПартииТоваровНаСкладах.КоличествоОстаток КАК Количество,
    ПартииТоваровНаСкладах.СтоимостьОстаток КАК Стоимость,
    ПартииТоваровНаСкладах.СтатусПартии
ПОМЕСТИТЬ ПартииТоваровНаСкладах
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.Остатки(
            &Дат,
            Организация = &Организация
                И (Номенклатура, ХарактеристикаНоменклатуры) В
                    (ВЫБРАТЬ
                        СписанныеТовары.Номенклатура,
                        СписанныеТовары.ХарактеристикаНоменклатуры
                    ИЗ
                        РегистрСведений.СписанныеТовары КАК СписанныеТовары
                    ГДЕ
                        СписанныеТовары.Регистратор = &Ссылка)
                И (Склад В
                        (ВЫБРАТЬ
                            РегистрСведений.СписанныеТовары.Склад
                        ИЗ
                            РегистрСведений.СписанныеТовары
                        ГДЕ
                            РегистрСведений.СписанныеТовары.Регистратор = &Ссылка)
                    ИЛИ Склад = &ПустойСклад)) КАК ПартииТоваровНаСкладах

ИНДЕКСИРОВАТЬ ПО
    ПартииТоваровНаСкладах.Номенклатура,
    ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры,
    ПартииТоваровНаСкладах.Качество,
    ПартииТоваровНаСкладах.Склад,
    ПартииТоваровНаСкладах.СтатусПартии,
    ПартииТоваровНаСкладах.Заказ,
    ПартииТоваровНаСкладах.СерияНоменклатуры
;

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

УПОРЯДОЧИТЬ ПО
    ЧислоСерияНоменклатуры,
    ЧислоДокументОприходования,
    ЧислоЗаказ,
    ЧислоСтатусПартии УБЫВ,
    ПартииТоваровНаСкладах.ДокументОприходования,
    ПартииТоваровНаСкладах.Склад
ИТОГИ ПО
    НомерСтрокиДокумента
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ПартииТоваровНаСкладах

код полностью типовой, в результате запроса порядка 10 строк, в 1-й временной таблице порядка 30-40 строк
текст запроса неявный, формируется в зависимости от условий, привел итоговый текст
если сделать несколько попыток проведения одного документа подряд, то время значительно сокращается и становится приемлемым
какие варианты решения посоветуете?
1 piter3
 
23.09.19
11:09
ЗАмеры укажут лучше.Или поискать,наверняка уже коллеги разбирали сей момент
2 piter3
 
23.09.19
11:10
3 Смотрящий
 
23.09.19
11:11
(0) Регистр не закрывается. Повторное проведение тянет данные с кэша
4 Ёпрст
 
23.09.19
11:12
(0) итоги то хоть по какое число расчитаны ?
5 ender10
 
23.09.19
11:14
(3) с кэшем понятно
если сделать запрос остатка - 4000 записей, не сказать что очень много
(4) с этим порядок 31.08.2019
6 ender10
 
23.09.19
11:15
еще уточню
в режиме предприятия запрос выполняется очень быстро, правда тестил не на момент документа, а просто на дату
7 Pershin Sergei88
 
23.09.19
11:19
было на упп подобное, когда перепроведение документов запускал для закрытия месяца, тоже долго висело. Закинул скрипт ниже на повтор каждые 20 мин. Это обновление статистики. раз в 10 быстрее стало проводиться.


USE [base]
GO

--  РегистрСведений.СписанныеТовары

UPDATE STATISTICS [dbo].[_InfoRg23857]
GO

--  РегистрНакопления.ПартииТоваровНаСкладах

UPDATE STATISTICS [dbo].[_AccumRg26367]
GO
UPDATE STATISTICS [dbo].[_AccumRgT26387]
GO

--  РегистрНакопления.ПартииТоваровНаСкладахБухгалтерскийУчет

UPDATE STATISTICS [dbo].[_AccumRg26389]
GO
UPDATE STATISTICS [dbo].[_AccumRgT26415]
GO

--  РегистрНакопления.ПартииТоваровНаСкладахНалоговыйУчет

UPDATE STATISTICS [dbo].[_AccumRg26443]
GO
UPDATE STATISTICS [dbo].[_AccumRgT26472]
GO
8 ender10
 
23.09.19
11:21
вот реальный замер из конфигуратора, в документе 8 строк
https://i.imgur.com/TG63A8x.png
9 ender10
 
23.09.19
11:23
(7) ну статистку обновляем ежедневно
возьму на заметку, но проблема систематическая, не только при закрытии месяца
10 d4rkmesa
 
23.09.19
11:27
(0) Да это же классика: http://forum.infostart.ru/forum34/topic88358/message1349574/#message1349574 прочитать коммент и топик. Можно статистику сверхчасто обновлять. Но, кстати, если регламенты настроены, то существенного улучшения не будет, скорее всего. Там кроме этого запроса еще очистка регистров не совсем оптимальная, ну еще моменты могут быть.
11 ender10
 
23.09.19
11:29
(10) спасибо, попробую поправить код