Внешний объект для СКД – произвольная таблица значений.
Имена полей в СКД, которая использует объект в качестве источника данных, должны совпадать с именами колонок таблицы значений источника.
При добавлении полей в СКД, поля можно типизировать, что упростит дальнейшую работу с СКД: определение ресурсов, формирование настройки вывода отчета, построение отборов и т.д. В случае, если поле будет иметь тип Справочник, Документ, …, появится возможность напрямую использовать реквизиты объектов в построении СКД (без ручного прописывания обращений к вложенным реквизитам).
В примере используемый макет СКД не обязательно должен быть основным
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Процедура Печать() экспорт //Получение настроек СКД из компоновщика настройкиСКД = КомпоновщикНастроек.Настройки; //Получение самой СКД из макета СхемаКомпоновкиДанных = ПолучитьМакет("Макет"); //Связь между таблицей значений и именами в СКД ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ОбъектСДанными ", ТаблицаЗначенийОтчета); //Макет компоновки КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,НастройкиСКД,ДанныеРасшифровкиОтчета ); //Компоновка данных ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; //ДанныеРасшифровкиОтчета - переменная также должна быть переменной формы. В нее СКД поместит информацию о расшифровке. ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровкиОтчета); //Вывод результата ДокументРезультат = ЭлементыФормы.Результат; ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); ДокументРезультат.Показать(); КонецПроцедуры |
Через структуру «ВнешниеНаборыДанных» в СКД можно добавить несколько источников данных
1 2 |
ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ОбъектСДанными ", ТаблицаЗначенийОтчета); |
При формировании отчета СКД формирует таблицу специального формата, в которой хранит связь между полями результирующей формы и данными отчета. Именно благодаря этой таблице мы можем сформировать расшифровку ячейки отчета. В нашем примере расшифровка выгружается в переменную ДанныеРасшифровкиОтчета.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
Процедура ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) // Запретим стандартную обработку расшифровки СтандартнаяОбработка = Ложь; // Создадим и инициализируем обработчик расшифровки СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровкиОтчета, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); //Перечень возможных действий ДоступныеДействия = Новый Массив(); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить); ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Сгруппировать); // Осуществим выбор действия расшифровки пользователем НастройкиСКД = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия); Если НастройкиСКД <> Неопределено Тогда // Пользователь выбрал действие, для которого нужно менять настройки Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить ИЛИ ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить Тогда КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиСКД); Сформировать(); Иначе // При других действиях - создадим новый отчет, откроем форму, сформируем отчет в ней Отчет = ВнешниеОтчеты.Создать(ЭтаФорма.ОтчетОбъект.ИспользуемоеИмяФайла); Форма = Отчет.ПолучитьФорму("ФормаОтчета"); Форма.Открыть(); Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиСКД); Форма.Печать(); КонецЕсли; КонецЕсли; КонецПроцедуры |
источник: http://www.1c1c1c.ru/