Режимоткрытияокнаформы блокироватьокновладельца не работает

Программирование в 1С для всех

Любой начинающий разработчик управляемого приложения 1С, который дошел до открытия управляемых форм заметил, что новая форма открывается всегда не поверх текущего окна, а в соседнем окне. Этот режим открытия называют Независимым. Но очень часто для удобства работы пользователей форму нужно открыть именно поверх всех имеющихся окон. Разберемся, как это работает.

Прежде чем изучать открытие формы программно, познакомимся с очень интересным свойством управляемой формы 1С, которое называется РежимОткрытияОкна. Именно это свойство отвечает, каким образом откроется новое окно. Это свойство принимает три значения: Независимый, Блокировать окно владельца и Блокировать весь интерфейс.

Если у формы 1С установлен Независимый режим открытия окна, то форма откроется в отдельном окне, как на рисунке ниже.

Здесь и далее приведена конфигурация из книги «Основы разработки в 1С: Такси».

В том случае если установлен режим Блокировать окно владельца или Блокировать весь интерфейс, то форма откроется по верх всех окон.

Только в случае режима Блокировать окно владельца, будет заблокирована форма, в которой было инициализировано открытие новой формы. А в случае режима Блокировать весь интерфейс заблокируется весь интерфейс программы 1С. По сути, форма откроется в модальном режиме.

Со свойством формы разобрались, перейдем к открытию формы при помощи программного кода. Делать мы это будем при помощи уже знакомого нам метода ОткрытьФорму. Как работает этот метод, читайте в моей статье:

У этого метода есть последний седьмой параметр, который называется РежимОткрытияОкна, этот параметр имеет тип системное перечисление РежимОткрытияОкнаФормы, которое содержит в себе уже знакомые нам режимы: Независимый, Блокировать окно владельца и Блокировать весь интерфейс.

Если мы в методе ОткрытьФорму установим в седьмой параметр какое-либо значение, то форма откроется согласно этому значению.

Ниже приведены все три варианта открытия окна формы с использованием параметра РежимОткрытияОкна:

ОткрытьФорму ( «Документ.УстановкаЦен.Форма.ФормаДокумента» .
РежимОткрытияОкнаФормы . Независимый );

ОткрытьФорму ( «Документ.УстановкаЦен.Форма.ФормаДокумента» .
РежимОткрытияОкнаФормы . БлокироватьОкноВладельца );

ОткрытьФорму ( «Документ.УстановкаЦен.Форма.ФормаДокумента» .
РежимОткрытияОкнаФормы . БлокироватьВесьИнтерфейс );

Изучайте управляемые формы 1С с моими статьями:

Открытие управляемой формы существующего объекта

Открытие управляемой формы 1С на основании другого объекта

Открытие обычной формы в управляемом приложении 1С

Очень подробно вопросы по работе с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 15% — 48PVXHeYu

Читайте также:  Firefox как настроить печать без сохранения файлов

Многие начинающие думают, что изучить язык программирование в 1С сложно и трудно. В действительности программировать в 1С — легко. Помогут Вам легко и быстро освоить программирование в 1С мои книги: «Программировать в 1С за 9 шагов» и «Основы разработки в 1С: Такси»

Изучите программирование в 1С с помощью моей книги «Программировать в 1С за 9 шагов»

  1. Без сложных технических терминов.
  2. Более 500 страниц практического материала.
  3. Каждое задание сопровождается рисунком (скриншот).
  4. Сборник задач для домашней проработки.
  5. Книга написана понятным и простым языком — для новичка.
  6. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 16%: vCph8bW3rE


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей

Источник

Режим открытия окна формы

У меня вопрос.
Есть оповещение, форма которого открывается с параметром

Из этой формы можно создать новый документ.
Как из формы оповещения открыть форму документа, чтобы она цеплялась к списку открытых документов?

Раз в пол часа, если это требуется, открывается общая форма, которая блокирует весь интерфейс пользователя. Если оповещение появилось, его обязательно нужно отработать.
И этой общей формы может формироваться новый документ.
Как из формы оповещения открыть форму документа, чтобы она цеплялась к списку открытых документов?

(4) Нет. Типовое оповещение не особо информативно, поэтому есть обработчик ожидания, который запускается ПередНачаломРаботыСистемы.

Этот обработчик проверяет необходимость показа оповещения, собирает необходимую информацию и открывает общую форму, которая блокирует весь интерфейс пользователя, чтобы тот не мог как-то пропустить данное оповещение.

(7) У меня общая форма, которая открывается в режиме блокировки всего интерфейса.
Далее из этой общей формы по кнопке открывается новый документ, которого в 1С еще нет. По умолчанию он открывается не в окне клиентского приложения, а отдельно и в панель открытых не попадает. Мне же нужно, чтобы форма нового документа открывалась в том же окне (основном) и отображалась в панели открытых.

(8) Сначала подумал, раз у меня открывается форма в отдельном окне, то вернуться в основное окно возможности уже нет, но стандартными средствами (Ctrl+Shift+F4) документ из отдельного окна открывается в основном. Значит, все таки, возможность есть. Смотрю на владельца уже открытых форм — везде Неопределено. CrazyFace
Если в качестве владельца передать основное окно, то форма нового документа открывается в отдельном окне.
Если в качестве владельца передать элемент формы, которая открыта в основном окне результат тот же.

(10) Перепробовал четыре варианта, но нужного результата не добился.

(11) Сначала пользователю необходимо ввести число — номер заявки. Это реализовано так:

Вместо ПоказатьВводЧисла() нарисовал свою форму, которая служит для ввода числа.

Если эту форму открыть в режиме РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс, тогда следующее окно открывается отдельно.
Если эту форму открыть в режиме РежимОткрытияОкнаФормы.БлокироватьОкноВладельца, тогда следующее окно открывается в основном.

Не исключаю, что это проблема платформы 8.3.15.1534, а может так и задумано.

Источник

1С. ОписаниеОповещения

ОписаниеОповещения — объект встроенного языка 1С:Предприятия, указывающий на процедуру, в которой будет продолжено исполнение кода при наступлении определенного события.

Вслед за браузерами, которые отказались от модальности, технологической платформе пришлось перейти на асинхронную работу клиентской части. Необходимо это было для поддержки веб-клиента.

Читайте также:  Как настроить ответ сервера 301

Ведь формы выбора файлов, вопросов, предупреждений, ввода значений, да и зачастую формы, от результата работы в которых зависит дальнейший ход событий, были модальными.

Основным инструментом отказа от модальности стало ОписаниеОповещения.

Как работает ОписаниеОповещения

Для начала разберем как работает платформа с модальными окнами на примере метода Вопрос(). Напишем не хитрый код, в котором пользователю показывается диалог с вопросом и вариантами ответа Да и Нет.

В данном случае пользователю будет показан диалог, а работа клиентской части будет полностью приостановлена до момента, пока пользователь не ответит на вопрос.

Тогда результат поместится в переменную Ответ и только после этого работа клиентской части будет возобновлена для выполнения алгоритма заполнения.

Напишем аналогичный пример, но уже без модального вызова. Будем использовать метод ПоказатьВопрос(), которому передадим ОписаниеОповещения.

Пользователь не заметит разницы, ведь будет показан точно такой же диалог с вопросом. Но исполнение кода не будет приостановлено, вместо этого будет исполнен дальнейший алгоритм и будет завершена работа текущей процедуры.

После ответа пользователя будет вызвана процедура ОбработатьОтветПользователя(), которую мы указали в конструкторе ОписаниеПоповещения и только тогда будет выполнен алгоритм заполнения.

Описание функционала от разработчиков на ИТС

Синтаксис

Конструктор ОписаниеОповещения имеет 5 необязательных параметров:

ИмяПроцедуры — Имя экспортируемой процедуры, которая будет вызвана;

Модуль — Модуль в котором расположена вызываемая процедура. Могут быть указаны Форма, Общий модуль, Команда командного интерфейса;

ДополнительныеПараметры — Произвольное значение, которое будет передано в вызываемую процедуру последним параметром;

ИмяПроцедурыОбработкиОшибки — Имя экспортируемой процедуры, которая будет вызвана в случае ошибки;

МодульОбработкиОшибки — Модуль в котором расположена вызываемая процедура в случае ошибки. Могут быть указаны Форма, Общий модуль, Команда командного интерфейса.

Вызываемая процедура и её параметры

Вызываемая процедура должна быть экспортируемой, и в самом простом случае содержать два параметра Результат и ДополнительныеПараметры.

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

Например вызываемая процедура для обработки оповещения метода глобального контекста НачатьПомещениеФайла() должна иметь 4 параметра.

Для избежания ошибок обращайтесь к Синтаксис-помощнику, там описано количество и порядок необходимых параметров.

Выполнение обработки оповещения

В платформе реализован метод ВыполнитьОбработкуОповещения(), для возможности непосредственного выполнения обработки оповещения.

Методу в качестве параметра необходимо передать ОписаниеОповещения, которое будет выполнено. Так же можно передать в процедуру обработки произвольный результат вторым необязательным параметром.

Работа на сервере

ОписаниеОповещения не доступно на сервере, но в качестве исполняемой процедуры можно указать серверный метод. В справке нет явного указания о данной возможности, но и противоречий нет.

Возможные ошибки

Не найден экспортируемый метод

Если вызываемая процедура не экспортная, то при исполнении будет вызвано исключение. Решается указанием экспортной процедуры.

Количество параметров 1. Ожидаемое количество – 2

Если вызываемая процедура будет объявлена с одним параметром, то при исполнении будет вызвано исключение. Решается добавлением второго параметра в вызываемую процедуру.

Примеры использования ОписаниеОповещения

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

Оповещение о закрытии формы

Реализуем функционал открытия формы подбора с дальнейшей обработкой результата

Ввод значений и предупреждения

Реализуем функционал ввода числа. После ввода выполним проверку на четность введенного числи, если число не четное выведем предупреждение

Проверка существования файла и передача описания оповещения через дополнительные параметры

При работе на стороне клиента, например с оборудованием, логику работы системы можно организовать при помощи оповещений. Можно передавать ОписаниеОповещения в качестве следующего шага, ветвления логики или вызывать одно оповещение из нескольких мест.

Читайте также:  Mw 1751w не работает насос

Разработаем функционал проверки существования файла. В модуле реализована процедура для централизованной обработки ошибок ОповеститьОбОшибке(), будем передавать ОписаниеОповещения об ошибке через дополнительные параметры.

Обработаем результат проверки существования файла. Если файл не существует, выполним обработку оповещения переданного через дополнительные параметры

Процедура для централизованной обработки ошибок

Источник

Открытие форм

Область применения: управляемое приложение, мобильное приложение.

1. Для открытия форм следует применять метод глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий — также ОткрытьФормуМодально ). Применение альтернативного способа, с получением формы и ее последующим открытием с помощью метода ПолучитьФорму , не рекомендуется.

Рекомендация обусловлена соображениями

  • повышения устойчивости кода, работающего с формой, за счет разделения программного интерфейса для работы с формой и деталей ее внутренней реализации,
  • а также сохранения единой стилистики кода прикладных решений.

Кроме того, применение глобального метода ОткрытьФорму гарантирует выполнение инициализации формы на сервере в обработчике ПриСозданииНаСервере . Этот подход помогает сосредоточить весь код инициализации формы в одном месте и исключает «случайное» обращение к серверу, связанное с инициализацией формы, между строками кода

2. В случаях когда форма требует параметризации при открытии, все ее параметры следует указывать в наборе параметров формы. Таким образом, набор параметров формы декларативно описывает возможности формы по ее параметризации.

Параметры формы из этого набора могут быть указаны в вызывающем коде при открытии формы ( ОткрытьФорму ).

3. Не следует применять другие способы параметризации формы при открытии. Например, нужно избегать обращения к методам и свойствам формы после ее открытия.
Например, вместо

ФормаПутеводитель = Форма.ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме»);
ФормаПутеводитель.Элементы.ГруппаШаг.ТекущаяСтраница = ФормаПутеводитель.Элементы.ГруппаШаг.Страницы.Приветствие;

следует по той же причине использовать параметры формы:

ОткрытьФорму(«ОбщаяФорма.ПутеводительПоСистеме», Новый Структура(«РежимОткрытия», «Приветствие»));

4. Для получения результата работы формы, вместо непосредственного обращения к элементам и реквизитам формы

ФормаВопроса = ПолучитьФорму(«ОбщаяФорма.ФормаВопроса»);
ФормаВопроса.ОткрытьМодально();
Если ФормаВопроса.БольшеНеПоказыватьНапоминание Тогда
// …

следует использовать процедуры-обработчики оповещений, которые будут вызваны при завершении работы пользователя с формой:

Оповещение = Новый ОписаниеОповещения(«БольшеНеПоказыватьНапоминаниеЗавершение», ЭтотОбъект);
ОткрытьФорму(«ОбщаяФорма.ФормаВопроса». Оповещение, РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс);
.

&НаКлиенте
Процедура БольшеНеПоказыватьНапоминаниеЗавершение(БольшеНеПоказыватьНапоминание, Параметры) Экспорт

Если БольшеНеПоказыватьНапоминание = Неопределено Тогда
Возврат;
КонецЕсли;

Если БольшеНеПоказыватьНапоминание Тогда
// …

При этом возвращаемое значение формы формируется в коде модуля формы с помощью метода формы Закрыть .

5. Другие ограничения:

  • Обработчик события формы ПриОткрытии не должен содержать код по открытию какой-либо другой формы, так как это может привести к нарушению порядка отображения окон. В этом случае рекомендуется использовать обработчик ожидания на короткий интервал или открывать другие формы интерактивно, например, по нажатию на кнопку.
  • Не рекомендуется выполнять программное открытие и закрытие формы в одном обработчике. Такие действия должны быть разнесены по времени. Например, закрытие формы можно выполнять в обработчике ожидания.
  • При использовании в конфигурации Библиотека стандартных подсистем и разработке форм (рабочих мест), предназначенных только для внешних пользователей, следует явно блокировать открытие таких форм в сеансах «обычных» пользователей. Для этого следует устанавливать параметр Отказ при создании формы на сервере с помощью функции ЭтоСеансВнешнегоПользователя общего модуля Пользователи или ПользователиКлиент :

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
…
КонецПроцедуры

6. Следующие виды форм должны быть всегда доступны пользователю в режиме 1С:Предприятия из меню «Все функции» вне зависимости от того, размещены ли соответствующие объекты в командном интерфейсе приложения или нет:

Источник

Оцените статью