Включение механизма версионирования объектов в 1С:Зарплата и управление персоналом 3.1 (ЗУП) часто вызывает опасения у администраторов и разработчиков. Основные страхи связаны с возможным замедлением работы системы и лавинообразным ростом объема базы данных. В этой статье мы подробно разберем, как работает этот механизм, какие риски он несет и как правильно его настроить, чтобы получить максимум пользы при минимуме издержек.
Прежде всего, проанализируем техническую базу. В современных конфигурациях 1С существуют два параллельных подхода к отслеживанию изменений, и их важно не путать:
FastInfoset) в хранилище значений. Данные записываются в регистр сведений СведенияОВерсияхОбъектов.Рассмотрим подробнее влияние механизма БСП, так как именно с ним нам приходится работать чаще всего. Поскольку каждая запись — это полноценный XML-пакет, упакованный в ValueStorage, основной объем данных в базе начинает занимать именно этот регистр. Это приводит к фрагментации индексов таблиц БД, что требует более частого обслуживания SQL-сервера.
Многие пользователи жалуются на "тормоза" после включения версионирования. Разберем ситуацию с точки зрения системной логики. Запись версии происходит в той же транзакции, что и запись самого объекта. Рассмотрим, к чему это приводит:
Если мы работаем с «тяжелым» документом, таким как НачислениеЗарплатыИВзносов, в котором могут быть сотни или тысячи строк в табличных частях, процесс формирования XML-копии версии занимает ощутимое время. Пока формируется и записывается версия, транзакция остается открытой. Это напрямую повышает риск возникновения таймаутов и блокировок (Lock Timeout) для других пользователей, которые пытаются работать с этим же объектом или связанными регистрами.
Однако, как показывает практика, в ЗУП объем данных все же меньше, чем в оперативных системах вроде УправлениеТорговлей. Часто «тормоза» вызваны не самим версионированием, а сложными механизмами RLS (разграничение прав на уровне записей) или тяжелыми запросами в динамических списках. Версионирование лишь добавляет небольшую нагрузку сверху.
Чтобы база не росла "как на дрожжах", применим методику выборочного версионирования. Необязательно следить за каждым изменением в системе. Выделим критически важные объекты.
Проанализируем основные рекомендации по настройке:
ПриемНаРаботу, ИзменениеОплатыТруда, НачислениеЗарплаты).Важно понимать специфику работы СУБД. Когда регламентное задание удаляет старые записи из регистра СведенияОВерсияхОбъектов, физический размер файла базы данных (MDF в MS SQL) не уменьшается автоматически. Система просто помечает это место как свободное для новых записей внутри самого файла. Чтобы реально вернуть место операционной системе, необходимо выполнить операцию Shrink (сжатие) на уровне SQL-сервера. Но помните: делать это нужно только в часы отсутствия пользователей, так как операция сильно нагружает дисковую подсистему и фрагментирует индексы.
Если вам необходимо программно управлять процессом или проанализировать текущее состояние, можно обратиться к метаданным БСП. Например, выясним, как программно проверить, включено ли версионирование для конкретного типа объекта. Хотя настройки обычно хранятся в константах и регистрах, мы можем использовать методы программного интерфейса БСП.
Посмотрим на пример кода, который помогает понять структуру хранения:
// Пример получения версии объекта программно через БСП
НастройкиВерсионирования = РегистрыСведений.НастройкиВерсионированияОбъектов.СоздатьНаборЗаписей();
// Здесь мы можем прочитать текущие настройки для конкретного типа метаданных
// Однако для анализа объема лучше использовать стандартный отчет
// "Анализ объема данных", который покажет размер таблицы СведенияОВерсияхОбъектов
Особое внимание уделим справочникам ФизическиеЛица и Сотрудники. В ЗУП они часто обновляются автоматически при синхронизации с Бухгалтерией предприятия или другими системами. Если включено версионирование «При записи», каждое фоновое обновление при обмене будет создавать новую версию, даже если значимых данных не поменялось. Это приводит к бессмысленному росту базы. Проанализируем ситуацию: для таких справочников лучше использовать либо ручное управление версиями, либо вообще отказаться от их версионирования, если данные надежно приходят из мастер-системы.
Версионирование в ЗУП 3.1 — это мощный инструмент "поиска косячника" и восстановления справедливости в спорах между отделами. Рассмотрим финальные шаги для успешного внедрения:
Таким образом, при грамотном подходе и регулярном обслуживании базы, версионирование не станет причиной тормозов, а станет вашим надежным помощником в администрировании системы.