База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как передать таблицу значений с сервера на клиент в 1С без ошибки?
- В этой теме 1 ответ, 2 участника, последнее обновление 8 месяцев, 3 недели назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
4 апреля 2025 в 16:45 #32260
Есть функция в модуле формы на сервере в ней через цикл вставляется табличную часть, есть процедура на клиенте в которую нужно передавать таблицу значений, часть кода из функции »
Таб = Новый ТаблицаЗначений;
Таб.Колонки.Добавить(«Код»);
Таб.Колонки.Добавить(«Адрес»);
Таб.Колонки.Добавить(«Страна»);Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Стр = Таб.Добавить();
Стр.Код = ВыборкаДетальныеЗаписи.Код;
Стр.Адрес = ВыборкаДетальныеЗаписи.Ссылка;
Стр.Страна =ВыборкаДетальныеЗаписи.Страна ;
КонецЦикла;Возврат Таб;
» часть кода в процедуре на клиенте «ТабЗначений = ПолучениеДляТаблицыДанных(Структура);» , а приходит ошибка «Ошибка отображения типов:
Отсутствует отображение для типа ‘{
{Документ.ПЛ_ПланЛогистики.Форма.ФормаДокумента.Форма(625)}: ТабЗначений = ПолучениеДляТаблицыДанных(Структура);по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: ret Форма: Элемент Тип: {
по причине:
Ошибка отображения типов:
« -
4 апреля 2025 в 16:45 #32261
Для передачи таблицы значений из функции на сервере в процедуру на клиенте в 1С:Предприятие, необходимо использовать массив структур в качестве промежуточного типа, так как таблицы значений являются мутабельными и не могут быть переданы напрямую.
Вот как можно это реализовать:
1. **На сервере**: Вместо возврата таблицы значений, преобразуйте её в массив структур.
1C Функция ПолучениеДляТаблицыДанных(Структура) Экспорт Таб = Новый ТаблицаЗначений; Таб.Колонки.Добавить("Код"); Таб.Колонки.Добавить("Адрес"); Таб.Колонки.Добавить("Страна"); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Стр = Таб.Добавить(); Стр.Код = ВыборкаДетальныеЗаписи.Код; Стр.Адрес = ВыборкаДетальныеЗаписи.Ссылка; Стр.Страна = ВыборкаДетальныеЗаписи.Страна; КонецЦикла; // Преобразуем таблицу значений в массив структур МассивДанных = Новый Массив; Для Каждого Строка Из Таб Цикл СтруктураСтроки = Новый Структура; Для Каждого Колонка Из Таб.Колонки Цикл СтруктураСтроки.Вставить(Колонка.Имя, Строка[Колонка.Имя]); КонецЦикла; МассивДанных.Добавить(СтруктураСтроки); КонецЦикла; Возврат МассивДанных; // Возвращаем массив структур КонецФункции2. **На клиенте**: Принимаем массив структур и преобразуем его обратно в таблицу значений.
1C Процедура ПолучениеДанных(Структура) Экспорт МассивСтрок = ПолучениеДляТаблицыДанных(Структура); // Получаем массив структур ТабЗначений = Новый ТаблицаЗначений; ТабЗначений.Колонки.Добавить("Код"); ТабЗначений.Колонки.Добавить("Адрес"); ТабЗначений.Колонки.Добавить("Страна"); Для Каждого Элемент Из МассивСтрок Цикл НоваяСтрока = ТабЗначений.Добавить(); Для Каждого Имя Из Элемент.Ключи Цикл НоваяСтрока[Имя] = Элемент[Имя]; КонецЦикла; КонецЦикла; // Теперь ТабЗначений содержит данные, которые можно использовать КонецПроцедурыТаким образом, вы избегаете ошибок отображения типов, передавая данные в виде массива структур, который может быть сериализован и десериализован без проблем.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.