Имя: Пароль:
1C
1С v8
Заполнить ТЗ управляемой формы НаСервереБезКонтекста
0 starz555
 
17.05.13
10:15
При попытке воспользоваться ДанныеФормыВЗначение и ЗначениеВДанныеФормы на сервере, передав  ДанныеФормыКоллекция параметрос не получается ("Нельзя изменять поле, содержащее объект данных формы
"). Есть ли вообще такая возможность или даже не пытаться?

&НаКлиенте
Процедура заполнить(Команда)
   ЗаполнитьНаСервере(ТаблицаНаФорме);    
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗаполнитьНаСервере(ТаблицаНаФорме)

     ТЗ = ДанныеФормыВЗначение(ТаблицаНаФорме,  Тип("ТаблицаЗначений")) ;
     Стр = ТЗ.добавить();
     Стр.Кол = "чупакабра";
     ЗначениеВДанныеФормы(ТЗ, ТаблицаНаФорме) ;
     
КонецПроцедуры
1 Maxus43
 
17.05.13
10:30
с контекстом делай, ибо меняешь данныеи формы
2 starz555
 
17.05.13
10:34
(1) а на хрена тогда вообще существует ЗначениеВДанныеФормы? Тогда хватило бы и ЗначениеВРеквизитФормы. Или я не догоняю чего-то?
3 starz555
 
17.05.13
10:39
просто форма достаточно "тяжелая", не хочется ее на сервер отправлять и обратно. Получается только в контекстном это возможно, через ЗначениеВРеквизитФормы?
4 rozer76
 
17.05.13
11:03
по ссылке нельзя передавать - платформа на знает что происходит у тебя в этой процедуре и не важно "насервере" или "насерверебезконтекста" только по значению можно ... (Знач ТаблицаНаФорме)
5 rozer76
 
17.05.13
11:11
(2) ЗначениеВДанныеФормы - ну это весь объект преобразовывает. Обычно в самой УФ используют ЗначениеВРеквизитФормы.
6 starz555
 
17.05.13
11:14
(5) Со ЗначениеВРеквизитФормы все понятно.
(4)  Вы так имеете в виду?:

&НаКлиенте
Процедура заполнить(Команда)
   ТаблицаНаФорме = ЗаполнитьНаСервере(ТаблицаНаФорме);    
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЗаполнитьНаСервере(Знач ТаблицаНаФорме)

     ТЗ = ДанныеФормыВЗначение(ТаблицаНаФорме,  Тип("ТаблицаЗначений")) ;
     Стр = ТЗ.добавить();
     Стр.Кол = "чупакабра";
     ЗначениеВДанныеФормы(ТЗ, ТаблицаНаФорме) ;
     Возврат ТаблицаНаФорме;

КонецФункции
7 starz555
 
17.05.13
11:16
(6) все равно не получается
8 vvp91
 
17.05.13
11:32
Не надо никаких данных/реквизитов формы в значение использовать, не занимайтесь ерундой.
Функция дикая получилась - принимаем по значению всю коллекцию, потом ее изменяем и возвращаем. Жесточайший переизбыток данных.
Достаточно в процедуру передать ДанныеФормыКоллекция и эти данные заполнить:

&НаСервереБезКонтекста
Процедура ЗаполнитьСервер(Коллекция)
   ЭлементКоллекции = Коллекция.Добавить();
   ЭлементКоллекции.Кол = "чупакабра";
КонецПроцедуры

Дальше форма все сама сделает - вернет что надо на клиента, покажет изменения и т.п.
9 starz555
 
17.05.13
11:39
(8) vvp91, спасибо большое! чуть позже попробую
AdBlock убивает бесплатный контент. 1Сергей