+ доп функции

This commit is contained in:
Dmitry Belyaev 2022-08-02 10:48:38 +03:00
parent 29d5d1769f
commit bb635b5074
1 changed files with 218 additions and 3 deletions

View File

@ -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;
КонецФункции