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

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

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

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

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

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

Важно понимать: обязательность реквизита проверяется при записи или проведении объекта, а не при вводе данных в форму. Если нужно подсветить поле на форме заранее, это делается отдельно — свойством «Автоотметка незаполненного» у элемента формы.

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

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

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

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

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

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

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

Внутри обработчика вы проверяете условие и, если реквизит не заполнен, добавляете его имя в массив «НепроверяемыеРеквизиты» (чтобы исключить штатную проверку) или наоборот выводите сообщение и устанавливаете параметр «Отказ = Истина».

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

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

Способ 3: расширение конфигурации без снятия с поддержки

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

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

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

Обязательный реквизит в управляемой форме: визуальная подсветка

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

В типовых формах этот признак обычно включается автоматически, если у реквизита установлена проверка заполнения. Для самописных форм или полей, добавленных программно, установите свойство вручную в редакторе формы или кодом.

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

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

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

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

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

Расширение конфигурации

Подходит для типовых конфигураций на поддержке. Не мешает обновлениям, но требует контроля совместимости.

Типичные ошибки и ограничения

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

Вторая ошибка — проверять реквизит, который заполняется программно при проведении или в подписке на событие. Если заполнение происходит после проверки, объект никогда не запишется. Убедитесь, что порядок вызова обработчиков гарантирует заполнение до контроля.

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

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

Проверка результата и откат изменений

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

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

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

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

Появляется сообщение об ошибке, объект не записывается

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

Объект записывается без сообщения — проверка не сработала

Запись с заполненным реквизитом
Норма

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

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

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

Обмен данными и загрузка из файлов
Норма

Объекты загружаются при заполненном реквизите

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

Обмен падает с ошибками проверки — нужно дозаполнить данные на стороне источника

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

Итог

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

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

Частые вопросы

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

Штатными средствами пользовательского режима — нет. Минимальный вариант без изменения конфигурации — расширение, но его тоже создают в конфигураторе. В некоторых типовых конфигурациях есть механизмы «Дополнительные реквизиты и сведения», где обязательность дополнительного реквизита настраивается галочкой прямо в пользовательском режиме, но это касается только дополнительных, а не основных реквизитов.

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

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

Почему проверка не срабатывает при программной записи из обработки?

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

Как сделать не ошибку, а только предупреждение о незаполненном поле?

Стандартное свойство «Проверка заполнения» умеет только блокировать. Мягкое предупреждение реализуется программно: в обработчике проверки выведите сообщение пользователю через СообщитьПользователю, но не устанавливайте Отказ = Истина. Объект запишется, а пользователь увидит напоминание.

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

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

Как найти все объекты с пустым реквизитом перед включением проверки?

Проще всего консолью запросов: выберите ссылку на объект, где реквизит равен пустому значению (НЕ ЗначениеЗаполнено или сравнение с пустой ссылкой/пустой строкой). Альтернатива — групповая обработка справочников и документов с отбором по условию и последующим заполнением значением по умолчанию.