-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Labels
СКДСистема компоновки данныхСистема компоновки данных
Description
// Подменяет Наборы-Запросы на Наборы-Объекты.
//
// Параметры:
// СхемаИлиАдрес - СхемаКомпоновкиДанных, Строка - СКД или Адрес на временное хранилище с СКД
// ВнешниеНаборыДанных - Структура, Неопределено - 1.Внешние наборы даннных. Если параметр не передан, то оборачиваются все Наборы-Запросы
// Для каждого внешнего источника данных выполняется логика:
// Если ключ внешнего источника совпадает с именем Набора-Запроса в СКД, то это набор оборачивается в Набор-Объект.
// Если внешний источник = Неопределено, тогда в Набор-Объект всё будет скопировано из Набора-Запроса
// Иначе же будут добавлены только те колонки, которые есть во внешнем источнике
// + Если в Наборе-Запросе у поля не описан ТипЗначения, то он будет взят из соответствующей колонки внешнего источника
//
// ДополнительныеПараметры - Структура - содержит доп. параметры процедуры.
//
// ДополнительныеПараметры
// {ИмяКлюча} { Тип.Вид:ПоУмолчанию } {Функциональное описание}
// - ПодставлятьНаборыДанныхПустышки - Булево:Истина - Нужно ли создавать дополнительные Наборы-пустышки с полями, которые есть в Наборе-Запросе, но не будут в Наборе-Объекте.
// - ШаблонИмениПустышки - Строка:"&НаборДанныхИмя_Пустышка_"- Шаблон формирования набора-пустышки
// - КорректироватьВыражениеПредставления - Булево:Истина - Если в Наборе-Запросе у поля не описано ВыражениеПредставления, то оно будет взято колонки из колонки ИмяТекущейКолонки + "Представление" (если таковая имеется)
//
// Возвращаемое значение:
// СхемаКомпоновкиДанных - новая схема компоновки
//
Функция СхемаКомпоновкиСОбъектамиВместоЗапросов(СхемаИлиАдрес, ВнешниеНаборыДанных = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
ИмяТекущегоМетода = "СхемаКомпоновкиСОбъектамиВместоЗапросов";
ДополнитьИзШаблона(ДополнительныеПараметры, ИмяТекущегоМетода);
СхемаКомпоновкиДанных = ?(ЭтоАдресВременногоХранилища(СхемаИлиАдрес), ПолучитьИзВременногоХранилища(СхемаИлиАдрес), СхемаИлиАдрес);
НоваяСхемаКомпоновкиДанных = КопияЗначения(СхемаКомпоновкиДанных);
Для Каждого НаборДанных Из СхемаКомпоновкиДанных.НаборыДанных Цикл
ВнешнийНаборДанных = Неопределено;
Если ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросСхемыКомпоновкиДанных")
И (ВнешниеНаборыДанных = Неопределено ИЛИ ВнешниеНаборыДанных.Свойство(НаборДанных.Имя, ВнешнийНаборДанных)) Тогда
НовыйНаборДанных = НоваяСхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НовыйНаборДанных.ИмяОбъекта = НаборДанных.Имя;
НовыйНаборДанных.ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Получить(0).Имя;
Если ДополнительныеПараметры.ПодставлятьНаборыДанныхПустышки Тогда
НовыйНаборДанных_Пустышка = Неопределено;
КонецЕсли;
Для Каждого ОписаниеПоля Из НаборДанных.Поля Цикл
ДобавлятьПоле = Истина;
Если ВнешнийНаборДанных <> Неопределено Тогда
КолонкаИзРезультата = ВнешнийНаборДанных.Колонки.Найти(ОписаниеПоля.Поле);
Если КолонкаИзРезультата = Неопределено Тогда
ДобавлятьПоле = Ложь;
КонецЕсли;
КонецЕсли;
Если ДобавлятьПоле Тогда
НовоеПоле = НовыйНаборДанных.Поля.Добавить(ТипЗнч(ОписаниеПоля));
ЗаполнитьЗначенияСвойств(НовоеПоле, ОписаниеПоля);
Если ВнешнийНаборДанных <> Неопределено Тогда
Если НовоеПоле.ТипЗначения.Типы().Количество() = 0 Тогда
НовоеПоле.ТипЗначения = КолонкаИзРезультата.ТипЗначения;
КонецЕсли;
Если ДополнительныеПараметры.КорректироватьВыражениеПредставления Тогда
ИмяПоляПредставления = ОписаниеПоля.Поле + "Представление";
Если ПустаяСтрока(ОписаниеПоля.ВыражениеПредставления)
И ВнешнийНаборДанных.Колонки.Найти(ИмяПоляПредставления) <> Неопределено Тогда
НовоеПоле.ВыражениеПредставления = ИмяПоляПредставления;
Если НаборДанных.Поля.Найти(ИмяПоляПредставления) = Неопределено Тогда
НовоеПолеПредставления = НовыйНаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПолеПредставления.Поле = ИмяПоляПредставления;
НовоеПолеПредставления.ПутьКДанным = ИмяПоляПредставления;
НовоеПолеПредставления.ТипЗначения = Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки("255"));
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли ДополнительныеПараметры.ПодставлятьНаборыДанныхПустышки Тогда
Если НовыйНаборДанных_Пустышка = Неопределено Тогда
НовыйНаборДанных_Пустышка = НоваяСхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НовыйНаборДанных_Пустышка.ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Получить(0).Имя;
НовыйНаборДанных_Пустышка.Имя = СтрЗаменить(ДополнительныеПараметры.ШаблонИмениПустышки, "&НаборДанныхИмя", НаборДанных.Имя);
НовыйНаборДанных_Пустышка.ИмяОбъекта = НовыйНаборДанных_Пустышка.Имя;
ПустаяТаблица = ПустаяТаблицаПоТекстуЗапроса(НаборДанных.Запрос);
ВнешниеНаборыДанных.Вставить(НаборДанных.Имя + "_Пустышка_", ПустаяТаблица);
КонецЕсли;
КолонкаИзПустойТаблицы = ПустаяТаблица.Колонки.Найти(ОписаниеПоля.Поле);
Если КолонкаИзПустойТаблицы = Неопределено Тогда //Колонка не найдена
КолонкаИзПустойТаблицы = ПустаяТаблица.Колонки.Добавить(ОписаниеПоля.Поле, Новый ОписаниеТипов("Неопределено"));
КонецЕсли;
НовоеПолеПустышки = НовыйНаборДанных_Пустышка.Поля.Добавить(ТипЗнч(ОписаниеПоля));
ЗаполнитьЗначенияСвойств(НовоеПолеПустышки, ОписаниеПоля);
НовоеПолеПустышки.ОграничениеИспользования.Поле = Истина;
НовоеПолеПустышки.ОграничениеИспользования.Порядок = Истина;
НовоеПолеПустышки.ОграничениеИспользования.Группировка = Истина;
//НовоеПолеПустышки.ОграничениеИспользования.Условие = Истина;
Если ТипЗнч(НовоеПолеПустышки) = Тип("ПолеНабораДанныхСхемыКомпоновкиДанных") Тогда
НовоеПолеПустышки.ОграничениеИспользованияРеквизитов.Поле = Истина;
НовоеПолеПустышки.ОграничениеИспользованияРеквизитов.Порядок = Истина;
НовоеПолеПустышки.ОграничениеИспользованияРеквизитов.Группировка = Истина;
//НовоеПолеПустышки.ОграничениеИспользованияРеквизитов.Условие = Истина;
КонецЕсли;
Если НовоеПолеПустышки.ТипЗначения.Типы().Количество() = 0 Тогда
НовоеПолеПустышки.ТипЗначения = КолонкаИзПустойТаблицы.ТипЗначения;
КонецЕсли;
КонецЕсли;
КонецЦикла;
НоваяСхемаКомпоновкиДанных.НаборыДанных.Удалить(НоваяСхемаКомпоновкиДанных.НаборыДанных.Найти(НаборДанных.Имя));
НовыйНаборДанных.Имя = НовыйНаборДанных.ИмяОбъекта;
Если ДополнительныеПараметры.ПодставлятьНаборыДанныхПустышки И НовыйНаборДанных_Пустышка <> Неопределено Тогда
НовыйНаборДанных_Пустышка.Имя = НовыйНаборДанных_Пустышка.ИмяОбъекта;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат НоваяСхемаКомпоновкиДанных;
КонецФункцииMetadata
Metadata
Assignees
Labels
СКДСистема компоновки данныхСистема компоновки данных