mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 13:14:11 +00:00
245 lines
17 KiB
Plaintext
245 lines
17 KiB
Plaintext
Перем мРежимРедактора Экспорт;
|
||
Перем мИмяРедактируемойСхемы Экспорт;
|
||
Перем мВнешниеНаборыДанных Экспорт;
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
|
||
// ПРОЦЕДУРЫ И ФУНКЦИИ
|
||
|
||
//
|
||
|
||
|
||
Функция ОткрытьПоОбъектуМетаданных(ПолноеИмяМД, Отбор = Неопределено) Экспорт
|
||
|
||
СхемаКомпоновкиДанных = ирНеглобальный.ПолучитьСхемуКомпоновкиПоОбъектуМетаданныхЛкс(ПолноеИмяМД);
|
||
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
|
||
КорневойТип = ЛксПолучитьПервыйФрагмент(ПолноеИмяМД);
|
||
НаборПолейВыбора = Новый Массив();
|
||
НаборПолейПорядка = Новый Массив();
|
||
МассивФрагментов = ЛксПолучитьМассивИзСтрокиСРазделителем(ПолноеИмяМД);
|
||
Если Истина
|
||
И МассивФрагментов.Количество() = 3
|
||
И МассивФрагментов[2] = "Изменения"
|
||
Тогда
|
||
Построитель = Новый ПостроительЗапроса("ВЫБРАТЬ Т.* ИЗ " + ПолноеИмяМД + " КАК Т");
|
||
Построитель.ЗаполнитьНастройки();
|
||
Для Каждого ДоступноеПоле Из Построитель.ДоступныеПоля Цикл
|
||
НаборПолейВыбора.Добавить(ДоступноеПоле.ПутьКДанным);
|
||
НаборПолейПорядка.Добавить(ДоступноеПоле.ПутьКДанным);
|
||
КонецЦикла;
|
||
ИначеЕсли ЛксЛиКорневойТипОбъектаБД(КорневойТип) Тогда
|
||
НаборПолейВыбора.Добавить("Ссылка");
|
||
НаборПолейПорядка.Добавить("Ссылка");
|
||
Иначе
|
||
НаборЗаписей = Новый (СтрЗаменить(ПолноеИмяМД, ".", "НаборЗаписей."));
|
||
Для Каждого ЭлементОтбора Из НаборЗаписей.Отбор Цикл
|
||
НаборПолейВыбора.Добавить(ЭлементОтбора.ПутьКДанным);
|
||
НаборПолейПорядка.Добавить(ЭлементОтбора.ПутьКДанным);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Для Каждого Поле Из НаборПолейВыбора Цикл
|
||
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Выбор, Поле);
|
||
КонецЦикла;
|
||
Для Каждого Поле Из НаборПолейПорядка Цикл
|
||
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Порядок, Поле);
|
||
КонецЦикла;
|
||
ирНеглобальный.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Структура);
|
||
Если Отбор <> Неопределено Тогда
|
||
Для Каждого КлючИЗначение Из Отбор Цикл
|
||
ирНеглобальный.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Отбор, КлючИЗначение.Ключ, КлючИЗначение.Значение);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Форма = ЭтотОбъект.ПолучитьФорму();
|
||
Форма.Открыть();
|
||
Возврат Форма;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОткрытьПоТаблицеЗначений(ТаблицаЗначений) Экспорт
|
||
|
||
СхемаКомпоновкиДанных = ЛксСоздатьСхемуПоТаблицамЗначений(Новый Структура("Основной", ТаблицаЗначений));
|
||
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
|
||
Для Каждого Колонка Из ТаблицаЗначений.Колонки Цикл
|
||
//ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Порядок, Колонка.Имя);
|
||
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Выбор, Колонка.Имя);
|
||
КонецЦикла;
|
||
мВнешниеНаборыДанных = Новый Структура("Основной", ТаблицаЗначений);
|
||
ирНеглобальный.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Структура);
|
||
Форма = ЭтотОбъект.ПолучитьФорму();
|
||
Форма.Открыть();
|
||
Возврат Форма;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОткрытьПоЗапросу(Запрос, Отбор = Неопределено) Экспорт
|
||
|
||
СхемаКомпоновкиДанных = ирНеглобальный.ПолучитьСхемуКомпоновкиПоЗапросуЛкс(Запрос);
|
||
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
|
||
Для Каждого ДоступноеПоле Из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
|
||
Если Не ДоступноеПоле.Папка Тогда
|
||
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Выбор, ДоступноеПоле.Поле);
|
||
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Порядок, ДоступноеПоле.Поле);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Для Каждого ЗначениеПараметра Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
|
||
ЗначениеПараметра.Использование = Истина;
|
||
КонецЦикла;
|
||
Если Отбор <> Неопределено Тогда
|
||
Для Каждого КлючИЗначение Из Отбор Цикл
|
||
ирНеглобальный.НайтиДобавитьЭлементОтбораКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Отбор, КлючИЗначение.Ключ, КлючИЗначение.Значение);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
ирНеглобальный.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Структура);
|
||
Форма = ЭтотОбъект.ПолучитьФорму();
|
||
Форма.Открыть();
|
||
Возврат Форма;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОткрытьДляОтладки(СхемаКомпоновки, Настройки = Неопределено, ВнешниеНаборыДанных = Неопределено,
|
||
Модально = Истина) Экспорт
|
||
|
||
|
||
мИмяРедактируемойСхемы = Неопределено;
|
||
|
||
Форма = ЭтотОбъект.ПолучитьФорму();
|
||
СхемаКомпоновкиДанных = ЛксПолучитьКопиюОбъекта(СхемаКомпоновки);
|
||
Если Настройки <> Неопределено Тогда
|
||
Для Каждого ПараметрСхемы Из СхемаКомпоновкиДанных.Параметры Цикл
|
||
Если Не ПараметрСхемы.ОграничениеИспользования Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ЗначениеПараметра = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ПараметрСхемы.Имя));
|
||
Если Истина
|
||
И ЗначениеПараметра <> Неопределено
|
||
И ЗначениеПараметра.Использование
|
||
Тогда
|
||
ПараметрСхемы.ОграничениеИспользования = Ложь;
|
||
Сообщить("Для используемого скрытого параметра """ + ПараметрСхемы.Имя + """ выполнено снятие ограничения использования");
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
|
||
Если Настройки <> Неопределено Тогда
|
||
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
|
||
КонецЕсли;
|
||
мВнешниеНаборыДанных = ВнешниеНаборыДанных;
|
||
Если мВнешниеНаборыДанных = Неопределено Тогда
|
||
мВнешниеНаборыДанных = Новый Структура;
|
||
КонецЕсли;
|
||
|
||
Если Модально Тогда
|
||
Возврат Форма.ОткрытьМодально();
|
||
Иначе
|
||
Форма.Открыть();
|
||
КонецЕсли;
|
||
|
||
|
||
КонецФункции
|
||
|
||
|
||
Процедура ОткрытьПоТабличномуПолю(ТабличноеПоле, СхемаКомпоновки = Неопределено, НастройкаКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт
|
||
|
||
Если ВнешниеНаборыДанных = Неопределено Тогда
|
||
ВнешниеНаборыДанных = Новый Структура("Основной", ТабличноеПоле.Значение);
|
||
КонецЕсли;
|
||
Если СхемаКомпоновки = Неопределено Тогда
|
||
СхемаКомпоновкиДанных = ЛксСоздатьСхемуПоТаблицамЗначений(ВнешниеНаборыДанных);
|
||
Иначе
|
||
СхемаКомпоновкиДанных = СхемаКомпоновки;
|
||
КонецЕсли;
|
||
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
|
||
КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки);
|
||
Если КомпоновщикНастроек.Настройки.Структура.Количество() = 0 Тогда
|
||
ирНеглобальный.НайтиДобавитьЭлементСтруктурыГруппировкаКомпоновкиЛкс(КомпоновщикНастроек.Настройки.Структура);
|
||
КонецЕсли;
|
||
Для Каждого КолонкаТП Из ТабличноеПоле.Колонки Цикл
|
||
ирНеглобальный.НайтиДобавитьЭлементНастроекКомпоновкиПоПолюЛкс(КомпоновщикНастроек.Настройки.Выбор, КолонкаТП.Данные);
|
||
КонецЦикла;
|
||
ОткрытьДляОтладки(СхемаКомпоновки, КомпоновщикНастроек.Настройки, ВнешниеНаборыДанных, Ложь);
|
||
|
||
КонецПроцедуры
|
||
|
||
Функция РедактироватьСтруктуруСхемы(ВладелецФормы, СтруктураСхемы) Экспорт
|
||
|
||
мИмяРедактируемойСхемы = Неопределено;
|
||
мРежимРедактора = Истина;
|
||
СхемаКомпоновкиДанных = СтруктураСхемы.СхемаКомпоновки;
|
||
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
|
||
Если СтруктураСхемы.Свойство("Настройки") Тогда
|
||
КомпоновщикНастроек.ЗагрузитьНастройки(СтруктураСхемы.Настройки);
|
||
КонецЕсли;
|
||
|
||
Если СтруктураСхемы.Свойство("Имя") Тогда
|
||
мИмяРедактируемойСхемы = СтруктураСхемы.Имя;
|
||
КонецЕсли;
|
||
Форма = ЭтотОбъект.ПолучитьФорму("Форма", ВладелецФормы);
|
||
Форма.Открыть();
|
||
|
||
КонецФункции // РедактироватьСтруктуруЗапроса()
|
||
|
||
////////////////////////////////////////////////////////////////////////////////
|
||
|
||
// ПРОЦЕДУРЫ И ФУНКЦИИ
|
||
|
||
//
|
||
|
||
|
||
Функция ПолучитьПутьСтроки(Строка) Экспорт
|
||
|
||
ПутьСтроки = Неопределено;
|
||
|
||
Если Строка <> Неопределено Тогда
|
||
ТС = Строка;
|
||
Пока ТС <> Неопределено Цикл
|
||
Если ПутьСтроки = Неопределено Тогда
|
||
ПутьСтроки = ТС.ИмяОтчета;
|
||
Иначе
|
||
ПутьСтроки = ТС.ИмяОтчета + Символы.ПС + ПутьСтроки;
|
||
КонецЕсли;
|
||
ТС = ТС.Родитель;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Возврат ПутьСтроки;
|
||
|
||
КонецФункции
|
||
|
||
Функция НайтиСтрокуПоПути(Путь) Экспорт
|
||
|
||
ТекущаяСтрокаДерева = Неопределено;
|
||
|
||
Если Путь <> Неопределено Тогда
|
||
|
||
Для тс = 1 По СтрЧислоСтрок(Путь) Цикл
|
||
|
||
ТекущееИмяОтчета = СтрПолучитьСтроку(Путь, тс);
|
||
|
||
Если ТекущаяСтрокаДерева = Неопределено Тогда
|
||
Строки = ДеревоОтчетов.Строки;
|
||
Иначе
|
||
Строки = ТекущаяСтрокаДерева.Строки;
|
||
КонецЕсли;
|
||
|
||
Найдено = Ложь;
|
||
Для Каждого сд Из Строки Цикл
|
||
Если сд.ИмяОтчета = ТекущееИмяОтчета Тогда
|
||
// Нашли текущее имя
|
||
Найдено = Истина;
|
||
ТекущаяСтрокаДерева = сд;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Если Не Найдено Тогда
|
||
Прервать;
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат ТекущаяСтрокаДерева;
|
||
|
||
КонецФункции
|
||
|
||
мРежимРедактора = Ложь;
|
||
мВнешниеНаборыДанных = Новый Структура;
|
||
|
||
// Создадим структуру дерева отчетов
|
||
ДеревоОтчетов.Колонки.Добавить("ИмяОтчета");
|
||
ДеревоОтчетов.Колонки.Добавить("СхемаКомпоновкиДанных");
|
||
ДеревоОтчетов.Колонки.Добавить("Автофиксация", Новый ОписаниеТипов("Булево"));
|
||
ДеревоОтчетов.Колонки.Добавить("Настройки");
|
||
ДеревоОтчетов.Колонки.Добавить("НастройкаДляЗагрузки");
|
||
ДеревоОтчетов.Колонки.Добавить("СохранятьНастройкиАвтоматически");
|