Версионирование в 1С:ЗУП 3.1: последствия для производительности и роста базы данных

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

Включение механизма версионирования объектов в 1С:Зарплата и управление персоналом 3.1 (ЗУП) часто вызывает опасения у администраторов и разработчиков. Основные страхи связаны с возможным замедлением работы системы и лавинообразным ростом объема базы данных. В этой статье мы подробно разберем, как работает этот механизм, какие риски он несет и как правильно его настроить, чтобы получить максимум пользы при минимуме издержек.

Различие механизмов: БСП против Платформенной истории данных

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

  1. Версионирование на базе БСП (Библиотеки стандартных подсистем): Именно этот механизм используется в типовой ЗУП 3.1 по умолчанию. Он сохраняет каждую версию объекта как полную копию в формате XML (используя FastInfoset) в хранилище значений. Данные записываются в регистр сведений СведенияОВерсияхОбъектов.
  2. Платформенный механизм «История данных»: Появился в более свежих версиях платформы 8.3. Он работает на уровне ядра, сохраняя не копии целиком, а только разницу (дельту) между состояниями. Это значительно экономнее, но в типовых решениях переход на него происходит постепенно.

Рассмотрим подробнее влияние механизма БСП, так как именно с ним нам приходится работать чаще всего. Поскольку каждая запись — это полноценный XML-пакет, упакованный в ValueStorage, основной объем данных в базе начинает занимать именно этот регистр. Это приводит к фрагментации индексов таблиц БД, что требует более частого обслуживания SQL-сервера.

Влияние на транзакции и быстродействие

Многие пользователи жалуются на "тормоза" после включения версионирования. Разберем ситуацию с точки зрения системной логики. Запись версии происходит в той же транзакции, что и запись самого объекта. Рассмотрим, к чему это приводит:

Если мы работаем с «тяжелым» документом, таким как НачислениеЗарплатыИВзносов, в котором могут быть сотни или тысячи строк в табличных частях, процесс формирования XML-копии версии занимает ощутимое время. Пока формируется и записывается версия, транзакция остается открытой. Это напрямую повышает риск возникновения таймаутов и блокировок (Lock Timeout) для других пользователей, которые пытаются работать с этим же объектом или связанными регистрами.

Однако, как показывает практика, в ЗУП объем данных все же меньше, чем в оперативных системах вроде УправлениеТорговлей. Часто «тормоза» вызваны не самим версионированием, а сложными механизмами RLS (разграничение прав на уровне записей) или тяжелыми запросами в динамических списках. Версионирование лишь добавляет небольшую нагрузку сверху.

Стратегия настройки: как не "раздуть" базу

Чтобы база не росла "как на дрожжах", применим методику выборочного версионирования. Необязательно следить за каждым изменением в системе. Выделим критически важные объекты.

Проанализируем основные рекомендации по настройке:

  1. Выборочное указание объектов: Включайте историю только для тех документов и справочников, по которым чаще всего возникают споры между кадровиками и расчетчиками (например, ПриемНаРаботу, ИзменениеОплатыТруда, НачислениеЗарплаты).
  2. Режим «При проведении»: Для тяжелых документов (расчетных) лучше выбирать вариант сохранения версии только при проведении. Это избавит базу от мусорных версий, которые создаются, когда бухгалтер нажимает кнопку «Записать» каждые 5 минут в процессе заполнения документа.
  3. Срок хранения версий: Установите лимит. Как правило, история старше 3 месяцев или одного года уже не актуальна для оперативных разборок. Настройте регламентное задание «Очистка устаревших версий объектов».

Технический нюанс: почему очистка не уменьшает размер файла БД

Важно понимать специфику работы СУБД. Когда регламентное задание удаляет старые записи из регистра СведенияОВерсияхОбъектов, физический размер файла базы данных (MDF в MS SQL) не уменьшается автоматически. Система просто помечает это место как свободное для новых записей внутри самого файла. Чтобы реально вернуть место операционной системе, необходимо выполнить операцию Shrink (сжатие) на уровне SQL-сервера. Но помните: делать это нужно только в часы отсутствия пользователей, так как операция сильно нагружает дисковую подсистему и фрагментирует индексы.

Программный контроль версионирования

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

Посмотрим на пример кода, который помогает понять структуру хранения:


// Пример получения версии объекта программно через БСП
НастройкиВерсионирования = РегистрыСведений.НастройкиВерсионированияОбъектов.СоздатьНаборЗаписей();
// Здесь мы можем прочитать текущие настройки для конкретного типа метаданных
// Однако для анализа объема лучше использовать стандартный отчет 
// "Анализ объема данных", который покажет размер таблицы СведенияОВерсияхОбъектов

Риски при синхронизации данных

Особое внимание уделим справочникам ФизическиеЛица и Сотрудники. В ЗУП они часто обновляются автоматически при синхронизации с Бухгалтерией предприятия или другими системами. Если включено версионирование «При записи», каждое фоновое обновление при обмене будет создавать новую версию, даже если значимых данных не поменялось. Это приводит к бессмысленному росту базы. Проанализируем ситуацию: для таких справочников лучше использовать либо ручное управление версиями, либо вообще отказаться от их версионирования, если данные надежно приходят из мастер-системы.

Резюме и выводы

Версионирование в ЗУП 3.1 — это мощный инструмент "поиска косячника" и восстановления справедливости в спорах между отделами. Рассмотрим финальные шаги для успешного внедрения:

Таким образом, при грамотном подходе и регулярном обслуживании базы, версионирование не станет причиной тормозов, а станет вашим надежным помощником в администрировании системы.

← На главную