В 1С:Предприятие обязательные поля — это ключевой инструмент контроля качества данных. Без них пользователи могут пропускать критически важную информацию, что приводит к ошибкам в отчётах, некорректным расчётам или сбоям в бизнес-процессах. Например, отсутствие обязательного поля Контрагент в документе РеализацияТоваровУслуг сделает невозможным формирование счёта-фактуры.

В этой статье разберём три основных способа сделать поле обязательным: через конфигуратор (без программирования), с помощью встроенного языка 1С (для гибких условий), и через управляемые формы (для современных интерфейсов). Также рассмотрим типовые ошибки, которые приводят к тому, что обязательное поле всё равно пропускается, и как их избежать.

Материал актуален для платформы 1С:Предприятие 8.3 (включая последние релизы 2026 года) и подходит для большинства типовых конфигураций: Бухгалтерия 3.0, Управление торговлей 11, Зарплата и управление персоналом 3.1 и других. Если вы работаете со старой версией (8.2 или ниже), некоторые методы могут не поддерживаться — проверяйте синтаксис в документации вашей платформы.

1. Способ: Настройка обязательности через конфигуратор (без кода)

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

Чтобы сделать поле обязательным:

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

Сделали резервную копию базы данных|

Закрыли все сеансы пользователей|

Проверили, что поле не используется в обработках без проверки на Заполнено()|

Убедились, что обязательность не конфликтует с бизнес-логикой (например, не блокирует создание черновиков)

-->

Этот способ работает для обычных форм (тонкий клиент, толстый клиент) и управляемых форм, но имеет ограничения:

  • 🔹 Нельзя задать условную обязательность (например, "поле обязательно только при определённом статусе документа").
  • 🔹 Не работает для полей, которые заполняются программно (например, через обработку ПриЗаписи).
  • 🔹 В некоторых конфигурациях (например, БП 3.0) может конфликтовать с типовыми механизмами проверки.
💡

Если после установки флага Обязательное поле всё равно не контролируется, проверьте, не переопределена ли логика проверки в модуле объекта (например, в процедуре ПередЗаписью()).

2. Способ: Программная проверка в модуле объекта

Для гибкой настройки обязательности (например, когда поле должно быть заполнено только при определённых условиях) используется встроенный язык 1С. Код размещается в модуле объекта (документа, справочника) или в модуле формы.

Основные события для проверки:

  • 📝 ПередЗаписью() — срабатывает перед сохранением объекта. Подходит для большинства случаев.
  • 📝 ОбработкаПроверкиЗаполнения() — специальное событие для проверки заполнения (работает в управляемых формах).
  • 📝 ПриИзменении() — для динамической проверки при изменении других полей.

Пример кода для документа ЗаказПокупателя, где поле Контрагент должно быть обязательным только если сумма заказа превышает 10 000 рублей:

Процедура ПередЗаписью(Отказ, РежимЗаписи)

Если СуммаДокумента() > 10000 И НЕ ЗначениеЗаполнено(Контрагент) Тогда

Сообщить("Для заказов на сумму более 10 000 руб. необходимо указать контрагента!");

Отказ = Истина;

КонецЕсли;

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

Для управляемых форм лучше использовать событие ОбработкаПроверкиЗаполнения:

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

Если Элемент.Имя = "Контрагент" И СуммаДокумента() > 10000 Тогда

Если НЕ ЗначениеЗаполнено(Значение) Тогда

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Укажите контрагента для крупного заказа!";

Результат = Ложь;

КонецЕсли;

КонецЕсли;

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

Что будет, если не использовать Отказ = Истина?

Без этой строки код выполнится, но документ всё равно запишется в базу. Флаг Отказ — это единственный способ прервать запись из процедуры ПередЗаписью(). В управляемых формах для этого служит возвращаемое значение Результат = Ложь.

Преимущества программного метода:

  • 🔧 Гибкость: можно задавать сложные условия (например, обязательность в зависимости от ролей пользователей).
  • 🔧 Работает для динамических полей, которые не существуют в конфигураторе (например, реквизиты табличной части).
  • 🔧 Позволяет выводить кастомизированные сообщения об ошибках.
💡

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

3. Способ: Настройка обязательности в управляемых формах

В управляемых формах (используемых в веб-клиенте и тонком клиенте) обязательность полей настраивается через свойства элементов формы. Этот метод удобен, если нужно:

  • 🎨 Визуально выделить обязательные поля (например, красным цветом).
  • 🎨 Динамически менять обязательность в зависимости от действий пользователя.
  • 🎨 Использовать встроенные механизмы проверки без написания кода.

Инструкция по настройке:

  1. Откройте форму объекта в конфигураторе (например, форму документа ПоступлениеТоваров).
  2. Выберите элемент формы (например, поле Поставщик).
  3. В палитре свойств найдите параметр Обязательное и установите его в Истина.
  4. Для динамической обязательности используйте свойство УсловиеОбязательности (например, "СуммаДокумента > 1000").
  5. Сохраните форму и обновите конфигурацию.

Пример условия для поля Договор, которое должно быть обязательным только если выбран определённый Контрагент:

УсловиеОбязательности = "Контрагент.Наименование = ""ООО Розница"""

Для визуального выделения обязательных полей добавьте в форму декорацию:

  • 🔴 Используйте свойство ЦветТекста (например, Красный).
  • 🔴 Добавьте подсказку через свойство Подсказка (например, "Обязательное поле").
  • 🔴 Включите свойство ПоказыватьПодсказкуОбязательности.

Через конфигуратор (без кода)|

Программно в модуле объекта|

В управляемых формах|

Комбинация нескольких методов-->

4. Типовые ошибки и как их избежать

Даже опытные разработчики сталкиваются с проблемами при настройке обязательных полей. Вот наиболее частые ошибки и способы их решения:

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

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

💡

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

5. Особенности для разных объектов 1С

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

5.1. Обязательные поля в справочниках

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

Особенности:

  • 📌 Если справочник иерархический, обязательное поле Родитель может блокировать создание элементов верхнего уровня.
  • 📌 Для справочников с Автонумерацией поле Код нельзя сделать обязательным — оно заполняется автоматически.

5.2. Обязательные поля в документах

В документах (например, РеализацияТоваровУслуг или ПоступлениеТоваров) обязательные поля обычно привязаны к бизнес-логике. Например:

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

В многопрофильных базах (например, Управление торговлей 11) организация может выбираться по умолчанию из настроек пользователя. Если в базе только одна организация, поле часто скрывают или заполняют автоматически.

5.3. Обязательные поля в регистрах

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

Для регистров обязательность настраивается:

  • 📊 Через свойство Обязательное в конфигураторе (для измерений).
  • 📊 Программно в модуле регистра (для ресурсов с условной обязательностью).

6. Как сделать поле обязательным для определённых ролей

Иногда обязательные поля должны работать только для определённых пользователей или ролей. Например, менеджеры должны обязательно заполнять поле Комментарий в заказе, а администраторы — нет.

Для этого используйте комбинацию:

  1. Проверку текущей роли в коде:
    Если НЕ Пользователь.Роли.Найти("Администратор") Тогда
    

    Если НЕ ЗначениеЗаполнено(Комментарий) Тогда

    Сообщить("Менеджеры должны заполнить комментарий!");

    Отказ = Истина;

    КонецЕсли;

    КонецЕсли;

  2. Условное свойство Обязательное в управляемых формах:
    Обязательное = "НЕ Пользователь.Роли.Содержит("Администратор")"

Для проверки ролей можно использовать:

  • 👤 Пользователь.Роли — коллекция ролей текущего пользователя.
  • 👤 РолиДоступа.Проверка() — для сложных условий (например, проверка прав на объект).
  • 👤 ГлобальныйКонтекст.ТекущийПользователь() — для получения дополнительных атрибутов.
💡

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

7. Динамическая обязательность: когда поле становится обязательным при изменении других данных

Иногда обязательность поля зависит от значений других реквизитов. Например:

  • 🔄 Поле Договор становится обязательным, если выбран определённый Контрагент.
  • 🔄 Поле СерияНомера обязательно только для Номенклатуры с типом ПодакцизныйТовар.
  • 🔄 Поле СпособОплаты обязательно, если сумма заказа превышает лимит.

Для таких случаев используйте:

  1. Событие ПриИзменении() — для управляемых форм:
    Процедура КонтрагентПриИзменении(Элемент)
    

    Если Контрагент.Наименование = "ООО Оптовик" Тогда

    ЭлементыФормы.Договор.Обязательное = Истина;

    Иначе

    ЭлементыФормы.Договор.Обязательное = Ложь;

    КонецЕсли;

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

  2. Условное оформление — для визуального выделения:
    ЭлементыФормы.СерияНомера.ЦветТекста = ?
    

    (ТипНоменклатуры = Перечисление.ТипыНоменклатуры.ПодакцизныйТовар, Красный, Черный);

Для сложных условий можно использовать серверные функции, которые возвращают признак обязательности:

Функция ПолеДоговорОбязательно()

Возврат Контрагент.Наименование = "ООО Оптовик" И СуммаДокумента() > 5000;

КонецФункции

💡

Чтобы избежать мигания интерфейса при динамическом изменении обязательности, используйте свойство ОтложенноеОбновление для элементов формы.

8. Проверка обязательных полей при обмене данными

Если вы настраиваете обмен данными (например, через Универсальный формат обмена или REST API), обязательные поля могут стать источником ошибок. Типовые проблемы:

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

Решения:

  1. Настройте предупреждения вместо ошибок для обмена:
    Процедура ПередЗаписью(Отказ)
    

    Если НЕ ЗначениеЗаполнено(Контрагент) Тогда

    ЗаписатьВЛогОбмена("Отсутствует контрагент в документе " + Ссылка);

    // Не устанавливаем Отказ = Истина, чтобы не прерывать обмен

    КонецЕсли;

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

  2. Используйте значения по умолчанию для обязательных полей:
    Если НЕ ЗначениеЗаполнено(Склад) Тогда
    

    Склад = Константа.СкладПоУмолчанию;

    КонецЕсли;

  3. Синхронизируйте настройки обязательных полей между базами через распределённые информационные базы.
💡

Для отладки обменов используйте журнал регистрации (Администрирование → Журнал регистрации). Фильтруйте записи по типу ОбменДанными, чтобы найти ошибки заполнения.

⚠️ Внимание: Если вы используете типовые обработки обмена (например, для УТ 11 → БП 3.0), не редактируйте их напрямую. Создайте расширение или дополнительную обработку, чтобы добавить логику проверки обязательных полей. В противном случае ваши изменения сотрутся при обновлении конфигурации.

FAQ: Частые вопросы по обязательным полям в 1С

Можно ли сделать поле обязательным только для новых документов, но не для существующих?

Да, для этого в процедуре ПередЗаписью() добавьте проверку на ЭтотОбъект.ЭтоНовый():

Если ЭтотОбъект.ЭтоНовый() И НЕ ЗначениеЗаполнено(Контрагент) Тогда

Сообщить("Для нового документа укажите контрагента!");

Отказ = Истина;

КонецЕсли;

Почему обязательное поле в управляемой форме не работает в веб-клиенте?

В веб-клиенте некоторые свойства форм могут игнорироваться. Проверьте:

  • 🔹 Настройки совместимости формы (Свойства формы → Совместимость).
  • 🔹 Версию платформы (в веб-клиенте обязательно обновление до последнего релиза).
  • 🔹 Используйте программную проверку в ПередЗаписью() как резервный вариант.
Как сделать обязательным поле в табличной части документа?

Для табличных частей (например, Товары в документе РеализацияТоваровУслуг) используйте:

  1. Свойство Обязательное для колонки в конфигураторе.
  2. Программную проверку в цикле по строкам:
    Для Каждого Строка Из Товары Цикл
    

    Если НЕ ЗначениеЗаполнено(Строка.Номенклатура) Тогда

    Сообщить("Укажите номенклатуру для всех строк!");

    Отказ = Истина;

    КонецЕсли;

    КонецЦикла;

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

Если поле обязательное "из коробки" (например, Организация в Бухгалтерии 3.0), убрать его обязательность можно:

  • 🔹 Через расширение конфигурации (переопределите свойство Обязательное).
  • 🔹 Отключив проверку в модуле объекта (найдите процедуру, где устанавливается Отказ = Истина).
  • 🔹 Используя дополнительную обработку, которая заполняет поле автоматически.

Внимание: изменение типовых механизмов может привести к ошибкам при обновлении. Всегда тестируйте на копии базы!

Как сделать обязательным поле в мобильном приложении 1С?

В мобильном клиенте 1С:Предприятие не все свойства управляемых форм поддерживаются. Используйте:

  1. Программную проверку в ПередЗаписью() (работает на сервере).
  2. Настройку мобильного интерфейса через МобильноеПриложениеКлиентСервер.
  3. Дополнительные обработки для валидации на стороне клиента (JavaScript в мобильном приложении).

Пример кода для мобильного клиента:

Процедура ПередЗаписьюНаСервере(Отказ)

Если МобильноеПриложениеКлиентСервер.ТекущийКлиент() = ТипМобильногоКлиента.МобильноеПриложение Тогда

Если НЕ ЗначениеЗаполнено(Контрагент) Тогда

Сообщить("В мобильном приложении контрагент обязателен!");

Отказ = Истина;

КонецЕсли;

КонецЕсли;

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