Имя: Пароль:
1C
1С v8
Управляемое приложение. Передача данных между фомами.
0 Koliaff
 
27.07.12
15:39
Если из одной формы открывается другая то данные можно передать, поместив их во временное хранилище. И открыть форму передав временнное хранилище через СтрутураПараметров.

Пример :
ОткрытьФормуМодально("ВнешняяОбработка.УстановкаЦен.Форма.СправочникНоменклатура",СтрутураПараметров,ЭтаФорма);

Потом при открытии второй формы прочитать из временного хранилища переданные данные.


А как передать данные после выбора какого-нибудь значения во второй форме ? Т.е. необходимо во второй форме выбрать что-то, эту форму закрыть и вернуться к первой форме. Но чтобы выбранное значение во второй форме передалось в первую ?
1 Bober
 
27.07.12
15:45
при закрытии формы возвращать значение и ссылку на временное хранилище
2 Koliaff
 
27.07.12
15:47
(Bober) Каким образом ? Когда из первой формы открывается вторая явно указывается Структура параметров, к которым привязано временное хранилище. А в случае закрытии второй формы как передать первой форме эту структуру параметров ?
3 Neeki
 
27.07.12
15:54
Попробуй открыть модально форму, и после закрытия получить реквизит формы.

СтруктураПараметровПодбора = Новый Структура();
СтруктураПараметровПодбора.Вставить("Контрагент", Объект.Контрагент);
ФормаВыбора = ПолучитьФорму("Документ._СчетНаОплату.Форма.ФормаВыбораПоступленияУправляемая",СтруктураПараметровПодбора,ЭтаФорма);
ФормаВыбора.ОткрытьМодально();
//теперь получим нужные данные из формы        
Результат = ФормаВыбора.ТЗ_Рез;

Где ТЗ_Рез - реквизит ФормыВыбора
4 Koliaff
 
27.07.12
16:13
(Neeki) Большое спасибо ! Получилось !!!
5 jump if overflow
 
27.07.12
16:14
в УТ 11 подбор через опвещение сделан

во второй форме

&НаКлиенте
Процедура СписокНоменклатурыВыборЗначения(Элемент, Значение, СтандартнаяОбработка)
........
ОповеститьОВыборе(Структура); //оповещаем форму владельца
.......

в первой форме

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
.......
6 Koliaff
 
27.07.12
16:17
(jump if overflow) Спасибо, возьму на заметку !
7 Ranger_83
 
27.07.12
16:26
Выполнение подбора элементов(взято из http://its.1c.ru/db/v8std#content:2149184136:1)

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

В этом случае не рекомендуется передавать потенциально большой массив данных в качестве параметра формы подбора. Потенциально большой массив данных, хранимый в форме подбора в параметре типа ДанныеФормыКоллекция, может оказаться на клиенте не полным за счет оптимизации работы управляемой формы. Как результат – для передачи параметра будет выполнено дополнительное "дочитывание" данных формы с сервера.

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

Проиллюстрируем методику использования формы подбора на примере подбора элементов справочников Товары в табличную часть Товары документа РасходТовара. (Из демонстрационной конфигурации по платформе 1С:Предприятие).

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

&НаКлиенте
Процедура ОбработчикКомандыПодбора()
АдресТоваровВХранилище = ПоместитьТоварыВХранилище();
ПараметрыПодбора = Новый Структура("АдресТоваровДокумента, ВидЦен, Склад", АдресТоваровВХранилище, Объект.ВидЦен, Объект.Склад);
ФормаПодбора = ОткрытьФорму("Документ.РасходТовара.Форма.ФормаПодбора", ПараметрыПодбора, ЭтаФорма);
КонецПроцедуры
Копировать в буфер обмена

&НаСервере
// Функция помещает список товаров во временное хранилище и возвращает адрес
Функция ПоместитьТоварыВХранилище()
Возврат ПоместитьВоВременноеХранилище(Объект.Товары.Выгрузить(,"Товар,Цена,Количество"), УникальныйИдентификатор);
КонецФункции

Форма подбора получает список выбранных товаров из временного хранилища в обработчике ПриСозданииНаСервере:
Копировать в буфер обмена

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
АдресТоваровДокумента = Параметры.АдресТоваровДокумента;
Товары.Загрузить(ПолучитьИзВременногоХранилища(АдресТоваровДокумента));

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

Закрытие формы подбора должно приводить не более чем к двум обращениям на сервер. При закрытии форма подбора помещает список выбранных товаров во временное хранилище (первый вызов):
Копировать в буфер обмена

&НаКлиенте
Процедура ОКВыполнить()
ЗаписатьПодборВХранилище();
ВладелецФормы.ОбработатьПодбор();
Закрыть();
КонецПроцедуры
Копировать в буфер обмена

&НаСервере
Процедура ЗаписатьПодборВХранилище()
ПоместитьВоВременноеХранилище(Товары.Выгрузить(), АдресТоваровДокумента);
КонецПроцедуры

Затем форма документа восстанавливает список товаров из временного хранилища (второй вызов на сервер):
Копировать в буфер обмена

&НаКлиенте
Процедура ОбработатьПодбор() Экспорт
ПолучитьТоварыИзХранилища(АдресТоваровВХранилище);
КонецПроцедуры
Копировать в буфер обмена

&НаСервере
Процедура ПолучитьТоварыИзХранилища(АдресТоваровВХранилище)
Объект.Товары.Загрузить(ПолучитьИзВременногоХранилища(АдресТоваровВХранилище));
КонецПроцедуры
8 lucifer
 
27.07.12
16:29
в первой форме:

ответ = ОткрытьФормуМодально("ВнешняяОбработка.УстановкаЦен.Форма.СправочникНоменклатура",СтрутураПараметров,ЭтаФорма);

Форма какую открываем:

закрыть(твои данные);

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