From 9ba5dd2c8bc955cc45957835482ade6c98bdadba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=B4=D0=BC=D0=B8=D0=BD=D0=B8=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80?= <Администратор@localhost> Date: Mon, 25 Oct 2021 08:22:12 +0300 Subject: [PATCH] . --- src/CommonModules/ирОбщий/Ext/Module.bsl | 334 +++++++++--------- src/ConfigDumpInfo.xml | 8 +- src/Configuration.xml | 2 +- .../ИнструментыРазработчикаTormozit.xml | 4 +- src/VERSION | 2 +- 5 files changed, 175 insertions(+), 175 deletions(-) diff --git a/src/CommonModules/ирОбщий/Ext/Module.bsl b/src/CommonModules/ирОбщий/Ext/Module.bsl index c813a82ca..42ba27a82 100644 --- a/src/CommonModules/ирОбщий/Ext/Module.bsl +++ b/src/CommonModules/ирОбщий/Ext/Module.bsl @@ -9093,6 +9093,173 @@ КонецФункции +Функция ПреобразоватьЗначениеИзSDBLЛкс(ЗначениеSDBL, АдресЧужойСхемыБД = "") Экспорт + + Если СтрДлина(ЗначениеSDBL) > 100 Тогда + Возврат Неопределено; + КонецЕсли; + Фрагменты = СтрРазделитьЛкс(ЗначениеSDBL, ":"); + Если Фрагменты.Количество() <> 2 Тогда + Возврат Неопределено; + КонецЕсли; + РегВыражение = ирКэш.ВычислительРегВыраженийЛкс(); + #Если Сервер И Не Сервер Тогда + РегВыражение = обработки.ирОболочкаРегВыражение.Создать(); + #КонецЕсли + РегВыражение.Pattern = "\((\d+):([\dA-F]{32})\)"; + Вхождения = РегВыражение.НайтиВхождения(ЗначениеSDBL); + Если Вхождения.Количество() = 0 Тогда + Возврат Неопределено; + КонецЕсли; + Вхождение = Вхождения[0]; + #Если Сервер И Не Сервер Тогда + Вхождение = Обработки.ирОболочкаРегВхождение.Создать(); + #КонецЕсли + СтрокаНомераТаблицы = Вхождение.SubMatches(0); + ИдентификаторОбъекта = Вхождение.SubMatches(1); + ПолноеИмяМД = МетаданныеПоНомеруСсылочнойТаблицыЛкс(СтрокаНомераТаблицы, АдресЧужойСхемыБД); + ОбъектМетаданныхНайден = Истина; + Если Не ЗначениеЗаполнено(ПолноеИмяМД) Тогда + ПолноеИмяМД = "НеизвестныйСсылочныйТип" + СтрокаНомераТаблицы; + ОбъектМетаданныхНайден = Ложь; + КонецЕсли; + Результат = ПолноеИмяМД + "._" + ИдентификаторОбъекта; + Если ОбъектМетаданныхНайден И Не ЗначениеЗаполнено(АдресЧужойСхемыБД) Тогда + //СтруктураБД = ирКэш.СтруктураХраненияБДЛкс(Ложь); + // Этот способ не работал для перечислений + //УникальныйИдентификатор = Новый УникальныйИдентификатор(ПолучитьГУИДПрямойИзИнверсногоЛкс(Фрагменты[1])); + //Массив = Новый Массив(); + //Если ЗначениеЗаполнено(УникальныйИдентификатор) Тогда + // Массив.Добавить(УникальныйИдентификатор); + //КонецЕсли; + //Значение = Новый (Тип(ПолучитьИмяТипаСсылкиТаблицыБДЛкс(ПолноеИмяМД)), Массив); + // + ПустаяСсылка = Новый (Тип(ИмяТипаИзПолногоИмениТаблицыБДЛкс(ПолноеИмяМД))); + ПустаяСсылкаВнутр = ЗначениеВСтрокуВнутр(ПустаяСсылка); + ФрагментыПустойСсылки = СтрРазделитьЛкс(ПустаяСсылкаВнутр, ":"); + СсылкаВнутр = ФрагментыПустойСсылки[0] + ":" + ИдентификаторОбъекта + "}"; + Попытка + Результат = ЗначениеИзСтрокиВнутр(СсылкаВнутр); + Исключение + // Например, если Фрагменты[1] содержит неверное число символов + Пустышка = 0; + КонецПопытки; + КонецЕсли; + Возврат Результат; + +КонецФункции + +Функция НавигационнаяСсылкаВЗначениеЛкс(Знач ТекущеееЗначение) Экспорт + + //e1cib/data/Справочник.ирОбъектыДляОтладки?ref=aa3a0009dd50223411e1c2907cccb6b7 + Маркер = "e1cib/data/"; + ТекстСсылки = ПоследнийФрагментЛкс(ТекущеееЗначение, Маркер, Ложь); + Если ЗначениеЗаполнено(ТекстСсылки) Тогда + Разделитель = "?ref="; + Идентификатор = ПоследнийФрагментЛкс(ТекстСсылки, Разделитель); + Идентификатор = ПолучитьГУИДПрямойИзИнверсногоЛкс(Идентификатор); + ПолноеИмяМД = ПервыйФрагментЛкс(ТекстСсылки, Разделитель); + ОбъектМД = ОбъектМДПоПолномуИмениЛкс(ПолноеИмяМД); + Если ОбъектМД = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + МенеджерМД = Новый (ИмяТипаИзПолногоИмениМДЛкс(ПолноеИмяМД, "Менеджер")); + ЗначениеСсылки = МенеджерМД.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор)); + КонецЕсли; + Возврат ЗначениеСсылки; + +КонецФункции + +Функция МетаданныеПоНомеруСсылочнойТаблицыЛкс(СтрокаНомерТаблицы, АдресЧужойСхемыБД = "") Экспорт + + СтруктураБД = ирКэш.СтруктураХраненияБДЛкс(, Ложь, АдресЧужойСхемыБД); + #Если Сервер И Не Сервер Тогда + СтруктураБД = Новый ТаблицаЗначений; + #КонецЕсли + СловарьШаблоновМетаданных = ирКэш.ПолучитьСловарьШаблоновМетаданныхЛкс(, АдресЧужойСхемыБД); + Для Каждого СтрокаШаблона Из СловарьШаблоновМетаданных.НайтиСтроки(Новый Структура("КоличествоПараметров", 1)) Цикл + ИмяКандидат = СтрЗаменить(СтрокаШаблона.ПозиционныйШаблон, "1", СтрокаНомерТаблицы); + СтрокаСтруктуры = СтруктураБД.Найти(ИмяКандидат, "КраткоеИмяТаблицыХранения"); + Если СтрокаСтруктуры <> Неопределено Тогда + Возврат СтрокаСтруктуры.Метаданные; + КонецЕсли; + КонецЦикла; + Возврат Неопределено; + +КонецФункции + +Функция ПреобразоватьПредставлениеВСсылкуЛкс(Знач МенеджерИлиОбъектМД, Знач Текст, Знач ПроверятьПредставлениеТипаДокумента = Ложь, КэшПоиска = Неопределено) Экспорт + + Если ТипЗнч(МенеджерИлиОбъектМД) = Тип("ОбъектМетаданных") Тогда + Менеджер = ПолучитьМенеджерЛкс(МенеджерИлиОбъектМД); + Иначе + Менеджер = МенеджерИлиОбъектМД; + КонецЕсли; + Текст = СокрЛП(Текст); + Если Не ПроверятьПредставлениеТипаДокумента Тогда + УникальныйИдентификатор = ирКэш.Получить().УникальныйИдентификаторИзСтроки(Текст); + Если УникальныйИдентификатор <> Неопределено Тогда + Значение = Менеджер.ПолучитьСсылку(УникальныйИдентификатор); + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(Значение) Тогда + ОбъектМД = Метаданные.НайтиПоТипу(ТипЗнч(Менеджер)); + RegExp = ирКэш.Получить().RegExp; + RegExp.Pattern = "([^ ]+)\ от\ (\d+\.\d+\.\d+\ \d+\:\d+\:\d+)$"; // станадартное представление документа + Результаты = RegExp.НайтиВхождения(Текст); + Если Результаты.Количество() > 0 Тогда + Номер = Результаты[0].SubMatches(0); + Дата = Результаты[0].SubMatches(1); + Попытка + Дата = Дата(Дата); + Исключение + Дата = Неопределено; + КонецПопытки; + ПредставлениеТипа = ОбъектМД.ПредставлениеОбъекта; + Если Не ЗначениеЗаполнено(ПредставлениеТипа) Тогда + ПредставлениеТипа = ОбъектМД.Представление(); + КонецЕсли; + Если Истина + И Дата <> Неопределено + И (Ложь + Или Не ПроверятьПредставлениеТипаДокумента + Или СтрокиРавныЛкс(Лев(Текст, Результаты[0].FirstIndex), ПредставлениеТипа + " ")) + Тогда + КлючКэша = ОбъектМД.ПолноеИмя() + "." + Текст; + Если КэшПоиска <> Неопределено Тогда + Значение = КэшПоиска[КлючКэша]; + КонецЕсли; + Если Значение = Неопределено Тогда + Запрос = Новый Запрос; + Запрос.Текст = " + |ВЫБРАТЬ + | _Т.Ссылка + |ИЗ + | " + ОбъектМД.ПолноеИмя() + " КАК _Т + |ГДЕ + | _Т.Номер = &Номер + | И _Т.Дата = &Дата + |"; + Запрос.УстановитьПараметр("Номер", Номер); + Запрос.УстановитьПараметр("Дата", Дата); + Значение = Новый СписокЗначений; + Значение.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0)); + Если Значение.Количество() > 0 Тогда + Для Каждого ЭлементСписка Из Значение Цикл + ЭлементСписка.Представление = "" + ЭлементСписка.Значение + " (" + ЭлементСписка.Значение.УникальныйИдентификатор() + ")"; + КонецЦикла; + КонецЕсли; + Если КэшПоиска <> Неопределено Тогда + КэшПоиска[КлючКэша] = Значение; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + Возврат Значение; + +КонецФункции + #Если Клиент Тогда Функция ИмяФормыИзСтрокиИнструментаЛкс(Знач СтрокаИнструмента) Экспорт @@ -20690,80 +20857,6 @@ ПолеТекста.УстановитьГраницыВыделения(НачальнаяСтрока, НачальнаяКолонка, КонечнаяСтрока, КонечнаяКолонка); КонецПроцедуры - -Функция ПреобразоватьЗначениеИзSDBLЛкс(ЗначениеSDBL, АдресЧужойСхемыБД = "") Экспорт - - Если СтрДлина(ЗначениеSDBL) > 100 Тогда - Возврат Неопределено; - КонецЕсли; - Фрагменты = СтрРазделитьЛкс(ЗначениеSDBL, ":"); - Если Фрагменты.Количество() <> 2 Тогда - Возврат Неопределено; - КонецЕсли; - РегВыражение = ирКэш.ВычислительРегВыраженийЛкс(); - #Если Сервер И Не Сервер Тогда - РегВыражение = обработки.ирОболочкаРегВыражение.Создать(); - #КонецЕсли - РегВыражение.Pattern = "\((\d+):([\dA-F]{32})\)"; - Вхождения = РегВыражение.НайтиВхождения(ЗначениеSDBL); - Если Вхождения.Количество() = 0 Тогда - Возврат Неопределено; - КонецЕсли; - Вхождение = Вхождения[0]; - #Если Сервер И Не Сервер Тогда - Вхождение = Обработки.ирОболочкаРегВхождение.Создать(); - #КонецЕсли - СтрокаНомераТаблицы = Вхождение.SubMatches(0); - ИдентификаторОбъекта = Вхождение.SubMatches(1); - ПолноеИмяМД = МетаданныеПоНомеруСсылочнойТаблицыЛкс(СтрокаНомераТаблицы, АдресЧужойСхемыБД); - ОбъектМетаданныхНайден = Истина; - Если Не ЗначениеЗаполнено(ПолноеИмяМД) Тогда - ПолноеИмяМД = "НеизвестныйСсылочныйТип" + СтрокаНомераТаблицы; - ОбъектМетаданныхНайден = Ложь; - КонецЕсли; - Результат = ПолноеИмяМД + "._" + ИдентификаторОбъекта; - Если ОбъектМетаданныхНайден И Не ЗначениеЗаполнено(АдресЧужойСхемыБД) Тогда - //СтруктураБД = ирКэш.СтруктураХраненияБДЛкс(Ложь); - // Этот способ не работал для перечислений - //УникальныйИдентификатор = Новый УникальныйИдентификатор(ПолучитьГУИДПрямойИзИнверсногоЛкс(Фрагменты[1])); - //Массив = Новый Массив(); - //Если ЗначениеЗаполнено(УникальныйИдентификатор) Тогда - // Массив.Добавить(УникальныйИдентификатор); - //КонецЕсли; - //Значение = Новый (Тип(ПолучитьИмяТипаСсылкиТаблицыБДЛкс(ПолноеИмяМД)), Массив); - // - ПустаяСсылка = Новый (Тип(ИмяТипаИзПолногоИмениТаблицыБДЛкс(ПолноеИмяМД))); - ПустаяСсылкаВнутр = ЗначениеВСтрокуВнутр(ПустаяСсылка); - ФрагментыПустойСсылки = СтрРазделитьЛкс(ПустаяСсылкаВнутр, ":"); - СсылкаВнутр = ФрагментыПустойСсылки[0] + ":" + ИдентификаторОбъекта + "}"; - Попытка - Результат = ЗначениеИзСтрокиВнутр(СсылкаВнутр); - Исключение - // Например, если Фрагменты[1] содержит неверное число символов - Пустышка = 0; - КонецПопытки; - КонецЕсли; - Возврат Результат; - -КонецФункции - -Функция МетаданныеПоНомеруСсылочнойТаблицыЛкс(СтрокаНомерТаблицы, АдресЧужойСхемыБД = "") Экспорт - - СтруктураБД = ирКэш.СтруктураХраненияБДЛкс(, Ложь, АдресЧужойСхемыБД); - #Если Сервер И Не Сервер Тогда - СтруктураБД = Новый ТаблицаЗначений; - #КонецЕсли - СловарьШаблоновМетаданных = ирКэш.ПолучитьСловарьШаблоновМетаданныхЛкс(, АдресЧужойСхемыБД); - Для Каждого СтрокаШаблона Из СловарьШаблоновМетаданных.НайтиСтроки(Новый Структура("КоличествоПараметров", 1)) Цикл - ИмяКандидат = СтрЗаменить(СтрокаШаблона.ПозиционныйШаблон, "1", СтрокаНомерТаблицы); - СтрокаСтруктуры = СтруктураБД.Найти(ИмяКандидат, "КраткоеИмяТаблицыХранения"); - Если СтрокаСтруктуры <> Неопределено Тогда - Возврат СтрокаСтруктуры.Метаданные; - КонецЕсли; - КонецЦикла; - Возврат Неопределено; - -КонецФункции Процедура ОтладитьОтложенныйОбъектЛкс(Знач СсылкаИлиИмяФайла = Неопределено, УдалитьОбъектПослеУспешногоОткрытия = Ложь) Экспорт @@ -21235,99 +21328,6 @@ КонецПроцедуры -Функция НавигационнаяСсылкаВЗначениеЛкс(Знач ТекущеееЗначение) Экспорт - - //e1cib/data/Справочник.ирОбъектыДляОтладки?ref=aa3a0009dd50223411e1c2907cccb6b7 - Маркер = "e1cib/data/"; - ТекстСсылки = ПоследнийФрагментЛкс(ТекущеееЗначение, Маркер, Ложь); - Если ЗначениеЗаполнено(ТекстСсылки) Тогда - Разделитель = "?ref="; - Идентификатор = ПоследнийФрагментЛкс(ТекстСсылки, Разделитель); - Идентификатор = ПолучитьГУИДПрямойИзИнверсногоЛкс(Идентификатор); - ПолноеИмяМД = ПервыйФрагментЛкс(ТекстСсылки, Разделитель); - ОбъектМД = ОбъектМДПоПолномуИмениЛкс(ПолноеИмяМД); - Если ОбъектМД = Неопределено Тогда - Возврат Неопределено; - КонецЕсли; - МенеджерМД = Новый (ИмяТипаИзПолногоИмениМДЛкс(ПолноеИмяМД, "Менеджер")); - ЗначениеСсылки = МенеджерМД.ПолучитьСсылку(Новый УникальныйИдентификатор(Идентификатор)); - КонецЕсли; - Возврат ЗначениеСсылки; - -КонецФункции - -Функция ПреобразоватьПредставлениеВСсылкуЛкс(Знач МенеджерИлиОбъектМД, Знач Текст, Знач ПроверятьПредставлениеТипаДокумента = Ложь, КэшПоиска = Неопределено) Экспорт - - Если ТипЗнч(МенеджерИлиОбъектМД) = Тип("ОбъектМетаданных") Тогда - Менеджер = ПолучитьМенеджерЛкс(МенеджерИлиОбъектМД); - Иначе - Менеджер = МенеджерИлиОбъектМД; - КонецЕсли; - Текст = СокрЛП(Текст); - Если Не ПроверятьПредставлениеТипаДокумента Тогда - УникальныйИдентификатор = ирКэш.Получить().УникальныйИдентификаторИзСтроки(Текст); - Если УникальныйИдентификатор <> Неопределено Тогда - Значение = Менеджер.ПолучитьСсылку(УникальныйИдентификатор); - КонецЕсли; - КонецЕсли; - Если Не ЗначениеЗаполнено(Значение) Тогда - ОбъектМД = Метаданные.НайтиПоТипу(ТипЗнч(Менеджер)); - RegExp = ирКэш.Получить().RegExp; - RegExp.Pattern = "([^ ]+)\ от\ (\d+\.\d+\.\d+\ \d+\:\d+\:\d+)$"; // станадартное представление документа - Результаты = RegExp.НайтиВхождения(Текст); - Если Результаты.Количество() > 0 Тогда - Номер = Результаты[0].SubMatches(0); - Дата = Результаты[0].SubMatches(1); - Попытка - Дата = Дата(Дата); - Исключение - Дата = Неопределено; - КонецПопытки; - ПредставлениеТипа = ОбъектМД.ПредставлениеОбъекта; - Если Не ЗначениеЗаполнено(ПредставлениеТипа) Тогда - ПредставлениеТипа = ОбъектМД.Представление(); - КонецЕсли; - Если Истина - И Дата <> Неопределено - И (Ложь - Или Не ПроверятьПредставлениеТипаДокумента - Или СтрокиРавныЛкс(Лев(Текст, Результаты[0].FirstIndex), ПредставлениеТипа + " ")) - Тогда - КлючКэша = ОбъектМД.ПолноеИмя() + "." + Текст; - Если КэшПоиска <> Неопределено Тогда - Значение = КэшПоиска[КлючКэша]; - КонецЕсли; - Если Значение = Неопределено Тогда - Запрос = Новый Запрос; - Запрос.Текст = " - |ВЫБРАТЬ - | _Т.Ссылка - |ИЗ - | " + ОбъектМД.ПолноеИмя() + " КАК _Т - |ГДЕ - | _Т.Номер = &Номер - | И _Т.Дата = &Дата - |"; - Запрос.УстановитьПараметр("Номер", Номер); - Запрос.УстановитьПараметр("Дата", Дата); - Значение = Новый СписокЗначений; - Значение.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0)); - Если Значение.Количество() > 0 Тогда - Для Каждого ЭлементСписка Из Значение Цикл - ЭлементСписка.Представление = "" + ЭлементСписка.Значение + " (" + ЭлементСписка.Значение.УникальныйИдентификатор() + ")"; - КонецЦикла; - КонецЕсли; - Если КэшПоиска <> Неопределено Тогда - КэшПоиска[КлючКэша] = Значение; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - Возврат Значение; - -КонецФункции - // Параметры: // РедактированиеРазрешено - Булево - для открытия ссылки надо установить Ложь // ЭлементУправления - Неопределено - значение этого элемента управления открываем, при открытии значения из ячейки табличного поля должно быть Неопределено diff --git a/src/ConfigDumpInfo.xml b/src/ConfigDumpInfo.xml index a0bd1b249..397b66fd5 100644 --- a/src/ConfigDumpInfo.xml +++ b/src/ConfigDumpInfo.xml @@ -78,8 +78,8 @@ - - + + @@ -540,7 +540,7 @@ - + @@ -3154,7 +3154,7 @@ - + diff --git a/src/Configuration.xml b/src/Configuration.xml index b5f9dca99..e805b651d 100644 --- a/src/Configuration.xml +++ b/src/Configuration.xml @@ -51,7 +51,7 @@ Role.ирРазработчик Tormozit - 6.14.1 + 6.14.2 false true diff --git a/src/Subsystems/ИнструментыРазработчикаTormozit.xml b/src/Subsystems/ИнструментыРазработчикаTormozit.xml index 864d25ae1..69cfa5c98 100644 --- a/src/Subsystems/ИнструментыРазработчикаTormozit.xml +++ b/src/Subsystems/ИнструментыРазработчикаTormozit.xml @@ -6,7 +6,7 @@ ru - Инструменты разработчика 6.14.1 + Инструменты разработчика 6.14.2 en @@ -17,7 +17,7 @@ Инструменты разработчика 6.12.1 - 6.14.1 + 6.14.2 true true diff --git a/src/VERSION b/src/VERSION index 3928817a0..b5ded454c 100644 --- a/src/VERSION +++ b/src/VERSION @@ -1,2 +1,2 @@  -430 +431