Почему история данных остается пустой после включения в 1С и как ее настроить

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

Начиная с версии платформы 1С:Предприятие 8.3.11, разработчикам стал доступен встроенный механизм версионирования — История данных. Однако при первом включении этой функции многие сталкиваются с ситуацией: свойство версионирования у объектов метаданных установлено, данные перезаписываются, но окно просмотра истории остается пустым. Разберем подробно внутреннюю архитектуру этого механизма, выясним причины такого поведения и настроим корректную запись версий.

Архитектура механизма: почему данные не появляются мгновенно

В отличие от классических подходов версионирования в прикладных библиотеках (например, в БСП), платформенная история данных работает асинхронно для обеспечения высокой производительности и минимизации блокировок при одновременной работе пользователей.

Проанализируем процесс записи объекта:

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

Настройка регламентного задания для обновления истории

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

Создадим процедуру в общем серверном модуле:


Процедура ОбновитьИсториюДанныхПоРасписанию() Экспорт
    
    // Выполняем обработку очереди изменений истории данных
    ИсторияДанных.ОбновитьИсторию();
    
КонецПроцедуры

Разберем ключевые нюансы настройки регламентного задания:

  1. Создадим в дереве метаданных новое регламентное задание (например, ОбновлениеИсторииДанных).
  2. Укажем имя созданного метода в свойстве ИмяМетода.
  3. Настроим расписание выполнения. Для рабочих баз оптимальным интервалом считается запуск каждые 1–5 минут в зависимости от интенсивности документооборота.
  4. Убедимся, что на сервере 1С:Предприятия не установлена блокировка регламентных заданий для данной информационной базы.

Ручной запуск обновления и проверка работы в отладке

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

ИсторияДанных.ОбновитьИсторию();

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

Другие возможные причины отсутствия версий

Если регламентное задание выполняется успешно, но история для конкретных объектов все равно не отображается или не пишется, проанализируем следующие факторы:

  1. Права доступа роли: Для просмотра истории версий пользователю недостаточно стандартных прав на чтение объекта. В роли должны быть явно установлены права Чтение истории данных и Просмотр истории данных на уровне объекта метаданных и его реквизитов.
  2. Запись с флагом загрузки: Если запись объектов выполняется программно с установленным свойством ОбменДанными.Загрузка = Истина, платформа по умолчанию подавляет регистрацию изменений в очереди истории данных.
  3. Программное переопределение настроек: Настройки, установленные через менеджер ИсторияДанных.УстановитьНастройки(), имеют приоритет над свойствами метаданных, заданными в конфигураторе. Проверим, не было ли отключено версионирование на уровне информационной базы программно.
  4. Тип объекта метаданных: Механизм предназначен для справочников, документов, бизнес-процессов, задач, планов видов характеристик, планов счетов, планов видов расчета и регистров сведений. Для регистров накопления, бухгалтерии и расчета платформенная история данных не применяется.

Управление объемом базы и очистка устаревших версий

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


Процедура ОчиститьУстаревшиеВерсииИстории(ГлубинаХраненияДней = 90) Экспорт
    
    ГраницаОчистки = НачалоДня(ТекущаяДатаСеанса() - ГлубинаХраненияДней * 86400);
    
    // Удаляем версии старше указанной даты для всех объектов
    ИсторияДанных.ОчиститьИсторию( , ГраницаОчистки);
    
КонецПроцедуры

Таким образом, сочетание фоновой обработки очереди через ИсторияДанных.ОбновитьИсторию() и периодической очистки устаревших данных обеспечивает стабильную и производительную работу механизма версионирования в системе 1С:Предприятие.

← На главную