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

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

1С: как открыть форму в отдельном окне

Как открыть форму 1С в отдельном окне: настройки интерфейса Такси, режим открытия окон, методы ОткрытьФорму и ПолучитьФорму с параметрами независимости.

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

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

Важно понимать ограничение: интерфейс «Такси» в тонком клиенте не поддерживает полноценные «плавающие» окна в стиле старого интерфейса 8.2. Отдельное окно операционной системы можно получить либо через запуск дополнительного сеанса, либо через веб-клиент в отдельной вкладке браузера, либо программными средствами с определёнными оговорками.

Как устроены окна в интерфейсе «Такси»

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

При этом платформа различает понятия «окно формы» и «окно приложения». Форма может быть открыта внутри текущего окна, в блокирующем режиме (модально) или как независимая. Но даже независимая форма в тонком клиенте «Такси» остаётся внутри главного окна приложения — она не превращается в отдельное окно Windows, которое можно перетащить на второй монитор.

Настоящее отдельное окно операционной системы даёт только второй экземпляр клиента (тонкий, толстый или веб-клиент в другой вкладке браузера). Это принципиальный момент, который определяет выбор способа.

Открытие формы в новом окне без программирования

В ряде конфигураций платформа предлагает встроенную команду открытия формы в новом окне. Наведите курсор на ссылку объекта в списке, нажмите правую кнопку мыши и проверьте контекстное меню — в некоторых режимах доступен пункт «Открыть в новом окне». Также ссылку на объект можно открыть через меню «Ещё» формы списка, если разработчик конфигурации это предусмотрел.

Ещё один пользовательский приём — получение навигационной ссылки. В форме объекта откройте меню «Ещё» и выберите «Получить ссылку» (или «Вывести ссылку»). Скопированную ссылку вида e1cib/... можно открыть в другом сеансе клиента или передать коллеге — объект откроется у него в отдельном окне его приложения.

Второй сеанс как отдельное окно

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

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

Порядок действий для пользователя
  1. 1
    Проверьте контекстное меню объекта — есть ли пункт «Открыть в новом окне»
  2. 2
    Если нет — получите навигационную ссылку через «Ещё → Получить ссылку»
  3. 3
    Запустите второй экземпляр клиента 1С или новую вкладку браузера
  4. 4
    Откройте ссылку во втором окне и разместите окна на разных мониторах
  5. 5
    Проверьте, что изменения в одном окне не конфликтуют с редактированием того же объекта в другом

Программное открытие формы: метод ОткрытьФорму

Для разработчика основной инструмент — глобальный метод ОткрытьФорму() или метод ПолучитьФорму() с последующим вызовом Открыть(). Поведение окна управляется параметром РежимОткрытияОкна, который принимает значения системного перечисления РежимОткрытияОкнаФормы.

Доступны три варианта: БлокироватьВесьИнтерфейс (модальная форма на весь сеанс), БлокироватьОкноВладельца (форма блокирует только окно, из которого открыта) и Независимый (форма живёт своей жизнью, владелец остаётся доступен). Для «отдельного окна» внутри приложения обычно выбирают независимый режим или блокировку владельца.

bsl
&НаКлиенте
Процедура ОткрытьКарточкуОтдельно(Команда)
    ПараметрыФормы = Новый Структура("Ключ", ТекущийЭлемент);
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента",
        ПараметрыФормы,
        ЭтотОбъект,
        Новый УникальныйИдентификатор,
        ,
        ,
        ,
        РежимОткрытияОкнаФормы.Независимый);
КонецПроцедуры

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

Открытие нескольких экземпляров одной формы

Частая задача — открыть одновременно две карточки разных элементов одного справочника или два одинаковых отчёта с разными настройками. Здесь ключевую роль играет параметр уникальности в ОткрытьФорму и свойство формы КлючУникальности.

Для форм объектов уникальность по умолчанию привязана к ссылке: одна и та же карточка не откроется дважды. Чтобы обойти это для разных объектов, достаточно передавать разные ключи в параметре Ключ — формы откроются независимо. Для отчётов и произвольных форм передавайте в качестве уникальности, например, Новый УникальныйИдентификатор или строку с параметрами варианта настроек.

Блокирующие и модальные окна

Блокирующий режим визуально выглядит как «отдельное окно поверх»: форма открывается по центру, владелец затемняется и недоступен, пока окно не закрыто. Такой режим удобен для диалогов выбора, ввода параметров и подтверждений — пользователь не потеряет форму среди закладок.

Если форма должна вернуть результат, используйте связку ОткрытьФорму с описанием оповещения о закрытии или устаревший модальный вызов ОткрытьМодально(). Платформа давно отказалась от модальных вызовов в пользу асинхронной модели: в веб-клиенте и при отключённом режиме модальности метод ОткрытьМодально() может быть недоступен, поэтому в новом коде применяйте оповещения.

bsl
&НаКлиенте
Процедура ПодобратьТовар(Команда)
    Оповещение = Новый ОписаниеОповещения("ПослеПодбора", ЭтотОбъект);
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора",
        ,
        ЭтотОбъект,
        ,
        ,
        ,
        Оповещение,
        РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

Сравнение способов открытия формы в отдельном окне

У каждого подхода свои ограничения. Таблица ниже помогает выбрать вариант под конкретную задачу.

СпособОтдельное окно ОСКому подходитОграничения
Второй сеанс клиентаДаПользовательНужен дополнительный вход, расход лицензии/сеанса
Веб-клиент в новой вкладкеДа (окно браузера)ПользовательТребуется публикация базы на веб-сервере
ОткрытьФорму, режим «Независимый»НетРазработчикФорма остаётся внутри главного окна
БлокироватьОкноВладельцаНетРазработчикДиалоговое поведение, владелец недоступен
Уникальный ключ формыНетРазработчикДаёт несколько экземпляров, но не отдельное окно ОС
Маршрут решения

Как выбрать действие

Нужно разнести две формы на разные мониторыЗапустите второй сеанс клиента или откройте базу в браузере в отдельном окне
Нужно открыть диалог поверх текущей формы с возвратом результатаИспользуйте ОткрытьФорму с режимом БлокироватьОкноВладельца и описанием оповещения
Нужно открыть вторую копию той же формы с другими даннымиПередайте уникальный параметр уникальности (новый GUID) и режим Независимый
Форма должна остаться доступной одновременно с владельцем в одном сеансеВыберите режим Независимый, но учтите, что окно останется внутри главного окна

Частые ошибки и проверка результата

Самая распространённая ошибка — ожидание, что независимый режим создаст окно Windows. В «Такси» этого не происходит, и попытки «вытащить» форму за пределы главного окна штатными средствами бесполезны. Если требуется именно окно ОС, единственный путь — второй клиент.

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

Типичные ошибки
01
Ожидание отдельного окна ОС от режима «Независимый» — форма остаётся внутри главного окна, нужен второй сеанс
02
Отсутствие параметра уникальности — вместо новой формы активируется уже открытая
03
Использование ОткрытьМодально() при отключённой модальности — ошибка выполнения, замените на описание оповещения
04
Редактирование одного объекта в двух окнах одновременно — конфликт блокировок и потеря изменений

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

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

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

Повторный вызов открытия формы
Норма

Открывается новый экземпляр формы рядом с существующим

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

Активируется уже открытая форма — не задан параметр уникальности

Работа в веб-клиенте
Норма

Форма открывается и закрывается с оповещением без ошибок

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

Ошибка модальности — код использует устаревший ОткрытьМодально()

Блокировка владельца
Норма

Родительская форма недоступна до закрытия дочерней

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

Владелец остаётся активным — выбран независимый режим вместо блокирующего

Часто задаваемые вопросы

Можно ли в тонком клиенте «Такси» вытащить форму в отдельное окно Windows?

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

Почему ОткрытьФорму не открывает вторую копию формы?

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

Чем отличается «БлокироватьОкноВладельца» от «БлокироватьВесьИнтерфейс»?

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

Работает ли ОткрытьМодально() в современных конфигурациях?

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

Можно ли открыть форму внешней обработки в отдельном окне?

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

Почему при работе в двух окнах возникает ошибка конфликта блокировки?

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

Итог

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

В интерфейсе «Такси» формы не выходят за пределы главного окна: настоящее отдельное окно даёт только второй сеанс клиента или веб-клиент. Программно поведение окна задаётся параметром РежимОткрытияОкна метода ОткрытьФорму, а повторное открытие той же формы — уникальным ключом. Модальные вызовы заменяйте описаниями оповещений.