Имя: Пароль:
1C
1С v8
Передача Таблицы значений с сервера на клиент (внешняя обработка)
,
0 MAPATNK2
 
naïve
17.08.21
14:06
Заезженная тема, понимаю. Но на УФ раньше работал мало, а тут понять не могу, как работает механизм.

Получаю наименования документов базы:

ТБ2 = Новый ТаблицаЗначений;
ТБ2.Колонки.Добавить("Док");
Для каждого стр Из Метаданные.Документы Цикл
    Новстр = ТБ2.Добавить();
    Новстр.док = (стр.Синоним);            
КонецЦикла;

Далее нужно показать этот список на уже созданной таблице значений на форме.  "ТЗ1"

Хотел передать ТБ2 с сервера на клиент способом

ПоместитьВоВременноеХранилище(ТБ2, ЭтаФорма.УникальныйИдентификатор);

А потом на клиенте

ПолучитьИзВременногоХранилища(ЭтаФорма.УникальныйИдентификатор);

Но способ не работает, пишет "Ошибка получения значения из временного хранилища". Какая ошибка, не известно, никаких подробностей в "Подробнее" и в конфигуратор не попадает.
1 MAPATNK2
 
naïve
17.08.21
14:08
Знаю, что есть механизм РеквизитФормыВЗначение("Объект"), но так и не понял, как его сюда запихнуть. Постоянно вываливаются ошибки.
писал так РеквизитФормыВЗначение("Объект"), ошибка типа.
писал так РеквизитФормыВЗначение("ТЗ1") та же ошибка.
2 acht
 
17.08.21
14:09
На клиенте таблица значений не существует. Вообще. Никак.
Для обхода есть реквизиты формы и массивы структур
3 lodger
 
17.08.21
14:09
это всё потому, что вы не понимаете сущности процесса работы клиент-сервера.
4 lodger
 
17.08.21
14:10
(1) если ТЗ1 уже есть на форме, так и заполни её на сервере. на клиент она сама приедет в конце серверного вызова.
5 lodger
 
17.08.21
14:10
Получаю наименования документов базы:

Для каждого стр Из Метаданные.Документы Цикл
    Новстр = ТЗ1.Добавить();
    Новстр.док = (стр.Синоним);            
КонецЦикла;
6 MAPATNK2
 
naïve
17.08.21
14:14
(4) Спасибо большое.
Надо почитать книжки по УФ
7 MAPATNK2
 
naïve
17.08.21
14:16
(2) Как пользоваться реквизитом формы? Я пробовал по аналогиис примерами в интернете делать, ещё на сервере ошибка вылезала.
РеквизитФормыВЗначение("Объект"), ошибка типа.
писал так РеквизитФормыВЗначение("ТЗ1") та же ошибка.
8 Флориан
 
17.08.21
14:25
с сервера на клиент
&На сервере:
ДокументОбъект = РеквизитФормыВЗначение("Объект");
ДокументОбъект.Запасы.Загрузить(ВыборкаДетальныеЗаписи.Скопировать());
ЗначениеВРеквизитФормы(ДокументОбъект,"Объект");
9 Kassern
 
17.08.21
14:28
(0) ну так заполните реквизит модуля формы ТЗ на сервере и все. Он автоматом у вас не клиенте отобразится, если выведен на форму.
10 MAPATNK2
 
naïve
17.08.21
14:29
(9) Да, уже выше писали, Так получилось. Хотел попробовать другим способом. Например  РеквизитФормыВЗначение
11 MAPATNK2
 
naïve
17.08.21
14:30
(8) У меня тут внешняя обработка, а не документ объект...
12 Флориан
 
17.08.21
14:33
(11) передай через массив структур
13 runoff_runoff
 
17.08.21
14:35
(12) не надо так.. надо как в (9)
14 MAPATNK2
 
naïve
17.08.21
14:40
(13) Я понимаю, просто рассматривал способы передачи ТЗ
15 MAPATNK2
 
naïve
17.08.21
14:41
(13) Только я так и не понял. Почему клиентская таблица заполняется на сервере, а на самом клиенте её вообще не существует, как писали выше.
16 runoff_runoff
 
17.08.21
14:42
на клиенте существует ДанныеФормыКоллекция
17 Вафель
 
17.08.21
14:45
Проще всего
РеквизитФормыТз.загрузить(моятз)
Всякие объекты в значения не нужны
18 Kassern
 
17.08.21
15:17
(14) массив структур вам в помощь. Даже где то были тут куски кода, которые такое делают
19 VladZ
 
17.08.21
15:21
(0) Зачем ее передавать?
20 ildary
 
17.08.21
15:36
(16) Потому что так решила 1С.
21 lamme
 
17.08.21
16:10
Я так пользуюсь для передачи ТЗ с сервера на клиент функциями

ПреобразоватьТаблицуЗначенийВМассив(входящаяТЗ) - это когда на сервере сформировал ТЗ и ее надо на клиента вернуть

а на клиенте конвертирую ее обратно в ТЗ
ПреобразоватьМассивВТаблицуЗначений (входящиймассив)

(в инете есть полные примеры фунгкций. как я понимаю - это из БСП)

--

а по (0)
если у формы есть реквизит - с типом ТаблицаЗначений
то ее на сервере и заполнить через

Для каждого стр Из Метаданные.Документы Цикл
    Новстр = ЭтотОбъект.МояТаблицаЗначений.Добавить();
    Новстр.док = (стр.Синоним);            
КонецЦикла;


только структуру - задать руками у этого реквизита
22 AlvlSpb
 
17.08.21
21:55
(0) "Далее нужно показать этот список на уже созданной таблице значений на форме.  "ТЗ1"". Так если надо показать на форме, используй ТЧ а не ТЗ и способ из (17). Создаешь трудности там где их нет
23 серый КТУЛХУ
 
17.08.21
22:03
(2): таладно "несущиствууииит".
попробуй на коиенте
ОписаниеТипа = Новый ОписаниеТипов("ТаблицаЗначений");
ОйШоЕтоТакое = Новый(ОписаниеТипа.Типы()[0]);
отладка = истина; // суй сюдой брейкпойнт и шифт-ф9 на ОйШоЕтоТакое... а потом на киенте погоняй методы...
24 acht
 
17.08.21
22:24
(23) А теперь тоже самое на веб-клиенте. ОйШоЕтоТакое, а?
25 1ctube
 
17.08.21
22:33
ТЗ ты можешь дополнить данными на сервере. А на клиенте получаются устаревшие данные. Непорядок
Основная теорема систематики: Новые системы плодят новые проблемы.