Как настроить и использовать платформенное версионирование (механизм История данных) в 1С

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

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

Визуальный интерфейс работы с версиями

Часто разработчики ошибочно полагают, что платформенное версионирование предоставляет только программный интерфейс (API). На самом деле, платформа содержит встроенные формы для просмотра истории изменений. Рассмотрим, как их найти.

Если для объекта включена история данных, в управляемой форме этого объекта (например, документа или элемента справочника) стандартно доступна команда История изменений. Чтобы ее найти, выполните следующие действия:

  1. Откройте форму интересующего вас объекта в режиме «1С:Предприятие».
  2. Нажмите кнопку Еще в командной панели формы.
  3. Выберите пункт История изменений.

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

Включение и настройка в конфигураторе

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

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

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

Асинхронная модель и очередь обновлений

Одной из главных особенностей «Истории данных» является ее асинхронность. При записи объекта данные о версии не записываются в финальные таблицы истории мгновенно. Они попадают в специальную очередь. Это сделано для того, чтобы не замедлять работу пользователя в момент нажатия кнопки «Записать и закрыть».

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


// Пример вызова обновления очереди истории данных
ИсторияДанных.ОбновитьДанные();

Без выполнения этого метода версии в интерфейсе «История изменений» появляться не будут, так как очередь останется необработанной. Рекомендуется настраивать регламентное задание с интервалом от нескольких минут до часа, в зависимости от интенсивности работы пользователей.

Программное управление версионированием (API)

Иногда требуется более тонкая настройка, чем просто «записывать всё». Разберем основные возможности встроенного языка для работы с историей.

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


СсылкаНаОбъект = Справочники.Контрагенты.НайтиПоКоду("001");
ИсторияДанных.СоздатьВерсию(СсылкаНаОбъект);

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


Выборка = ИсторияДанных.ВыбратьВерсии(СсылкаНаОбъект);
Пока Выборка.Следующий() Цикл
    // Анализируем структуру версии
    ДанныеВерсии = ИсторияДанных.ПрочитатьВерсию(СсылкаНаОбъект, Выборка.НомерВерсии);
КонецЦикла;

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

Настройка прав доступа

Даже если механизм включен и очередь обрабатывается, пользователи не увидят историю без соответствующих прав. Проанализируем необходимые роли:

Очистка и обслуживание базы данных

Поскольку история данных хранится в системных таблицах СУБД, она может существенно увеличить размер базы со временем. Выясним, как управлять объемом этих данных. В отличие от БСП, в платформе нет готовой настройки «удалять через 30 дней». Разработчик должен сам реализовать процедуру очистки, используя метод УдалитьВерсии().

Рассмотрим пример кода для удаления версий старше определенной даты:


ГраницаОчистки = ТекущаяДата() - (60 * 60 * 24 * 365); // Удаляем данные старше года
ИсторияДанных.УдалитьВерсии(ГраницаОчистки);

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

← На главную