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

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

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

Если почитать справку к объекту Таблица значений, то мы видим, что он доступен только для: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Действительно в тонком клиенте его нельзя использовать т.к. клиентское приложение (в том числе и веб-клиент) о таком объекте не знают. Выходом из положения может послужить массив структур. Используя такое сочетание можно пользоваться данными как таблицей значений.

Кратко о массиве структур

Начнем со структуры. Структура это коллекция пар Ключ-Значение

"НомерСтроки" 1
"Номенклатура" Табурет
"Цена"

25

если представить таблицу изображенную выше следующим образом: все ключи записать сверху, а значения под ними, то у нас получится строка похожая на строку таблицы значений

"НомерСтроки" "Номенклатура" "Цена"
1 Табурет 25

Массив это коллекция содержащая значения подобно списку

Значение1
Значение2
Значение3

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

Структура1
Структура2
Структура3

 

Работа с массивом структур аналогична работе с таблицей значений


// Пример для Таблица значений
ПерваяСтрокаТЗ = ТЗ[0];
ЗначениеПервойКолонки = ПерваяСтрокаТЗ["НомерСтроки"];

//Пример для Массива структур
ПерваяСтрокаМассива = МассивСтруктур[0];
ЗначениеПервойКолонки = ПерваяСтрокаМассива["НомерСтроки"];

Пример функции преобразующей Таблицу значений в массив структур

Весь код функции исполняется на сервере, т.к. мы помним, что на клиенте нет такого объекта ТаблицаЗначений


Функция ТаблицаЗначенийВМассивСтруктур(ТЗ)

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

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

В типовых конфигурациях такой функционал существует

В типовых конфигурациях в которых встроена БСП(Библиотека Стандартных Подсистем) в общем модуле "ОбщегоНазначения" есть функция "ТаблицаЗначенийВМассив", хотя возможно от версии БСП название метода и его расположение может быть другим