mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 13:14:11 +00:00
227 lines
14 KiB
Plaintext
227 lines
14 KiB
Plaintext
#Если Не ТонкийКлиент И Не ВебКлиент Тогда
|
||
|
||
Функция Получить() Экспорт
|
||
|
||
//#Если Клиент Или ВнешнееСоединение Или Не Сервер Тогда
|
||
Попытка
|
||
ирПлатформа = Вычислить("ирПлатформа");
|
||
Исключение
|
||
КонецПопытки;
|
||
Если ирПлатформа = Неопределено Тогда
|
||
ирПлатформа = Обработки.ирПлатформа.Создать();
|
||
КонецЕсли;
|
||
Возврат ирПлатформа;
|
||
// В 8.3 это уже не работает. http://partners.v8.1c.ru/forum/thread.jsp?id=1058206#1058206
|
||
//#Иначе
|
||
// ИмяПараметраСеанса = "ирКэш";
|
||
// Попытка
|
||
// НадоИнициализировать = ПараметрыСеанса[ИмяПараметраСеанса] = Неопределено;
|
||
// Исключение
|
||
// НадоИнициализировать = Истина;
|
||
// КонецПопытки;
|
||
// Если Не НадоИнициализировать Тогда
|
||
// Кэш = ПолучитьИзВременногоХранилища(ПараметрыСеанса[ИмяПараметраСеанса]);
|
||
// КонецЕсли;
|
||
// Если ТипЗнч(Кэш) <> Тип("Структура") Тогда
|
||
// Кэш = Обработки.ирПлатформа.Создать();
|
||
// //ПараметрыСеанса[ИмяПараметраСеанса] = "1";
|
||
// ПараметрыСеанса[ИмяПараметраСеанса] = ПоместитьВоВременноеХранилище(Кэш, Новый УникальныйИдентификатор);
|
||
// КонецЕсли;
|
||
// Возврат Кэш;
|
||
//#КонецЕсли
|
||
|
||
КонецФункции // Получить()
|
||
|
||
Функция ПолучитьКомпоновщикТаблицыМетаданныхЛкс(ПолноеИмяМД, ВызыватьИсключениеПриОтсутствииПрав = Истина) Экспорт
|
||
|
||
СхемаКомпоновкиДанных = ирНеглобальный.ПолучитьСхемуКомпоновкиПоОбъектуМетаданныхЛкс(ПолноеИмяМД,, Ложь);
|
||
#Если _ Тогда
|
||
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
|
||
#КонецЕсли
|
||
Попытка
|
||
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
|
||
Исключение
|
||
// Антибаг платформы 8.2.18
|
||
// Ошибка при вызове конструктора (ИсточникДоступныхНастроекКомпоновкиДанных)
|
||
// ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);
|
||
//по причине:
|
||
//Ошибка получения информации набора данных
|
||
//по причине:
|
||
//Ошибка в запросе набора данных
|
||
//по причине:
|
||
//{(1, 17)}: Неверное присоединение
|
||
//ВЫБРАТЬ Т.* ИЗ <<?>>КАК Т
|
||
ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМД);
|
||
Если ОбъектМД = Неопределено Тогда
|
||
// Возможно эта логика уже есть в какой то функции
|
||
Фрагменты = ЛксПолучитьМассивИзСтрокиСРазделителем(ПолноеИмяМД);
|
||
Фрагменты.Удалить(Фрагменты.Количество() - 1);
|
||
ПолноеИмяМД = ЛксПолучитьСтрокуСРазделителемИзМассива(Фрагменты, ".");
|
||
ОбъектМД = Метаданные.НайтиПоПолномуИмени(ПолноеИмяМД);
|
||
КонецЕсли;
|
||
Если Не ПравоДоступа("Чтение", ОбъектМД) Тогда
|
||
Если ВызыватьИсключениеПриОтсутствииПрав Тогда
|
||
ВызватьИсключение "Нет прав на чтение таблицы """ + ПолноеИмяМД + """";
|
||
Иначе
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Иначе
|
||
ВызватьИсключение;
|
||
КонецЕсли;
|
||
КонецПопытки;
|
||
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
|
||
КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);
|
||
Возврат КомпоновщикНастроек;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиНемобильныйРежимЛкс() Экспорт
|
||
|
||
Попытка
|
||
Пустышка = Вычислить("ЭтотОбъект");
|
||
Результат = Ложь;
|
||
Исключение
|
||
Результат = Истина;
|
||
КонецПопытки;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСтруктуруХраненияБДЛкс(ЛиИменаБД = Ложь) Экспорт
|
||
|
||
Результат = ПолучитьСтруктуруХраненияБазыДанных(, ЛиИменаБД);
|
||
Результат.Колонки.Добавить("КраткоеИмяТаблицыХранения", Новый ОписаниеТипов("Строка"));
|
||
Для Каждого СтрокаТаблицы Из Результат Цикл
|
||
СтрокаТаблицы.КраткоеИмяТаблицыХранения = НРег(ЛксПолучитьПоследнийФрагмент(СтрокаТаблицы.ИмяТаблицыХранения));
|
||
КонецЦикла;
|
||
Результат.Индексы.Добавить("КраткоеИмяТаблицыХранения");
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Получить словарь метаданных состоящий из шаблонов имен таблиц
|
||
//
|
||
// Параметры:
|
||
// ЛиИменаБД - Булево
|
||
//
|
||
// Возвращаемое значение:
|
||
// Соответствие - словарь шаблонов имен метаданных. Ключ - наименование объекта
|
||
// метаданных, где его номер заменен на номер позиции этого
|
||
// числа в строке; Значение - количество чисел в строке
|
||
//
|
||
Функция ПолучитьСловарьШаблоновМетаданных(ЛиИменаБД = Ложь) Экспорт
|
||
|
||
Перем ПозицияЧисла;
|
||
Перем КоличествоСимволов;
|
||
|
||
СтруктураХраненияБД = ирКэш.ПолучитьСтруктуруХраненияБДЛкс(ЛиИменаБД);
|
||
// Создать словарь метаданных
|
||
СловарьМетаданных = Новый Соответствие;
|
||
// Обработать структуру базы
|
||
Для Каждого СтрокаСтруктурыБазы Из СтруктураХраненияБД Цикл
|
||
|
||
// Скопировать имя таблицы
|
||
ИмяТаблицыХранения = Лев(СтрокаСтруктурыБазы.ИмяТаблицыХранения, СтрДлина(СтрокаСтруктурыБазы.ИмяТаблицыХранения));
|
||
ШаблонИмениТаблицыХранения = "";
|
||
КоличествоЧисел = 0;
|
||
ПоследнееИмяШаблона = "";
|
||
|
||
// Получить шаблон имени
|
||
Пока ирНеглобальный.НайтиЧислоВСтрокеЛкс(ИмяТаблицыХранения, ПозицияЧисла, КоличествоСимволов) Цикл
|
||
КоличествоЧисел = КоличествоЧисел + 1;
|
||
ПоследнееИмяШаблона = Лев(ИмяТаблицыХранения, ПозицияЧисла - 1);
|
||
ШаблонИмениТаблицыХранения = ШаблонИмениТаблицыХранения + ПоследнееИмяШаблона + XMLСтрока(КоличествоЧисел);
|
||
ИмяТаблицыХранения = Прав(ИмяТаблицыХранения, СтрДлина(ИмяТаблицыХранения) - ПозицияЧисла - КоличествоСимволов + 1);
|
||
КонецЦикла;
|
||
|
||
ШаблонИмениТаблицыХранения = ШаблонИмениТаблицыХранения + ИмяТаблицыХранения;
|
||
СловарьМетаданных.Вставить(ШаблонИмениТаблицыХранения, КоличествоЧисел);
|
||
|
||
Если Не ЛиИменаБД Тогда
|
||
// Сохранить шаблон дочерней таблицы независимо
|
||
Если КоличествоЧисел > 1 Тогда
|
||
Если Лев(ПоследнееИмяШаблона, 1) = "." Тогда
|
||
ПоследнееИмяШаблона = Сред(ПоследнееИмяШаблона, 2);
|
||
КонецЕсли;
|
||
СловарьМетаданных.Вставить(ПоследнееИмяШаблона + "1", 1);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
// Предобразовать соответствие в ТЗ и отсортировать ее по ключу в обратном порядке
|
||
СловарьТаблица = Новый ТаблицаЗначений;
|
||
СловарьТаблица.Колонки.Добавить("Ключ");
|
||
СловарьТаблица.Колонки.Добавить("Значение");
|
||
Для Каждого СтрокаСловаря Из СловарьМетаданных Цикл
|
||
СтрокаТаблицыСловаря = СловарьТаблица.Добавить();
|
||
СтрокаТаблицыСловаря.Ключ = НРег(СтрокаСловаря.Ключ);
|
||
СтрокаТаблицыСловаря.Значение = СтрокаСловаря.Значение;
|
||
КонецЦикла;
|
||
СловарьТаблица.Сортировать("Ключ Убыв");
|
||
|
||
Возврат СловарьТаблица;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСеансПустойИнфобазы1С8Лкс(Знач ТипКомОбъекта = "Application", Знач Видимость = Ложь, Знач ОбработатьИсключениеПодключения = Ложь,
|
||
ОписаниеОшибки = "", ИмяСервераПроцессов = "") Экспорт
|
||
|
||
СтрокаСоединения = ирНеглобальный.ПолучитьСтрокуСоединенияПустойИнфобазыЛкс();
|
||
Сеанс = ирНеглобальный.СоздатьСеансИнфобазы1С8Лкс(СтрокаСоединения, , , ТипКомОбъекта, Видимость, ОбработатьИсключениеПодключения,
|
||
ОписаниеОшибки, ИмяСервераПроцессов);
|
||
Возврат Сеанс;
|
||
|
||
КонецФункции
|
||
|
||
#Если Клиент Тогда
|
||
|
||
Функция ПолучитьАнализТехножурналаЛкс() Экспорт
|
||
|
||
Результат = Обработки.ирАнализТехножурнала.Создать();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
#КонецЕсли
|
||
|
||
#КонецЕсли
|
||
|
||
Функция ЭтоФайловаяБазаЛкс() Экспорт
|
||
|
||
ИмяКластераСерверов = НСтр(СтрокаСоединенияИнформационнойБазы(), "Srvr");
|
||
ЭтоФайловаяБаза = ПустаяСтрока(ИмяКластераСерверов);
|
||
Возврат ЭтоФайловаяБаза;
|
||
|
||
КонецФункции // ЭтоФайловаяБазаИис()
|
||
|
||
Функция ПолучитьСтрокуСоединенияСервераЛкс() Экспорт
|
||
|
||
Результат = ирСервер.ПолучитьСтрокуСоединенияСервераЛкс();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьCOMОбъектWMIЛкс(Знач ИмяСервера = Неопределено, Знач ИмяСервераИсполнителя = Неопределено, Знач ТочкаПодключения = Неопределено) Экспорт
|
||
|
||
//http://msdn.microsoft.com/en-us/library/windows/desktop/aa389763(v=vs.85).aspx
|
||
Если Не ЗначениеЗаполнено(ИмяСервераИсполнителя) Тогда
|
||
Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
|
||
Иначе
|
||
Locator = Новый COMОбъект("WbemScripting.SWbemLocator", ИмяСервераИсполнителя);
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(ИмяСервера) Тогда
|
||
ИмяСервера = ".";
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(ТочкаПодключения) Тогда
|
||
ТочкаПодключения = "root\cimv2";
|
||
КонецЕсли;
|
||
Попытка
|
||
СлужбаWMI = Locator.ConnectServer(ИмяСервера, ТочкаПодключения, , , ТекущийЯзыкСистемы());
|
||
Исключение
|
||
СлужбаWMI = Неопределено;
|
||
Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
|
||
КонецПопытки;
|
||
Возврат СлужбаWMI;
|
||
|
||
КонецФункции
|