Как передать таблицу значений с сервера на клиент в 1С без ошибки?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как передать таблицу значений с сервера на клиент в 1С без ошибки?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #32260
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        Есть функция в модуле формы на сервере в ней через цикл вставляется табличную часть, есть процедура на клиенте в которую нужно передавать таблицу значений, часть кода из функции »
        Таб = Новый ТаблицаЗначений;
        Таб.Колонки.Добавить(«Код»);
        Таб.Колонки.Добавить(«Адрес»);
        Таб.Колонки.Добавить(«Страна»);

        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Стр = Таб.Добавить();
        Стр.Код = ВыборкаДетальныеЗаписи.Код;
        Стр.Адрес = ВыборкаДетальныеЗаписи.Ссылка;
        Стр.Страна =ВыборкаДетальныеЗаписи.Страна ;
        КонецЦикла;

        Возврат Таб;
        » часть кода в процедуре на клиенте «ТабЗначений = ПолучениеДляТаблицыДанных(Структура);» , а приходит ошибка «Ошибка отображения типов:
        Отсутствует отображение для типа ‘{
        {Документ.ПЛ_ПланЛогистики.Форма.ФормаДокумента.Форма(625)}: ТабЗначений = ПолучениеДляТаблицыДанных(Структура);

        по причине:
        Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
        по причине:
        Ошибка преобразования данных XDTO:
        НачалоСвойства: ret Форма: Элемент Тип: {
        по причине:
        Ошибка отображения типов:
        «

      • #32261
        bot_avaOdin — Одинэсник
        Участник

          Для передачи таблицы значений из функции на сервере в процедуру на клиенте в 1С:Предприятие, необходимо использовать массив структур в качестве промежуточного типа, так как таблицы значений являются мутабельными и не могут быть переданы напрямую.

          Вот как можно это реализовать:

          1. **На сервере**: Вместо возврата таблицы значений, преобразуйте её в массив структур.

          1C
          Функция ПолучениеДляТаблицыДанных(Структура) Экспорт
              Таб = Новый ТаблицаЗначений;
              Таб.Колонки.Добавить("Код");
              Таб.Колонки.Добавить("Адрес");
              Таб.Колонки.Добавить("Страна");
          
              Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                  Стр = Таб.Добавить();
                  Стр.Код = ВыборкаДетальныеЗаписи.Код;
                  Стр.Адрес = ВыборкаДетальныеЗаписи.Ссылка;
                  Стр.Страна = ВыборкаДетальныеЗаписи.Страна;
              КонецЦикла;
          
              // Преобразуем таблицу значений в массив структур
              МассивДанных = Новый Массив;
              Для Каждого Строка Из Таб Цикл
                  СтруктураСтроки = Новый Структура;
                  Для Каждого Колонка Из Таб.Колонки Цикл
                      СтруктураСтроки.Вставить(Колонка.Имя, Строка[Колонка.Имя]);
                  КонецЦикла;
                  МассивДанных.Добавить(СтруктураСтроки);
              КонецЦикла;
          
              Возврат МассивДанных; // Возвращаем массив структур
          КонецФункции
          

          2. **На клиенте**: Принимаем массив структур и преобразуем его обратно в таблицу значений.

          1C
          Процедура ПолучениеДанных(Структура) Экспорт
              МассивСтрок = ПолучениеДляТаблицыДанных(Структура); // Получаем массив структур
          
              ТабЗначений = Новый ТаблицаЗначений;
              ТабЗначений.Колонки.Добавить("Код");
              ТабЗначений.Колонки.Добавить("Адрес");
              ТабЗначений.Колонки.Добавить("Страна");
          
              Для Каждого Элемент Из МассивСтрок Цикл
                  НоваяСтрока = ТабЗначений.Добавить();
                  Для Каждого Имя Из Элемент.Ключи Цикл
                      НоваяСтрока[Имя] = Элемент[Имя];
                  КонецЦикла;
              КонецЦикла;
          
              // Теперь ТабЗначений содержит данные, которые можно использовать
          КонецПроцедуры
          

          Таким образом, вы избегаете ошибок отображения типов, передавая данные в виде массива структур, который может быть сериализован и десериализован без проблем.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С