ПроверитьЗаполнение вызывает ОбработкаПроверкиЗаполнения. Свой обработчик запрещает пустой артикул и неположительную цену только в изолированном учебном справочнике.
Где и как запускать
Полный код вставьте в модуль объекта учебного справочника УчебныеТовары. Не вставляйте обработчики событий в общий модуль или модуль формы.
Подготовка
Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.
Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.
Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.
Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.
Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.
Только для этого отдельного упражнения в модуль объекта УчебныеТовары вставьте полный код ниже. Если там остались обработчики другого упражнения, сначала используйте отдельную копию учебной базы; не склеивайте одинаковые события.
Серверная команда учебной обработки создаёт собственный экземпляр и вызывает: Справочники.УчебныеТовары.СоздатьЭлемент().ВыполнитьУчебнуюЗадачу();
Все проверки и присваивания выполняются у незаписанного объекта. Записать и внешние сервисы не вызываются.
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ЗначениеЗаполнено(ЭтотОбъект.Артикул) Тогда
Сообщить("Учебное правило: заполните артикул");
Отказ = Истина;
КонецЕсли;
Если ЭтотОбъект.Цена <= 0 Тогда
Сообщить("Учебное правило: цена должна быть положительной");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьУчебнуюЗадачу() Экспорт
Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
КонецЕсли;
ЭтотОбъект.Наименование = "Учебная книга";
ЭтотОбъект.Артикул = "";
ЭтотОбъект.Цена = 0;
Сообщить(Не ЭтотОбъект.ПроверитьЗаполнение());
ЭтотОбъект.Артикул = "A-01";
ЭтотОбъект.Цена = 250;
Сообщить(ЭтотОбъект.ПроверитьЗаполнение());
Сообщить(ЭтотОбъект.ЭтоНовый());
КонецПроцедурыРазбор по шагам
Модуль объекта содержит настоящий обработчик события проверки. Все остальные обработчики для этой отдельной задачи отсутствуют.
Проверка платформенных реквизитов с настройкой Показывать ошибку и наш обработчик — разные источники отказа.
Для первого вызова артикул пустой, цена 0: обработчик сообщает обе причины и выставляет Отказ.
Для второго вызова задаём A-01 и 250. Правило пройдено, но Записать всё равно не вызывается.
Как проверить результат
Два сообщения о нарушенных учебных правилах, затем три сообщения Истина.
Поставьте точку останова в обработчик и проверьте два его вызова.
В списке новый товар не появился.
Ожидаемый результат
Показан возврат Булево из проверки и работа собственного отказа до записи.
На что обратить внимание
Это учебное правило, не универсальный запрет бесплатных товаров в типовых конфигурациях.
ПроверитьЗаполнение может запускать дополнительные обработчики; в рабочей конфигурации результат нужно исследовать отдельно.
Истина не доказывает успешную запись: ПередЗаписью и другие ограничения ещё могут отказать.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.