Имя: Пароль:
1C
1С v8
Данные отчета СКД в Таблицу значений
,
0 igorby
 
07.03.14
10:40
Здравствуйте!
Подскажите есть "тяжелый" отчет на СКД, много наборов данных(запросов и объединений). Данные получаемые отчетом требуют дальнейшей значительной обработки. Средствами СКД думаю будет сделать затруднительно.
Есть ли возможность выгрузить в Таблицу значений для дальнейшей обработки.
Или есть еще какие варианы обработки данных отчета.
1 Cube
 
07.03.14
10:41
(0) "Есть ли возможность выгрузить в Таблицу значений для дальнейшей обработки."
Есть.
2 Cube
 
07.03.14
10:42
(0) "Средствами СКД думаю будет сделать затруднительно."
Так и скажи: качественно писать не умею, помогите набыдлокодить :)
3 Cube
 
07.03.14
10:45
+(1) Кури ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений
4 kiruha
 
07.03.14
10:49
Либо скопипасти запрос из СКД и работай с ним.
Собственно СКД только для вывода и постобработки и нужен
5 Cube
 
07.03.14
10:49
(4) Наглая ложь и клевета... :)
6 kiruha
 
07.03.14
10:51
(4)
А еще для чего ?
Объединение запросов сделать ?
Ну так SQL это умеет получше
7 Cube
 
07.03.14
10:57
(6) Группировка колонок. Объединение ячеек. И т.п.
8 kiruha
 
07.03.14
11:23
(7)
А это и есть постобработка и вывод
9 МихаилМ
 
07.03.14
12:58
(6)
ошибаетесь. скд напорядки(1-2) эффективней обрабатывает ТЗ
(соединения групприровки)

толко с полным соединением я пока не разобрался.

попробуйте обработать ТЗ в 1 000 000 строк через запрос.
даже с использованием shared memory  уснете ожидая результата.

в файловой даже на 10 000 записей 1с82 валится.

у СКД слабое место - медленный вывод в ТЗ.

в некоторых соотношениях обрабатываемых данных и результирующих  эффективней использовать код без скд.

в том числе меньше расход памяти.
10 kiruha
 
07.03.14
17:51
(9)
Зачем ТЗ ?
Я обрабатываю в SQL и временных таблицах.
СКД нервно курит в сторонке. Ибо только одни алгоритмы Русмор взятые из фокспро и далее примененные в SQL  стоили больше чем весь 1С вместе взятый
11 DS
 
07.03.14
18:13
(9) > толко с полным соединением я пока не разобрался
полное в скд?
12 Добрый хачик
 
07.03.14
18:15
Вложенные схемы? Не?
13 echo77
 
07.03.14
20:49
Возможно, поможет:

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

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных");
    Иначе
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
    КонецЕсли;

    Если ИсполняемыеНастройки = Неопределено Тогда

        ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию;

    КонецЕсли;

    Если СтруктураПараметров <> Неопределено Тогда

        КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;

        Для каждого Параметр Из СтруктураПараметров Цикл

            НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);

            Если НайденноеЗначениеПараметра <> Неопределено Тогда

                НайденноеЗначениеПараметра.Использование = Истина;

                НайденноеЗначениеПараметра.Значение = Параметр.Значение;

            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

    МакетКомпоновкиСКД = КомпоновщикМакета.Выполнить(СКД, ИсполняемыеНастройки, РасшифровкаСКД, МакетКомпоновки, ТипГенератора);

    ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных;

    ПроцессорКомпановки.Инициализировать(МакетКомпоновкиСКД, ВнешниеНаборыДанных, РасшифровкаСКД);

    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда

        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

        ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки);

    Иначе

        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

        ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);

    КонецЕсли;

    ПроцессорВывода.ОтображатьПроцентВывода = Истина;

    ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина);

КонецПроцедуры // ПолучитьДанныеНаОснованииСКД()

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