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