Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проверка открытия формы Справочника/документа
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
Gigi
Добрый день.
Как можно проверить открыта ли форма определенного Справочника/Документа или нет?
Пример:
Форма = Справочники.Объект.ПолучитьФорму("ФормаОбъекта");
Если Форма.Открыта() тогда
//-*-*-*-*
КонецЕсли;

НЕ РАБОТАЕТ!
Flexy
Цитата(Gigi @ 15.06.17, 14:01) необходимо зарегистрироваться для просмотра ссылки
НЕ РАБОТАЕТ!

Конечно. ПолучитьФорму() и ОткрытьФорму() - это две большие разницы.
В вашем случае форма не открыта.

Инфо из СП:

Открыта (IsOpen)
Синтаксис:

Открыта()
Возвращаемое значение:

Тип: Булево.
Истина - форма открыта; Ложь - не открыта.
В обработчике события ПриОткрытии возвращает Истина .
Описание:

Определяет, открыта ли данная форма.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Gigi
Flexy @ Сегодня, 15:15 необходимо зарегистрироваться для просмотра ссылки ,
Я имею ввиду случай определения открытости или закрытости формы другого справочника.
На пример я открыл форму справочника: "ОБЪЕКТ". В группе(вкладке) которого имеется динамический список справочника: "ТОЧКА".
Где в командной строке последнего имеется лично созданная кнопка создания нового элемента того же справочника: "ТОЧКА".
Что нужно...
Что бы ПриОткрытии справочника "ТОЧКА", можно было определить открыта ли форма справочника: ОБЪЕКТ.
Вот что нужно.
А так я тоже знаю, что в таком виде:
Сообщить(ЭтаФорма.Открыта());

команда работает.
Мне просто нужно то же самое, только для формы не родного справочника.
Flexy
Имхо, тогда нужно курить ОкнаКлиентскогоПриложения
СП:
ОкнаКлиентскогоПриложения (ClientApplicationWindows)
Элементы коллекции:

ОкноКлиентскогоПриложения
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.
Возможно обращение к элементу коллекции посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0).

Методы:

Количество (Count)
Получить (Get)

Описание:

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

Доступность:

Тонкий клиент, веб-клиент, толстый клиент, внешнее соединение, мобильное приложение(клиент).
Gigi
Flexy @ Сегодня, 15:33 необходимо зарегистрироваться для просмотра ссылки ,
Я просто новичок в 1С так что ....
Короче не получается.

Gigi @ Сегодня, 15:54 необходимо зарегистрироваться для просмотра ссылки ,
А таким маккаром:
Окна = ПолучитьОкна();
Для каждого Окно из Окна Цикл
  Сообщить(Окно.Заголовок);
КонецЦикла;

Ругается.
Буду признателен если помощь не по тому, что написано в это дурацком синтаксис помощнике.
Который наверно "нужен" тому, который и без него все итак знает. smile.gifsmile.gif
Пожалуйста НА ПРИМЕРЕ! Если возможно!
Flexy
Gigi @ Сегодня, 14:54 необходимо зарегистрироваться для просмотра ссылки ,
Как-то так...
КоллекцияОкон = ПолучитьОкна();
    Для Каждого Окно Из КоллекцияОкон Цикл
        КоллекцияСодержимое = Окно.Содержимое;
        Для Каждого Содержимое Из КоллекцияСодержимое Цикл
            Сообщить(Содержимое.ИмяФормы);
        КонецЦикла;
    КонецЦикла;
Gigi
Flexy @ Сегодня, 16:09 необходимо зарегистрироваться для просмотра ссылки ,
СПАСИБО!
Ша проверю!

Flexy @ Сегодня, 16:09 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(Flexy @ 15.06.17, 16:09) необходимо зарегистрироваться для просмотра ссылки
КоллекцияОкон = ПолучитьОкна();
    Для Каждого Окно Из КоллекцияОкон Цикл
        КоллекцияСодержимое = Окно.Содержимое;
        Для Каждого Содержимое Из КоллекцияСодержимое Цикл
            Сообщить(Содержимое.ИмяФормы);
        КонецЦикла;
    КонецЦикла;

Блин! Не работает!
Пишет:
Цитата
{Справочник.ТОЧКА.Форма.ФормаЭлемента.Форма(35)}: Поле объекта не обнаружено (Содержимое)
КоллекцияСодержимое = Окно.Содержимое;




Gigi @ Сегодня, 16:22 необходимо зарегистрироваться для просмотра ссылки ,
Код для 1С 8.2? Или как?

Gigi @ Сегодня, 16:23 необходимо зарегистрироваться для просмотра ссылки ,
Цитата
Содержимое (Content)
Использование:
Только чтение.
Описание:
Тип: СписокКомпонентXS.
Содержит список всех компонент схемы.
Доступность:
Сервер, толстый клиент, внешнее соединение.


Блин! Как быть?
Petre
Gigi @ Сегодня, 16:26 необходимо зарегистрироваться для просмотра ссылки ,
Приложение управляемое?
Gigi
Цитата(Petre @ 15.06.17, 16:31) необходимо зарегистрироваться для просмотра ссылки
Приложение управляемое?

Да!
Petre
Gigi @ Сегодня, 16:33 необходимо зарегистрироваться для просмотра ссылки ,
И код запускаете на клиенте?
Gigi
Petre @ Сегодня, 16:40 необходимо зарегистрироваться для просмотра ссылки ,
Да на клиенте
&НаКлиенте
Процедура ПриОткрытии(Отказ)
КоллекцияОкон = ПолучитьОкна();
    Для Каждого Окно Из КоллекцияОкон Цикл
        КоллекцияСодержимое = Окно.Содержимое;
        Для Каждого Содержимое Из КоллекцияСодержимое Цикл
            Сообщить(Содержимое.ИмяФормы);
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры

Короче .. ругается...
Flexy
Попробуйте так:
КоллекцияОкон = ПолучитьОкна();
    Для Каждого Окно Из КоллекцияОкон Цикл
        КоллекцияСодержимое = Окно.ПолучитьСодержимое();
                Если КоллекцияСодержимое = Неопределено Тогда
                       Продолжить;
                КонецЕсли;
        Для Каждого Содержимое Из КоллекцияСодержимое Цикл
            Сообщить(Содержимое.ИмяФормы);
        КонецЦикла;
    КонецЦикла;
sava1
Для Каждого Окно Из Окна Цикл
    Если Не Окно.Основное Тогда
       // Форма = Окно.ПолучитьСодержимое();
       // Форма.Закрыть();
    КонецЕсли;
КонецЦикла;
Gigi
Flexy @ Сегодня, 16:43 необходимо зарегистрироваться для просмотра ссылки ,
Так я тоже уже пробовал:
Через "ПолучитьСодержимое();"
Пишет:
Цитата
{Справочник.ТОЧКА.Форма.ФормаЭлемента.Форма(45)}: Ошибка при установке значения атрибута контекста (Окно)
Для Каждого Окно Из КоллекцияОкон Цикл
по причине:
Несоответствие типов

Пока даже так не хочет

Gigi @ Сегодня, 16:48 необходимо зарегистрироваться для просмотра ссылки ,
КоллекцияОкон = ПолучитьОкна();
Для Каждого Окно Из КоллекцияОкон Цикл
    Если Не Окно.Основное Тогда
        Сообщить("!!");
       // Форма = Окно.ПолучитьСодержимое();
       // Форма.Закрыть();
    КонецЕсли;
КонецЦикла;

И так тоже пишет то же самое
Никак не получается блин!
sava1
У основного окна нет содержимого.

Какую форму хотите получить? списка, элемента..
Gigi
sava1 @ Сегодня, 16:54 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(sava1 @ 15.06.17, 16:54) необходимо зарегистрироваться для просмотра ссылки
У основного окна нет содержимого.

Открываемое окно должно быть пустым. А форма с которой она должна быть открыта содержит данные.
Основное окно (т.е. самое верхнее и последнее) не содержит данные
Получить надо ФормуОбъекта, но что бы она определяла, открыта ли та форма с которой ее запустили.
logist
Цитата(Gigi @ 15.06.17, 16:56) необходимо зарегистрироваться для просмотра ссылки
открыта ли та форма с которой ее запустили.

У формы есть свойство Владелец, оно содержит данные о форме из которой была открыта текущая форма.
Gigi
Всем привет!
Уважаемые специалисты. не подскажете как получить список всех открытых управляемых Форм на клиенте для 1С 8.2?
Пожалуйста на примере кода если можно.
Буду признателен!


Gigi @ Сегодня, 16:27 необходимо зарегистрироваться для просмотра ссылки ,
Нарыл вот такое решение:
 Процедура СписокОткрытыхФорм() Экспорт
Для Каждого Справочник Из Метаданные.Справочники Цикл
   Для Каждого ТекФорма Из Справочник.Формы Цикл
       Форма = Справочники[Справочник.Имя].ПолучитьФорму(ТекФорма.Имя);
       Если Форма.Открыта() Тогда
           Сообщить(Справочник.Имя + " " + ТекФорма.Имя);
       КонецЕсли;
   КонецЦикла;
КонецЦикла;
КонецПроцедуры

Гуууу... тоже НЕ РАБОТАЕТ!
Gigi
logist @ Сегодня, 16:23 необходимо зарегистрироваться для просмотра ссылки ,
Это я знаю, но сделать через "Владелец" просто так не совсем устраивает.
Ладно перехожу к новой теме и формулирую тему иначе:
Вот так:
необходимо зарегистрироваться для просмотра ссылки
Буду признателен:
logist
Цитата(Gigi @ 15.06.17, 17:29) необходимо зарегистрироваться для просмотра ссылки
Ладно перехожу к новой теме и формулирую тему иначе:

Не надо.

Цитата(Gigi @ 15.06.17, 17:29) необходимо зарегистрироваться для просмотра ссылки
но сделать через "Владелец" просто так не совсем устраивает.

Почему не устраивает?
Gigi
Gigi @ Сегодня, 16:29 необходимо зарегистрироваться для просмотра ссылки ,
Хотя продолжая данную тему, а что если в перечислении создать элемент "ДаНет" с двумя значениями: Да/Нет
И вставить реквизит со ссылкой на этот элемент перечисления в нужную форму.
И таким образом регистрировать ПриОткрытии (Да) ПриЗакритии(Нет)
Это конечно изврат но все таки... как будет работать?


Цитата(logist @ 15.06.17, 16:37) необходимо зарегистрироваться для просмотра ссылки
Почему не устраивает?

Боковая панель навигации, которая появляться когда делаешь через Владелец. В моем случае думаю она совсем не нужна.
Мне просто нужно установить обмен данными между двумя справочниками без использования Владелец-подчиненный
А то "владелец", "родитель! Хорошо что еще бабушки и дедушки нет! smile.gifsmile.gif
Petre
Цитата(Gigi @ 15.06.17, 17:50) необходимо зарегистрироваться для просмотра ссылки
Боковая панель навигации, которая появляться когда делаешь через Владелец

О чем это вы?
logist
Цитата(Petre @ 15.06.17, 17:56) необходимо зарегистрироваться для просмотра ссылки
О чем это вы?

+1. Перечитал тему, как обычно не понял в чем задача, как обычно рискну предположить что она решается намного проще, чем вы тут изобретаете.
Gigi
Цитата(Gigi @ 15.06.17, 16:50) необходимо зарегистрироваться для просмотра ссылки
Это конечно изврат но все таки... как будет работать?

Так что, возвращаясь к такому решению вопрос.
Такое решение не опасно?
Ведь на клиенте пользователей будет несколько.
И вообще наСервере на клиенте. Последнее означает ли то, что событие смены параметра будет иметь отношение только к компьютеру одного пользователя?
logist
Цитата(Gigi @ 15.06.17, 17:59) необходимо зарегистрироваться для просмотра ссылки
Такое решение не опасно?

Это вообще не решение а шопопало
Gigi
Цитата(Petre @ 15.06.17, 16:56) необходимо зарегистрироваться для просмотра ссылки
О чем это вы?


Нужно без этого

Gigi @ Сегодня, 17:06 необходимо зарегистрироваться для просмотра ссылки ,
Мне нужно просто установить обмен данными между справочниками ПО СВОЕМУ УСМОТРЕНИЮ!
Без использования Владелец.
Ладно! Видимо это невозможно!
sava1
Цитата(Gigi @ 15.06.17, 17:59) необходимо зарегистрироваться для просмотра ссылки
на клиенте пользователей будет несколько


Они в очереди будут стоять?
Gigi
sava1 @ Сегодня, 17:15 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(sava1 @ 15.06.17, 17:15) необходимо зарегистрироваться для просмотра ссылки
Они в очереди будут стоять?

Не понял при чем очередь..
Просто дело в том, что на пример один пользователь открыл форму, и параметр из перечисления на форме стал "да". т.е. форма отрыта.
И в это самое время, вдруг бац и другой на другом компе закрыл эту форму пока у первого не закрыта и параметр стал "нет".
Иными словами повлияет ли все это негативно... не будет ли коллапс.
В таком случае нужно, что бы параметры открытости или закрытости формы работали только для одного компа.
И вопрос... решает ли этот вопрос такое решение:
Цитата(Gigi @ 15.06.17, 16:50) необходимо зарегистрироваться для просмотра ссылки
Хотя продолжая данную тему, а что если в перечислении создать элемент "ДаНет" с двумя значениями: Да/Нет
И вставить реквизит со ссылкой на этот элемент перечисления в нужную форму.
И таким образом регистрировать ПриОткрытии (Да) ПриЗакритии(Нет)
Это конечно изврат но все таки... как будет работать?
sava1
Цитата(Gigi @ 15.06.17, 18:24) необходимо зарегистрироваться для просмотра ссылки
один пользователь отрыл форму, и параметр из перечисления на форме стал "да". т.е. форма отрыта.
И в это самое время, вдруг бац и другой на другом компе закрыл эту форму пока у первого не закрыта


Вы вооще понимаете принцып асинхронных вызовов и работу клиент-сервера?
Вы никогда не найдете открытые формы , кроме своих.
Gigi
sava1 @ Сегодня, 17:30 необходимо зарегистрироваться для просмотра ссылки ,
Цитата(sava1 @ 15.06.17, 17:30) необходимо зарегистрироваться для просмотра ссылки
Вы вооще понимаете принцып асинхронных вызовов и работу клиент-сервера?
Вы никогда не найдете открытые формы , кроме своих.


Ну да... вообще как все работает в этом слабо... признаюсь.
просто разбираться в принципе работ и вдаваться во все это на это пока нет времени. Надо заканчивать то. что затянулось.
Все это ..... это уже отдельная история. Это надо сесть и во всем шаг за шагом доскональна разобраться.
А пока надо просто срочно сделать работу и успеть пока директор в отпуске. Что бы предложить практичный и работающий вариант разработки.
Хотя и написанный на очень грубом языке.
Мне просто нужно просто где то обозначить то, что указанная форма открыта и то, что форма закрыта
Если я события открытия и закрытия формы запишу на сервер, то как мне думается получиться чехорда.
Потому, что как мне понимается сервер ведь общего доступа. А клиент индивидуального. И каждый пользователь будет влиять на запись Да или Нет.
Блиин! Я уже думаю, может с каждым открытием формы создавать какой-нибудь блокнот с именем :"достало уже учиться" ... и с закрытием его удалять.
И так и дать понять машине указанная форма открыта или закрыта.
Вот до такого извращения уже дохожу.
Не мог бы кто подсказать что нибудь получше, чем этот ужас?
Мне просто нужно обозначить одно единственное!
ОТКРЫТА ЛИ УКАЗАННАЯ ФОРМА?
Всего лишь
Gigi
Gigi @ Вчера, 19:54 необходимо зарегистрироваться для просмотра ссылки ,
Уже решил вопрос.
Не знаю настолько вяжется но вроде, нормально работает! Без какого либо сбоя.
Вот в таком формате:
//########## МОДУЛЬ ФОРМЫ ЭЛЕМЕНТА СПРАВОЧНИКА: "ОБЪЕКТ" ##########
//Кнопка в форме справочника "ОБЪЕКТ" в командной панели динамического списка Справочника "ТОЧКА"
&НаКлиенте
Процедура Кнопка_ДобавитьТочкуУчета(Команда)
//===========================================
Если Объект.Код = ""  Тогда
Предупреждение("Для определения точек учета объект не сохранен!");
Перейти ~Выход;
КонецЕсли;
//===========================================
Форма_ТОЧКА = ПолучитьФорму("Справочник.ТОЧКА.ФормаОбъекта", новый Структура("Ключ", ,,ЭтаФорма));
//===========================================
ЭлементОбъекта=SubFx_СерверПойскЗапись.ПолучитьЭлементОбъектаПоКодуНомеру("Справочники","ОБЪЕКТ",Объект.Код); //функция из обшего модуля для получающая объект по коду/номеру
Форма_ТОЧКА.Объект.БалансоваяПринадлежность=ЭлементОбъекта; // Линия присваивания  реквизиту справочника ТОЧКА в данном случае с именем: "БалансоваяПринадлежность"
//===========================================
Форма_ТОЧКА.ОткрытьМодально();
//===========================================
Отобор_ТочкиУчета(); //Процедура отбора динамического списка справочника: "ТОЧКА" с увязкой их балансовой принадлежности.
~Выход:;
КонецПроцедуры

//########## МОДУЛЬ ФОРМЫ ЭЛЕМЕНТА СПРАВОЧНИКА: "ТОЧКА" ##########
&НаКлиенте
Процедура ПриОткрытии(Отказ)
//===================================================
Если Объект.Код="" и Объект.БалансоваяПринадлежность.Пустая() тогда
стрПредупреждение="Данный способ обычного создания новой учетной точки НЕ РЕКОМЕНДУЕТСЯ!
|Так как при нем нужно в ручном режиме указывать некоторые парамметры учетной точки. От которых зависит правильный учет данных!
|Что бы нужные для учета параметры устанавливались автоматический, новую учетную точку необходимо создавать ТОЛЬКО В ФОРМЕ ОБЪЕКТА!
|-----------------------------------------------------------------------------
|Открыть форму создания новой учетной точки?";
    Если Вопрос(стрПредупреждение,РежимДиалогаВопрос.ДаНет,,,"Создение точки учета обычным путем")=КодВозвратаДиалога.Да Тогда
    Иначе
    Отказ = Истина;
    КонецЕсли;        
КонецЕсли;
//===================================================
КонецПроцедуры

Вот собственно все что нужно было для преследуемой простой цели.
А что касается Владелец..Подчиненный.. Родитель... сынок и т.д.
Все это конечно очень хорошо и удобно. Но не всегда.
Как мне самому думается, владелец-подчиненный очень удобен, когда у одного справочника много справочников в подчинении ... пять шесть или двадцать.
Тогда та самая боковая панель навигации нужна и очень удобна.
Но в моем случае, речь всего лишь об одном владельце и подчиненном. А эта боковая панель ничему для всего лишь одной строки с боку.
В таком случае удобнее, роль этой строки перенести в группы(вкладки) с динамическим списком с нужными отбором.
Понятное дело, что это не совсем по стандарту, но лично для меня это НЕ АРГУМЕНТ!
Потому, что важно не то по стандарту или нет, а только то как удобнее пользоваться. Вот что важнее..
я почему все это говорю.
На эту тему ... в другой рубрике:
необходимо зарегистрироваться для просмотра ссылки
я был понят не правильно. и спор так затянулся, что наверно владелец сайта подумал.... когда они закончат эту свою болтовню smile.gifsmile.gif
На этот раз думаю буду правильно понят.
Вот собственно и все
Ладно! В любом случае спасибо Всем!













Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.