Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки. Co-authored-by: Cursor <cursoragent@cursor.com>
815 lines
45 KiB
Plaintext
815 lines
45 KiB
Plaintext
#Область ПрограммныйИнтерфейс
|
||
|
||
// Функция возвращает разделитель GS1.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка.
|
||
//
|
||
Функция РазделительGS1() Экспорт;
|
||
|
||
Возврат Символ(29); // Dec 29
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает экранированный символ GS1.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка.
|
||
//
|
||
Функция ЭкранированныйСимволGS1() Экспорт;
|
||
|
||
Возврат "\x1d"; // Используется для экранирования символа GS1.
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
// Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину.
|
||
// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,
|
||
// рекомендуется использовать функцию платформы СтрРазделить.
|
||
//
|
||
// Параметры:
|
||
// Значение - Строка - текст с разделителями.
|
||
// Разделитель - Строка - разделитель строк текста, минимум 1 символ.
|
||
// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.
|
||
// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
|
||
// > для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки
|
||
// включаются в результат;
|
||
// > если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в
|
||
// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а
|
||
// при других разделителях результатом функции будет пустой массив.
|
||
// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Массив из Строка
|
||
//
|
||
// Пример:
|
||
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",")
|
||
// - возвратит массив из 5 элементов, три из которых - пустые: "", "один", "", "два", "";
|
||
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина)
|
||
// - возвратит массив из двух элементов: "один", "два";
|
||
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(" один два ", " ")
|
||
// - возвратит массив из двух элементов: "один", "два";
|
||
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("")
|
||
// - возвратит пустой массив;
|
||
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("",,Ложь)
|
||
// - возвратит массив с одним элементом: ""(пустая строка);
|
||
// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("", " ")
|
||
// - возвратит массив с одним элементом: "" (пустая строка).
|
||
//
|
||
Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено,
|
||
СокращатьНепечатаемыеСимволы = Ложь) Экспорт
|
||
|
||
Если СтрДлина(Разделитель) = 1
|
||
И ПропускатьПустыеСтроки = Неопределено
|
||
И СокращатьНепечатаемыеСимволы Тогда
|
||
|
||
Результат = СтрРазделить(Значение, Разделитель, Ложь);
|
||
Для Индекс = 0 По Результат.ВГраница() Цикл
|
||
Результат[Индекс] = СокрЛП(Результат[Индекс])
|
||
КонецЦикла;
|
||
Возврат Результат;
|
||
|
||
КонецЕсли;
|
||
|
||
Результат = Новый Массив;
|
||
|
||
// Для обеспечения обратной совместимости.
|
||
Если ПропускатьПустыеСтроки = Неопределено Тогда
|
||
ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
|
||
Если ПустаяСтрока(Значение) Тогда
|
||
Если Разделитель = " " Тогда
|
||
Результат.Добавить("");
|
||
КонецЕсли;
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
//
|
||
|
||
Позиция = СтрНайти(Значение, Разделитель);
|
||
Пока Позиция > 0 Цикл
|
||
Подстрока = Лев(Значение, Позиция - 1);
|
||
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
|
||
Если СокращатьНепечатаемыеСимволы Тогда
|
||
Результат.Добавить(СокрЛП(Подстрока));
|
||
Иначе
|
||
Результат.Добавить(Подстрока);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
Значение = Сред(Значение, Позиция + СтрДлина(Разделитель));
|
||
Позиция = СтрНайти(Значение, Разделитель);
|
||
КонецЦикла;
|
||
|
||
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда
|
||
Если СокращатьНепечатаемыеСимволы Тогда
|
||
Результат.Добавить(СокрЛП(Значение));
|
||
Иначе
|
||
Результат.Добавить(Значение);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Разбирает строку URI на составные части и возвращает в виде структуры.
|
||
// На основе RFC 3986.
|
||
//
|
||
// Параметры:
|
||
// СтрокаURI - Строка - ссылка на ресурс в формате:
|
||
// <схема>://<логин>:<пароль>@<хост>:<порт>/<путь>?<параметры>#<якорь>.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - составные части URI согласно формату:
|
||
// * Схема - Строка.
|
||
// * Логин - Строка.
|
||
// * Пароль - Строка.
|
||
// * ИмяСервера - Строка - часть <хост>:<порт> входного параметра.
|
||
// * Хост - Строка.
|
||
// * Порт - Неопределено, Число -
|
||
// * ПутьНаСервере - Строка - часть <путь>?<параметры>#<якорь> входного параметра.
|
||
//
|
||
Функция СтруктураURI(Знач СтрокаURI) Экспорт
|
||
|
||
СтрокаURI = СокрЛП(СтрокаURI);
|
||
|
||
// схема
|
||
Схема = "";
|
||
Позиция = Найти(СтрокаURI, "://");
|
||
Если Позиция > 0 Тогда
|
||
Схема = НРег(Лев(СтрокаURI, Позиция - 1));
|
||
СтрокаURI = Сред(СтрокаURI, Позиция + 3);
|
||
КонецЕсли;
|
||
|
||
// Строка соединения и путь на сервере.
|
||
СтрокаСоединения = СтрокаURI;
|
||
ПутьНаСервере = "";
|
||
Позиция = Найти(СтрокаСоединения, "/");
|
||
Если Позиция > 0 Тогда
|
||
ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1);
|
||
СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1);
|
||
КонецЕсли;
|
||
|
||
// Информация пользователя и имя сервера.
|
||
СтрокаАвторизации = "";
|
||
ИмяСервера = СтрокаСоединения;
|
||
Позиция = Найти(СтрокаСоединения, "@");
|
||
Если Позиция > 0 Тогда
|
||
СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1);
|
||
ИмяСервера = Сред(СтрокаСоединения, Позиция + 1);
|
||
КонецЕсли;
|
||
|
||
// логин и пароль
|
||
Логин = СтрокаАвторизации;
|
||
Пароль = "";
|
||
Позиция = Найти(СтрокаАвторизации, ":");
|
||
Если Позиция > 0 Тогда
|
||
Логин = Лев(СтрокаАвторизации, Позиция - 1);
|
||
Пароль = Сред(СтрокаАвторизации, Позиция + 1);
|
||
КонецЕсли;
|
||
|
||
// хост и порт
|
||
Хост = ИмяСервера;
|
||
Порт = "";
|
||
Позиция = Найти(ИмяСервера, ":");
|
||
Если Позиция > 0 Тогда
|
||
Хост = Лев(ИмяСервера, Позиция - 1);
|
||
Порт = Сред(ИмяСервера, Позиция + 1);
|
||
КонецЕсли;
|
||
|
||
Результат = Новый Структура;
|
||
Результат.Вставить("Схема", Схема);
|
||
Результат.Вставить("Логин", Логин);
|
||
Результат.Вставить("Пароль", Пароль);
|
||
Результат.Вставить("ИмяСервера", ИмяСервера);
|
||
Результат.Вставить("Хост", Хост);
|
||
Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт)));
|
||
Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает Истина, если клиентское приложение является мобильным клиентом.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево - если нет клиентского приложения, возвращается Ложь.
|
||
//
|
||
Функция ЭтоМобильныйКлиент() Экспорт
|
||
|
||
#Если МобильныйКлиент Тогда
|
||
Возврат Истина;
|
||
#ИначеЕсли Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
|
||
|
||
ЭтоМобильныйКлиент = Ложь;
|
||
|
||
Если ЭтоМобильныйКлиент = Неопределено Тогда
|
||
Возврат Ложь; // Нет клиентского приложения.
|
||
КонецЕсли;
|
||
|
||
Возврат ЭтоМобильныйКлиент;
|
||
#Иначе
|
||
Возврат Ложь;
|
||
#КонецЕсли
|
||
|
||
КонецФункции
|
||
|
||
// Создает массив и помещает в него переданное значение.
|
||
//
|
||
// Параметры:
|
||
// Значение - Произвольный - любое значение.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Массив из Произвольный - массив из одного элемента.
|
||
//
|
||
Функция ЗначениеВМассиве(Значение) Экспорт
|
||
|
||
Массив = Новый Массив;
|
||
Массив.Добавить(Значение);
|
||
|
||
Возврат Массив;
|
||
|
||
КонецФункции
|
||
|
||
// Base64 в штрихкод.
|
||
//
|
||
// Параметры:
|
||
// ШтрихкодВBase64 - Строка - Штрихкод в base64
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Base64 в штрихкод
|
||
Функция Base64ВШтрихкод(ШтрихкодВBase64) Экспорт
|
||
|
||
ДвоичныеДанные = Base64Значение(ШтрихкодВBase64);
|
||
Если ДвоичныеДанные = Неопределено Тогда
|
||
Штрихкод = ШтрихкодВBase64;
|
||
Иначе
|
||
Штрихкод = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
|
||
КонецЕсли;
|
||
|
||
Возврат Штрихкод;
|
||
|
||
КонецФункции
|
||
|
||
// Штрихкод в base64.
|
||
//
|
||
// Параметры:
|
||
// Штрихкод - Строка - Штрихкод
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Штрихкод в base64
|
||
Функция ШтрихкодВBase64(Штрихкод) Экспорт
|
||
|
||
Если Штрихкод = Неопределено Тогда
|
||
ДвоичныеДанныеСтроки = Неопределено;
|
||
Иначе
|
||
ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(Штрихкод);
|
||
ШтрихкодBase64 = Base64Строка(ДвоичныеДанныеСтроки);
|
||
ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ПС, "");
|
||
ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ВК, "");
|
||
КонецЕсли;
|
||
|
||
Возврат ШтрихкодBase64;
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает разделитель RS.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка.
|
||
//
|
||
Функция РазделительRS() Экспорт;
|
||
|
||
Возврат Символ(30); // Dec 30
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает экранированный символ RS.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка.
|
||
//
|
||
Функция ЭкранированныйСимволRS() Экспорт;
|
||
|
||
Возврат "\x1e"; // Используется для экранирования символа RS.
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает разделитель EOT.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка.
|
||
//
|
||
Функция РазделительEOT() Экспорт;
|
||
|
||
Возврат Символ(4); // Dec 4
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает экранированный символ EOT.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка.
|
||
//
|
||
Функция ЭкранированныйСимволEOT() Экспорт;
|
||
|
||
Возврат "\x4"; // Используется для экранирования символа EOT.
|
||
|
||
КонецФункции
|
||
|
||
// Преобразовать TimeStamp в дату
|
||
// Параметры:
|
||
// Timestamp - Строка, Число - значение содержащее временной штамп
|
||
//
|
||
// Возвращаемое значение:
|
||
// Дата
|
||
//
|
||
Функция TimestampВДату(Timestamp) Экспорт
|
||
Попытка
|
||
Возврат Дата("19700101")+(?(ТипЗнч(Timestamp) = Тип("Строка"), Число(Timestamp), Timestamp) / 1000);
|
||
Исключение
|
||
Возврат Неопределено;
|
||
КонецПопытки;
|
||
КонецФункции
|
||
|
||
// Преобразовать дату в TimeStamp
|
||
//
|
||
// Параметры:
|
||
// Дата - Дата - дата которую требуется преобразовать
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка
|
||
//
|
||
Функция ДатуВTimestamp(Дата = Неопределено) Экспорт
|
||
|
||
Возврат Формат(Число(?(ТипЗнч(Дата) = Тип("Дата"), Дата, ТекущаяДата()) - Дата("19700101")),"ЧН=0; ЧГ=0");
|
||
|
||
КонецФункции
|
||
|
||
Функция ПредставлениеРевизияИнтерфейса(РевизияИнтерфейса) Экспорт
|
||
|
||
Если РевизияИнтерфейса >= 5000 Тогда
|
||
Результат = "5." + Строка(РевизияИнтерфейса - 5000);
|
||
ИначеЕсли РевизияИнтерфейса >= 4000 Тогда
|
||
Результат = "4." + Строка(РевизияИнтерфейса - 4000);
|
||
ИначеЕсли РевизияИнтерфейса >= 3000 Тогда
|
||
Результат = "3." + Строка(РевизияИнтерфейса - 3000);
|
||
ИначеЕсли РевизияИнтерфейса >= 2000 Тогда
|
||
Результат = "2." + Строка(РевизияИнтерфейса - 2000);
|
||
ИначеЕсли РевизияИнтерфейса > 1000 Тогда
|
||
Результат = "1." + Строка(РевизияИнтерфейса - 1000);
|
||
Иначе
|
||
Результат = "";
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
#Область Интернет
|
||
|
||
// Создает объект описания защищенного соединения OpenSSL.
|
||
// См. также описание объекта ЗащищенноеСоединениеOpenSSL в синтаксис-помощнике.
|
||
//
|
||
// Параметры:
|
||
// СертификатКлиента - СертификатКлиентаФайл
|
||
// - СертификатКлиентаWindows
|
||
// - Неопределено - клиентский сертификат OpenSSL.
|
||
// СертификатыУдостоверяющихЦентров - СертификатыУдостоверяющихЦентровФайл
|
||
// - СертификатыУдостоверяющихЦентровWindows
|
||
// - СертификатыУдостоверяющихЦентровLinux
|
||
// - СертификатыУдостоверяющихЦентровОС
|
||
// - Неопределено - сертификаты удостоверяющих центров OpenSSL.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ЗащищенноеСоединениеOpenSSL
|
||
//
|
||
Функция НовоеЗащищенноеСоединение(Знач СертификатКлиента = Неопределено, Знач СертификатыУдостоверяющихЦентров = Неопределено) Экспорт
|
||
|
||
ЗащищенноеСоединение = Неопределено;
|
||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||
Если ОбщегоНазначенияБПО.ИспользуетсяБСП() Тогда
|
||
|
||
// Вызов БСП
|
||
ОбщегоНазначенияМодуль = ОбщегоНазначенияБПО.ОбщийМодуль("ОбщегоНазначенияКлиентСервер");
|
||
ЗащищенноеСоединение = ОбщегоНазначенияМодуль.НовоеЗащищенноеСоединение(СертификатКлиента, СертификатыУдостоверяющихЦентров);
|
||
// Конец Вызов БСП
|
||
|
||
КонецЕсли;
|
||
#Иначе
|
||
|
||
Если ОбщегоНазначенияБПОКлиент.ИспользуетсяБСП() Тогда
|
||
|
||
// Вызов БСП
|
||
ОбщегоНазначенияМодуль = ОбщегоНазначенияБПОКлиент.ОбщийМодуль("ОбщегоНазначенияКлиентСервер");
|
||
ЗащищенноеСоединение = ОбщегоНазначенияМодуль.НовоеЗащищенноеСоединение(СертификатКлиента, СертификатыУдостоверяющихЦентров);
|
||
// Конец Вызов БСП
|
||
|
||
КонецЕсли;
|
||
#КонецЕсли
|
||
|
||
Если ЗащищенноеСоединение = Неопределено Тогда
|
||
|
||
#Если ВебКлиент Или МобильныйКлиент Тогда
|
||
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
|
||
#Иначе
|
||
Если СертификатыУдостоверяющихЦентров = Неопределено Тогда
|
||
ВерсииПлатформыДляИспользованияСертификатов = "8.3.22.2470; 8.3.23.2122; 8.3.24.1446";
|
||
|
||
СистемнаяИнформация = Новый СистемнаяИнформация;
|
||
ТекущийНомерВерсии = ВерсияКонфигурацииБезНомераСборки(СистемнаяИнформация.ВерсияПриложения);
|
||
ИспользоватьСертификатыУдостоверяющихЦентров = СравнитьВерсииБезНомераСборки(ТекущийНомерВерсии, "8.3.21") > 0;
|
||
|
||
Если ИспользоватьСертификатыУдостоверяющихЦентров Тогда
|
||
Если СравнитьВерсииБезНомераСборки(ТекущийНомерВерсии, "8.3.25") < 0 Тогда
|
||
Для Каждого НомерСборки Из СтрРазделить(ВерсииПлатформыДляИспользованияСертификатов, "; ", Ложь) Цикл
|
||
Если СтрНачинаетсяС(НомерСборки, ТекущийНомерВерсии + ".") Тогда
|
||
ИспользоватьСертификатыУдостоверяющихЦентров =
|
||
СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, НомерСборки) >= 0;
|
||
Прервать;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Если ИспользоватьСертификатыУдостоверяющихЦентров Тогда
|
||
СертификатыУдостоверяющихЦентров = Новый СертификатыУдостоверяющихЦентровОС();
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(СертификатКлиента, СертификатыУдостоверяющихЦентров);
|
||
#КонецЕсли
|
||
|
||
КонецЕсли;
|
||
|
||
Возврат ЗащищенноеСоединение;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
// Проверяет наличие реквизита или свойства у произвольного объекта без обращения к метаданным.
|
||
//
|
||
// Параметры:
|
||
// Объект - Произвольный - объект, у которого нужно проверить наличие реквизита или свойства;
|
||
// ИмяРеквизита - Строка - имя реквизита или свойства.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево - Истина, если есть.
|
||
//
|
||
Функция ЕстьРеквизитИлиСвойствоОбъекта(Объект, ИмяРеквизита) Экспорт
|
||
|
||
КлючУникальности = Новый УникальныйИдентификатор;
|
||
СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
|
||
ЗаполнитьЗначенияСвойств(СтруктураРеквизита, Объект);
|
||
|
||
Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
|
||
|
||
КонецФункции
|
||
|
||
// Проверяет, содержит ли строка только цифры.
|
||
//
|
||
// Параметры:
|
||
// Значение - Строка - проверяемая строка.
|
||
// Устаревший - Булево - устаревший параметр, не используется.
|
||
// ПробелыЗапрещены - Булево - если Ложь, то в строке допустимо наличие пробелов.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы.
|
||
//
|
||
// Пример:
|
||
// Результат = ТолькоЦифрыВСтроке("0123"); // Истина
|
||
// Результат = ТолькоЦифрыВСтроке("0123abc"); // Ложь
|
||
// Результат = ТолькоЦифрыВСтроке("01 2 3",, Ложь); // Истина
|
||
//
|
||
Функция ТолькоЦифрыВСтроке(Знач Значение, Знач Устаревший = Истина, Знач ПробелыЗапрещены = Истина) Экспорт
|
||
|
||
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
Если Не ПробелыЗапрещены Тогда
|
||
Значение = СтрЗаменить(Значение, " ", "");
|
||
КонецЕсли;
|
||
|
||
Если СтрДлина(Значение) = 0 Тогда
|
||
Возврат Истина;
|
||
КонецЕсли;
|
||
|
||
// Если содержит только цифры, то в результате замен должна быть получена пустая строка.
|
||
// Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы.
|
||
Возврат СтрДлина(
|
||
СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
|
||
СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
|
||
Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
|
||
|
||
КонецФункции
|
||
|
||
Функция СтрокаЗапускаБезопасная(СтрокаЗапуска) Экспорт
|
||
// Безопасными считаются такие строковые данные, которые не содержат в себе следующие символы: "$", "`", "|", "||" ";", "&", "&&".
|
||
ОпасныйВызов = СтрНайти(СтрокаЗапуска, "$")>0
|
||
Или СтрНайти(СтрокаЗапуска, "`")>0
|
||
Или СтрНайти(СтрокаЗапуска, "|")>0
|
||
Или СтрНайти(СтрокаЗапуска, "||")>0
|
||
Или СтрНайти(СтрокаЗапуска, ";")>0
|
||
Или СтрНайти(СтрокаЗапуска, "&")>0
|
||
Или СтрНайти(СтрокаЗапуска, "&&")>0;
|
||
Возврат Не ОпасныйВызов;
|
||
КонецФункции
|
||
|
||
Функция ДатаСеанса() Экспорт
|
||
Возврат ОбщегоНазначенияБПОСлужебныйВызовСервера.ДатаСеанса();
|
||
КонецФункции
|
||
|
||
// Преобразовать идентификатор в строку с пробелами
|
||
//
|
||
// Параметры:
|
||
// Идентификатор - Строка - идентификатор который требуется преобразовать
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - идентификатор преобразованный в читаемый вид
|
||
Функция ПредставлениеИдентификатора(Идентификатор) Экспорт
|
||
|
||
РазмерСтроки = СтрДлина(Идентификатор);
|
||
Результат = "";
|
||
Для Номер=1 По РазмерСтроки Цикл
|
||
КодСимвола = КодСимвола(Идентификатор, Номер);
|
||
КодСледующегоСимвола = КодСимвола(Идентификатор, Номер + 1);
|
||
КлассСимвола = "";
|
||
Если КодСимвола >= КодСимвола("а") И КодСимвола <= КодСимвола("я") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
ИначеЕсли КодСимвола >= КодСимвола("a") И КодСимвола <= КодСимвола("z") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
ИначеЕсли КодСимвола >= КодСимвола("А") И КодСимвола <= КодСимвола("Я") Тогда
|
||
Если Номер = 1 Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
Иначе
|
||
КодПредыдущегоСимвола = КодСимвола(Идентификатор, Номер - 1);
|
||
Если КодПредыдущегоСимвола >= КодСимвола("0") И КодПредыдущегоСимвола <= КодСимвола("9") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
ИначеЕсли КодПредыдущегоСимвола >= КодСимвола("A") И КодПредыдущегоСимвола <= КодСимвола("Z") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
ИначеЕсли КодПредыдущегоСимвола >= КодСимвола("А") И КодПредыдущегоСимвола <= КодСимвола("Я") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
ИначеЕсли КодСледующегоСимвола >= КодСимвола("А") И КодСледующегоСимвола <= КодСимвола("Я") Тогда
|
||
Результат = Результат + " " + Символ(КодСимвола);
|
||
Иначе
|
||
Результат = Результат + " " + НРег(Символ(КодСимвола));
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИначеЕсли КодСимвола >= КодСимвола("A") И КодСимвола <= КодСимвола("Z") Тогда
|
||
Если Номер = 1 Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
Иначе
|
||
КодПредыдущегоСимвола = КодСимвола(Идентификатор, Номер - 1);
|
||
Если КодПредыдущегоСимвола >= КодСимвола("A") И КодПредыдущегоСимвола <= КодСимвола("Z") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
ИначеЕсли КодПредыдущегоСимвола = КодСимвола("_") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
Иначе
|
||
Результат = Результат + " " + Символ(КодСимвола);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИначеЕсли КодСимвола >= КодСимвола("0") И КодСимвола <= КодСимвола("9") Тогда
|
||
Если Номер = 1 Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
Иначе
|
||
КодПредыдущегоСимвола = КодСимвола(Идентификатор, Номер - 1);
|
||
Если КодПредыдущегоСимвола >= КодСимвола("0") И КодПредыдущегоСимвола <= КодСимвола("9") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
ИначеЕсли КодПредыдущегоСимвола >= КодСимвола("A") И КодПредыдущегоСимвола <= КодСимвола("Z") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
ИначеЕсли КодПредыдущегоСимвола >= КодСимвола("А") И КодПредыдущегоСимвола <= КодСимвола("Я") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
Иначе
|
||
Результат = Результат + " " + Символ(КодСимвола);
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
ИначеЕсли КодСимвола = КодСимвола("_") Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
КонецЕсли;
|
||
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Получает номер версии конфигурации без номера сборки.
|
||
//
|
||
// Параметры:
|
||
// Версия - Строка - версия конфигурации в формате РР.ПП.ЗЗ.СС,
|
||
// где СС - номер сборки, который будет удален.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - номер версии конфигурации без номера сборки в формате РР.ПП.ЗЗ.
|
||
//
|
||
Функция ВерсияКонфигурацииБезНомераСборки(Знач Версия) Экспорт
|
||
|
||
Массив = СтрРазделить(Версия, ".");
|
||
|
||
Если Массив.Количество() < 3 Тогда
|
||
Возврат Версия;
|
||
КонецЕсли;
|
||
|
||
Результат = "[Редакция].[Подредакция].[Релиз]";
|
||
Результат = СтрЗаменить(Результат, "[Редакция]", Массив[0]);
|
||
Результат = СтрЗаменить(Результат, "[Подредакция]", Массив[1]);
|
||
Результат = СтрЗаменить(Результат, "[Релиз]", Массив[2]);
|
||
|
||
Возврат Результат;
|
||
КонецФункции
|
||
|
||
// Сравнить две строки версий.
|
||
//
|
||
// Параметры:
|
||
// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.
|
||
// СтрокаВерсии2 - Строка - второй сравниваемый номер версии.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны.
|
||
//
|
||
Функция СравнитьВерсииБезНомераСборки(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт
|
||
|
||
Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0", СтрокаВерсии1);
|
||
Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0", СтрокаВерсии2);
|
||
Версия1 = СтрРазделить(Строка1, ".");
|
||
Если Версия1.Количество() <> 3 Тогда
|
||
ВызватьИсключение ПодставитьПараметрыВСтроку(
|
||
НСтр("ru = 'Неправильный формат параметра %1: %2'"), "СтрокаВерсии1", СтрокаВерсии1);
|
||
КонецЕсли;
|
||
Версия2 = СтрРазделить(Строка2, ".");
|
||
Если Версия2.Количество() <> 3 Тогда
|
||
ВызватьИсключение ПодставитьПараметрыВСтроку(
|
||
НСтр("ru = 'Неправильный формат параметра %1: %2'"), "СтрокаВерсии2", СтрокаВерсии2);
|
||
КонецЕсли;
|
||
|
||
Результат = 0;
|
||
Для Разряд = 0 По 2 Цикл
|
||
Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]);
|
||
Если Результат <> 0 Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Сравнить две строки версий.
|
||
//
|
||
// Параметры:
|
||
// СтрокаВерсии1 - Строка - номер версии в формате РР.{П|ПП}.ЗЗ.СС.
|
||
// СтрокаВерсии2 - Строка - второй сравниваемый номер версии.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - больше 0, если СтрокаВерсии1 > СтрокаВерсии2; 0, если версии равны.
|
||
//
|
||
Функция СравнитьВерсии(Знач СтрокаВерсии1, Знач СтрокаВерсии2) Экспорт
|
||
|
||
Строка1 = ?(ПустаяСтрока(СтрокаВерсии1), "0.0.0.0", СтрокаВерсии1);
|
||
Строка2 = ?(ПустаяСтрока(СтрокаВерсии2), "0.0.0.0", СтрокаВерсии2);
|
||
Версия1 = СтрРазделить(Строка1, ".");
|
||
Если Версия1.Количество() <> 4 Тогда
|
||
ВызватьИсключение ПодставитьПараметрыВСтроку(
|
||
НСтр("ru = 'Неправильный формат параметра %1: %2'"), "СтрокаВерсии1", СтрокаВерсии1);
|
||
КонецЕсли;
|
||
Версия2 = СтрРазделить(Строка2, ".");
|
||
Если Версия2.Количество() <> 4 Тогда
|
||
ВызватьИсключение ПодставитьПараметрыВСтроку(
|
||
НСтр("ru = 'Неправильный формат параметра %1: %2'"), "СтрокаВерсии2", СтрокаВерсии2);
|
||
КонецЕсли;
|
||
|
||
Результат = 0;
|
||
Для Разряд = 0 По 3 Цикл
|
||
Результат = Число(Версия1[Разряд]) - Число(Версия2[Разряд]);
|
||
Если Результат <> 0 Тогда
|
||
Возврат Результат;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Подставляет параметры в строку. Максимально возможное число параметров - 9.
|
||
// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы.
|
||
//
|
||
// Параметры:
|
||
// ШаблонСтроки - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>",
|
||
// например "%1 пошел в %2");
|
||
// Параметр1 - Строка - значение подставляемого параметра.
|
||
// Параметр2 - Строка
|
||
// Параметр3 - Строка
|
||
// Параметр4 - Строка
|
||
// Параметр5 - Строка
|
||
// Параметр6 - Строка
|
||
// Параметр7 - Строка
|
||
// Параметр8 - Строка
|
||
// Параметр9 - Строка
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - текстовая строка с подставленными параметрами.
|
||
//
|
||
// Пример:
|
||
// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел
|
||
// в Зоопарк".
|
||
//
|
||
Функция ПодставитьПараметрыВСтроку(Знач ШаблонСтроки,
|
||
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
|
||
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
|
||
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт
|
||
|
||
ЕстьПараметрыСПроцентом = СтрНайти(Параметр1, "%")
|
||
Или СтрНайти(Параметр2, "%")
|
||
Или СтрНайти(Параметр3, "%")
|
||
Или СтрНайти(Параметр4, "%")
|
||
Или СтрНайти(Параметр5, "%")
|
||
Или СтрНайти(Параметр6, "%")
|
||
Или СтрНайти(Параметр7, "%")
|
||
Или СтрНайти(Параметр8, "%")
|
||
Или СтрНайти(Параметр9, "%");
|
||
|
||
Если ЕстьПараметрыСПроцентом Тогда
|
||
Возврат ПодставитьПараметрыСПроцентом(ШаблонСтроки, Параметр1,
|
||
Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9);
|
||
КонецЕсли;
|
||
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%1", Параметр1);
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%2", Параметр2);
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%3", Параметр3);
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%4", Параметр4);
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%5", Параметр5);
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%6", Параметр6);
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%7", Параметр7);
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%8", Параметр8);
|
||
ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%9", Параметр9);
|
||
Возврат ШаблонСтроки;
|
||
|
||
КонецФункции
|
||
|
||
// Вставляет параметры в строку, учитывая, что в параметрах могут использоваться подстановочные слова %1, %2 и т.д.
|
||
Функция ПодставитьПараметрыСПроцентом(Знач СтрокаПодстановки,
|
||
Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
|
||
Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
|
||
Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено)
|
||
|
||
Результат = "";
|
||
Позиция = СтрНайти(СтрокаПодстановки, "%");
|
||
Пока Позиция > 0 Цикл
|
||
Результат = Результат + Лев(СтрокаПодстановки, Позиция - 1);
|
||
СимволПослеПроцента = Сред(СтрокаПодстановки, Позиция + 1, 1);
|
||
ПодставляемыйПараметр = Неопределено;
|
||
Если СимволПослеПроцента = "1" Тогда
|
||
ПодставляемыйПараметр = Параметр1;
|
||
ИначеЕсли СимволПослеПроцента = "2" Тогда
|
||
ПодставляемыйПараметр = Параметр2;
|
||
ИначеЕсли СимволПослеПроцента = "3" Тогда
|
||
ПодставляемыйПараметр = Параметр3;
|
||
ИначеЕсли СимволПослеПроцента = "4" Тогда
|
||
ПодставляемыйПараметр = Параметр4;
|
||
ИначеЕсли СимволПослеПроцента = "5" Тогда
|
||
ПодставляемыйПараметр = Параметр5;
|
||
ИначеЕсли СимволПослеПроцента = "6" Тогда
|
||
ПодставляемыйПараметр = Параметр6;
|
||
ИначеЕсли СимволПослеПроцента = "7" Тогда
|
||
ПодставляемыйПараметр = Параметр7
|
||
ИначеЕсли СимволПослеПроцента = "8" Тогда
|
||
ПодставляемыйПараметр = Параметр8;
|
||
ИначеЕсли СимволПослеПроцента = "9" Тогда
|
||
ПодставляемыйПараметр = Параметр9;
|
||
КонецЕсли;
|
||
Если ПодставляемыйПараметр = Неопределено Тогда
|
||
Результат = Результат + "%";
|
||
СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 1);
|
||
Иначе
|
||
Результат = Результат + ПодставляемыйПараметр;
|
||
СтрокаПодстановки = Сред(СтрокаПодстановки, Позиция + 2);
|
||
КонецЕсли;
|
||
Позиция = СтрНайти(СтрокаПодстановки, "%");
|
||
КонецЦикла;
|
||
Результат = Результат + СтрокаПодстановки;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
Функция МассивыСовпадают(Массив1, Массив2) Экспорт
|
||
|
||
Если Массив1.Количество() <> Массив2.Количество() Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
|
||
Для Каждого Элемент Из Массив1 Цикл
|
||
Если Массив2.Найти(Элемент) = Неопределено Тогда
|
||
Возврат Ложь;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Возврат Истина;
|
||
|
||
КонецФункции
|
||
|
||
|
||
#КонецОбласти
|