Часто перед разработчиками встает задача открыть форму обработки или отчета в отдельном окне, которое бы не мешало пользователю продолжать работу в основной программе. То есть окно должно быть независимым и неблокирующим. Давайте разберемся, почему стандартные настройки формы не всегда дают ожидаемый результат и какие существуют архитектурные решения этой задачи.
Основная проблема заключается в том, что при попытке использовать свойство формы РежимОткрытияОкна в значении НеБлокировать, форма все равно открывается как очередная закладка в основном окне приложения, а не как самостоятельное окно операционной системы. Попытка же установить режим БлокироватьОкноВладельца приводит к появлению отдельного окна, но оно оказывается модальным и блокирует работу до своего закрытия, что не соответствует поставленной задаче.
Чтобы понять причину такого поведения, проанализируем, как платформа 1С управляет окнами. В современных версиях работа с интерфейсом жестко регламентирована, и все формы живут в рамках одного процесса приложения 1С.
Рассмотрим свойство формы РежимОткрытияОкна:
НеБлокировать). Этот режим предназначен для открытия немодальных окон. Однако их отображение зависит от глобальных настроек интерфейса клиента 1С. Если у пользователя включен режим «в закладках», то любая форма, открытая с этим свойством, станет новой закладкой. Если включен режим «в отдельных окнах», форма откроется в дочернем MDI-окне внутри главного окна 1С. В обоих случаях она не является независимым окном на уровне операционной системы.БлокироватьОкноВладельца). Этот режим создает модальное окно. Визуально оно выглядит как отдельное, независимое окно, которое можно перетаскивать. Но его ключевая особенность в том, что оно полностью блокирует взаимодействие с родительским окном (формой-владельцем), из которого было вызвано. Это поведение аналогично системным диалогам, таким как ПоказатьВопрос() или ПоказатьПредупреждение(). Вы не можете вернуться к основной работе, пока не закроете этот диалог. Именно поэтому данный режим не подходит для параллельной работы.Таким образом, стандартные средства платформы не предоставляют механизма для создания действительно независимого, немодального окна в рамках того же сеанса работы. «Чудесное» поведение на одном из компьютеров, когда окно кажется независимым, скорее всего, связано с настройками самой Windows (например, группировка окон на панели задач) или с настройками интерфейса клиента 1С, но оно не меняет логику блокировки на уровне платформы.
Попытка «выдернуть» окно формы из основного процесса 1С с помощью внешних компонент (DLL) — это путь, сопряженный с огромными рисками. Теоретически, с помощью вызовов Windows API (например, функции SetParent) можно изменить родителя окна, сделав его окном рабочего стола. Однако на практике это приводит к множеству проблем:
Важно: Использование подобных DLL-компонент в коммерческих, рабочих системах крайне не рекомендуется из-за высокого риска потери данных и нестабильности.
Поскольку вынести форму из текущего процесса стандартными методами невозможно, для решения задачи используют обходные архитектурные пути, которые создают новый, независимый процесс. Рассмотрим самые популярные и стабильные из них.
Самый простой и очевидный способ. Пользователь может запустить второй экземпляр клиента 1С:Предприятие и открыть в нем нужную обработку. Каждый запущенный клиент — это отдельный процесс в операционной системе, поэтому его окна полностью независимы друг от друга. Этот метод не требует никаких доработок в конфигурации.
Это, пожалуй, самый удобный и современный способ добиться желаемого поведения. Веб-клиент работает в браузере, и каждый экземпляр обработки можно открыть в новой вкладке или даже в новом, отдельном окне браузера. Окна браузера управляются операционной системой независимо друг от друга.
Порядок действий:
Это решение позволяет работать параллельно без каких-либо блокировок и не требует сложных доработок.
Это наиболее сложный, но и наиболее гибкий способ для продвинутых сценариев. Суть метода заключается в создании отдельного небольшого приложения (например, на C#, Delphi, Python или даже с помощью VBScript), которое будет подключаться к информационной базе 1С через технологию COM.
Как это работает:
Этот подход позволяет создать полностью кастомизированное независимое окно (например, для дашборда с мониторингом ключевых показателей), но требует навыков программирования вне среды 1С.
Итог: Прямой возможности открыть форму в независимом неблокирующем окне стандартными средствами конфигуратора не существует. Это ограничение архитектуры платформы. Для решения этой задачи следует использовать один из обходных путей: запуск второго экземпляра клиента, работу через веб-клиент в отдельном окне браузера или разработку внешнего приложения с подключением по COM.