Как программно сформировать отчет СКД указав параметры и на выходе получить таблице значений? В одном документе для расчета потребовалось получать данные из отчета на СКД, реализовал следующим образом:
Код 1C v 8.х //Програмное формирование отчета СКД
СхемаОст = Отчеты.ТоннажПоЭкспедиторам.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикНастроекНастройки = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекНастройки.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОст));
КомпоновщикНастроекНастройки.ЗагрузитьНастройки(СхемаОст.НастройкиПоУмолчанию);
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", НачалоМесяца(МесяцРасчета));
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", КонецМесяца(МесяцРасчета));
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаОст, КомпоновщикНастроекНастройки.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеТЗ = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ДанныеТЗ);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ТоннажПоЭкспедиторам.Очистить();
// ДанныеТЗ.ВыбратьСтроку();
Для каждого СтрокаТЗ Из ДанныеТЗ Цикл
Если ЗначениеЗаполнено(СтрокаТЗ.Экспедитор) и СтрокаТЗ.Доставка=Неопределено Тогда
нСтр = ТоннажПоЭкспедиторам.Добавить();
ЗаполнитьЗначенияСвойств(нСтр,СтрокаТЗ);
нСтр.Сотрудник=СтрокаТЗ.Экспедитор;
Иначе
Продолжить;
КонецЕсли;
КонецЦикла;
Категория:
Схема Компоновки Данных Пример программного вызова СКД отчета Пример использования СКД отчета для заполнения табличного документа.
Вызываем отчет “Маркетинговый план” сделаного на основе СКД.
Установка параметр “Вероятность”. И отбора по ключу “Основание.МВЗ.СПО”
Код 1C v 8.х Отчет = Отчеты.МаркетинговыйПлан.Создать();
Схема = Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ТабДок = Новый ТабличныйДокумент;
// Типы переменных:
// Схема - СхемаКомпоновкиДанных
// Настройки - НастройкиКомпоновкиДанных
// насПланЕБП - ЗначениеПараметраНастроекКомпоновкиДанных
// Макет - МакетКомпоновкиДанных
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема);
КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);
// --- установка параметров
Настройки = Схема.НастройкиПоУмолчанию;
насВероятнось = Настройки.ПараметрыДанных.Элементы.Найти("Вероятность");
насВероятнось.Использование = Истина;
насВероятнось.Значение = Веротяность;
// --- установка отборов
Если ЗначениеЗаполнено(СПО) тогда
ПолеОтбораСПО = Новый ПолеКомпоновкиДанных("Основание.МВЗ.СПО");
ОтборПоСПО = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборПоСПО.ЛевоеЗначение = ПолеОтбораСПО;
ОтборПоСПО.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборПоСПО.ПравоеЗначение = СПО;
ОтборПоСПО.Использование = Истина;
КонецЕсли;
// --- компануем
Макет = КомпоновщикМакета.Выполнить(Схема, Настройки);
ПроцессорКомпоновки.Инициализировать(Макет,,,Истина);
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Категория:
Схема Компоновки Данных СКД и Сводная таблица В СКД - набор данных Объект. Имя объекта - Табл
Табл - это Таблица Значений, которую я получаю из внешнего файла
В форме отчета, в процедуре
ПередОткрытием() есть следующий код:
Код 1C v 8.х ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("Табл",Табл);
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных1");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//Выводит табличку после открытия формы в результат, все замечательно.
//Затем добавляю строки по выводу СКД:
ИсточникСводнойТаблицы = Новый ИсточникДанныхСводнойТаблицыКомпоновкиДанных;
ИсточникСводнойТаблицы.УстановитьСхему(СхемаКомпоновкиДанных);
ЭлементыФормы.Результат.ВстроенныеТаблицы.СводнаяТаблица1.ИсточникДанных = ИсточникСводнойТаблицы;
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
ИсточникСводнойТаблицы.УстановитьНастройки(КомпоновщикНастроек.Настройки);
//ругается на последнюю строку
//Ошибка источника сводной таблицы.
Нужно сделать набор данных - запрос и оставить код, который выше, после "Затем добавляю строки по выводу СКД:" и все прекрасно выводится в сводной таблице
ПодводныйТаракан Категория:
Схема Компоновки Данных Использования Внешнего набора данных - Таблица Значений Для использования в схеме компоновки данных внешнего набора данных сначала необходимо создать набор данных объект, и указать имя объекта, содержащего данные:
Далее необходимо программно выполнить формирование отчета, заполнив внешний набор данных:
Код 1C v 8.х ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("тз",тз);
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных);
ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
В данном примере тз – переменная с типом таблица значений.
also Категория:
Схема Компоновки Данных Как изменить слово «Итого» в общих итогах? Иногда возникает желание изменить само слово Итого в общих итогах.
Сделаем это следующим образом:
Код 1C v 8.х //Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
Настройки, ДанныеРасшифровки);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
ДанныеРасшифровки);
//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанных
ВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//Ищем в табличном документе "Итого" и заменяем
ТекОбласть = Результат.НайтиТекст("Итого", ТекОбласть, Результат.Область(),
Истина, Истина, Истина, Ложь);
Если ТекОбласть <> Неопределено Тогда
ТекОбласть.Текст = "МоёИтого";
КонецЕсли;
После этого общие итоги выглядят примерно так:
also Категория:
Запросы Использование двух Схем Компоновки Данных - загрузка, получение параметров и настроек Есть две схемы, основная и не основная:
Код 1C v 8.х
//Как для формирования отчета испольновать не основную СКД? так:
НоваяСхема = ПолучитьМакет(НеОсновнаяСхемаКомпоновкиДанных);
Отчет.СхемаКомпоновкиДанных = НоваяСхема;
//Загрузим настройки СКД
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НоваяСхема.НастройкиПоУмолчанию);
Код 1C v 8.х //Как программно получить параметры не основной СКД? так:
Схема = ПолучитьМакет("НеОсновнаяСхемаКомпоновкиДанных");
ПараметрыСхемы = Схема.Параметры;
Код 1C v 8.х // Абазин Антон: мне иногда лень городить программное заполнение схемы,
// я ее делаю в режиме предприятия, сохраняю в xml,
// потом этот xml помещаю в макет как двоичные данные
// потом в коде сохраняю xml из макета в tmp и подставляю ее в скд ))
Макет = ПолучитьМакет("Настройка");
Макет.Записать(ИмяФайла);
Чтение = Новый ЧтениеXML;
НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
Чтение.ОткрытьФайл(ИмяФайла);
Настройки = НовыйСXDTO.ПрочитатьXML(Чтение);
КомпоновщикНастроек1 = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек1.ЗагрузитьНастройки(Настройки);//СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Категория:
Схема Компоновки Данных Как программно Сохранить Схему СКД в XML Как программно сохранить схему в XML, аналогично тому как это делается по кнопке «Сохранить схему в файл»?
Код 1C v 8.х
ЗаписьXML = Новый ЗаписьXML;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
Диалог.Фильтр = "Файлы XML (*.xml) |*.xml";
Если НЕ Диалог.Выбрать() Тогда
Возврат;
КонецЕсли;
Путь = Диалог.ПолноеИмяФайла;
ЗаписьXML.ОткрытьФайл(Путь);
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"), "dataComposition", "http://v8.1c.ru/8.1/data-composition-system/composition-template");
Автор:
also Категория:
Схема Компоновки Данных Программный вывод отчета СКД Несмотря на то, изучающие СКД встречаются с этим на первый или второй день, это должно быть в разделе FAQ. Простой пример программного вывода отчета на компоновке, использующий настройки по умолчанию.
Код 1C v 8.х //Получаем схему из макета
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Автор:
also Категория:
Схема Компоновки Данных Пример вывода в шапке отчета произвольного текста и Картинки Многие спрашивают "Как в шапке отчета созданом с помощи СКД разместить произвольный текст и Картинку?", так вот:
1. Для примера буду использовать отчет созданный в
Пример разработки простого отчета - Схема Компоновки Данных (СКД)
2. В отчете создадим основную форму и для кнопки сформировать пропишем процедуру ПечатьНажатие:
Код 1C v 8.х Процедура ПечатьНажатие(Элемент)
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
Настройки = КомпоновщикНастроек.Настройки;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
ДокументРезультат = ЭлементыФормы.Результат;
ДокументРезультат.АвтоМасштаб = Истина; // Сделаем по ширине листа
//А если сделать так как на следующей строчке, то можно вывести в новый Табличный документ
//ДокументРезультат = Новый ТабличныйДокумент;
//Вывод текста и картинки
Макет = ПолучитьМакет("НазваниеСРисунком");
ОбластьВывести = Макет.ПолучитьОбласть("Вывести");
ОбластьВывести.Параметры.ТекДата=ТекущаяДата();
ДокументРезультат.Вывести(ОбластьВывести);
//Текст и картинку вывели, теперь сам отчет
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ДокументРезультат.ОтображатьСетку = Ложь;
ДокументРезультат.ОтображатьЗаголовки = Ложь;
ДокументРезультат.Показать();
КонецПроцедуры
3. И создаем макет "НазваниеСРисунком"
4. Сохраняем, запускаем, получаем:
Автор:
Евгений Мигачев Категория:
Схема Компоновки Данных