Какие наборы данных можно использовать в СКД?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Наборы данных в СКД (Система компоновки данных)
СКД (Система компоновки данных) — это мощный инструмент 1С для создания гибких отчётов. Наборы данных — это основной компонент СКД, из которых строится информация для отчёта. Расскажу подробно о каждом типе.
Что такое набор данных в СКД
Набор данных — это источник информации для отчёта. Это не сами данные, а описание того, как их получить. СКД использует наборы для построения отчёта на основе данных из БД или других источников.
Каждый набор содержит:
- Описание источника данных
- Список полей (реквизиты, ресурсы)
- Фильтры и условия
Основные типы наборов данных
1. Запрос
Назначение: Получение данных через SQL-запрос.
Как использовать: Самый мощный и гибкий способ получения данных.
// Описание набора данных "Запрос" в СКД
Процедура ПриКомпоновкеРезультата(ПараметрыКомпоновки, РезультатКомпоновки)
// Создание нового набора данных
НаборДанных = Новый НаборДанных();
// Текст запроса к БД
НаборДанных.Запрос = Новый Запрос(
"ВЫБРАТЬ
| Товары.Ссылка КАК Товар,
| Товары.Наименование КАК НаименованиеТовара,
| СУММА(ОстаткиТоваров.Количество) КАК КоличествоОстатка,
| СУММА(ОстаткиТоваров.Сумма) КАК СтоимостьОстатков
|ИЗ
| Справочник.Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНа) КАК ОстаткиТоваров
| ПО Товары.Ссылка = ОстаткиТоваров.Товар
|СГРУППИРОВАТЬ ПО
| Товары.Ссылка,
| Товары.Наименование
");
НаборДанных.Запрос.УстановитьПараметр("ДатаНа", ПараметрыКомпоновки.Параметры.ДатаНа);
КонецПроцедуры
Достоинства:
- Полная гибкость в формировании данных
- Возможность любых JOINов и условий
- Оптимизированное выполнение на БД
Недостатки:
- Требует знания SQL
- Сложнее для новичков
2. Таблица (Table)
Назначение: Получение данных из справочника или документа напрямую.
Как использовать: Простой способ получить данные из объекта конфигурации.
// Использование таблицы в СКД
// Прямой доступ к справочнику
НаборДанных = Новый НаборДанных();
НаборДанных.ИспользоватьДанные = "Справочник.Товары";
// Поля берутся автоматически из метаданных
// - Ссылка
// - Наименование
// - КодВраче
// - Описание
// и т.д.
Достоинства:
- Просто в использовании
- Автоматический доступ к реквизитам
Недостатки:
- Ограниченная гибкость
- Нельзя делать сложные фильтры
3. Визуальный конструктор запросов
Назначение: Создание запроса без написания SQL вручную.
Как использовать: В Designer'е можно визуально выбирать таблицы, поля, условия.
// Эквивалент визуального конструктора
НаборДанных = Новый НаборДанных();
// Выбираем таблицу
Таблица = НаборДанных.ДобавитьТаблицу("Справочник.Товары", "Товары");
// Добавляем поля
НаборДанных.ДобавитьПоле(Таблица, "Ссылка", "Товар");
НаборДанных.ДобавитьПоле(Таблица, "Наименование", "НаименованиеТовара");
// Добавляем условие
Условие = НаборДанных.ДобавитьУсловие();
Условие.Левая = Новый ПолеКомпоновкиДанных("Наименование");
Условие.ОператорСравнения = ОператорСравненияКомпоновкиДанных.Содержит;
Условие.Правая = Новый ПараметрКомпоновкиДанных("ПоискВсё");
4. Встроенный набор данных
Назначение: Использование готового набора данных из конфигурации.
Как использовать: Ссылка на заранее определённый набор данных.
// В СКД можно ссылаться на другой набор данных
// как на подчиненный источник данных
ИспользованиеЭтой =
"ДанныеОтчёта" // Имя другого набора данных
5. Программный набор данных
Назначение: Полностью программное создание данных в обработчиках.
// Создание данных вручную в обработчике
Процедура ПриКомпоновкеРезультата(ПараметрыКомпоновки, РезультатКомпоновки)
// Вручную создаём таблицу результатов
ТаблицаДанных = Новая ТаблицаЗначений();
ТаблицаДанных.Колонки.Добавить("Товар");
ТаблицаДанных.Колонки.Добавить("Количество");
ТаблицаДанных.Колонки.Добавить("Сумма");
// Заполняем данные
Для Каждого Товар Из ПолучитьТовары() Цикл
СтрокаДанных = ТаблицаДанных.Добавить();
СтрокаДанных.Товар = Товар.Наименование;
СтрокаДанных.Количество = Товар.Остаток;
СтрокаДанных.Сумма = Товар.СтоимостьОстатка;
КонецЦикла;
// Используем в компоновке
КомпоновщикДанных = Новый КомпоновщикДанных();
КомпоновщикДанных.ИсходныеДанные = ТаблицаДанных;
КонецПроцедуры
6. Виртуальная таблица регистра
Назначение: Использование виртуальных таблиц регистров накопления.
// Прямое использование виртуальной таблицы
НаборДанных.Запрос = Новый Запрос(
"ВЫБРАТЬ
| Остатки.Товар,
| Остатки.Склад,
| СУММА(Остатки.Количество) КАК ОстатокКоличество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНа) КАС Остатки
|СГРУППИРОВАТЬ ПО
| Остатки.Товар,
| Остатки.Склад
");
7. Объединённый набор данных
Назначение: Объединение нескольких наборов данных в один.
// Объединение данных из разных источников
НаборДанных1 = ... // Первый источник
НаборДанных2 = ... // Второй источник
// В СКД настроить UNION
Запрос = Новый Запрос(
"ВЫБРАТЬ Товар, Количество ИЗ Таблица1
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ Товар, Количество ИЗ Таблица2
");
Поля в наборе данных
Типы полей:
- Реквизит (Dimension) — измерение для группировки
Поле = НаборДанных.ДобавитьПоле(Таблица, "Товар");
Поле.ТипПоля = ТипПоляКомпоновкиДанных.Измерение;
Поле.ТипЗначения = Новый ОписаниеТипов("Ссылка.Товары");
- Ресурс (Measure) — значение для расчёта
Поле = НаборДанных.ДобавитьПоле(Таблица, "Количество");
Поле.ТипПоля = ТипПоляКомпоновкиДанных.Ресурс;
Поле.ФункцияАгрегирования = ФункцияАгрегирования.Сумма;
- Атрибут (Attribute) — дополнительные данные
Поле = НаборДанных.ДобавитьПоле(Таблица, "Описание");
Поле.ТипПоля = ТипПоляКомпоновкиДанных.Атрибут;
Практический пример
// Полный пример отчёта с несколькими наборами данных
Процедура ПриКомпоновкеРезультата(ПараметрыКомпоновки, РезультатКомпоновки)
// Набор 1: Товары с остатками
НаборДанных1 = Новый НаборДанных();
НаборДанных1.Запрос = Новый Запрос(
"ВЫБРАТЬ
| Товары.Ссылка КАК Товар,
| Товары.Наименование КАК НаименованиеТовара,
| СУММА(Остатки.Количество) КАК Остаток
|ИЗ
| Справочник.Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНа) КАС Остатки
| ПО Товары.Ссылка = Остатки.Товар
|СГРУППИРОВАТЬ ПО
| Товары.Ссылка,
| Товары.Наименование
");
// Набор 2: Движения товаров
НаборДанных2 = Новый НаборДанных();
НаборДанных2.Запрос = Новый Запрос(
"ВЫБРАТЬ
| Движения.Период,
| Движения.Товар,
| Движения.ВидДвижения,
| Движения.Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Движения(&ДатаНачало, &ДатаКонец) КАС Движения
");
НаборДанных2.Запрос.УстановитьПараметр("ДатаНачало", ПараметрыКомпоновки.Параметры.ДатаНачало);
НаборДанных2.Запрос.УстановитьПараметр("ДатаКонец", ПараметрыКомпоновки.Параметры.ДатаКонец);
КонецПроцедуры
Рекомендации
Выбор типа набора данных:
| Сценарий | Тип набора | Причина |
|---|---|---|
| Простой отчёт по справочнику | Таблица | Просто и быстро |
| Сложная аналитика | Запрос | Гибкость и мощь |
| Расчёты вручную | Программный | Полный контроль |
| Объединение источников | Объединённый | Удобство |
Оптимизация:
- Используйте индексы в регистрах
- Минимизируйте количество JOIN'ов
- Добавляйте условия в WHERE, а не в СКД
- Кэшируйте часто используемые данные
Заключение
Наборы данных в СКД — это гибкий и мощный механизм для получения информации:
- Запрос — для максимальной гибкости
- Таблица — для простоты
- Программный — для расчётов
Правильный выбор набора данных критичен для производительности и простоты поддержки отчётов.