Поле не заполнено: снимаем обязательность реквизита в 1С 8.3

· 9 мин

Содержание

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

Типичная ситуация: бухгалтер проводит документ, а 1С отвечает Поле "Склад" не заполнено, хотя склад для этой операции не нужен. Красное подчёркивание поля, сообщение и отказ в проведении — это три проявления одной и той же проверки. Ниже разобрано, где она живёт и как её снять, не сломав обновления.

Откуда берётся обязательность поля: ищем источник проверки

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

ИсточникКак узнатьЧем снимается
🔹 Свойство реквизита Проверка заполненияВ конфигураторе у реквизита стоит Выдавать ошибкуКонфигуратор или расширение
🔹 Код в модуле объектаОбработчик ОбработкаПроверкиЗаполнения добавляет реквизит или ставит Отказ = ИстинаПравка кода или расширение
🔹 Код в модуле формыОбработчик ОбработкаПроверкиЗаполненияНаСервере или проверки перед записьюПравка формы или расширение
🔹 Настройки учёта в режиме ПредприятиеПоле стало обязательным после включения какой-то функцииНастройкой программы, без конфигуратора

Быстрый способ диагностики:

  1. Скопируйте точный текст сообщения, например Поле "Склад" не заполнено.
  2. В конфигураторе откройте Правка → Глобальный поиск (Ctrl+Shift+F) и поищите имя реквизита или кусок текста сообщения.
  3. Если текст найден в модуле — проверка программная. Если не найден, а у реквизита стоит Выдавать ошибку — проверка платформенная, и сообщение формирует сама платформа.

Стандартное сообщение платформы всегда строится по шаблону «Поле “<синоним реквизита>” не заполнено». Если текст другой, например «Укажите склад отгрузки», почти наверняка это код разработчика.

Можно ли убрать обязательное поле в режиме Предприятие

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

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

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

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

Снимаем флаг обязательности в конфигураторе

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

  1. Сделайте выгрузку информационной базы: Администрирование → Выгрузить информационную базу в конфигураторе. Файл .dt — ваша страховка.
  2. Откройте конфигурацию: Конфигурация → Открыть конфигурацию.
  3. В дереве найдите объект: справочник, документ или регистр. Раскройте ветку Реквизиты и дважды щёлкните нужный реквизит.
  4. В палитре свойств найдите Проверка заполнения и выберите Не проверять.
  5. Сохраните и выполните Конфигурация → Обновить конфигурацию базы данных (F7).
  6. Пользователям, которые были в базе, нужно перезапустить 1С: изменения применяются к новым сеансам.

Стандартные реквизиты

У справочников и документов есть реквизиты, которых нет в ветке Реквизиты: Наименование, Код, Владелец, Родитель. Их свойства открываются кнопкой Стандартные реквизиты в окне редактирования объекта (закладка Данные). У каждого — та же Проверка заполнения.

Что платформа считает «незаполненным»

Флаг Выдавать ошибку проверяет только одно: значение реквизита пустое. Что такое «пусто», зависит от типа:

Тип реквизитаПустое значение
🔹 СтрокаПустая строка или строка из одних пробелов
🔹 ЧислоНоль
🔹 ДатаПустая дата 01.01.0001
🔹 Ссылка на справочник или документПустая ссылка

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

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

Если конфигурация на поддержке

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

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

Снимаем обязательность через расширение конфигурации

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

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

Порядок действий:

  1. Конфигурация → Расширения конфигурации → кнопка Добавить. Задайте имя, например НеобязательныеПоля, назначение — «Адаптация».
  2. Откройте конфигурацию расширения. В основной конфигурации (левое дерево) найдите документ, щёлкните правой кнопкой и выберите Добавить в расширение.
  3. В расширении откройте модуль объекта этого документа.
  4. Если в типовом модуле уже есть ОбработкаПроверкиЗаполнения, щёлкните по нему в основном модуле и выберите Добавить в расширение → вариант Вызывать после. Если обработчика нет, создайте его в расширении через свойства объекта.
  5. Вставьте код ниже, сохраните расширение и обновите конфигурацию базы данных.
&После("ОбработкаПроверкиЗаполнения")
Процедура НеобязательныеПоля_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)

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

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

Аннотация &После выбрана намеренно: сначала отработает типовой код и добавит в массив свои реквизиты, а затем расширение уберёт лишний. С &Перед типовой код может вернуть реквизит обратно.

Проверку можно снимать по условию. Например, не требовать склад только для определённого вида операции: оберните удаление в Если ВидОперации = ... Тогда. Это честнее, чем отключать проверку для всех.

Расширение не поможет, если типовой код сам выдаёт сообщение и ставит Отказ = Истина. Такие места придётся перехватывать аннотацией &Вместо или &ИзменениеИКонтроль в конкретной процедуре. Это уже работа программиста: после обновления типовой процедуры перехват нужно проверять.

Программное отключение проверки заполнения в коде

В своей конфигурации проще поправить сам модуль объекта. Тот же приём с массивом работает и без расширения.

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

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

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

Здесь ВидыОпераций и Услуги — условные имена для примера, подставьте свои.

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

Отсюда два вывода:

  • 🧩 если обработка загружает документы кодом и они записываются без склада, это нормально — проверка просто не вызывалась;
  • 🧩 если ваш код вызывает ПроверитьЗаполнение() перед записью, именно он и выдаёт ошибку, и снимать нужно его или условие вокруг него.

Красное подчёркивание на форме

Подчёркивание пустого поля — визуальная подсказка. За него отвечает свойство элемента формы Автоотметка незаполненного. Если в реквизите проверку уже сняли, а подчёркивание осталось, откройте форму, выделите поле и поставьте этому свойству Нет. Само по себе подчёркивание ничего не блокирует.

Обязательные поля в табличной части

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

Что проверяетсяГде флагЧто видит пользователь
🔸 Табличная часть целикомПроверка заполнения у самой табличной частиДокумент нельзя записать без строк
🔸 Колонка в каждой строкеПроверка заполнения у реквизита табличной частиСообщение по каждой строке с пустой колонкой

В массиве ПроверяемыеРеквизиты колонка записывается через точку: "Товары.Количество". Удаляется она так же, как обычный реквизит.

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

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

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

	Для Каждого Строка Из Товары Цикл
		Если Не Строка.ЭтоУслуга И Строка.Количество = 0 Тогда
			НомерСтроки = Формат(Строка.НомерСтроки, "ЧГ=0");
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = СтрШаблон("Не указано количество в строке %1", НомерСтроки);
			Сообщение.Поле = СтрШаблон("Товары[%1].Количество",
				Формат(Строка.НомерСтроки - 1, "ЧН=0; ЧГ=0"));
			Сообщение.УстановитьДанные(ЭтотОбъект);
			Сообщение.Сообщить();
			Отказ = Истина;
		КонецЕсли;
	КонецЦикла;

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

ЭтоУслуга — пример реквизита строки, по которому решается, нужна ли проверка. Индекс в поле Товары[N] считается с нуля, поэтому из номера строки вычитаем единицу. Формат ЧН=0 нужен, чтобы для первой строки получился 0, а не пустая строка. Благодаря полю Сообщение.Поле при щелчке по сообщению курсор встанет в нужную ячейку.

Для числовых колонок «пусто» — это ноль. Если снять проверку с количества, документ запишется с нулём в строке, и движения по регистрам могут получиться нулевыми. Снимайте проверку только там, где ноль действительно допустим.

Поле всё равно обязательное: ошибки после правки

Флаг сняли, а сообщение осталось — самая частая жалоба. Разберите симптом по таблице.

Диагностика: выберите симптом

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

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

Сохранится ли снятая обязательность после обновления типовой конфигурации?
Если правка сделана в расширении — да, расширение не затрагивается обновлением. Если объект меняли напрямую, правку надо проверять при каждом обновлении.
Можно ли сделать поле обязательным для одних пользователей и необязательным для других?
Платформенный флаг так не умеет. В обработчике проверки можно удалить реквизит из массива по условию, например по роли: РольДоступна(“ИмяРоли”).
Почему поле не подчёркнуто красным, но документ не записывается?
Подчёркивание и проверка — разные свойства. Подчёркивание может быть выключено на форме, а проверка в реквизите или в коде остаётся.
Нужен ли монопольный доступ, чтобы убрать флаг?
Изменение свойства реквизита не меняет структуру таблиц, но для применения конфигурации к базе платформа может попросить завершить сеансы. Планируйте обновление на время, когда пользователи не работают.
Повлияет ли снятие обязательности на уже введённые документы?
Нет, старые документы не меняются. Новые и перезаписанные документы перестанут требовать заполнения поля.