Администрирование · 14 мин
Как ускорить перепроведение документов в 1С
Как ускорить перепроведение документов в 1С: настройка СУБД, индексы, пакетное проведение, отключение контроля остатков, фоновые задания и типичные ошибки.
Массовое перепроведение документов — одна из самых ресурсоёмких операций в 1С. Когда обработка группового перепроведения работает часами, причина почти всегда кроется не в «медленной 1С» вообще, а в конкретных узких местах: настройках СУБД, неоптимальных индексах, избыточном контроле остатков, больших транзакциях или нехватке ресурсов сервера. Каждое из этих мест диагностируется и устраняется отдельно.
Прежде чем что-либо менять, важно понять: перепроведение — это операция, которая пересчитывает движения по регистрам, перестраивает итоги и последовательности. Скорость зависит от объёма документов, количества регистров, по которым они делают движения, и от того, насколько быстро СУБД выполняет чтение и запись. Поэтому универсального «волшебного» параметра нет — ускорение достигается комплексом мер.
Ниже разобраны практические методы: от быстрых настроек, доступных администратору без доработки конфигурации, до более глубокой оптимизации кода и инфраструктуры. Для каждого метода указаны условия применения, риски и способ проверить результат.
Как найти причину медленного перепроведения
Оптимизация без диагностики почти всегда даёт случайный результат. Сначала нужно понять, где теряется время: на стороне СУБД, в коде конфигурации или из-за блокировок. Для этого есть штатные инструменты.
Технологический журнал (ТЖ) — основной источник данных. Включите сбор событий DBMSSQL или DBPOSTGRS с длительностью, а также события TLOCK и TDEADLOCK. После прогона перепроведения на тестовом периоде проанализируйте журнал: какие запросы выполняются дольше всего, есть ли ожидания на блокировках. Для разбора удобно использовать обработки анализа ТЖ или штатный Центр управления производительностью (ЦУП).
Второй источник — замер производительности в самой конфигураторе (Отладка → Замер производительности). Он покажет, какие строки кода при проведении документа занимают больше всего времени. Часто выясняется, что основная доля уходит не на запись движений, а на проверки в обработчиках, запросы в цикле или вызовы общих модулей.
Сделайте замер производительности на одном документе
Проверьте планы запросов, статистику, режим итогов
Ищите TLOCK в техножурнале, переносите операцию на ночь
Смотрите очередь диска, размещение tempdb и журналов
Подготовка: резервная копия и тестовый прогон
Массовое перепроведение изменяет движения и итоги, а при ошибке или обрыве операции восстановление может занять часы. Поэтому первый шаг — полная резервная копия базы средствами СУБД (не выгрузка dt, а именно бэкап, который восстанавливается быстро). Убедитесь, что копия реально восстанавливается: проверьте на тестовом сервере.
Второй шаг — тестовый прогон на копии базы. Замерьте время на небольшом периоде (например, одна неделя), затем экстраполируйте на весь объём. Если неделя проводится за час, а перепроводить нужно три года — полный прогон займёт сутки и более, и без оптимизации не обойтись. Тестовый прогон также покажет ошибки: нехватку остатков, отключенные итоги, документы с ручными операциями.
Уменьшение объёма работы
Самый эффективный способ ускорить перепроведение — проводить меньше документов. Проверьте, действительно ли нужно перепроводить весь период целиком. Часто задача сводится к восстановлению последовательности с определённой даты: тогда достаточно обработки «Проведение по партиям» или восстановления последовательностей, которая сама определит границу и перепроведёт только нужные документы.
Ограничьте состав видов документов. Если проблема касается только товарных движений, перепроводить ещё и кассовые документы не нужно. В типовых обработках группового перепроведения есть отбор по видам документов и по организациям — используйте его.
Отключение контроля остатков и оперативного контроля
При перепроведении «с закрытыми глазами», когда известно, что остатки корректны, контроль отрицательных остатков можно временно отключить — в типовых конфигурациях это делается через константы или параметры проведения (например, отключение контроля остатков в настройках учёта). Это убирает дополнительные запросы на каждый документ. После завершения операции контроль следует включить обратно и выполнить проверку остатков отчётом.
Разделение на пакеты
Перепроведение одной гигантской транзакцией приводит к разрастанию журнала транзакций СУБД и длительным блокировкам. Разбивайте работу на пакеты: по дню, неделе или месяцу, с фиксацией после каждого пакета. В типовых обработках есть настройка «количество документов в транзакции» — подберите значение опытным путём (обычно от нескольких десятков до нескольких сотен документов).
- 1Сделайте резервную копию базы средствами СУБД и проверьте восстановление
- 2На копии базы замерьте скорость на малом периоде и найдите узкие места
- 3Определите минимально необходимый период и состав видов документов
- 4Настройте пакетное выполнение и фоновый запуск в нерабочее время
- 5Запустите перепроведение, контролируя техножурнал и нагрузку на сервер
- 6После завершения проверьте итоги, остатки и восстановите отключённые настройки
Оптимизация на стороне СУБД
Большая часть времени перепроведения — это работа СУБД: чтение таблиц документов, удаление и вставка движений, пересчёт итогов. Если сервер баз данных настроен «по умолчанию», потенциал ускорения здесь самый большой.
Для MS SQL Server проверьте: объём памяти, выделенный серверу (по умолчанию SQL Server может забрать почти всю память, что вредно, либо наоборот — ограничен слишком сильно), размещение tempdb на быстрых дисках и его разбиение на несколько файлов по числу ядер процессора, модель восстановления базы. На время массовой загрузки данных часто переводят базу в простую модель восстановления (simple), чтобы журнал транзакций не разрастался, — но только при условии свежей полной копии и понимания, что восстановление на произвольный момент времени в этот период невозможно.
Актуальность статистик и состояние индексов критичны. Перед массовым перепроведением выполните обновление статистик, после — при необходимости реорганизацию индексов. Регламентные задания 1С по обновлению статистики и очистке процедурного кэша должны быть настроены и реально выполняться по расписанию.
Заметный прирост часто даёт перенос tempdb и файлов журнала транзакций на отдельные быстрые диски (SSD/NVMe), отличные от дисков с данными. При перепроведении нагрузка на запись огромная, и разделение потоков ввода-вывода снижает взаимные ожидания.
Настройки самой 1С, влияющие на скорость
В свойствах регистров накопления и бухгалтерии есть параметр периодичности итогов. Если итоги хранятся помесячно, а перепроводится год — пересчёт итогов происходит для каждого месяца. Для регистров, где оперативные итоги не нужны, можно рассмотреть отключение итогов на время массовой операции (через метод УстановитьИспользованиеИтогов), а после завершения — включить и пересчитать. Это требует программного доступа и аккуратности: забытые отключённые итоги приведут к неверным отчётам.
Проверьте режим управления блокировкой данных: в современных конфигурациях должен использоваться управляемый режим. Автоматический режим на больших объёмах порождает избыточные табличные блокировки и эскалации на уровне СУБД, что резко замедляет параллельную работу и массовые операции.
Если в базе ведутся последовательности документов, убедитесь, что перепроведение выполняется через механизм восстановления последовательности, а не «в лоб» всех документов подряд. Граница последовательности позволяет платформе самой определить минимальный набор документов для обработки.
Оптимизация кода проведения
Если замер производительности показал, что время уходит на код обработчиков проведения, а не на СУБД, нужна работа с конфигурацией. Типичные проблемы: запросы внутри цикла по строкам табличной части, обращения к остаткам по одному товару вместо пакетного запроса, пересчёт значений, которые можно вычислить один раз, лишние проверки и вызовы внешних систем.
Основные приёмы: вынести запросы из циклов (собрать данные одним запросом по всей табличной части через временные таблицы), использовать пакетные запросы, кэшировать повторно используемые значения в переменных модуля или параметрах сеанса, отключить на время массового перепроведения не критичные подписки на события (например, синхронизацию данных, отправку уведомлений, запись в регистры аудита).
Отдельная тема — подписки на события и обработчики из расширений. Проверьте, какие подписки срабатывают при записи и проведении документов: интеграции, обмены, бизнес-процессы. Каждая подписка добавляет время к каждому документу, и на десятках тысяч документов это превращается в часы.
Организация запуска: фон, ночь, монопольный режим
Массовое перепроведение лучше выполнять в нерабочее время, когда нет конкуренции за блокировки. В клиент-серверном варианте запускайте операцию как фоновое задание на сервере — это исключает обрывы из-за разрыва клиентского соединения и использует ресурсы сервера 1С напрямую.
В некоторых сценариях оправдан монопольный режим: без конкурирующих сеансов нет ожиданий на блокировках, и скорость заметно выше. Но монопольный режим означает остановку работы пользователей — планируйте окно обслуживания и предупреждайте сотрудников заранее.
Если объём огромный и окна не хватает, рассмотрите разбиение операции на несколько ночей: перепроводите по месяцу за ночь, контролируя границу последовательности. Это безопаснее, чем один многодневный непрерывный процесс.
Как выбрать действие
Проверка результата после завершения
После перепроведения работа не закончена. Нужно убедиться, что данные корректны: сверить оборотно-сальдовую ведомость и ключевые отчёты (остатки товаров, взаиморасчёты) со значениями до операции — если перепроведение не должно было менять данные, отчёты обязаны совпасть. Расхождения означают либо исправление старых ошибок (что ожидаемо, если перепроведение запускалось именно для этого), либо проблему.
Проверьте границу последовательности — она должна стоять на последнем документе обработанного периода. Убедитесь, что все временно отключённые настройки возвращены: контроль остатков, использование итогов, подписки, регламентные задания обменов. Выполните тестирование и исправление в режиме проверки логической целостности при наличии подозрений на повреждения.
Как проверить результат
Значения совпадают или расходятся только на ожидаемые исправления
Необъяснимые расхождения по счетам или остаткам
Стоит на последнем документе периода
Осталась внутри периода — часть документов не обработана
Контроль остатков, итоги, подписки включены обратно
Отчёты показывают неактуальные итоги, контроль не работает
Нет взаимоблокировок и аварийных завершений
TDEADLOCK, ошибки СУБД, обрывы фоновых заданий
Частые вопросы
Можно ли перепроводить документы параллельно в несколько потоков?
Штатные обработки работают однопоточно, но можно разбить период на непересекающиеся диапазоны и запустить несколько фоновых заданий. При этом параллельные потоки будут конкурировать за блокировки регистров, и выигрыш не всегда пропорционален числу потоков. Перед таким подходом протестируйте на копии: иногда два потока работают медленнее одного из-за взаимных ожиданий.
Почему перепроведение стало медленнее после обновления конфигурации?
После обновления могли добавиться новые подписки на события, измениться обработчики проведения, появиться новые регистры движений. Также обновление часто сбрасывает или делает неактуальными статистики СУБД. Начните с обновления статистик и пересмотра планов запросов, затем сравните замер производительности с тем, что было до обновления.
Что быстрее: перепроведение или перенос данных в новую базу?
Зависит от объёма и состояния базы. Если база многолетняя и сильно фрагментирована, свёртка и перенос остатков в чистую базу иногда занимают меньше времени, чем полное перепроведение, и дополнительно ускоряют повседневную работу. Но свёртка — более рискованная операция с точки зрения полноты данных, требующая тщательной сверки.
Влияет ли файловый или клиент-серверный режим на скорость?
Существенно. В файловом режиме перепроведение больших объёмов почти всегда медленнее из-за особенностей работы с файлом базы и отсутствия полноценной оптимизации запросов. Если база большая и массовые операции регулярны, переход на клиент-серверный вариант с настроенной СУБД — одна из самых эффективных мер.
Нужно ли отключать антивирус на сервере?
Полностью отключать не требуется, но каталоги с файлами базы данных, tempdb и журналами стоит добавить в исключения антивирусного сканирования. Проверка каждой операции записи антивирусом заметно замедляет дисковые операции, а при перепроведении их миллионы.
Как понять, что пора привлекать специалиста по оптимизации?
Если после базовых мер (актуальные статистики, пакетное выполнение, ночной запуск, отключение лишних подписок) скорость всё равно неприемлема, а анализ техножурнала показывает тяжёлые запросы внутри типового кода — нужна глубокая оптимизация запросов и индексов. Эта работа требует опыта чтения планов запросов и знания конкретной конфигурации, и ошибки здесь дороже стоимости специалиста.
Что важно запомнить
Ускорение перепроведения — это диагностика через техножурнал и замер, затем точечные меры: настройка СУБД, уменьшение объёма работы, пакетное выполнение в нерабочее время и контроль кода обработчиков. Обязательны резервная копия до начала и сверка результатов после завершения.