Вывести результат формирования СКД в таблицу значений Код 1C v 8.3 Настройки = КомпоновщикНастроек. ПолучитьНастройки( ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, Настройки, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновки) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода. УстановитьОбъект( Результат) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных, Истина ) ;
Категория:
Схема Компоновки Данных Как программно сформировать отчет СКД указав параметры и на выходе получить таблице значений? В одном документе для расчета потребовалось получать данные из отчета на СКД, реализовал следующим образом:
Код 1C v 8.х
СхемаОст = Отчеты. ТоннажПоЭкспедиторам. ПолучитьМакет( "ОсновнаяСхемаКомпоновкиДанных" ) ;
КомпоновщикНастроекНастройки = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекНастройки. Инициализировать( Новый ИсточникДоступныхНастроекКомпоновкиДанных( СхемаОст) ) ;
КомпоновщикНастроекНастройки. ЗагрузитьНастройки( СхемаОст. НастройкиПоУмолчанию) ;
КомпоновщикНастроекНастройки. Настройки. ПараметрыДанных. УстановитьЗначениеПараметра( "НачалоПериода" , НачалоМесяца( МесяцРасчета) ) ;
КомпоновщикНастроекНастройки. Настройки. ПараметрыДанных. УстановитьЗначениеПараметра( "КонецПериода" , КонецМесяца( МесяцРасчета) ) ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаОст, КомпоновщикНастроекНастройки. Настройки, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновкиДанных) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеТЗ = Новый ТаблицаЗначений;
ПроцессорВывода. УстановитьОбъект( ДанныеТЗ) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
ТоннажПоЭкспедиторам. Очистить( ) ;
Для каждого СтрокаТЗ Из ДанныеТЗ Цикл
Если ЗначениеЗаполнено( СтрокаТЗ. Экспедитор) и СтрокаТЗ. Доставка= Неопределено Тогда
нСтр = ТоннажПоЭкспедиторам. Добавить( ) ;
ЗаполнитьЗначенияСвойств( нСтр, СтрокаТЗ) ;
нСтр. Сотрудник= СтрокаТЗ. Экспедитор;
Иначе
Продолжить;
КонецЕсли ;
КонецЦикла ;
Категория:
Схема Компоновки Данных Получение уникального идентификатора ссылки в СКД Как известно, с помощью языка запросов 1С получить уникальный идентификатор объекта ссылочного типа на данный момент нельзя. Но используя возможность СКД обращаться к внешним функциям можно получить строковое представление уникального идентификатора ссылки. Для этого необходимо использовать глобальную функцию XMLСтрока в вычисляемых полях в макете схемы компоновки.
Далее проведем эксперимент по быстродействию получения результата через запрос с последующей обработкой выборки и вариантов с использованием СКД.
Рассмотрим два случая - вывод в табличный документ и формирование текстового документа.
Так же в случае с СКД мы можем создать схему компоновки программно или использовать готовую. Результат работы СКД так же можно обойти в цикле, либо вывести в таблицу значений с последующей обработкой. Для экспериментов будет использоваться платформа 8.3, конфигурация УТ11 (файловая), справочник "КлассификаторБанковРФ", более 4000 элементов.
Схему компоновки и макет можно посмотреть, скачав обработку (ссылка в конце).
Код 1C v 8.2 УП &НаКлиентеНаСервереБезКонтекста
Функция ПолучитьТекстЗапроса()
Возврат "ВЫБРАТЬ
| КлассификаторБанковРФ.Ссылка,
| КлассификаторБанковРФ.Наименование
|ИЗ
| Справочник.КлассификаторБанковРФ КАК КлассификаторБанковРФ" ;
КонецФункции
&НаСервере
Функция ПолучитьСхемуОбработки()
Возврат РеквизитФормыВЗначение( "Отчет" ) . ПолучитьМакет( "Макет" ) ;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьСхемуКомпоновки()
Схема = Новый СхемаКомпоновкиДанных;
ИсточникДанных = Схема. ИсточникиДанных. Добавить( ) ;
ИсточникДанных. Имя = "Источник" ;
ИсточникДанных. ТипИсточникаДанных = "Local" ;
НаборДанных = Схема. НаборыДанных. Добавить( Тип( "НаборДанныхЗапросСхемыКомпоновкиДанных" ) ) ;
НаборДанных. Имя = "НаборДанных" ;
НаборДанных. ИсточникДанных = "Источник" ;
НаборДанных. Запрос = ПолучитьТекстЗапроса( ) ;
НаборСсылка = НаборДанных. Поля. Добавить( Тип( "ПолеНабораДанныхСхемыКомпоновкиДанных" ) ) ;
НаборСсылка. Поле = "Ссылка" ;
НаборСсылка. ПутьКДанным = "Ссылка" ;
НаборНаименование= НаборДанных. Поля. Добавить( Тип( "ПолеНабораДанныхСхемыКомпоновкиДанных" ) ) ;
НаборНаименование. Поле = "Наименование" ;
НаборНаименование. ПутьКДанным = "Наименование" ;
ПолеИД = Схема. ВычисляемыеПоля. Добавить( ) ;
ПолеИД. Выражение = "XMLСтрока(Ссылка)" ;
ПолеИД. Заголовок = "ИД" ;
ПолеИД. ПутьКДанным = "ИД" ;
СтрокаТЗ = Схема. НастройкиПоУмолчанию. Структура. Добавить( Тип( "ГруппировкаКомпоновкиДанных" ) ) ;
СтрокаТЗ. Выбор. Элементы. Добавить( Тип( "АвтоВыбранноеПолеКомпоновкиДанных" ) ) ;
ЭлементыВыбора = Схема. НастройкиПоУмолчанию. Выбор. Элементы;
ПолеСсылка = ЭлементыВыбора. Добавить( Тип( "ВыбранноеПолеКомпоновкиДанных" ) ) ;
ПолеСсылка. Поле = Новый ПолеКомпоновкиДанных( "Ссылка" ) ;
ПолеНаименование = ЭлементыВыбора. Добавить( Тип( "ВыбранноеПолеКомпоновкиДанных" ) ) ;
ПолеНаименование. Поле = Новый ПолеКомпоновкиДанных( "Наименование" ) ;
ПолеИД = ЭлементыВыбора. Добавить( Тип( "ВыбранноеПолеКомпоновкиДанных" ) ) ;
ПолеИД. Поле = Новый ПолеКомпоновкиДанных( "ИД" ) ;
Возврат Схема;
КонецФункции
&НаСервереБезКонтекста
Функция ЗаполнитьПоКомпоновкеПрямойОбход(Схема)
Док = Новый ТекстовыйДокумент;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета. Выполнить( Схема, Схема. НастройкиПоУмолчанию, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет, , , Истина ) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода. УстановитьОбъект( Новый ТаблицаЗначений) ;
ПроцессорВывода. НачатьВывод( ) ;
Пока Истина Цикл
ЭлементКомпоновки = ПроцессорКомпоновки. Следующий( ) ;
Если ЭлементКомпоновки = Неопределено Тогда
Прервать ;
КонецЕсли ;
ПроцессорВывода. ВывестиЭлемент( ЭлементКомпоновки) ;
Если ЭлементКомпоновки. Макет = "Макет2" И ЭлементКомпоновки. ТипЭлемента = ТипЭлементаРезультатаКомпоновкиДанных. НачалоИКонец Тогда
Док. ДобавитьСтроку( ЭлементКомпоновки. ЗначенияПараметров. П2 . Значение + ";" + ЭлементКомпоновки. ЗначенияПараметров. П3 . Значение) ;
КонецЕсли ;
КонецЦикла ;
ТЗ = ПроцессорВывода. ЗакончитьВывод( ) ;
Возврат Док;
КонецФункции
&НаСервере
Функция ЗаполнитьОбходТЗ(ИспользоватьСхемуОбработки)
Если ИспользоватьСхемуОбработки Тогда
Схема = ПолучитьСхемуОбработки( ) ;
Иначе
Схема = ПолучитьСхемуКомпоновки( ) ;
КонецЕсли ;
Возврат ЗаполнитьПоКомпоновкеОбходТЗ( Схема) ;
КонецФункции
&НаСервере
Функция ЗаполнитьПрямойОбход(ИспользоватьСхемуОбработки)
Если ИспользоватьСхемуОбработки Тогда
Схема = ПолучитьСхемуОбработки( ) ;
Иначе
Схема = ПолучитьСхемуКомпоновки( ) ;
КонецЕсли ;
Возврат ЗаполнитьПоКомпоновкеПрямойОбход( Схема) ;
КонецФункции
&НаСервереБезКонтекста
Функция ЗаполнитьПоКомпоновкеОбходТЗ(Схема)
Док = Новый ТекстовыйДокумент;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета. Выполнить( Схема, Схема. НастройкиПоУмолчанию, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет, , , Истина ) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода. УстановитьОбъект( Новый ТаблицаЗначений) ;
ТЗ = ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
Для Каждого СтрокаТЗ Из ТЗ Цикл
Док. ДобавитьСтроку( СтрокаТЗ. Наименование + ";" + СтрокаТЗ. ИД) ;
КонецЦикла ;
Возврат Док;
КонецФункции
&НаСервереБезКонтекста
Функция ЗаполнитьПоЗапросу()
Док = Новый ТекстовыйДокумент;
Запрос = Новый Запрос( ПолучитьТекстЗапроса( ) ) ;
Результат = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Результат. Следующий( ) Цикл
Док. ДобавитьСтроку( Результат. Наименование + ";" + XMLСтрока( Результат. Ссылка) ) ;
КонецЦикла ;
Возврат Док;
КонецФункции
&НаСервере
Процедура ЗаполнитьТабДокСхема(ИспользоватьСхемуОбработки)
Если ИспользоватьСхемуОбработки Тогда
Схема = ПолучитьСхемуОбработки( ) ;
ТабДок = ТабДок1 ;
Иначе
Схема = ПолучитьСхемуКомпоновки( ) ;
ТабДок = ТабДок2 ;
КонецЕсли ;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета. Выполнить( Схема, Схема. НастройкиПоУмолчанию) ;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки. Инициализировать( Макет, , , Истина ) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода. УстановитьДокумент( ТабДок) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновки) ;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТабДокЗапрос()
Макет = РеквизитФормыВЗначение( "Отчет" ) . ПолучитьМакет( "Отчет" ) ;
ОбластьСтрока = Макет. ПолучитьОбласть( "Строка" ) ;
Запрос = Новый Запрос( ПолучитьТекстЗапроса( ) ) ;
Результат = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Результат. Следующий( ) Цикл
ОбластьСтрока. Параметры. Заполнить( Результат) ;
ОбластьСтрока. Параметры. ИД = XMLСтрока( Результат. Ссылка) ;
ТабДок3 . Вывести( ОбластьСтрока) ;
КонецЦикла ;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗаполнитьТабДокСхема( Истина ) ;
ЗаполнитьТабДокСхема( Ложь ) ;
ЗаполнитьТабДокЗапрос( ) ;
Т1 = ЗаполнитьПоЗапросу( ) ;
Т2 = ЗаполнитьОбходТЗ( Ложь ) ;
Т3 = ЗаполнитьОбходТЗ( Истина ) ;
Т4 = ЗаполнитьПрямойОбход( Ложь ) ;
Т5 = ЗаполнитьПрямойОбход( Истина ) ;
КонецПроцедуры
По результатам замера производительности видно, что вывод результата в табличный документ происходит быстрее при использовании СКД, причем вариант с программным созданием схемы отрабатывает несколько быстрее.
В тоже время вывод результатов в текстовый документ отрабатывает быстрее для запроса.
Программное создание схемы компоновки отработало быстрее, чем получение макета схемы.
Источник
Категория:
Схема Компоновки Данных Как отчет на СКД сохранить в таблицу значений, а потом выгрузить в файл? Допустим у нас есть отчет с ОсновнойСхемойКомпановкиДанных,
Создадим ФормуОтчета:
На форму добавим Кнопку Выгрузка( Процедура ДействияФормыВыгрузка(Кнопка) ) и Выбор Периода формирования отчета
ВНИМАНИЕ!!!
Ошибка генерации макета
по причине: Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений
Выводить можно только Группировки:
Код отчета будет следующий:
Код 1C v 8.х Процедура ДействияФормыВыгрузка(Кнопка)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Выберите файл для сохранения данных" ;
Диалог. ПолноеИмяФайла = "NDFL_" + Формат( НачПериода, "ДФ=MM_yyyy" ) ;
Диалог. Фильтр = "TXT (*.txt)|*.txt" ;
Диалог. МножественныйВыбор = Ложь ; Диалог. Каталог = "D:\" ;
Если Диалог. Выбрать( ) Тогда
ФайлСохранения = Диалог. ПолноеИмяФайла;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновкиДанных) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеТЗ = Новый ТаблицаЗначений;
ПроцессорВывода. УстановитьОбъект( ДанныеТЗ) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
Текст = Новый ЗаписьТекста( ФайлСохранения, КодировкаТекста. ANSI) ;
Текст. ЗаписатьСтроку( "Организация~КПП~Начислено13~Начислено30" ) ;
Для Каждого стр из ДанныеТЗ Цикл
Текст. ЗаписатьСтроку( СокрЛП( Строка( стр. Организация) ) + "~" + СокрЛП( стр. ПодразделениеОрганизацииКПП) + "~" + Формат( стр. Начислено13 , "ЧГ=0" ) + "~" + Формат( стр. Начислено30 , "ЧГ=0" ) ) ;
КонецЦикла ;
Текст. Закрыть( ) ;
КонецЕсли ;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода. УстановитьПериод( НачПериода, ? ( КонПериода= '0001 - 01 - 01 ', КонПериода, КонецДня( КонПериода) ) ) ;
НастройкаПериода. РедактироватьКакИнтервал = Истина ;
НастройкаПериода. РедактироватьКакПериод = Истина ;
НастройкаПериода. ВариантНастройки = ВариантНастройкиПериода. Период;
Если НастройкаПериода. Редактировать( ) Тогда
НачПериода = НастройкаПериода. ПолучитьДатуНачала( ) ;
КонПериода = НастройкаПериода. ПолучитьДатуОкончания( ) ;
КонецЕсли ;
КомпоновщикНастроек. Настройки. ПараметрыДанных. Элементы[4 ]. Значение = НачПериода;
КомпоновщикНастроек. Настройки. ПараметрыДанных. Элементы[5 ]. Значение = КонПериода;
КонецПроцедуры
Смотрите так же:
Вывод отчета СКД в коллекцию значений - Дерево Значений Категория:
Схема Компоновки Данных Вывод отчета СКД в коллекцию значений - Дерево Значений В системе компоновки данных существует возможность выводить отчет не только в табличный документ, но и в коллекции значений (таблица значений, дерево значений).
Для вывода отчета в коллекцию предназначен объект
ПроцессорВыводаРезультатаКомпоновкиВКоллекциюЗначений.
Пример вывода отчета в дерево значений:
Код 1C v 8.х
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных,
КомпоновщикНастроек. Настройки, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновкиДанных) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДеревоЗначений = Новый ДеревоЗначений;
ПроцессорВывода. УстановитьОбъект( ДеревоЗначений) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
В данном примере результат вывода помещается в переменную ДеревоЗначений.
Работа с выводом в таблицу значений аналогична.
Стоит отметить, что при выводе результата компоновки в коллекцию значений существует несколько ограничений:
* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы;
* Не используется условное оформление;
* Игнорируются папки в выбранных полях.
also
Как отчет на СКД сохранить в таблицу значений, а потом выгрузить в файл? Категория:
Схема Компоновки Данных