Как открыть несколько окон одного приложения 1С:Предприятие на разных мониторах?

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

При работе в системе 1С:Предприятие 8.3 пользователи часто сталкиваются с необходимостью отображать разные формы или отчеты на отдельных мониторах. Это позволяет значительно повысить удобство и эффективность работы, например, при одновременном анализе нескольких документов или сравнении отчетов. Возникает вопрос: возможно ли открыть два окна одного приложения 1С так, чтобы одно находилось на одном экране, а другое – на втором? Или для достижения такого результата придется запускать приложение 1С дважды?

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

Особенности оконной системы 1С:Предприятие

Прежде чем углубляться в решения, давайте разберемся с тем, как устроена оконная система в 1С:Предприятие 8.3, особенно в режиме управляемого приложения (интерфейс «Такси»).

Исторически в 1С:Предприятии существовали разные подходы к организации окон. В версии 7.7 и в обычных формах 8.2 преобладала модель MDI (Multiple Document Interface), когда все дочерние окна располагались внутри одного основного окна приложения. Это позволяло держать все рабочие области в рамках одного родительского окна, но ограничивало возможности по их свободному перемещению на разные мониторы.

С появлением управляемых форм и интерфейса «Такси» в 1С:Предприятии 8.3 произошел переход к более строгому, изначально однооконному подходу. Однако, как отмечают пользователи в сообщении (30), в самых первых вариантах управляемых форм была некая возможность, которая впоследствии была изменена, поскольку пользователи 1С привыкли к MDI-поведению. Многие разработчики и пользователи, как видно из сообщений (24) и (27), желали бы иметь возможность свободно выносить формы на разные мониторы, но позиция разработчика 1С долгое время оставалась неизменной: «вам это не нужно и точка». Тем не менее, платформа имеет внутренние механизмы, позволяющие работать с окнами в разных состояниях.

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

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

Рассмотрим доступные способы решения задачи.

Решение 1: Запуск нескольких сеансов 1С

Это самый простой и наиболее очевидный способ для достижения цели – иметь два (или более) окна приложения на разных мониторах, как предложено в сообщениях (8) и (16).

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

  1. Запуск нескольких экземпляров 1С: Вместо того чтобы пытаться разделить одно запущенное приложение, мы просто запускаем его несколько раз. Каждый запуск 1С:Предприятия создает отдельный процесс.
  2. Независимые окна: Каждый такой процесс будет отображаться как отдельное окно на панели задач операционной системы Windows. Эти окна полностью независимы друг от друга.
  3. Перемещение на мониторы: Поскольку каждое окно является отдельным процессом операционной системы, вы можете свободно перетаскивать его на любой из подключенных мониторов. Это полностью соответствует желанию автора темы в сообщении (6): «нужны на разных экранах, следовательно, думаю на разных панелях. Как документы в Экселе».

Преимущества этого подхода:

Недостатки, которые стоит учитывать:

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

Решение 2: Использование встроенных возможностей интерфейса "Такси"

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

Закрепление окна

Механизм закрепления позволяет зафиксировать одно из окон в определенной части рабочей области. Другие окна будут открываться рядом, не перекрывая закрепленное.

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

Объединение двух окон

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

  1. Назначение: Классический пример – сравнение двух одинаковых отчетов за разные периоды или двух версий одного документа.
  2. Как использовать:
    • Откройте два окна, которые вы хотите объединить.
    • Воспользуйтесь командами объединения, доступными в тех же местах, что и команды закрепления: область системных команд, главное меню «Окна» или контекстное меню заголовка формы.
    • Выберите вариант объединения (например, «Разделить по горизонтали» или «Разделить по вертикали»).
  3. Важные особенности:
    • Объединенные окна располагаются в рабочей области основного окна 1С.
    • Если вы открываете новые окна после объединения, они будут открываться поверх объединенных, потенциально перекрывая их.

Ограничение этого подхода:

Главное ограничение, которое не позволяет использовать эти встроенные возможности для решения задачи автора, заключается в том, что закрепленные и объединенные окна всегда остаются внутри одного основного окна приложения 1С. Вы не сможете вынести одно из таких «внутренних» окон на отдельный физический монитор, если основное окно 1С не растянуто на несколько мониторов. Это не обеспечивает желаемую свободу перемещения, о которой идет речь в сообщениях (0) и (6).

Решение 3: Открытие форм в отдельных окнах с помощью программного интерфейса

Для более гибкой работы с окнами, позволяющей вынести отдельные формы на разные мониторы, платформа 1С:Предприятие в режиме управляемого приложения предлагает возможность открывать формы в отдельных окнах. Это дает большую свободу, чем внутренние механизмы «Такси», и может быть реализовано как программно, так и иногда через пользовательский интерфейс.

Использование команды "Открыть в отдельном окне"

В пользовательском режиме для некоторых форм в управляемом приложении доступна команда «Открыть в отдельном окне» или «Новое окно». Ее можно найти в системном меню формы или в контекстном меню на панели открытых окон. Если такая команда доступна, нажатие на нее создаст новую, независимую форму, которая будет вести себя как отдельное окно операционной системы.

Программное открытие форм в отдельных окнах с ключами уникальности

Если вам нужно открыть несколько экземпляров одной и той же формы (например, два разных отчета или два разных документа одного типа) и разместить их на разных мониторах, вы можете использовать метод ОткрытьФорму() с параметром «ключ уникальности» и указанием режима открытия окна.

Рассмотрим разберем по шагам, как это сделать:

  1. Метод ОткрытьФорму(): Этот метод позволяет программно открывать формы 1С. Его синтаксис достаточно гибок.
  2. Ключ уникальности: Для открытия нескольких экземпляров одной формы критически важно использовать разные ключи уникальности. Если вы будете использовать один и тот же ключ, платформа просто активирует уже открытую форму.
  3. Режим открытия окна: Чтобы форма открылась в отдельном окне операционной системы, а не внутри основного окна 1С, необходимо явно указать это в параметрах.

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


// Пример открытия двух экземпляров одной формы отчета в отдельных окнах

// 1. Создадим структуру для настроек открытия окна
//    и укажем, что форма должна открыться в отдельном окне.
НастройкиОткрытияОкна = Новый Структура;
НастройкиОткрытияОкна.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаКлиентскогоПриложения.Отдельное);

// 2. Открываем первый экземпляр формы отчета с уникальным ключом "ОтчетПоПродажам_Апрель"
//    Второй параметр - это параметры формы, здесь пустые.
//    Третий параметр - это владелец формы (здесь не задан).
//    Четвертый параметр - это ключ уникальности формы.
//    Пятый параметр - это настройки открытия окна.
ФормаОтчетаАпрель = ОткрытьФорму(
    "Отчет.ОтчетПоПродажам.Форма.ФормаОтчета",
    Новый Структура("Период", НачалоМесяца(ТекущаяДата())), // Пример параметра формы
    ,
    "ОтчетПоПродажам_Апрель",
    НастройкиОткрытияОкна
);
// Если необходимо, устанавливаем дополнительные параметры формы
// ФормаОтчетаАпрель.ПараметрыОтбора.Вставить("Месяц", "Апрель");
// ФормаОтчетаАпрель.ОбновитьДанные(); // Или выполнить команду отчета

// 3. Открываем второй экземпляр формы того же отчета
//    с другим уникальным ключом "ОтчетПоПродажам_Май"
ФормаОтчетаМай = ОткрытьФорму(
    "Отчет.ОтчетПоПродажам.Форма.ФормаОтчета",
    Новый Структура("Период", НачалоМесяца(ДобавитьМесяц(ТекущаяДата(), 1))), // Пример параметра формы
    ,
    "ОтчетПоПродажам_Май",
    НастройкиОткрытияОкна
);
// ФормаОтчетаМай.ПараметрыОтбора.Вставить("Месяц", "Май");
// ФормаОтчетаМай.ОбновитьДанные(); // Или выполнить команду отчета

// Пример открытия двух разных документов в отдельных окнах
// Предположим, у нас есть ссылки на два разных документа реализации
// СсылкаНаПервыйДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("000000001", Дата("20230101"));
// СсылкаНаВторойДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("000000002", Дата("20230101"));

// Если ссылки существуют, открываем формы документов
// if СсылкаНаПервыйДокумент <> Неопределено Then
//     ПараметрыДокумента1 = Новый Структура("Ссылка", СсылкаНаПервыйДокумент);
//     ФормаДокумента1 = ОткрытьФорму(
//         "Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента",
//         ПараметрыДокумента1,
//         ,
//         "Реализация_000000001",
//         НастройкиОткрытияОкна
//     );
// EndIf;

// if СсылкаНаВторойДокумент <> Неопределено Then
//     ПараметрыДокумента2 = Новый Структура("Ссылка", СсылкаНаВторойДокумент);
//     ФормаДокумента2 = ОткрытьФорму(
//         "Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента",
//         ПараметрыДокумента2,
//         ,
//         "Реализация_000000002",
//         НастройкиОткрытияОкна
//     );
// EndIf;

После выполнения такого кода в режиме управляемого приложения вы получите два отдельных окна, каждое из которых содержит экземпляр формы отчета (или документа). Эти окна будут отображаться на панели задач Windows как независимые приложения, и их можно свободно перетаскивать на любые подключенные мониторы. Это наиболее точный ответ на изначальный вопрос автора.

Ограничения и важные нюансы этого подхода:

Заключение

Итак, на вопрос «можно ли открыть два окна одного приложения 1С?» можно ответить утвердительно, но с оговорками и использованием определенных подходов. Хотя платформа 1С:Предприятие 8.3 в интерфейсе «Такси» изначально стремится к однооконному режиму, существуют эффективные способы организации рабочего пространства на нескольких мониторах:

  1. Запуск нескольких сеансов 1С: Это самый простой способ получить полностью независимые окна, каждое из которых можно перетащить на любой монитор. Идеально подходит, если не требуется сложная программная синхронизация между окнами.
  2. Встроенные возможности «Такси» (закрепление и объединение окон): Позволяют эффективно работать с несколькими формами внутри одного основного окна 1С. Однако они не дают возможности вынести формы на отдельные физические мониторы.
  3. Программное открытие форм в отдельных окнах: Используя метод ОткрытьФорму() с разными ключами уникальности и указанием режима открытия в отдельном окне, мы можем добиться того, чтобы каждая форма отображалась как независимое окно операционной системы, которое можно перетаскивать на разные мониторы. Это решение требует программной доработки, но обеспечивает наибольшую гибкость.

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

← На главную