1С 8.x Управляемое приложение 1С 7.7. Бухучет Статьи Ссылки
1С 8.x arrow 1С 8.x arrow СКД arrow Работа с объектом в СКД
Работа с объектом в СКД Печать

Внешний объект для СКД – произвольная таблица значений.

 

Имена полей в СКД, которая использует объект в качестве источника данных, должны совпадать с именами колонок таблицы значений источника.

 

При добавлении полей в СКД, поля можно типизировать, что упростит дальнейшую работу с СКД: определение ресурсов, формирование настройки вывода отчета, построение отборов и т.д. В случае, если поле будет иметь тип Справочник, Документ, …, появится возможность напрямую использовать реквизиты объектов в построении СКД (без ручного прописывания обращений к вложенным реквизитам).

 

 

В примере используемый макет СКД не обязательно должен быть основным

Процедура Печать() экспорт
 
        //Получение настроек СКД из компоновщика
        настройкиСКД = КомпоновщикНастроек.Настройки;
        
        //Получение самой СКД из макета
        СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
        
        //Связь между таблицей значений и именами в СКД
        ВнешниеНаборыДанных = Новый Структура;
        ВнешниеНаборыДанных.Вставить("ОбъектСДанными ", ТаблицаЗначенийОтчета);
        
        //Макет компоновки
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,НастройкиСКД,ДанныеРасшифровкиОтчета );
        
        //Компоновка данных
        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
 
//ДанныеРасшифровкиОтчета - переменная также должна быть переменной формы. В нее СКД поместит информацию о расшифровке.
 
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровкиОтчета);
 
        //Вывод результата
        ДокументРезультат = ЭлементыФормы.Результат;
        ДокументРезультат.Очистить(); 
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновки);
        ДокументРезультат.Показать();
        
КонецПроцедуры

 

Через структуру «ВнешниеНаборыДанных»  в СКД можно добавить несколько источников данных

ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ОбъектСДанными ", ТаблицаЗначенийОтчета);

 

При формировании отчета СКД формирует таблицу специального формата, в которой хранит связь между полями результирующей формы и данными отчета. Именно благодаря этой таблице мы можем сформировать расшифровку ячейки отчета. В нашем примере расшифровка выгружается в переменную ДанныеРасшифровкиОтчета.

 

Процедура ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
 
        // Запретим стандартную обработку расшифровки
        СтандартнаяОбработка = Ложь;
        
        // Создадим и инициализируем обработчик расшифровки
        СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
        ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровкиОтчета, 
               Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
        
        //Перечень возможных действий
        ДоступныеДействия = Новый Массив();
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Отфильтровать);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить);
        ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Сгруппировать);
        
        // Осуществим выбор действия расшифровки пользователем
        НастройкиСКД = ОбработкаРасшифровки.Выполнить(Расшифровка,
                    ВыполненноеДействие, ДоступныеДействия);
        
        Если НастройкиСКД <> Неопределено Тогда
               
               // Пользователь выбрал действие, для которого нужно менять настройки
               Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить
                       ИЛИ ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.Оформить Тогда 
                       
                       КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиСКД);
                       Сформировать();
                       
               Иначе
               
                       // При других действиях - создадим новый отчет, откроем форму, сформируем отчет в ней
                       Отчет = ВнешниеОтчеты.Создать(ЭтаФорма.ОтчетОбъект.ИспользуемоеИмяФайла);
                       Форма = Отчет.ПолучитьФорму("ФормаОтчета");
                       Форма.Открыть();
                       
                       Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиСКД);
                       Форма.Печать();
               КонецЕсли;
               
        КонецЕсли;
        
КонецПроцедуры