Настоящее событие набора, собственное измерение и ограниченный опыт с обязательной отменой транзакции.
Где и как запускать
Основной блок — модуль набора; дополнительные процедуры — свой серверный общий модуль.
Подготовка
Собственная учебная конфигурация: документ УчебнаяЗапискаПоследовательности, номер Строка 12 с автонумерацией, проведение не требуется.
Создайте последовательность УчебныйПорядокДокументов, включите свой документ в состав. Измерение Склад типа Строка 40. Не меняйте рабочие последовательности и их границы.
Основной обработчик поместите в модуль набора записей последовательности УчебныйПорядокДокументов, не в модуль менеджера и не в форму документа.
Две дополнительные процедуры — в свой серверный общий модуль УчебныеСобытияНабора с установленным Сервер. Вызовите его экспортную процедуру ПроверитьСвойНабор отдельной собственной командой; у неё не должно быть внешней транзакции.
Для положительного опыта оставьте заполненное собственное измерение. Для отрицательного очистите только Запись.Склад в подготовке. Не удаляйте системные проверяемые реквизиты всего набора.
Обе ветки драйвера отменяют собственную транзакцию. При сборке HTML BSL и записи базы не выполнялись.
Процедура ПередЗаписью(Отказ, Замещение)
Для Каждого Запись Из ЭтотОбъект Цикл
Если ПустаяСтрока(СокрЛП(Запись.Склад)) Тогда
Отказ = Истина;
Сообщить("В своей строке набора не заполнено Склад");
КонецЕсли;
КонецЦикла;
КонецПроцедурыСвой серверный общий модуль: ограниченный источник набора
Процедура ПодготовитьИЗаписатьСвойНабор()
Документ = Документы.УчебнаяЗапискаПоследовательности.СоздатьДокумент();
Документ.Дата = Дата(2026, 10, 15);
Документ.Записать();
Набор = Последовательности.УчебныйПорядокДокументов.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Документ.Ссылка);
Запись = Набор.Добавить();
Запись.Регистратор = Документ.Ссылка;
Запись.Период = Документ.Дата;
Запись.Склад = "Учебный склад книг";
Если Набор.ПроверитьЗаполнение() Тогда
Набор.Записать();
КонецЕсли;
КонецПроцедурыТот же модуль: отдельный драйвер, отмена транзакции в обеих ветках
Процедура ПроверитьСвойНабор() Экспорт
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Запустите отдельную учебную команду вне чужой транзакции";
КонецЕсли;
НачатьТранзакцию();
Попытка
ПодготовитьИЗаписатьСвойНабор();
ОтменитьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Сообщить("Учебные записи отменены, завершение транзакции не подтверждает запись");
КонецПроцедурыРазбор по шагам
Создайте указанные собственные метаданные и назначьте событие в модуле набора.
Вызовите отдельную экспортную процедуру драйвера: она создаёт и проверяет настоящий набор.
Сравните заполненный и пустой варианты измерения; после опыта вся собственная транзакция отменена.
Как проверить результат
Пустое / пробельное собственное измерение приводит к Отказ=Истина. Заполненный пример не переписывает входной отказ на Ложь.
ПередЗаписью выполняется внутри транзакции до записи набора. Отказ отменяет запись с исключением, которое обрабатывает внешний учебный драйвер.
Ожидаемый результат
Правило применяется к реальным строкам нужного набора, а фаза события отделена от фиксации транзакции.
На что обратить внимание
ПроверитьЗаполнение вызывает ОбработкаПроверкиЗаполнения; не вызывайте эту процедуру вручную.
Код не меняет границы последовательности, не перепроводит документы и не пересчитывает зарплату.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.