Имя: Пароль:
1C
1С v8
Получить ТекущиеДанные в УФ
,
0 svchernova
 
10.11.11
13:09
Здравствуйте,
Пытаюсь получить текущие данные таблицы.

в 8.1 это выглядело так:
ТекущийРаздел = ЭлементыФормы.Разделы.ТекущиеДанные;

в 8.2 в управляемой форме этот вариант уже не работает.
Делаю следующее:
&НаКлиенте
Процедура КомандаРассчитать(Команда)
   ТекущийРаздел = Элементы.Разделы.ТекущиеДанные;
   РассчитатьСтраховуюСумму(ТекущийРаздел);
КонецПроцедуры

&НаСервере
Процедура РассчитатьСтраховуюСумму(ТекущийРаздел)


Получаю ошибку:
{Документ.Страхование.Форма.ФормаДокументаУпр.Форма(679)}: Ошибка при вызове метода контекста (РассчитатьСтраховуюСумму)
   РассчитатьСтраховуюСумму(ТекущийРаздел);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'


предполагаю, то нужно тип 'ДанныеФормыЭлементКоллекции' преобразовать
в тип строки табличной части документа. вот такая задачка, вроде бы и простая. 4
1 svchernova
 
10.11.11
13:36
Все спят..
2 GROOVY
 
10.11.11
13:37
"Разделы", это что?
3 Mort
 
10.11.11
13:38
Хватит пытаться на сервер в параметрах отправить коллекции из формы.
4 svchernova
 
10.11.11
13:39
(2) Разделы - это табличная часть документа
5 GROOVY
 
10.11.11
13:40
(4) Что Вы хотите с ней на сервере делать?
6 svchernova
 
10.11.11
13:41
(3) Я понимаю, что посылаю на сервер неверный тип данных. Но не знаю, как правильно получить строку табличной части документа
7 svchernova
 
10.11.11
13:43
(5) Сумму посчитать..

Процедура РассчитатьСтраховуюСумму()
   ТекущийРаздел = Объект.Разделы.Получить(); //.ТекущиеДанные.ПолучитьЭлементы();
   если ТекущийРаздел.ВидСтрахования.ВидСтраховойСуммы<> Перечисления.ВидСтраховойСуммы.Расчетная тогда
       //Предупреждение("По данному виду страхования страховая сумма не может быть рассчитана.");
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "По данному виду страхования страховая сумма не может быть рассчитана.";
       Сообщение.Сообщить();
       возврат;
   КонецЕсли;
   
   ТекущийОбъект = Элементы.ОбъектыСтрахования.ТекущиеДанные;
   ТекущиеБСО = Элементы.БСО.ТекущиеДанные;
   если ТекущиеБСО=неопределено тогда
       //Предупреждение("Не определена строка для расчета.");
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Не определена строка для расчета.";
       Сообщение.Сообщить();
       возврат;
   КонецЕсли;
   
   если ТипЗнч(ТекущиеБСО.ОбъектСтрахования)=ТипЗнч(Справочники.ЗастрахованныеТранспортныеСредства.ПустаяСсылка()) тогда
       РазмерМРП = РегистрыСведений.РегламентированныеРасчетныеПоказатели.ПолучитьПоследнее(НачалоДня(КонецДня(Объект.Дата)+1)).РазмерМРП;
       Если  ТекущиеБСО.ОбъектСтрахования.ТипТранспортногоСредства = Перечисления.ВидыТранспортныхСредствДляСтрахования.ВоздушныйТранспорт тогда
           ТекущиеБСО.СтраховаяСумма = 2250* РазмерМРП*ТекущиеБСО.ОбъектСтрахования.КоличествоПассажирскихМест;
       иначе
           ТекущиеБСО.СтраховаяСумма = 1250* РазмерМРП*ТекущиеБСО.ОбъектСтрахования.КоличествоПассажирскихМест;
       КонецЕсли;
   иначе
       //Предупреждение("Объект страхования не является транспортным средством.
       //|Страховая сумма не может быть расчитана.");
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Объект страхования не является транспортным средством.
       |Страховая сумма не может быть расчитана.";
       Сообщение.Сообщить();
       возврат;
   конецесли;
КонецПроцедуры
8 GROOVY
 
10.11.11
13:43
Что Вы со строкой на сервере собрались делать? Вы понимаете что вызоб контекстной серверной процедуры УЖЕ САМ по себе передал ВСЕ данные на сервер, зачем еще строку в догонку туда передавать? Передавайте номер, индекс и читайте там. Но это извраз все передавать на сервер ради одной строки.
9 Mort
 
10.11.11
13:44
(6) Не нужна там строка. Функция что делает? Расчитывает что-то по некоторым параметрам. Вот и сделай функцию НаСервереБезКонтеста, которая будет принимать эти параметры и возвращать нужное значение

ТекущийРаздел.Сумма = ПолучитьСумму(ТекущийРаздел.Цена, Текущийраздел.Количество);
10 svchernova
 
10.11.11
13:45
(8) Ей - богу не понимаю :)) Две Ваших лекции пока прослушала, маловао будет :)
11 kible
 
10.11.11
13:47
(10) Передать в функцию индекс строки. Потом на сервере получить строку по индексу.
12 svchernova
 
10.11.11
13:47
(9) Морт, там вчерашний код не взлетел.. Я его оставила пока.
13 GROOVY
 
10.11.11
13:48
(11) Читай последнее предлложение из (8)
14 svchernova
 
10.11.11
13:49
(13) Хорошо, я поняла. Попробую.
15 svchernova
 
10.11.11
13:51
Спасибо всем!