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