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

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

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

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

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

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

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

Способ 1. Свойство «Проверка заполнения» у реквизита

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

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

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

Как включить обязательность реквизита
  1. 1
    Откройте конфигуратор и найдите объект (документ или справочник)
  2. 2
    Выделите нужный реквизит в дереве объекта
  3. 3
    В палитре свойств найдите «Проверка заполнения»
  4. 4
    Установите значение «Выдавать ошибку»
  5. 5
    Обновите конфигурацию базы данных (F7)
  6. 6
    Откройте форму в режиме предприятия и проверьте: пустое поле подчёркнуто, запись блокируется

Способ 2. Программная проверка в обработчике ОбработкаПроверкиЗаполнения

Когда обязательность зависит от условий, используется обработчик ОбработкаПроверкиЗаполнения в модуле объекта. Внутри него вы сами решаете, какие реквизиты проверять, и при нарушении добавляете сообщение об ошибке и устанавливаете параметр Отказ = Истина.

bsl
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    Если ВидОперации = Перечисления.ВидыОпераций.Продажа
        И Не ЗначениеЗаполнено(Договор) Тогда
        ОбщегоНазначения.СообщитьПользователю(
            НСтр("ru = 'Не заполнен договор'"), ЭтотОбъект, "Договор", , Отказ);
    КонецЕсли;
КонецПроцедуры

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

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

Способ 3. Доработка типовой конфигурации через расширение

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

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

Обязательные поля в типовых без доработки

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

Путь обычно такой: Администрирование → Общие настройки → Дополнительные реквизиты и сведения. Создайте дополнительный реквизит для нужного объекта и отметьте его как обязательный. Ограничение очевидно: так можно контролировать только дополнительные реквизиты, но не штатные поля вроде «Склад» или «Договор».

Сравнение способов

Свойство «Проверка заполнения»

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

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

Гибкие условия и свои тексты ошибок; требует написания кода

Расширение конфигурации

Единственный безопасный путь для типовой на поддержке; чуть сложнее в настройке

Дополнительные реквизиты

Без программирования, но только для доп. реквизитов, не для штатных полей

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

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

Типичные ошибки
01
Включили обязательность, но в базе уже есть объекты с пустым полем — их нельзя перепровести без заполнения; сначала заполните данные обработкой
02
Проверка только в форме (ПриЗаписи на клиенте) — программная запись обходит её; проверяйте в модуле объекта
03
Двойные сообщения: не удалили реквизит из массива ПроверяемыеРеквизиты при собственной проверке
04
Сняли конфигурацию с поддержки вместо расширения — сломали обновления
05
Забыли про обмены и фоновые загрузки: жёсткая проверка блокирует обмен данными

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

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

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

Запись через форму с пустым полем
Норма

Система выдаёт ошибку и блокирует запись, поле подчёркнуто

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

Документ записывается без заполнения — проверка не сработала

Обмен данными / загрузка из файла
Норма

Объекты с заполненным полем проходят, пустые отклоняются с понятной ошибкой

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

Обмен падает целиком или молча пропускает документы

Перепроведение старых документов
Норма

Документы с заполненным полем проводятся штатно

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

Массовые ошибки на старых данных — нужно предварительное заполнение

FAQ

Можно ли сделать поле обязательным только для определённых пользователей?

Да, но только программно. В обработчике ОбработкаПроверкиЗаполнения проверьте роль или имя текущего пользователя через ПользователиИнформационнойБазы и применяйте проверку условно. Учтите, что такая логика усложняет поддержку — лучше привязывать условие к данным документа, а не к людям.

Почему поле подчёркнуто красным, но документ всё равно записывается?

Красное подчёркивание — это лишь визуальная подсказка при «Проверка заполнения». Если запись проходит, вероятно, стоит значение «Выводить предупреждение» вместо «Выдавать ошибку», либо проверка отключена в коде через ПроверяемыеРеквизиты.Удалить().

Как сделать обязательной колонку табличной части, например «Сумма» в товарах?

Свойство «Проверка заполнения» работает и для реквизитов табличных частей — установите его у нужной колонки в конфигураторе. Для условной проверки перебирайте строки табличной части в ОбработкаПроверкиЗаполнения и сообщайте об ошибке с указанием номера строки.

Сломается ли обмен с сайтом, если сделать поле обязательным?

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

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

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

Итог

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

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