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

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

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

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

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

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

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

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

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

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

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

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

|»;

 

 

//

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

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

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

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

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

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

|           Период";

//


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

           

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

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

//

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

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

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

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

Иначе

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

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

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

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

КонецЕсли;

//

6 Comments

  1. kapustinag

    Воспользовался Вашим советом и получил сначала на тестовой базе, а потом и на рабочей ускорение расчета себестоимости по бух.учету примерно в 2.5 — 3 раза. Проведение документа было 2ч 40 минут — 2ч 50 минут — стало 50 минут — 1 ч.

    Временная таблица, которую индексировали в функции СформироватьВременнуюТаблицуСпособыРаспределения(), у меня содержит 142000 строк.

    Думаю, программисты фирмы 1С не предполагали в ней такого большого количества строк.

    А, если вдуматься, разбухание этой таблицы практически неизбежно на производственной информационной базе — хотя бы из-за пометки на удаление некоторых подразделений и создания новых. Старые-то подразделения удалить нельзя.

    Reply
  2. kapustinag

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

    Попробую; напишу, если будет существенный эффект.

    Reply
  3. wolfsoft

    (1) kapustinag, есть стойкое ощущение, что программисты 1с вообще не предполагают, как их детища будут работать на реальных предприятиях…

    Reply
  4. I_r_a

    Раньше себестоимость считалась 20-30 мин, сейчас около 5 минут, большое спасибо.

    Reply
  5. olbu

    Вот и я столкнулся с этой проблемой… РСВ БУ проводится около 1,5 часа, финансисты в ужасе…

    сделал как тут указано… скорость проведения, со слов финансистов не изменилась…

    сисадмин уже провел все возможные комбинации с sql и 1с сервером, теперя все косые взгляды на меня… 🙁

    Вопрос:

    Используется «котловой» метод, 2 номенклатурные группы, Партионный учет… Без 40 счета…

    Может есть какие — либо настройки в УПП, влияющие на скорость проведения РСВ?

    Reply
  6. olbu

    (4) I_r_a,

    Доброго времени суток!

    Можно у вас спросить, как вы добились таких скоростных результатов?

    Исключая «железо»…

    Может какие настройки у вас на это повлияли? у нас проведение РСВ длится уже 2 часа…

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *