Имя: Пароль:
1C
1С v8
Обработанную ТЗ в СКД
, ,
0 Смешной 1С
 
22.12.11
11:40
Добрый день!

Есть отчет, схема СКД. Программно вытягиваю запрос, выгружаю в Таблицу значений, изменяю в ней данные. Колонки все те же остаются. Как мне теперь эту таблицу обратно в СКД подсунуть, чтобы ее вывести со всеми расшифровками и настрйоками оформления и т.п.
1 mirosh
 
22.12.11
11:41
(0)  в скд источник данных - внешний объект, там написать имя таблицы значений справа внизу
2 Смешной 1С
 
22.12.11
11:42
(1) Так, а при выводе что написать после обработки?
3 chingiz
 
22.12.11
11:43
То же что и обычно. Ты всего лишь изменил источник данных для скд.
4 Kashemir
 
22.12.11
11:44
Отдельно схему собери, аналогичую исходной, только имеющую другой источник данных.
5 Смешной 1С
 
22.12.11
11:44
(3) а что обычно?

так?  
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
  ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
  ПроцессорВывода.Вывести(ТЗ);
6 Смешной 1С
 
22.12.11
11:46
(4) т.е. ту оставить основной, а эту потом при выводе ипользовать, так?
7 Kashemir
 
22.12.11
11:47
(6) Вроде того
8 Evil-Wisp
 
22.12.11
12:05
(8) а я думал так:

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

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

   ДокументРезультат=ЭлементыФормы.Результат;
   ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
9 Смешной 1С
 
22.12.11
12:05
Что-то тут не пойму. Сделал еще одну схему. с внешним источником. Указал имя ТЗОбработанная. Пишу:


   СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
   
   Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

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

   ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,//????ЧТО ТУТ НАПИСАТЬ///,ДанныеРасшифровки);

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

В процедуре Инициализировать ругается. Что передать во второй параметр?
10 Смешной 1С
 
22.12.11
12:08
(8) Во, спасибо. Понял с тем параметром как поступить:


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

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

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

   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
   ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
11 Смешной 1С
 
22.12.11
12:09
Всем спасибо!
12 Kashemir
 
22.12.11
12:09
(9) Структуру с источниками данных
13 Kashemir
 
22.12.11
12:09
(11) Только тебе с расшифровкой надо будет повозится, если оно конечно надо.
14 Смешной 1С
 
22.12.11
12:10
(13) Расшифровка полей работает. Большее не нужно
15 Scooter
 
22.12.11
12:12
ВнешниеНаборыДанных = Новый Структура;
  ВнешниеНаборыДанных.Вставить("ТаблРезультат", ТаблРезультат);
 
  СхемаКомпановки = ПолучитьМакет("Макет");
  КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
 
  ИсточникДанных = СхемаКомпановки.ИсточникиДанных.Добавить();
  ИсточникДанных.Имя = "ИсточникДанных1";
  ИсточникДанных.ТипИсточникаДанных = "Local";
 
  НаборДанных = СхемаКомпановки.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
  НаборДанных.Имя = "НаборДанных1";
  НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
  НаборДанных.ИмяОбъекта = "ТаблРезультат";
 
  Для каждого ТекКолонка Из ТаблРезультат.Колонки Цикл
   
      ПолеНабораДанных = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных") );
      ПолеНабораДанных.Поле = ТекКолонка.Имя;
      ПолеНабораДанных.ПутьКДанным = ТекКолонка.Имя;
      ПолеНабораДанных.Заголовок = локРазнПреобразоватьСтрокуСБольшимиБуквами(ТекКолонка.Имя);
       
       Если (Лев(ТекКолонка.Имя, 6) = "Период") или (Лев(ТекКолонка.Имя, 4) = "Дата") Тогда
           ФорматПоля = ПолеНабораДанных.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Формат"));
           ФорматПоля.Использование = Истина;
           ФорматПоля.Значение = "ДФ=dd.MM.yyyy";
       ИначеЕсли (Лев(ТекКолонка.Имя, 7) = "Доплата") или (Лев(ТекКолонка.Имя, 18) = "ПлановыеНачисления") Тогда
           ФорматПоля = ПолеНабораДанных.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Формат"));
           ФорматПоля.Использование = Истина;
           ФорматПоля.Значение = "ЧДЦ=2";
       КонецЕсли;
   
   КонецЦикла;

   //Выражение = "Сумма(" + ПолеНабораДанных.ПутьКДанным + ")";
   //ПолеИтога = СхемаКомпановки.ПоляИтога.Добавить();
   //ПолеИтога.ПутьКДанным = ПолеНабораДанных.ПутьКДанным;
   //ПолеИтога.Выражение = Выражение;
 
  Настройки = КомпоновщикНастроек.Настройки;
  //ГруппировкаСотрудник = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
  //ГруппировкаСотрудник.Использование = Истина;
  //
  //ПолеПроект = ГруппировкаСотрудник.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
  //ПолеПроект.Использование = Истина;
  //
  //ПолеПроект.Поле = Новый ПолеКомпоновкиДанных("Сотрудник");
  //ВыбранныеПоляДляПроекта = ГруппировкаСотрудник.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
  //ВыбранныеПоляДляПроекта.Использование = Истина;

  // Добавляем первую группировку

   //НоваяГруппировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   //ПолеГруппировки = НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
   //ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Сотрудник");
   //
   //ТиповыеОтчеты.ДобавитьАвтоВыбранноеПоле(НоваяГруппировка);
   //ТиповыеОтчеты.ДобавитьАвтоЭлементПорядка(НоваяГруппировка);

  // Добавляем детальные записи
   
  //НоваяГруппировка = НоваяГруппировка.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
  НоваяГруппировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
   
       // Условное оформление
       
       //уровень 0
       ЭлементУсловногоОформления = НоваяГруппировка.УсловноеОформление.Элементы.Добавить();
       ЭлементУсловногоОформления.Использование = Истина;
       
       Для каждого ТекКолонка Из ТаблРезультат.Колонки Цикл
          ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
          ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекКолонка.Имя);
       КонецЦикла;
       
       ПоляОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
       ПоляОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("УровеньГруппировка");
       ПоляОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
       ПоляОтбора.ПравоеЗначение = 0;
       
       ПоляОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("ЦветФона");
       ПоляОформления.Использование = Истина;
       ПоляОформления.Значение = Новый Цвет(248, 242, 216);
       
       ПоляОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Шрифт");
       ПоляОформления.Использование = Истина;
       ПоляОформления.Значение = Новый Шрифт(,10);


       //уровень 1
       ЭлементУсловногоОформления = НоваяГруппировка.УсловноеОформление.Элементы.Добавить();
       ЭлементУсловногоОформления.Использование = Истина;
       
       Для каждого ТекКолонка Из ТаблРезультат.Колонки Цикл
          ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
          ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекКолонка.Имя);
       КонецЦикла;
       
       ПоляОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
       ПоляОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("УровеньГруппировка");
       ПоляОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
       ПоляОтбора.ПравоеЗначение = 1;
       
       ПоляОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("ЦветФона");
       ПоляОформления.Использование = Истина;
       ПоляОформления.Значение = Новый Цвет(251, 249, 236);

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