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

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

Как программно отключить проверку заполнения в 1С

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

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

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

Важно понимать: отключение проверки заполнения не отменяет контроль на уровне СУБД (NOT NULL-поля) и не отключает проверки, прописанные вручную в модуле объекта. Поэтому перед записью без проверки стоит убедиться, что обязательные для бизнес-логики данные всё же будут заполнены программно.

Способы отключения проверки заполнения

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

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

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

ДополнительныеСвойства.ПропуститьПроверкуЗаполнения

Разовая запись без проверки; работает в типовых конфигурациях на БСП, не требует изменения конфигурации

Свойство ПроверкаЗаполнения у данных формы

Отключение проверки в конкретной форме; не влияет на серверную запись вне формы

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

Гибкое управление по условиям; требует доработки модуля объекта и расширения или изменения конфигурации

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

Постоянное отключение для всех сценариев; затрагивает интерактивную работу пользователей

Отключение через ДополнительныеСвойства при записи

Наиболее распространённый способ для типовых конфигураций — передать признак пропуска проверки через коллекцию ДополнительныеСвойства объекта перед вызовом метода Записать(). Механизмы Библиотеки стандартных подсистем анализируют это свойство и пропускают стандартную проверку заполнения.

ДокументОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

ДокументОбъект.Дата = ТекущаяДатаСеанса();

// ... заполнение остальных реквизитов

ДокументОбъект.ДополнительныеСвойства.Вставить("ПропуститьПроверкуЗаполнения", Истина);

ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

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

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

Запись в режиме загрузки данных

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

СправочникОбъект = Справочники.Номенклатура.СоздатьЭлемент();

СправочникОбъект.Наименование = "Загруженная позиция";

СправочникОбъект.ОбменДанными.Загрузка = Истина;

СправочникОбъект.Записать();

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

Отключение проверки в форме и в обработчике объекта

Свойство ПроверкаЗаполнения у данных формы

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

&НаКлиенте

Процедура ПриОткрытии(Отказ)

Объект.ПроверкаЗаполнения = Ложь; // для реквизита формы типа ДанныеФормыСтруктура

КонецПроцедуры

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

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

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

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

Если ДополнительныеСвойства.Свойство("ПропуститьПроверкуЗаполнения")

И ДополнительныеСвойства.ПропуститьПроверкуЗаполнения Тогда

ПроверяемыеРеквизиты.Очистить();

Возврат;

КонецЕсли;

// Точечное исключение реквизита

Индекс = ПроверяемыеРеквизиты.Найти("Комментарий");

Если Индекс <> Неопределено Тогда

ПроверяемыеРеквизиты.Удалить(Индекс);

КонецЕсли;

КонецПроцедуры

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

Отключение проверки для реквизита в конфигураторе

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

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

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

Проверка результата и типичные ошибки

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

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

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

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

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

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

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

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

Появляется сообщение «Поле ... не заполнено» — проверка всё ещё активна

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

Поведение соответствует задуманному сценарию

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

Пользователи массово сохраняют пустые документы — проверка отключена слишком широко

Отчёты и обмены по записанным данным
Норма

Данные корректно выводятся и выгружаются

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

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

Когда какой способ выбрать

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

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

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

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

Итог

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

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

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

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

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

Почему ПропуститьПроверкуЗаполнения не работает в моей конфигурации?

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

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

В обработчике ОбработкаПроверкиЗаполнения удалите из массива ПроверяемыеРеквизиты имя табличной части целиком или конкретные реквизиты вида «Товары.Номенклатура». Стандартная проверка этих строк выполняться не будет, но при необходимости добавьте собственный контроль кодом в том же обработчике.

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

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

Можно ли отключить проверку заполнения без изменения конфигурации?

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

Чем отличается ОтметкаНезаполненного от проверки заполнения?

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