1с как передать таблицу значений с сервера на клиент
До появления управляемых форм при работе с данными, особенно в 1С 7.7, использовалась таблица значений. Как же сейчас использовать таблицу значений в тонком клиенте 1с.
Если почитать справку к объекту Таблица значений, то мы видим, что он доступен только для: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Действительно в тонком клиенте его нельзя использовать т.к. клиентское приложение (в том числе и веб-клиент) о таком объекте не знают. Выходом из положения может послужить массив структур. Используя такое сочетание можно пользоваться данными как таблицей значений.
Кратко о массиве структур
Начнем со структуры. Структура это коллекция пар Ключ-Значение
"НомерСтроки" | 1 |
"Номенклатура" | Табурет |
"Цена" |
25 |
если представить таблицу изображенную выше следующим образом: все ключи записать сверху, а значения под ними, то у нас получится строка похожая на строку таблицы значений
"НомерСтроки" | "Номенклатура" | "Цена" |
1 | Табурет | 25 |
Массив это коллекция содержащая значения подобно списку
Значение1 |
Значение2 |
Значение3 |
В нашем случае каждая строка массива будет содержать не просто значение, а структуру. Все структуры массива будут содержать одинаковые ключи
Структура1 |
Структура2 |
Структура3 |
Работа с массивом структур аналогична работе с таблицей значений
// Пример для Таблица значений
ПерваяСтрокаТЗ = ТЗ[0];
ЗначениеПервойКолонки = ПерваяСтрокаТЗ["НомерСтроки"];
//Пример для Массива структур
ПерваяСтрокаМассива = МассивСтруктур[0];
ЗначениеПервойКолонки = ПерваяСтрокаМассива["НомерСтроки"];
Пример функции преобразующей Таблицу значений в массив структур
Весь код функции исполняется на сервере, т.к. мы помним, что на клиенте нет такого объекта ТаблицаЗначений
Функция ТаблицаЗначенийВМассивСтруктур(ТЗ)
// Создаем список имен колонок
МассивИменКолонок = Новый Массив;
Для Каждого ТекКолонка Из ТЗ.Колонки Цикл
МассивИменКолонок.Добавить(ТекКолонка.Имя);
КонецЦикла;
МассивСтруктур = Новый Массив;
// перебираем строки ТЗ и обращаемся к колонкам по списку
Для Каждого ТекСтр Из ТЗ Цикл
СтруктураСтроки = Новый Структура;
Для Каждого ТекКол Из МассивИменКолонок Цикл
СтруктураСтроки.Вставить(ТекКол, ТЗ[ТекКол]);
КонецЦикла;
МассивСтруктур.Добавить(СтруктураСтроки);
КонецЦикла;
КонецФункцири
В типовых конфигурациях такой функционал существует
В типовых конфигурациях в которых встроена БСП(Библиотека Стандартных Подсистем) в общем модуле "ОбщегоНазначения" есть функция "ТаблицаЗначенийВМассив", хотя возможно от версии БСП название метода и его расположение может быть другим