Как структуру преобразовать в массив 1с

Обновлено: 06.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


1С 8.3 Передача Таблицы Значений с сервера на клиент


Пример 1. Передать ТЗ на клиент с сервера (через процедуру ОбщегоНазначения) в 1С 8.3:

Процедура ПередатьТаблицуЗначенийНаКлиент ( Элемент ) Экспорт

ОбщегоНазначения . ТаблицаЗначенийВМассив ( ТаблицаЗначений );

Пример 2. Передать ТЗ на клиент с сервера (через Временное хранилище) в 1С 8.3:

Процедура ПередатьТаблицуЗначенийНаКлиент ( ТаблицаЗначений ) Экспорт

АдресХранилищаСТЗ = ПоместитьВоВременноеХранилище ( ТаблицаЗначений , ЭтаФорма . УникальныйИдентификатор );
ПереносТЗ = ПолучитьИзВременногоХранилища ( АдресХранилищаСТЗ );

Пример 3. Передать ТЗ на клиент с сервера (через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр) в 1С 8.3:

&НаКлиенте
Процедура ПолучитьТаблицуНаСервере ( Команда )

ТЗ_Стр = ПолучитьТЗНаСервере (); // Получаем данные на сервере
ТаблицаЗначений = ЗначениеИзСтрокиВнутр ( ТЗ_Стр );

&НаСервере
Функция ПолучитьТЗНаСервере ( ТЗ )

Возврат ЗначениеВСтрокуВнутр ( ТЗ );

Пример 4. Передать ТЗ на клиент с сервера (через реквизит формы в 1С 8.3:

&НаСервере
Функция ПередатьТаблицуЗначенийНаКлиент ( ОбъектСсылка , ИмяТабличнойЧасти )

ОбъектЗначение = ОбъектСсылка . ПолучитьОбъект ();
ОбъектТЧ = ОбъектЗначение [ ИмяТабличнойЧасти ]. Выгрузить ();

МассивРеквизитов = Новый Массив ;
МассивСтарыхРеквизитов = Новый Массив ;
МассивКолонок = Новый Массив ;

ИдКоллекции = "РеквизитФормыТЗ" ; // Реквизит формы с типом Табл.Значений

ТаблицаФормы = РеквизитФормыВЗначение ( ИдКоллекции );

Для Каждого Колонка Из ТаблицаФормы . Колонки Цикл
МассивСтарыхРеквизитов . Добавить ( ИдКоллекции + "." + Колонка . Имя );
КонецЦикла;

Для Каждого Колонка Из ОбъектТЧ . Колонки Цикл
МассивРеквизитов . Добавить ( Новый РеквизитФормы ( Колонка . Имя , Колонка . ТипЗначения , ИдКоллекции ));
МассивКолонок . Добавить ( Колонка . Имя );
КонецЦикла;

// Добвляем новые и удаляем старые колонки
ЭтаФорма . ИзменитьРеквизиты ( МассивРеквизитов , МассивСтарыхРеквизитов );

// Помещаем значение в реквизит формы
ЗначениеВРеквизитФормы ( ОбъектТЧ , ИдКоллекции );

Пример 5. Передать ТЗ на клиент с сервера (через Массив из структур) в 1С 8.3:

// Преобразуем ТаблицуЗначений в Массив из структур.
Функция ПреобразоватьТЗвМассив ( ТЗ ) Экспорт

МассивТЗ = Новый Массив ;
Для Каждого СтрокаТЗ Из ТЗ Цикл

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

МассивТЗ . Добавить ( СтруктураТЗ );

// Преобразуем Массив из структур в ТаблицуЗначений
Функция ПреобразоватьМассивВТЗ ( МассивТЗ ) Экспорт

ТЗ = Новый ТаблицаЗначений ;

Для Каждого ЭлементМассива Из МассивТЗ Цикл

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

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

Читайте также: