RDT1C/Reports/ирКонсольКомпоновокДанных/Ext/ObjectModule.bsl
Администратор 9ef15cab2b .
2016-12-04 00:15:47 +03:00

245 lines
17 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Перем мРежимРедактора Экспорт;
Перем мИмяРедактируемойСхемы Экспорт;
Перем мВнешниеНаборыДанных Экспорт;
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ
//
Функция ОткрытьПоОбъектуМетаданных(ПолноеИмяМД, Отбор = Неопределено) Экспорт
СхемаКомпоновкиДанных = ирНеглобальный.ПолучитьСхемуКомпоновкиПоОбъектуМетаданныхЛкс(ПолноеИмяМД);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КорневойТип = ЛксПолучитьПервыйФрагмент(ПолноеИмяМД);
НаборПолейВыбора = Новый Массив();
НаборПолейПорядка = Новый Массив();
МассивФрагментов = ЛксПолучитьМассивИзСтрокиСРазделителем(ПолноеИмяМД);
Если Истина
И МассивФрагментов.Количество() = 3
И МассивФрагментов[2] = "Изменения"
Тогда
Построитель = Новый ПостроительЗапроса("ВЫБРАТЬ Т.* ИЗ " + ПолноеИмяМД + " КАК Т");
Построитель.ЗаполнитьНастройки();
Для Каждого ДоступноеПоле Из Построитель.ДоступныеПоля Цикл
НаборПолейВыбора.Добавить(ДоступноеПоле.ПутьКДанным);
НаборПолейПорядка.Добавить(ДоступноеПоле.ПутьКДанным);
КонецЦикла;
ИначеЕсли ЛксЛиКорневойТипОбъектаБД(КорневойТип) Тогда
НаборПолейВыбора.Добавить("Ссылка");
НаборПолейПорядка.Добавить("Ссылка");
Иначе
НаборЗаписей = Новый (СтрЗаменить(ПолноеИмяМД, ".", "НаборЗаписей."));
Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл
НаборПолейВыбора.Добавить(ЭлементОтбора.ПутьКДанным);
НаборПолейПорядка.Добавить(ЭлементОтбора.ПутьКДанным);
КонецЦикла;
КонецЕсли;
Для Каждого Поле Из НаборПолейВыбора Цикл
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Выбор, Поле);
КонецЦикла;
Для Каждого Поле Из НаборПолейПорядка Цикл
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Порядок, Поле);
КонецЦикла;
ирНеглобальный.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Структура);
Если Отбор <> Неопределено Тогда
Для Каждого КлючИЗначение Из Отбор Цикл
ирНеглобальный.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Отбор, КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
КонецЕсли;
Форма = ЭтотОбъект.ПолучитьФорму();
Форма.Открыть();
Возврат Форма;
КонецФункции
Функция ОткрытьПоТаблицеЗначений(ТаблицаЗначений) Экспорт
СхемаКомпоновкиДанных = ЛксСоздатьСхемуПоТаблицамЗначений(Новый Структура("Основной", ТаблицаЗначений));
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
//ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Порядок, Колонка.Имя);
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Выбор, Колонка.Имя);
КонецЦикла;
мВнешниеНаборыДанных = Новый Структура("Основной", ТаблицаЗначений);
ирНеглобальный.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Структура);
Форма = ЭтотОбъект.ПолучитьФорму();
Форма.Открыть();
Возврат Форма;
КонецФункции
Функция ОткрытьПоЗапросу(Запрос, Отбор = Неопределено) Экспорт
СхемаКомпоновкиДанных = ирНеглобальный.ПолучитьСхемуКомпоновкиПоЗапросуЛкс(Запрос);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Для Каждого ДоступноеПоле Из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
Если Не ДоступноеПоле.Папка Тогда
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Выбор, ДоступноеПоле.Поле);
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Порядок, ДоступноеПоле.Поле);
КонецЕсли;
КонецЦикла;
Для Каждого ЗначениеПараметра Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
ЗначениеПараметра.Использование = Истина;
КонецЦикла;
Если Отбор <> Неопределено Тогда
Для Каждого КлючИЗначение Из Отбор Цикл
ирНеглобальный.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Отбор, КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
КонецЕсли;
ирНеглобальный.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Структура);
Форма = ЭтотОбъект.ПолучитьФорму();
Форма.Открыть();
Возврат Форма;
КонецФункции
Функция ОткрытьДляОтладки(СхемаКомпоновки, Настройки = Неопределено, ВнешниеНаборыДанных = Неопределено,
Модально = Истина) Экспорт
мИмяРедактируемойСхемы = Неопределено;
Форма = ЭтотОбъект.ПолучитьФорму();
СхемаКомпоновкиДанных = ЛксПолучитьКопиюОбъекта(СхемаКомпоновки);
Если Настройки <> Неопределено Тогда
Для Каждого ПараметрСхемы Из СхемаКомпоновкиДанных.Параметры Цикл
Если Не ПараметрСхемы.ОграничениеИспользования Тогда
Продолжить;
КонецЕсли;
ЗначениеПараметра = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ПараметрСхемы.Имя));
Если Истина
И ЗначениеПараметра <> Неопределено
И ЗначениеПараметра.Использование
Тогда
ПараметрСхемы.ОграничениеИспользования = Ложь;
Сообщить("Для используемого скрытого параметра """ + ПараметрСхемы.Имя + """ выполнено снятие ограничения использования");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Если Настройки <> Неопределено Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецЕсли;
мВнешниеНаборыДанных = ВнешниеНаборыДанных;
Если мВнешниеНаборыДанных = Неопределено Тогда
мВнешниеНаборыДанных = Новый Структура;
КонецЕсли;
Если Модально Тогда
Возврат Форма.ОткрытьМодально();
Иначе
Форма.Открыть();
КонецЕсли;
КонецФункции
Процедура ОткрытьПоТабличномуПолю(ТабличноеПоле, СхемаКомпоновки = Неопределено, НастройкаКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт
Если ВнешниеНаборыДанных = Неопределено Тогда
ВнешниеНаборыДанных = Новый Структура("Основной", ТабличноеПоле.Значение);
КонецЕсли;
Если СхемаКомпоновки = Неопределено Тогда
СхемаКомпоновкиДанных = ЛксСоздатьСхемуПоТаблицамЗначений(ВнешниеНаборыДанных);
Иначе
СхемаКомпоновкиДанных = СхемаКомпоновки;
КонецЕсли;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки);
Если КомпоновщикНастроек.Настройки.Структура.Количество() = 0 Тогда
ирНеглобальный.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Структура);
КонецЕсли;
Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Выбор, КолонкаТП.Данные);
КонецЦикла;
ОткрытьДляОтладки(СхемаКомпоновки, КомпоновщикНастроек.Настройки, ВнешниеНаборыДанных, Ложь);
КонецПроцедуры
Функция РедактироватьСтруктуруСхемы(ВладелецФормы, СтруктураСхемы) Экспорт
мИмяРедактируемойСхемы = Неопределено;
мРежимРедактора = Истина;
СхемаКомпоновкиДанных = СтруктураСхемы.СхемаКомпоновки;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Если СтруктураСхемы.Свойство("Настройки") Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(СтруктураСхемы.Настройки);
КонецЕсли;
Если СтруктураСхемы.Свойство("Имя") Тогда
мИмяРедактируемойСхемы = СтруктураСхемы.Имя;
КонецЕсли;
Форма = ЭтотОбъект.ПолучитьФорму("Форма", ВладелецФормы);
Форма.Открыть();
КонецФункции // РедактироватьСтруктуруСхемы()
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ
//
Функция ПолучитьПутьСтроки(Строка) Экспорт
ПутьСтроки = Неопределено;
Если Строка <> Неопределено Тогда
ТС = Строка;
Пока ТС <> Неопределено Цикл
Если ПутьСтроки = Неопределено Тогда
ПутьСтроки = ТС.ИмяОтчета;
Иначе
ПутьСтроки = ТС.ИмяОтчета + Символы.ПС + ПутьСтроки;
КонецЕсли;
ТС = ТС.Родитель;
КонецЦикла;
КонецЕсли;
Возврат ПутьСтроки;
КонецФункции
Функция НайтиСтрокуПоПути(Путь) Экспорт
ТекущаяСтрокаДерева = Неопределено;
Если Путь <> Неопределено Тогда
Для тс = 1 По СтрЧислоСтрок(Путь) Цикл
ТекущееИмяОтчета = СтрПолучитьСтроку(Путь, тс);
Если ТекущаяСтрокаДерева = Неопределено Тогда
Строки = ДеревоОтчетов.Строки;
Иначе
Строки = ТекущаяСтрокаДерева.Строки;
КонецЕсли;
Найдено = Ложь;
Для Каждого сд Из Строки Цикл
Если сд.ИмяОтчета = ТекущееИмяОтчета Тогда
// Нашли текущее имя
Найдено = Истина;
ТекущаяСтрокаДерева = сд;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не Найдено Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат ТекущаяСтрокаДерева;
КонецФункции
мРежимРедактора = Ложь;
мВнешниеНаборыДанных = Новый Структура;
// Создадим структуру дерева отчетов
ДеревоОтчетов.Колонки.Добавить("ИмяОтчета");
ДеревоОтчетов.Колонки.Добавить("СхемаКомпоновкиДанных");
ДеревоОтчетов.Колонки.Добавить("Автофиксация", Новый ОписаниеТипов("Булево"));
ДеревоОтчетов.Колонки.Добавить("Настройки");
ДеревоОтчетов.Колонки.Добавить("НастройкаДляЗагрузки");
ДеревоОтчетов.Колонки.Добавить("СохранятьНастройкиАвтоматически");