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