1
skaparez
25.10.14
✎
00:05
|
Функция ПолучитьПредставлениеИзИдентификатора(ИсходнаяСтрока)
СтрокаВозврата = Сред(ИсходнаяСтрока, 1, 1);
Для Сч = 2 По СтрДлина(ИсходнаяСтрока) Цикл
ПредыдущийСимвол = Сред(ИсходнаяСтрока, Сч - 1, 1);
ТекущийСимвол = Сред(ИсходнаяСтрока, Сч , 1);
СледующийСимвол = Сред(ИсходнаяСтрока, Сч + 1, 1);
ПослеследующийСимвол = Сред(ИсходнаяСтрока, Сч + 2, 1);
Если ТекущийСимвол = "_" Тогда
СтрокаВозврата = СтрокаВозврата + " ";
Продолжить;
ИначеЕсли ВРег(ТекущийСимвол) = ТекущийСимвол Тогда
Если ВРег(ПредыдущийСимвол) <> ПредыдущийСимвол ИЛИ (ПредыдущийСимвол <> "_" И ВРег(ПредыдущийСимвол) = ПредыдущийСимвол И ВРег(СледующийСимвол) <> СледующийСимвол) Тогда
СтрокаВозврата = СтрокаВозврата + " ";
Если ВРег(СледующийСимвол) <> СледующийСимвол ИЛИ ВРег(ПослеследующийСимвол) <> ПослеследующийСимвол Тогда
ТекущийСимвол = НРег(ТекущийСимвол);
КонецЕсли;
КонецЕсли;
КонецЕсли;
СтрокаВозврата = СтрокаВозврата + ТекущийСимвол;
КонецЦикла;
Возврат СтрокаВозврата;
КонецФункции // ПолучитьПредставлениеИзИдентификатора()
Процедура СохранитьСКД(пСхемаКомпоновкиДанных, ИмяФайла)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("e:\" + ИмяФайла + ".xml");
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, пСхемаКомпоновкиДанных, "dataComposition", ";);
КонецПроцедуры
// Добавляет группировку в компоновщик настроек в самый нижний уровень структуры, если поле не укзано - детальные поля
Функция ДобавитьГруппировку(КомпоновщикНастроек, Знач Поле = Неопределено, Строки = Истина) Экспорт
ЭлементСтруктуры = Неопределено;
Если ТипЗнч(КомпоновщикНастроек) = Тип("КомпоновщикНастроекКомпоновкиДанных") тогда
ЭлементСтруктуры = ТиповыеОтчеты.ПолучитьПоследнийЭлементСтруктуры(КомпоновщикНастроек, Строки);
Если ЭлементСтруктуры = Неопределено
ИЛИ ТиповыеОтчеты.ПолучитьЭлементСтруктурыДетальныеЗаписи(КомпоновщикНастроек) <> Неопределено
И Поле = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ИначеЕсли ТипЗнч(КомпоновщикНастроек) = Тип("ГруппировкаТаблицыКомпоновкиДанных")
ИЛИ ТипЗнч(КомпоновщикНастроек) = Тип("ГруппировкаДиаграммыКомпоновкиДанных")
ИЛИ ТипЗнч(КомпоновщикНастроек) = Тип("ГруппировкаКомпоновкиДанных")
ИЛИ ТипЗнч(КомпоновщикНастроек) = Тип("ТаблицаКомпоновкиДанных")
ИЛИ ТипЗнч(КомпоновщикНастроек) = Тип("ДиаграммаКомпоновкиДанных")
ИЛИ ТипЗнч(КомпоновщикНастроек) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных")
ИЛИ ТипЗнч(КомпоновщикНастроек) = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных")
ИЛИ ТипЗнч(КомпоновщикНастроек) = Тип("НастройкиКомпоновкиДанных")
тогда
Если ТипЗнч(КомпоновщикНастроек) = Тип("ТаблицаКомпоновкиДанных") тогда
Если Строки тогда
ЭлементСтруктуры = КомпоновщикНастроек.Строки;
Иначе
ЭлементСтруктуры = КомпоновщикНастроек.Колонки;
КонецЕсли;
ИначеЕсли ТипЗнч(КомпоновщикНастроек) = Тип("ДиаграммаКомпоновкиДанных") тогда
Если Строки тогда
ЭлементСтруктуры = КомпоновщикНастроек.Серии;
Иначе
ЭлементСтруктуры = КомпоновщикНастроек.Точки;
КонецЕсли;
Иначе
ЭлементСтруктуры = КомпоновщикНастроек;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(Поле) = Тип("Строка") Тогда
Поле = Новый ПолеКомпоновкиДанных(Поле);
КонецЕсли;
Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаТаблицыКомпоновкиДанных")
ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда
НоваяГруппировка = ЭлементСтруктуры.Структура.Добавить();
ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных")
ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") Тогда
НоваяГруппировка = ЭлементСтруктуры.Добавить();
Иначе
НоваяГруппировка = ЭлементСтруктуры.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
КонецЕсли;
НоваяГруппировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
НоваяГруппировка.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
Если Поле <> Неопределено Тогда
ПолеГруппировки = НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле = Поле;
КонецЕсли;
Возврат НоваяГруппировка;
КонецФункции
Функция ТаблицаЗначенийВТабличныйДокументСКД(ТаблицаЗначений, ТабличныйДокумент = Неопределено, ФлагИспользованиеРасшифровки = Ложь, СтруктураПоляГруппировок = Неопределено, СтруктураПоляИтогов = Неопределено, СтруктураПоляИтоговОформление = Неопределено) Экспорт
Перем СхемаКомпоновкиДанных;
Если ТабличныйДокумент = Неопределено Тогда
ТабличныйДокумент = Новый ТабличныйДокумент;
Иначе
ТабличныйДокумент.Очистить();
КонецЕсли;
Если СтруктураПоляГруппировок = Неопределено Тогда
СтруктураПоляГруппировок = Новый Структура;
КонецЕсли;
Если СтруктураПоляИтогов = Неопределено Тогда
СтруктураПоляИтогов = Новый Структура;
КонецЕсли;
Если СтруктураПоляИтоговОформление = Неопределено Тогда
СтруктураПоляИтоговОформление = Новый Структура;
КонецЕсли;
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = ТиповыеОтчеты.ДобавитьЛокальныйИсточникДанных(СхемаКомпоновкиДанных);
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанных1";
НаборДанных.ИмяОбъекта = "Таблица";
НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
ОписаниеТиповДата = Новый Массив;
ОписаниеТиповДата.Добавить(Тип("Null"));
ОписаниеТиповДата.Добавить(Тип("Дата"));
КвалификаторДаты = Новый КвалификаторыДаты(ЧастиДаты.Дата);
Для Каждого КолонкаТаблицаЗначений Из ТаблицаЗначений.Колонки Цикл
ИмяКолонки = КолонкаТаблицаЗначений.Имя;
Заголовок = ПолучитьПредставлениеИзИдентификатора(КолонкаТаблицаЗначений.Имя);
ПолеНабораДанных = ТиповыеОтчеты.ДобавитьПолеНабораДанных(НаборДанных, ИмяКолонки, Заголовок, ИмяКолонки);
Если КолонкаТаблицаЗначений.ТипЗначения = Новый ОписаниеТипов(ОписаниеТиповДата,,, КвалификаторДаты) Тогда
ПолеНабораДанных.Оформление.УстановитьЗначениеПараметра("Формат", "ДЛФ=Д");
КонецЕсли;
НайденноеЗначение = "";
Если СтруктураПоляИтогов.Свойство(ИмяКолонки, НайденноеЗначение) Тогда
Если НайденноеЗначение = Неопределено Тогда
НайденноеЗначение = "Сумма";
КонецЕсли;
ПолеИтога = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
ПолеИтога.ПутьКДанным = ПолеНабораДанных.ПутьКДанным;
ПолеИтога.Выражение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1(%2)", НайденноеЗначение, ПолеИтога.ПутьКДанным);
КонецЕсли;
Если СтруктураПоляИтоговОформление.Свойство(ИмяКолонки, НайденноеЗначение) Тогда
ПолеНабораДанных.Оформление.УстановитьЗначениеПараметра("Формат", НайденноеЗначение);
КонецЕсли;
КонецЦикла;
НастройкиПоУмолчанию = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
ТиповыеОтчеты.ДобавитьВыбранноеПоле(НастройкиПоУмолчанию.Выбор, "Подразделение");
ТиповыеОтчеты.ДобавитьВыбранноеПоле(НастройкиПоУмолчанию.Выбор, "Сотрудник");
й = ДобавитьГруппировку(НастройкиПоУмолчанию, "Подразделение");
Для Каждого ПолеГруппировки Из й.ПоляГруппировки.Элементы Цикл
ПолеГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Иерархия;
КонецЦикла;
н = ДобавитьГруппировку(й);
//Поле = НастройкиПоУмолчанию.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
//Поле.Поле = Новый ПолеКомпоновкиДанных("Подразделение");
//Поле.Поле = Новый ПолеКомпоновкиДанных("Подразделение");
КомпоновщикНастроекКомпоновкиДанных = ТиповыеОтчеты.ПолучитьКомпоновщикПоСхемеИНастройкам(СхемаКомпоновкиДанных, СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
//таб = Новый ТабличныйДокумент;
//ТиповыеОтчеты.СформироватьТиповойОтчет(Новый Структура("СхемаКомпоновкиДанных, КомпоновщикНастроек, ОтрицательноеКрасным, РасширеннаяНастройка", СхемаКомпоновкиДанных, КомпоновщикНастроекКомпоновкиДанных, ложь, ложь), таб);
//таб.Показать("!");
СохранитьСКД(СхемаКомпоновкиДанных, "2");
//Для Каждого Элемент Из СтруктураПоляГруппировок Цикл
//
// НоваяГруппировка = ТиповыеОтчеты.ДобавитьГруппировку(КомпоновщикНастроекКомпоновкиДанных, Элемент.Ключ);
//
// Если НЕ Элемент.Значение = Неопределено Тогда
//
// МассивПоляГруппировки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Элемент.Значение,, Истина);
//
// Для Каждого ИмяПоляГруппировки Из МассивПоляГруппировки Цикл
//
// НовоеПолеГруппировки = НоваяГруппировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
// НовоеПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяПоляГруппировки);
//
// КонецЦикла;
//
// КонецЕсли;
//
//КонецЦикла;
//ТиповыеОтчеты.ДобавитьГруппировку(КомпоновщикНастроекКомпоновкиДанных);
//Для Каждого КолонкаТаблицаЗначений Из ТаблицаЗначений.Колонки Цикл
// ТиповыеОтчеты.ДобавитьВыбранноеПоле(КомпоновщикНастроекКомпоновкиДанных, КолонкаТаблицаЗначений.Имя);
//КонецЦикла;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекКомпоновкиДанных.Настройки, ДанныеРасшифровки);
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("Таблица", ТаблицаЗначений);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
ПроцессорВыводаРезультата = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВыводаРезультата.УстановитьДокумент(ТабличныйДокумент);
Если ФлагИспользованиеРасшифровки Тогда
ТабличныйДокумент.ТолькоПросмотр = Истина;
ТабличныйДокумент.ОтображатьГруппировки = истина;//Булево(СтруктураПоляГруппировок.Количество());
ТабличныйДокумент.ОтображатьЗаголовки = Ложь;
ТабличныйДокумент.ОтображатьСетку = Ложь;
ПроцессорВыводаРезультата.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока НЕ ЭлементРезультата = Неопределено Цикл
ПроцессорВыводаРезультата.ВывестиЭлемент(ЭлементРезультата);
Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
Для СчетчикКолонок = 1 по ТабличныйДокумент.ШиринаТаблицы Цикл
ТекРасшифровкаИдентификатор = ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, СчетчикКолонок).Расшифровка;
Если ТипЗнч(ТекРасшифровкаИдентификатор) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, СчетчикКолонок).Расшифровка = ДанныеРасшифровки.Элементы[ТекРасшифровкаИдентификатор].ПолучитьПоля()[0].Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла;
ПроцессорВыводаРезультата.ЗакончитьВывод();
Иначе
ПроцессорВыводаРезультата.Вывести(ПроцессорКомпоновки);
КонецЕсли;
Возврат ТабличныйДокумент;
КонецФункции
Для Каждого НаборДанных ИЗ СхемаКомпоновкиДанных.НаборыДанных Цикл
Таблица = УК_ОбщегоНазначения.СформироватьЗапрос(НаборДанных.Запрос).Выгрузить();
ТаблицаЗначенийВТабличныйДокументСКД(Таблица,, Истина).Показать();
СохранитьСКД(ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных1"), "1");
КонецЦикла;
|
|