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

264 lines
18 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 По СтрЧислоСтрок(Путь) Цикл
ТекущееИмяОтчета = СтрПолучитьСтроку(Путь, тс);
Если ТекущаяСтрокаДерева = Неопределено Тогда
Строки = ДеревоОтчетов.Строки;
Иначе
Строки = ТекущаяСтрокаДерева.Строки;
КонецЕсли;
Найдено = Ложь;
Для Каждого сд Из Строки Цикл
Если сд.ИмяОтчета = ТекущееИмяОтчета Тогда
// Нашли текущее имя
Найдено = Истина;
ТекущаяСтрокаДерева = сд;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не Найдено Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат ТекущаяСтрокаДерева;
КонецФункции
//ирМобильный #Если Клиент Тогда
//ирМобильный Контейнер = Новый Структура();
//ирМобильный Оповестить("ирПолучитьБазовуюФорму", Контейнер);
//ирМобильный Если Не Контейнер.Свойство("ирМобильный", ирМобильный) Тогда
//ирМобильный ПолноеИмяФайлаБазовогоМодуля = ВосстановитьЗначение("ирПолноеИмяФайлаОсновногоМодуля");
//ирМобильный ирМобильный = ВнешниеОбработки.ПолучитьФорму(ПолноеИмяФайлаБазовогоМодуля);
//ирМобильный КонецЕсли;
//ирМобильный ирОбщий = ирМобильный.ПолучитьОбщийМодульЛкс("ирОбщий");
//ирМобильный ирКэш = ирМобильный.ПолучитьОбщийМодульЛкс("ирКэш");
//ирМобильный ирСервер = ирМобильный.ПолучитьОбщийМодульЛкс("ирСервер");
//ирМобильный ирПривилегированный = ирМобильный.ПолучитьОбщийМодульЛкс("ирПривилегированный");
//ирМобильный #КонецЕсли
мРежимРедактора = Ложь;
мВнешниеНаборыДанных = Новый Структура;
// Создадим структуру дерева отчетов
ДеревоОтчетов.Колонки.Добавить("ИмяОтчета");
ДеревоОтчетов.Колонки.Добавить("СхемаКомпоновкиДанных");
ДеревоОтчетов.Колонки.Добавить("Автофиксация", Новый ОписаниеТипов("Булево"));
ДеревоОтчетов.Колонки.Добавить("Настройки");
ДеревоОтчетов.Колонки.Добавить("НастройкаДляЗагрузки");
ДеревоОтчетов.Колонки.Добавить("СохранятьНастройкиАвтоматически");