1с найти открытую форму
Открытие форм
Область применения: управляемое приложение, мобильное приложение.
1. Для открытия форм следует применять метод глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий - также ОткрытьФормуМодально ). Применение альтернативного способа, с получением формы и ее последующим открытием с помощью метода ПолучитьФорму , не рекомендуется.
Рекомендация обусловлена соображениями
- повышения устойчивости кода, работающего с формой, за счет разделения программного интерфейса для работы с формой и деталей ее внутренней реализации,
- а также сохранения единой стилистики кода прикладных решений.
Кроме того, применение глобального метода ОткрытьФорму гарантирует выполнение инициализации формы на сервере в обработчике ПриСозданииНаСервере . Этот подход помогает сосредоточить весь код инициализации формы в одном месте и исключает "случайное" обращение к серверу, связанное с инициализацией формы, между строками кода
2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.
Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).
3. Не следует применять другие способы параметризации формы при открытии. Например, нужно избегать обращения к методам и свойствам формы после ее открытия.
Например, вместо
следует по той же причине использовать параметры формы:
ОткрытьФорму("ОбщаяФорма.ПутеводительПоСистеме", Новый Структура("РежимОткрытия", "Приветствие"));
4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы
ФормаВопроса = ПолучитьФорму("ОбщаяФорма.ФормаВопроса");
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …
следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой:
Оповещение = Новый ОписаниеОповещения("БольшеНеПоказыватьНапоминаниеЗавершение", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ФормаВопроса". Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.
&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт
Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;
Если БольшеНеПоказыватьНапоминание Тогда
// …
При этом возвращаемое значение формы формируется в коде модуля формы с помощью метода формы Закрыть .
5. Другие ограничения:
- Обработчик события формы ПриОткрытии не должен содержать код по открытию какой-либо другой формы, так как это может привести к нарушению порядка отображения окон. В этом случае рекомендуется использовать обработчик ожидания на короткий интервал или открывать другие формы интерактивно, например, по нажатию на кнопку.
- Не рекомендуется выполнять программное открытие и закрытие формы в одном обработчике. Такие действия должны быть разнесены по времени. Например, закрытие формы можно выполнять в обработчике ожидания.
- При использовании в конфигурации Библиотека стандартных подсистем и разработке форм (рабочих мест), предназначенных только для внешних пользователей, следует явно блокировать открытие таких форм в сеансах "обычных" пользователей. Для этого следует устанавливать параметр Отказ при создании формы на сервере с помощью функции ЭтоСеансВнешнегоПользователя общего модуля Пользователи или ПользователиКлиент :
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
…
КонецПроцедуры
6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню "Все функции" вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:
Т.е. пользователь из формы списка открывает документ X, затем вводит на основании него документ Y.
Далее перед проведением документа Y надо убедиться, что закрыта форма документа основания (X) и если не закрыта, то принудительно ее закрыть. Как это сделать?
Пробовал так:
ВладелецФормы=Документы.X.ПолучитьФормуСписка().ЭлементыФормы.ТабличноеПоле;
Форма=ДокументОснование.ПолучитьФорму(,ВладелецФормы);
Не работает, смотрел в отладчике - разница в том что при моем вызове:
ВладелецФормы - содержит свойства: ТабличногоПоля + Расширения табличного поля списка документов + Расширение элементов управления, расположенных в форме.
А при стандартном вызове 1с передает только свойства: ТабличногоПоля + Расширения табличного поля списка документов.
Расширение элементов управления, расположенных в форме - почему-то не передается!
Кто сталкивался? Подскажите как разрешить?
P.S. Вариант подменить параметр ВладелецФормы при стандартном открытии из спика документа X не удобен т.к. документов вида X много.
1 - Вариант в общем-то. Но это не совсем то, что я хотел. Я хотел именно получить открытую форму - как это делает 1с (если ты откроешь форму документа X из кода через ПолучитьФорму() с любыми параметром ВладелецФормы, а потом в форме списка документа X - откроешь тот же документ - то 1с активизирует уже открытую форму, а не создаст новую) Недостаток предложенного тобой метода - что мне придется прописывать ОбработкаОповещения во многих документах.
2 - И как это использовать?
3 - Значение ЭтаФорма.ВладелецФормы - Неопределено
(5) - Будет получена форма нового документа. Форма.Открыта() - будет всегда ЛОЖЬ.
Мне надо найти открытую форму конкретного документа-объекта (например Документ.X N 15. А открытая форма другого документа, например Документ.X N 5 - мне не нужна)
ДокумантОбъектXN15.ПолучитьФорму();
или
ДокумантСсылкаXN15.ПолучитьФорму();
Синтаксис:
ПолучитьФорму(<Форма>, <Владелец>, <Ключ уникальности>)
Параметры:
.
<Ключ уникальности> (необязательный)
Тип: Произвольный. В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм.
При поиске учитываются значения свойств открытых форм соответствующим значениям параметров метода. Если найдена открытая форма (по совпадению всех параметров), то она будет возвращена вместо новой формы.
.
Попробуй просто для ссылки на док выполнить ПолучитьФорму("ФормаИлиКакТамОнаНазывается"). Если для данного дока форма открыта, то её и получишь. Я так делал
КлючУникальности - тот параметр, который нужен отцу демократии
Получаю новое окно, а не то которое открыл пользователь! У меня 8.1. А ты в какой верси пробовал что у тебя открытая пользователем форма получается?
Попробуй к качестве ключаУникальности послать ОбъектОснование. Он должен быть в свойствах открытой формы.
Спецально смоделировал.
Из формы документа вызывается внешняя обработка со своей формой, в которую отправляю ссылку на этот документ.
Во внешней обработке код на кнопке:
Никакой новой формы не открываетсо.
Версия 8. Как и написано в заголовке ветки.
Добавим новую форму с кнопкой, нажав на которую будет открываться окно выбора файла. Дальнейшая обработка файла в данном примере не рассматривается. Рекомендуется тренироваться на копии базы или пустой конфигурации. Пример создан на конфигурации 1С:CRM 3.0.
Сначала подготовим конфигуратор.
Заходим в конфигуратор 1С. Если конфигурация не открыта, открываем ее и снимаем с поддержки. В меню "Конфигурация" нажимаем "Открыть конфигурацию". Далее в меню "Конфигурация" нажимаем "Поддержка" и выбираем "Настройка поддержки". В окне нажимаем кнопку "Включить возможность изменения" и устанавливаем переключатели как на картинке. Нажимаем "Ок".
Теперь создадим простую обработку.
Находим в левой таблице объектов объект "Обработки", нажимаем на ней правой кнопкой мыши и выбираем "Добавить". Далее потребуется заполнить Имя обработки, указать, в какой подсистеме 1С хотите вызвать обработку, и добавить новую форму в разделе "Формы".
После создания формы появится окно как представлено ниже.
Теперь создадим команду формы "Загрузить" нажав на плюс в верхнем правом окне. Обязательно укажите свойство "Действие". Это будет название процедуры 1С.
Далее добавляем на форму кнопку "Загрузить", нажав на плюс в левом верхнем окне. Обязательно укажите свойство "ИмяКоманды". Здесь укажем название команды, которую создали на предыдущем шаге "Загрузить". В результате на форме появится кнопка "Загрузить".
Далее напишем небольшой код.
Внизу окна нажимаем на закладку "Модуль". У нас здесь уже есть пустая процедура. Добавляем в нее код.
ДиалогВыбора = новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Заголовок = "Выберите файл";
Если ДиалогВыбора.Выбрать() Тогда
В результате получится так как на рисунке ниже.
И в конце остается проверить в пользовательском режиме. Для этого нажимаем "Начать отладку" или F5. Конфигуратор спросит обновить ли конфигурацию базы данных. Отвечаем "Да" и у нас открывается 1С (режим пользователя). Далее находим подсистему, куда добавили обработку (в нашем случае это "Маркетинг") и проверяем.
На простейшем примере было показано как написать код, прикрепить его на форму и вызвать в пользовательском режиме 1С.
Читайте также: