From bb635b5074cf47382f180cdeb96c00893e7ac0c7 Mon Sep 17 00:00:00 2001 From: Dmitry Date: Tue, 2 Aug 2022 10:48:38 +0300 Subject: [PATCH] =?UTF-8?q?+=20=D0=B4=D0=BE=D0=BF=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/Форма/Ext/Form/Module.bsl | 221 +++++++++++++++++- 1 file changed, 218 insertions(+), 3 deletions(-) diff --git a/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form/Module.bsl b/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form/Module.bsl index 3209a0d..909d94e 100644 --- a/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form/Module.bsl +++ b/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form/Module.bsl @@ -1,11 +1,11 @@ - +&НаСервере +Перем Кеш; &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //УИ_ОбщегоНазначения.ФормаИнструментаПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); КонецПроцедуры - &НаСервере Функция СтрокуВДату(СтрокаДата) Попытка @@ -447,10 +447,225 @@ ОткрытьФорму("ВнешняяОбработка.ИнформацияОЛицензиях1С.Форма.ФормаАктивацииЛицензии", ПараметрыОткрытия); КонецПроцедуры +#Область Кеш +Функция Кеш_Установить(Ключ, Значение) + Если Неопределено = Кеш Тогда + Кеш = Новый Соответствие; + КонецЕсли; + Кеш[Ключ] = Значение; + Возврат Значение; +КонецФункции + +Функция Кеш_Получить(Ключ) + Результат = Неопределено; + Если НЕ Неопределено = Кеш Тогда + Результат = Кеш.Получить(Ключ); + КонецЕсли; + Возврат Результат; +КонецФункции +#КонецОбласти + +#Область Функциональщина +&НаКлиентеНаСервереБезКонтекста +Функция ВыполнитьФрагмент(Знач Код, Вход, ИмяВход = "Вход", ИмяВыход = "Выход", Инициализировать = Ложь, _ = Неопределено) + Выход = ?(Инициализировать, Вход, Неопределено); + + Если НЕ "Вход" = ИмяВход Тогда + Код = СтрШаблон("%1=Вход;%2", ИмяВход, Код); + КонецЕсли; + Если НЕ "Выход" = ИмяВыход Тогда + Код = СтрШаблон("%1;Выход=%2", Код, ИмяВыход); + КонецЕсли; + + Выполнить(Код); + + Возврат Выход; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция Мап(Код, Коллекция, _ = Неопределено) + Результат = Новый Массив; + + Для Каждого Элемент Из Коллекция Цикл + НовыйЭлемент = ВыполнитьФрагмент(Код, Элемент, "Элемент", "Результат", Истина, _); + Результат.Добавить(НовыйЭлемент); + КонецЦикла; + + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция Фильтр(КодУсловия, Коллекция, _ = Неопределено) + Результат = Новый Массив; + + Для Каждого Элемент Из Коллекция Цикл + Условие = ВыполнитьФрагмент(КодУсловия, Элемент, "Элемент", "Условие", , _); + Если Условие Тогда + Результат.Добавить(Элемент); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ВыполнитьФрагмент_ДляСвертки(Знач Код, Элемент, Знач Результат, _ = Неопределено) + Выполнить(Код); + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция Свернуть(Код, Коллекция, Знач Результат = Неопределено, _ = Неопределено) + Для Каждого Элемент Из Коллекция Цикл + Результат = ВыполнитьФрагмент_ДляСвертки(Код, Элемент, Результат, _); + КонецЦикла; + + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ВзятьНеБольше(Коллекция, Знач Количество) + Результат = Новый Массив; + Для Каждого ТекСтр Из Коллекция Цикл + Если 1 > Количество Тогда + Прервать; + КонецЕсли; + + Результат.Добавить(ТекСтр); + + Количество = Количество - 1; + КонецЦикла; + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция Пропустить(Коллекция, Знач Количество) + Результат = Новый Массив; + Для Каждого ТекСтр Из Коллекция Цикл + Если 0 < Количество Тогда + Количество = Количество - 1; + Продолжить; + КонецЕсли; + + Результат.Добавить(ТекСтр); + КонецЦикла; + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция Обратить(Знач Коллекция) + Если 0 = Коллекция.Количество() Тогда + Возврат Коллекция; + КонецЕсли; + Результат = Новый Массив; + Для Смещение = 1 По Коллекция.Количество() Цикл + ТекИндекс = Коллекция.Количество() - Смещение; + Результат.Добавить(Коллекция[ТекИндекс]); + КонецЦикла; + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция Ключи(Знач КоллекцияКЗ) + Возврат Мап("Результат = Элемент.Ключ", КоллекцияКЗ); +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция Значения(Знач КоллекцияКЗ) + Возврат Мап("Результат = Элемент.Значение", КоллекцияКЗ); +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция СимволыВСтроке(Знач Стр) + Результат = Новый Массив; + Для Сч = 1 По СтрДлина(Стр) Цикл + Результат.Добавить(Сред(Стр, Сч, 1)); + КонецЦикла; + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция МассивПоДиапазонуЧисел(Число_С, Число_По) + Результат = Новый Массив; + Для ТекЧисло = Число_С По Число_По Цикл + Результат.Добавить(ТекЧисло); + КонецЦикла; + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ЭтоКоллекция(ЧтоТо) + Результат = Ложь; + Если Неопределено = ЧтоТо Тогда + Возврат Результат; + КонецЕсли; + + Попытка + Для Каждого ТекСтр Из ЧтоТо Цикл + Прервать; + КонецЦикла; + Результат = Истина; + Исключение + ; + КонецПопытки; + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция Транспонировать(МассивМассивов) + // аналог zip || транспонирует двумерный массив + Результат = Новый Массив; + МинКоличество = Неопределено; + + Для Каждого ТекМассив Из МассивМассивов Цикл + Если Неопределено = МинКоличество Тогда + МинКоличество = ТекМассив.Количество(); + Продолжить; + КонецЕсли; + МинКоличество = Мин(МинКоличество, ТекМассив.Количество()); + КонецЦикла; + + Если 0 = МинКоличество Тогда + Возврат Результат; + КонецЕсли; + + Для Индекс = 0 По МинКоличество - 1 Цикл + Элемент = Новый Массив; + + Для Каждого ТекМассив Из МассивМассивов Цикл + Элемент.Добавить(ТекМассив[Индекс]); + КонецЦикла; + + Результат.Добавить(Элемент); + КонецЦикла; + + Возврат Результат; +КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ОбходДерева(Дерево, Знач КодСтроки = "", Знач ВШирину = Ложь) + Результат = Новый Массив; + + Очередь = Новый Массив; + Очередь.Добавить(Дерево); + Пока Очередь.Количество() > 0 Цикл + Индекс_Следующий = ?(ВШирину, 0, Очередь.ВГраница()); + Узел = Очередь.Получить(Индекс_Следующий); + Очередь.Удалить(Индекс_Следующий); + + Результат.Добавить(Узел); + + Строки = Неопределено; + // для массива массивов не нужно определять свойство где лежат строки + Если ПустаяСтрока(КодСтроки) Тогда + Строки = Узел; + Иначе + Строки = Вычислить(КодСтроки); + КонецЕсли; + + Если НЕ ЭтоКоллекция(Строки) Тогда + Продолжить; + КонецЕсли; + + Для Каждого ТекСтр Из Строки Цикл + Очередь.Добавить(ТекСтр); + КонецЦикла; + КонецЦикла; + Возврат Результат; +КонецФункции +#КонецОбласти + + &НаКлиентеНаСервереБезКонтекста Функция SPS_ЭтоWindows() СистемнаяИнформация = Новый СистемнаяИнформация; - Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; КонецФункции