Last active
March 18, 2020 07:25
-
-
Save b4tman/ba68a64247c539a9c78a304c7d626747 to your computer and use it in GitHub Desktop.
1С, произвольное ДеревоЗначений или ТаблицаЗначений в ТабличныйДокумент через СКД
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Область КоллекцияВТабДок | |
Функция ДеревоТаблица_ВТабДок(ДанныеОбъекта, Заголовок="", ПоляИтога="") | |
Если Тип("ДеревоЗначений") = ТипЗнч(ДанныеОбъекта) Тогда | |
ЗаполнитьИД_Дерева_ПолучитьНомер(ДанныеОбъекта); | |
ИначеЕсли Тип("ТаблицаЗначений") = ТипЗнч(ДанныеОбъекта) Тогда | |
;// всё норм | |
Иначе | |
ВызватьИсключение "Неизвестный тип объекта"; | |
КонецЕсли; | |
ТабДокумент = Новый ТабличныйДокумент; | |
ИсточникиДанных = Новый Структура("Данные", ДанныеОбъекта); | |
СхемаКомпоновки = ПолучитьСхемуКомпоновкиПоКоллекции(ДанныеОбъекта,,,, ПоляИтога); | |
Настройки = СхемаКомпоновки.НастройкиПоУмолчанию; | |
Если НЕ ПустаяСтрока(Заголовок) Тогда | |
Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", Заголовок); | |
КонецЕсли; | |
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; | |
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, СхемаКомпоновки.НастройкиПоУмолчанию); | |
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; | |
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ИсточникиДанных); | |
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; | |
ПроцессорВывода.УстановитьДокумент(ТабДокумент); | |
ПроцессорВывода.Вывести(ПроцессорКомпоновки); | |
Возврат ТабДокумент; | |
КонецФункции | |
Функция ЗаполнитьИД_Дерева_ПолучитьНомер(ЭлементДерева, НачальныйНомер=1, РодительИД=0) | |
Если Тип("ДеревоЗначений") = ТипЗнч(ЭлементДерева) Тогда | |
Дерево = ЭлементДерева; | |
Дерево.Колонки.Добавить("ИД", Новый ОписаниеТипов("Число")); | |
Дерево.Колонки.Добавить("РодительИД", Новый ОписаниеТипов("Число")); | |
КонецЕсли; | |
Сч = НачальныйНомер; | |
Для Каждого ТекСтр Из ЭлементДерева.Строки Цикл | |
ТекСтр.РодительИД = РодительИД; | |
ТекСтр.ИД = Сч; | |
Сч = 1 + Сч; | |
Сч = ЗаполнитьИД_Дерева_ПолучитьНомер(ТекСтр, Сч, ТекСтр.ИД); | |
КонецЦикла; | |
Возврат Сч; | |
КонецФункции | |
Функция ПолучитьСхемуКомпоновкиПоКоллекции(ДанныеОбъекта, ВыбранныеПоляОбъекта = Неопределено, ПолеИД = "ИД", ПолеРодительИД = "РодительИД", ПоляИтога="") | |
ЭтоДерево = ( Тип("ДеревоЗначений") = ТипЗнч(ДанныеОбъекта) ); | |
Если ВыбранныеПоляОбъекта = Неопределено Тогда | |
ВыбранныеПоляОбъекта = Новый Массив; | |
КонецЕсли; | |
ЗаполнитьВыбранныеПоля = НЕ ВыбранныеПоляОбъекта.Количество(); | |
СхемаКомпоновки = Новый СхемаКомпоновкиДанных; | |
НастройкиКомпоновки = СхемаКомпоновки.НастройкиПоУмолчанию; | |
ИсточникДанных = СхемаКомпоновки.ИсточникиДанных.Добавить(); | |
ИсточникДанных.Имя = "ИсточникДанных"; | |
ИсточникДанных.ТипИсточникаДанных = "Local"; | |
НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных")); | |
НаборДанных.ИмяОбъекта = "Данные"; | |
НаборДанных.Имя = "НаборДанных"; | |
НаборДанных.ИсточникДанных = "ИсточникДанных"; | |
Для Каждого ТекКолонка Из ДанныеОбъекта.Колонки Цикл | |
ИмяПоля = ТекКолонка.Имя; | |
ЗаголовокПоля = ТекКолонка.Заголовок; | |
ПолеНабора = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); | |
ПолеНабора.Заголовок = ЗаголовокПоля; | |
ПолеНабора.Поле = ИмяПоля; | |
ПолеНабора.ТипЗначения = ТекКолонка.ТипЗначения; | |
Если ЗаполнитьВыбранныеПоля И НЕ (ИмяПоля = ПолеИД ИЛИ ИмяПоля = ПолеРодительИД)Тогда | |
ВыбранныеПоляОбъекта.Добавить(Новый Структура("Имя, Заголовок", ИмяПоля, ЗаголовокПоля)); | |
КонецЕсли; | |
КонецЦикла; | |
Если ЭтоДерево Тогда | |
СвязьНабора = СхемаКомпоновки.СвязиНаборовДанных.Добавить(); | |
СвязьНабора.НаборДанныхИсточник = "НаборДанных"; | |
СвязьНабора.НаборДанныхПриемник = "НаборДанных"; | |
СвязьНабора.ВыражениеИсточник = ПолеИД; | |
СвязьНабора.ВыражениеПриемник = ПолеРодительИд; | |
СвязьНабора.НачальноеВыражение = "0"; | |
КонецЕсли; | |
Если Не ПустаяСтрока(ПоляИтога) Тогда | |
СписокРесурсов = СтрРазделить(ПоляИтога, ","); | |
Для Каждого Ресурс Из СписокРесурсов Цикл | |
ПолеИтога = СхемаКомпоновки.ПоляИтога.Добавить(); | |
ПолеИтога.ПутьКДанным = Ресурс; | |
ЭтоЧисло = ДанныеОбъекта.Колонки[Ресурс].ТипЗначения.СодержитТип(Тип("Число")); | |
АгрегатнаяФункция = ?(ЭтоЧисло, "Сумма", "Количество"); | |
ПолеИтога.Выражение = СтрШаблон("%1(%2)", АгрегатнаяФункция, Ресурс); | |
КонецЦикла; | |
КонецЕсли; | |
ВыбранныеПоля = НастройкиКомпоновки.Выбор.Элементы; | |
Для Каждого ТекПоле Из ВыбранныеПоляОбъекта Цикл | |
ПолеОтчет = ВыбранныеПоля.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); | |
ПолеОтчет.Поле = Новый ПолеКомпоновкиДанных(ТекПоле.Имя); | |
ПолеОтчет.Заголовок = ТекПоле.Заголовок; | |
КонецЦикла; | |
СтруктураГруппировки = НастройкиКомпоновки.Структура; | |
ЭлементГруппировки = СтруктураГруппировки.Добавить(Тип("ГруппировкаКомпоновкиДанных")); | |
ЭлементГруппировки.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); | |
Возврат СхемаКомпоновки; | |
КонецФункции | |
// КоллекцияВТабДок | |
#КонецОбласти |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
источник: https://start1c.blogspot.com/2017/02/blog-post.html