Отделить отметку незаполненного от проверки данных

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

Принудительно показываем отметку даже у заполненной строки. Команда отдельно проверяет фактическое значение и не запрещает запись посредством оформления.

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

Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.

Подготовка

  1. Создайте отдельную учебную внешнюю обработку с пустой управляемой основной формой. Каждую задачу запускайте в своей копии формы.

  2. Не добавляйте вручную реквизит ЗначениеПримера, поле ПолеПримера и команду УчебноеДействие: их создаст код.

  3. В свойствах формы → События свяжите ПриСозданииНаСервере с одноимённой процедурой. Вставьте весь модуль, включая клиентские и серверные процедуры.

  4. Сохраните учебную EPF и откройте через Файл → Открыть в тонком или толстом клиенте Windows. Рабочие данные не читаются и не записываются.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    ТипРеквизита = Новый ОписаниеТипов("Строка");
    Новые.Добавить(Новый РеквизитФормы("ЗначениеПримера", ТипРеквизита));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    ЭтаФорма.ЗначениеПримера = "Книга";
    Поле = Элементы.Добавить("ПолеПримера", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеВвода;
    Поле.ПутьКДанным = "ЗначениеПримера";
    Поле.Заголовок = "Отделить отметку незаполненного от проверки данных";
    Поле.АвтоОтметкаНезаполненного = Ложь;
    Поле.ОтметкаНезаполненного = Истина;
    Поле.КнопкаОчистки = Истина;

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Проверить свой пример";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Поле = Элементы.ПолеПримера;
    Поле.ОтметкаНезаполненного = Истина;
    Сообщить(Поле.ОтметкаНезаполненного);
    Заполнено = Не ПустаяСтрока(ЗначениеПримера);
    Сообщить(СтрШаблон("Фактическое заполнение: %1", Заполнено));
    Если Не Заполнено Тогда
        Сообщить("Введите собственное название; сохранение в этом уроке не выполняется");
        Возврат;
    КонецЕсли;
    Сообщить("Значение прошло отдельную проверку, несмотря на отметку интерфейса");
КонецПроцедуры

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

  1. АвтоОтметкаНезаполненного выключена, ОтметкаНезаполненного задана явно.

  2. Отметка может показываться независимо от заполненности. При начале редактирования она сбрасывается даже при выключенной автоматике.

  3. Команда вновь выставляет визуальный флаг, затем проверяет сам реквизит.

  4. ПустаяСтрока проверяет текст, а не наличие отметки или цвет рамки.

  5. В реальном сохранении такую проверку выполняют в соответствующем серверном контракте, не только в клиентском интерфейсе.

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

  1. Для начальной Книга: отметка Истина, фактическое заполнение Истина, сообщение об отдельной проверке.

  2. Очистите поле и нажмите кнопку: фактическое заполнение Ложь, появляется просьба ввести название.

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

Новичок видит, что отметка интерфейса не доказывает ни ошибку данных, ни их допустимость.

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

  1. Этот урок не реализует запись документа и не является проверкой прав.

  2. Не используйте ОтметкаНезаполненного вместо проверки значения, полученного через импорт или API.

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

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

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

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

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