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