Имя: Пароль:
1C
1С v8
Открытие форм - передача значений
,
0 Verita
 
17.02.13
19:27
Добрый день!
Ситуация следующая - есть элемент справочника, в реквизитах которого есть поля, которые я не хочу заполнять в форме элемента - необходимо их заполнить на отдельной форме, вызываемой по нажатию кнопки.
Проблема в том, что эта самая вторая форма имеет вид "произвольная форма", следовательно не привязана к самому объекту.
Открыть с параметрами, а затем их выбрать - не получается код вот:
В исходной форме

&НаКлиенте
Процедура ОткрытьНастройкиСервера(Команда)
ПараметрыФормы = новый Структура;
ПараметрыФормы.Вставить("СерверSMTP", Объект.СерверSMTP);
ПараметрыФормы.Вставить("ПортSMTP",Объект.ПортSMTP);
ПараметрыФормы.Вставить("СерверPOP3", Объект.СерверPOP3);
ПараметрыФормы.Вставить( "ПортPOP3",  Объект.ПортPOP3);
Форма = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаНастроек", ПараметрыФормы, ЭтаФорма);

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

В новой форме, где должны задаваться настройки:

Процедура ПриОткрытии(Отказ)
Элементы.СерверSMTP = Параметры.СерверSMTP;
Элементы.ПортSMTP = Параметры.ПортSMTP;
Элементы.СерверPOP3 = Параметры.СерверPOP3;
Элементы.ПортPOP3 = Параметры.ПортPOP3;
КонецПроцедуры

Пробовала по-разному - пишет "Поле объекта не обнаружено (СерверSMTP)"
1 MrStomak
 
17.02.13
19:31
параметры должны быть описаны в соответствующем разделе в форме под теми же именами.
2 Verita
 
17.02.13
19:46
(1)Описаны. В реквизитах и параметрах формы под идентичными именами.
3 crotnn
 
17.02.13
19:52
Читать параметры надо при создании на сервере, это раз.
Что такое "Элементы"? Присваивать значения обычно надо реквизитам формы, это два.
Ну и традиционно, где фотка? Это три)
4 sanja26
 
17.02.13
20:01
параметры эти сработают только при создании на сервере.
5 Verita
 
17.02.13
20:13
Оно работает!
Спасибо огромное!

Может,еще подскажете, каким инструментом их запилить обратно?
В смысле - передать объекту на хранение
6 crotnn
 
17.02.13
20:22
(5) Либо через параметр закрытия, либо через оповещение. Смотря в каком режиме и для чего открыта форма
7 Verita
 
17.02.13
20:31
Думаю, оповещение тут лишнее. Форма открыта модально для ввода реквизитов объекта.
Насколько я понимаю, для передачи через параметр надо сделать примерно, но не совсем так

&НаКлиенте
Процедура ПриЗакрытии()
ВладелецФормы.СерверSMTP = СерверSMTP;
ВладелецФормы.ПортSMTP = ПортSMTP;
ВладелецФормы.СерверPOP3 = СерверPOP3;
ВладелецФормы.ПортPOP3 = ПортPOP3;
КонецПроцедуры

Как правильно?
8 crotnn
 
17.02.13
21:10
Тогда Закрыть(<ПараметрЗакрытия>)
9 Verita
 
17.02.13
21:40
Можно еще раз для тех, кто в танке?

Делаю так

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;    
   ПараметрЗакрытия = новый Структура;
   ПараметрЗакрытия.Вставить("СерверSMTP",СерверSMTP);
   ПараметрЗакрытия.Вставить("ПортSMTP", ПортSMTP);
   ПараметрЗакрытия.Вставить("СерверPOP3", СерверPOP3);
   ПараметрЗакрытия.Вставить( "ПортPOP3",  ПортPOP3);
   ЭтаФорма.Закрыть(ПараметрЗакрытия);
КонецПроцедуры

Вылетает Dump из-за ЭтаФорма.Закрыть(ПараметрЗакрытия);
10 alexei366
 
17.02.13
23:51
Попробуй ещё Отказ = истина, наверно мозги ему крутит, при попытке закрыть форму которой уже нет
11 Verita
 
18.02.13
11:16
Решила простым нажатием на левую кнопку:


&НаКлиенте
Процедура СохранитьНастройки(Команда)
СохранитьНастройкиСерверов();
КонецПроцедуры

&НаКлиенте
Процедура СохранитьНастройкиСерверов();
   ПараметрЗакрытия = новый Структура;
   ПараметрЗакрытия.Вставить("СерверSMTP",СерверSMTP);
   ПараметрЗакрытия.Вставить("ПортSMTP", ПортSMTP);
   ПараметрЗакрытия.Вставить("СерверPOP3", СерверPOP3);
   ПараметрЗакрытия.Вставить( "ПортPOP3",  ПортPOP3);
   ЭтаФорма.Закрыть(ПараметрЗакрытия);

   КонецПроцедуры
Независимо от того, куда вы едете — это в гору и против ветра!