Откатить запись, нарушающую учебный лимит

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

Серверный обработчик вызывается после записи объекта, но до завершения транзакции; Отказ ещё отменяет её. Контекст: Документы → УчебныйКонтроль → Формы → ФормаДокумента.

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

Модуль управляемой формы: Документы → УчебныйКонтроль → Формы → ФормаДокумента. Серверная и клиентская директивы уже указаны; не вставляйте процедуру внутрь другой.

Подготовка

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

  2. Создайте документ УчебныйКонтроль: строковый номер 12 с автонумерацией, проведение Запретить. Добавьте КонтрольноеЧисло (Число 15.2) и Комментарий (Строка 100).

  3. Создайте основную управляемую форму документа с основным реквизитом Объект. Проверяйте новый документ с заполненной датой.

  4. Основной реквизит формы должен называться Объект. Если мастер дал другое имя, переименуйте основной реквизит и исправьте пути данных его полей в редакторе формы.

  5. Выведите основной числовой реквизит и комментарий на форму. Добавьте отдельный реквизит формы Статус (Строка 200), выведите его недоступным для редактирования.

  6. Откройте Документы → УчебныйКонтроль → Формы → ФормаДокумента → Модуль формы. Назначьте событие ПриЗаписиНаСервере одноимённой процедуре. Обновите только учебную базу.

  7. Примеры соседних событий можно объединить в одном модуле: каждая процедура должна существовать только один раз. Для обычного опыта задайте число 25 и комментарий Учебный объект.

&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Если ТекущийОбъект.КонтрольноеЧисло > 100 Тогда
        Отказ = Истина;
        Сообщить("Значение больше учебного лимита 100");
    КонецЕсли;
КонецПроцедуры

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

  1. Платформа вызывает назначенный обработчик, передавая параметры именно своего расширения формы.

  2. Серверный обработчик вызывается после записи объекта, но до завершения транзакции; Отказ ещё отменяет её.

  3. Работа ведётся с реквизитами объекта, который полностью объявлен в подготовке.

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

  1. Введите 150: клиентская проверка отрицательного значения пропускает его, но эта серверная проверка отменяет запись.

  2. Вновь откройте ранее сохранённый объект: 150 не должно заменить старое значение; при 25 запись проходит.

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

Откатить запись, нарушающую учебный лимит для собственного учебного объекта.

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

  1. Событие не означает успешную фиксацию транзакции.

  2. Здесь не отправляйте внешние уведомления об успехе: транзакция может быть отменена.

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

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

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

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

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