Как получить список открытых окон 1С
В 1С есть возможность перебрать все открытые окна и проанализировать их содержимое. Рассмотрим работу с открытыми окнами на примере.
Ниже представлен код для решения поставленной задачи:
При нахождении нужного заголовка происходит получение управляемой формы и анализ реквизита «Контрагент». Если контрагент пустой, то текущее окно активизируется методом Активизировать () и выполнение процедуры прекращается.
Остались вопросы?
Спросите в комментариях к статье.
2 комментария
Здравствуйте, при написании этого кода:
Процедура СохранитьДанныеКлиенскогоПриложения()
Окна = ПолучитьОкна();
Для каждого Окно Из Окна Цикл
Формы = Окно.Содержимое;
Для каждого Форма из Формы Цикл
Если Форма.Модифицировать Тогда
Файл = Новый ЗаписьXML
ФАйл.ОткрытьФайл0(«D:/Working»+Форма,ИмяФормы».xml»);
СериализаторXDTO.ЗаписатьXML(Файл,Форма.Объект);
Файл.Закрыть();
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
После уго запуска высвечивает ошибку:
Поле объекта не обнаружено (Содержимое)
Добрый день!
Возможно, Вы пробуете выполнить код в режиме обычного приложения. В этом случае метод ПолучитьОкна() возвращает значение Неопределено. Данный метод работает только в режиме управляемого приложения. К тому же, «Окно» — это зарезервированная переменная в режиме управляемого приложения, необходимо использовать другую переменную.
получение формы открытого документа (обычные формы)
Объект = Выборка.ссылка.ПолучитьОбъект();
Номер = Объект.Ссылка.Номер;
Док=Документы.ЗаказПокупателя.НайтиПоНомеру(Номер);
П = Новый Структура(«Ключ», док);
мФорма = ПолучитьФорму(«Документ.ЗаказПокупателя.ФормаОбъекта»,П);
Если мФорма.Открыта() Тогда
мФорма.Прочитать();
Сообщить(«Не открыта»);
КонецЕсли;
вообще возможно ли получить форму открытого документа?
Удобнее всего использовать подобный код:
Курите в сторону ЗаблокироватьДанныеДляРедактирования.
Т.к. я очень сильно сомневаюсь, что вы получите формы, открытые в других сеансах
т.е код примерно такой:
Смотрите код внимательно.
(8) Очень сложно отлаживать программу не видя всего кода.
Ситуация как «у трёх слепых, изучающих одного слона»
Я исхожу из того, что код
Адекватный и там данные верные.
По идее, можно сразу получить форму
Исправил
Номер = Объект.ссылка.Номер;
ДатаД =Объект.ссылка.Дата;
Сообщить(«номер «+ номер+ » » +датаД);
Док=Документы.ЗаказПокупателя.НайтиПоНомеру(Номер,ДатаД);
Сообщить(«Док «+ Док.ссылка);
Сообщить(» открыта»);
иначе
Сообщить(«не открыта»);
КонецЕсли;
тут другое интересно
ДатаСв=Док.ссылка.ПолучитьФорму(«ФормаДокумента»).Дата;
Сообщить(«ДатаСв открыта»+ДатаСв);
ДатаСв открыта08.06.2015 12:57:28
те данные формы он видит
вот нашел но тоже не работает
Док1 = ТекДок.ПолучитьОбъект();
ФормаДок1 = Док1.ПолучитьФорму(«ФормаДокумента»);
Если ФормаДок1.Открыта() Тогда
(обязательный)
Тип: Строка.
Путь к файлу внешней обработки.
(необязательный)
(необязательный)
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Если параметр не указан, сначала всегда будет искаться уже открытая форма.
Открытие форм
Область применения: управляемое приложение, мобильное приложение.
Рекомендация обусловлена соображениями
2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.
Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).
3. Не следует применять другие способы параметризации формы при открытии. Например, нужно избегать обращения к методам и свойствам формы после ее открытия.
Например, вместо
ФормаПутеводитель = Форма.ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме»);
ФормаПутеводитель.Элементы.ГруппаШаг.ТекущаяСтраница = ФормаПутеводитель.Элементы.ГруппаШаг.Страницы.Приветствие;
следует по той же причине использовать параметры формы:
ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме», Новый Структура(«РежимОткрытия», «Приветствие»));
4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы
ФормаВопроса = ПолучитьФорму(«ОбщаяФорма.ФормаВопроса»);
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …
следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой:
Оповещение = Новый ОписаниеОповещения(«БольшеНеПоказыватьНапоминаниеЗавершение», ЭтотОбъект);
ОткрытьФорму(«ОбщаяФорма.ФормаВопроса». Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.
&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт
Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;
Если БольшеНеПоказыватьНапоминание Тогда
// …
5. Другие ограничения:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
…
КонецПроцедуры
6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню «Все функции» вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:
Функция ОткрытьФорму()
Открывает произвольную форму
Функция ОткрытьФорму() имеет несколько вариантов синтаксиса:
Вариант синтаксиса 1: По имени
Функция ОткрытьФорму() имеет следующий синтаксис:
А также альтернативный англоязычный синтаксис:
Параметры
Описание параметров процедуры ОткрытьФорму() :
Имя параметра | Тип | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Описание | ||||||||||||
ИмяФормы | Строка | |||||||||||
Имя формы, образованное как полный путь к объекту Форма в дереве метаданных (например, «Справочник.Номенклатура.Форма.ФормаОбъекта», «ОбщаяФорма.ФормаПредупреждения») или как полный путь к прикладному объекту, дополненный именем формы по умолчанию (например, «Справочник.Номенклатура.ФормаОбъекта»). Поддерживаются следующие формы по умолчанию: Применимо только для управляемой формы. | ||||||||||||
ОповещениеОЗакрытии (необязательный) | ОписаниеОповещения | |||||||||||
Содержит описание процедуры, расположенной в текущем или в общем модуле, которая будет вызвана при закрытии открываемой формы | ||||||||||||
РежимОткрытияОкна (необязательный) | РежимОткрытияОкнаФормы | |||||||||||
Указывает режим открытия окна управляемой формы. Используется только в управляемом приложении. Варианты значений: Возвращаемое значениеОписание варианта 1Вариант синтаксиса 2: По формеФункция ОткрытьФорму() имеет следующий синтаксис: А также альтернативный англоязычный синтаксис: ПараметрыОписание параметров процедуры ОткрытьФорму() :
Возвращаемое значениеОписание варианта 2Функция ОткрытьФорму() открывает форму, полученную ранее функциями ОткрытьФорму() или ПолучитьФорму() ДоступностьТонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент). Пример использованияПример кода с использованием процедуры ОткрытьФорму() : Работа с формами в «1С:Предприятии 8»Например, формы списков вы можете увидеть при открытии разнообразных справочников, журналов документов, списков записей в регистрах конфигурации и т. п. Например, вызывая справочник «Контрагенты», мы получаем на экране как раз такую форму-список (рис. 1).
Как правило, кроме собственно списка, у форм такого типа присутствует командная панель с кнопками-действиями, которые выполняются над элементами данного списка. При наведении (не нажатии!) мышью на одно из действий, вы получите краткое пояснения этого действия и «горячую» клавишу (или комбинацию клавиш) для его выполнения, если имеется такая возможность. Кроме этого, в командной панели, как правило, присутствует элемент «Действия», где собраны все действия, которые можно выполнять над элементами данного списка. При отметке какого-либо элемента в списке, можно нажать на нем правой кнопкой мыши. В результате вы получите список разрешенных действий для данного элемента. Некоторые действия одинаковы для всех списков, некоторые созданы разработчиками конфигурации и могут отсутствовать в других формах списков. Для часто используемых в форме списков действий назначены комбинации клавиш (подробнее об использовании «горячих» клавиш читайте в номере 10 (октябрь) «БУХ.1С» за 2007 год, стр. 8), использование которых повысит эффективность работы в программе: Действие Сочетание клавиш Активация действия в командной панели Добавить новый элемент Пометка на удаление Добавить группу (для справочников с иерархией) Переместить элемент в другую группу (для справочников с иерархией) Быстрый вход внутрь группы (для справочников с иерархией) Выход на уровень выше Добавить новый элемент копированием текущего Изменить текущий элемент В некоторых списках имеется возможность множественного выделения выбранных элементов с целью их групповой обработки. Для того, чтобы выделить несколько элементов (если это разрешено в списке), достаточно нажать клавишу Shift и прощелкать мышью необходимые элементы. Для этого можно использовать клавиши со стрелками (вверх, вниз, вправо, влево), включая привычное всем нам страничное листание (PageUp/PageDown) в сочетании с этими клавишами. Работают также общепринятые «горячие» клавиши: Действие Сочетание клавиш Выделить все от текущей позиции до начала списка Выделить все от текущей позиции до конца списка Выделить все элементы Копирование текстового представления текущей ячейки в списке элементов Форма спискаНапример, формы списков вы можете увидеть при открытии разнообразных справочников, журналов документов, списков записей в регистрах конфигурации и т. п. Например, вызывая справочник «Контрагенты», мы получаем на экране как раз такую форму-список (рис. 1). Как правило, кроме собственно списка, у форм такого типа присутствует командная панель с кнопками-действиями, которые выполняются над элементами данного списка. При наведении (не нажатии!) мышью на одно из действий, вы получите краткое пояснения этого действия и «горячую» клавишу (или комбинацию клавиш) для его выполнения, если имеется такая возможность. Кроме этого, в командной панели, как правило, присутствует элемент «Действия», где собраны все действия, которые можно выполнять над элементами данного списка. При отметке какого-либо элемента в списке, можно нажать на нем правой кнопкой мыши. В результате вы получите список разрешенных действий для данного элемента. Некоторые действия одинаковы для всех списков, некоторые созданы разработчиками конфигурации и могут отсутствовать в других формах списков. Для часто используемых в форме списков действий назначены комбинации клавиш (подробнее об использовании «горячих» клавиш читайте в номере 10 (октябрь) «БУХ.1С» за 2007 год, стр. 8), использование которых повысит эффективность работы в программе: Действие Сочетание клавиш Активация действия в командной панели Добавить новый элемент Пометка на удаление Добавить группу (для справочников с иерархией) Переместить элемент в другую группу (для справочников с иерархией) Быстрый вход внутрь группы (для справочников с иерархией) Выход на уровень выше Добавить новый элемент копированием текущего Изменить текущий элемент В некоторых списках имеется возможность множественного выделения выбранных элементов с целью их групповой обработки. Для того, чтобы выделить несколько элементов (если это разрешено в списке), достаточно нажать клавишу Shift и прощелкать мышью необходимые элементы. Для этого можно использовать клавиши со стрелками (вверх, вниз, вправо, влево), включая привычное всем нам страничное листание (PageUp/PageDown) в сочетании с этими клавишами. Работают также общепринятые «горячие» клавиши: Действие Сочетание клавиш Выделить все от текущей позиции до начала списка Выделить все от текущей позиции до конца списка Выделить все элементы Копирование текстового представления текущей ячейки в списке элементов Форма элементаЧтобы не перегружать наше восприятие, информационное наполнение формы распределяется в ней по нескольким закладкам. Для форм элементов характерно наличие командных панелей сверху и/или снизу открываемого окна. Это командные панели формы с действиями, которые относятся к открытому объекту конфигурации целиком. Обычно одна из команд назначена «кнопкой по умолчанию». Она активируется комбинацией клавиш Ctrl+Enter. Такая кнопка выделяется жирным (в нашем примере, это кнопка «ОК»). Как правило, на форме элемента четко можно определить разницу между командными панелями формы и вспомогательными командными панелями. Комбинация Alt+F10 работает и здесь, она активирует ту командную панель, с элементами которой пользователь работает в данный момент времени. Полезно знать, что практически все действия на форме элемента можно выполнять без использования мыши. Клавиатурное управление, как правило, значительно ускоряет процесс работы с данными. Например, нажатие на клавишу Enter или Tab, позволяет «перескакивать» с одного элемента формы на другой (следующий за ним). Нажатие Shift+Tab позволяет «скакать» по элементам в обратном направлении. Если вы находитесь в каком-либо поле ввода (например, на рис. 2 в группе контрагентов), достаточно написать первые буквы нужного вам элемента и нажать Tab и программа автоматически подставит нужный элемент в поле ввода (если он уникален в системе), либо предоставит автоматический список для уточнения вашего варианта. Действие Сочетание клавиш Открыть форму выбора нужного элемента Открыть форму элемента уже выбранного объекта в поле ввода Очистить поле ввода Быстрое переключение между закладками на форме, если они есть Ctrl+PageUp и Ctrl+PageDown Переключение активного элемента типа «Флажок» Отказаться от внесенных изменений в текстовых элементах формы Вернуть отмененное действие Закрытие практически любой формы Закрытие/открытие окна служебных сообщений (того, которое может появляться внизу) При вводе новых объектов конфигурации при помощи форм элементов, обязательные для заполнения поля подчеркнуты красным. Например, для документа «Реализация товаров и услуг: Продажа, комиссия» такими полями являются поле «Контрагент» и поле «Договор» (рис. 4). Выделять текстовые блоки можно мышью, а можно курсорами с нажатой клавишей Shift. Это бывает полезно для операций с буфером обмена. Форма выбораКак правило, в форме выбора можно выполнять массу подобных форме списка действий. Например, завести новый элемент. О том, какие действия возможны в данном случае, вы всегда сможете узнать из наполнения командной панели формы выбора и по тому, какие горячие клавиши работают, а какие нет. Форма группыДля каждого объекта конфигурации, может быть задано при разработке несколько форм: разнообразные формы элемента, выбора, вспомогательные формы. Необходимо это, в первую очередь, для облегчения ввода и обработки информации, хранящейся в этом объекте. То есть набор форм, как правило, определяется на этапе создания конфигурации и в разных конфигурациях может отличаться друг от друга даже для однотипных объектов (например, в типовых конфигурациях «Бухгалтерия предприятия» и «Управление торговлей»). В любом случае, поведение элементов, расположенных на форме, как правило, идентично с точки зрения возможностей управления ими мышью или «горячими» клавишами. Если специальных пояснений нет, то вам отобразится общая информация по работе с текущим типом формы. Вызвать справку можно, нажав клавишу F1. Кроме этого, в таком случае всегда доступны «горячие» клавиши Ctrl+Shift+Стрелка вверх и Ctrl+Shift+Стрелка вниз. |