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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке на платформе 1С:Предприятие часто возникает задача получить данные из результата запроса или таблицы значений не в виде обычного массива, а в виде объекта СписокЗначений. Метод таблицы значений ВыгрузитьКолонку() всегда возвращает тип Массив. Разберем, как быстро загрузить полученные данные в список значений и выполнить обратное преобразование без использования циклов обхода.

Преобразование массива или колонки таблицы в СписокЗначений

Рассмотрим стандартную ситуацию, когда после выполнения запроса выгружается колонка таблицы. Чтобы не организовывать ручной перебор элементов через цикл Для Каждого, воспользуемся встроенным методом объекта СписокЗначений — ЗагрузитьЗначения().

Посмотрим на пример кода:


Рез = Запрос.Выполнить().Выгрузить();
ОфигенныйСписок = Новый СписокЗначений;
ОфигенныйСписок.ЗагрузитьЗначения(Рез.ВыгрузитьКолонку("ЗаказПокупателя"));

Разберем по шагам, как работает этот механизм:

  1. Метод ВыгрузитьКолонку("ИмяКолонки") у объекта ТаблицаЗначений формирует и возвращает одномерный Массив со всеми значениями указанной колонки.
  2. Создаем новый экземпляр коллекции через конструктор Новый СписокЗначений.
  3. Метод ЗагрузитьЗначения() принимает массив в качестве параметра и заполняет список значениями элементов этого массива за один вызов.

Важно: Метод ЗагрузитьЗначения() полностью очищает существующий список перед добавлением новых элементов. При этом заполняется исключительно свойство Значение каждого созданного элемента списка. Свойства Представление, Пометка и Картинка остаются с значениями по умолчанию.

Обратная выгрузка: получение массива из СпискаЗначений

Проанализируем обратную задачу, когда у нас уже есть заполненный СписокЗначений, и требуется быстро получить из него одномерный Массив значений.

Для этого в платформе предусмотрен парный метод ВыгрузитьЗначения(). Посмотрим на пример вызова:

МассивЗаказов = ОфигенныйСписок.ВыгрузитьЗначения();

Этот метод возвращает новый Массив, содержащий только свойства Значение элементов списка значений. Представления, пометки и картинки в массив не переносятся.

Оптимальные подходы при работе с большими объемами данных

Рассмотрим особенности использования памяти при цепочке вызовов Выгрузить() -> ВыгрузитьКолонку() -> ЗагрузитьЗначения(). При обработке больших выборок данных создание промежуточной таблицы значений и промежуточного массива приводит к повышенному расходу оперативной памяти.

Если требуется заполнить список значений напрямую из запроса (особенно с установкой пользовательских представлений), эффективнее использовать прямой обход выборки:


СписокЗаказов = Новый СписокЗначений;
Выборка = Запрос.Выполнить().Выбрать();

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

Выясним практические различия между типами коллекций:

  1. Массив — компактная структура для серверных алгоритмов и передачи списков параметров в запросы (в оператор ГДЕ Ссылка В (&Параметр) одинаково успешно передаются и Массив, и СписокЗначений).
  2. СписокЗначений — специализированный объект, ориентированный на пользовательский интерфейс (интерактивный выбор элементов, списки с флажками-пометками, выпадающие меню). Он занимает больше памяти, но сериализуется и свободно передается между клиентом и сервером в управляемых формах.
← На главную