Передача Таблицы значений на тонкий клиент

1. user623969_dusa 23.07.19 17:33 Сейчас в теме
а как быть если с сервера таблицу значений нельзя передавать на клиент но очень хочется ее там видеть? массив структур использовать или можно как-то попроще??

ругается что отсутствует отображение типов для ValueTable
По теме из базы знаний
Найденные решения
2. aka Любитель XML 23.07.19 17:35 Сейчас в теме
На клиенте нет таблицы значений, передавай либо массив структур, либо через хранилще
user782488; user623969_dusa; +2 Ответить
15. spacecraft 24.07.19 11:03 Сейчас в теме
(13)
задача стояла передать из формы в форму таблицу для заполнения табличной части

Зачем тогда ТЗ (или массив структур) передавать на клиент?
Используйте временное хранилище.
&НаКлиенте
Процедура ОткрытьНужнуюФорму()
    АдресТЗ = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
    ПолучитьАдресТЗ(АдресТЗ);
    // добавляете в передаваемые параметры АдресТЗ
    ....
КонецПроцедуры

&НаСервере 
Процедура ПолучитьАдресТЗ(Адрес) 
    Запрос = Новый Запрос; 
    Запрос.Текст = 
    "ВЫБРАТЬ 
    |	НАЧАЛОПЕРИОДА(ВахтаУдержания.Дата, ДЕНЬ) КАК Дата, 
    |	ВахтаУдержания.Удержание, 
    |	ВахтаУдержания.Комментарий, 
    |	ВахтаУдержания.Кто 
    |ИЗ 
    |	Документ.Вахта.Удержания КАК ВахтаУдержания 
    |ГДЕ 
    |	ВахтаУдержания.Ссылка = &Ссылка"; 

    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);	
    ТЗ = Запрос.Выполнить().Выгрузить(); 
    ПоместитьВоВременноеХранилище(ТЗ, Адрес)
КонецПроцедуры
Показать


В открываемой форме получаете АдресТЗ и получаете ТЗ:
ТЗ = ПолучитьИзВременногоХранилища(АдресТЗ);
AnKonAlm; user782488; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. Shilov 4 23.07.19 18:55 Сейчас в теме
(1) Можно добавить как перемененную на форму и не париться.
8. tusv 211 23.07.19 19:37 Сейчас в теме
(6)Переменные на сервере и на клиенте не видят друг друга, а на сервере еще и обнуляется без повт. исп.
9. spacecraft 23.07.19 19:54 Сейчас в теме
(1) создаете реквизит формы типа "(ТаблицаЗначений)". Обратите внимание на скобки. На самом деле это ДанныеФормыКоллекция, а не тип ТаблицаЗначений. Хотя при выборе типа нужно выбирать именно ТаблицаЗначений. Вот такой каламбур.
На сервере в новый реквизит формы можно загрузить ТЗ. Имена и тип колонок должны соответствовать.
ИмяРеквизита.Загрузить(ТЗ)
2. aka Любитель XML 23.07.19 17:35 Сейчас в теме
На клиенте нет таблицы значений, передавай либо массив структур, либо через хранилще
user782488; user623969_dusa; +2 Ответить
7. tusv 211 23.07.19 19:33 Сейчас в теме
(2)Через хранилище ТЗ на клиент не передать, как и Объект коллекции на сервер. Тут однозначно массив структур рулит
aka Любитель XML; +1 Ответить
3. VmvLer 23.07.19 17:45 Сейчас в теме
модные пацаны вместо хранилища уже костылят через МВТ.
4. user623969_dusa 23.07.19 17:49 Сейчас в теме
(3) менеджера временных таблиц тоже нет на тонком
11. YannikAlx 43 24.07.19 09:39 Сейчас в теме
(4) А каким образом вы заполняете свою табличную часть на клиенте? Данными с сервера?
Не проще создать у Объекта создать табличную часть вынести ее на форму и загружать в нее результаты запроса скажем и обрабатывать сразу на сервере?
5. aka Любитель XML 23.07.19 17:55 Сейчас в теме
(3) а че не вэб-сервис замутили? ))))
10. furman2000 16 24.07.19 06:05 Сейчас в теме
Тоже иногда стоит такая задача.
А как через массив структур??? Можно пример.
13. user623969_dusa 24.07.19 10:36 Сейчас в теме
(10) задача стояла передать из формы в форму таблицу для заполнения табличной части - БСП нет, обработку заполнения табличной части не создать как в учебниках, поэтому таблица нужна была на клиенте и при создании на сервере второй формы сравнить ее с имеющейся табличной частью документа

ПараметрыФормы = Новый Структура;
Если ЗначениеЗаполнено(ДокументСобытий) Тогда
//добавлять в существующий документ событий
ПараметрыФормы.Вставить("Ключ", ДокументСобытий);
ПараметрыФормы.Вставить("ДополнительныеПараметры", Новый Структура("ДобавляемыеУдержания", ПолучитьМассивСтруктурУдержаний()));

&НаСервере
Функция ПолучитьМассивСтруктурУдержаний()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ВахтаУдержания.Дата, ДЕНЬ) КАК Дата,
| ВахтаУдержания.Удержание,
| ВахтаУдержания.Комментарий,
| ВахтаУдержания.Кто
|ИЗ
| Документ.Вахта.Удержания КАК ВахтаУдержания
|ГДЕ
| ВахтаУдержания.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выб = РезультатЗапроса.Выбрать();
МассивКВозврату = Новый Массив;
Пока Выб.Следующий() Цикл
СтрокуТЗВСтруктуру = Новый Структура("Дата, Удержание, Комментарий, Кто");
ЗаполнитьЗначенияСвойств(СтрокуТЗВСтруктуру, Выб);
МассивКВозврату.Добавить(СтрокуТЗВСтруктуру);
КонецЦикла;
Возврат МассивКВозврату;
КонецФункции

удобно тем что обход идет так же как таблицы значений
для каждого эл из ТЗ цикл
Эл.Дата
и т.д.
конеццикла
karagiosis; katrineKA; user1661639; +3 Ответить
15. spacecraft 24.07.19 11:03 Сейчас в теме
(13)
задача стояла передать из формы в форму таблицу для заполнения табличной части

Зачем тогда ТЗ (или массив структур) передавать на клиент?
Используйте временное хранилище.
&НаКлиенте
Процедура ОткрытьНужнуюФорму()
    АдресТЗ = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
    ПолучитьАдресТЗ(АдресТЗ);
    // добавляете в передаваемые параметры АдресТЗ
    ....
КонецПроцедуры

&НаСервере 
Процедура ПолучитьАдресТЗ(Адрес) 
    Запрос = Новый Запрос; 
    Запрос.Текст = 
    "ВЫБРАТЬ 
    |	НАЧАЛОПЕРИОДА(ВахтаУдержания.Дата, ДЕНЬ) КАК Дата, 
    |	ВахтаУдержания.Удержание, 
    |	ВахтаУдержания.Комментарий, 
    |	ВахтаУдержания.Кто 
    |ИЗ 
    |	Документ.Вахта.Удержания КАК ВахтаУдержания 
    |ГДЕ 
    |	ВахтаУдержания.Ссылка = &Ссылка"; 

    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);	
    ТЗ = Запрос.Выполнить().Выгрузить(); 
    ПоместитьВоВременноеХранилище(ТЗ, Адрес)
КонецПроцедуры
Показать


В открываемой форме получаете АдресТЗ и получаете ТЗ:
ТЗ = ПолучитьИзВременногоХранилища(АдресТЗ);
AnKonAlm; user782488; +2 Ответить
16. user623969_dusa 24.07.19 11:36 Сейчас в теме
17. g1uk 07.11.19 12:40 Сейчас в теме
(15) Так будет работать только в режиме "Толстый клиент", "Тонкий клиент" выдаст ошибку
18. spacecraft 07.11.19 12:43 Сейчас в теме
(17) в каком месте и какую ошибку?
19. g1uk 07.11.19 13:31 Сейчас в теме
(18) Ошибку выдаст "Ошибка отображения типов", в случае если в форме не добавлена эта таблица. В этом случае нужно использовать преобразование ТЗ в структуру, как описано в (13)
20. spacecraft 07.11.19 13:46 Сейчас в теме
(19) какое отображение типов? ТЗ не передается на клиент от слова совсем. Внимательно код посмотрите. Передается только адрес хранилища.
В открываемой форме, в обработчике ПриСозданииНаСервере, получается ТЗ из хранилища и заполняются данные ТЧ. Все на сервере. Никуда на клиент ТЗ не передается.
24. g1uk 07.11.19 14:34 Сейчас в теме
(20) Я в курсе. Ниже в (23) я разместил код который использовал, думаю вы меня поймете
25. spacecraft 07.11.19 14:46 Сейчас в теме
(24) получили массив структур на клиент, дальше что? На клиенте в цикле заполнять ТЧ?
Смотрите (13) : "задача стояла передать из формы в форму таблицу для заполнения табличной части - БСП нет" И приведен запрос получения таблицы. Т.е. на первой форме никакой таблицы нет в реквизитах.
27. g1uk 07.11.19 15:03 Сейчас в теме
Короче видимо не под эту задачу... В моем случае: если нужно таблицу передать на клиент и там использовать для обработки, не создавая реквизит формы
26. spacecraft 07.11.19 14:50 Сейчас в теме
(24)
Я в курсе.

Тогда про ошибку отображения типов не упоминали. И что не будет работать на тонком клиенте, тоже.
12. JohnGalt 57 24.07.19 10:32 Сейчас в теме
Вообще все зависит от того, что дальше хотите с этими данными делать. Зачем именно ТЗ ? В зависимости от задач может оказаться, что нужно преобразовать в строку, например. Если нужно пару колонок и с ними проводить операции сортировки, например, можно использовать СписокЗначений.
14. user623969_dusa 24.07.19 10:36 Сейчас в теме
21. starik-2005 3036 07.11.19 13:59 Сейчас в теме
Вообще не совсем понятно, нахрена это нужно. Правильные пацаны делают так:
1. Создают реквизит формы с таблицей - но лучше создать реквизит объекта, куда суют все эти колонки, которые надо потом с чем-нить сравнивать.
2. Открывают эту форму.
3. Загружают туда данные (в эту таблицу на форме или, что лучше, в реквизит объекта).
4. Открывают форму, указывая текущую форму в качестве владельца.
5. В открывшейся форме что на клиенте, что на сервере будет доступна форма-владелец и, соответственно, реквизит с таблицей.
22. g1uk 07.11.19 14:07 Сейчас в теме
(21) Это делается для того чтобы не создавать реквизит формы, если таблица нужна только для обработки данных
23. g1uk 07.11.19 14:30 Сейчас в теме
Мой вариант такой, чтобы работало на "тонком клиенте":

На первой форме формируем массив из таблицы

&НаКлиенте
Процедура КакаяТоПроцедураНаПервойФорме()

        АдресТЗТовары = МассивИзТаблицыВХранилище("Товары");

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

&НаСервере
Функция МассивИзТаблицыВХранилище(ИмяТаблицы)
	
	МассивИзТЗ = ТаблицаЗначенийВМассив(Объект[ИмяТаблицы].Выгрузить());
	
	ВозвращаемыйАдрес = ПоместитьВоВременноеХранилище(МассивИзТЗ, УникальныйИдентификатор);
	
	Возврат ВозвращаемыйАдрес;
	
КонецФункции

&НаСервере
Функция ТаблицаЗначенийВМассив(ТаблицаЗначений) Экспорт
    
    Массив = Новый Массив();
	
	СтруктураСтрокой = "";
        Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
            СтруктураСтрокой = СтруктураСтрокой + ?(СтруктураСтрокой="", "",",") + Колонка.Имя;
	КонецЦикла;
	
    Для Каждого Строка Из ТаблицаЗначений Цикл
        НоваяСтрока = Новый Структура(СтруктураСтрокой);
        ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
		
		Массив.Добавить(НоваяСтрока);
    КонецЦикла;
	
	Возврат Массив;

КонецФункции
Показать


и ловим готовый массив из таблицы значений на другой форме

&НаКлиенте
Процедура ОбработатьТаблицуНаКлиенте(АдресТЗТовары)
    
    Товары = ПолучитьИзВременногоХранилища(АдресТЗТовары);

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


в переменной "Товары" будет сидеть массив из структур, каждая структура - это строка таблицы

Ну конечно еще часть кода нужно написать для передачи АдресаТЗ между первой и второй формой, это может быть передано в структуре с другими параметрами
jane_de_rio; +1 Ответить
28. Fux 04.12.19 04:44 Сейчас в теме
(23) А в чем смысл преобразования ТЗ в массив, при работе с временным хранилищем? Можно же саму ТЗ в хранилище сохранять..
29. g1uk 04.12.19 08:41 Сейчас в теме
Таблицу потом не получить из хранилища в тонком клиенте. Ну например если в клиентском общем модуле захотите таблицу обработать, или в другой форме без добавления таблицы в качестве реквизита формы
30. Kuryshev 24.12.21 08:54 Сейчас в теме
Как в вычисляемом поле СКД передать Таблицу значений, чтобы отчет работал в тонком клиенте? Пробовал ВнешниеОтчеты.ПреобразоватьТаблицуЗначенийВМассивСтруктур(ТаблицаЗначений(Номенклатура, НадписьКол, Количество, НадписьЦен, ВЫБОР КОГДА ЦЕНА = 0 ТОГДА "-" ИНАЧЕ Формат(Цена,"ЧДЦ=2") КОНЕЦ)) При формировании отчета выдает Попытка сравнения значений, для которых не поддерживается операция сравнения
AnKonAlm; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот