Как исправить ошибку «Имя события недопустимо для указанного источника события» при версионировании документа?

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

При добавлении нового документа в систему версионирования на базе Библиотеки Стандартных Подсистем (БСП) разработчики часто сталкиваются с ошибкой: «ПодпискаНаСобытие.ЗаписатьВерсиюОбъекта: имя события недопустимо для указанного источника события». Эта проблема возникает при попытке обновить конфигурацию базы данных после включения документа в определяемые типы подсистемы версионирования.

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

Почему возникает ошибка?

Чтобы понять суть проблемы, проанализируем механизм работы подписок на события в БСП. В типовых конфигурациях (таких как 1С:ERP, КА, УТ и других, использующих БСП) для версионирования справочников и планов видов характеристик обычно уже создана подписка на событие, например, ЗаписатьВерсиюОбъекта.

Источником для этой подписки служит определяемый тип ВерсионируемыеДанныеОбъект. Когда мы добавляем в этот тип наш новый документ (ДокументОбъект.НашДокумент), существующая подписка пытается "подписаться" на события этого документа.

Однако, обработчики событий для справочников и документов в БСП различаются:

  1. Для справочников используется процедура ВерсионированиеОбъектовСобытия.ЗаписатьВерсиюОбъекта.
  2. Для документов необходима процедура ВерсионированиеОбъектовСобытия.ЗаписатьВерсиюДокумента.

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

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

Если мы хотим использовать стандартный механизм БСП (с хранением версий в регистре сведений ВерсииОбъектов), нам необходимо корректно настроить метаданные. Разберем этот процесс по шагам.

Шаг 1. Настройка Определяемых Типов

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

  1. ВерсионируемыеДанные (Тип: Ссылка) — сюда добавляем ДокументСсылка.НашДокумент. Это необходимо для корректной типизации измерений регистра сведений.
  2. ВерсионируемыеДанныеОбъект (Тип: Объект) — сюда добавляем ДокументОбъект.НашДокумент.

Шаг 2. Создание правильной подписки на событие

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

Выполним следующие действия:

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

Обратите внимание на разницу в именах методов. Для документов мы используем именно ЗаписатьВерсиюДокумента, а не ЗаписатьВерсиюОбъекта.

Пример кода обработчика внутри модуля БСП (для понимания, что происходит "под капотом"):


Процедура ЗаписатьВерсиюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    // Логика записи версии с учетом режима проведения
    ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(Источник, Истина);
КонецПроцедуры

Шаг 3. Включение версионирования в пользовательском режиме

После обновления конфигурации базы данных работа программиста заканчивается, и начинается настройка в режиме «1С:Предприятие».

Разберем порядок действий администратора:

  1. Переходим в раздел Администрирование -> Общие настройки.
  2. Находим пункт История изменений и переходим по гиперссылке настройки.
  3. В открывшемся списке находим наш новый документ.
  4. Устанавливаем режим версионирования: «Версионировать при записи» или «Версионировать при проведении».

Способ 2: Платформенное версионирование «История данных»

Начиная с версии платформы 8.3.11, в 1С появился встроенный механизм «История данных». Это современная альтернатива версионированию БСП. Если в вашей базе уже используется этот механизм, но вы решили сменить подход, ознакомьтесь с тем, как выполнить переход с Истории данных на механизм версионирования БСП.

Рассмотрим, когда стоит выбрать этот вариант:

Как настроить «Историю данных»

Настройка выполняется исключительно в Конфигураторе:

  1. Найдем наш документ в дереве метаданных.
  2. Откроем палитру свойств документа.
  3. Найдем свойство История данных.
  4. В поле Использование выберем значение Использовать.

Сравнение подходов

Давайте подытожим различия, чтобы вы могли выбрать оптимальный вариант решения.

Версионирование БСП:

Платформенная «История данных»:

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

← На главную