Разработка и Конфигурация · 10 мин
Как сделать реквизит обязательным для заполнения в 1С
Способы сделать реквизит обязательным в 1С: свойство «Проверка заполнения» в конфигураторе, программная проверка, настройка без снятия с поддержки. Пошаговые инструкции.
Обязательность заполнения реквизита — одна из базовых настроек, которая защищает базу 1С от неполных данных: документа без контрагента, справочника без наименования, договора без номера. В зависимости от задачи это реализуется тремя путями: через свойство «Проверка заполнения» в конфигураторе, через программную проверку в модуле объекта или через расширение конфигурации, когда типовую конфигурацию нельзя изменять.
Выбор способа зависит от того, есть ли у вас доступ к конфигуратору, находится ли конфигурация на поддержке и нужно ли проверять реквизит всегда или только при определённых условиях. Простое включение флажка подходит для стабильных требований, а гибкая логика с условиями требует кода.
Важно понимать: обязательность реквизита проверяется при записи или проведении объекта, а не при вводе данных в форму. Если нужно подсветить поле на форме заранее, это делается отдельно — свойством «Автоотметка незаполненного» у элемента формы.
Способ 1: свойство «Проверка заполнения» в конфигураторе
Штатный механизм платформы — свойство реквизита «Проверка заполнения». Оно доступно для реквизитов документов, справочников, табличных частей, регистров и других объектов метаданных. Платформа сама выполняет проверку при записи объекта и блокирует её, если поле пустое.
Чтобы включить проверку, откройте конфигуратор, найдите нужный объект (например, документ «Реализация товаров и услуг»), раскройте ветку «Реквизиты», вызовите палитру свойств нужного реквизита и установите «Проверка заполнения» в значение «Выдавать ошибку». После обновления конфигурации базы данных пользователь не сможет записать объект, пока не заполнит это поле.
- 1Откройте конфигуратор и найдите объект (документ или справочник)
- 2Раскройте ветку «Реквизиты» и выделите нужный реквизит
- 3В палитре свойств найдите «Проверка заполнения»
- 4Установите значение «Выдавать ошибку»
- 5Обновите конфигурацию базы данных (F7)
- 6Проверьте в пользовательском режиме: запись пустого объекта должна блокироваться
У свойства есть три варианта значения. «Не проверять» — поведение по умолчанию. «Выдавать ошибку» — жёсткая блокировка записи. Промежуточный вариант с предупреждением в палитре свойств напрямую отсутствует: мягкое предупреждение делается только программно через сообщение пользователю без отказа от записи.
Способ 2: программная проверка через ОбработкаПроверкиЗаполнения
Когда обязательность зависит от условий — например, поле «Договор» обязательно только для юридических лиц, а «Серия номенклатуры» только для серийного учёта — простого флажка недостаточно. В этом случае используется обработчик события «ОбработкаПроверкиЗаполнения» в модуле объекта.
Внутри обработчика вы проверяете условие и, если реквизит не заполнен, добавляете его имя в массив «НепроверяемыеРеквизиты» (чтобы исключить штатную проверку) или наоборот выводите сообщение и устанавливаете параметр «Отказ = Истина».
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ВидОперации = Перечисления.ВидыОпераций.ПередачаВАренду
И Не ЗначениеЗаполнено(Договор) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Договор"" не заполнено'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, "Договор", , Отказ);
КонецЕсли;
КонецПроцедурыПреимущество подхода — полная гибкость: можно проверять несколько реквизитов, комбинировать условия, формировать понятные пользователю тексты ошибок и привязывать сообщение к конкретному полю формы. Недостаток — требуется изменение модуля объекта, что при типовой конфигурации означает снятие с поддержки или использование расширения.
Способ 3: расширение конфигурации без снятия с поддержки
Если конфигурация типовая и находится на полной поддержке, прямое изменение объекта приведёт к потере автоматического обновления. Корректное решение — расширение конфигурации: оно накладывается поверх основной конфигурации и не мешает обновлениям.
Создайте расширение (Конфигурация → Расширения конфигурации → Создать), заимствуйте в него нужный объект и его модуль, затем добавьте обработчик «ОбработкаПроверкиЗаполнения» с аннотацией «После» или «Вместо». Внутри разместите ту же логику проверки, что и в обычном модуле. Свойство «Проверка заполнения» заимствованного реквизита в расширении тоже можно переопределить.
Учтите ограничение: расширения работают только в режиме совместимости 8.3.11 и выше, а некоторые операции (например, изменение ролей и отдельных свойств) в расширениях недоступны. Для задачи обязательности реквизита возможностей расширения достаточно практически всегда.
Обязательный реквизит в управляемой форме: визуальная подсветка
Проверка при записи срабатывает в конце работы пользователя, что не всегда удобно: человек заполнил тридцать полей, нажал «Записать» и получил ошибку. Чтобы поле было визуально помечено сразу, используйте свойство элемента формы «Автоотметка незаполненного» — пустое поле будет подчёркнуто красным ещё до записи.
В типовых формах этот признак обычно включается автоматически, если у реквизита установлена проверка заполнения. Для самописных форм или полей, добавленных программно, установите свойство вручную в редакторе формы или кодом.
Сравнение способов
Подходит для безусловной обязательности. Просто, но требует доступа к конфигуратору и не поддерживает условия.
Подходит для условной обязательности и сложных проверок. Требует кода и изменения конфигурации или расширения.
Подходит для типовых конфигураций на поддержке. Не мешает обновлениям, но требует контроля совместимости.
Типичные ошибки и ограничения
Частая ошибка — включить проверку заполнения для реквизита, у которого в базе уже есть тысячи объектов с пустым значением. После обновления пользователи не смогут перепровести старые документы, пока не заполнят поле. Перед включением проверки выполните анализ: групповой обработкой или запросом найдите объекты с пустым реквизитом и заполните их.
Вторая ошибка — проверять реквизит, который заполняется программно при проведении или в подписке на событие. Если заполнение происходит после проверки, объект никогда не запишется. Убедитесь, что порядок вызова обработчиков гарантирует заполнение до контроля.
Третья ситуация — реквизиты табличных частей. Свойство «Проверка заполнения» у колонки табличной части настраивается отдельно от реквизитов шапки: выделите реквизит внутри ветки «Табличные части» и установите проверку там. Платформа проверит каждую строку.
Проверка результата и откат изменений
После настройки обязательно протестируйте поведение в пользовательском режиме: попробуйте записать объект с пустым полем (должна появиться ошибка с указанием поля), затем с заполненным (запись должна пройти). Проверьте также проведение документа, если реквизит участвует в движениях, и работу обмена данными — обязательный реквизит может блокировать загрузку объектов из других систем.
Как проверить результат
Появляется сообщение об ошибке, объект не записывается
Объект записывается без сообщения — проверка не сработала
Объект записывается и проводится штатно
Ошибка появляется даже при заполненном поле — конфликт условий в коде
Объекты загружаются при заполненном реквизите
Обмен падает с ошибками проверки — нужно дозаполнить данные на стороне источника
Если что-то пошло не так, откат прост: верните свойству значение «Не проверять» или отключите расширение (снимите флажок «Используется» в списке расширений) и обновите конфигурацию базы данных. Перед любыми изменениями в рабочей базе сделайте резервную копию или выполните настройку сначала на копии.
Что важно запомнить
Для безусловной обязательности используйте свойство «Проверка заполнения = Выдавать ошибку», для условной — обработчик ОбработкаПроверкиЗаполнения, для типовой конфигурации на поддержке — расширение. Перед включением заполните исторические данные и протестируйте на копии базы.
Частые вопросы
Можно ли сделать реквизит обязательным без конфигуратора?
Штатными средствами пользовательского режима — нет. Минимальный вариант без изменения конфигурации — расширение, но его тоже создают в конфигураторе. В некоторых типовых конфигурациях есть механизмы «Дополнительные реквизиты и сведения», где обязательность дополнительного реквизита настраивается галочкой прямо в пользовательском режиме, но это касается только дополнительных, а не основных реквизитов.
Как сделать обязательным реквизит табличной части?
В конфигураторе раскройте ветку «Табличные части» объекта, выберите нужную табличную часть, затем её реквизит и установите «Проверка заполнения = Выдавать ошибку». Платформа проверит заполнение в каждой строке при записи объекта.
Почему проверка не срабатывает при программной записи из обработки?
Проверка заполнения вызывается при интерактивной записи и при вызове метода Записать с выполнением проверок. Если объект записывается через ОбменДанными.Загрузка = Истина, проверки платформы отключаются — это штатное поведение для обменов. Для таких случаев контроль нужно реализовывать в самой обработке загрузки.
Как сделать не ошибку, а только предупреждение о незаполненном поле?
Стандартное свойство «Проверка заполнения» умеет только блокировать. Мягкое предупреждение реализуется программно: в обработчике проверки выведите сообщение пользователю через СообщитьПользователю, но не устанавливайте Отказ = Истина. Объект запишется, а пользователь увидит напоминание.
Сломается ли обмен данными после включения обязательности?
Может, если из другой системы приходят объекты с пустым значением этого реквизита. Перед включением проверки убедитесь, что источник данных всегда передаёт значение, либо добавьте заполнение значением по умолчанию в правилах конвертации или подписке на событие.
Как найти все объекты с пустым реквизитом перед включением проверки?
Проще всего консолью запросов: выберите ссылку на объект, где реквизит равен пустому значению (НЕ ЗначениеЗаполнено или сравнение с пустой ссылкой/пустой строкой). Альтернатива — групповая обработка справочников и документов с отбором по условию и последующим заполнением значением по умолчанию.