|
Как передать с сервера на клиент таблицу значений в управляемом приложении | ☑ | ||
---|---|---|---|---|
0
Demetres
04.12.11
✎
12:36
|
подскажите пожалуйста как можно передать с сервера на клинт ТаблицаЗначений
|
|||
1
DEVIce
04.12.11
✎
12:36
|
Через массив.
|
|||
2
Demetres
04.12.11
✎
12:37
|
&НаКлиенте
Процедура ПартияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) //Устанавливаем дату в соответствии с датоф документа партии Объект.Дата = ПолучитьДатуИзПартии(ВыбранноеЗначение); //Предупреждение("Дата документа изменена на дату документа партии",,"Внимание!!!"); //Заполняем ТЧ и разбиваем сумму доп. расходов пропорционально количеству товара в партии Объект.КолТоваровПартии.Загрузить(РаспеределениеДопРасходов(ВыбранноеЗначение)); //РаспеределениеДопРасходов(ВыбранноеЗначение); КонецПроцедуры //Производим распределение доп расходов по кличеству возвращаем таблицу значений &НаСервере Функция РаспеределениеДопРасходов(Партия) ТаблицаЗначений = Новый ТаблицаЗначений; ТаблицаЗначений.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура")); ТаблицаЗначений.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2,ДопустимыйЗнак.Неотрицательный))); ТаблицаЗначений.Колонки.Добавить("Себестоимость", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3,ДопустимыйЗнак.Неотрицательный))); ТаблицаЗначений.Колонки.Добавить("ДопЗатраты", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2,ДопустимыйЗнак.Неотрицательный))); //Получаем Общее количество товара из партии Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОбороты.КоличествоПриход |ИЗ | РегистрНакопления.ОстаткиТоваров.Обороты(, , , Партия = &Партия) КАК ОстаткиТоваровОбороты"; Запрос.УстановитьПараметр("Партия", Партия); КоличествоТовараВПратии = Запрос.Выполнить().Выгрузить()[0].КоличествоПриход; ДопЗатратыНаЕдНоменклатуры = Объект.Сумма/КоличествоТовараВПратии; //Заполняем таблицу значений данными Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОбороты.Номенклатура, | ОстаткиТоваровОбороты.КоличествоПриход, | ОстаткиТоваровОбороты.СебестоимостьПартииНоменклатурыПриход |ИЗ | РегистрНакопления.ОстаткиТоваров.Обороты(, , , Партия = &Партия) КАК ОстаткиТоваровОбороты"; Запрос.УстановитьПараметр("Партия", Партия); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл НоваяСтрокаТЗ = ТаблицаЗначений.Добавить(); НоваяСтрокаТЗ.Номенклатура = РезультатЗапроса.Номенклатура; НоваяСтрокаТЗ.Количество = РезультатЗапроса.КоличествоПриход; НоваяСтрокаТЗ.Себестоимость = РезультатЗапроса.СебестоимостьПартииНоменклатурыПриход; НоваяСтрокаТЗ.ДопЗатраты = ДопЗатратыНаЕдНоменклатуры*РезультатЗапроса.КоличествоПриход; КонецЦикла; Возврат ТаблицаЗначений; КонецФункции |
|||
3
DEVIce
04.12.11
✎
12:37
|
ТЗ не передается между сервером и клиентом.
|
|||
4
Armando
04.12.11
✎
12:38
|
Для чего?
|
|||
5
Demetres
04.12.11
✎
12:39
|
(1) это единственный способ?
|
|||
6
Demetres
04.12.11
✎
12:40
|
(4) на сервере я заполняю ТЧ документа, а потом переношу её на клиент
|
|||
7
Demetres
04.12.11
✎
12:40
|
(3) а есть какой-нибудь аналог
|
|||
8
DEVIce
04.12.11
✎
12:41
|
(6). Н сервере получай данные например запросом, а перебирай их на клиенте, то же можно и через массив сделать.
|
|||
9
DEVIce
04.12.11
✎
12:41
|
(7). Массив.
|
|||
10
Demetres
04.12.11
✎
12:49
|
(9)
Пока РезультатЗапроса.Следующий() Цикл Массив.Добавить(РезультатЗапроса); КонецЦикла; Возврат Массив; Такая конструкция? |
|||
11
nicxxx
04.12.11
✎
12:53
|
на клиенте для этого существует ДанныеФормыКоллекция
|
|||
12
Азат
04.12.11
✎
12:55
|
(8) а чо нельзя там же на сервере и перебрать массив?
|
|||
13
Demetres
04.12.11
✎
12:56
|
(11) сейчас попробую
|
|||
14
Demetres
04.12.11
✎
13:02
|
(11) что-то я не пойму как этой коллекцией пользоваться, если не трудно можете написать
|
|||
15
Demetres
04.12.11
✎
13:03
|
(11) пробовал создать переменную с таким типом на клиенте для передачи на сервер, но ничего не вышло
|
|||
16
Нуф-Нуф
04.12.11
✎
13:05
|
вроде ТЗ суют в реквизит формы с типом табличное поле
|
|||
17
Demetres
04.12.11
✎
14:47
|
(16) и через реквизит не получается пишет ошибку
{Документ.ДополнительныеЗатраты.Форма.ФормаДокумента.Форма(11)}: Ошибка при установке значения атрибута контекста (ТабЗнач) РаспеределениеДопРасходов(ВыбранноеЗначение, ТабЗнач); Нельзя изменять поле, содержащее объект данных формы |
|||
18
Азат
04.12.11
✎
14:56
|
да блин, в чем проблема-то?
Массив = Новый Массив; Для К = 0 По ТЗ.Колонки.Количество() - 1 Цикл Массив.Добавить(ТЗ.ВыгрузитьКолонку(К)); КонецЦикла; |
|||
19
МишельЛагранж
04.12.11
✎
15:08
|
в управляемом приложении между клиентов и сервером передаются только ПРОСТЫЕ типы - поэтому, все получаете и обрабатываете на сервере (запросы, ТЗ формируете и т.д.), а на клиент - уже только полученные данные забирают.
|
|||
20
Demetres
04.12.11
✎
15:11
|
Вышел из положения таким способом:
Пока РезультатЗапроса.Следующий() Цикл Структура.Очистить(); Структура.Вставить("Номенклатура", РезультатЗапроса.Номенклатура); Структура.Вставить("Количество", РезультатЗапроса.КоличествоПриход); Структура.Вставить("Себестоимость", РезультатЗапроса.СебестоимостьПартииНоменклатурыПриход); Структура.Вставить("ДопЗатраты", ДопЗатратыНаЕдНоменклатуры*РезультатЗапроса.КоличествоПриход); МассивЗначений.Добавить(Структура); КонецЦикла; Возврат МассивЗначений; |
|||
21
nicxxx
04.12.11
✎
15:29
|
читай про ДанныеФормыВЗначение() и РеквизитФормыВЗначение()
|
|||
22
Immortal
04.12.11
✎
15:34
|
(19)ложь, звездежь и провокация.
|
|||
23
tridog
04.12.11
✎
15:48
|
(6) Вот стараются вас отучить так делать, стараются... Правильный вариант в (21). Обрабатывать ТЧ нужно на сервере. А на клиенте вся ТЧ не нужна, только отображаемая часть - до тех пор пока пользователь сам ее не прокрутит.
|
|||
24
Demetres
04.12.11
✎
16:08
|
Поправка
Запрос.УстановитьПараметр("Партия", Партия); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл Структура = Новый Структура; Структура.Вставить("Номенклатура", РезультатЗапроса.Номенклатура); Структура.Вставить("Количество", РезультатЗапроса.КоличествоПриход); Структура.Вставить("Себестоимость", РезультатЗапроса.СебестоимостьПартииНоменклатурыПриход); Структура.Вставить("ДопЗатраты", ДопЗатратыНаЕдНоменклатуры*РезультатЗапроса.КоличествоПриход); МассивЗначений.Добавить(Структура); КонецЦикла; И обращаться потом удобно через точку, как для таблицы значений |
|||
25
Immortal
04.12.11
✎
16:15
|
самое главное, что ты изобретаешь велосипед
|
|||
26
Immortal
04.12.11
✎
16:15
|
представляешь?-)
|
|||
27
Юрий Лазаренко
04.12.11
✎
18:09
|
(24) Работать будет, но это полный отстой.
(0) Напиши конкретнее: какие именно действия и в каких масштабах ты собираешься делать на клиенте? В зависимости от этого уже надо решать, оптимальнее их выполнять на клиентской стороне или лучше сделать на сервере. |
|||
28
nicxxx
05.12.11
✎
01:00
|
(23) я в табличке меняю одно число и надо пересчитать итоги в двух местах - мне что, из-за этого ее всю на сервер и обратно гонять? всяко проще проще на клиенте арифметикой заниматься
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |