1С 8.3 Схема компоновки данных из запроса
Данные > Примеры кода 1С > 1С 8.3 Схема компоновки данных (СКД)
Перейти в раздел примеры кода 1С 8.3:

Преимущества СКД из Запроса:
- Гибкость: можно создавать сложные отчеты без изменения кода.
- Универсальность: подходит для различных видов отчетов.
- Интерактивность: пользователь может настраивать параметры и отборы.
СКД из Запроса в 1С 8.3:
// Схема компоновки данных из запроса.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/160
//
// Параметры:
// ТекстЗапроса - Строка
// ПараметрыЗапроса - Структура
//
// Возвращаемое значение:
// СхемаКомпоновкиДанных
//
// Пример:
// СКД = СхемаКомпоновкиДанныхИзЗапроса("ВЫБРАТЬ * ИЗ Справочник.Валюты");
//
Функция СхемаКомпоновкиДанныхИзЗапроса(ТекстЗапроса, ПараметрыЗапроса = Неопределено) Экспорт
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных();
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ЛокальнаяБаза";
ИсточникДанных.СтрокаСоединения = "";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
НаборДанных.Запрос = ТекстЗапроса;
НаборДанных.Имя = "Запрос";
НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда
Для Каждого КлючИЗначение Из ПараметрыЗапроса Цикл
ПараметрЗапроса = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрЗапроса.Имя = КлючИЗначение.Ключ;
ПараметрЗапроса.Значение = КлючИЗначение.Значение;
ПараметрЗапроса.ОграничениеИспользования = Истина;
КонецЦикла;
КонецЕсли;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных();
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КоллекцияВыбранныхПолей = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Выбор.Элементы;
Для Каждого ДоступноеПоле Из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
Если НЕ ДоступноеПоле.Папка Тогда
ВыбранноеПоле = КоллекцияВыбранныхПолей.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ВыбранноеПоле, ДоступноеПоле, "Поле,Заголовок");
КонецЕсли;
КонецЦикла;
ДетальныеЗаписи = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Возврат СхемаКомпоновкиДанных;
КонецФункции
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/160
//
// Параметры:
// ТекстЗапроса - Строка
// ПараметрыЗапроса - Структура
//
// Возвращаемое значение:
// СхемаКомпоновкиДанных
//
// Пример:
// СКД = СхемаКомпоновкиДанныхИзЗапроса("ВЫБРАТЬ * ИЗ Справочник.Валюты");
//
Функция СхемаКомпоновкиДанныхИзЗапроса(ТекстЗапроса, ПараметрыЗапроса = Неопределено) Экспорт
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных();
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ЛокальнаяБаза";
ИсточникДанных.СтрокаСоединения = "";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
НаборДанных.Запрос = ТекстЗапроса;
НаборДанных.Имя = "Запрос";
НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда
Для Каждого КлючИЗначение Из ПараметрыЗапроса Цикл
ПараметрЗапроса = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрЗапроса.Имя = КлючИЗначение.Ключ;
ПараметрЗапроса.Значение = КлючИЗначение.Значение;
ПараметрЗапроса.ОграничениеИспользования = Истина;
КонецЦикла;
КонецЕсли;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных();
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КоллекцияВыбранныхПолей = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Выбор.Элементы;
Для Каждого ДоступноеПоле Из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
Если НЕ ДоступноеПоле.Папка Тогда
ВыбранноеПоле = КоллекцияВыбранныхПолей.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ВыбранноеПоле, ДоступноеПоле, "Поле,Заголовок");
КонецЕсли;
КонецЦикла;
ДетальныеЗаписи = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Возврат СхемаКомпоновкиДанных;
КонецФункции
// MIT License
// Copyright (c) 2025 SeiOkami
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник