Имя: Пароль:
1C
1С v8
УТ 10.3 очень долгое проведение документа.
,
0 IVT_2009
 
23.09.14
13:34
Столкнулся со следующей проблемой: В базе УТ 10.3 провожу документ "Отчет о розничных продажах",
документ проводится от 1 до 3 минут. Эффект возникает переодически , причем в базе может быть только один пользователь.
Тестирование и исправление делал , пересчет итогов то же. Эффект не ушел.
Режим базы - файловый, пользователей 5. До прошлой недели работала нормально на протяжении 5 лет. Размер
БД 8,3 гб , не один регистр не занимает больше 1,3 гб. Еще это центральная база для РИБ с 15ю Розница 1.0.
Конфигурация не изменялась - т.е. как есть от 1с.

Замер производительности показал , что тормоза возникают при выполнении запроса
в (Функция ПолучитьДеревоПартийНаСкладахУпр (МоментКон, СтруктураПараметров))
к регистрам ПартииТоваровНаСкладах и РегистрСведений.СписанныеТовары.
Эффект появляется переодически , есть ощущение ,
что происходит какая то блокировка данных. Как выяснить в чем проблема ?
1 IVT_2009
 
23.09.14
13:34
Эффект имеет место быть и при проведении других документов.
2 Eugene_life
 
23.09.14
13:37
(0)Попробуй последовательность восстановить. Может, (в копии) сделай полное перепроведение документов. Возможно, какие-то партии неправильно списались. Хотя ХЗ
3 IVT_2009
 
23.09.14
13:40
Кратковеменный эффект дает пересчет регистров в востановлении данных. Не уверен на счет перепроведения т.к. база РИБ.
4 pavelul73
 
23.09.14
13:41
Что - то делалось на прошлой неделе?
(0) "До прошлой недели работала нормально на протяжении 5 лет"
5 IVT_2009
 
23.09.14
13:43
Как не странно - ничего. Глюк пошел при опытах перенос в SQL на копии (был замечен впервые) , но я решил что это настройки SQL и не стал обращать внимания. Через пару дней вылез на рабочей.
6 H A D G E H O G s
 
23.09.14
13:50
Держи:

Процедура ЗаполнитьЗапросПартийНаСкладахУпр(Запрос, ВестиПартионныйУчетПоСкладам, СтратегияСтатусПартии, СпособОценкиМПЗ)
    
    ОптимизированноеСписаниеПартий=_ОбщегоНазначенияКлиентСервер.глЗначениеПеременной("ОптимизированноеСписаниеПартий");
    
    Если ОптимизированноеСписаниеПартий=Истина Тогда
        Запрос.Текст=
        "ВЫБРАТЬ
        |    СписанныеТовары.НомерСтрокиДокумента,
        |    СписанныеТовары.Номенклатура КАК Номенклатура,
        |    СписанныеТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |    СписанныеТовары.СерияНоменклатуры,
        |    СписанныеТовары.Склад КАК Склад,
        |    СписанныеТовары.ДокументПартии,
        |    СписанныеТовары.ЗаказПартии,
        |    СписанныеТовары.КодОперацииПартииТоваров,
        |    СписанныеТовары.ЗаказСписания,
        |    СписанныеТовары.Организация,
        |    СписанныеТовары.Качество КАК Качество,
        |    СписанныеТовары.ДопустимыйСтатус1,
        |    СписанныеТовары.ДопустимыйСтатус2,
        |    СписанныеТовары.ДопустимыйСтатус3,
        |    СписанныеТовары.ДопустимыйСтатус4,
        |    СписанныеТовары.СписыватьТолькоПоЗаказу
        |ПОМЕСТИТЬ СписанныеТовары
        |ИЗ
        |    РегистрСведений.СписанныеТовары КАК СписанныеТовары
        |ГДЕ
        |    СписанныеТовары.Регистратор = &ОсновнойДокумент
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    Номенклатура,
        |    ХарактеристикаНоменклатуры,
        |    Качество,
        |    Склад;";
        
        Если ВестиПартионныйУчетПоСкладам Тогда
            Запрос.Текст=Запрос.Текст+
            "
            |ВЫБРАТЬ РАЗЛИЧНЫЕ
            |    СписанныеТовары.Склад
            |ПОМЕСТИТЬ ФильтрПоСкладам
            |ИЗ
            |    СписанныеТовары КАК СписанныеТовары
            |
            |ОБЪЕДИНИТЬ ВСЕ
            |
            |ВЫБРАТЬ
            |    ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка);";
        КонецЕсли;

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

КонецПроцедуры // ЗаполнитьЗапросПартийНаСкладахУпр()
7 IVT_2009
 
23.09.14
13:55
(6) Спасибо! Это близко к теме , но проблема не ушла.
8 H A D G E H O G s
 
23.09.14
14:01
(7) Проблема уйдет при грамотном переходе на sql и решении (6) и еще несколько ему подобных.
9 IVT_2009
 
23.09.14
14:03
(8) В файловом все заработало. В SQL отваливается - но это тема отдельного исследования. Спасибо!
10 H A D G E H O G s
 
23.09.14
14:19
(9) Что заработало в файловой?
11 vis_tmp
 
23.09.14
14:25
(6)А чем он отличается от типового?
12 H A D G E H O G s
 
23.09.14
14:53
(11) Самое главное, наверное, отсутствием вооот этого:

"И (ПартииТоваровНаСкладах.Склад = СписанныеТовары.Склад ИЛИ ПартииТоваровНаСкладах.Склад = &ПустойСклад)", "")

Это условие надо смотреть на больших объемах регистра накопления :-)
13 hmmm
 
23.09.14
18:19
H A D G E H O G   - абсолютно прав. надо менять запрос (правда, я бы так сходу не брал чужой код, т.к. он имеет свои особенности!).
Еще такая же фигня (только хуже происходит для док-тов Возврат от покупателя.
14 vis_tmp
 
23.09.14
20:45
(12) Спасибо