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

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Часто в процессе разработки отчетов или обработок на платформе 1С мы сталкиваемся с задачей вывода данных в ТаблицаЗначений, где структура колонок зависит от динамических параметров. В частности, это касается вывода остатков по складам, количество которых может меняться. Давайте разберем, как эффективно решить эту задачу.

Способ №1: Программное добавление колонок в цикле

Это классический подход, который позволяет гибко управлять структурой данных. Мы сначала получаем список складов, а затем расширяем нашу таблицу.

  1. Получение списка складов. Выполним запрос к регистру накопления остатков, чтобы получить уникальный список складов, по которым есть остатки.
  2. Формирование колонок. Используя метод Колонки.Добавить(), создадим соответствующие колонки в нашей ТаблицаЗначений.
  3. Заполнение данными. Пройдемся по результатам основного запроса и заполним строки.

Рассмотрим пример кода для реализации этого подхода:


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

// Теперь заполняем ТЗ данными
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    СтрокаТЗ = ТЗ.Найти(Выборка.Номенклатура, "Номенклатура");
    Если СтрокаТЗ = Неопределено Тогда
        СтрокаТЗ = ТЗ.Добавить();
        СтрокаТЗ.Номенклатура = Выборка.Номенклатура;
    КонецЕсли;
    
    ИмяКолонки = "Склад_" + Выборка.Склад.Код;
    СтрокаТЗ[ИмяКолонки] = Выборка.КоличествоОстаток;
КонецЦикла;

Способ №2: Использование возможностей СКД

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

Мы можем использовать программный доступ к ПроцессорКомпоновкиДанных и ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений. Это позволяет сгенерировать результат по любому запросу с группировками по колонкам и сразу выгрузить его в ТаблицаЗначений.

Рассмотрим основные преимущества этого метода:

Рекомендации по оптимизации

При работе с динамическими таблицами важно помнить о следующих нюансах:

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

← На главную