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