1С СКД: зачем передавать список значений вместо массива при работе с параметрами
Введение
Система компоновки данных (СКД) — встроенный механизм платформы 1С, который позволяет разработчикам строить отчёты без использования SQL и получать данные в нужном разрезе. Основу отчёта в СКД составляют запросы, параметры, схемы данных и макеты. Параметры позволяют уточнять выборку: они могут использоваться почти в любой части запроса (в списке выборки, в условиях отбора, в виртуальных таблицах), и в коде они обозначаются символом & перед именем параметра.
Проблема: массив в качестве параметра
Иногда в отчёте нужно передать в отбор сразу несколько значений. Очевидное решение — положить эти значения в массив и присвоить массив параметру. Однако такой подход приводит к ошибкам. Пользователи форума HelpF.pro подчёркивают, что если параметр имеет тип «массив», компоновщик отчёта его не принимает. Вместо массива в СКД нужно вводить список значений — специальный объект платформы. Без этого отчёт может не сформироваться или отбросит все элементы массива.
Почему так происходит? Массив (Массив) в языке 1С — это простая динамическая коллекция, каждый элемент которой хранит только значение. Список значений (СписокЗначений) — более функциональный аналог массива: помимо значения хранит экранное представление и имеет методы для сортировки, поиска и отображения на форме. В учебнике mista.ru подчёркивается, что список значений — это аналог одномерного массива, который создаётся в памяти и служит для промежуточных данных, а массивы используются в 1С как обычный тип, подобный массивам в других языках. Компоновщик понимает списки значений, но не умеет работать с массивами в качестве источника отбора.
Разница между массивом и списком значений
Для лучшего понимания приведём основные отличия в краткой форме:
| Тип коллекции | Особенности |
|---|---|
| Массив | Простейшая коллекция. Хранит только значения. Нет экранного представления и методов сортировки. Быстрый и лёгкий, но предназначен для вычислений в коде, а не для взаимодействия с пользователем. |
| Список значений | Расширенный аналог массива. Каждый элемент представляет структуру со свойствами значение и представление. Список можно привязать к форме, отображать пользователю, сортировать и искать. Списки не сохраняются в базе и хранятся только в памяти. |
Для СКД важно, что параметры с галочкой Доступен список значений могут принимать именно список значений. Массивы для этой цели непригодны.
Настройка параметра в схеме компоновки данных
Чтобы параметр принимал несколько значений, разработчик должен:
- Создать или выбрать параметр. Откройте отчёт в конфигураторе 1С и перейдите на вкладку Параметры. Добавьте новый параметр или выберите существующий. Заполните поля Имя, Заголовок и выберите корректный Тип. Параметры могут использоваться в любом месте запроса и требуют предопределённого значения, иначе отчёт не построится.
- Указать допустимые значения. В поле Доступные значения задайте перечень допустимых элементов, если нужно ограничить выбор.
- Разрешить список значений. Обязательно поставьте флажок Доступен список значений — он определяет доступность параметру принимать значение «список значений». Без этого флажка список, сформированный программно, не присвоится параметру.
- Настроить значение по умолчанию. В поле Значение можно задать значение по умолчанию или оставить его пустым. Тип элементов списка должен соответствовать типу параметра.
Программная передача списка значений
При формировании отчёта программно необходимо сформировать список значений, заполнить его элементами и передать параметру. Ниже приведён пример кода из FAQ HelpF.pro:
// Сформируем список видов начисления для отчёта
СписокВидовНачисления = Новый СписокЗначений; СписокВидовНачисления.Добавить(Перечисления.НДСВидНачисления.НДСВосстановлен);
СписокВидовНачисления.Добавить(Перечисления.НДСВидНачисления.НДСНачисленКУплате);
СписокВидовНачисления.Добавить(Перечисления.НДСВидНачисления.НДСсАвансов);
// Найдём параметр «СписокВидовНачисления» и присвоим ему значение ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("СписокВидовНачисления");
ПараметрДанных.Значение = СписокВидовНачисления;
ПараметрДанных.Использование = Истина;
Код показывает, что список значений создаётся, наполняется элементами и затем присваивается свойству Значение параметра. Авторы FAQ отмечают: если не установить флаг «Доступен список значений», присвоение не сработает.
Такой подход можно адаптировать для любых типов данных. Если у вас уже есть массив, создайте пустой СписокЗначений и с помощью цикла добавьте в него элементы массива. Для заполнения списка значениями из запроса воспользуйтесь методом Выгрузить().ВыгрузитьКолонку(), затем используйте ЗагрузитьЗначения() для наполнения списка.
Если параметр необходимо заполнить через интерфейс, включите режим Отображать недоступные параметры на вкладке «Настройки». Тогда параметр‑массив появится в форме, и пользователь сможет вручную заполнить список значений.
Рекомендации и типичные ошибкиТип элементов должен совпадать. Если параметр имеет тип «Справочник.Контрагенты», элементы списка должны быть ссылками на этот справочник.
Отбор с несколькими значениями. В запросе используйте конструкцию ГДЕ Поле В &ПараметрСписок — система автоматически развернёт список значений в условие IN.
Не используйте массивы. Даже если у вас уже есть массив, преобразуйте его в СписокЗначений. Массивы не подходят для передачи нескольких значений в параметр отчёта.
Значение по умолчанию. Пустой список означает отсутствие отбора — отчёт покажет все данные. Если параметр должен быть обязательным, установите для него жёсткое использование (флажок Использование).
Заключение
Использование массивов в качестве параметров в системе компоновки данных приводит к ошибкам — платформа просто не воспринимает массив как корректный источник для отбора. Правильный способ передачи нескольких значений — использование объекта СписокЗначений и установка флажка Доступен список значений. Это обеспечивает корректную работу отчёта, удобную работу пользователя и возможность задавать значения программно. Помните, что параметры в СКД — мощный инструмент: они используются в различных частях запроса и позволяют гибко управлять логикой формирования отчёта. Качественная настройка параметров и грамотное использование списков значений помогут избежать многих ошибок и сделать отчёты 1С удобными для пользователей.
+ There are no comments
Add yours