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

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

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

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

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

Убрать проверку заполнения можно несколькими способами: через настройку свойства реквизита в конфигураторе, программно через параметры метода Записать(), через переопределение обработчика ОбработкаПроверкиЗаполнения или через свойство объекта ОбменДанными.Загрузка. Выбор зависит от того, нужно ли отключить проверку навсегда, только для конкретной операции или для отдельного сценария.

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

Как работает проверка заполнения в 1С

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

Проверка выполняется в два этапа. Сначала платформа проверяет реквизиты, помеченные как обязательные, а также реквизиты с функциональными опциями и условиями обязательности. Затем вызывается обработчик события ОбработкаПроверкиЗаполнения в модуле объекта, где разработчик может добавить собственные проверки и отказаться от записи через параметр Отказ = Истина.

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

Способ 1. Отключить проверку в свойствах реквизита

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

Порядок действий: откройте конфигуратор, найдите нужный объект (справочник, документ, регистр), раскройте ветку «Реквизиты», дважды щёлкните по реквизиту и в палитре свойств найдите пункт «Проверка заполнения». Установите значение «Не проверять» и обновите конфигурацию базы данных через меню «Конфигурация — Обновить конфигурацию базы данных».

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

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

Способ 2. Обойти проверку программно при записи

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

Установка Объект.ОбменДанными.Загрузка = Истина отключает не только проверку заполнения, но и большинство других проверок и обработчиков записи: подписки на события, бизнес-логику в ПередЗаписью и ПриЗаписи (если они не проверяют этот признак явно), контроль уникальности номеров и дат запрета изменения данных в некоторых случаях. Это мощный и одновременно опасный приём.

bsl
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Тестовая позиция";
НовыйЭлемент.ОбменДанными.Загрузка = Истина;
НовыйЭлемент.Записать();

Более точечный вариант — использовать метод ПроверитьЗаполнение() и обработать результат самостоятельно вместо автоматической проверки, либо вызывать запись в привилегированном режиме через УстановитьПривилегированныйРежим(Истина), если проблема связана с правами доступа, а не с заполненностью. Привилегированный режим, однако, сам по себе проверку заполнения не отключает — частая ошибка разработчиков.

Способ 3. Переопределить обработчик ОбработкаПроверкиЗаполнения

Если проверка реализована не свойством реквизита, а кодом в модуле объекта, отключение свойства в конфигураторе не поможет. Нужно найти обработчик ОбработкаПроверкиЗаполнения в модуле объекта и скорректировать его логику.

Типовой код такого обработчика выглядит как проверка условий с выводом сообщения и установкой Отказ = Истина. Чтобы отключить конкретную проверку, можно удалить или закомментировать соответствующий блок, либо добавить условие, при котором проверка не выполняется — например, по признаку служебной загрузки или по дополнительному свойству объекта.

bsl
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	Если ДополнительныеСвойства.Свойство("ПропуститьПроверку") Тогда
		Возврат;
	КонецЕсли;
	// далее штатные проверки
КонецПроцедуры

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

Способ 4. Исключить реквизит из проверяемых программно

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

bsl
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	Индекс = ПроверяемыеРеквизиты.Найти("Комментарий");
	Если Индекс <> Неопределено Тогда
		ПроверяемыеРеквизиты.Удалить(Индекс);
	КонецЕсли;
КонецПроцедуры

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

Сравнение способов и критерии выбора

Сравнение вариантов

Свойство реквизита в конфигураторе

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

ОбменДанными.Загрузка = Истина

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

Удаление из ПроверяемыеРеквизиты

Точечное и условное отключение проверки отдельных полей. Требует доработки модуля объекта или расширения.

Переопределение обработчика

Нужен, когда проверка написана кодом, а не свойством. Лучше реализовывать через расширение конфигурации.

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

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

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

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

Типичные ошибки и их последствия

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

Как проверить результат после изменений

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

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

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

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

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

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

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

Появляется сообщение «Поле не заполнено» — проверка осталась в другом месте (модуль объекта, форма)

Программная запись из обработки
Норма

Запись проходит без исключений

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

Ошибка проверки заполнения — проверьте, установлен ли признак загрузки или изменён обработчик

Работа отчётов и печатных форм по объектам
Норма

Отчёты формируются, пустые реквизиты обрабатываются корректно

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

Ошибки обращения к полю или пустые строки там, где раньше были значения

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

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

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

Почему проверка срабатывает, хотя в свойствах реквизита стоит «Не проверять»?

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

Чем опасна установка ОбменДанными.Загрузка = Истина?

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

Как отключить проверку только для одного пользователя или роли?

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

Как убрать проверку заполнения в расширении конфигурации?

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

Отключится ли проверка при записи через СоздатьЭлемент() и Записать()?

Нет, программная запись проходит те же проверки, что и интерактивная: свойства реквизитов и обработчик ОбработкаПроверкиЗаполнения отрабатывают в полном объёме. Чтобы обойти их из кода, установите ОбменДанными.Загрузка = Истина перед вызовом Записать() либо доработайте обработчик проверки.

Итог

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

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