Как получить список открытых окон 1С

В 1С есть возможность перебрать все открытые окна и проанализировать их содержимое. Рассмотрим работу с открытыми окнами на примере.

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

Ниже представлен код для решения поставленной задачи:

&НаКлиенте
Процедура ОткрытьФормуОбработки(Команда)

// Получение всех открытых окон приложения
ОкнаПриложения = ПолучитьОкна();
Для каждого ОкноПриложения Из ОкнаПриложения Цикл
// Анализ заголовка окна
Если Найти(ОкноПриложения.Заголовок, "Моя обработка") > 0 Тогда
// Получение формы
НайденнаяФорма = ОкноПриложения.Содержимое[0];
// Анализ реквизита формы
Если НЕ ЗначениеЗаполнено(НайденнаяФорма.Контрагент) Тогда
ОкноПриложения.Активизировать();
Возврат;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Окон для активизации не нашлось. Открываем новое окно
ОткрытьФорму("Обработка.МояОбработка.Форма", , , Новый УникальныйИдентификатор
);

КонецПроцедуры

Список открытых окон получается при помощи функции ПолучитьОкна(). Далее происходит обход открытых окон и анализ заголовков. Текст заголовков анализируется не по точному соответствию, а по вхождению необходимых слов, т.к. при изменении реквизитов в форме к заголовку может добавиться признак модифицированности — постфикс » *».

При нахождении нужного заголовка происходит получение управляемой формы и анализ реквизита «Контрагент». Если контрагент пустой, то текущее окно активизируется методом Активизировать() и выполнение процедуры прекращается.

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

Оцените статью