Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> ПолучитьДеревоПартийНаСкладахУпр выполняется 12 секунд , УТП          
vbi Подменю пользователя
сообщение 18.07.12, 11:04
Сообщение #1

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

При перепроведении заказа за прошлый день выполняется функция "ПолучитьДеревоПартийНаСкладахУпр" из общего модуля "УправлениеЗАпасамиПартионныйУчет". Дело в том, что эта функция выполняется 11-12 секунд.

Вот сама стандартная функция
Функция ПолучитьДеревоПартийНаСкладахУпр (МоментКон, СтруктураПараметров)

    Запрос = Новый Запрос;
    
    ОсновнойДокумент = Неопределено;
    СтруктураПараметров.Свойство("ОсновнойДокумент",ОсновнойДокумент);
    
    Регистратор = СтруктураПараметров.Регистратор;
    СпособОценкиМПЗ = СтруктураПараметров.СпособОценкиМПЗУпр;
    СтратегияСтатусПартии = СтруктураПараметров.СтратегияСтатусПартииУпр;
    ВестиПартионныйУчетПоСкладам = СтруктураПараметров.ВестиПартионныйУчетПоСкладамУпр;

    // Для повышения быстродействия остатки партий получаются различными способами
    Если СтруктураПараметров.Свойство("ЗакрытиеЗаказовПокупателей") Тогда
        ЗаполнитьЗапросПартийНаСкладахДляЗакрытияЗаказовПокупателей(Запрос);
        
    ИначеЕсли ОсновнойДокумент <> Неопределено И НЕ СтруктураПараметров.СписыватьПартииРасходнымОрдером
        И ТипЗнч(ОсновнойДокумент) = Тип("ДокументСсылка.РеализацияТоваровУслуг")тогда
        // Списание расходным ордером товара реализованного и принятого на ответственное хранение (отложенная отгрузка)
        ЗаполнитьЗапросПартийНаСкладахДляОтложеннойОтгрузкиУпр(Запрос, ВестиПартионныйУчетПоСкладам);
    
    ИначеЕсли ОсновнойДокумент <> Неопределено тогда
        // Списание партий по ордерной схеме:
        // - Списание партий по расходному ордеру
        // - Перемещение партий по приходному ордеру
        // - Перемещение партий поступлением товаров и услуг в НТТ
        // Движения реализации выполняет расходный ордер, движения перемещения выполняет приходный ордер
        ЗаполнитьЗапросПартийНаСкладахДляСписанияПоОрдернойСхемеУпр(Запрос, ВестиПартионныйУчетПоСкладам, СтратегияСтатусПартии, СпособОценкиМПЗ);
        
    Иначе
        // Общий случай списания
        ЗаполнитьЗапросПартийНаСкладахУпр(Запрос, ВестиПартионныйУчетПоСкладам, СтратегияСтатусПартии, СпособОценкиМПЗ);
        Если НЕ СтруктураПараметров.ИспользоватьУказаниеСерийНоменклатурыПриРезервировании тогда
            Запрос.Текст = СтрЗаменить(Запрос.Текст,"ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры",
            "ИЛИ ПартииТоваровНаСкладах.СерияНоменклатуры = &ПустаяСерияНоменклатуры
            |ИЛИ СписанныеТовары.КодОперацииПартииТоваров = &КодРезервирование");
            Запрос.УстановитьПараметр("КодРезервирование" , СтруктураПараметров.КодыОпераций.РезервированиеПодЗаказ)
        КонецЕсли;
        
    КонецЕсли;
    
    Запрос.УстановитьПараметр("ПустаяСерияНоменклатуры", Справочники.СерииНоменклатуры.ПустаяСсылка());
    Запрос.УстановитьПараметр("ПустойЗаказ", Документы.ЗаказПокупателя.ПустаяСсылка());
    Запрос.УстановитьПараметр("ПустойСтатус", Перечисления.СтатусыПартийТоваров.ПустаяСсылка());
    Запрос.УстановитьПараметр("СтатусПартииПоОрдеру", Перечисления.СтатусыПартийТоваров.ПоОрдеру);    
    Запрос.УстановитьПараметр("ПустоеКачество", Справочники.Качество.ПустаяСсылка());
    Запрос.УстановитьПараметр("КачествоНовый", Справочники.Качество.Новый);
    Запрос.УстановитьПараметр("ПустойСклад", Справочники.Склады.ПустаяСсылка());
    
    Запрос.УстановитьПараметр("Ссылка", Регистратор);
    
    Если  ОсновнойДокумент <> Неопределено Тогда
        Запрос.УстановитьПараметр("ОсновнойДокумент", ОсновнойДокумент);
    Иначе
        Запрос.УстановитьПараметр("ОсновнойДокумент", Регистратор);
    КонецЕсли;
    
    Запрос.УстановитьПараметр("Дат", МоментКон);
    
    Запрос.УстановитьПараметр("НаКомиссию", Перечисления.СтатусыПартийТоваров.НаКомиссию);
    
    Возврат Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); // Вот этот участок выполняется 12 секунд *********************

КонецФункции//ПолучитьДеревоПартийНаСкладахУпр


Активных пользователей 31, база на SQL. В день создается около 300 заказов и реализаций. Каждый день они перепроводят некоторые заказы за прошлый и позапрошлый день. В чем может быть причина? Как ее решить, ваше мнение. Может итоги какие по партиям непосчитаны или просто ожидание блокировки?

Вот запрос, который выполняется:

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

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


Signature
Впроваджую, супроводжую

logist Подменю пользователя
сообщение 18.07.12, 11:10
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(vbi @ 18.07.12, 12:04) *
Может итоги какие по партиям непосчитаны или просто ожидание блокировки?

Посмотрите отладчиком в какой строке тормозит 10 секунд, это визуально будет заметно. Тогда можно обсуждать проблему.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

vbi Подменю пользователя
сообщение 18.07.12, 11:14
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Вот в этой строчке:

Возврат Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); // Вот этот участок выполняется 12 секунд *********************


Извеняюсь, не при проведении заказа, а при проведении реализации.


Signature
Впроваджую, супроводжую

Vofka Подменю пользователя
сообщение 18.07.12, 11:27
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13956
Из: Киев
Спасибо сказали: 4523 раз
Рейтинг: 3645.4

Цитата(vbi @ 18.07.12, 12:04) *
Может итоги какие по партиям непосчитаны

Может, попробуйте на копии пересчитать.

Цитата(vbi @ 18.07.12, 12:04) *
или просто ожидание блокировки?

Это тоже проверить легко: разверните копию на SQL и находясь в базе самому выполните ту же операцию. Или же в настройках базы поставьте ожидание блокировок несколько секунд. И если система так и будет висеть 10 секунд без сообщения "ожидание блокировки" - значит не оно.

Сообщение отредактировал Vofka - 18.07.12, 11:28

Спасибо сказали: vbi,

vbi Подменю пользователя
сообщение 18.07.12, 11:39
Сообщение #5

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Спасибо Вофка, попробую. Кстате, выполняю тот же запрос в запроснике с теми же параметрами - выполняется 2 секунды (Ну только вместо момента времени ставлю просто дату документа)

Была копия на SQL. Попробовал там - та же ситуация. Пользователь только я один, а реализация проводится 10 - 12 с. Так что это не ожидание блокировок.

Сообщение отредактировал vbi - 18.07.12, 11:45


Signature
Впроваджую, супроводжую

Vofka Подменю пользователя
сообщение 18.07.12, 11:52
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13956
Из: Киев
Спасибо сказали: 4523 раз
Рейтинг: 3645.4

Цитата(vbi @ 18.07.12, 12:39) *
Была копия на SQL. Попробовал там - та же ситуация. Пользователь только я один, а реализация проводится 10 - 12 с. Так что это не ожидание блокировок.

Пересчитайте итоги.

vbi Подменю пользователя
сообщение 18.07.12, 12:02
Сообщение #7

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Цитата(Vofka @ 18.07.12, 12:52) *
Пересчитайте итоги.


Через "Операции - Управління підсумками" пересчет итого регистров накопления ничего не дало, сейчас попробую через конфигуратор


Signature
Впроваджую, супроводжую

Batchir Подменю пользователя
сообщение 18.07.12, 12:36
Сообщение #8

Живет на форуме
Иконка группы
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1427 раз
Рейтинг: 0

http://pro1c.org.ua/index.php?showtopic=316

Сообщение отредактировал Batchir - 18.07.12, 12:49

Спасибо сказали: vbi,

vbi Подменю пользователя
сообщение 18.07.12, 15:12
Сообщение #9

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Цитата(Batchir @ 18.07.12, 13:36) *

Пересчет итогов в конфигураторе не дал результата. Batchir, спасибо попробую!


 ! 

Правила, п.13
 

Спасибо, Batchir, проблема решилась!

Сообщение отредактировал logist - 18.07.12, 15:39


Signature
Впроваджую, супроводжую

Vofka Подменю пользователя
сообщение 18.07.12, 15:18
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13956
Из: Киев
Спасибо сказали: 4523 раз
Рейтинг: 3645.4

Цитата(vbi @ 18.07.12, 16:12) *
Спасибо, Batchir, проблема решилась!

Сделали с использованием временных таблиц или списком параметров?

vbi Подменю пользователя
сообщение 18.07.12, 15:49
Сообщение #11

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

А где там предложены временные таблицы? Я взял Вариант Batchir'а. Запрос вместо 12 с. исполняется 1 с.

P.S. На счет правил - каюсь). Что-то часто начал их нарушать последнее время. Наверно нужно время от времени перечитывать, вспоминать smile.gif


Signature
Впроваджую, супроводжую

Vofka Подменю пользователя
сообщение 18.07.12, 16:02
Сообщение #12

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13956
Из: Киев
Спасибо сказали: 4523 раз
Рейтинг: 3645.4

Цитата(vbi @ 18.07.12, 16:49) *
А где там предложены временные таблицы?

Внизу курсивом.

А что в запросе Батчира отличается: нет условия на виртуальную таблицу СписанныеТовары?

vbi Подменю пользователя
сообщение 19.07.12, 10:05
Сообщение #13

Оратор
Иконка группы
Группа: Местный
Сообщений: 373
Из: Украина, Луцк
Спасибо сказали: 72 раз
Рейтинг: 0

Там нет вложеного запроса в отборе регистра партий. Отбор оттуда вообще перенесен.
Был у меня один такой случай недавно, когда выборка просто данных регистра с условием "ГДЕ" выполнялась быстрее чем та же задача, но реализована через обороты с отбором в самом регистре.


Signature
Впроваджую, супроводжую

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 24.05.24, 0:08
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!