Имя: Пароль:
1C
 
Можно ли в СКД в одном отчете вывести 2 набора данных?
,
0 olegon7
 
25.05.16
14:56
Здравствуйте ! Платформа 8.3

Можно ли в одном отчете СКД вывести два набора данных ?

Т.е 2 внешних набора данных -объекты

При построении отчета выводятся 2 таблицы
1 aleks_default
 
25.05.16
14:57
легко
2 olegon7
 
25.05.16
15:00
(1)
2 набора я создам и наполню их данными.

меня интересует вот эта область , что конкретно здесь надо указывать?

http://radikal.ru/Img/ShowUploadedImg?id=58c41d646e3c449dad1eb62b4e5bdfd4
3 olegon7
 
25.05.16
15:01
4 Nuobu
 
25.05.16
15:05
(2) Указывай то, что нужно указать.
5 olegon7
 
25.05.16
15:06
(4)детальные записи будут браться сразу с двух наборов?

они как то отличаться будут названием?
6 Nuobu
 
25.05.16
15:22
(5) Нет.
Можешь поле задать в одном и во втором наборе что-то вроде такого

"Набор1" КАК ПолеДляОтличия

А во втором -

"Набор2" КАК ПолеДляОтличия

Тогда сможешь отличить.
7 olegon7
 
25.05.16
15:36
http://s020.radikal.ru/i722/1605/10/889097036395.jpg

ошибка Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика - 'ПриКомпоновкеРезультата'
по причине:
{Отчет.ОшибкиОборудованияИПодозрительныеДанные.МодульОбъекта(86)}: Ошибка при вызове метода контекста (Инициализировать)
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешнийНабор);
по причине:
Ошибка компоновки данных
по причине:
Ошибка инициализации
по причине:
Ошибка создания набора данных "НаборДанных2"
по причине:
Не найден внешний набор данных "ТаблицаДанных1"


http://s020.radikal.ru/i722/1605/10/889097036395.jpg


что не так делаю?
8 Nuobu
 
25.05.16
15:37
(7) Код на Мисту не выкладываешь, вот и не работает.
9 olegon7
 
25.05.16
15:38
код
10 olegon7
 
25.05.16
15:39

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
СтандартнаяОбработка=Ложь;
//////////////////////////////////////////////////////////////////////////////////////////////
// 1 набор данных
objComm = Новый COMОбъект("ADODB.Command") ;
    oConnection =Новый COMОбъект("ADODB.Connection");
    RecordSet = Новый COMОбъект("ADODB.RecordSet");

Попытка

ConnectString="
|DRIVER={MySQL ODBC 5.1 Driver};
|SERVER=10.182.2.23;
|DATABASE=aramis;
|UID=Oleg;
|PWD=55555;
|Option=3";
oConnection.Open (ConnectString);

Исключение
    Сообщить("Не удалось подключится к MySQL "+ОписаниеОшибки());
        Возврат;
КонецПопытки;

objComm.ActiveConnection = oConnection;
objComm.CommandText = "otchet_oshibki_oborudovamiya";
objComm.CommandType = 4 ;
Период=СокрЛП(ПериодФормирования);
Параметр=objComm.CreateParameter("@year_mon",129,1,10,Период);
Параметр1=objComm.CreateParameter("@res",200,1,15,РЭС);
objComm.Parameters.Append(Параметр);
objComm.Parameters.Append(Параметр1);

Попытка
    RecordSet = objComm.Execute();
Исключение
    Сообщить("Ошибка выполнения хранимой процедуры: "+ОписаниеОшибки());
    oConnection.Close();
    Возврат;
КонецПопытки;

ТаблицаДанных = Новый ТаблицаЗначений;
   ТаблицаДанных.Колонки.Добавить("ЛицевойСчет", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(20)));
   ТаблицаДанных.Колонки.Добавить("Фамилия", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(64)));
   ТаблицаДанных.Колонки.Добавить("Город", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(64)));
   ТаблицаДанных.Колонки.Добавить("Улица", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(64)));
   ТаблицаДанных.Колонки.Добавить("Дом", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(10)));
   ТаблицаДанных.Колонки.Добавить("ТекущийМесяц", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(10)));
   ТаблицаДанных.Колонки.Добавить("Показание", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2,ДопустимыйЗнак.Неотрицательный)));
   ТаблицаДанных.Колонки.Добавить("СтатусОшибки", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2,ДопустимыйЗнак.Неотрицательный)));
   ТаблицаДанных.Колонки.Добавить("ДатаУстановки", Новый ОписаниеТипов("Дата",Новый КвалификаторыДаты(ЧастиДаты.Дата)));
   ТаблицаДанных.Колонки.Добавить("НомерСчетчика", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(20)));
   ТаблицаДанных.Колонки.Добавить("НомерПломбы", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(20)));


   Пока RecordSet.EOF() = 0 Цикл
     Стр = ТаблицаДанных.Добавить();  
     Стр.ЛицевойСчет = Recordset.Fields(0).Value;
     Стр.Фамилия = Recordset.Fields(1).Value;
     Стр.Город = Recordset.Fields(2).Value;
     Стр.Улица = Recordset.Fields(3).Value;
     Стр.Дом = Recordset.Fields(4).Value;
     Стр.ТекущийМесяц = Recordset.Fields(5).Value;
     Стр.Показание = Recordset.Fields(6).Value;
     Стр.СтатусОшибки = Recordset.Fields(7).Value;
     Стр.ДатаУстановки = Recordset.Fields(8).Value;
     Стр.НомерСчетчика = Recordset.Fields(9).Value;
     Стр.НомерПломбы = Recordset.Fields(10).Value;
    RecordSet.MoveNext();
    
   КонецЦикла;

  RecordSet.Close();
   oConnection.Close();
  
ВнешнийНабор=Новый Структура ("ТаблицаДанных",ТаблицаДанных);
    
    
    Настройки=КомпоновщикНастроек.Настройки;
    КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);

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

objComm = Новый COMОбъект("ADODB.Command") ;
    oConnection =Новый COMОбъект("ADODB.Connection");
    RecordSet = Новый COMОбъект("ADODB.RecordSet");

Попытка

ConnectString="
|DRIVER={MySQL ODBC 5.1 Driver};
|SERVER=10.182.2.23;
|DATABASE=aramis;
|UID=Oleg;
|PWD=55555;
|Option=3";
oConnection.Open (ConnectString);

Исключение
    Сообщить("Не удалось подключится к MySQL "+ОписаниеОшибки());
        Возврат;
КонецПопытки;

objComm.ActiveConnection = oConnection;
objComm.CommandText = "otchet_perechen_oproshennyh_domov";
objComm.CommandType = 4 ;
Период=СокрЛП(ПериодФормирования);
Параметр=objComm.CreateParameter("@year_mon",129,1,10,Период);
Параметр1=objComm.CreateParameter("@res",200,1,15,РЭС);
objComm.Parameters.Append(Параметр);
objComm.Parameters.Append(Параметр1);

Попытка
    RecordSet = objComm.Execute();
Исключение
    Сообщить("Ошибка выполнения хранимой процедуры: "+ОписаниеОшибки());
    oConnection.Close();
    Возврат;
КонецПопытки;

ТаблицаДанных1 = Новый ТаблицаЗначений;
   ТаблицаДанных1.Колонки.Добавить("Город1", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(64)));
   ТаблицаДанных1.Колонки.Добавить("Улица1", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(64)));
   ТаблицаДанных1.Колонки.Добавить("Дом1", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(10)));
  
   Пока RecordSet.EOF() = 0 Цикл
     Стр = ТаблицаДанных1.Добавить();  
        Стр.Город1 = Recordset.Fields(0).Value;
     Стр.Улица1 = Recordset.Fields(1).Value;
     Стр.Дом1 = Recordset.Fields(2).Value;
    RecordSet.MoveNext();
    
   КонецЦикла;

  RecordSet.Close();
   oConnection.Close();
  
ВнешнийНабор1=Новый Структура ("ТаблицаДанных1",ТаблицаДанных1);
    
    
    Настройки=КомпоновщикНастроек.Настройки;
    КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки);

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

КонецПроцедуры
11 Nuobu
 
25.05.16
15:43
RecordSet.MoveNext();
    
   КонецЦикла;

  RecordSet.Close();
   oConnection.Close();
  
ВнешнийНабор=Новый Структура ("ТаблицаДанных",ТаблицаДанных);

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

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


objComm = Новый COMОбъект("ADODB.Command") ;

Так должно работать.
12 olegon7
 
25.05.16
15:54
(11) тогда как в компоновщик макета попадет набор  данных
ТаблицаДанных ?
13 olegon7
 
25.05.16
15:58
(11) еще надо дописать


ВнешнийНабор1=Новый Структура ("ТаблицаДанных1,ТаблицаДанных",ТаблицаДанных1,ТаблицаДанных);
  во вотром наборе данных
тогда заработает

Спасибо,Nuobu
14 olegon7
 
25.05.16
16:05
еще вопрос

у меня 2 набора данных , у них есть одинаковые поля

город улица дом

хотелось чтобы названия города , улицы и дома , которые есть в первой таблице как то выделялись цветом во второй таблице.

можно ли как это реализовать стандартными инструментами скд?
условным форматированием например?
15 olegon7
 
25.05.16
17:06
сделал условным оформлением

по отбору
( Дом Содержит Дом1 И Город Содержит Город1 И Улица Содержит Улица1 ) закрасить красным

не срабатывает , не могу понять почему.
В какой переменной смотреть в отладчике данные котрые сформировались отбором?
16 Necessitudo
 
25.05.16
17:20
А как ты связал два набора?
17 Bober
 
25.05.16
17:51
(0) субъективно дешевле использовать эксель с ВПР.
18 olegon7
 
26.05.16
09:35
(16) я их не связывал.
они как отдельные наборы с разных источников.
19 aleks_default
 
26.05.16
09:38
(18) а вот это нельзя
20 olegon7
 
26.05.16
09:45
(19) их надо связать обязательно?

по 3 этим полям?

дом город улица

левым соединением?
21 olegon7
 
26.05.16
10:07
http://s019.radikal.ru/i640/1605/c0/3250243c4fda.jpg

вот так написал
но теперь все элементы окрашиваются

не понимаю таким образом какое соединение формируется
левое ?истосник1 левое соединение источник 2?
22 olegon7
 
26.05.16
10:18
источник 1
объект 1
поля
-лицевой счет
-фамилия
-город
-улица
-дом
-текущий месяц
-показания
-статус ошибки
-дата установки
-номер счетчика
-номер пломбы

источник2
объект 2
поля
-город
-улица
-дом

т.е. мне надо все записи вывести из источника 1
и соеденить с источниом 2 по полям город И улица И дом
23 Карупян
 
26.05.16
10:48
если не связные, то лучше через вложенные схемы делать
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn