При разработке собственных объектов в типовых конфигурациях, таких как «Бухгалтерия предприятия 3.0» (БП 3.0), часто возникает необходимость включить стандартный механизм версионирования (истории изменений). Этот функционал позволяет пользователям видеть, кто, когда и какие изменения внес в документ. Однако простого добавления документа в определяемый тип иногда бывает недостаточно: иконка истории может появиться, но список версий останется пустым.
В этой статье мы подробно разберем, как правильно интегрировать свой документ в подсистему версионирования Библиотеки стандартных подсистем (БСП), рассмотрим типичные ошибки и выясним, какие механизмы отвечают за запись данных в регистр.
Для начала проанализируем, как работает версионирование. В современных конфигурациях 1С оно строится не на платформенном механизме «Хранение истории», а на программном коде БСП. Основными элементами этой системы являются:
ВерсииОбъектов: здесь физически хранятся данные версий в сжатом формате.Рассмотрим пошагово, что необходимо сделать, чтобы всё заработало корректно.
Выясним, какие определяемые типы критически важны. В системе БСП их обычно два, и программисты часто забывают про второй из них:
ВерсионируемыеДанные: в этот тип необходимо добавить ссылку на ваш документ (например, ДокументСсылка.МойНовыйДокумент). Это позволяет системе понимать, что данный тип объекта в принципе может иметь историю изменений. Это влияет на доступность общих команд и отображение в списках.ВерсионируемыеДанныеОбъект: это самый важный момент. Сюда нужно добавить именно объект документа (например, ДокументОбъект.МойНовыйДокумент). Именно этот тип используется в качестве источника (Source) для подписок на события. Если вы пропустите этот шаг, подписка просто не сработает для вашего документа, так как он не будет входить в состав ее параметров.Проанализируем ситуацию, с которой столкнулся автор темы. Он пытался использовать общую подписку БСП ЗаписатьВерсиюОбъекта, но обнаружил, что в «Бухгалтерии предприятия» она настроена только на справочники. Это нормальная практика для отраслевых решений — использование собственных «оберток» над механизмами БСП.
Для корректной работы в БП 3.0 нам необходимо найти специализированную подписку. Разберем, как это сделать:
ЗаписатьВерсиюДокументаБП (или аналогичную, если вы работаете в другой конфигурации, например, ЗаписатьВерсиюОбъекта в УТ или ERP).ДокументОбъект.МойНовыйДокумент включен в этот список (обычно через вышеупомянутый определяемый тип ВерсионируемыеДанныеОбъект).Пример кода типичного обработчика, который вызывается подпиской:
Процедура ЗаписатьВерсиюДокумента(Источник, Отказ) Экспорт
Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(Источник);
КонецПроцедуры
Даже если подписки настроены, версия может не записаться, если отключена глобальная настройка. Посмотрим на этот процесс со стороны пользователя:
Важно: Если в настройках стоит «Никогда», то записи в регистре появляться не будут, несмотря на все манипуляции в конфигураторе.
Если кнопка (иконка с часами) не появилась на форме документа автоматически, проверьте состав общей команды ИсторияИзменений. Тип ссылки вашего документа должен быть включен в параметр этой команды. Однако в современных версиях БСП эта команда обычно привязана к тому же определяемому типу ВерсионируемыеДанные, который мы настроили на первом шаге.
Проанализируем дополнительные факторы, которые могут влиять на работу механизма:
1. Платформенное хранение истории. Начиная с версии платформы 8.3.11, у объектов появилось свойство Хранение истории. Помните: типовые конфигурации (БП, ЗУП, УТ) используют свой собственный механизм БСП, а не этот платформенный флаг. Рекомендуется оставлять значение свойства «Не использовать», чтобы не создавать лишнюю нагрузку и путаницу в данных.
2. Права доступа. Если программист видит историю, а обычный пользователь — нет (или список пуст), проверьте наличие роли ЧтениеВерсийОбъектов у пользователя. Без прав на регистр ВерсииОбъектов список будет выглядеть пустым.
3. Проверка данных «в лоб». Если вы не уверены, работает ли механизм, загляните напрямую в регистр сведений ВерсииОбъектов через «Функции для технического специалиста». Если записи там появляются после записи документа, значит, проблема в интерфейсной части (права, команды, фильтры). Если записей нет — проблема в подписках или функциональных опциях.
Для успешного включения версионирования для своего документа выполните следующие действия:
ВерсионируемыеДанные.ВерсионируемыеДанныеОбъект.ЗаписатьВерсиюДокументаБП (для БП 3.0) ваш объект присутствует в источниках.Соблюдение этих шагов гарантирует корректную работу истории изменений и позволит избежать пустых списков в интерфейсе программы.