1с открыть форму модально и вернуть значение

Возвращаемое значение формы открытой модально

Я в поле ввода Контрагент сделал процедуру проверки дублей. Открывается форма с ТЗ откуда выбираю строку и передаю обратно в форму. Но как то все у меня по гондураски вроде. Там ведь както по владельцу надо связывать и передавать возвращаемое значение. Тока я не умею. :(

Вот процедуры :
Какбы на форме владельце :

Процедура КонтрагентОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)

//РезультатЗапроса = ПроцедурыПоискаПоСтроке.ПолучитьРезультатЗапросаАвтоподбора(Текст, Новый Структура, Тип(«СправочникСсылка.Контрагенты»), 1);
//
//Если НЕ РезультатЗапроса.Пустой() Тогда
//ПроцедурыПоискаПоСтроке.ОкончаниеВводаТекстаВЭлементеУправления(Элемент, Текст, Значение, СтандартнаяОбработка, Новый Структура, ЭтаФорма, Тип(«СправочникСсылка.Контрагенты»), мОбработкаПоискаПоСтрокеКонтрагента, мТекстПоискаПоСтрокеКонтрагента, мПоследнееЗначениеЭлементаПоискаПоСтрокеКонтрагента, Ложь);
// Возврат;
//КонецЕсли;

Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЕСТЬNULL(Тел.Представление, «»»») КАК Тел,
| ЕСТЬNULL(Адр.Представление, «»»») КАК Адр,
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| КонтактнаяИнформация.Объект КАК Объект,
| КонтактнаяИнформация.Представление КАК Представление,
| КонтактнаяИнформация.Вид КАК ВидТел
| ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
| ГДЕ
| КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)) КАК Тел
| ПО (Тел.Объект = Контрагенты.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| КонтактнаяИнформация.Объект КАК Объект,
| КонтактнаяИнформация.Представление КАК Представление,
| КонтактнаяИнформация.Вид КАК ВидАдр
| ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
| ГДЕ
| КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)) КАК Адр
| ПО (Адр.Объект = Контрагенты.Ссылка)
|ГДЕ
| (Контрагенты.Наименование ПОДОБНО &Текст
| ИЛИ Тел.Представление ПОДОБНО &Текст
| ИЛИ Контрагенты.НаименованиеПолное ПОДОБНО &Текст
| ИЛИ Контрагенты.ИНН ПОДОБНО &Текст)
| И НЕ Контрагенты.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| Контрагенты.Наименование»;

Запрос.УстановитьПараметр(«Текст»,»%»+СокрЛП(Текст)+»%»);
Рез = Запрос.Выполнить();
Если Не Рез.Пустой() Тогда
Ф = ЭтотОбъект.ПолучитьФорму(«ПоборКонтрагента»,Контрагент);
Выб = Рез.Выбрать();
Ф.Заголовок = «Результаты поиска контраентов-«+Выб.Количество()+», по «»»+СокрЛП(Текст)+»»». Выберите нужного.»;
Пока Выб.Следующий() Цикл
НС = Ф.Контрагенты.Добавить();
НС.Контрагент = Выб.Ссылка;
НС.КонтактнаяИнформация = «(«+Выб.Ссылка.Код+») тел: «+Выб.Тел+», Адрес: «+Выб.Адр+»»;
КонецЦикла;
Ф.Объект = ЭтаФорма;
Ф.ОткрытьМодально();
Иначе
УправлениеКонтактами.РегистрироватьНовогоКонтрагента(Элемент, Текст, Значение, СтандартнаяОбработка, мОбработкаПоискаПоСтрокеКонтрагента, мТекстПоискаПоСтрокеКонтрагента, мПоследнееЗначениеЭлементаПоискаПоСтрокеКонтрагента, ЭтаФорма, Контрагент, Справочники.КонтактныеЛицаКонтрагентов.ПустаяСсылка(), Модифицированность, ДанныеНезарегистрированногоКонтрагента);
КонецЕсли;

А вот в на открываемой форме :

Перем Объект Экспорт;

Процедура КонтрагентыВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
Объект.ЭлементыФормы.Контрагент.Значение = ВыбраннаяСтрока.Контрагент;
ЭтаФорма.Закрыть();
ФанОбщий.ПолучитьКонтакты(ВыбраннаяСтрока.Контрагент,Объект.ЭлементыФормы.Контакты.Заголовок);

Источник

Модальные окна в управляемом приложении

category Программирование системы clock23.03.2017 08:06 eye8917

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

Управление режимом модальности

В новых версиях платформы добавилось новое свойство конфигурации «Режим использования модальности». Это свойство может быть установлено: Не использовать, Использовать с предупреждением, Использовать. С помощью данного глобального свойства устанавливается режим использования модальных окон во всей конфигурации.

Проблемы при открытии модальных форм на веб-клиенте

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

Имитация модальной формы методом ОткрытьФорму()

Для решения данных проблем в платформе был разработан новый механизм открытия модальных окон. Если в конфигурации стоит запрет на использование модальных окон, то нельзя использовать методы модального открытия окон. Однако, есть возможность сделать окно модальным с помощью метода ОткрытьФорму(). В этом методе появились новые параметры «РежимОткрытияОкна» и «ОписаниеОповещенияОЗакрытии».

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

Открытие модальной формы по умолчанию

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Источник

1С открыть форму модально

В общем виде задача отказа от модальности заключается в том, чтобы заменить модальные методы их асинхронными аналогами.

Старая процедура, открывавшая модальное окно и обрабатывавшая полученные им данные, могла выглядеть так:

a64e0b4534cfe3434b6f16000fd5484b

В новом варианте для формы ФормаВводТекста (которая будет открываться в блокирующем окне) нужно установить свойство РежимОткрытияОкна в значение БлокироватьВесьИнтерфейс. Это обеспечит модальность для пользователя:

64aedc39b9932a953c605563fa74e953

А программный код вместо одной процедуры, как раньше, будет содержать уже две процедуры:

c8193df2f0fc4c3f31765a364079469e

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

Когда пользователь введёт данные и закроет форму, они будут обработаны в указанной нами второй процедуре, в которую мы просто перенесли «старый» код, обрабатывающий полученные данные.

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

Использовать такие методы в немодальном режиме ещё проще. Для всех таких методов в платформе сделаны методы-дублёры, при вызове которых нужно так же указать местонахождение процедуры, которая будет выполнена после того, как пользователь закроет окно.

Например, ниже показано использование старого метода ВвестиЗначение() и его нового метода-дублёра ПоказатьВводЗначения():

6ad907b476853c5009fb436a5abc5306

В 8.3.5 можно выполнить автоматическое преобразование Модальных вызовов

Теперь в простых, и в не очень простых, случаях вы можете сделать это автоматически (команда Модальные вызовы – Преобразовать модальный вызов):

12a92d9a968d73c9efa74ab4676f0dfb

Если вы преобразуете модальную функцию, то платформа добавит инициализацию переменной, в которую возвращается значение функции. Потому что в общем случае эта переменная может использоваться далее в той же процедуре:

d5841a646f528620c34213d006197407

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

79110890d8a9f6e0294a37d1c6fba783

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

52d5affa9a5c7a310ed2fc92894cb688

Дело в том, что у глобального контекста нет свойства, позволяющего сослаться на него самого (ЭтотОбъект). А значит процедуру, обрабатывающую оповещение, нельзя разместить тут же, в модуле управляемого приложения. Её можно разместить, например, в каком-нибудь общем модуле. Эти действия вам нужно будет выполнить вручную:

Статья решает задачи:

Исходные данные:

1. Пишем процедуру по открытию «НашаФорма» и передаче в нее параметра «МножительА»

2. Пишем процедуру, которая при открытии «Наша форма» (в обработчике ПриСозданииНаСервере) будет заполнять реквизит «МножительА» по полученному значению

3. Пишем процедуру по вычислению результата умножения и возврату значения

Сайт о программировании в 1с версии 7.7 и 8.x

1 сентября 2011 г.

Модальное открытие формы в 1с 8. Как вернуть результат ОткрытьМодально()

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

Возникает проблема возврата результата, если форма не «для выбора»

В описании функции ОткрытьМодально() написано:

Форма.ОткрытьМодально (Form.DoModal)
ОткрытьМодально( )

Я специально выделил фразу цветом. Получается: если форма определена «для выбора» – то она возвращает выбранные значения
В любых других случаях будет возвращаться – Неопределено.

В этом случае есть несколько решений:
1. Получив доступ к форме, мы можем вызывать различные функции и получать переменные. Естественно нужно, чтобы эти функции имели статус Экспорт

Функция НашаФункция ( ПараметрыФункции ) Экспорт

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецПроцедуры

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

Источник

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

Пишу так:
ФормаВыбора = ПланыСчетов.Хозрасчетный.ПолучитьФормуВыбора();
ВыбранноеЗначение = ФормаВыбора.ОткрытьМодально();

Ошибка: Интерактивные операции недоступны

Пишу так:
ФормаОснования = ПолучитьФорму(«ПланСчетов.Хозрасчетный.ФормаВыбора»);
ВыбранноеЗначение = ФормаОснования.Открыть();

Ошибка:
Обращение к процедуре объекта как к функции (Открыть)
ВыбранноеЗначение = ФормаОснования.Открыть();
Как открыть форму выбора и сохранить выбранное значение для дальнейшего использования?

(0) Ты хоть скажи, с какой ты планеты (зачеркнуто) ОФ/УФ.

По контексту ОФ, но вдруг..

вот несколько примеров

Это сработает, если в форме выбора для списка на форме у тебя установлен признак «РежимВыбора».
Тогда когда в форме будет даблклик, в форму владельца (обработку) тебе прилетит событие формы ОбработкаВыбора() с выбранным значением.

(33) А что мешало посмотреть, как это работает в типовой конфе, да в той же бухгалтерии? Зачем вы пытались использовать модальный режим? В управляемых формах его практически не используют, в конфигураторе вообще может быть запрет на модальный режим. Вы могли просто открыть форму выбора, в данной форме после закрытия использовать команду ОповеститьОВыборе(результат). В форме источнике использовать событие обработка выбора и там уже обрабатывать полученный результат. Без всяких там доп оповещений.
пример:
&НаКлиенте

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • 1с открыть форму модально в управляемых формах
  • 1с открыть форму и заполнить реквизиты