Как ускорить расчет себестоимости и формирование проводок в 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

Проблема длительного расчета себестоимости в 1С:ERP Управление предприятием — одна из самых частых «болей» при внедрении и эксплуатации системы на крупных предприятиях. Особенно остро этот вопрос стоит в старых версиях (например, 2.1), где механизмы еще не были в достаточной степени оптимизированы под высокие нагрузки. Рассмотрим подробнее, почему этот процесс может занимать часы или даже дни, и разберем по шагам, как можно радикально ускорить закрытие месяца.

Переход на новые механизмы и «Платформенный расчет»

Проанализируем ситуацию с точки зрения развития программы. В старых версиях 1С:ERP (до редакции 2.4) расчет себестоимости выполнялся преимущественно программным кодом на языке 1С. Это создавало огромную нагрузку на сервер приложений и требовало последовательной обработки миллионов записей. Начиная с последних релизов 2.4 и в 2.5, был внедрен так называемый платформенный расчет себестоимости.

Основное отличие заключается в том, что задача расчета стоимости сводится к решению системы линейных алгебраических уравнений (СЛАУ). Этот математический аппарат позволяет рассчитывать стоимость материальных потоков не последовательно (документ за документом), а одновременно для всей совокупности операций за период. Важно понимать, что значительная часть вычислений в этом случае переносится с сервера приложений непосредственно на сторону СУБД (SQL Server), что дает колоссальный прирост производительности.

Если ваша база работает на версии 2.1 или ранних 2.4, самым правильным (хоть и трудоемким) решением будет обновление до актуального релиза. Мы крайне не рекомендуем «дорабатывать» код самого расчета в старых версиях, так как это крайне сложный алгоритм, и любое вмешательство может привести к некорректным данным, которые вы будете выправлять месяцами.

Оптимизация серверного железа и настроек SQL

Выясним причину медленной работы с технической стороны. Даже самый мощный сервер может работать неэффективно при неправильной настройке. Разберем основные моменты:

  1. Настройка TempDB: Расчет себестоимости создает огромное количество временных таблиц. Если база tempdb на SQL-сервере расположена на медленных дисках или состоит из одного файла, она становится «узким горлышком». Рекомендуется выносить tempdb на максимально быстрые NVMe SSD диски и разделять ее на несколько файлов (равно количеству логических ядер процессора, но не более 8).
  2. Параллельность (Max Degree of Parallelism): Для процессов расчета себестоимости в 1С:ERP критически важна настройка MAXDOP в SQL Server. Обычно рекомендуется значение 1 или 8, в зависимости от нагрузки, но для тяжелых расчетов СЛАУ SQL должен уметь эффективно распараллеливать запросы.
  3. Настройка потоков в 1С: В самой конфигурации ERP в настройках параметров системы (раздел «НСИ и администрирование» — «Настройка НСИ и разделов» — «Финансовый результат и контроллинг») есть опция «Количество потоков расчета себестоимости». Посмотрим на этот параметр внимательно: если у вас мощный многоядерный сервер, установите количество потоков, равное количеству ядер процессора минус 2. Это позволит системе запускать несколько фоновых заданий одновременно, сокращая общее время ожидания.

Использование предварительного расчета и регламентных заданий

Если заказчик жалуется, что цифры себестоимости нужны «здесь и сейчас», а не в конце месяца, мы можем использовать механизм предварительного расчета. Разберем, как это работает:

В 1С:ERP существует два вида расчета: Предварительный и Фактический. Предварительный расчет выполняется по методу «Средняя за месяц» и не учитывает все нюансы (например, сложные распределения постатейных расходов или фактические затраты производства), но он дает достаточно близкие к реальности цифры для оперативного управления. Мы можем настроить РегламентныеЗадания так, чтобы предварительный расчет запускался автоматически каждую ночь или даже несколько раз в день.

Для автоматизации можно использовать следующий программный подход (в серверном контексте):


// Пример программного запуска фонового задания для расчета
НаименованиеЗадания = "Расчет себестоимости (предварительный)";
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(ТекущаяДата()); // Дата расчета
ФоновыеЗадания.Выполнить("РасчетСебестоимостиЛокально.ВыполнитьРасчет", ПараметрыЗадания);

Это позволит пользователям видеть управленческую себестоимость в отчетах в течение месяца, а окончательный «тяжелый» расчет будет запускаться только один раз в период закрытия.

Устранение методических «петель» и ошибок учета

Часто расчет длится долго не из-за слабого железа, а из-за циклических зависимостей. Рассмотрим ситуацию: цех №1 выпускает деталь, которая передается в цех №2. В цехе №2 выпускается инструмент, который передается обратно в цех №1 для производства той же самой детали. Возникает «петля».

Алгоритм расчета себестоимости (особенно в старых версиях) пытается найти сходимость цены в таких циклах и может совершать десятки итераций. Если таких петель в системе много, время расчета увеличивается в геометрической прогрессии. Проанализируем наши данные:

Разделение расчета и формирования проводок

Еще один способ ускорить процесс — это разделение этапов. В 1С:ERP расчет финансового результата и формирование проводок в бухгалтерском учете — это два разных процесса. Посмотрим на настройки регламентных операций:

Часто «зависание» происходит на этапе записи движений в регистр бухгалтерии Хозрасчетный. Мы можем отключить автоматическое формирование проводок при расчете себестоимости и вынести этот процесс в отдельное регламентное задание, которое будет работать в ночное время. Таким образом, расчет себестоимости (запись в регистры накопления) завершится быстрее, и управленцы смогут увидеть финансовый результат, а бухгалтерские проводки «доедут» позже.

Используйте для мониторинга стандартную обработку «Закрытие месяца». Если вы видите, что этап «Расчет себестоимости» завершен, а «Формирование проводок» еще висит — значит, проблема не в математике расчета, а в скорости записи в SQL-таблицы бухгалтерского регистра. В этом случае стоит еще раз обратить внимание на индексы и фрагментацию таблиц базы данных.

Подводя итог, скажем: если вы работаете на версии 2.1, ваш путь к ускорению лежит через техническую оптимизацию SQL и методическую очистку данных от отрицательных остатков и циклов. Однако стратегически верным решением будет переход на современные редакции ERP, где реализован быстрый платформенный расчет СЛАУ.

← На главную