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