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