Имя: Пароль:
1C
1С v8
Получить стандартный отчет СКД в таблицу значений во внешней обработки
0 AvtorVoprosa
 
18.05.17
10:10
УТ 11.1.
Необходимо перехватить данные одного СКД отчета в таблицу значений либо дерево значений, неважно, главное получить строки отчета, не выводя сам отчет на экран. Все что пробую из интернета выводит пустые значения. Помогите
1 cw014
 
18.05.17
10:12
А что пробуешь то?
2 AvtorVoprosa
 
18.05.17
10:13
(1) Всякое вот такое
Процедура СформироватьОтчетВТаблицуЗначений(Результат = Неопределено, ДанныеРасшифровки = Неопределено, ВыводВФормуОтчета = Истина, ВнешниеНаборыДанных = Неопределено) Экспорт

    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

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

    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
        КомпоновщикНастроек.Настройки, , ,
    Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

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

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

КонецПроцедуры
3 AvtorVoprosa
 
18.05.17
10:13
Таких примеров кода в интернете довольно много, но мне не помогают
4 cw014
 
18.05.17
10:15
(3) А где ты это пробуешь?
5 AvtorVoprosa
 
18.05.17
10:16
(4) Модуль Формы внешней обработки

Вообще такой например код у меня


&НаСервере
Процедура ПолучитьНаСервере()
    
    Результат = Новый ДеревоЗначений;
    Отчет = РеквизитФормыВЗначение("Объект");
    
    СКД = Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Результат = СформироватьОтчетВТаблицуЗначений(СКД);
    
КонецПроцедуры

&НаКлиенте
Процедура Получить(Команда)
    ПолучитьНаСервере();
КонецПроцедуры

&НаСервере
Функция СформироватьОтчетВТаблицуЗначений(СКД) Экспорт
    
    СКД.Параметры.НачалоПериода.Значение = Дата("20170401");
    СКД.Параметры.КонецПериода.Значение     = Дата("20170430");
         
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;

    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД,
        КомпоновщикНастроек.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ДеревоЗначений    = Новый ДеревоЗначений;
    ПроцессорВывода.УстановитьОбъект(ДеревоЗначений);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);  
    
    Возврат ДеревоЗначений;
    
КонецФункции
6 AvtorVoprosa
 
18.05.17
10:17
ОсновнаяСхемаКомпоновкиДанных имеется в обработке
7 cw014
 
18.05.17
10:17
В процедуре "ПолучитьНаСервере" в Результат что помещается?
8 cw014
 
18.05.17
10:18
"СКД.Параметры.НачалоПериода.Значение = Дата("20170401");"
А СКД.Параметры.НачалоПериода.Использование чему равно?
9 AvtorVoprosa
 
18.05.17
10:19
(8) Авто
10 Вафель
 
18.05.17
10:19
параметры нужно задавать в компоновщик настроек
11 Вафель
 
18.05.17
10:20
ну и
КомпоновщикНастроек.ПолучитьНастройки()
12 cw014
 
18.05.17
10:21
(9) Врешь, у типа Булево нет значения Авто
13 AvtorVoprosa
 
18.05.17
10:27
(12) Не поверишь, но у меня Авто
14 AvtorVoprosa
 
18.05.17
10:39
(11) Если вы имеете ввиду что это надо дописать, то все равно потом пусто
15 AvtorVoprosa
 
18.05.17
10:39
(12) Это не булевский тип, а ИспользованиеПараметраКомпоновкиДанных
16 cw014
 
18.05.17
10:40
(13) Все, понял. Ты зачем то ставишь параметр у схемы, а надо у настроек компоновки
17 AvtorVoprosa
 
18.05.17
10:43
(16) У какой переменной в моем случае, у КомпоновщикНастроек.Настройки или у КомпоновщикНастроек или где?)
18 cw014
 
18.05.17
10:44
НастройкиКомпоновкиДанных
19 AvtorVoprosa
 
18.05.17
10:47
(18)  Переменная не определена (НастройкиКомпоновкиДанных)
20 cw014
 
18.05.17
10:47
(19) А инициализироать - не?
21 AvtorVoprosa
 
18.05.17
10:47
А, нашел
22 AvtorVoprosa
 
18.05.17
10:49
Что здесь выбрать, параметров даты не вижу http://s013.radikal.ru/i322/1705/36/0d278e94a6b8.png
23 cw014
 
18.05.17
10:50
"Все что пробую из интернета выводит пустые значения." - либо плохо пробуешь, либо плохо изучаешь
24 cw014
 
18.05.17
10:50
С этого момента уже начинается писанина кода за тебя
25 AvtorVoprosa
 
18.05.17
10:51
(24) Это философия, если решение простое и понятное то лучше сразу его дать, я считаю)
26 cw014
 
18.05.17
10:52
СКД простое и понятное для тех, кто его знает. Кто его не знает - пусть изучает, читает и вникает
27 AvtorVoprosa
 
19.05.17
10:30
Вроде бы готовый и правильный вариант
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
    Компоновщик.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);    //Настройки получим из настоящего отчета
    
    Компоновщик.Восстановить();
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Компоновщик.Настройки,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
    
    ТаблицаЗначений = Новый ТаблицаЗначений;
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);