Как настроить ведение истории изменений для справочника в 1С?

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

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

Разберем два основных подхода к ведению истории

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

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

Рассмотрим подробнее каждый из этих способов, чтобы выбрать оптимальный для вашей задачи.

Настройка платформенного механизма «История данных»

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

  1. Откроем свойства необходимого справочника (в нашем примере — Инвентаризация).
  2. Найдем свойство История данных и установим для него значение Использовать.
  3. Перейдем на закладку Данные и нажмем кнопку История данных. Здесь мы можем детально указать, какие именно реквизиты и табличные части должны попадать в историю.

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


ОбъектСправочника = Справочники.Инвентаризация.СоздатьЭлемент();
// Заполнение реквизитов
ОбъектСправочника.Наименование = "Инвентаризация №1 от " + ТекущаяДата();
// Устанавливаем режим записи для фиксации истории
ОбъектСправочника.Записать(РежимЗаписиДанных.Запись);

В этом случае платформа автоматически создаст новую версию в системных таблицах. Для просмотра истории пользователю достаточно будет нажать стандартную кнопку в форме объекта (в подменю «Еще»).

Настройка версионирования через БСП

Если ваша конфигурация построена на базе БСП (например, 1С:ERP, 1С:УТ 11 или 1С:Бухгалтерия 3.0), целесообразно использовать встроенный интерфейс настройки.

Разберем алгоритм действий в пользовательском режиме:

  1. Перейдем в раздел Администрирование — Общие настройки.
  2. Развернем группу История изменений и установим флаг Хранить историю изменений.
  3. Нажмем на гиперссылку Настройки хранения.
  4. Найдем в списке справочник Инвентаризация и установим для него режим версионирования: Версионировать при записи или Версионировать при проведении (последнее актуально, если у справочника есть логика «статусов»).

Проанализируем преимущество этого метода: здесь же можно задать Срок хранения версий (например, за последний год или бессрочно). Это критически важно для предотвращения раздувания базы данных.

Проблема больших табличных частей и производительность

Выясним причину, по которой справочник «Инвентаризация» может стать «тяжелым». Как было отмечено в обсуждении, если в инвентаризации тысячи строк номенклатуры, запись каждой версии может занимать значительное время. В таких случаях разработчику необходимо провести замер производительности контура 1С и поиск узких мест.

Рассмотрим рекомендации по оптимизации:

Программный доступ к истории изменений

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


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

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

Очистка устаревших данных

История изменений — самый быстрорастущий раздел базы. Разберем, как держать ситуацию под контролем. В типовых конфигурациях за это отвечает регламентное задание ОчисткаУстаревшихВерсийОбъектов.

Важные настройки:

Подводя итог, выбор между встроенной Историей данных платформы и Версионированием БСП зависит от вашей конфигурации и требований к детализации. Если же вам требуется реализовать подобный контроль для подключаемых модулей, вы можете использовать шаблон внешней обработки с историей изменений и сохранением параметров. В большинстве случаев для новых разработок мы рекомендуем использовать платформенный механизм из-за его экономичности и высокой скорости работы с дельтами изменений.

← На главную