К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как сделать поле обязательным для заполнения в 1С

Как сделать поле обязательным для заполнения в 1С: настройка в конфигураторе, проверка заполнения, программные способы, типовые ошибки и FAQ для пользователей.

Обязательное поле — базовый инструмент контроля качества данных в 1С. Если контрагент сохраняется без ИНН, а документ — без склада, дальше по цепочке ломаются отчёты, обмены и проводки. Платформа 1С:Предприятие предлагает несколько способов заставить пользователя заполнить реквизит: от простого свойства «Проверка заполнения» в конфигураторе до гибкой программной проверки в модуле объекта.

Выбор способа зависит от задачи. Если поле должно быть заполнено всегда и без исключений — достаточно штатного свойства реквизита. Если обязательность зависит от условий (например, поле «Договор» обязательно только для определённого вида операции) — понадобится программная проверка в процедуре ОбработкаПроверкиЗаполнения. Для управляемых форм есть и третий вариант — отметка незаполненного прямо на форме без изменения конфигурации.

Ниже разобраны все основные подходы: свойство «Проверка заполнения», программная проверка, настройка на форме, особенности для типовых конфигураций, а также проверка результата и типичные ошибки. Материал подойдёт и пользователю с правами на доработку, и начинающему разработчику.

Какие способы сделать поле обязательным существуют в 1С

Платформа даёт три основных механизма, которые отличаются гибкостью и местом применения. Первый — свойство реквизита «Проверка заполнения», задаётся в конфигураторе и работает всегда, независимо от того, как заполняется объект: вручную, программно или при обмене. Второй — обработчик ОбработкаПроверкиЗаполнения в модуле объекта: позволяет задавать условия, выводить собственные тексты ошибок и проверять сразу несколько полей. Третий — свойство «ОтметкаНезаполненного» и «АвтоотметкаНезаполненного» у элемента формы: визуально подчёркивает поле, но само по себе не блокирует запись.

Важно понимать разницу между «подсветить» и «запретить сохранить». Отметка незаполненного только показывает пользователю красную рамку. Реальный запрет записи даёт либо свойство «Проверка заполнения», либо программный отказ в обработчике. В большинстве рабочих задач нужен именно запрет.

Сравнение способов

Свойство «Проверка заполнения»

Подходит, когда поле обязательно всегда. Настраивается без кода, но не поддерживает условия.

ОбработкаПроверкиЗаполнения

Подходит для условной обязательности и сложной логики. Требует внесения кода в модуль объекта.

Отметка незаполненного на форме

Подходит как мягкая подсказка пользователю. Не блокирует запись, работает только в конкретной форме.

Настройка свойства «Проверка заполнения» в конфигураторе

Это штатный и самый надёжный способ. Откройте конфигуратор, найдите нужный объект (справочник, документ, план видов характеристик и т.д.), перейдите на закладку «Данные» и выберите реквизит. В палитре свойств найдите пункт «Проверка заполнения» и установите значение «Выдавать ошибку». После обновления конфигурации базы данных платформа будет отказывать в записи объекта с пустым полем.

Для табличных частей настройка делается аналогично: разверните табличную часть, выберите её реквизит и задайте то же свойство. Проверка сработает при записи объекта, если хотя бы в одной строке поле пустое.

У свойства есть и значение «Проверять», доступное у самого объекта: для документов можно включить проверку заполнения только при проведении, а не при простой записи. Это удобно, когда черновик документа разрешено сохранять незаполненным, а проводить — только полностью оформленным.

Порядок настройки через конфигуратор
  1. 1
    Откройте конфигуратор и найдите нужный объект метаданных
  2. 2
    Перейдите на закладку «Данные» и выберите реквизит
  3. 3
    В палитре свойств установите «Проверка заполнения» = «Выдавать ошибку»
  4. 4
    Обновите конфигурацию базы данных (F7)
  5. 5
    Проверьте: попробуйте записать объект с пустым полем — должна появиться ошибка

Программная проверка через ОбработкаПроверкиЗаполнения

Когда обязательность зависит от условий, свойства конфигуратора недостаточно. В модуле объекта (справочника или документа) создаётся процедура ОбработкаПроверкиЗаполнения, в которой можно отказать в записи и вывести понятное сообщение.

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

Параметр Отказ = Истина блокирует запись. Параметр ПроверяемыеРеквизиты — массив имён реквизитов, которые платформа проверит штатно; из него можно удалить реквизит, чтобы заменить стандартную проверку своей. Указание пути к данным (в примере — «Договор») позволяет платформе подсветить именно то поле на форме, где ошибка.

Для типовых конфигураций внесение кода напрямую в модуль объекта усложняет обновление. Альтернатива — расширение конфигурации: обработчик добавляется через аннотацию &ИзменениеИКонтроль или &После, а типовой код остаётся нетронутым.

Как подсветить обязательное поле на форме без доработки конфигурации

В управляемых формах у элементов ввода есть свойства «АвтоотметкаНезаполненного» и «ОтметкаНезаполненного». Если у реквизита включена штатная проверка заполнения, платформа обычно сама отмечает поле красным. Но можно управлять отметкой вручную — например, включать её по условию в обработчике ПриИзменении другого поля.

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

Практичная комбинация: мягкая подсветка на форме для удобства ввода плюс жёсткая проверка в модуле объекта как страховка от пустых данных, приходящих программно.

Особенности для типовых конфигураций и расширений

В типовых решениях (1С:Бухгалтерия, Управление торговлей, ERP) многие поля уже имеют настроенную обязательность, а часть проверок реализована в коде. Прежде чем что-то менять, проверьте, нет ли готовой настройки: в некоторых конфигурациях обязательность реквизитов регулируется функциональными опциями или настройками учётной политики.

Если штатной настройки нет, предпочтительный путь — расширение конфигурации. В расширении можно добавить свой обработчик ОбработкаПроверкиЗаполнения, не снимая конфигурацию с поддержки полностью. Это сохраняет возможность автоматического обновления и снижает риск конфликтов.

Проверка результата и типичные ошибки

После настройки обязательно проверьте поведение в пользовательском режиме: создание нового объекта, копирование существующего, запись без проведения и проведение (для документов). Проверка должна срабатывать во всех сценариях, где поле пустое, и не мешать, когда оно заполнено.

Контрольные точки

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

Запись нового объекта с пустым полем
Норма

Появляется сообщение об ошибке, запись блокируется

Тревожный признак

Объект сохраняется без предупреждений

Заполненное поле
Норма

Объект записывается и проводится штатно

Тревожный признак

Ошибка появляется даже при заполненном поле

Обмен данными / загрузка
Норма

Данные загружаются либо ошибки логируются осмысленно

Тревожный признак

Обмен падает с непонятными отказами записи

Типичные ошибки
01
Включили только отметку незаполненного на форме — пользователь видит красную рамку, но запись не блокируется
02
Проверка добавлена в модуль формы вместо модуля объекта — программная запись и обмены проходят без контроля
03
Ошибка выведена без указания пути к данным — пользователь не понимает, какое поле заполнить
04
Не обновлена конфигурация базы данных после изменения свойства — настройка просто не применилась
05
Жёсткая проверка сломала перепроведение старых документов, где поле исторически пустое

Отдельная частая ситуация — «проверка не срабатывает». Чаще всего причина в том, что обработчик написан в модуле формы (работает только при интерактивной записи из этой формы) или забыли выполнить обновление конфигурации базы данных. Реже — реквизит удалён из массива ПроверяемыеРеквизиты в типовом коде, и штатная проверка подавлена.

FAQ: частые вопросы

Можно ли сделать поле обязательным без конфигуратора?

Полноценный запрет записи — нет, для этого нужны изменения в конфигурации или расширении. В пользовательском режиме часть типовых конфигураций позволяет влиять на обязательность через настройки (функциональные опции, настройки видов документов), но такая возможность зависит от конкретного решения.

Как сделать поле обязательным только при проведении документа?

У документа в конфигураторе установите «Проверка заполнения» = «Проверять при проведении», а у нужного реквизита — «Выдавать ошибку». Либо в обработчике ОбработкаПроверкиЗаполнения анализируйте режим записи и отказывайте только при проведении.

Почему проверка срабатывает в форме, но не при обмене данными?

Значит, проверка реализована в модуле формы, а не в модуле объекта. Обмены записывают объект программно, минуя форму. Перенесите логику в ОбработкаПроверкиЗаполнения модуля объекта — тогда контроль будет работать при любом способе записи.

Как вывести своё сообщение об ошибке вместо стандартного?

Используйте программную проверку: в ОбработкаПроверкиЗаполнения вызовите СообщитьПользователю со своим текстом и установите Отказ = Истина. Чтобы стандартное сообщение не дублировалось, удалите имя реквизита из массива ПроверяемыеРеквизиты.

Сломаются ли старые документы после включения обязательности?

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

Что лучше для типовой конфигурации: изменение модуля или расширение?

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

Итог

Что важно запомнить

Для безусловной обязательности используйте свойство «Проверка заполнения» реквизита, для условной — ОбработкаПроверкиЗаполнения в модуле объекта, а отметку на форме применяйте только как подсказку. Доработки в типовых конфигурациях делайте через расширения и обязательно тестируйте на копии базы.