Имя: Пароль:
1C
1С v8
Как вывести результат СКД в свой собственный макет программно?
0 mega1c
 
15.05.13
15:36
Как вывести результат СКД в свой собственный макет программно?
1 Defender aka LINN
 
15.05.13
15:37
Что есть "вывести результат СКД в свой собственный макет"? И можешь ли ты это сделать не программно?
2 mega1c
 
15.05.13
15:41
есть схема компоновки, в ней выполняется какой-то запрос, применяются отборы, но мне нужно обойти результат по группировкам и вывести данные в свой макет (т.е. Область.Параметры.МойПараметр = ...; ТабДок.Вывести(Область);)
3 kible
 
15.05.13
15:43
ТЗ = Новый ТаблицаЗначений;
   
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТЗ);
ТЗ = ПроцессорВывода.Вывести(ПроцессорКомпановки);
4 mega1c
 
15.05.13
15:44
(3) это я знаю.. (см 2)
5 ИС-2
 
naïve
15.05.13
15:48
(2) вывести в типовой макет и скопировать области?
6 mega1c
 
15.05.13
15:50
нет не скопировать, а именно свой макет, со своим расположением полей, своей раскраской, картинками и тд, который уже нарисован..
7 Fragster
 
гуру
15.05.13
15:53
КомпоновщикМакетаКомпоновкиДанных (DataCompositionTemplateComposer)
Выполнить (Execute)
Синтаксис:

Выполнить(<Схема>, <Настройки>, <ДанныеРасшифровки>, <МакетОформления>, <ТипГенератора>, <ПроверятьДоступностьПолей>, <ПараметрыФункциональныхОпций>)
Параметры:

<Схема> (обязательный)

Тип: СхемаКомпоновкиДанных.
Схема, для которой требуется построить макет.
<Настройки> (обязательный)

Тип: НастройкиКомпоновкиДанных.
Настройки, для которых необходимо создать макет.
<ДанныеРасшифровки> (необязательный)

Тип: ДанныеРасшифровкиКомпоновкиДанных.
Содержит переменную, в которую будут помещены данные расшифровки. Если параметр не указан, расшифровка заполняться не будет.
<МакетОформления> (необязательный)

Тип: МакетОформленияКомпоновкиДанных.
Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных. Если не указан, будет использоваться макет оформления по умолчанию.
<ТипГенератора> (необязательный)

Тип: Тип.
Указывает тип генератора макета компоновки данных.
Возможные типы:
ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений (DataCompositionValueCollectionTemplateGenerator),
ГенераторМакетаКомпоновкиДанных (DataCompositionTemplateGenerator).
Значение по умолчанию: Тип("ГенераторМакетаКомпоновкиДанных")
<ПроверятьДоступностьПолей> (необязательный)

Тип: Булево.
Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
Значение по умолчанию: Истина
<ПараметрыФункциональныхОпций> (необязательный)

Тип: Структура.
Содержит параметры функциональных опций, используемые при исполенении отчета.
Значение по умолчанию: Неопределено
Возвращаемое значение:

Тип: МакетКомпоновкиДанных.
Созданный макет компоновки.
Описание:

Выполняет компоновку макета.

Доступность:

Сервер, толстый клиент, внешнее соединение.
8 mega1c
 
15.05.13
15:55
раскраска и картинки по условию, куда условие вставлять то?
9 mega1c
 
15.05.13
15:58
вообще как можно вытащить данные из скд, чтобы их потом можно было бы дальше в коде использовать?
10 Fragster
 
гуру
15.05.13
15:59
11 mega1c
 
15.05.13
16:16
Теперь почему-то ДеревоЗначений пустое, хотя результат запроса не пустой..
РезультатДанных = ЗапросДанных.Выполнить().Выгрузить();
   
   ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("ДанныеПоМенеджеру",РезультатДанных);
   
   СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
       
   КомпоновщикНастроек1 = Новый КомпоновщикНастроекКомпоновкиДанных;
   КомпоновщикНастроек1.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

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

   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ДеревоЗначений = Новый ДеревоЗначений;
   ПроцессорВывода.УстановитьОбъект(ДеревоЗначений);
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
12 Fragster
 
гуру
15.05.13
16:28
Стоит отметить, что при выводе результата компоновки в коллекцию значений существует несколько ограничений:
* В настройках нельзя использовать таблицы, диаграммы и вложенные схемы;
* Не используется условное оформление;
* Игнорируются папки в выбранных полях.
13 zak555
 
15.05.13
16:29
(12) и зачем эти ограничения ?
14 mega1c
 
15.05.13
16:31
печально..
15 mega1c
 
15.05.13
17:05
А щас то почему пустой?

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

   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ДеревоЗначений = Новый ДеревоЗначений;
   ПроцессорВывода.УстановитьОбъект(ДеревоЗначений);
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
16 kiruha
 
15.05.13
17:14
(0)
Без извращений никак
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений вещь убогая - группировка колонок отсутствует, а без нее это не лучше построителя.
17 Fragster
 
гуру
15.05.13
17:17
(16) лучше - условия гибкие, дополнение по периоду нормальное, внешние источники типа ТЗ, вызов функций из конфигурации в вычисляемых полях, произвольная иерархия, соедиенение запросов по условию и куча других плюшек
18 Зойч
 
15.05.13
17:20
(16) зачем тебе группировка колонок, если у тебя фиксировнный макет?
19 mega1c
 
15.05.13
17:28
(15)блин, в чем может быть проблема то?
20 kiruha
 
15.05.13
17:35
Если проблема с добавлением источника данных - в макеты лучше даже и не лезть - забей
21 drongo-god
 
15.05.13
17:47
(0) Результат выполнения в ТЗ положить и потом обойти эту ТЗ выводя данные в свой макет.
Если нужно подробней могу расписать с примерами.
22 mega1c
 
15.05.13
18:01
можно пример? все равно пустой получается..
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
   
   ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
   ИсточникДанных.Имя = "ИсточникДанных1";
   ИсточникДанных.ТипИсточникаДанных ="Local";
   ИсточникДанных.СтрокаСоединения  ="";
     
   НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(ТИП("НаборДанныхЗапросСхемыКомпоновкиДанных"));
   
   НаборДанных.Имя =  "НаборДанных1";
   НаборДанных.Запрос= ЗапросДанных.Текст;
   НаборДанных.ИсточникДанных ="ИсточникДанных1";
   НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
       
   КомпоновщикНастроек1 = Новый КомпоновщикНастроекКомпоновкиДанных;
   КомпоновщикНастроек1.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
   
     КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
   МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
   КомпоновщикНастроек1.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
   
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);//ВнешниеНаборыДанных);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   
   ТаблицаВыпуска = Новый ТаблицаЗначений;

   ПроцессорВывода.УстановитьОбъект(ТаблицаВыпуска);
   ТаблицаВыпуска = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
23 drongo-god
 
15.05.13
18:01
(19) Если у тебя в схеме в настройках нет группировок и выводимых полей то результат будет пустым.
24 drongo-god
 
15.05.13
18:07
ТекущаяСхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(СхемаКомпоновкиДанныхВвод);
   ТекущийКомпановщикНастроек =    новый КомпоновщикНастроекКомпоновкиДанных;
   ТекущийКомпановщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ТекущаяСхемаКомпоновкиДанных));    
   ТекущийКомпановщикНастроек.ЗагрузитьНастройки(КомпоновщикНастроек.Настройки);
тз                = новый ТаблицаЗначений;
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(ТекущаяСхемаКомпоновкиДанных, ТекущийКомпановщикНастроек.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));    
   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
   ПроцессорВывода =    Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ПроцессорВывода.УстановитьОбъект(тз);
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
25 drongo-god
 
15.05.13
18:10
(24) Я тут использую даже две разные схемы компоновки.
Причем настроки для одной беру с другой.

СхемаКомпоновкиДанныхВвод - Схема которую я ложу в хранилище еще при создании формы.
КомпоновщикНастроек - настроки компоновщика которые инициализируются при создании формы.

Но не забудь о том что если в твоей схеме не будет группировки с указанием всех полей которые ты хочеш получить то будет пусто.
Приче желательно группировку делать только одну, в ней указать нужные поля для вывода.
26 drongo-god
 
15.05.13
18:14
(23) Так же перед выполнением посмотри в отладчике что у тебя лежит в ТекущийКомпановщикНастроек.Настройки.Структура

Там ты должен увидеть свою группировку и поля которые будут выводиться.
27 drongo-god
 
15.05.13
18:37
(26)
Далее
Макет = "то место откуда получаем свой макет".ПолучитьМакет("Имя макета");
   ТабДок = ЭтаФорма.ТабВывода;
   ТабДок.Очистить();
Для Каждого СтрокаТЗ Из ТЗ Цикл
   ОбластьСтрока = Макет.ПолучитьОбласть("ИмяОбласти");
   //Заполняем парметры области
       ТабДок.Вывести(ОбластьСтрока);    
КонецЦикла;
28 mega1c
 
16.05.13
11:18
все получилось, спасибо, нужно было добавить группировку и поля в настройки скд..