К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как убрать кнопку закрытия формы в 1С

Как убрать кнопку закрытия формы в 1С: свойство КнопкаЗакрытия, настройка командной панели, программное скрытие кнопок, типичные ошибки и ответы на вопросы разработчиков.

В управляемых формах 1С кнопка закрытия появляется автоматически: платформа сама добавляет стандартные кнопки «Записать и закрыть», «Закрыть» и другие команды в командную панель формы. Часто разработчику нужно убрать кнопку закрытия — например, чтобы пользователь не мог выйти из формы-мастера до завершения всех шагов или чтобы форма обрабатывалась только как диалог выбора.

Существует несколько способов решить задачу: отключить стандартные кнопки через свойства формы в конфигураторе, скрыть кнопку программно в коде модуля формы или переопределить поведение команды закрытия. Выбор зависит от того, о какой именно кнопке идёт речь — о системной кнопке в заголовке окна, о команде «Закрыть» в командной панели или о кнопке «Записать и закрыть».

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

Какие кнопки закрытия существуют в форме 1С

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

Первая группа — стандартные команды в командной панели формы: «Записать и закрыть», «Закрыть», «Перечитать». Они формируются платформой автоматически на основе стандартных команд объекта. Вторая группа — системная кнопка закрытия окна (крестик в заголовке) и сочетание клавиш Esc. Третья — пользовательские кнопки, которые разработчик сам добавил на форму и связал с командой «Закрыть».

Кнопка в командной панелиСтандартная команда платформы

Проверьте свойства формы: автозаполнение командной панели

Крестик в заголовке окнаСистемная кнопка ОС

Убирается только через обработку ПередЗакрытием, полностью скрыть нельзя

Своя кнопка на формеДобавлена разработчиком

Найдите элемент в дереве формы и удалите или скройте

Отключение стандартных кнопок через свойства формы

Самый простой способ убрать стандартные кнопки — настроить командную панель формы в конфигураторе. Откройте форму в редакторе, выделите корневой элемент «Форма» в дереве элементов и откройте палитру свойств.

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

Если командная панель вообще не нужна, её можно скрыть целиком: установите видимость элемента «КоманднаяПанель» в значение «Ложь». Учтите, что вместе с кнопкой закрытия исчезнут и другие стандартные команды — «Записать», «Перечитать», кнопки печати и обмена, если они выводились в эту панель.

Порядок действий в конфигураторе
  1. 1
    Откройте нужную форму объекта в конфигураторе
  2. 2
    Выделите корень дерева элементов — «Форма»
  3. 3
    Найдите элемент КоманднаяПанель и снимите флаг Автозаполнение
  4. 4
    Либо установите Видимость командной панели = Ложь
  5. 5
    Добавьте вручную только нужные команды, если панель остаётся
  6. 6
    Обновите конфигурацию базы данных и проверьте форму в режиме предприятия

Программное скрытие кнопки закрытия

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

Типовой пример в обработчике ПриСозданииНаСервере:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

КнопкаЗакрыть = Элементы.Найти("ФормаЗакрыть");

Если КнопкаЗакрыть <> Неопределено Тогда

КнопкаЗакрыть.Видимость = Ложь;

КонецЕсли;

КнопкаЗаписатьЗакрыть = Элементы.Найти("ФормаЗаписатьИЗакрыть");

Если КнопкаЗаписатьЗакрыть <> Неопределено Тогда

КнопкаЗаписатьЗакрыть.Видимость = Ложь;

КонецЕсли;

КонецПроцедуры

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

Запрет закрытия формы через событие ПередЗакрытием

Скрытие кнопки не мешает пользователю закрыть форму крестиком, клавишей Esc или из системного меню. Если бизнес-логика требует, чтобы форма не закрывалась до выполнения условий, обработайте событие ПередЗакрытием.

&НаКлиенте

Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)

Если Не ВсеШагиВыполнены Тогда

Отказ = Истина;

ПоказатьПредупреждение(, "Завершите все шаги мастера перед закрытием.");

КонецЕсли;

КонецПроцедуры

Параметр Отказ = Истина отменяет закрытие. При этом обязательно сообщите пользователю причину — иначе форма будет казаться «зависшей», и это вызовет жалобы. Обратите внимание на параметр ЗавершениеРаботы: когда пользователь завершает работу всей программы, блокировать закрытие форм грубым отказом не стоит — лучше корректно сохранить данные или задать вопрос о сохранении.

Управление свойствами кнопки: видимость и доступность

Иногда кнопку лучше не скрывать, а сделать недоступной. Разница принципиальна: скрытая кнопка исчезает из интерфейса, а недоступная остаётся видимой, но «серая» — пользователь видит, что действие существует, но сейчас недоступно.

Для управления используются два свойства элемента формы: Видимость и Доступность. Для кнопки закрытия логика обычно такая: если действие неприменимо в принципе — скрывайте; если оно станет доступным после выполнения условий — используйте доступность и переключайте её в коде по мере изменения состояния формы.

Сравнение вариантов

Видимость = Ложь

Кнопка полностью исчезает. Подходит, когда команда не нужна в данном режиме формы вообще

Доступность = Ложь

Кнопка видна, но неактивна. Подходит, когда действие станет доступно после заполнения данных

ПередЗакрытием + Отказ

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

Особенности для обычных форм и диалоговых окон

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

Отдельный случай — формы, открываемые в модальном или блокирующем режиме как диалоги. Для них часто требуется оставить единственный способ завершения — например, кнопки «Да» и «Нет». В этом случае стандартные кнопки скрывают, а собственные команды завершают форму вызовом Закрыть(Результат) с передачей результата в вызывающий код.

Перед тем как убирать кнопку «Записать и закрыть», проверьте, не используют ли её пользователи как основной способ сохранения. Частая жалоба после доработок — «пропала кнопка, которой я всегда сохранял документ». Безопаснее заменить её своей командой с понятным названием, чем просто скрыть.
ПЗ
Практическое замечание

Типичные ошибки и проверка результата

Самая распространённая ошибка — обращение к кнопке по неверному имени. Код молча не срабатывает (если есть проверка на Неопределено) или падает с ошибкой. Всегда проверяйте фактические имена элементов в отладчике именно для вашей версии платформы.

Вторая ошибка — скрытие кнопки только на клиенте в то время, как стандартная команда формы остаётся доступной через меню «Ещё» или сочетание клавиш. Если нужно отключить действие полностью, работайте не только с кнопкой, но и с командой формы: у команды тоже есть свойство видимости, а её обработчик можно переопределить.

Типичные ошибки
01
Обращение к кнопке по выдуманному имени — код не работает, потому что реальное имя другое
02
Скрытие кнопки без обработки ПередЗакрытием — форма всё равно закрывается крестиком и Esc
03
Безусловный Отказ = Истина в ПередЗакрытием — пользователь не может выйти вообще и завершает сеанс принудительно
04
Отключение автозаполнения командной панели без добавления своих команд — пропадают кнопки записи и печати
05
Скрытие кнопки на сервере при создании, но не учёт того, что платформа пересоздаёт панель при изменении состава команд

После внесения изменений проверьте результат в режиме предприятия: откройте форму, убедитесь, что кнопка исчезла, попробуйте закрыть форму всеми способами — крестиком, Esc, через меню. Убедитесь, что сценарий сохранения данных по-прежнему работает и пользователь не теряет введённую информацию.

Контрольные точки

Как проверить результат

Командная панель формы
Норма

Лишней кнопки нет, нужные команды на месте

Тревожный признак

Исчезли также «Записать» и другие нужные команды

Закрытие крестиком и Esc
Норма

Форма закрывается с вопросом о сохранении или блокируется с пояснением

Тревожный признак

Форма закрывается молча, данные теряются

Меню «Ещё»
Норма

Команда закрытия там тоже недоступна

Тревожный признак

Кнопка скрыта, но команда доступна через «Ещё»

Ответы на частые вопросы

Можно ли полностью убрать крестик закрытия окна формы?

Нет, системную кнопку закрытия окна платформа 1С скрыть не позволяет — это элемент окна операционной системы. Единственный способ контроля — обработчик ПередЗакрытием с установкой Отказ = Истина, но злоупотреблять этим нельзя: при завершении работы программы (параметр ЗавершениеРаботы = Истина) блокировать закрытие нужно крайне осторожно.

Почему код Элементы.ФормаЗакрыть.Видимость = Ложь вызывает ошибку?

Значит, в вашей форме нет элемента с таким именем. Имена стандартных кнопок зависят от вида формы и версии платформы. Используйте Элементы.Найти("ФормаЗакрыть") с проверкой на Неопределено, а точное имя посмотрите в отладчике, перебрав коллекцию Элементы.

Как убрать кнопку «Записать и закрыть», но оставить «Записать»?

Отключите автозаполнение командной панели и добавьте в неё вручную только стандартную команду «Записать». Альтернатива — программно скрыть кнопку «ФормаЗаписатьИЗакрыть» в ПриСозданииНаСервере, не трогая остальные команды.

Кнопка скрыта, но команда доступна через меню «Ещё». Что делать?

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

Как закрыть форму программно с передачей результата?

Используйте метод Закрыть(Результат) на клиенте — параметр будет передан в обработчик ОповещениеОЗакрытии вызывающей формы, если форма открывалась с помощью ОткрытьФорму с описанием оповещения. Это стандартный способ реализовать собственные кнопки «ОК» и «Отмена» в диалогах.

Итог

Что важно запомнить

Кнопку закрытия в управляемой форме 1С убирают тремя способами: отключением автозаполнения командной панели, программным скрытием элемента через Элементы.Найти() и обработкой ПередЗакрытием для контроля закрытия окна. Скрытие кнопки не отменяет закрытие крестиком и Esc — для полного контроля комбинируйте подходы и всегда оставляйте пользователю понятный путь выхода.