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