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

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

Обязательность заполнения реквизита в 1С: как установить

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

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

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

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

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

В платформе 1С:Предприятие 8.3 предусмотрено несколько уровней контроля заполнения. Первый — декларативный: свойство «Проверка заполнения» у реквизита объекта или табличной части. Платформа сама проверяет поле при записи и не даёт сохранить объект с пустым значением. Это самый быстрый и надёжный вариант, если требование безусловное.

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

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

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

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

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

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

Для условной обязательности и сложной логики. Требует навыков программирования на встроенном языке.

Штатные настройки типовой конфигурации

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

Подписки на события

Контроль без изменения самого объекта, удобно в связке с расширениями; сложнее в сопровождении.

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

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

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

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

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

Обратите внимание: изменение затрагивает только новые записи в части блокировки, но старые объекты с пустым реквизитом откроются на просмотр, а при перезаписи потребуют заполнения. Это нужно учитывать, если в базе уже есть исторические данные.

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

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

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

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

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

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

Обязательные реквизиты без изменения конфигурации

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

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

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

Проверка результата и контроль качества данных

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

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

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

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

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

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

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

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

Перезапись старых данных
Норма

Система требует заполнить поле при перепроведении/перезаписи

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

Старые объекты молча сохраняются с пустым значением

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

Загружаемые объекты тоже проходят контроль или осознанно обходят его

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

Обмен падает с ошибками либо массово создаёт незаполненные объекты

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

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

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

Вторая ошибка — чрезмерная обязательность. Когда обязательных полей слишком много, пользователи начинают вводить формальные значения («-», «1», прочерк), что обесценивает данные сильнее, чем пустое поле. Требуйте только те реквизиты, которые реально используются в учёте и отчётах.

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

Третья группа проблем — производительность и логика. Тяжёлые запросы внутри «ОбработкаПроверкиЗаполнения» выполняются при каждой записи объекта и могут замедлить работу. Условия проверки должны быть максимально простыми, а обращения к базе — минимальными.

Как выбрать подходящий вариант

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

Маршрут решения

Как выбрать действие

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

В любом случае завершайте внедрение инструкцией для пользователей: короткое сообщение о том, какое поле стало обязательным и что в нём указывать, сэкономит десятки обращений в поддержку.

Итог

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

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

Часто задаваемые вопросы

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

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

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

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

Сработает ли проверка при обмене данными между базами?

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

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

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

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

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

Пользователи вводят прочерки в обязательные поля. Что делать?

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