mirror of
https://github.com/tormozit/RDT1C.git
synced 2025-12-17 05:04:11 +00:00
2010 lines
132 KiB
Plaintext
2010 lines
132 KiB
Plaintext
//ирПортативный Перем ирПлатформа Экспорт; // Эта переменная нужна только здесь
|
||
|
||
//ирПортативный Перем ирПортативный Экспорт;
|
||
//ирПортативный Перем ирОбщий Экспорт;
|
||
//ирПортативный Перем ирСервер Экспорт;
|
||
//ирПортативный Перем ирКэш Экспорт;
|
||
//ирПортативный Перем ирПривилегированный Экспорт;
|
||
|
||
#Если Не ТонкийКлиент И Не ВебКлиент И Не МобильныйКлиент Тогда
|
||
|
||
Функция Получить() Экспорт
|
||
|
||
// Не следует использовать для хранения таких данных, переинициализация которых автоматически невозможна или приведет к ошибкам
|
||
Попытка
|
||
ирПлатформа = Вычислить("ирПлатформа");
|
||
Исключение
|
||
КонецПопытки;
|
||
Если ирПлатформа = Неопределено Тогда
|
||
//ирСервер.СтрокаСоединенияСервераЛкс(); // http://www.hostedredmine.com/issues/851201
|
||
ирПлатформа = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирПлатформа");
|
||
#Если Сервер И Не Сервер Тогда
|
||
ирПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
КонецЕсли;
|
||
Возврат ирПлатформа;
|
||
|
||
КонецФункции
|
||
|
||
Функция ИмяПродукта() Экспорт
|
||
|
||
Возврат "ИнструментыРазработчикаTormozit";
|
||
|
||
КонецФункции
|
||
|
||
Функция КомпоновщикТаблицыМетаданныхЛкс(Знач ПолноеИмяМД, ВызыватьИсключениеПриОтсутствииПрав = Истина, ИндексПараметраПериодичность = Неопределено,
|
||
ВыражениеПараметраПериодичность = "", ИменаВместоПредставлений = Ложь) Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("КомпоновщикТаблицыМетаданныхЛкс");
|
||
КлючНаборПараметров = "" + ПолноеИмяМД + ";" + ВызыватьИсключениеПриОтсутствииПрав + ";" + ИндексПараметраПериодичность + ";" + ВыражениеПараметраПериодичность
|
||
+ ";" + ИменаВместоПредставлений;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
КомпоновщикНастроек = ирОбщий.КомпоновщикТаблицыМетаданныхЛкс(ПолноеИмяМД, ВызыватьИсключениеПриОтсутствииПрав, ИндексПараметраПериодичность, ВыражениеПараметраПериодичность, ИменаВместоПредставлений);
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = КомпоновщикНастроек;
|
||
КонецЕсли;
|
||
Возврат КомпоновщикНастроек;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПоляТаблицыБДЛкс(ПолноеИмяТаблицыБД, _ВызыватьИсключениеПриОтсутствииПрав = Истина, ИндексПараметраПериодичность = Неопределено, ВыражениеПараметраПериодичность = "") Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ПоляТаблицыБДЛкс");
|
||
КлючНаборПараметров = "" + ПолноеИмяТаблицыБД + ";" + _ВызыватьИсключениеПриОтсутствииПрав + ";" + ИндексПараметраПериодичность + ";" + ВыражениеПараметраПериодичность;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Результат = ирОбщий.ПоляТаблицыБДЛкс(ПолноеИмяТаблицыБД, _ВызыватьИсключениеПриОтсутствииПрав, ИндексПараметраПериодичность, ВыражениеПараметраПериодичность);
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ИндивидуальныеТаблицыКонстантДоступныЛкс() Экспорт
|
||
|
||
мПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
Результат = ирКэш.НомерРежимаСовместимостиЛкс() >= 802016; // Здесь точно минимальная версия уже. Не трогать!
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПараметрыСеансаЛкс() Экспорт
|
||
|
||
Результат = Новый Структура("ПереданныйКэш");
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ТаблицаВсехТаблицБДЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ТаблицаВсехТаблицБДЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ПереданныйКэш = ирКэш.ПараметрыСеансаЛкс().ПереданныйКэш;
|
||
Если ЗначениеЗаполнено(ПереданныйКэш) Тогда
|
||
ПереданныйКэш = ПолучитьИзВременногоХранилища(ПереданныйКэш);
|
||
ТаблицаВсехТаблицБД = ПереданныйКэш.ТаблицаВсехТаблицБД;
|
||
КонецЕсли;
|
||
СостояниеРасчета = ирКэш.СостояниеПодготовкиТаблицыВсехТаблицБДЛкс();
|
||
Если СостояниеРасчета <> Неопределено Тогда
|
||
ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(СостояниеРасчета.ИдентификаторЗадания);
|
||
КонецЕсли;
|
||
Если ФоновоеЗадание <> Неопределено Тогда
|
||
Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
|
||
ирОбщий.ОжидатьЗавершенияФоновойОперацииЛкс(ФоновоеЗадание);
|
||
КонецЕсли;
|
||
Если ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
|
||
ТаблицаВсехТаблицБД = ирОбщий.ПрочитатьРезультатФоновогоЗаданияЛкс(СостояниеРасчета.АдресРезультата, СостояниеРасчета.ФормаРезультата);
|
||
Если ТаблицаВсехТаблицБД = Null Тогда
|
||
ТаблицаВсехТаблицБД = Неопределено;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ТаблицаВсехТаблицБД = Неопределено Тогда
|
||
мПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
ТаблицаВсехТаблицБД = Неопределено;
|
||
// Этот способ оказался в большинстве случаев медленнее чем вычислять таблицу каждый раз
|
||
//Если мПлатформа.ИДВерсииПлатформы > "82" Тогда
|
||
// #Если Клиент Тогда
|
||
// ирОбщий.СостояниеЛкс("Получение структуры хранения БД...");
|
||
// #КонецЕсли
|
||
// СтруктураХраненияБД = ПолучитьСтруктуруХраненияБазыДанных(, Ложь);
|
||
// #Если Клиент Тогда
|
||
// ирОбщий.СостояниеЛкс("");
|
||
// #КонецЕсли
|
||
// ХМЛСтруктурыХранения = ЗначениеВСтрокуВнутр(СтруктураХраненияБД);
|
||
// Хеширование = Вычислить("Новый ХешированиеДанных(ХешФункция.MD5)");
|
||
// Хеширование.Добавить(ХМЛСтруктурыХранения);
|
||
// ХешСтруктурыХранения = Хеширование.ХешСумма;
|
||
// ФайлКэша = Новый Файл(мПлатформа.КаталогФайловогоКэша + "\irAllDBTables.tbl");
|
||
// Если ФайлКэша.Существует() Тогда
|
||
// КешТаблиц = ЗначениеИзФайла(ФайлКэша.ПолноеИмя);
|
||
// Если КешТаблиц.ХешСтруктурыХранения = ХешСтруктурыХранения Тогда
|
||
// ТаблицаВсехТаблицБД = КешТаблиц.ТаблицаВсехТаблицБД;
|
||
// КонецЕсли;
|
||
// КонецЕсли;
|
||
//КонецЕсли;
|
||
Если ТаблицаВсехТаблицБД = Неопределено Тогда
|
||
ТаблицаВсехТаблицБД = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКлсПолеТекстаПрограммы");
|
||
#Если Сервер И Не Сервер Тогда
|
||
ТаблицаВсехТаблицБД = Обработки.ирКлсПолеТекстаПрограммы.Создать();
|
||
#КонецЕсли
|
||
ТаблицаВсехТаблицБД = ТаблицаВсехТаблицБД.ДоступныеТаблицы.ВыгрузитьКолонки();
|
||
ТаблицаВсехТаблицБД.Колонки.Удалить("ПородившийЗапрос"); // Для экономии памяти
|
||
ТаблицаВсехТаблицБД.Колонки.Добавить("ТипСсылки");
|
||
//ТаблицаВсехТаблицБД.Колонки.Добавить("СтруктураКлюча");
|
||
КоллекцияКорневыхТипов = Новый Массив;
|
||
СтрокиМетаОбъектов = мПлатформа.ТаблицаТиповМетаОбъектов.НайтиСтроки(Новый Структура("Категория", 0));
|
||
Для Каждого СтрокаТаблицыМетаОбъектов Из СтрокиМетаОбъектов Цикл
|
||
Единственное = СтрокаТаблицыМетаОбъектов.Единственное;
|
||
Если Ложь
|
||
Или Единственное = "Константа"
|
||
Или Единственное = "КритерийОтбора"
|
||
Или Единственное = "ЖурналДокументов"
|
||
Или ирОбщий.ЛиКорневойТипПеречисленияЛкс(Единственное)
|
||
Или ирОбщий.ЛиКорневойТипСсылочногоОбъектаБДЛкс(Единственное)
|
||
Или ирОбщий.ЛиКорневойТипРегистраБДЛкс(Единственное)
|
||
Или ирОбщий.ЛиКорневойТипПоследовательностиЛкс(Единственное)
|
||
Тогда
|
||
КоллекцияКорневыхТипов.Добавить(Единственное);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Если ирКэш.ДоступныВнешниеИсточникДанныхЛкс() Тогда
|
||
Для Каждого МетаВнешнийИсточникДанных Из Метаданные.ВнешниеИсточникиДанных Цикл
|
||
КоллекцияКорневыхТипов.Добавить(МетаВнешнийИсточникДанных.ПолноеИмя());
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Если Метаданные.Константы.Количество() > 0 Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ирОбщий.ПеревестиСтроку("Константы"),, "Константы");
|
||
КонецЕсли;
|
||
мСтрокаТипаВнешнегоИсточникаДанных = мПлатформа.ПолучитьСтрокуТипаМетаОбъектов("ВнешнийИсточникДанных", , 0);
|
||
ИмяДвиженияССубконто = ирОбщий.ПеревестиСтроку("ДвиженияССубконто");
|
||
ИмяГраницы = ирОбщий.ПеревестиСтроку("Границы");
|
||
ИмяЗадачиПоИсполнителю = ирОбщий.ПеревестиСтроку("ЗадачиПоИсполнителю");
|
||
ИмяКонстанта = ирОбщий.ПеревестиСтроку("Константа");
|
||
ИмяОбороты = ирОбщий.ПеревестиСтроку("Обороты");
|
||
ИмяОборотыДтКт = ирОбщий.ПеревестиСтроку("ОборотыДтКт");
|
||
ИмяОстатки = ирОбщий.ПеревестиСтроку("Остатки");
|
||
ИмяОстаткиИОбороты = ирОбщий.ПеревестиСтроку("ОстаткиИОбороты");
|
||
ИмяСрезПервых = ирОбщий.ПеревестиСтроку("СрезПервых");
|
||
ИмяСрезПоследних = ирОбщий.ПеревестиСтроку("СрезПоследних");
|
||
ИмяСубконто = ирОбщий.ПеревестиСтроку("Субконто");
|
||
ИмяТабличнаяЧасть = ирОбщий.ПеревестиСтроку("ТабличнаяЧасть");
|
||
ИмяТочки = ирОбщий.ПеревестиСтроку("Точки");
|
||
ИндикаторТипов = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоллекцияКорневыхТипов.Количество(), "Анализ структуры БД");
|
||
Для Каждого КорневойТип Из КоллекцияКорневыхТипов Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(ИндикаторТипов);
|
||
СтрокаКорневогоТипа = мПлатформа.ПолучитьСтрокуТипаМетаОбъектов(КорневойТип);
|
||
Если СтрокаКорневогоТипа = Неопределено Тогда
|
||
СтрокаКорневогоТипа = мСтрокаТипаВнешнегоИсточникаДанных;
|
||
МножественноеКорневогоТипа = СтрокаКорневогоТипа.Множественное;
|
||
ОбъектМДКорневогоТипа = ирКэш.ОбъектМДПоПолномуИмениЛкс(КорневойТип);
|
||
КоллекцияМетаданных = ОбъектМДКорневогоТипа.Таблицы;
|
||
ПредставлениеКатегории = ОбъектМДКорневогоТипа.Представление();
|
||
СхемаТаблиц = ОбъектМДКорневогоТипа.Имя;
|
||
КорневойТип = "Внешняя";
|
||
Иначе
|
||
МножественноеКорневогоТипа = СтрокаКорневогоТипа.Множественное;
|
||
ПредставлениеКатегории = ирОбщий.ПредставлениеИзИдентификатораЛкс(МножественноеКорневогоТипа);
|
||
СхемаТаблиц = "";
|
||
Если КорневойТип = "Перерасчет" Тогда
|
||
КоллекцияМетаданных = Новый Массив;
|
||
Для Каждого МетаРегистрРасчета Из Метаданные.РегистрыРасчета Цикл
|
||
Для Каждого Перерасчет Из МетаРегистрРасчета.Перерасчеты Цикл
|
||
КоллекцияМетаданных.Добавить(Перерасчет);
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
Иначе
|
||
КоллекцияМетаданных = Метаданные[МножественноеКорневогоТипа];
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если КоллекцияМетаданных.Количество() = 0 Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ЛиКорневойТипСсылки = ирОбщий.ЛиКорневойТипСсылкиЛкс(КорневойТип);
|
||
ЛиКорневойТипСсылочногоОбъекта = ирОбщий.ЛиКорневойТипСсылочногоОбъектаБДЛкс(КорневойТип);
|
||
//ПредставлениеТипаТаблицы = ирОбщий.ПредставлениеИзИдентификатораЛкс(МножественноеКорневогоТипа);
|
||
ИндикаторТипа = ирОбщий.ПолучитьИндикаторПроцессаЛкс(КоллекцияМетаданных.Количество(), "Анализ " + КорневойТип);
|
||
Для Каждого МетаИсточник Из КоллекцияМетаданных Цикл
|
||
ирОбщий.ОбработатьИндикаторЛкс(ИндикаторТипа);
|
||
ПолноеИмяМД = МетаИсточник.ПолноеИмя();
|
||
ТипТаблицы = КорневойТип;
|
||
Если ТипТаблицы = "КритерийОтбора" Тогда
|
||
ТипТаблицы = "ВиртуальнаяТаблица";
|
||
КонецЕсли;
|
||
Если Ложь
|
||
Или КорневойТип <> "Константа"
|
||
Или ирКэш.ИндивидуальныеТаблицыКонстантДоступныЛкс()
|
||
Тогда
|
||
СтрокаОсновнойТаблицы = ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД,, Ложь), ПолноеИмяМД, ТипТаблицы, МетаИсточник.Имя,
|
||
МетаИсточник.Представление(), СхемаТаблиц, , МетаИсточник);
|
||
Если ЛиКорневойТипСсылки Тогда
|
||
СтрокаОсновнойТаблицы.ТипСсылки = Тип(ирОбщий.ИмяТипаИзПолногоИмениМДЛкс(ПолноеИмяМД));
|
||
КонецЕсли;
|
||
Если ЛиКорневойТипСсылочногоОбъекта Тогда
|
||
СтруктураТЧ = ирОбщий.ТабличныеЧастиОбъектаЛкс(МетаИсточник);
|
||
Для Каждого КлючИЗначение Из СтруктураТЧ Цикл
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + КлючИЗначение.Ключ, ПолноеИмяМД + "." + ИмяТабличнаяЧасть + "." + КлючИЗначение.Ключ, "ТабличнаяЧасть", ,
|
||
МетаИсточник.Представление() + "." + КлючИЗначение.Значение,,, МетаИсточник);
|
||
КонецЦикла;
|
||
Если КорневойТип = "БизнесПроцесс" Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяТочки,, "Точки", , МетаИсточник.Представление() + "." + "Точки",,, МетаИсточник);
|
||
КонецЕсли;
|
||
Если КорневойТип = "Задача" Тогда
|
||
Если МетаИсточник.Адресация <> Неопределено Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяЗадачиПоИсполнителю,, "ВиртуальнаяТаблица", ,
|
||
МетаИсточник.Представление() + "." + "Задачи по исполнителю",,, МетаИсточник, 1);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если КорневойТип = "РегистрСведений" Тогда
|
||
Если МетаИсточник.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяСрезПоследних,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Срез последних",,, МетаИсточник, 1);
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяСрезПервых,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Срез первых",,, МетаИсточник, 1);
|
||
КонецЕсли;
|
||
ИначеЕсли КорневойТип = "РегистрНакопления" Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяОбороты,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Обороты",,, МетаИсточник, 3);
|
||
Если МетаИсточник.ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяОстатки,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Остатки",,, МетаИсточник, 1);
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяОстаткиИОбороты,, "ВиртуальнаяТаблица", ,
|
||
МетаИсточник.Представление() + "." + "Остатки и обороты",,, МетаИсточник, 4);
|
||
КонецЕсли;
|
||
ИначеЕсли КорневойТип = "РегистрБухгалтерии" Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяДвиженияССубконто,, "ДвиженияССубконто", ,
|
||
МетаИсточник.Представление() + "." + "Движения с субконто",,, МетаИсточник, 2);
|
||
Если МетаИсточник.ПланСчетов.МаксКоличествоСубконто > 0 Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяСубконто,, "Субконто", , МетаИсточник.Представление() + "." + "Субконто",,, МетаИсточник);
|
||
КонецЕсли;
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяОбороты,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Обороты",,, МетаИсточник, 5);
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяОборотыДтКт,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Обороты Дт Кт",,, МетаИсточник, 7);
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяОстатки,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Остатки",,, МетаИсточник, 3);
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяОстаткиИОбороты,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Остатки и обороты",,, МетаИсточник, 6);
|
||
//ИначеЕсли КорневойТип = "РегистрРасчета" Тогда
|
||
// Для Каждого Перерасчет Из МетаИсточник.Перерасчеты Цикл
|
||
// ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ирКэш.ИмяТаблицыИзМетаданныхЛкс(Перерасчет.ПолноеИмя()), "Перерасчет", Перерасчет.Имя, Перерасчет.Представление(), , , Перерасчет);
|
||
// КонецЦикла;
|
||
ИначеЕсли КорневойТип = "Последовательность" Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ПолноеИмяМД + "." + ИмяГраницы,, "ВиртуальнаяТаблица", , МетаИсточник.Представление() + "." + "Границы",,, МетаИсточник);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ирОбщий.ЕстьТаблицаИзмененийОбъектаМетаданных(МетаИсточник) Тогда
|
||
ирОбщий.ДобавитьДоступнуюТаблицуБДЛкс(ТаблицаВсехТаблицБД, ирКэш.ИмяТаблицыИзМетаданныхЛкс(ПолноеИмяМД, Истина, Ложь), , "Изменения", МетаИсточник.Имя,
|
||
МетаИсточник.Представление() + "." + "Изменения",,, МетаИсточник);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
КонецЦикла;
|
||
ирОбщий.ОсвободитьИндикаторПроцессаЛкс();
|
||
ТаблицаВсехТаблицБД.Индексы.Добавить("НПолноеИмя");
|
||
ТаблицаВсехТаблицБД.Сортировать("НПолноеИмя");
|
||
//Если ФайлКэша <> Неопределено Тогда
|
||
// КешТаблиц = Новый Структура("ТаблицаВсехТаблицБД, ХешСтруктурыХранения", ТаблицаВсехТаблицБД, ХешСтруктурыХранения);
|
||
// ЗначениеВФайл(ФайлКэша.ПолноеИмя, КешТаблиц);
|
||
//КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = ТаблицаВсехТаблицБД;
|
||
КонецЕсли;
|
||
Возврат ТаблицаВсехТаблицБД;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиЭтоРасширениеКонфигурацииЛкс() Экспорт
|
||
|
||
Расширение = ирКэш.ЭтотРасширениеКонфигурацииЛкс();
|
||
#Если Сервер И Не Сервер Тогда
|
||
Расширение = РасширенияКонфигурации.Создать();
|
||
#КонецЕсли
|
||
Результат = Истина
|
||
И Расширение <> Неопределено
|
||
И (Ложь
|
||
Или ирКэш.НомерВерсииПлатформыЛкс() < 803012
|
||
Или Расширение.Активно);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЭтотРасширениеКонфигурацииЛкс() Экспорт
|
||
|
||
Результат = ирОбщий.ЭтотРасширениеКонфигурацииЛкс();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция СтруктураХраненияБДЛкс(ЛиИменаБД = Ложь, ВычислитьИменаИндексов = Истина, АдресЧужойСхемыБД = "") Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("СтруктураХраненияБДЛкс");
|
||
КлючНаборПараметров = "" + ЛиИменаБД + ";" + ВычислитьИменаИндексов + ";" + АдресЧужойСхемыБД;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Результат = ирОбщий.СтруктураХраненияБДЛкс(, ЛиИменаБД, ВычислитьИменаИндексов, АдресЧужойСхемыБД);
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Получить словарь метаданных состоящий из шаблонов имен таблиц
|
||
//
|
||
// Параметры:
|
||
// ЛиИменаБД - Булево
|
||
//
|
||
// Возвращаемое значение:
|
||
// Соответствие - словарь шаблонов имен метаданных. Ключ - наименование объекта
|
||
// метаданных, где его номер заменен на номер позиции этого
|
||
// числа в строке; Значение - количество чисел в строке
|
||
//
|
||
Функция ПолучитьСловарьШаблоновМетаданныхЛкс(ЛиИменаБД = Ложь, АдресЧужойСхемыБД = "") Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ПолучитьСловарьШаблоновМетаданныхЛкс");
|
||
КлючНаборПараметров = "" + ЛиИменаБД + ";" + АдресЧужойСхемыБД;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
СтруктураХраненияБД = ирКэш.СтруктураХраненияБДЛкс(ЛиИменаБД, , АдресЧужойСхемыБД);
|
||
Результат = Новый ТаблицаЗначений;
|
||
Результат.Колонки.Добавить("РегулярныйШаблон");
|
||
Результат.Колонки.Добавить("ПозиционныйШаблон");
|
||
Результат.Колонки.Добавить("КоличествоПараметров");
|
||
КоличествоСимволов = 0;
|
||
ПозицияЧисла = 0;
|
||
Для Каждого СтрокаСтруктурыБазы Из СтруктураХраненияБД Цикл
|
||
ИмяТаблицыХранения = НРег(Лев(СтрокаСтруктурыБазы.ИмяТаблицыХранения, СтрДлина(СтрокаСтруктурыБазы.ИмяТаблицыХранения)));
|
||
РегулярныйШаблон = "";
|
||
ПозиционныйШаблон = "";
|
||
КоличествоЧисел = 0;
|
||
ПоследнееИмяШаблона = "";
|
||
Пока ирОбщий.НайтиЧислоВСтрокеЛкс(ИмяТаблицыХранения, ПозицияЧисла, КоличествоСимволов) Цикл
|
||
КоличествоЧисел = КоличествоЧисел + 1;
|
||
ПоследнееИмяШаблона = Лев(ИмяТаблицыХранения, ПозицияЧисла - 1);
|
||
РегулярныйШаблон = РегулярныйШаблон + ПоследнееИмяШаблона + "(\d+)";
|
||
ПозиционныйШаблон = ПозиционныйШаблон + ПоследнееИмяШаблона + XMLСтрока(КоличествоЧисел);
|
||
ИмяТаблицыХранения = Прав(ИмяТаблицыХранения, СтрДлина(ИмяТаблицыХранения) - ПозицияЧисла - КоличествоСимволов + 1);
|
||
КонецЦикла;
|
||
РегулярныйШаблон = РегулярныйШаблон + ИмяТаблицыХранения;
|
||
ПозиционныйШаблон = ПозиционныйШаблон + ИмяТаблицыХранения;
|
||
СтрокаТаблицыСловаря = Результат.Добавить();
|
||
СтрокаТаблицыСловаря.РегулярныйШаблон = НРег(РегулярныйШаблон);
|
||
СтрокаТаблицыСловаря.ПозиционныйШаблон = ПозиционныйШаблон;
|
||
СтрокаТаблицыСловаря.КоличествоПараметров = КоличествоЧисел;
|
||
Если Не ЛиИменаБД Тогда
|
||
// Сохранить шаблон дочерней таблицы независимо
|
||
Если КоличествоЧисел > 1 Тогда
|
||
Если Лев(ПоследнееИмяШаблона, 1) = "." Тогда
|
||
ПоследнееИмяШаблона = Сред(ПоследнееИмяШаблона, 2);
|
||
КонецЕсли;
|
||
РегулярныйШаблон = ПоследнееИмяШаблона + "(\d+)";
|
||
ПозиционныйШаблон = ПоследнееИмяШаблона + XMLСтрока(КоличествоЧисел);
|
||
СтрокаТаблицыСловаря = Результат.Добавить();
|
||
СтрокаТаблицыСловаря.РегулярныйШаблон = НРег(РегулярныйШаблон);
|
||
СтрокаТаблицыСловаря.ПозиционныйШаблон = ПозиционныйШаблон;
|
||
СтрокаТаблицыСловаря.КоличествоПараметров = 1;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Результат.Свернуть("РегулярныйШаблон,ПозиционныйШаблон,КоличествоПараметров");
|
||
Результат.Сортировать("ПозиционныйШаблон");
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСеансПустойИнфобазы1С8Лкс(Знач ТипCOMОбъекта = "Application", Знач Видимость = Ложь, Знач ОбработатьИсключениеПодключения = Ложь,
|
||
ОписаниеОшибки = "", ИмяСервераПроцессов = "") Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ПолучитьСеансПустойИнфобазы1С8Лкс");
|
||
КлючНаборПараметров = "" + ТипCOMОбъекта + ";" + Видимость + ";" + ОбработатьИсключениеПодключения + ";" + ОписаниеОшибки + ";" + ИмяСервераПроцессов;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
СтрокаСоединения = ирОбщий.СтрокаСоединенияПустойИнфобазыЛкс();
|
||
Результат = ирОбщий.СоздатьСеансИнфобазы1С8Лкс(СтрокаСоединения, , , ТипCOMОбъекта, Видимость, ОбработатьИсключениеПодключения,
|
||
ОписаниеОшибки, ИмяСервераПроцессов);
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция БуферСравненияЛкс(ТипДанных) Экспорт
|
||
|
||
ирПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
ирПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
Результат = ирПлатформа.БуферыСравнения[ТипДанных];
|
||
Если Результат = Неопределено Тогда
|
||
Результат = Новый Массив;
|
||
ирПлатформа.БуферыСравнения[ТипДанных] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьWinAPI() Экспорт
|
||
|
||
мПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
WinAPI = мПлатформа.ПолучитьWinAPI();
|
||
Возврат WinAPI;
|
||
|
||
КонецФункции
|
||
|
||
Функция ФорматБуфераОбмена1СЛкс() Экспорт
|
||
|
||
WinAPI = ирКэш.ПолучитьWinAPI();
|
||
Если WinAPI <> Неопределено Тогда
|
||
ФорматБуфераОбмена1С = WinAPI.RegisterClipboardFormat("V8Value");
|
||
КонецЕсли;
|
||
Возврат ФорматБуфераОбмена1С;
|
||
|
||
КонецФункции
|
||
|
||
Функция Это64битнаяОСЛкс(Компьютер = Неопределено) Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("Это64битнаяОСЛкс");
|
||
КлючНаборПараметров = "" + Компьютер;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
мWMI = ирКэш.ПолучитьCOMОбъектWMIЛкс(Компьютер);
|
||
// http://www.forum.mista.ru/topic.php?id=752260
|
||
//ИмяКласса = "Win32_OperatingSystem";
|
||
//КоллекцияОС = мWMI.InstancesOf(ИмяКласса);
|
||
//Для каждого лОС Из КоллекцияОС Цикл
|
||
// Прервать;
|
||
//КонецЦикла;
|
||
//Результат = Лев(лОС.OSArchitecture, 2) = "64";
|
||
РезультатЗапроса = мWMI.ExecQuery("select AddressWidth from Win32_Processor where DeviceID=""CPU0"" AND AddressWidth=64");
|
||
Результат = РезультатЗапроса.Count > 0;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает смещение времени из-за некорректной функции ПолучитьВремяИзменения()
|
||
// Часть примечание из описания функции:
|
||
// В режиме совместимости выдает местное время последней модификации файла с ошибкой NTFS.
|
||
// Если файл изменен летом, а просматривается зимой, то полученное время отстает на 1 час.
|
||
// Если файл изменен зимой, а просматривается летом, то полученное время опережает на 1 час.
|
||
//
|
||
// Источник - http://infostart.ru/public/323233/
|
||
// Автор - OtTech http://infostart.ru/profile/492011/
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Количество секунд смещения.
|
||
//
|
||
Функция ПолучитьСмещениеВремениЛкс() Экспорт
|
||
|
||
ИмяФайла = ПолучитьИмяВременногоФайла();
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстовыйДокумент.Записать(ИмяФайла);
|
||
Файл = Новый Файл(ИмяФайла);
|
||
Разница = ОКР((ТекущаяДата() - Файл.ПолучитьВремяИзменения()) / 3600);
|
||
УдалитьФайлы(ИмяФайла);
|
||
Возврат Разница * 3600;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьАнализТехножурналаЛкс() Экспорт
|
||
|
||
Результат = ирОбщий.СоздатьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирАнализТехножурнала");
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция КоличествоОшибокВЖурналеЛкс(Знач Начало, Знач Конец, Знач СтруктураОтбора, Знач МаксимальныйРазмерВыгрузки = Неопределено) Экспорт
|
||
|
||
КоличествоОшибокВЖурнале = ирОбщий.КоличествоОшибокВЖурналеЛкс(Начало, Конец, СтруктураОтбора, МаксимальныйРазмерВыгрузки);
|
||
Возврат КоличествоОшибокВЖурнале;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПолучитьСеансТонкогоКлиентаЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ПолучитьСеансТонкогоКлиентаЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
СвязанныйСеансТонкогоКлиента = ирОбщий.ЗапуститьСеансПодПользователемЛкс(ИмяПользователя(),, "c.Application",,,, Ложь, Ложь);
|
||
Попытка
|
||
СвязанныйСеансТонкогоКлиента.Visible = Истина;
|
||
Исключение
|
||
ирОбщий.СообщитьЛкс("Не удалось подключить тонкий клиент через COM. Пробуйте под пользователем без пароля https://www.hostedredmine.com/issues/917837.
|
||
|Для диагностики используйте инструмент ""Управление COM классами 1С""", СтатусСообщения.Внимание);
|
||
Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирУправлениеCOMКлассами1С.Форма");
|
||
Форма.ПараметрТипКласса = "CApplication";
|
||
Форма.Открыть();
|
||
Возврат Неопределено;
|
||
КонецПопытки;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = СвязанныйСеансТонкогоКлиента;
|
||
КонецЕсли;
|
||
Возврат СвязанныйСеансТонкогоКлиента;
|
||
|
||
КонецФункции
|
||
|
||
Функция ОбъектыМетаданныхСРегистрациейИзменений() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ОбъектыМетаданныхСРегистрациейИзменений");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Результат = Новый Соответствие;
|
||
Для Каждого МетаПланОбмена Из Метаданные.ПланыОбмена Цикл
|
||
Для Каждого ЭлементСостава Из МетаПланОбмена.Состав Цикл
|
||
Если ЭлементСостава.Метаданные = Неопределено Тогда
|
||
// Битая ссылка
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Результат[ЭлементСостава.Метаданные.ПолноеИмя()] = 1;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВКОбщаяЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ВКОбщаяЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ВК = ирОбщий.НоваяВКОбщаяЛкс();
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = ВК;
|
||
КонецЕсли;
|
||
Возврат ВК;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВКПерехватКлавиатурыЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ВКПерехватКлавиатурыЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ВК = ирОбщий.НоваяВКПерехватКлавиатурыЛкс();
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = ВК;
|
||
КонецЕсли;
|
||
Возврат ВК;
|
||
|
||
КонецФункции
|
||
|
||
Функция КорневыеТипыСсылочныеЛкс() Экспорт
|
||
|
||
Результат = Новый Массив;
|
||
мПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
СтрокиМетаОбъектов = мПлатформа.ТаблицаТиповМетаОбъектов.НайтиСтроки(Новый Структура("Категория", 0));
|
||
Для Каждого СтрокаТаблицыМетаОбъектов Из СтрокиМетаОбъектов Цикл
|
||
Единственное = СтрокаТаблицыМетаОбъектов.Единственное;
|
||
Если ирОбщий.ЛиКорневойТипСсылочногоОбъектаБДЛкс(Единственное) Тогда
|
||
Результат.Добавить(СтрокаТаблицыМетаОбъектов);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЭтоФоновоеЗаданиеЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
ТекущийСеанс = ирКэш.ТекущийСеансЛкс();
|
||
Если ТекущийСеанс = Неопределено Тогда
|
||
Результат = Ложь;
|
||
Иначе
|
||
Результат = ирОбщий.СтрокиРавныЛкс(ТекущийСеанс.ИмяПриложения, "BackgroundJob");
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ТекущийСеансЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ТекущийСеансЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если ирКэш.НомерРежимаСовместимостиЛкс() >= 803007 Тогда
|
||
Результат = Вычислить("ПолучитьТекущийСеансИнформационнойБазы()");
|
||
Иначе
|
||
Результат = ирПривилегированный.ТекущийСеансЛкс();
|
||
КонецЕсли;
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// 8.3.8+
|
||
Функция ДоступныТаблицыМенеджераВременныхТаблицЛкс() Экспорт
|
||
|
||
Менеджер = Новый МенеджерВременныхТаблиц;
|
||
Попытка
|
||
Результат = Менеджер.Таблицы;
|
||
Исключение
|
||
Результат = Неопределено;
|
||
КонецПопытки;
|
||
Возврат Результат <> Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
// 8.3.9+
|
||
Функция ДоступнаЗащитаОтОпасныхДействийЛкс() Экспорт
|
||
|
||
ЗащитаОтОпасныхДействийЛ = Неопределено;
|
||
Попытка
|
||
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
|
||
ЗащитаОтОпасныхДействийЛ = ТекущийПользователь.ЗащитаОтОпасныхДействий;
|
||
Исключение
|
||
КонецПопытки;
|
||
Возврат ЗащитаОтОпасныхДействийЛ <> Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
// 8.3.18+
|
||
Функция ДоступноВосстановлениеПароляПользователямЛкс() Экспорт
|
||
|
||
Результат = Неопределено;
|
||
Попытка
|
||
ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
|
||
Результат = ТекущийПользователь.ЗапрещеноВосстанавливатьПароль;
|
||
Исключение
|
||
КонецПопытки;
|
||
Возврат Результат <> Неопределено;
|
||
|
||
КонецФункции
|
||
|
||
// 8.2.14+
|
||
Функция ДоступныВнешниеИсточникДанныхЛкс() Экспорт
|
||
|
||
Результат = ирКэш.НомерВерсииПлатформыЛкс() >= 802014;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// 8.2.14+
|
||
Функция ДоступныОбщиеРеквизитыЛкс() Экспорт
|
||
|
||
Результат = ирКэш.НомерВерсииПлатформыЛкс() >= 802014;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// 8.3.5+
|
||
Функция ДоступныВидыСравненияПодобноШаблонЛкс() Экспорт
|
||
|
||
Результат = ирКэш.НомерВерсииПлатформыЛкс() >= 803005;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция НомерРежимаСовместимостиЛкс() Экспорт
|
||
|
||
ТекущийРежимСовместимости = Метаданные.РежимСовместимости;
|
||
Если ТекущийРежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
|
||
СисИнфо = Новый СистемнаяИнформация;
|
||
Фрагменты = ирОбщий.СтрРазделитьЛкс(СисИнфо.ВерсияПриложения,,, Ложь); // Защита от рекурсии!
|
||
Иначе
|
||
// Пример значения СтрокаВерсии = Версия8_3_1
|
||
ТекущийРежимСовместимости = СтрЗаменить(ТекущийРежимСовместимости, "Версия", "");
|
||
ТекущийРежимСовместимости = СтрЗаменить(ТекущийРежимСовместимости, "Version", ""); // Вариант встроенного языка Английский
|
||
Фрагменты = ирОбщий.СтрРазделитьЛкс(ТекущийРежимСовместимости, "_",, Ложь); // Защита от рекурсии!
|
||
КонецЕсли;
|
||
Результат = Число(Фрагменты[0]) * 100 * 1000 + Число(Фрагменты[1]) * 1000;
|
||
Если Фрагменты.Количество() > 2 Тогда
|
||
Результат = Результат + Число(Фрагменты[2]);
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Например 8.2, 8.3
|
||
Функция НомерИзданияПлатформыЛкс() Экспорт
|
||
|
||
СисИнфо = Новый СистемнаяИнформация;
|
||
Фрагменты = ирОбщий.СтрРазделитьЛкс(СисИнфо.ВерсияПриложения);
|
||
Результат = Фрагменты[0] + Фрагменты[1];
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция НомерВерсииПлатформыЛкс(ВключаяНомерСборки = Ложь) Экспорт
|
||
|
||
СисИнфо = Новый СистемнаяИнформация;
|
||
СтрокаВерсии = СисИнфо.ВерсияПриложения;
|
||
Результат = ирОбщий.НомерВерсииПлатформыЛкс(СтрокаВерсии, ВключаяНомерСборки);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция НомерВерсииPowerShellЛкс() Экспорт
|
||
|
||
ТекстСкрипта = Новый ТекстовыйДокумент;
|
||
ТекстСкрипта.УстановитьТекст("$PSVersionTable.PSVersion.major");
|
||
ФайлСкрипта = Новый Файл(ПолучитьИмяВременногоФайла("ps1"));
|
||
ТекстСкрипта.Записать(ФайлСкрипта.ПолноеИмя);
|
||
СтрокаЗапуска = ирОбщий.КомандаСистемыЗапускаСкриптаPowerShellЛкс(ФайлСкрипта.Имя);
|
||
РезультатКоманды = ирОбщий.ВыполнитьКомандуОСЛкс(СтрокаЗапуска);
|
||
Результат = Число(РезультатКоманды);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВерсияБСПЛкс() Экспорт
|
||
УстановитьПривилегированныйРежим(Истина);
|
||
Если Истина
|
||
И Метаданные.РегистрыСведений.Найти("ВерсииПодсистем") <> Неопределено
|
||
И ПравоДоступа("Чтение", Метаданные.РегистрыСведений.ВерсииПодсистем)
|
||
Тогда
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст = "
|
||
|ВЫБРАТЬ
|
||
| ВерсииПодсистем.Версия КАК Версия
|
||
|ИЗ
|
||
| РегистрСведений.ВерсииПодсистем КАК ВерсииПодсистем
|
||
|ГДЕ
|
||
| ВерсииПодсистем.ИмяПодсистемы = &ИмяПодсистемы
|
||
|";
|
||
Запрос.УстановитьПараметр("ИмяПодсистемы", "СтандартныеПодсистемы");
|
||
Таблица = Запрос.Выполнить().Выгрузить();
|
||
Если Таблица.Количество() > 0 Тогда
|
||
ВерсияБСП = Таблица[0].Версия;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат ВерсияБСП;
|
||
КонецФункции
|
||
|
||
Функция НомерВерсииБСПЛкс() Экспорт
|
||
|
||
ВерсияБСП = ирКэш.ВерсияБСПЛкс();
|
||
Если ЗначениеЗаполнено(ВерсияБСП) Тогда
|
||
Фрагменты = ирОбщий.СтрРазделитьЛкс(ВерсияБСП);
|
||
Результат = Число(Фрагменты[0]) * 100 + Число(Фрагменты[1]);
|
||
Иначе
|
||
Результат = 0;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЭталонныйНаборЗаписейЛкс(Знач ПолноеИмяТаблицыБД) Экспорт
|
||
|
||
#Если Сервер И Не Клиент Тогда
|
||
ОбъектыНаСервере = Ложь;
|
||
#Иначе
|
||
ОбъектыНаСервере = "Обязательно";
|
||
#КонецЕсли
|
||
НаборЗаписей = ирОбщий.СоздатьНаборЗаписейПоИмениТаблицыБДЛкс(ПолноеИмяТаблицыБД, ОбъектыНаСервере).Методы;
|
||
Возврат НаборЗаписей;
|
||
|
||
КонецФункции
|
||
|
||
// Параметры:
|
||
// Локальный - Булево - При Истина будет Local, иначе - Roaming
|
||
Функция КаталогИзданияПлатформыВПрофилеЛкс(Локальный = Истина, Знач ИзданиеПлатформы = "") Экспорт
|
||
|
||
КаталогДанныхПриложения = КаталогПлатформыВПрофилеЛкс(Локальный);
|
||
Если Не ЗначениеЗаполнено(ИзданиеПлатформы) Тогда
|
||
ИзданиеПлатформы = ирКэш.НомерИзданияПлатформыЛкс();
|
||
КонецЕсли;
|
||
Если ИзданиеПлатформы > "82" Тогда
|
||
Суффикс = Лев(ИзданиеПлатформы, 1);
|
||
Иначе
|
||
Суффикс = ИзданиеПлатформы;
|
||
КонецЕсли;
|
||
Разделитель = ирОбщий.РазделительПутиКФайлуЛкс();
|
||
КаталогДанныхПриложения = КаталогДанныхПриложения + Разделитель + "1cv" + Суффикс;
|
||
ФайлПеренаправления = Новый Файл(КаталогДанныхПриложения + Разделитель + "location.cfg");
|
||
Если ФайлПеренаправления.Существует() Тогда
|
||
ЧтениеТекста = Новый ЧтениеТекста;
|
||
ЧтениеТекста.Открыть(ФайлПеренаправления.ПолноеИмя);
|
||
СтрокаФайла = ЧтениеТекста.ПрочитатьСтроку();
|
||
НовыйКаталог = НСтр(СтрокаФайла, "location");
|
||
Если ЗначениеЗаполнено(НовыйКаталог) Тогда
|
||
Если Разделитель = "\" Тогда
|
||
КаталогДанныхПриложения = СтрЗаменить(НовыйКаталог, "/", Разделитель);
|
||
Иначе
|
||
КаталогДанныхПриложения = СтрЗаменить(НовыйКаталог, "\", Разделитель);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Возврат КаталогДанныхПриложения;
|
||
|
||
КонецФункции
|
||
|
||
Функция КаталогПлатформыВПрофилеЛкс(Знач Локальный = Ложь) Экспорт
|
||
|
||
Если Не ирКэш.ЛиПлатформаWindowsЛкс() Тогда
|
||
//КаталогДанныхПриложения = "~/.1cv8"; // Похоже так можно только в bash. Ошибка доступа к файлу '~'. 13(0x0000000D): Permission denied
|
||
#Если Клиент Тогда
|
||
Если Локальный Тогда
|
||
Подкаталог = ".1cv8" + ирОбщий.РазделительПутиКФайлуЛкс() + "1C";
|
||
Иначе
|
||
Подкаталог = ".1C";
|
||
КонецЕсли;
|
||
КаталогДанныхПриложения = "/home/" + ирКэш.ТекущийПользовательОСЛкс(Ложь) + "/" + Подкаталог;
|
||
#Иначе
|
||
КаталогДанныхПриложения = КаталогВременныхФайлов();
|
||
#КонецЕсли
|
||
Иначе
|
||
Если Локальный Тогда
|
||
Подкаталог = 28;
|
||
Иначе
|
||
Подкаталог = 26;
|
||
КонецЕсли;
|
||
ПриложениеОболочкиОС = Новый COMobject("Shell.Application");
|
||
КаталогДанныхПриложения = ПриложениеОболочкиОС.NameSpace(Подкаталог).Self.Path;
|
||
КаталогДанныхПриложения = КаталогДанныхПриложения + ирОбщий.РазделительПутиКФайлуЛкс() + "1C";
|
||
КонецЕсли;
|
||
Возврат КаталогДанныхПриложения;
|
||
|
||
КонецФункции
|
||
|
||
Функция ВычислительРегВыраженийЛкс() Экспорт
|
||
Результат = ирОбщий.НовыйВычислительРегВыражений();
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
Функция ПолучитьCOMОбъектWMIЛкс(Знач ИмяСервера = Неопределено, Знач ИмяСервераИсполнителя = Неопределено, Знач ТочкаПодключения = Неопределено) Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ПолучитьCOMОбъектWMIЛкс");
|
||
КлючНаборПараметров = "" + ИмяСервера + ";" + ИмяСервераИсполнителя + ";" + ТочкаПодключения;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если Не ирОбщий.ЭтоИмяЛокальногоКомпьютераЛкс(ИмяСервера) Тогда
|
||
// Обходим проблему с большим таймаутом метода WbemScripting.SWbemLocator.ConnectServer http://www.forum.mista.ru/topic.php?id=752526
|
||
// https://www.hostedredmine.com/issues/907854
|
||
ДопустимоеОжиданиеОтвета = 1;
|
||
ИмяФайлаРезультата = ирОбщий.ВыполнитьКомандуОСЛкс("rpcping -s " + ИмяСервера, Ложь);
|
||
ТекстовыйДокумент = Новый ТекстовыйДокумент;
|
||
ТекстРезультата = "";
|
||
НачальнаяДата = ТекущаяДата();
|
||
Пока Истина Цикл
|
||
Попытка
|
||
ТекстовыйДокумент.Прочитать(ИмяФайлаРезультата);
|
||
ТекстРезультата = ТекстовыйДокумент.ПолучитьТекст();
|
||
УдалитьФайлы(ИмяФайлаРезультата);
|
||
Исключение
|
||
// Файл недоступен, значит процесс все еще запускается
|
||
КонецПопытки;
|
||
Если Ложь
|
||
Или ИмяФайлаРезультата = Неопределено
|
||
Или ТекущаяДата() - НачальнаяДата >= ДопустимоеОжиданиеОтвета
|
||
Или Найти(ТекстРезультата, "0x000006BA") > 0
|
||
Тогда
|
||
ирОбщий.СообщитьЛкс("The RPC server """ + ИмяСервера + """ is unavailable", СтатусСообщения.Внимание);
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Если ЗначениеЗаполнено(ТекстРезультата) Тогда
|
||
Прервать;
|
||
КонецЕсли;
|
||
ирОбщий.ПаузаЛкс(1);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
//http://msdn.microsoft.com/en-us/library/windows/desktop/aa389763(v=vs.85).aspx
|
||
Если Не ЗначениеЗаполнено(ИмяСервераИсполнителя) Тогда
|
||
Locator = Новый COMОбъект("WbemScripting.SWbemLocator");
|
||
Иначе
|
||
Locator = Новый COMОбъект("WbemScripting.SWbemLocator", ИмяСервераИсполнителя);
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(ИмяСервера) Тогда
|
||
ИмяСервера = ".";
|
||
КонецЕсли;
|
||
Если Не ЗначениеЗаполнено(ТочкаПодключения) Тогда
|
||
ТочкаПодключения = "root\cimv2";
|
||
КонецЕсли;
|
||
Попытка
|
||
Результат = Locator.ConnectServer(ИмяСервера, ТочкаПодключения, , , );
|
||
Исключение
|
||
Результат = Неопределено;
|
||
ирОбщий.СообщитьЛкс(ОписаниеОшибки(), СтатусСообщения.Внимание);
|
||
КонецПопытки;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ТекущийПользовательОСЛкс(СИменемДомена = Истина) Экспорт
|
||
|
||
#Если ВебКлиент Тогда
|
||
ПользовательОС = "";
|
||
#Иначе
|
||
Если Не ирКэш.ЛиПлатформаWindowsЛкс() Тогда
|
||
// https://wiki.merionet.ru/servernye-resheniya/43/peremennye-okruzheniya-v-linux-kak-posmotret-ustanovit-i-sbrosit/
|
||
ПеременныеОкружения = ирОбщий.ВыполнитьКомандуОСЛкс("env");
|
||
ПользовательОС = ирОбщий.СтрокаМеждуМаркерамиЛкс(ПеременныеОкружения, "USER=", Символы.ПС, Ложь);
|
||
Если Не ЗначениеЗаполнено(ПользовательОС) Тогда
|
||
ПользовательОС = ирОбщий.ПоследнийФрагментЛкс(ирОбщий.СтрокаМеждуМаркерамиЛкс(ПеременныеОкружения, "HOME=", Символы.ПС, Ложь), "/");
|
||
КонецЕсли;
|
||
// Переделать на ирОбщий.ВыполнитьКомандуОСЛкс("whoami")
|
||
Иначе
|
||
Network = Новый COMОбъект("WScript.Network");
|
||
ПользовательОС = Network.UserName;
|
||
Если СИменемДомена Тогда
|
||
ПользовательОС = Network.UserDomain + "\" + ПользовательОС;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
#КонецЕсли
|
||
Возврат ПользовательОС;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПеременныеОкруженияПроцессаЛкс() Экспорт
|
||
|
||
// https://ab57.ru/cmdlist/set.html
|
||
Shell = Новый COMОбъект("WScript.Shell");
|
||
ПеременныеОкружения = Shell.Environment("PROCESS");
|
||
Возврат ПеременныеОкружения;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПараметрыЗаписиОбъектовЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ПараметрыЗаписиОбъектовЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Результат = Новый Структура("БезАвторегистрацииИзменений, ОбъектыНаСервере, ДополнительныеСвойства, ОтключатьКонтрольЗаписи, НеИспользоватьИмитаторыОбъектовДанных, ПривилегированныйРежим, ОтключатьЗаписьВерсии");
|
||
Результат.БезАвторегистрацииИзменений = ирОбщий.ВосстановитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.БезАвторегистрацииИзменений");
|
||
Результат.ОбъектыНаСервере = ирОбщий.ВосстановитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.ОбъектыНаСервере");
|
||
Если Результат.ОбъектыНаСервере = Неопределено Тогда
|
||
Результат.ОбъектыНаСервере = ирОбщий.ПолучитьРежимОбъектыНаСервереПоУмолчаниюЛкс();
|
||
КонецЕсли;
|
||
Результат.НеИспользоватьИмитаторыОбъектовДанных = ирОбщий.ВосстановитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.НеИспользоватьИмитаторыОбъектовДанных");
|
||
Если Результат.НеИспользоватьИмитаторыОбъектовДанных = Неопределено Тогда
|
||
Результат.НеИспользоватьИмитаторыОбъектовДанных = ирОбщий.ВосстановитьЗначениеЛкс("НеИспользоватьИмитаторыОбъектовДанных");
|
||
Если Результат.НеИспользоватьИмитаторыОбъектовДанных = Неопределено Тогда
|
||
Результат.НеИспользоватьИмитаторыОбъектовДанных = Ложь;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Результат.ДополнительныеСвойства = ирОбщий.ВосстановитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.ДополнительныеСвойства");
|
||
Если Результат.ДополнительныеСвойства = Неопределено Тогда
|
||
Результат.ДополнительныеСвойства = Новый ТаблицаЗначений;
|
||
КонецЕсли;
|
||
Результат.ОтключатьКонтрольЗаписи = ирОбщий.ВосстановитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.ОтключатьКонтрольЗаписи");
|
||
Если Результат.ОтключатьКонтрольЗаписи = Неопределено Тогда
|
||
Результат.ОтключатьКонтрольЗаписи = Ложь;
|
||
КонецЕсли;
|
||
Результат.ОтключатьЗаписьВерсии = ирОбщий.ВосстановитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.ОтключатьЗаписьВерсии");
|
||
Если Результат.ОтключатьЗаписьВерсии = Неопределено Тогда
|
||
Результат.ОтключатьЗаписьВерсии = Ложь;
|
||
КонецЕсли;
|
||
Результат.ПривилегированныйРежим = ирОбщий.ВосстановитьЗначениеЛкс("ирПараметрыЗаписиОбъектов.ПривилегированныйРежим");
|
||
Если Результат.ПривилегированныйРежим = Неопределено Тогда
|
||
Результат.ПривилегированныйРежим = Ложь;
|
||
КонецЕсли;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПервыйПроизводныйТипРегистраЛкс(Знач Подтип) Экспорт
|
||
|
||
ТипОбразец = Неопределено;
|
||
КоллекцииМетаданных = Новый Массив;
|
||
КоллекцииМетаданных.Добавить(Метаданные.РегистрыСведений);
|
||
КоллекцииМетаданных.Добавить(Метаданные.РегистрыНакопления);
|
||
КоллекцииМетаданных.Добавить(Метаданные.РегистрыБухгалтерии);
|
||
КоллекцииМетаданных.Добавить(Метаданные.РегистрыРасчета);
|
||
КоллекцииМетаданных.Добавить(Метаданные.Последовательности);
|
||
Для Каждого КоллекцияМетаданных Из КоллекцииМетаданных Цикл
|
||
Для Каждого МетаРегистр Из КоллекцияМетаданных Цикл
|
||
ИмяТипа = СтрЗаменить(МетаРегистр.ПолноеИмя(), ".", Подтип + ".");
|
||
Попытка
|
||
ТипОбразец = Тип(ИмяТипа);
|
||
Исключение
|
||
Продолжить;
|
||
КонецПопытки;
|
||
Прервать;
|
||
КонецЦикла;
|
||
Если ТипОбразец <> Неопределено Тогда
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Возврат ТипОбразец;
|
||
|
||
КонецФункции // ЛиМенеджерЗаписиРегистраЛкс()
|
||
|
||
Функция КлючБазыВСпискеПользователяИзКоманднойСтрокиЛкс() Экспорт
|
||
|
||
Если ирОбщий.ЛиИдентификацияБазыВСпискеПоНаименованиюЛкс() Тогда
|
||
Если Не ирКэш.ЛиДоступныРегВыраженияЛкс() Тогда
|
||
Результат = Неопределено;
|
||
Иначе
|
||
КоманднаяСтрокаПроцесса = ирКэш.КоманднаяСтрокаТекущегоПроцессаОСЛкс();
|
||
ВычислительРегВыражений = ирОбщий.НовыйВычислительРегВыражений();
|
||
ВычислительРегВыражений.IgnoreCase = Истина;
|
||
ВычислительРегВыражений.Global = Истина;
|
||
ВычислительРегВыражений.Pattern = "(?:/IBName\s*(""((.|"""")+?)""|(((.)+?))))\s*( /|$)";
|
||
Вхождения = ВычислительРегВыражений.НайтиВхождения(КоманднаяСтрокаПроцесса);
|
||
Если Вхождения.Количество() > 0 Тогда
|
||
Результат = Вхождения[0].SubMatches(0);
|
||
Если Лев(Результат, 1) = """" Тогда
|
||
Результат = Вычислить(Результат);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Иначе
|
||
Результат = СтрокаСоединенияИнформационнойБазы();
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция НастройкиБазыНаКлиентеЛкс() Экспорт
|
||
|
||
ТаблицаБазКлиента = ирОбщий.ПолучитьСписокБазПользователяОСЛкс();
|
||
#Если Сервер И Не Сервер Тогда
|
||
ТаблицаБазКлиента = Обработки.ирПлатформа.Создать().СписокБазПользователя;
|
||
#КонецЕсли
|
||
КлючомЯвляетсяСтрокаСоединения = Ложь;
|
||
КлючБазыВСпискеПользователя = ирОбщий.КлючБазыВСпискеПользователяЛкс(КлючомЯвляетсяСтрокаСоединения);
|
||
Если КлючомЯвляетсяСтрокаСоединения Тогда
|
||
ИмяКлюча = "НСтрокаСоединения";
|
||
Иначе
|
||
ИмяКлюча = "КлючСтроки";
|
||
КонецЕсли;
|
||
СтрокаТекущейБазы = ТаблицаБазКлиента.Найти(НРег(КлючБазыВСпискеПользователя), ИмяКлюча);
|
||
Возврат СтрокаТекущейБазы;
|
||
|
||
КонецФункции
|
||
|
||
Функция АбсолютныйЦветЛкс(Знач ИсходныйЦвет) Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("АбсолютныйЦветЛкс");
|
||
КлючНаборПараметров = "" + ИсходныйЦвет;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
ИсходныйЦвет = Новый Цвет;
|
||
#КонецЕсли
|
||
ИсходныйЦвет = ЗначениеИзСтрокиВнутр(ИсходныйЦвет);
|
||
Если ИсходныйЦвет.Вид = ВидЦвета.Абсолютный Тогда
|
||
Возврат ИсходныйЦвет;
|
||
КонецЕсли;
|
||
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803001 Тогда
|
||
// Способ без операций вывода https://infostart.ru/public/1278131/
|
||
ФорматДок = Новый ФорматированныйДокумент;
|
||
ФорматДок.УстановитьФорматированнуюСтроку(Вычислить("Новый ФорматированнаяСтрока("" "", , ИсходныйЦвет)")); // На 8.2 нет типа ФорматированнаяСтрока
|
||
ТекстHTML = "";
|
||
ФорматДок.ПолучитьHTML(ТекстHTML, Неопределено);
|
||
ПозицияЧислаHEX = Найти(ТекстHTML, "#") + 1;
|
||
ЧислоHEX = Сред(ТекстHTML, ПозицияЧислаHEX, 6);
|
||
Результат = ирОбщий.ЧислоHEXВЦветЛкс(ЧислоHEX);
|
||
Иначе
|
||
Если ирКэш.ЭтоУчебнаяПлатформаЛкс() Тогда
|
||
Результат = ИсходныйЦвет;
|
||
Иначе
|
||
ВременныйФайл = ПолучитьИмяВременногоФайла("mxl");
|
||
ТабДок = Новый ТабличныйДокумент;
|
||
ТабДок.Область("R1C1").ЦветФона = ИсходныйЦвет;
|
||
ТабДок.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.MXL7); // В учебной версии платформы это запрещено https://www.hostedredmine.com/issues/923942
|
||
ТабДок.Прочитать(ВременныйФайл);
|
||
Результат = ТабДок.Область("R1C1").ЦветФона;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция КартинкаИнструментаЛкс(ПолноеИмя) Экспорт
|
||
|
||
мПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
мПлатформа.ЗаполнитьСписокИнструментов();
|
||
СтрокаИнструмента = мПлатформа.СписокИнструментов.Найти(ПолноеИмя, "ПолноеИмя");
|
||
Если СтрокаИнструмента <> Неопределено Тогда
|
||
Результат = ирКэш.КартинкаПоИмениЛкс(СтрокаИнструмента.ИмяКартинки);
|
||
Иначе
|
||
Результат = Новый Картинка;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ТипыРасширенийКонфигурацииЛкс(Знач ИмяКлассаМетаданных = Неопределено) Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ТипыРасширенийКонфигурацииЛкс");
|
||
КлючНаборПараметров = "" + ИмяКлассаМетаданных;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
РасширенияКонфигурацииЛ = Вычислить("РасширенияКонфигурации");
|
||
#Если Сервер И Не Сервер Тогда
|
||
РасширенияКонфигурацииЛ = РасширенияКонфигурации;
|
||
#КонецЕсли
|
||
ВсеРасширения = РасширенияКонфигурацииЛ.Получить();
|
||
Если Ложь
|
||
Или ВсеРасширения.Количество() > 1
|
||
Или (Не ирКэш.ЛиЭтоРасширениеКонфигурацииЛкс() И ВсеРасширения.Количество() > 0)
|
||
Тогда
|
||
//// Медленный способ. Необходимость обусловлена отсутствием типов расширений конфигурации в супертипе ЛюбаяСсылка https://partners.v8.1c.ru/forum/t/1823711/m/1823711
|
||
//ТаблицаВсехТаблицБД = ирКэш.ТаблицаВсехТаблицБДЛкс();
|
||
//#Если Сервер И Не Сервер Тогда
|
||
// РасширенияКонфигурацииЛ = РасширенияКонфигурации;
|
||
// ТаблицаВсехТаблицБД = Новый ТаблицаЗначений;
|
||
//#КонецЕсли
|
||
//ВсеТипыСсылок = ТаблицаВсехТаблицБД.ВыгрузитьКолонку("ТипСсылки");
|
||
//Результат = Новый ОписаниеТипов(ВсеТипыСсылок);
|
||
|
||
Результат = Новый Массив;
|
||
ТаблицаТиповМетаОбъектов = ирКэш.ТипыМетаОбъектов(Ложь, Ложь, Ложь);
|
||
Для Каждого СтрокаМетаТипа Из ТаблицаТиповМетаОбъектов Цикл
|
||
Если Ложь
|
||
Или (Истина
|
||
И ЗначениеЗаполнено(ИмяКлассаМетаданных)
|
||
И СтрокаМетаТипа.Единственное <> ИмяКлассаМетаданных)
|
||
Или Не ирОбщий.ЛиКорневойТипСсылкиЛкс(СтрокаМетаТипа.Единственное)
|
||
Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
Для Каждого МетаОбъект Из Метаданные[СтрокаМетаТипа.Множественное] Цикл
|
||
Если МетаОбъект.РасширениеКонфигурации() <> Неопределено Тогда
|
||
Результат.Добавить(Тип(ирОбщий.ИмяТипаИзПолногоИмениМДЛкс(МетаОбъект)));
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция СостояниеПодготовкиТаблицыВсехТаблицБДЛкс() Экспорт
|
||
Если Ложь
|
||
#Если Не Клиент И Сервер Тогда
|
||
Или Истина
|
||
#КонецЕсли
|
||
Или ЭтоФоновоеЗаданиеЛкс()
|
||
|
||
//Или Не ирОбщий.ЛиАсинхронностьДоступнаЛкс() // Этот способ более жесткий, а в этом фоновом задании права на объекты подсистемы пока не нужны. Поэтому пока не будет его применять
|
||
//
|
||
Или ирКэш.ЛиПортативныйРежимЛкс()
|
||
Или ирКэш.ЛиФайловаяБазаЛкс()
|
||
Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
// Антибаг 8.3.16- В обычном приложении в клиент-серверном режиме из временного хранилища иногда возвращается Неопределено https://partners.v8.1c.ru/forum/t/1768363/m/1768363, http://www.hostedredmine.com/issues/884756
|
||
ФормаРезультата = ирОбщий.НоваяФормаРезультатаФоновогоЗаданияЛкс();
|
||
АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ФормаРезультата.УникальныйИдентификатор);
|
||
ПараметраЗадания = Новый Массив(1);
|
||
ПараметраЗадания[0] = АдресРезультата;
|
||
#Если Сервер И Не Сервер Тогда
|
||
ирОбщий.ТаблицаВсехТаблицБДВФонеЛкс();
|
||
#КонецЕсли
|
||
ирОбщий.ДобавитьТекущемуПользователюРолиИРЛкс();
|
||
ФоновоеЗадание = ФоновыеЗадания.Выполнить("ирОбщий.ТаблицаВсехТаблицБДВФонеЛкс", ПараметраЗадания,, "Расчет таблицы всех таблиц БД (ИР)");
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("ИдентификаторЗадания", ФоновоеЗадание.УникальныйИдентификатор);
|
||
Результат.Вставить("АдресРезультата", АдресРезультата);
|
||
Результат.Вставить("ФормаРезультата", ФормаРезультата);
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
// Кэширование в 100 раз ускоряет повторный поиск
|
||
Функция ОбъектМДПоПолномуИмениЛкс(ПолноеИмяМД) Экспорт
|
||
Если Найти(ПолноеИмяМД, ".") = 0 Тогда
|
||
// https://www.hostedredmine.com/issues/890489
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
Возврат Метаданные.НайтиПоПолномуИмени(ПолноеИмяМД);
|
||
КонецФункции
|
||
|
||
Функция ИмяТаблицыИзМетаданныхЛкс(Знач ОбъектИлиИмяМД, ЛиТаблицаИзменений = Ложь, ЛиДвиженияССубконтоДляРегистраБухгалтерии = Истина, ТолькоРазрешенные = Ложь) Экспорт
|
||
//Если ТипЗнч(ОбъектИлиИмяМД) <> Тип("Строка") Тогда
|
||
// ПолноеИмя = ОбъектИлиИмяМД.ПолноеИмя();
|
||
//Иначе
|
||
ПолноеИмя = ОбъектИлиИмяМД;
|
||
//КонецЕсли;
|
||
Фрагменты = ирОбщий.СтрРазделитьЛкс(ПолноеИмя);
|
||
Если ТолькоРазрешенные Тогда
|
||
Если ТипЗнч(ОбъектИлиИмяМД) = Тип("Строка") Тогда
|
||
Если Фрагменты.Количество() > 1 Тогда
|
||
ОбъектМД = ирКэш.ОбъектМДПоПолномуИмениЛкс(Фрагменты[0] + "." + Фрагменты[1]); // очень долгая операция, поэтому лучше не устанавливать флаг ТолькоРазрешенные
|
||
Иначе
|
||
//ОбъектМД = Метаданные[Фрагменты[0]];
|
||
ОбъектМД = Неопределено;
|
||
КонецЕсли;
|
||
Иначе
|
||
ОбъектМД = ОбъектИлиИмяМД;
|
||
КонецЕсли;
|
||
Если Истина
|
||
И ОбъектМД <> Неопределено
|
||
И Не ПравоДоступа("Чтение", ОбъектМД)
|
||
Тогда
|
||
Возврат Неопределено;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Истина
|
||
И Фрагменты[0] = ирОбщий.ПеревестиСтроку("Константа")
|
||
И Фрагменты.Количество() = 2
|
||
И Не ЛиТаблицаИзменений
|
||
Тогда
|
||
Если Не ирКэш.ИндивидуальныеТаблицыКонстантДоступныЛкс() Тогда
|
||
Фрагменты = ирОбщий.СтрРазделитьЛкс("Константы");
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Если Фрагменты.Количество() = 4 Тогда
|
||
Если Ложь
|
||
Или ирОбщий.СтрокиРавныЛкс(Фрагменты[2], ирОбщий.ПеревестиСтроку("ТабличнаяЧасть"))
|
||
Или ирОбщий.СтрокиРавныЛкс(Фрагменты[2], ирОбщий.ПеревестиСтроку("Перерасчет"))
|
||
//Или СтрокиРавныЛкс(Фрагменты[2], "Таблица") // Неправильная строка!
|
||
Тогда
|
||
Фрагменты.Удалить(2);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИмяТаблицы = ирОбщий.СтрСоединитьЛкс(Фрагменты, ".");
|
||
Если Истина
|
||
И ирОбщий.ЛиПолноеИмяРегистраБухгалтерииЛкс(ПолноеИмя)
|
||
И Не ЛиТаблицаИзменений
|
||
И ЛиДвиженияССубконтоДляРегистраБухгалтерии
|
||
Тогда
|
||
ИмяТаблицы = ИмяТаблицы + "." + ирОбщий.ПеревестиСтроку("ДвиженияССубконто");
|
||
КонецЕсли;
|
||
Если ЛиТаблицаИзменений Тогда
|
||
ИмяТаблицы = ИмяТаблицы + "." + ирОбщий.ПеревестиСтроку("Изменения");
|
||
КонецЕсли;
|
||
Возврат ИмяТаблицы;
|
||
КонецФункции
|
||
|
||
Функция ДоступныеОбщиеМодулиЛкс(Знач ЛиСерверныйКонтекст) Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ДоступныеОбщиеМодулиЛкс");
|
||
КлючНаборПараметров = "" + ЛиСерверныйКонтекст;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
СхемаКоллекции = Новый Структура;
|
||
Для Каждого МетаОбщийМодуль Из Метаданные.ОбщиеМодули Цикл
|
||
Если МетаОбщийМодуль.Глобальный Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
ОбщийМодуль = Неопределено;
|
||
Если ЛиСерверныйКонтекст Тогда
|
||
Если Не МетаОбщийМодуль.Сервер Тогда
|
||
Продолжить;
|
||
КонецЕсли;
|
||
//ИначеЕсли ирОбщий.СтрокиРавныЛкс(МетаОбщийМодуль.Имя, Слово) Тогда
|
||
// Попытка
|
||
// ОбщийМодуль = Вычислить(МетаОбщийМодуль.Имя);
|
||
// Исключение
|
||
// КонецПопытки;
|
||
Иначе
|
||
// В больших или содержащих ошибки конфигурациях компиляция неглобальных общих модулей неудобна
|
||
//Попытка
|
||
// ОбщийМодуль = Вычислить(МетаОбщийМодуль.Имя);
|
||
//Исключение
|
||
//КонецПопытки;
|
||
//КоллекцияЗначений.Вставить(МетаОбщийМодуль.Имя, ОбщийМодуль);
|
||
//
|
||
Попытка
|
||
Выполнить("Если Ложь Тогда " + МетаОбщийМодуль.Имя + ".Й() КонецЕсли");
|
||
Исключение
|
||
Продолжить;
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
СхемаКоллекции.Вставить(МетаОбщийМодуль.Имя, МетаОбщийМодуль);
|
||
КонецЦикла;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат СхемаКоллекции;
|
||
|
||
КонецФункции
|
||
|
||
// Добавляет новую строку в таблицу корневых объектов.
|
||
//
|
||
// Параметры:
|
||
// Таблица – ТаблицаЗначений;
|
||
// *Категория - Число, *0;
|
||
// Единственное – Строка;
|
||
// ИндексКартинкиЕдинственное – Число;
|
||
// Множественное – Строка;
|
||
// ИндексКартинкиМножественное – Число;
|
||
//
|
||
Процедура ДобавитьВТаблицуТиповМетаОбъектов(Таблица, Категория = 0, Единственное, ИндексКартинкиЕдинственное, Множественное, ИндексКартинкиМножественное)
|
||
|
||
НовыйКорневойОбъект = Таблица.Добавить();
|
||
НовыйКорневойОбъект.Категория = Категория;
|
||
НовыйКорневойОбъект.Единственное = Единственное;
|
||
НовыйКорневойОбъект.НЕдинственное = НРег(Единственное);
|
||
НовыйКорневойОбъект.ИндексКартинкиЕдинственное = ИндексКартинкиЕдинственное;
|
||
НовыйКорневойОбъект.Множественное = Множественное;
|
||
НовыйКорневойОбъект.НМножественное = НРег(Множественное);
|
||
НовыйКорневойОбъект.ИндексКартинкиМножественное = ИндексКартинкиМножественное;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Получает таблицу единственных и множественных чисел корневых типов.
|
||
//
|
||
// Параметры:
|
||
// *ЛиВключатьНехранимые - Булево, *Истина - включать ли нехранимые корневые типы;
|
||
// *ЛиВключатьДочерние - Булево, *Истина - включать ли дочерние корневые типы;
|
||
// *ЛиВключатьВнешние - Булево, *Истина - включать ли внешние корневые типы (внешние отчеты и обработки).
|
||
//
|
||
// Возвращаемое значение:
|
||
// Массив – имен хранимых типов
|
||
//
|
||
Функция ТипыМетаОбъектов(ЛиВключатьНехранимые = Истина, ЛиВключатьДочерние = Истина, ЛиВключатьВнешние = Истина) Экспорт
|
||
|
||
Таблица = Новый ТаблицаЗначений;
|
||
Таблица.Колонки.Добавить("Категория", Новый ОписаниеТипов("Число")); // 0 - корневой, 1 - нехранимый, 2 - дочерний, 3 - внешний
|
||
Таблица.Колонки.Добавить("Единственное");
|
||
Таблица.Колонки.Добавить("НЕдинственное");
|
||
Таблица.Колонки.Добавить("ИндексКартинкиЕдинственное");
|
||
Таблица.Колонки.Добавить("Множественное"); // Имя свойства, содержащего коллекцию этих объектов
|
||
Таблица.Колонки.Добавить("НМножественное");
|
||
Таблица.Колонки.Добавить("ИндексКартинкиМножественное");
|
||
|
||
// Корневые типы
|
||
Если ЛиВключатьНехранимые Тогда
|
||
// Главным образом эти строки нужны для связи с пиктограммами этих коллекций
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "WebСервис", , "WebСервисы", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "WSСсылка", , "WSСсылки", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ГруппаКоманд", , "ГруппыКоманд", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Интерфейс", , "Интерфейсы", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Нумератор", , "НумераторыДокументов", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Обработка", 19, "Обработки", 18);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ОбщаяКартинка", , "ОбщиеКартинки", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ОбщаяКоманда", , "ОбщиеКоманды", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ОбщаяФорма", , "ОбщиеФормы", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ОбщийМакет", , "ОбщиеМакеты", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ОбщийМодуль", , "ОбщиеМодули", );
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 802014 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ОбщийРеквизит", , "ОбщиеРеквизиты", );
|
||
КонецЕсли;
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803003 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ОпределяемыйТип", , "ОпределяемыеТипы", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "HTTPСервис", , "HTTPСервисы", );
|
||
КонецЕсли;
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803017 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "СервисИнтеграции", , "СервисыИнтеграции", );
|
||
КонецЕсли;
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803018 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Бот", , "Боты", );
|
||
КонецЕсли;
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Отчет", 24, "Отчеты", 23);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ПараметрСеанса", , "ПараметрыСеанса", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ПараметрФункциональныхОпций", , "ПараметрыФункциональныхОпций", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ПакетXDTO", , "ПакетыXDTO", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ПодпискаНаСобытие", , "ПодпискиНаСобытия", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Подсистема", , "Подсистемы", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "РегламентноеЗадание", , "РегламентныеЗадания", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Роль", , "Роли", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Стиль", , "Стили", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ФункциональнаяОпция", ,"ФункциональныеОпции", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ХранилищеНастроек", , "ХранилищаНастроек", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "ЭлементСтиля", , "ЭлементыСтиля", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 1, "Язык", , "Языки", );
|
||
КонецЕсли;
|
||
Если ирКэш.ДоступныВнешниеИсточникДанныхЛкс() Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ВнешнийИсточникДанных", 59, "ВнешниеИсточникиДанных", 58);
|
||
КонецЕсли;
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ПланОбмена", 52, "ПланыОбмена", 51);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Константа", 0, "Константы", 1);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Справочник", 3, "Справочники", 2);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Последовательность", 30, "Последовательности", 29);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Документ", 13, "Документы", 12);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Перечисление", 10, "Перечисления", 9);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ПланВидовХарактеристик", 38, "ПланыВидовХарактеристик", 37);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ПланСчетов", 40, "ПланыСчетов",39 );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ПланВидовРасчета", 48, "ПланыВидовРасчета", 47);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "РегистрСведений", 34, "РегистрыСведений", 33);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "РегистрНакопления", 32, "РегистрыНакопления", 31);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "РегистрБухгалтерии", 42, "РегистрыБухгалтерии", 41);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "РегистрРасчета", 50, "РегистрыРасчета", 49);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "БизнесПроцесс", 44, "БизнесПроцессы", 43);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Задача", 46, "Задачи", 45);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "Перерасчет", 57, "Перерасчеты", 57);
|
||
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "КритерийОтбора", , "КритерииОтбора", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 0, "ЖурналДокументов", 16, "ЖурналыДокументов", 15);
|
||
|
||
// Дочерние типы
|
||
Если ЛиВключатьДочерние Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Графа", , "Графы", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "ЗначениеПеречисления", , "ЗначенияПеречисления", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Измерение", , "Измерения", );
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803017 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "КаналСервисаИнтеграции", , "Каналы", );
|
||
КонецЕсли;
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Команда", , "Команды", );
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803003 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Куб", , "Кубы", );
|
||
КонецЕсли;
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Макет", , "Макеты", );
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803005 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "МетодHTTPСервиса", , "Методы", );
|
||
КонецЕсли;
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Операция", , "Операции", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Параметр", , "Параметры", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Поле", , "Поля", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "ПризнакУчетаПланаСчетов", , "ПризнакиУчета", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "ПризнакУчетаСубконтоПланаСчетов", , "ПризнакиУчетаСубконто", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Реквизит", , "Реквизиты", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "РеквизитАдресации", , "РеквизитыАдресации", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Ресурс", , "Ресурсы", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Таблица", , "Таблицы", );
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803003 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "ТаблицаИзмерения", , "ТаблицыИзмерений", );
|
||
КонецЕсли;
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "ТабличнаяЧасть", 55, "ТабличныеЧасти", 54);
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Форма", , "Формы", );
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803004 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "Функция", , "Функции", );
|
||
КонецЕсли;
|
||
Если ирКэш.НомерВерсииПлатформыЛкс() >= 803005 Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 2, "ШаблонURLHTTPСервиса", , "ШаблоныURL", );
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
// Внешние типы
|
||
Если ЛиВключатьВнешние Тогда
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 3, "ВнешняяОбработка", , "ВнешниеОбработки", );
|
||
ДобавитьВТаблицуТиповМетаОбъектов(Таблица, 3, "ВнешнийОтчет", , "ВнешниеОтчеты", );
|
||
КонецЕсли;
|
||
Таблица.Индексы.Добавить("Единственное, Категория");
|
||
Таблица.Индексы.Добавить("НЕдинственное");
|
||
Таблица.Индексы.Добавить("Множественное, Категория");
|
||
Таблица.Индексы.Добавить("НМножественное");
|
||
Возврат Таблица;
|
||
|
||
КонецФункции
|
||
|
||
Функция ФормаПустышкаЛкс() Экспорт
|
||
|
||
ирПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
ирПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
Форма = ирПлатформа.ФормаПустышка;
|
||
Если Форма = Неопределено Тогда
|
||
ирПлатформа.ФормаПустышка = ирПлатформа.ПолучитьФорму("Пустышка");
|
||
Форма = ирПлатформа.ФормаПустышка;
|
||
КонецЕсли;
|
||
Возврат Форма;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЗначенияДляПроверкиИзмененияЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ЗначенияДляПроверкиИзмененияЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Результат = Новый Структура;
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ФункциональныеОпцииОбъектовМДЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("ФункциональныеОпцииОбъектовМДЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Результат = Новый ТаблицаЗначений;
|
||
Результат.Колонки.Добавить("ИмяОбъектаМД");
|
||
Результат.Колонки.Добавить("ИмяОпции");
|
||
Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл
|
||
Для Каждого ЭлементСостава Из ФункциональнаяОпция.Состав Цикл
|
||
Если ЭлементСостава.Объект = Неопределено Тогда
|
||
// Битая ссылка
|
||
Продолжить;
|
||
КонецЕсли;
|
||
СтрокаТЗ = Результат.Добавить();
|
||
СтрокаТЗ.ИмяОбъектаМД = ЭлементСостава.Объект.ПолноеИмя();
|
||
СтрокаТЗ.ИмяОпции = ФункциональнаяОпция.Имя;
|
||
КонецЦикла;
|
||
КонецЦикла;
|
||
Результат.Индексы.Добавить("ИмяОбъектаМД");
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция СкриптМенеджерЛкс() Экспорт
|
||
|
||
СкриптМенеджер = Новый COMОбъект("MSScriptControl.ScriptControl");
|
||
Возврат СкриптМенеджер;
|
||
|
||
КонецФункции
|
||
|
||
Функция КоманднаяСтрокаТекущегоПроцессаОСЛкс() Экспорт
|
||
Если Не ирКэш.ЛиПлатформаWindowsЛкс() Тогда
|
||
КомандаЗапуска = Новый Массив;
|
||
КомандаЗапуска.Добавить("cat");
|
||
КомандаЗапуска.Добавить("/proc/$PPID/cmdline");
|
||
Результат = ирОбщий.ВыполнитьКомандуОСЛкс(КомандаЗапуска);
|
||
// Пример результата
|
||
// /opt/1cv8/x86_64/8.3.18.1363/rphost -range 1560:1591 -reghost ИмяХоста -regport 1541 -pid 466a359c-54bd-4d6c-9198-ea9f92a74fa2 -debug -tcp
|
||
Иначе
|
||
мПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
ИдентификаторПроцессаОС = мПлатформа.ИдентификаторПроцессаОС();
|
||
ТекущийПроцесс = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2:Win32_Process.Handle='" + XMLСтрока(ИдентификаторПроцессаОС) + "'");
|
||
Результат = ТекущийПроцесс.CommandLine;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
Функция ЭтоУчебнаяПлатформаЛкс() Экспорт
|
||
|
||
Если Не ирКэш.ЛиФайловаяБазаЛкс() Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
ВременныйФайл = ПолучитьИмяВременногоФайла("mxl");
|
||
ТабДок = Новый ТабличныйДокумент;
|
||
Попытка
|
||
ТабДок.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.MXL7); // В учебной версии платформы это запрещено https://www.hostedredmine.com/issues/923942
|
||
Исключение
|
||
// Сработает при отсутствии права "Вывод" (портативный вариант) и в учебной платформе ("Ограничение используемой лицензии")
|
||
ОписаниеОшибки = ОписаниеОшибки();
|
||
Возврат Истина;
|
||
КонецПопытки;
|
||
УдалитьФайлы(ВременныйФайл);
|
||
Возврат Ложь;
|
||
|
||
КонецФункции
|
||
|
||
Функция СоставОбщегоРеквизитаЛкс(Знач Имя) Экспорт
|
||
|
||
Состав = Новый Соответствие;
|
||
Для Каждого ЭлементСостава Из Метаданные.ОбщиеРеквизиты[Имя].Состав Цикл
|
||
Состав.Вставить(ЭлементСостава.Метаданные.ПолноеИмя(), ЭлементСостава);
|
||
КонецЦикла;
|
||
Возврат Состав;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиДоступныДопРеквизитыБСПЛкс() Экспорт
|
||
Результат = Истина
|
||
И Не ирКэш.ЛиПортативныйРежимЛкс()
|
||
И Метаданные.ОбщиеМодули.Найти("УправлениеСвойствами") <> Неопределено
|
||
И ирКэш.НомерВерсииБСПЛкс() >= 204;
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
#Если Клиент Тогда
|
||
|
||
Функция ОткрытыеФормыЛкс() Экспорт
|
||
|
||
ирПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
ирПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
Результат = ирПлатформа.ОткрытыеФормы;
|
||
Если Результат = Неопределено Тогда
|
||
Результат = Новый Массив;
|
||
ирПлатформа.ОткрытыеФормы = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ПерехватКлавиатурыЛкс() Экспорт
|
||
|
||
Если Не ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
Попытка
|
||
Результат = Вычислить("ирПерехватКлавиатуры");
|
||
Исключение
|
||
КонецПопытки;
|
||
КонецЕсли;
|
||
Если Результат = Неопределено Тогда
|
||
Результат = ирКэш.Получить().ПодключитьПерехватКлавиатуры(); // Тут будет обращение к ирОбщий
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиМодальностьЗапрещенаЛкс() Экспорт
|
||
|
||
Результат = Ложь;
|
||
Список = Новый СписокЗначений;
|
||
Попытка
|
||
Список.ВыбратьЭлемент();
|
||
Исключение
|
||
Результат = Истина;
|
||
КонецПопытки;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Кэшируем форму, т.к. иначе при повторных вызовах в одном потоке кода каждый раз будет возвращаться новый экземпляр
|
||
Функция ОкноСообщенийЛкс(МодальнаяГруппа = 0) Экспорт
|
||
|
||
Если МодальнаяГруппа = 0 Тогда
|
||
#Если ТолстыйКлиентУправляемоеПриложение Тогда
|
||
//Форма = ПолучитьФорму("Обработка.ирПлатформа.Форма.ВременноеОкноСообщенийУпр",,, МодальнаяГруппа); // Так будет ошибка компиляции в портативном варианте в файловой базе
|
||
Форма = ирОбщий.ПолучитьФормуЛкс("Обработка.ирПлатформа.Форма.ВременноеОкноСообщенийУпр",,, МодальнаяГруппа);
|
||
#КонецЕсли
|
||
Иначе
|
||
мПлатформа = ирКэш.Получить();
|
||
#Если Сервер И Не Сервер Тогда
|
||
мПлатформа = Обработки.ирПлатформа.Создать();
|
||
#КонецЕсли
|
||
Форма = мПлатформа.ПолучитьФорму("СообщенияМодальнойГруппы",, МодальнаяГруппа);
|
||
КонецЕсли;
|
||
Возврат Форма;
|
||
|
||
КонецФункции
|
||
|
||
Функция ФормаСравнителяТекстовЛкс() Экспорт
|
||
Результат = ирОбщий.НоваяФормаСравнителяТекстовЛкс();
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
Функция ИмяШрифтаРедактораМодуляКонфигуратораЛкс() Экспорт
|
||
|
||
НастройкиКонфигуратора = ирОбщий.ПрочитатьТекстИзФайлаЛкс(ирКэш.КаталогИзданияПлатформыВПрофилеЛкс(Ложь) + ирОбщий.РазделительПутиКФайлуЛкс() + "1Cv8cmn.pfl");
|
||
ИмяШрифта = ирОбщий.СтрокаМеждуМаркерамиЛкс(НастройкиКонфигуратора, "9cd510c8-abfc-11d4-9434-004095e12fc7", """SearchResultBackground""", Ложь);
|
||
ИмяШрифта = ирОбщий.СтрокаМеждуМаркерамиЛкс(ИмяШрифта, """", """", Ложь);
|
||
Возврат ИмяШрифта;
|
||
|
||
КонецФункции
|
||
|
||
#КонецЕсли
|
||
|
||
#КонецЕсли
|
||
|
||
Функция ЛиПортативныйРежимЛкс() Экспорт
|
||
|
||
//Попытка
|
||
// Пустышка = ирПортативный.мВнешниеМодули;
|
||
// Результат = Истина;
|
||
//Исключение
|
||
// Результат = Ложь;
|
||
//КонецПопытки;
|
||
Результат = ТипЗнч(ирПортативный) <> Тип("ОбщийМодуль");
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция КодыКлавишЛкс() Экспорт
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("КодыКлавишЛкс");
|
||
КлючНаборПараметров = "";
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Результат = Новый Соответствие();
|
||
// Порядок модифицкаторов CTRL+ALT+SHIFT
|
||
Результат.Вставить("ALT+SHIFT+V", "17494");
|
||
Результат.Вставить("CTRL+`", "04288");
|
||
Результат.Вставить("CTRL+A", "04161");
|
||
Результат.Вставить("CTRL+C", "04163");
|
||
Результат.Вставить("CTRL+V", "04182");
|
||
Результат.Вставить("Space", "00032");
|
||
Результат.Вставить("CTRL+SHIFT+Space", "20512");
|
||
Результат.Вставить("CTRL+ALT+Space", "05152");
|
||
Результат.Вставить("CTRL+Space", "20512");
|
||
Результат.Вставить("ALT+Up", "01318");
|
||
Результат.Вставить("ALT+Down", "01320");
|
||
Результат.Вставить("Esc", "00027");
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиСеансТолстогоКлиентаЛкс() Экспорт
|
||
|
||
#Если ТолстыйКлиентОбычноеПриложение Или ТолстыйКлиентУправляемоеПриложение Тогда
|
||
Результат = Истина;
|
||
#ИначеЕсли Сервер Тогда
|
||
ТекущийСеанс = ирКэш.ТекущийСеансЛкс();
|
||
Результат = ирОбщий.СтрокиРавныЛкс(ТекущийСеанс.ИмяПриложения, "1CV8");
|
||
#Иначе
|
||
Результат = Ложь;
|
||
#КонецЕсли
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиСеансТонкогоКлиентаЛкс() Экспорт
|
||
#Если ТонкийКлиент Тогда
|
||
Результат = Истина;
|
||
#ИначеЕсли Сервер Тогда
|
||
ТекущийСеанс = ирКэш.ТекущийСеансЛкс();
|
||
Результат = ирОбщий.СтрокиРавныЛкс(ТекущийСеанс.ИмяПриложения, "1CV8C");
|
||
#Иначе
|
||
Результат = Ложь;
|
||
#КонецЕсли
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// В параметрах конфигуратора "Модули/Проверка" отсутствует флажок "Толстый клиент (УП)". Поэтому проверка компиляции не выполняется.
|
||
// Поэтому вместо инструкций препроцессора по возможности надо использовать это проверку.
|
||
// https://partners.v8.1c.ru/forum/topic/1996623
|
||
Функция ЛиСеансТолстогоКлиентаУПЛкс() Экспорт
|
||
#Если ТолстыйКлиентУправляемоеПриложение Тогда
|
||
Результат = Истина;
|
||
#Иначе
|
||
Результат = Ложь;
|
||
#КонецЕсли
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиПлатформаLinuxЛкс() Экспорт
|
||
|
||
//Возврат Истина; // Для отладки
|
||
СисИнфо = Новый СистемнаяИнформация;
|
||
Результат = Ложь
|
||
Или СисИнфо.ТипПлатформы = ТипПлатформы.Linux_x86
|
||
Или СисИнфо.ТипПлатформы = ТипПлатформы.Linux_x86_64;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиПлатформаWindowsЛкс() Экспорт
|
||
|
||
//Возврат Ложь; // Для отладки
|
||
СисИнфо = Новый СистемнаяИнформация;
|
||
Результат = Ложь
|
||
Или СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86
|
||
Или СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиДоступныРегВыраженияЛкс() Экспорт
|
||
|
||
Результат = Ложь
|
||
Или ирКэш.НомерВерсииПлатформыЛкс() >= 803006
|
||
#Если Клиент Тогда
|
||
Или ирКэш.ЛиПлатформаWindowsЛкс()
|
||
#КонецЕсли
|
||
;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиДоступенРедакторМонакоЛкс() Экспорт
|
||
|
||
Возврат Истина
|
||
И ирКэш.ЛиПлатформаWindowsЛкс()
|
||
И (Ложь
|
||
Или ирКэш.НомерВерсииПлатформыЛкс() >= 803018
|
||
Или (Истина
|
||
И ирКэш.НомерВерсииПлатформыЛкс() >= 803015
|
||
И ирОбщий.ЛиПерехватКлавиатурногоВводаЛкс()))
|
||
;
|
||
|
||
КонецФункции
|
||
|
||
// Метка_9в6676вап6438о
|
||
Функция Это64битныйПроцессЛкс() Экспорт
|
||
|
||
СисИнфо = Новый СистемнаяИнформация;
|
||
Результат = Ложь
|
||
Или СисИнфо.ТипПлатформы = ТипПлатформы.Windows_x86_64
|
||
Или СисИнфо.ТипПлатформы = ТипПлатформы.Linux_x86_64
|
||
Или ирКэш.НомерВерсииПлатформыЛкс() > 803001 И СисИнфо.ТипПлатформы = ТипПлатформы.MacOS_x86_64; // Появилось в 8.3
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ИмяКолонкиНомерСтрокиЛкс() Экспорт
|
||
|
||
ИмяКолонкиНомерСтроки = "НомерСтроки" + ирОбщий.СуффиксСлужебногоСвойстваЛкс();
|
||
Возврат ИмяКолонкиНомерСтроки;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЛиФайловаяБазаЛкс() Экспорт
|
||
|
||
ФайловыйКаталог = НСтр(СтрокаСоединенияИнформационнойБазы(), "File");
|
||
ЭтоФайловаяБаза = Не ПустаяСтрока(ФайловыйКаталог);
|
||
Возврат ЭтоФайловаяБаза;
|
||
|
||
КонецФункции
|
||
|
||
Функция СтрокаСоединенияСервераЛкс() Экспорт
|
||
|
||
Результат = ирСервер.СтрокаСоединенияСервераЛкс();
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция КартинкаПоИмениЛкс(Имя) Экспорт
|
||
|
||
#Если Сервер И Не Сервер Тогда
|
||
ирПортативный = Обработки.ирПортативный.Создать();
|
||
#КонецЕсли
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции = ирПортативный.КэшФункцииЛкс("КартинкаПоИмениЛкс");
|
||
КлючНаборПараметров = "" + Имя;
|
||
Результат = КэшФункции[КлючНаборПараметров];
|
||
Если Результат <> Неопределено Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Попытка
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
Результат = ирПортативный.КартинкаПоИмениЛкс(Имя);
|
||
Иначе
|
||
Результат = БиблиотекаКартинок[Имя];
|
||
КонецЕсли;
|
||
Исключение
|
||
ОписаниеОшибки = ОписаниеОшибки(); // Для отладки
|
||
Результат = Новый Картинка;
|
||
КонецПопытки;
|
||
|
||
Если ирКэш.ЛиПортативныйРежимЛкс() Тогда
|
||
КэшФункции[КлючНаборПараметров] = Результат;
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция ЭтоТолстыйКлиентЛкс() Экспорт
|
||
|
||
#Если ТонкийКлиент Или ВебКлиент Или МобильныйКлиент Тогда
|
||
Результат = Ложь;
|
||
#Иначе
|
||
Результат = Истина;
|
||
#КонецЕсли
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|