Разработка и Конфигурация · 8 мин
Как сделать обязательное поле для заполнения в 1С
Способы сделать поле обязательным в 1С: настройка в конфигураторе, проверка заполнения, типовые механизмы и типичные ошибки при доработке.
Обязательное поле — один из самых частых запросов при доработке 1С: бухгалтер забывает указать договор в документе, менеджер не заполняет склад, и потом отчёты «разваливаются». В платформе 1С:Предприятие есть несколько механизмов контроля заполнения — от простого свойства реквизита до программной проверки в модуле объекта. Какой способ выбрать, зависит от того, работаете ли вы в типовой конфигурации на поддержке или в собственной разработке.
Важно понимать разницу между двумя уровнями контроля. Первый — визуальный: поле подчёркивается красным, и пользователь видит, что его нужно заполнить. Второй — блокирующий: система не даёт записать или провести объект, пока обязательные данные не введены. Правильно настроенная обязательность обычно сочетает оба уровня: подсказку на форме и жёсткую проверку при записи.
Ниже разобраны основные способы: свойство «Проверка заполнения» в конфигураторе, обработчик ОбработкаПроверкиЗаполнения, доработка типовых конфигураций через расширения, а также типичные ошибки, из-за которых контроль не срабатывает или, наоборот, ломает обмены данными.
Способ 1. Свойство «Проверка заполнения» у реквизита
Это штатный и самый быстрый метод. Откройте конфигуратор, найдите нужный объект (справочник, документ), выделите реквизит и в палитре свойств установите параметр Проверка заполнения в значение «Выдавать ошибку». После обновления конфигурации базы данных платформа сама будет подчёркивать пустое поле красным и блокировать запись объекта.
У свойства есть несколько значений: «Не проверять», «Выдавать ошибку» и «Выводить предупреждение». Вариант с предупреждением не блокирует запись — система лишь сообщает пользователю о пустом поле, а решение остаётся за ним. Это удобно для полей, которые желательны, но не критичны: например, комментарий или дополнительный телефон контрагента.
Учтите ограничение: стандартная проверка срабатывает «в лоб» — поле либо заполнено, либо нет. Если обязательность зависит от условий (например, договор обязателен только при виде операции «Продажа»), одного свойства недостаточно, понадобится программная проверка.
- 1Откройте конфигуратор и найдите объект (документ или справочник)
- 2Выделите нужный реквизит в дереве объекта
- 3В палитре свойств найдите «Проверка заполнения»
- 4Установите значение «Выдавать ошибку»
- 5Обновите конфигурацию базы данных (F7)
- 6Откройте форму в режиме предприятия и проверьте: пустое поле подчёркнуто, запись блокируется
Способ 2. Программная проверка в обработчике ОбработкаПроверкиЗаполнения
Когда обязательность зависит от условий, используется обработчик ОбработкаПроверкиЗаполнения в модуле объекта. Внутри него вы сами решаете, какие реквизиты проверять, и при нарушении добавляете сообщение об ошибке и устанавливаете параметр Отказ = Истина.
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ВидОперации = Перечисления.ВидыОпераций.Продажа
И Не ЗначениеЗаполнено(Договор) Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Не заполнен договор'"), ЭтотОбъект, "Договор", , Отказ);
КонецЕсли;
КонецПроцедурыОбратите внимание на параметр ПроверяемыеРеквизиты — это массив реквизитов, которые платформа проверит стандартно. Если вы реализуете проверку сами, имеет смысл удалить соответствующий реквизит из этого массива, иначе пользователь получит двойное сообщение: и от платформы, и от вашего кода.
Также в типовых конфигурациях для вывода сообщений принято использовать ОбщегоНазначения.СообщитьПользователю() вместо простого Сообщить() — так сообщение привязывается к полю формы, и пользователь видит его рядом с незаполненным реквизитом.
Способ 3. Доработка типовой конфигурации через расширение
Если конфигурация типовая и стоит на поддержке, прямое изменение объектов приведёт к проблемам при обновлении. Правильный путь — расширение конфигурации. Через расширение можно добавить обработчик ОбработкаПроверкиЗаполнения с директивой &После или &Вместо и реализовать свою логику проверки, не трогая типовой код.
Создайте расширение (Конфигурация → Расширения конфигурации), заимствуйте нужный объект и добавьте обработчик в модуль расширения. Важный нюанс: изменить свойство «Проверка заполнения» заимствованного реквизита через расширение можно не во всех версиях платформы — надёжнее использовать программную проверку в обработчике.
Обязательные поля в типовых без доработки
Часть задач решается вообще без конфигуратора. В ряде типовых конфигураций есть механизмы настройки обязательности: например, в некоторых решениях доступны «Дополнительные реквизиты и сведения», где для добавленного реквизита можно отметить обязательность заполнения. Это работает для справочников и документов, поддерживающих механизм дополнительных реквизитов.
Путь обычно такой: Администрирование → Общие настройки → Дополнительные реквизиты и сведения. Создайте дополнительный реквизит для нужного объекта и отметьте его как обязательный. Ограничение очевидно: так можно контролировать только дополнительные реквизиты, но не штатные поля вроде «Склад» или «Договор».
Сравнение способов
Подходит для безусловной обязательности в собственной конфигурации; не работает с условиями
Гибкие условия и свои тексты ошибок; требует написания кода
Единственный безопасный путь для типовой на поддержке; чуть сложнее в настройке
Без программирования, но только для доп. реквизитов, не для штатных полей
Проверка результата и типичные ошибки
После настройки обязательно проверьте три сценария: интерактивная запись через форму, программная запись (обработки, обмены) и проведение документа. Частая ситуация: через форму всё работает, а обмен с сайтом или загрузка из Excel падает с ошибками, потому что обязательное поле в загружаемых данных пустое.
Если обязательность вводится для объекта, по которому уже накоплены данные, сначала выполните анализ: запросом найдите объекты с пустым значением и заполните их. Иначе пользователи столкнутся с невозможностью перепровести старые документы, а обмены начнут отклонять объекты.
Как проверить результат
Система выдаёт ошибку и блокирует запись, поле подчёркнуто
Документ записывается без заполнения — проверка не сработала
Объекты с заполненным полем проходят, пустые отклоняются с понятной ошибкой
Обмен падает целиком или молча пропускает документы
Документы с заполненным полем проводятся штатно
Массовые ошибки на старых данных — нужно предварительное заполнение
FAQ
Можно ли сделать поле обязательным только для определённых пользователей?
Да, но только программно. В обработчике ОбработкаПроверкиЗаполнения проверьте роль или имя текущего пользователя через ПользователиИнформационнойБазы и применяйте проверку условно. Учтите, что такая логика усложняет поддержку — лучше привязывать условие к данным документа, а не к людям.
Почему поле подчёркнуто красным, но документ всё равно записывается?
Красное подчёркивание — это лишь визуальная подсказка при «Проверка заполнения». Если запись проходит, вероятно, стоит значение «Выводить предупреждение» вместо «Выдавать ошибку», либо проверка отключена в коде через ПроверяемыеРеквизиты.Удалить().
Как сделать обязательной колонку табличной части, например «Сумма» в товарах?
Свойство «Проверка заполнения» работает и для реквизитов табличных частей — установите его у нужной колонки в конфигураторе. Для условной проверки перебирайте строки табличной части в ОбработкаПроверкиЗаполнения и сообщайте об ошибке с указанием номера строки.
Сломается ли обмен с сайтом, если сделать поле обязательным?
Может сломаться, если обмен создаёт объекты без этого поля. Перед включением жёсткой проверки проверьте формат выгрузки и при необходимости доработайте правила обмена или сделайте проверку мягче — с предупреждением вместо отказа.
Можно ли настроить обязательность без доступа к конфигуратору?
Частично: через механизм дополнительных реквизитов и сведений в режиме предприятия, если конфигурация его поддерживает. Штатные реквизиты документов и справочников без конфигуратора или расширения сделать обязательными нельзя.
Что важно запомнить
Для безусловной обязательности используйте свойство «Проверка заполнения», для условной — обработчик ОбработкаПроверкиЗаполнения, для типовых конфигураций — расширение. Перед включением жёсткой проверки заполните пустые значения в существующих данных и проверьте обмены.