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