Как открыть обработку 1С в отдельном независимом окне, не блокируя основную программу?

Программист 1С v8.3 (Управляемые формы)
← На главную

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

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

Почему стандартные свойства формы не помогают?

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

Рассмотрим свойство формы РежимОткрытияОкна:

  1. Не блокировать (НеБлокировать). Этот режим предназначен для открытия немодальных окон. Однако их отображение зависит от глобальных настроек интерфейса клиента 1С. Если у пользователя включен режим «в закладках», то любая форма, открытая с этим свойством, станет новой закладкой. Если включен режим «в отдельных окнах», форма откроется в дочернем MDI-окне внутри главного окна 1С. В обоих случаях она не является независимым окном на уровне операционной системы.
  2. Блокировать окно владельца (БлокироватьОкноВладельца). Этот режим создает модальное окно. Визуально оно выглядит как отдельное, независимое окно, которое можно перетаскивать. Но его ключевая особенность в том, что оно полностью блокирует взаимодействие с родительским окном (формой-владельцем), из которого было вызвано. Это поведение аналогично системным диалогам, таким как ПоказатьВопрос() или ПоказатьПредупреждение(). Вы не можете вернуться к основной работе, пока не закроете этот диалог. Именно поэтому данный режим не подходит для параллельной работы.

Таким образом, стандартные средства платформы не предоставляют механизма для создания действительно независимого, немодального окна в рамках того же сеанса работы. «Чудесное» поведение на одном из компьютеров, когда окно кажется независимым, скорее всего, связано с настройками самой Windows (например, группировка окон на панели задач) или с настройками интерфейса клиента 1С, но оно не меняет логику блокировки на уровне платформы.

Архитектурные ограничения и нерекомендуемые методы

Попытка «выдернуть» окно формы из основного процесса 1С с помощью внешних компонент (DLL) — это путь, сопряженный с огромными рисками. Теоретически, с помощью вызовов Windows API (например, функции SetParent) можно изменить родителя окна, сделав его окном рабочего стола. Однако на практике это приводит к множеству проблем:

Важно: Использование подобных DLL-компонент в коммерческих, рабочих системах крайне не рекомендуется из-за высокого риска потери данных и нестабильности.

Надежные альтернативные решения

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

Решение 1: Запуск второго сеанса 1С

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

Решение 2: Использование веб-клиента

Это, пожалуй, самый удобный и современный способ добиться желаемого поведения. Веб-клиент работает в браузере, и каждый экземпляр обработки можно открыть в новой вкладке или даже в новом, отдельном окне браузера. Окна браузера управляются операционной системой независимо друг от друга.

Порядок действий:

  1. Опубликуйте информационную базу на веб-сервере (IIS или Apache).
  2. Запустите основной сеанс работы в толстом или тонком клиенте.
  3. Когда понадобится независимое окно, откройте браузер, перейдите по ссылке на опубликованную базу, авторизуйтесь и запустите нужную обработку.

Это решение позволяет работать параллельно без каких-либо блокировок и не требует сложных доработок.

Решение 3: Внешнее приложение через COM-соединение

Это наиболее сложный, но и наиболее гибкий способ для продвинутых сценариев. Суть метода заключается в создании отдельного небольшого приложения (например, на C#, Delphi, Python или даже с помощью VBScript), которое будет подключаться к информационной базе 1С через технологию COM.

Как это работает:

  1. Создается внешнее приложение, которое имеет свой собственный интерфейс и работает как независимый процесс Windows.
  2. В этом приложении программно устанавливается COM-соединение с базой 1С.
  3. Через COM-объект приложение может вызывать экспортные процедуры и функции общих модулей 1С, обращаться к объектам базы данных (справочникам, документам), выполнять запросы.
  4. Данные, полученные из 1С, отображаются в окне внешнего приложения, и наоборот, данные из этого приложения могут передаваться в 1С.

Этот подход позволяет создать полностью кастомизированное независимое окно (например, для дашборда с мониторингом ключевых показателей), но требует навыков программирования вне среды 1С.

Итог: Прямой возможности открыть форму в независимом неблокирующем окне стандартными средствами конфигуратора не существует. Это ограничение архитектуры платформы. Для решения этой задачи следует использовать один из обходных путей: запуск второго экземпляра клиента, работу через веб-клиент в отдельном окне браузера или разработку внешнего приложения с подключением по COM.

← На главную