Как распараллелить проведение документов в 1С:Бухгалтерия 3.0 и ускорить обработку данных

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При работе с крупными базами данных «1С:Бухгалтерия 3.0» (БП) пользователи и программисты часто сталкиваются с проблемой медленного перепроведения документов за длительные периоды (например, при подготовке годовой отчетности или закрытии года). В стандартном режиме процедура может занимать несколько дней, что недопустимо в условиях жестких дедлайнов по сдаче НДС или налога на прибыль. В этой статье мы подробно разберем, как реализовать параллельное проведение, какие механизмы платформы 1С:Предприятие 8.3 это позволяют и какие технические нюансы необходимо учесть для достижения максимальной производительности.

Анализ возможности параллельной работы в БП 3.0

Прежде всего, проанализируем, почему в старых версиях конфигураций (например, на платформе 7.7 или БП 2.0 в режиме обычных блокировок) распараллеливание было практически невозможным. Основной причиной являлись блокировки всей таблицы регистра бухгалтерии при записи даже одного документа. Однако современная «1С:Бухгалтерия 3.0» работает в режиме управляемых блокировок. Это означает, что система блокирует не всю таблицу, а только конкретные записи, соответствующие измерениям регистра (например, сочетанию Организация + Период).

Рассмотрим ситуацию: если мы запускаем проведение документов по «Организации №1» и одновременно по «Организации №2», эти процессы не будут конфликтовать между собой на уровне логики 1С, так как они работают с разными наборами данных в регистрах. Это дает нам фундаментальную возможность для распараллеливания.

Способ 1: Параллельный запуск через несколько клиентских сеансов

Это самый простой и быстрый в реализации метод, который не требует написания сложного кода. Выясним, как это реализовать на практике:

  1. Откройте несколько экземпляров программы 1С (сеансов) под разными пользователями или под одним и тем же (если настройки сервера позволяют).
  2. В каждом сеансе запустите обработку «Групповое перепроведение документов».
  3. В настройках фильтра в каждом окне укажите свою организацию (или список организаций). Важно, чтобы списки организаций в разных сеансах не пересекались.
  4. Запустите процесс одновременно.

Таким образом, нагрузка распределится по ядрам процессора сервера 1С, и каждый сеанс будет обрабатывать свою порцию данных. Это особенно эффективно, если в базе ведется учет по десяткам или сотням организаций.

Способ 2: Программное распараллеливание через фоновые задания

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


// Пример упрощенной логики запуска фоновых заданий
Процедура ЗапуститьПараллельноеПроведение(МассивОрганизаций)
    Для Каждого ТекущаяОрганизация Из МассивОрганизаций Цикл
        ПараметрыЗадания = Новый Массив;
        ПараметрыЗадания.Добавить(ТекущаяОрганизация);
        ПараметрыЗадания.Добавить(НачалоПериода);
        ПараметрыЗадания.Добавить(КонецПериода);
        
        НаименованиеЗадания = "Проведение_" + ТекущаяОрганизация.Наименование;
        
        // Запуск фонового задания на сервере
        ФоновыеЗадания.Выполнить("МойОбщийМодуль.ПровестиДокументыПоОрганизации", ПараметрыЗадания, , НаименованиеЗадания);
    КонецЦикла;
КонецПроцедуры

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

Способ 3: Оптимизация и отключение итогов

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

Выполним следующие шаги:

  1. Перейдем в раздел «Администрирование» — «Обслуживание» — «Управление итогами и агрегатами».
  2. Отключим использование итогов для всех регистров.
  3. Запустим параллельное проведение (любым из вышеописанных способов). Без необходимости пересчета итогов после каждого документа скорость записи возрастет в 3–5 раз.
  4. После завершения всех процессов проведения включим итоги обратно и запустим разовый пересчет итогов на текущую дату.

Технические нюансы и блокировки на уровне SQL

Даже если мы идеально разделили проведение по организациям, мы можем столкнуться с блокировками на уровне СУБД (MS SQL Server или PostgreSQL). Посмотрим на основные причины:

Конфликты в TempDB: При активной параллельной записи 1С активно использует временные таблицы. Чтобы избежать очередей, рекомендуется разделить файл базы данных TempDB на несколько файлов одинакового размера (по количеству ядер CPU).

Блокировки по общим таблицам: В БП 3.0 существуют системные таблицы (например, настройки программы или кэш конфигурации), к которым могут обращаться все потоки одновременно. Чтобы минимизировать конфликты, рассмотрим возможность запуска потоков с небольшой задержкой в 5–10 секунд, чтобы транзакции не стартовали в одну и ту же миллисекунду.

Особенности последовательностей в Бухгалтерии 3.0

Важно помнить, что в «1С:Бухгалтерия 3.0» существует механизм последовательностей. Если ваша задача — не просто «провести документы», а восстановить правильную последовательность для корректного расчета себестоимости и партионного учета, то параллельное проведение внутри ОДНОЙ организации невозможно. Последовательность по определению требует строгого порядка: документ №2 не может быть проведен раньше документа №1, если они влияют на остатки одних и тех же ресурсов.

Однако распараллеливание между разными организациями остается полностью легитимным и безопасным методом, так как в БП 3.0 для каждой организации фактически строится своя независимая цепочка расчетов в рамках общих регистров (при условии отсутствия межхозяйственных операций).

Резюме и рекомендации

Подводя итог, можно составить следующий план действий для максимально быстрого проведения документов:

Применяя эти методики в комплексе, вы сможете сократить время проведения документов с нескольких дней до нескольких часов, успешно соблюдая сроки сдачи отчетности.

← На главную