Имя: Пароль:
1C
1C 7.7
v7: Formex закрыть неактивное окно 7.7
0 Franchiser
 
гуру
05.05.17
13:28
Можно ли каким-то образом по имена получить список откртытых окон и закрыть некоторые из них?
1 Злопчинский
 
05.05.17
22:42
Процедура ПриДеактивацииОкна()КонецПроцедуры
Назначение:
Предопределенная процедура при деактивации окна

СписокВсехОткрытыхОкон()
Синтаксис:
СписокВсехОткрытыхОкон()
Назначение:
возвращает список значений со всеми открытыми формами

АктивныйКонтекст(<?>)
Синтаксис:
АктивныйКонтекст(<Контекст>)
Назначение:
Возвращает контекст активного в данный момент окна.
Возвращает 1 в случае успеха, 0 в противном случае.
Параметры:
<Контекст> - Переменная, в которую записывается активный контекст.
ПРИМЕР:
Процедура ЗакрытьАктивноеОкно()
        Перем Конт;
        Сервис = СоздатьОбъект(''Сервис'');
        Если Сервис.АктивныйКонтекст(Конт) = 1 Тогда
                Конт.Форма.Закрыть(0);
        Иначе
                Сообщить(''Активное окно не является контекстным или нет активного окна.'');
        КонецЕсли;
КонецПроцедуры
2 Franchiser
 
гуру
05.05.17
23:37
Можно примерчик как найти по имени нужное окно и закрыть? Что-то не до конца понятно...
3 Злопчинский
 
05.05.17
23:47
(2) для начала просто возьми формексовский вордовский хелп и посмотри там,если уже непонятно будет...

можно посмотерть например как у меян сделана работа с открытыми печатными формами на экране (http://catalog.mista.ru/public/14180/) - собираю их (только активную или вообще все) и обрабатываю, в т.ч. и закрываю. с оканми форм - аналогично. можем попробовать с окнами поработать, вместе - давай удаленку... попробуем, бо сам впрямую не делал (ибо бяковая идея)
4 Злопчинский
 
05.05.17
23:55
вот, навалял, работает

//*******************************************
Процедура Сформировать()
    
    КонтТекущегоОкна = ""; глСервис.АктивныйКонтекст(КонтТекущегоОкна) ;
    СЗ = глСервис.СписокВсехОткрытыхОкон();
    
    //ОТЛАДКА:
    //СЗ.ВыбратьЗначение(,);
    
    РС = СЗ.РазмерСписка();
    Для ы=1 По РС Цикл
        Конт = СЗ.ПолучитьЗначение(ы);
        Если Конт = КонтТекущегоОкна Тогда Продолжить; КонецЕсли; //попробуй заремить эту строку
        Конт.Форма.Закрыть(0);
    КонецЦикла;
    

КонецПроцедуры
5 Franchiser
 
гуру
06.05.17
00:40
Написал так, но почему-то закрывается первая форма и останавливается на этом:

Процедура ИсправитьБагОткрытияФормы()

    Сервис = СоздатьОбъект("Сервис");
    
    Окна = Сервис.СписокВсехОткрытыхОкон();
    
    Конт = "";
    РасшФ = СоздатьОбъект("РасширениеФормы");
    
    Если  Окна.РазмерСписка()>0 Тогда
        для й=-Окна.РазмерСписка() по -1 Цикл
            Окно = Окна.ПолучитьЗначение(-й,КОнт);
            Если ТипЗначенияСтр(Конт) ="Строка"Тогда
                Если Найти(Конт,"Планировщик регламента")>0  Тогда
                РасшФ.УстановитьФорму(Окно.форма);
                РасшФ.Закрыть();
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    
    

    
КонецПроцедуры
6 Злопчинский
 
06.05.17
00:57
фигня какая-то понаписана.. наверное...
ща.. вкурю...
7 Злопчинский
 
06.05.17
01:02
Процедура ИсправитьБагОткрытияФормы()

    Сервис = СоздатьОбъект("Сервис");
    Окна = Сервис.СписокВсехОткрытыхОкон();
    РС = Окна.РазмерСписка();
    Если РС = 0 Тогда Возврат; КонецЕсли;

    для й=1 По РС Цикл
      Конт=""; Окно = Окна.ПолучитьЗначение(й,Конт);
      Если Найти(ВРЕГ(Конт),"ПЛАНИРОВЩИК РЕГЛАМЕНТА")>0  Тогда
         Окно.Форма.Закрыть(0);
      КонецЕсли;
    КонецЦикла;  
    

    
КонецПроцедуры
8 Злопчинский
 
06.05.17
01:03
И.. эта.. может не надо "исправлять баг открытия формы", а форму открывать правильно...? баг открытия формы в чем?
9 Franchiser
 
гуру
06.05.17
01:06
Да блин, есть справочник, у него в форме списка прописан в процедуре
ПриВыбореСтроки() код
ОткрытьФорму(ТекущийЭлемент());

Код конфигурации менять нельзя.
В результате сейчас выбирая в обработке элемент этого справочника автоматически открывается вторая форма элемента, которую и нужно закрыть...
10 Franchiser
 
гуру
06.05.17
01:07
Вот так форма закрывается, но форма выбора теперь осталась висеть.
Функция прописана в реквизите на форме. Как бы еще форму подбора закрыть?

Процедура ИсправитьБагОткрытияФормы()

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

    
КонецПроцедуры
11 Franchiser
 
гуру
06.05.17
01:14
может это потому что форма выбора - модальное окно, но странно почему закрытие каких то других форм приводит к тому что не закрывается модальное окно
12 Злопчинский
 
06.05.17
01:22
(10) блина, напиши в скайп Zlopun удаленку по тиму, а то так - мутно
13 Злопчинский
 
06.05.17
01:34
ты уже определись - у тебя форма выбора или форма подбора
14 Злопчинский
 
06.05.17
02:21
разрулено.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.