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