Скрытие полей и реквизитов формы в 1С:Предприятии 8.3

· 8 мин

Содержание

Скрыть поле в 1С 8.3 можно четырьмя способами: снять флажок Видимость в редакторе формы, присвоить Элементы.ИмяПоля.Видимость = Ложь в коде, задать условие в условном оформлении или убрать реквизит из функциональной опции либо из прав роли. Первый способ прячет поле всегда, остальные три — по данным, настройке или пользователю.

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

Речь про управляемые формы платформы 8.3 с интерфейсом «Такси». Всё, что касается редактора формы и модуля, делается в Конфигураторе; часть настроек пользователь меняет сам в режиме 1С:Предприятие.

Свойство Видимость в редакторе формы

Самый простой вариант — выключить поле раз и навсегда. Откройте форму в Конфигураторе, выделите нужный элемент в дереве элементов (левая верхняя панель редактора формы) и в палитре свойств снимите флажок Видимость.

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

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

Группа на форме скрывает всё своё содержимое. Если спрятать группу, поля внутри неё не покажутся, даже если у каждого Видимость = Истина. Проверяйте родительскую группу, когда поле «не хочет» появляться.

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

Как скрыть поле программно из модуля формы

Когда видимость зависит от значения другого реквизита, управляйте ей из кода. Обращение идёт через коллекцию Элементы по имени элемента формы (не реквизита объекта).

Начальное состояние задают в обработчике ПриСозданииНаСервере — так поле появится в правильном виде ещё до открытия формы:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Элементы.Комментарий.Видимость = Ложь;
КонецПроцедуры

Чтобы поле реагировало на действия пользователя, пересчитывайте видимость в обработчике изменения связанного реквизита. Пример: поле «Контрагент» показываем только для прихода.

&НаКлиенте
Процедура ВидОперацииПриИзменении(Элемент)
    Элементы.Контрагент.Видимость = (Объект.ВидОперации = "Приход");
КонецПроцедуры

Чтобы не дублировать логику, вынесите пересчёт в отдельную процедуру и вызывайте её и из ПриСозданииНаСервере, и из обработчика изменения. Тогда поле ведёт себя одинаково при открытии и при редактировании.

Устанавливать видимость только в клиентском ПриОткрытии — частая причина мигания формы: поле сначала рисуется, потом прячется. Начальное состояние задавайте на сервере при создании.

Если элемент собран из нескольких полей (например, поле ввода с кнопкой выбора), прячьте именно элемент формы, а не реквизит объекта — реквизит в коллекции Элементы может отсутствовать.

Условное оформление: скрывать поле по условию без кода

Условное оформление решает ту же задачу, что и код, но настраивается мышкой и хранится вместе с формой. Подходит, когда условие простое — сравнение реквизита со значением.

В Конфигураторе откройте форму, вызовите команду Условное оформление (она в командной панели редактора формы либо в меню Ещё). Добавьте строку и заполните три колонки:

  1. Оформление — выберите свойство Видимость и установите значение Нет.
  2. Условие — задайте отбор: например, ВидОперации Равно Расход.
  3. Оформляемые поля — укажите, к каким элементам формы применить скрытие.

Пока условие выполняется, поле скрыто; как только реквизит меняется — появляется. Пересчёт идёт автоматически, писать обработчик не нужно.

Для списков (формы списка, динамические списки) условное оформление пользователь настраивает сам: Ещё → Настроить список → вкладка Условное оформление. Так можно, к примеру, прятать значение в колонке по строкам, не трогая конфигурацию.

Условное оформление и код — взаимозаменяемые инструменты. Если условие завязано на расчёты, запросы или несколько реквизитов сразу, берите код. Для одного простого сравнения удобнее оформление.

Какой способ скрытия поля выбрать?

Видимость, доступность и только просмотр — в чём разница

Три свойства часто путают, а ведут они себя по-разному. Разберём на таблице.

СвойствоЧто делаетКогда применять
ВидимостьПоле исчезает с формы полностьюРеквизит не относится к этому сценарию
ДоступностьПоле видно, но «серое», ввод заблокированНужно показать значение, но запретить правку
ТолькоПросмотрПоле видно и активно на вид, но не редактируетсяИнформационное отображение без блокировки навигации

Видимость = Ложь убирает элемент из интерфейса — пользователь не узнает, что он есть. Доступность = Ложь оставляет поле на форме в неактивном виде: значение читается, но изменить нельзя. ТолькоПросмотр запрещает редактирование, при этом по полю можно перемещаться и копировать текст.

Выбирайте по задаче. Если поле не имеет смысла в текущем контексте — скрывайте. Если значение важно показать, но менять его нельзя — используйте доступность или только просмотр. Скрытое поле нельзя заполнить программно через интерфейс, но присвоить значение реквизиту в коде по-прежнему можно.

Свойство ТолькоПросмотр есть и у формы целиком — это удобно для режима просмотра документа без права правки.

Скрытие колонок в табличной части

Колонка табличной части — такой же элемент формы, как поле ввода, и управляется теми же свойствами. В дереве элементов колонка лежит внутри элемента-таблицы.

Чтобы убрать колонку навсегда, снимите у неё флажок Видимость в Конфигураторе. Для управления из кода обращайтесь по имени колонки:

Элементы.ТоварыКоличествоМест.Видимость = Ложь;

Имя колонки обычно складывается из имени таблицы и имени реквизита табличной части. Точное имя смотрите в дереве элементов формы.

Пользователь может прятать колонки сам, не меняя конфигурацию: встаньте на таблицу, вызовите Ещё → Изменить форму, снимите флажки у ненужных колонок. Настройка сохранится для этого пользователя. Если такое поведение нежелательно, у колонки снимают ПользовательскаяВидимость.

Скрытая колонка продолжает участвовать в расчётах и итогах. Если по ней считается сумма внизу таблицы, итог останется верным, даже когда колонку не видно.

Для динамических списков колонки настраиваются через Ещё → Настроить список → вкладка Поля (или «Изменить форму», в зависимости от формы). Там же задаётся порядок и группировка.

Роли, права и функциональные опции

Иногда поле должно быть скрыто не по данным, а по тому, кто вошёл в базу. Для этого есть два штатных механизма, и оба прячут поле автоматически.

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

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

Права роли на реквизит. У реквизита объекта есть права Просмотр и Редактирование в разрезе ролей. Если роль пользователя не даёт права Просмотр на реквизит, платформа скрывает соответствующее поле автоматически — отдельный код не нужен. Права настраиваются в Конфигураторе в объекте «Роль».

Отличие от ограничения доступа на уровне записей (RLS): RLS прячет строки и объекты целиком по условию, а не отдельные поля формы. Для скрытия именно поля по пользователю берите права на реквизит или функциональную опцию.

Проверяйте связку «роль + форма». Если роль закрывает просмотр реквизита, а на форме этот реквизит обязателен к заполнению, пользователь получит ошибку проверки заполнения при записи. Для такого реквизита либо снимайте обязательность, либо не выводите его на форму вовсе.

Частые ошибки при управлении видимостью

Собрал проблемы, из-за которых поле ведёт себя не так, как задумано, и их причины.

Диагностика: выберите симптом

Ещё одна тонкость: не смешивайте способы на одном поле. Если видимость задаёт и условное оформление, и код, они будут перебивать друг друга, и предсказать результат сложно. Для каждого элемента выберите один механизм.

Частые вопросы

Чем отличается Видимость от ПользовательскаяВидимость?
Видимость задаёт разработчик, она действует для всех. ПользовательскаяВидимость позволяет самому пользователю включать и выключать элемент через «Изменить форму». Чтобы запретить правку, снимите пользовательскую видимость.
Сохранится ли значение в скрытом поле?
Да. Видимость влияет только на отображение. Реквизит объекта продолжает хранить значение, его можно читать и записывать в коде.
Можно ли скрыть поле только у одного пользователя?
Штатно — через права его роли на реквизит или через функциональную опцию. Индивидуально для пользователя поле прячется, если он сам уберёт его в «Изменить форму» при включённой пользовательской видимости.
Почему поле серое, а не исчезло?
Вы изменили Доступность, а не Видимость. Доступность блокирует ввод, но оставляет поле на форме. Для полного скрытия используйте Видимость.
Как скрыть поле, которого нет в коллекции Элементы?
В Элементы лежат элементы формы, а не реквизиты объекта. Если реквизит не выведен на форму, его и так не видно. Если выведен — обращайтесь по имени элемента формы, оно может отличаться от имени реквизита.