Каталог решений - Ускорение расчета себестоимости в УПП (партионный учет)

Ускорение расчета себестоимости в УПП (партионный учет)

Ускорение расчета себестоимости в УПП (партионный учет)

В наличии

Не секрет, что в момент закрытия периода в УПП приходится неоднократно перепроводить регламентный документ «Расчет себестоимости» для устранения ошибок в учете и получения корректной себестоимости выпуска. И здесь ключевую роль играет время, за которое выполняется полный расчет себестоимости.

Категория:

Описание

Используем партионный учет. Списание партий «по средней».

Как то в очередной раз разбираясь с расчетом себестоимости я заметил такую вещь, что в файловой базе полный расчет выполнялся за 30 секунд, а в серверной порядка 10 минут.

Отладчиком был найден типовой код, выполнение которого занимало большую часть времени. Как это ни удивительно, это оказались запросы по способам распределения статей затрат организации в общем модуле ПроцедурыРасчетаСебестоимостиВыпуска.

Посмотрев текст запроса и просто добавив соответствующие индексы во временные таблицы по способам распределения мы получили ускорение при проведении документа «Расчет себестоимости» в серверной базе почти в 20 раз (10 минут => 30 секунд).

Здесь следует сделать одно замечание: данный способ хорошо работает только в том случае, если в результирующей временной таблице по способам распределения большое число записей. Проверить это просто – выполните запрос из процедуры СформироватьВременнуюТаблицуСпособыРаспределения в консоли. В моем случае в выборке было порядка 100 тыс. записей (90 способов распределения на ~ 1200 подразделений организации (у нас это объекты строительства с этапами)).

Ниже приведены фрагменты кода:

  1. В процедуру СформироватьВременнуюТаблицуСпособыРаспределения сразу после запроса добавляем строки (см. комментарии //ТВИ):

ТекстЗапросаСКомментариями = «

|ВЫБРАТЬ РАЗЛИЧНЫЕ

…(полный текст запроса)…

|»;

 

 

//

            ТекстЗапросаСКомментариями = ТекстЗапросаСКомментариями + "ИНДЕКСИРОВАТЬ ПО

|           СтатьяЗатрат,

|           Подразделение,

|           //ДляБухУчета СчетЗатрат,

|           //ДляНалУчета СчетЗатрат,

|           //ДляМеждУчета СчетЗатрат,

|           Период";

//


  1. В функцию СформироватьЗапросПоСпособамРаспределенияЗатрат сразу после строки ТекстЗапроса = СтрЗаменить(ТекстЗапроса, «//Поместить», «»); добавляем следующие строки (см. комментарии //ТВИ):

           

Если ФормироватьВременнуюТаблицу Тогда

                        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//Поместить", "");

                        //

                        Если ВидОтраженияВУчете = Перечисления.ВидыОтраженияВУчете.ОтражатьВУправленческомУчете Тогда

                                   ТекстЗапроса = ТекстЗапроса + "ИНДЕКСИРОВАТЬ ПО

                                                           СпособыРаспределения.СтатьяЗатрат,    

                                                           СпособыРаспределения.Подразделение";

                        Иначе

                                   ТекстЗапроса = ТекстЗапроса + "ИНДЕКСИРОВАТЬ ПО

                                                           СпособыРаспределения.СтатьяЗатрат,    

                                                           СпособыРаспределения.Подразделение,

                                                           СпособыРаспределения.СчетЗатрат";

                        КонецЕсли;

                        //
has been added to your cart:
Оформление заказа