Имя: Пароль:
1C
1С v8
Вопрос по управляемым формам.
,
0 Triumph
 
29.07.11
14:59
Имеется обработка с двумя формами, одна из них основная, из основной вызываю вторую форму:
Процедура СменаУстановщика(Команда)
ПолучитьФорму("Обработка.АРМ.форма.ФормаСменыУстановщика");
   //ф = ЗаполнитьСменуУстановщика(ф);    
   Результат = ОткрытьФормуМодально("Обработка.АРМ.форма.ФормаСменыУстановщика");    
КонецПроцедуры
1 Ненавижу 1С
 
гуру
29.07.11
14:59
прекрасно
2 Wobland
 
29.07.11
15:00
Форма=ПолучитьФорму()
Результат=Форма.ОткрытьМодально()
не?
3 Wobland
 
29.07.11
15:00
(0) кстати, да, это ты хвастаешься?
4 Triumph
 
29.07.11
15:01
(0)в открывшейся форме реквизиты объекта которые были заполнены - пустые, как открыть эту форму в контексте текущей обработки, чтобы увидеть заполненные реквизиты объекта?
5 Ник второй
 
29.07.11
15:01
Передать параметры формы. СП отняли ?
6 almar
 
29.07.11
15:02
(4) Передать в Параметрах
7 Triumph
 
29.07.11
15:02
(1)браузер чегото подвис, а тут так оперативненько налетели желающие помочь)
8 Ник второй
 
29.07.11
15:03
(7) Поможем , еще нагоним и еще поможем.
9 Triumph
 
29.07.11
15:05
Насчет параметров, можно пример?как их передать если там ссылочные типы?
10 Triumph
 
29.07.11
15:28
Вообщем ничего не сдвинулось,делаю так:
&НаКлиенте
Процедура СменаУстановщика(Команда)
   ПараметрыФормы = новый Структура("Карта, СтарыйУстановщик",Объект.НайденнаяКарта,Объект.ТекущийУстановщик);    
   Результат = ОткрытьФормуМодально("Обработка.АРМ.форма.ФормаСменыУстановщика",ПараметрыФормы);    
КонецПроцедуры

У ФормаСменыУстановщик есть реквизиты формы Карта и СтарыйУстановщик, но они не заполняются:( Как быть?
11 Axel2009
 
29.07.11
15:43
реквизиты формы которые в плюсике у Объект? или реквизит формы, который сам добавлял?
12 anastasia1188
 
29.07.11
15:45
1-ый вариант: посмотри ДанныеЗаполнения при передачи формы.
2-ой вариант: у открытой формы модально прописать:
Процедура ПриСозданииНаСервере()
  Карта = Параметры.Карта;
КонецПроцедуры
13 Triumph
 
29.07.11
16:10
(11) реквизиты объекта(да в плюсике),а не формы
(12) спс 2ой вариант получилось,хм не знал про такую приблуду "Параметры".. казалось они при передаче должны прописаться атоматом,по крайней мере так в примерах к книге "Разработка управляемого интерфейса" делалось но там они простых типов...

И все таки вопрос у меня остался, как указать открываемой форме что она должна открыться в контексте текущей обработки?
ведь если реквизитов у меня на порядок больше чем 2 то это проблема прописывать их все в структуру и передавать, хочу обращаться через "Объект." к уже заполненным реквизитам.
14 Axel2009
 
29.07.11
16:15
(13) а реквизиты автоматом заполняются по пути данных. если бы ты не в плюсике сделал реквизиты - заполнилось бы автоматом. не знаю насколько корректным будет прописать в параметрах ОбъектКарта. может и пропишется..
15 GROOVY
 
29.07.11
16:17
(13) В открываемою форму передавай параметр "Объект". Все заполнится.
16 Axel2009
 
29.07.11
16:20
(15) ну там не Карта, а НайденнаяКарта..
17 Axel2009
 
29.07.11
16:21
ПараметрыФормы = Новый Структура("Объект", Новый Структура);
ПараметрыФормы.Объект.Вставить("Карта", Объект.НайденнаяКарта);
ПараметрыФормы.Объект.Вставить("СтарыйУстановщик", Объект.ТекущийУстановщ);
так если?
18 Triumph
 
29.07.11
16:51
Вообще это все странно.. через параметры конечно можно работать,но это лишние телодвижения.Зачем тогда в открываемой не основной форме пустой реквизит Объект? какой мне прок от него,по новой заполнять?
19 Axel2009
 
29.07.11
16:52
(18) 1с телепатией не страдает..
20 GROOVY
 
29.07.11
16:56
В первой форме:
   ОткрытьФорму("Обработка.Обработка1.Форма.ДругаяФорма", Новый Структура("Объект",Объект));


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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   ЗаполнитьЗначенияСвойств(Объект, Параметры.Объект);
КонецПроцедуры
21 GROOVY
 
29.07.11
16:59
+20 но что то мне не нравится такой метод... Если реквизиты обработки будут хранить существенный объем данных или иметь мутабельные значения наверно все упадет.
22 Kookish
 
29.07.11
17:03
(21) Поэтому, когда мне понадобилось сделать что-то подобное с двумя формами на один документ, я просто скрыл все ее элементы и отобразил другие. При возврате вертаю все на место.
23 Kookish
 
29.07.11
17:07
Что-то вроде:

&НаКлиенте
Процедура ПеревернутьФорму()
   Если Элементы.Группа1.Видимость Тогда
       ЭтаФорма.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет;
       Элементы.Группа1.Видимость = Ложь;
....
       ЭтаФорма.Заголовок = "Бла-бла-бла" + Объект.Дата;

   Иначе
       ЭтаФорма.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто;
       Элементы.Группа1.Видимость = Истина;
...
       УправлениеФормой(ЭтаФорма);
   КонецЕсли;
КонецПроцедуры

И вот так:

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
   Если ЭтаФорма.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет Тогда
       Отказ = Истина;
       ПеревернутьФорму();
   КонецЕсли;
КонецПроцедуры
24 GROOVY
 
29.07.11
17:11
Если бы это была форма документа или чего то другого, не обработки, то через ключ ее элементарно можно было бы открыть. А у обработки нет такого свойства в параметрах.
25 Kookish
 
29.07.11
17:13
(24) Я так сделал для документа, т. к. про ключ не знал тогда. Да и сейчас не знаю :)
26 Triumph
 
29.07.11
17:20
(24) вот вот, по ключу получается все прекрасно если справочник или документ
27 Kookish
 
29.07.11
17:20
(24) Примерно так?:
       ОткрытьФорму("Документ.МойЛюбимый.ФормаВторая", Новый Структура("Ключ", Объект.Ссылка));

И больше ничего не надо?
28 Kookish
 
29.07.11
17:21
(26) Тогда (23) может помочь.
29 Triumph
 
29.07.11
17:24
(26), не спасибо,я очень ленив для таких выкрутасов8)
30 Triumph
 
29.07.11
17:27
(28) к тому же такой финт в тонком может вылиться в нехилые тормоза)
31 Kookish
 
29.07.11
17:29
(30) С чего бы?
С точки зрения производительности это наиболее оптимальный вариант. Обращений к серверу минимум.