Проверить собственное правило положительной учебной цены

Учебные задачи

ПроверитьЗаполнение вызывает ОбработкаПроверкиЗаполнения. Свой обработчик запрещает пустой артикул и неположительную цену только в изолированном учебном справочнике.

Где и как запускать

Полный код вставьте в модуль объекта учебного справочника УчебныеТовары. Не вставляйте обработчики событий в общий модуль или модуль формы.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

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

  6. Только для этого отдельного упражнения в модуль объекта УчебныеТовары вставьте полный код ниже. Если там остались обработчики другого упражнения, сначала используйте отдельную копию учебной базы; не склеивайте одинаковые события.

  7. Серверная команда учебной обработки создаёт собственный экземпляр и вызывает: Справочники.УчебныеТовары.СоздатьЭлемент().ВыполнитьУчебнуюЗадачу();

  8. Все проверки и присваивания выполняются у незаписанного объекта. Записать и внешние сервисы не вызываются.

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    Если Не ЗначениеЗаполнено(ЭтотОбъект.Артикул) Тогда
        Сообщить("Учебное правило: заполните артикул");
        Отказ = Истина;
    КонецЕсли;
    Если ЭтотОбъект.Цена <= 0 Тогда
        Сообщить("Учебное правило: цена должна быть положительной");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

Процедура ВыполнитьУчебнуюЗадачу() Экспорт
    Если Метаданные.Справочники.Найти("УчебныеТовары") = Неопределено Тогда
        ВызватьИсключение "Сначала создайте учебный справочник по подготовке";
    КонецЕсли;
    ЭтотОбъект.Наименование = "Учебная книга";
    ЭтотОбъект.Артикул = "";
    ЭтотОбъект.Цена = 0;
    Сообщить(Не ЭтотОбъект.ПроверитьЗаполнение());
    ЭтотОбъект.Артикул = "A-01";
    ЭтотОбъект.Цена = 250;
    Сообщить(ЭтотОбъект.ПроверитьЗаполнение());
    Сообщить(ЭтотОбъект.ЭтоНовый());
КонецПроцедуры

Разбор по шагам

  1. Модуль объекта содержит настоящий обработчик события проверки. Все остальные обработчики для этой отдельной задачи отсутствуют.

  2. Проверка платформенных реквизитов с настройкой Показывать ошибку и наш обработчик — разные источники отказа.

  3. Для первого вызова артикул пустой, цена 0: обработчик сообщает обе причины и выставляет Отказ.

  4. Для второго вызова задаём A-01 и 250. Правило пройдено, но Записать всё равно не вызывается.

Как проверить результат

  1. Два сообщения о нарушенных учебных правилах, затем три сообщения Истина.

  2. Поставьте точку останова в обработчик и проверьте два его вызова.

  3. В списке новый товар не появился.

Ожидаемый результат

Показан возврат Булево из проверки и работа собственного отказа до записи.

На что обратить внимание

  1. Это учебное правило, не универсальный запрет бесплатных товаров в типовых конфигурациях.

  2. ПроверитьЗаполнение может запускать дополнительные обработчики; в рабочей конфигурации результат нужно исследовать отдельно.

  3. Истина не доказывает успешную запись: ПередЗаписью и другие ограничения ещё могут отказать.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.