Имя: Пароль:
1C
 
программно вывести макет скд
0 Vvvvv
 
21.10.14
11:20
Можете помочь с вопросом.
Есть обработка, в ней есть макет имеет тип "схема компоновки данных". Как программно, по нажатию на кнопку вывести отчет. Интересно как в обычных так и в управляемых формах.
В интернете много чего нашел, но все не то. Искал по ключевым словам "КомпоновщикМакетаКомпоновки", "ПроцессорКомпоновкиДанных", "ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент".
1 Looser-1c
 
21.10.14
11:21
Возьми книжку по СКД - там есть пример.
2 Vvvvv
 
21.10.14
11:25
(1) книга "разработка сложных отчетов", у меня дома есть, давно ее не читал, но не помню, что бы там был такой функционал описан. Там только про СКД и конструктор запросов.
3 Любопытная
 
21.10.14
11:26
(2) про программный вывод отчета там тоже есть
4 Vvvvv
 
21.10.14
11:28
Хорошо, а на данный момент есть у кого нибудь пример? А то книга дома.
5 Godofsin
 
21.10.14
11:29
СхемаСКД               = ПолучитьМакет("Макет");
    КомпоновщикМакета   = Новый КомпоновщикМакетаКомпоновкиДанных;
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    Отбор.Настройки.ПараметрыДанных.Элементы[0].Значение = НачалоДня(НачПериода);
    Отбор.Настройки.ПараметрыДанных.Элементы[0].Использование = Истина;
    Отбор.Настройки.ПараметрыДанных.Элементы[1].Значение = КонецДня(КонПериода);
    Отбор.Настройки.ПараметрыДанных.Элементы[1].Использование = Истина;
    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаСКД,Отбор.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    
    ТЗ = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
6 Любопытная
 
21.10.14
11:29
7 Vvvvv
 
21.10.14
11:42
не, это не совсем то. Эти коды уже видел. Может в них чего не хватает?
8 Любопытная
 
21.10.14
11:43
(7) Что конкретно вы хотите сделать?
9 Vvvvv
 
21.10.14
11:47
(8) просто, хочу знать как программно вывести макет скд.
10 Looser-1c
 
21.10.14
11:48
(9) см (5)
11 Vvvvv
 
21.10.14
11:52
(10) в (5) не полный, например, какое значение Отбор имеет?
Я раньше такого не делал, и хочу знать как это делается.
Надо хоть что то вывести.
12 Любопытная
 
21.10.14
11:53
(11) Господи, ну ты этот код засунь в свою обработку и посмотри, что работает, что не работает. Что получается в результате, или ничего не получается. На общие вопросы обычно получаются общие ответы.
13 Godofsin
 
21.10.14
11:55
(11)
Отбор это реквизит типа компоновщик настроек компоновки данных.

    СхемаСКД = ПолучитьМакет("Макет");    
    АдресСхемыСКД=ПоместитьВоВременноеХранилище(СхемаСКД,Новый УникальныйИдентификатор());
    Отбор.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыСКД));    
    Отбор.ЗагрузитьНастройки(СхемаСкд.НастройкиПоУмолчанию);
14 Vvvvv
 
21.10.14
12:05
Простите, но все равно не то, или я не понимаю.
Отбор - реквизит с типом: КомпоновщикНастроекКомпоновкиДанных.
Ошибка: Индекс находится за границами массива, ссылается на: Отбор.Настройки.ПараметрыДанных.Элементы[0]
15 Godofsin
 
21.10.14
12:11
(14) Ну так у тебя может и не быть параметров данных-то
16 Лодырь
 
21.10.14
12:14
17 Web00001
 
21.10.14
13:01
Мне помогла эта статья http://infostart.ru/public/80164/ полностью взял процедуру, она безотказная делает все что попросишь, хочешь выводи в макет, хочешь в ТЗ.
18 Vvvvv
 
21.10.14
14:44
Сделал то, что я хотел. Вот код, как он должен выглядеть:

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