#Если Не ТонкийКлиент И Не ВебКлиент Тогда Функция Получить() Экспорт //#Если Клиент Или ВнешнееСоединение Или Не Сервер Тогда Попытка ирПлатформа = Вычислить("ирПлатформа"); Исключение КонецПопытки; Если ирПлатформа = Неопределено Тогда ирПлатформа = Обработки.ирПлатформа.Создать(); КонецЕсли; Возврат ирПлатформа; // В 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; КонецФункции