Имя: Пароль:
1C
 
v8.2 - Передача значений в другую форму
0 badboychik
 
04.07.10
09:29
Хочу из одной формы передать данные в другую. Вторая форма не привязана к справочникам. Пробовал создавать параметр на закладке, но не могу с клиента в него ничего записать. Попробовал открывать форму с передаваемым параметром, но нигде не написано как его взять в этой ОТКРЫТОЙ форме. Уже склоняюсь к глобальным переменным :(
1 Armando
 
04.07.10
11:15
>>но нигде не написано как его взять в этой ОТКРЫТОЙ форме
Параметры.ТвойПараметр
2 badboychik
 
04.07.10
12:21
если бы так просто!.. пишет что поле не обнаружено.
запрашиваю его в процедуре на клиенте, которая выполняется при нажатии кнопки на форме. Сделал даже отдельную функцию на сервере, все равно не достучаться. В книге радченко ничего про параметры форм не сказано. МОжет лучше через реквизиты попробовать?
3 EvgeniuXP
 
04.07.10
12:30
Форма=ПолучитьФорму("...");
Форма.ТвойРеквизит=ЗначениеТвоегоРеквизита;
Форма.ОткрытьМодально(); - можно так
4 EvgeniuXP
 
04.07.10
12:32
во второй строке только тип соблюдай (ДанныеФормы)
5 Asmody
 
04.07.10
12:35
это принципиальная позиция - не читать то, что написано в документации, хотя бы СП?

Глобальный контекст (Global context)
ОткрытьФорму (OpenForm)
Вариант синтаксиса: По названию

Синтаксис:

ОткрытьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>)
Параметры:

<ИмяФормы> (обязательный)

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

<Параметры> (необязательный)

Тип: Структура. Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра
структуры.

П = Новый Структура("Ключ", Поставщик);
ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", П);
6 YF
 
04.07.10
12:46
(5) Только что попробовал - не работает:
Форма1 - команда:

п = Новый Структура("Ключ", "Золотой ключик");
ОткрытьФорму("ОбщаяФорма.ФормаВторая", п);

Форма2 - при открытии
&НаКлиенте
Процедура ПриОткрытии(Отказ)
   Сообщить(Параметры.Свойство("Ключ"));
КонецПроцедуры

Сообщает "Нет"
7 badboychik
 
04.07.10
13:02
(6) во во, я также делаю
8 EvgeniuXP
 
04.07.10
13:10
а чем (3) не устраивает?
9 Asmody
 
04.07.10
13:38
(6) потому что неправильно делаешь. какое слово из [Тип: Структура. Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра] непонятно?
10 Asmody
 
04.07.10
13:39
(9)+ еще рекомендую почитать в СП про предопределенный параметр "Ключ"
11 GROOVY
 
модератор
04.07.10
13:40
Через временное хранилище еще можно, если много чего передавать надо.
12 Asmody
 
04.07.10
13:43
(11) тут на лицо конкретное непонимание основных механизмов, а ты им ВХ рекомендуешь. сейчс ведь посыпятся вопросы типа "как сделать глобальную переменную типа ХранилищеЗначения"
13 Defender aka LINN
 
04.07.10
13:45
(6) ПриОткрытии - не первая процедура, которая вызывается, если что.
14 EvgeniuXP
 
04.07.10
13:45
(0) автор передает данные формы, а что под ним подразумевает - непонятно, можно ключ передавать, можно реквизиты.
15 YF
 
04.07.10
17:00
(9) Вроде все слова понятные, видать не так как задумывали разработчики.
Ты объясни, я пойму.
16 Asmody
 
04.07.10
17:08
(15) в форме на закладке Параметры создаешь параметр "МойПараметр". Затем в другой форме пишешь:

Параметры=Новый Структура("МойПараметр",ЗначениеПараметра);
ОткрытьФорму(ИмяФормы, Параметры);
17 YF
 
04.07.10
17:14
(16) Прикольно, а вот так работает без создания параметров:

Первая форма:

&НаКлиенте
Процедура ОткрытьФормуКомандой(Команда)
   // Вставить содержимое обработчика.
   п = Новый Структура("Креп", 123);
   ОткрытьФорму("ОбщаяФорма.ФормаВторая", п);
КонецПроцедуры


Вторая форма:

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


Чесно говоря из описания в СП не понятно почему дальше создания на сервере параметр не живет

+
Создал в вызываемой форме пааметр "Креп", при открытии вызываю:
Сообщить(Параметры.Свойство("Креп")); - все равно "Нет" говорит
18 EvgeniuXP
 
04.07.10
17:18
(17) потому что клиент видит тип "ДанныеФормы".
19 Эстет хренов
 
04.07.10
17:21
может в 8.2 правильней использовать ОбработкаОповещения ?
20 YF
 
04.07.10
17:22
(18) Ну дык уже после открытия формы, по кнопке делаю следующее:

&НаКлиенте
Процедура КомандаСообщитьПараметры(Команда)
   Сообщить(ПоКоманде());
КонецПроцедуры

&НаСервере
Функция ПоКоманде()
   Возврат Параметры.Свойство("Креп");    
КонецФункции

Опять говорит "Нет", если бы параметр был жив, то с сервера-то был бы виден, причем на данный момент я создал в форме параметр "Креп" как говорил (16)
21 Asmody
 
04.07.10
18:16
(17) книга "Руководство разработчика", стр. 1-376, написано:
"После вызова обработчика ПриСозданииНаСервере все неключевые параметры формы удаляются из коллекции Параметры"
22 YF
 
04.07.10
19:15
(21) Спасибо, что научил читать документацию. Может и автор почитает, а то совсем потерялся.
23 EvgeniuXP
 
04.07.10
19:15
тоже надо научиться читать :(
24 badboychik
 
04.07.10
21:11
(16) вот так получилось :)
(17) не получается без параметров - пишет что не найдено поле.
В ИТОГЕ как сделал:

// Первая форма с параметрами параметр1 и параметр2:
// Обработчик кнопки
ключ = новый структура("параметр1,параметр2",значение1,Значение2);
ОткрытьФорму("ОбщаяФорма.ИмяФормы",Ключ);

// Вторая форма с реквизитами рек1, рек2
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   рек1 = Параметры.Параметр1;
   рек2 = Параметры.Параметр2;
КонецПроцедуры

и потом в любом месте формы2 можно обращаться к реквизитам рек1 и рек2...

P.S. А как код оформлять? в правилах и описании не нашел
25 badboychik
 
04.07.10
21:12
код сам распознался, чудеса какието :)))
26 Asmody
 
04.07.10
21:17
(25) "Фрагменты программ рекомендуется отделять от основного текста пустыми строками, тогда они будут более точно распознаваться движком форума и раскрашиваться. Если фрагмент достаточно маленький (1-2 строки или не на языке 1С, то его можно отформатировать принудительно, заключив в теги здесь фрагмент). Эту возможность можно использовать только для фрагментов программ и таблиц, больше ни для чего. Нельзя так выделять обычные фразы, что рассматривается как нарушение сетевого этикета (правило №7)."

http://www.forum.mista.ru/about.php