Расширение поля формы для поля ввода.ОтметкаНезаполненного

Свойства · MarkIncomplete

Тип: Булево. Указывает, нужно ли сейчас в поле ввода отображать особую отметку незаполненного или нет. Если свойство имеет значение Истина, то независимо от хранимых в поле ввода данных будет отображаться отметка, если Ложь, то независимо от хранимых в поле ввода данных отметка отображаться не будет. При начале редактирования свойство сбрасывается, даже если АвтоОтметкаНезаполненного равно Ложь. Если свойство АвтоОтметкаНезаполненного равно Истина, то при установке и формировании значения в поле ввода будет меняться состояние свойства ОтметкаНезаполненного: если значение в поле ввода эквивалентно значению по умолчанию текущего типа, то ОтметкаНезаполненного будет установлено Истина, иначе - Ложь. Если для поля в свойствах метаданных "Автоотметка незаполненного" установлено "Авто": если поле ввода связано с реквизитом, у которого в свойстве метаданных "Проверка заполнения" установлено "Выдавать ошибку", то свойство принимает значение Истина, и соответственно, свойство ОтметкаНезаполненного зависит от того, является ли значение реквизита значением по умолчанию; если поле ввода связано с реквизитом, у которого в свойстве метаданных "Проверка заполнения" установлено "Не проверять", то свойство ОтметкаНезаполненного принимает значение Ложь, и соответственно, ОтметкаНезаполненного не зависит от того, является ли значение реквизита значением по умолчанию.

Полное описание, параметры и ограничения

Расширение поля формы для поля ввода.ОтметкаНезаполненного (Form field extension for a text box.MarkIncomplete)

Расширение поля формы для поля ввода (Form field extension for a text box)

ОтметкаНезаполненного (MarkIncomplete)

Не применяется в интерфейсе «Версия 8.5»

Доступен, начиная с версии 8.2.

Использование:
Чтение и запись.
Описание:
Тип: Булево.
Указывает, нужно ли сейчас в поле ввода отображать особую отметку незаполненного или нет. Если свойство имеет значение Истина, то независимо от хранимых в поле ввода данных будет отображаться отметка, если Ложь, то независимо от хранимых в поле ввода данных отметка отображаться не будет.
При начале редактирования свойство сбрасывается, даже если АвтоОтметкаНезаполненного равно Ложь.

Если свойство АвтоОтметкаНезаполненного равно Истина, то при установке и формировании значения в поле ввода будет меняться состояние свойства ОтметкаНезаполненного: если значение в поле ввода эквивалентно значению по умолчанию текущего типа, то ОтметкаНезаполненного будет установлено Истина, иначе - Ложь.
Если для поля в свойствах метаданных "Автоотметка незаполненного" установлено "Авто":
если поле ввода связано с реквизитом, у которого в свойстве метаданных "Проверка заполнения" установлено "Выдавать ошибку", то свойство принимает значение Истина, и соответственно, свойство ОтметкаНезаполненного зависит от того, является ли значение реквизита значением по умолчанию;

если поле ввода связано с реквизитом, у которого в свойстве метаданных "Проверка заполнения" установлено "Не проверять", то свойство ОтметкаНезаполненного принимает значение Ложь, и соответственно, ОтметкаНезаполненного не зависит от того, является ли значение реквизита значением по умолчанию.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Изменение свойства на клиенте может потребовать обращения к серверу.

Использование в версии:

Доступен, начиная с версии 8.2.

Использование в интерфейсе:

Не применяется в интерфейсе «Версия 8.5»

Методическая информация

Практические примеры

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

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

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

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

Подготовка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Проверить заполнение через собственное серверное событие формы

Метод ПроверитьЗаполнение вызывает зарегистрированное событие. В нём проверяем собственное целое количество 1…10 и явно устанавливаем Отказ при ошибке.

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

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

Подготовка

  1. В отдельной учебной базе платформы 8.5.1.1343 создайте внешнюю обработку УчебнаяФорма85 с пустой управляемой основной формой. Используйте тонкий клиент Windows.

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

  3. Не создавайте вручную ЗначениеПримера, ПолеПримера и кнопку: код создаёт их полностью. Каждый урок запускайте в отдельной копии своей формы.

  4. Сохраните свою EPF и откройте её в учебной базе. Собственное количество начинается с 3, цена книги задана в коде как 250; исходный расчёт равен 750.

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

  6. Команда расчёта имеет ИзменяетСохраняемыеДанные = Ложь. Уроки изменяют только свой интерфейс и значения собственной формы, не конфигурацию и не рабочие данные.

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

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

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

&НаКлиенте
Процедура УчебноеДействие(Команда)
    ЭтаФорма.ОтключитьОтметкуНезаполненного();
    Успех = ЭтаФорма.ПроверитьЗаполнение();
    Сообщить("Результат собственной проверки: " + Строка(Успех));
    Если Не Успех Тогда
        Сообщить("Учебный расчёт не выполнен; исправьте количество");
        Возврат;
    КонецЕсли;
    Если ТипЗнч(ЗначениеПримера) <> Тип("Число") Тогда
        ВызватьИсключение "Собственное количество должно быть числом";
    КонецЕсли;
    Если ЗначениеПримера < 1 ИЛИ ЗначениеПримера > 10 ИЛИ ЗначениеПримера <> Цел(ЗначениеПримера) Тогда
        ВызватьИсключение "Для учебного расчёта выберите целое количество от 1 до 10";
    КонецЕсли;
    Цена = 250;
    Сумма = ЗначениеПримера * Цена;
    Сообщить(Сумма >= 250 И Сумма <= 2500);
    Сообщить(Сумма / Цена = ЗначениеПримера);
    Сообщить(СтрШаблон("Собственные книги: %1 × %2 = %3", ЗначениеПримера, Цена, Сумма));

КонецПроцедуры

&НаСервере
Процедура УчебнаяПроверкаНаСервере(Отказ, ПроверяемыеРеквизиты)
    Если ТипЗнч(ЗначениеПримера) <> Тип("Число") Тогда
        Отказ = Истина;
        Сообщить("Учебное количество должно быть числом");
        Возврат;
    КонецЕсли;
    Если ЗначениеПримера < 1 ИЛИ ЗначениеПримера > 10 ИЛИ ЗначениеПримера <> Цел(ЗначениеПримера) Тогда
        Отказ = Истина;
        Элементы.ПолеПримера.ОтметкаНезаполненного = Истина;
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Для учебного расчёта нужно целое количество от 1 до 10";
        Сообщение.Поле = "ЗначениеПримера";
        Сообщение.ИдентификаторНазначения = ЭтаФорма.УникальныйИдентификатор;
        Сообщение.Сообщить();
    КонецЕсли;
КонецПроцедуры

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

  1. При создании регистрируем собственное событие серверным методом УстановитьДействие и проверяем его имя через ПолучитьДействие.

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

  3. Отказ — переданный обработчику булевый параметр. При значении вне 1…10 или дробном количестве явно устанавливаем его в Истина.

  4. Сообщение привязано к пути реквизита ЗначениеПримера и идентификатору текущей формы. Имя визуального поля ПолеПримера не подставляем вместо пути данных.

  5. При ошибке кнопка прекращает расчёт. Массив ПроверяемыеРеквизиты не очищается: урок не отключает другие системные проверки ради успешного результата.

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

  1. После создания ожидается Истина для имени обработчика. При 3 кнопка сообщает успешную проверку и 750; при 0 — отказ и сообщение у поля, без расчёта.

  2. После ошибки исправьте количество на 5 и нажмите снова: ручная отметка снимается, проверка успешна, сумма 1250. Поле допускает ввод 0, но правило расчёта его запрещает.

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

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

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

  1. ПроверитьЗаполнение не знает автоматически вашего правила 1…10: его реализует назначенное событие.

  2. ОтключитьОтметкуНезаполненного снимает только отметки полей с АвтоОтметкаНезаполненного = Ложь и не исправляет число в реквизите.

  3. ПроверитьЗаполнение не записывает книгу. Для реальной операции правила и отказ дополнительно проверяются в соответствующем объекте конфигурации.

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

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

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

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

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