commit ba1d8d6ab284823bb779ad3115fbeca19e5e22e7 Author: Dmitry Date: Tue Aug 2 09:39:54 2022 +0300 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7e310e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/*.e[rp]f diff --git a/src/ИнформацияОЛицензиях1С.xml b/src/ИнформацияОЛицензиях1С.xml new file mode 100644 index 0000000..7618806 --- /dev/null +++ b/src/ИнформацияОЛицензиях1С.xml @@ -0,0 +1,1077 @@ + + + + + + c3831ec8-d8d5-4f93-8a22-f9bfae07327f + 3fc24d5f-100b-41a9-aa18-557dc1d8baaf + + + d4edb03e-008e-4e92-8481-1adb8cd72a1c + c7285d81-cf00-4a6f-b566-869c88240bb3 + + + + ИнформацияОЛицензиях1С + + + ru + Информация о лицензиях 1С + + + из УИ + ExternalDataProcessor.ИнформацияОЛицензиях1С.Form.Форма + + + + + + + 759ca023-57f7-4837-9798-e0d345d3af95 + 18b0f677-2f37-4293-b6a8-fdff9e885269 + + + dcdf0fa7-8aa5-47b0-9d0b-df453130901b + 03cb1deb-7518-4738-a32b-498758d934dc + + + + СписокЛицензий + + + ru + Список лицензий + + + + + DontCheck + + + + DontCheck + false + false + Auto + + + false + + + Auto + Auto + + false + Use + false + + + + Use + + + + + + + + + + + НомерЛицензии + + + ru + Номер лицензии + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Описание + + + ru + Описание + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ПинКод + + + ru + Пин код + + + + + xs:string + + 100 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Фамилия + + + ru + Фамилия + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Имя + + + ru + Имя + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Отчество + + + ru + Отчество + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + EMail + + + ru + E mail + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Компания + + + ru + Компания + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Страна + + + ru + Страна + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Индекс + + + ru + Индекс + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Регион + + + ru + Регион + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Город + + + ru + Город + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Район + + + ru + Район + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Улица + + + ru + Улица + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Дом + + + ru + Дом + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Квартира + + + ru + Квартира + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ДатаАктивации + + + ru + Дата активации + + + + + xs:dateTime + + Date + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + РегистрационныйНомер + + + ru + Регистрационный номер + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КодПродукта + + + ru + Код продукта + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ИмяФайлаЛицензии + + + ru + Имя файла лицензии + + + + + xs:string + + 150 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + ТекстоваяИнформация + + + ru + Текстовая информация + + + + + xs:string + + 0 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Активна + + + ru + Активна + + + + + xs:boolean + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + КоличествоЛицензий + + + ru + Количество лицензий + + + + + xs:decimal + + 10 + 0 + Any + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + РучнойВвод + + + ru + Ручной ввод + + + + + xs:boolean + + false + + + + false + + false + false + + + true + true + DontCheck + Items + + + Auto + Auto + + + Auto + + + + + Строение + + + ru + Строение + + + + + xs:string + + 50 + Variable + + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + + + + +
Форма
+
ФормаАктивацииЛицензии
+
+
+
\ No newline at end of file diff --git a/src/ИнформацияОЛицензиях1С/Forms/Форма.xml b/src/ИнформацияОЛицензиях1С/Forms/Форма.xml new file mode 100644 index 0000000..650f09b --- /dev/null +++ b/src/ИнформацияОЛицензиях1С/Forms/Форма.xml @@ -0,0 +1,22 @@ + + +
+ + Форма + + + ru + Форма + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form.xml b/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form.xml new file mode 100644 index 0000000..52c2b87 --- /dev/null +++ b/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form.xml @@ -0,0 +1,470 @@ + +
+ AlwaysHorizontal + + + + + + + + + + ПриОткрытии + ПриСозданииНаСервере + + + + List + true + true + true + AsFile + Объект.СписокЛицензий + + Change + Copy + Delete + + + + + + + + + + + + + СписокЛицензий + SearchStringRepresentation + + + + + + + СписокЛицензий + ViewStatusRepresentation + + Left + + + + + + СписокЛицензий + SearchControl + + + + + + СписокЛицензийПередНачаломДобавления + СписокЛицензийПриАктивизацииСтроки + + + + Объект.СписокЛицензий.LineNumber + EnterOnInput + + + + + Объект.СписокЛицензий.НомерЛицензии + EnterOnInput + + + + + Объект.СписокЛицензий.Описание + EnterOnInput + + + + + Объект.СписокЛицензий.КоличествоЛицензий + EnterOnInput + + + + + Объект.СписокЛицензий.ПинКод + EnterOnInput + + + + + Объект.СписокЛицензий.Активна + EnterOnInput + Auto + + + + + Объект.СписокЛицензий.ДатаАктивации + EnterOnInput + + + + + Объект.СписокЛицензий.РегистрационныйНомер + EnterOnInput + + + + + Объект.СписокЛицензий.КодПродукта + EnterOnInput + + + + + Объект.СписокЛицензий.ИмяФайлаЛицензии + EnterOnInput + + + + +
+ + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа подробно</v8:content> + </v8:item> + + + + ru + Группа подробно + + + true + Usual + false + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа страницы информация</v8:content> + </v8:item> + + + + ru + Группа страницы информация + + + TabsOnTop + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Информация</v8:content> + </v8:item> + + + + ru + Группа инфо + + + + + + Items.СписокЛицензий.CurrentData.Описание + + + + + Items.СписокЛицензий.CurrentData.КоличествоЛицензий + + + + + Items.СписокЛицензий.CurrentData.НомерЛицензии + + + + + Items.СписокЛицензий.CurrentData.ПинКод + + + + + Items.СписокЛицензий.CurrentData.КодПродукта + + + + + Items.СписокЛицензий.CurrentData.Активна + Auto + + + + + Items.СписокЛицензий.CurrentData.РегистрационныйНомер + + + + + Items.СписокЛицензий.CurrentData.ИмяФайлаЛицензии + + + + + + + true + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Данные активации</v8:content> + </v8:item> + + + + ru + Группа данные активации + + + + + + Items.СписокЛицензий.CurrentData.Фамилия + + + + + Items.СписокЛицензий.CurrentData.Имя + + + + + Items.СписокЛицензий.CurrentData.Отчество + + + + + Items.СписокЛицензий.CurrentData.EMail + + + + + Items.СписокЛицензий.CurrentData.Компания + + + + + Items.СписокЛицензий.CurrentData.Страна + + + + + Items.СписокЛицензий.CurrentData.Регион + + + + + Items.СписокЛицензий.CurrentData.Индекс + + + + + Items.СписокЛицензий.CurrentData.Район + + + + + Items.СписокЛицензий.CurrentData.Город + + + + + Items.СписокЛицензий.CurrentData.Улица + + + + + Items.СписокЛицензий.CurrentData.Дом + + + + + Items.СписокЛицензий.CurrentData.Строение + + + + + Items.СписокЛицензий.CurrentData.Квартира + + + + + Items.СписокЛицензий.CurrentData.ДатаАктивации + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Другое</v8:content> + </v8:item> + + + + ru + Группа другое + + + + + + Items.СписокЛицензий.CurrentData.ТекстоваяИнформация + true + true + + + + + + + + + +
+ + + + cfg:ExternalDataProcessorObject.ИнформацияОЛицензиях1С + + true + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Получить список лицензий</v8:content> + </v8:item> + + + + ru + Получить список лицензий + + + ПолучитьСписокЛицензий + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Получить полную информацию о лицензиях</v8:content> + </v8:item> + + + + ru + Получить полную информацию о лицензии + + + ПолучитьПолнуюИнформациюОЛицензии + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Проверка валидности лицензий</v8:content> + </v8:item> + + + + ru + Проверка валидности лицензий + + + ПроверкаВалидностиЛицензий + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Повторная активация лицензии</v8:content> + </v8:item> + + + + ru + Повторная активация лицензии + + + ПовторнаяАктивацияЛицензии + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Удалить лицензию</v8:content> + </v8:item> + + + + ru + Удалить лицензию + + + УдалитьЛицензию + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Активировать лицензию</v8:content> + </v8:item> + + + + ru + Активировать лицензию + + + АктивироватьЛицензию + + +
\ No newline at end of file diff --git a/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form/Module.bsl b/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form/Module.bsl new file mode 100644 index 0000000..6ecf117 --- /dev/null +++ b/src/ИнформацияОЛицензиях1С/Forms/Форма/Ext/Form/Module.bsl @@ -0,0 +1,502 @@ + + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + //УИ_ОбщегоНазначения.ФормаИнструментаПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка); +КонецПроцедуры + + +&НаСервере +Функция СтрокуВДату(СтрокаДата) + Попытка + СтрокаДата = Прав(СтрокаДата, 10); + МассивДата = Новый Массив; + МассивДата = РазложитьСтрокуВМассивПодстрок(СтрокаДата, "."); + Возврат Дата(Строка(МассивДата[2]) + Строка(МассивДата[1]) + Строка(МассивДата[0])); + Исключение + Возврат Дата(1899, 12, 30); + КонецПопытки; +КонецФункции + +// Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину. +// +// Параметры: +// Строка - Строка - текст с разделителями; +// Разделитель - Строка - разделитель строк текста, минимум 1 символ; +// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк. +// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией: +// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки +// включаются в результат. +// Е если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в +// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а +// при других разделителях результатом функции будет пустой массив. +// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок. +// +// Возвращаемое значение: +// Массив - массив строк. +// +// Примеры: +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые +// строки; +// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов; +// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив; +// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой); +// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой); +// +&НаСервере +Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено, + СокращатьНепечатаемыеСимволы = Ложь) Экспорт + + Результат = Новый Массив; + + // Для обеспечения обратной совместимости. + Если ПропускатьПустыеСтроки = Неопределено Тогда + ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь); + Если ПустаяСтрока(Строка) Тогда + Если Разделитель = " " Тогда + Результат.Добавить(""); + КонецЕсли; + Возврат Результат; + КонецЕсли; + КонецЕсли; + // + + Позиция = Найти(Строка, Разделитель); + Пока Позиция > 0 Цикл + Подстрока = Лев(Строка, Позиция - 1); + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Подстрока)); + Иначе + Результат.Добавить(Подстрока); + КонецЕсли; + КонецЕсли; + Строка = Сред(Строка, Позиция + СтрДлина(Разделитель)); + Позиция = Найти(Строка, Разделитель); + КонецЦикла; + + Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда + Если СокращатьНепечатаемыеСимволы Тогда + Результат.Добавить(СокрЛП(Строка)); + Иначе + Результат.Добавить(Строка); + КонецЕсли; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаСервере +Процедура ПолучитьСписокЛицензийНаСервере() + Объект.СписокЛицензий.Очистить(); + ФайлОтвет = ""; + ФайлОшибок = ""; + + ИмяВременногоФайлаCMD = SPS_СоздатьСистемныйСкрипт("ring license list", ФайлОтвет, ФайлОшибок); + SPS_ЗапуститьСистемныйСкрипт(ИмяВременногоФайлаCMD); + + SPS_ВыводФайлаОшибок(ФайлОшибок); + + фФайлОтвет = Новый Файл(ФайлОтвет); + Если НЕ фФайлОтвет.Существует() Тогда + ВызватьИсключение "Ошибка чтения результата"; + КонецЕсли; + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ФайлОтвет, SPS_КодировкаФайлаОтвета()); + стр = ""; + Пока стр <> Неопределено Цикл + стр = Текст.ПрочитатьСтроку(); + Сообщить(стр); + ПозицияИмениФайла = СтрНайти(стр, "(file name:"); + Если ПозицияИмениФайла > 0 Тогда + ПинЛицензия = Лев(стр, ПозицияИмениФайла - 1); + Иначе + ПинЛицензия = стр; + КонецЕсли; + + мПинЛицензия = РазложитьСтрокуВМассивПодстрок(ПинЛицензия, "-"); + Если мПинЛицензия.Количество() < 2 Тогда + Продолжить; + КонецЕсли; + ИмяФайлаЛицензии = Сред(стр, ПозицияИмениФайла + 13, 99); + ИмяФайлаЛицензии = СтрЗаменить(ИмяФайлаЛицензии, """)", ""); + нСтр = Объект.СписокЛицензий.Добавить(); + нСтр.ПинКод = мПинЛицензия[0]; + нСтр.НомерЛицензии = мПинЛицензия[1]; + нСтр.ИмяФайлаЛицензии = ИмяФайлаЛицензии; + нСтр.РучнойВвод = Ложь; + + //Сообщить(стр); + КонецЦикла; + Текст.Закрыть(); + УдалитьФайлы(ФайлОтвет); + УдалитьФайлы(ИмяВременногоФайлаCMD); + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьСписокЛицензий() + ПолучитьСписокЛицензийНаСервере(); +КонецПроцедуры + +&НаСервере +Функция ЗапросИнформацииОЛицезнии(ИмяЛицензии) + СтруктураОтвета = Новый Структура("Описание, Фамилия, Имя, Отчество, EMail, Компания, Страна, Индекс, Город, Регион, Район, Улица, Дом, Строение, Квартира, ДатаАктивации, РегистрационныйНомер, КодПродукта, ТекстоваяИнформация, КоличествоЛицензий"); + ФайлОтвет = ""; + ФайлОшибок = ""; + ИмяВременногоФайлаCMD = SPS_СоздатьСистемныйСкрипт(СтрШаблон("call ring license info --name %1", ИмяЛицензии), ФайлОтвет, ФайлОшибок); + SPS_ЗапуститьСистемныйСкрипт(ИмяВременногоФайлаCMD); + + SPS_ВыводФайлаОшибок(ФайлОшибок); + фФайлОтвет = Новый Файл(ФайлОтвет); + Если НЕ фФайлОтвет.Существует() Тогда + ВызватьИсключение "Ошибка чтения результата"; + КонецЕсли; + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ФайлОтвет, SPS_КодировкаФайлаОтвета()); + стр = ""; + Пока стр <> Неопределено Цикл + стр = Текст.ПрочитатьСтроку(); + Если СтрНайти(стр, "First name:") > 0 Тогда + СтруктураОтвета.Имя = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "First name:") - СтрДлина("First name:")); + ИначеЕсли СтрНайти(стр, "Middle name:") > 0 Тогда + СтруктураОтвета.Отчество = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Middle name:") - СтрДлина( + "Middle name:")); + ИначеЕсли СтрНайти(стр, "Last name:") > 0 Тогда + СтруктураОтвета.Фамилия = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Last name:") - СтрДлина("Last name:")); + ИначеЕсли СтрНайти(стр, "Email:") > 0 Тогда + СтруктураОтвета.Email = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Email:") - СтрДлина("Email:")); + ИначеЕсли СтрНайти(стр, "Company:") > 0 Тогда + СтруктураОтвета.Компания = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Company:") - СтрДлина("Company:")); + ИначеЕсли СтрНайти(стр, "Country:") > 0 Тогда + СтруктураОтвета.Страна = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Country:") - СтрДлина("Country:")); + ИначеЕсли СтрНайти(стр, "ZIP code:") > 0 Тогда + СтруктураОтвета.Индекс = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "ZIP code:") - СтрДлина("ZIP code:")); + ИначеЕсли СтрНайти(стр, "Town:") > 0 Тогда + СтруктураОтвета.Город = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Town:") - СтрДлина("Town:")); + ИначеЕсли СтрНайти(стр, "Region:") > 0 Тогда + СтруктураОтвета.Регион = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Region:") - СтрДлина("Region:")); + ИначеЕсли СтрНайти(стр, "District:") > 0 Тогда + СтруктураОтвета.Район = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "District:") - СтрДлина("District:")); + ИначеЕсли СтрНайти(стр, "Building:") > 0 Тогда + СтруктураОтвета.Строение = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Building:") - СтрДлина("Building:")); + ИначеЕсли СтрНайти(стр, "Apartment:") > 0 Тогда + СтруктураОтвета.Квартира = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Apartment:") - СтрДлина("Apartment:")); + ИначеЕсли СтрНайти(стр, "Street:") > 0 Тогда + СтруктураОтвета.Улица = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Street:") - СтрДлина("Street:")); + ИначеЕсли СтрНайти(стр, "House:") > 0 Тогда + СтруктураОтвета.Дом = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "House:") - СтрДлина("House:")); + ИначеЕсли СтрНайти(стр, "Description:") > 0 Тогда + СтруктураОтвета.Описание = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Description:") - СтрДлина( + "Description:")); + Если СтрНайти(стр, " рабочих мест") Тогда + тСтр = Лев(стр, СтрНайти(стр, " рабочих мест")); + мСтр = РазложитьСтрокуВМассивПодстрок(тСтр, " "); + СтруктураОтвета.КоличествоЛицензий = Число(мСтр[мСтр.Количество() - 1]); + КонецЕсли; + ИначеЕсли СтрНайти(стр, "License generation date:") > 0 Тогда + СтруктураОтвета.ДатаАктивации = СтрокуВДату(Прав(стр, СтрДлина(стр) - СтрНайти(стр, + "License generation date:") - СтрДлина("License generation date:"))); + ИначеЕсли СтрНайти(стр, "Distribution kit registration number:") > 0 Тогда + СтруктураОтвета.РегистрационныйНомер = Прав(стр, СтрДлина(стр) - СтрНайти(стр, + "Distribution kit registration number:") - СтрДлина("Distribution kit registration number:")); + ИначеЕсли СтрНайти(стр, "Product code:") > 0 Тогда + СтруктураОтвета.КодПродукта = Прав(стр, СтрДлина(стр) - СтрНайти(стр, "Product code:") - СтрДлина( + "Product code:")); + КонецЕсли; + КонецЦикла; + Текст.Закрыть(); + УдалитьФайлы(ФайлОтвет); + УдалитьФайлы(ИмяВременногоФайлаCMD); + Возврат СтруктураОтвета; + +КонецФункции + +&НаСервере +Функция ЗапросВалидностиЛицезнии(ИмяЛицензии) + ФайлОтвет = ""; + ФайлОшибок = ""; + ИмяВременногоФайлаCMD = SPS_СоздатьСистемныйСкрипт("call ring license validate --name " + ИмяЛицензии, ФайлОтвет, ФайлОшибок); + SPS_ЗапуститьСистемныйСкрипт(ИмяВременногоФайлаCMD); + + SPS_ВыводФайлаОшибок(ФайлОшибок); + фФайлОтвет = Новый Файл(ФайлОтвет); + Если НЕ фФайлОтвет.Существует() Тогда + ВызватьИсключение "Ошибка чтения результата"; + КонецЕсли; + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ФайлОтвет, SPS_КодировкаФайлаОтвета()); + стр = Текст.Прочитать(); + СтруктураОтвета = Новый Структура("Активна, ТекстоваяИнформация"); + Если СтрНайти(стр, "License check passed for the following license:") Тогда + СтруктураОтвета.Активна = Истина; + Иначе + СтруктураОтвета.Активна = Ложь; + КонецЕсли; + СтруктураОтвета.ТекстоваяИнформация = стр; + Текст.Закрыть(); + УдалитьФайлы(ФайлОтвет); + УдалитьФайлы(ИмяВременногоФайлаCMD); + Возврат СтруктураОтвета; + +КонецФункции +&НаКлиенте +Процедура ПолучитьПолнуюИнформациюОЛицензии() + КоличествоЛицензий = Объект.СписокЛицензий.Количество(); + значениеИндикатора = 0; + Счетчик = 1; + Для Каждого стр Из Объект.СписокЛицензий Цикл + ТекстСообщения = "Получение информации о лицензиях (" + Строка(КоличествоЛицензий) + " шт.)"; + Пояснение = "Запрос информации о лицензии " + стр.НомерЛицензии + ". Всего: " + КоличествоЛицензий; + Картинка = БиблиотекаКартинок.Провести; + значениеИндикатора = 100 / (КоличествоЛицензий / Счетчик); + Состояние(ТекстСообщения, значениеИндикатора, Пояснение, Картинка); + СтруктураЗн = ЗапросИнформацииОЛицезнии(стр.ПинКод + "-" + стр.НомерЛицензии); + ЗаполнитьЗначенияСвойств(стр, СтруктураЗн); + Счетчик = Счетчик + 1; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверкаВалидностиЛицензий() + КоличествоЛицензий = Объект.СписокЛицензий.Количество(); + значениеИндикатора = 0; + Счетчик = 1; + Для Каждого стр Из Объект.СписокЛицензий Цикл + ТекстСообщения = "Получение информации о лицензиях (" + Строка(КоличествоЛицензий) + " шт.)"; + Пояснение = "Запрос информации о лицензии " + стр.НомерЛицензии + ". Всего: " + КоличествоЛицензий; + Картинка = БиблиотекаКартинок.Провести; + значениеИндикатора = 100 / (КоличествоЛицензий / Счетчик); + Состояние(ТекстСообщения, значениеИндикатора, Пояснение, Картинка); + СтруктураЗн = ЗапросВалидностиЛицезнии(стр.ПинКод + "-" + стр.НомерЛицензии); + ЗаполнитьЗначенияСвойств(стр, СтруктураЗн); + Счетчик = Счетчик + 1; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПовторнаяАктивацияЛицензииНаСервере(ПереданныеПараметры) + СтруктураПараметров = Новый Структура(" НовыйПинКод,ПинКод, Описание, Фамилия, Имя, Отчество, EMail, Компания, Страна, Индекс, Город, Улица, Дом, ДатаАктивации, РегистрационныйНомер, КодПродукта, ТекстоваяИнформация, КоличествоЛицензий"); + + ФайлОтвет = ""; + ФайлОшибок = ""; + ИмяВременногоФайлаCMD = SPS_СоздатьСистемныйСкрипт( + "call ring license activate" + ?(ЗначениеЗаполнено( + ПереданныеПараметры.Имя), " --first-name " + ПереданныеПараметры.Имя, "") + ?(ЗначениеЗаполнено( + ПереданныеПараметры.Отчество), " --middle-name " + ПереданныеПараметры.Отчество, "") + ?(ЗначениеЗаполнено( + ПереданныеПараметры.Фамилия), " --last-name " + ПереданныеПараметры.Фамилия, "") + ?(ЗначениеЗаполнено( + ПереданныеПараметры.EMail), " --email " + ПереданныеПараметры.EMail, "") + ?(ЗначениеЗаполнено( + ПереданныеПараметры.Компания), " --company " + Символ(34) + СтрЗаменить(ПереданныеПараметры.Компания, Символ( + 34), "") + Символ(34), "") + ?(ЗначениеЗаполнено(ПереданныеПараметры.Страна), " --country " + Символ(34) + + ПереданныеПараметры.Страна + Символ(34), "") + ?(ЗначениеЗаполнено(ПереданныеПараметры.Индекс), + " --zip-code " + ПереданныеПараметры.Индекс, "") + ?(ЗначениеЗаполнено(ПереданныеПараметры.Город), " --town " + + Символ(34) + ПереданныеПараметры.Город + Символ(34), "") + ?(ЗначениеЗаполнено(ПереданныеПараметры.Регион), + " --region " + Символ(34) + ПереданныеПараметры.Регион + Символ(34), "") + ?(ЗначениеЗаполнено( + ПереданныеПараметры.Район), " --district " + Символ(34) + ПереданныеПараметры.Район + Символ(34), "") + ?( + ЗначениеЗаполнено(ПереданныеПараметры.Улица), " --street " + Символ(34) + ПереданныеПараметры.Улица + Символ( + 34), "") + ?(ЗначениеЗаполнено(ПереданныеПараметры.Дом), " --house " + Символ(34) + ПереданныеПараметры.Дом + + Символ(34), "") + ?(ЗначениеЗаполнено(ПереданныеПараметры.Строение), " --building " + Символ(34) + + ПереданныеПараметры.Строение + Символ(34), "") + ?(ЗначениеЗаполнено(ПереданныеПараметры.Квартира), + " --apartment " + Символ(34) + ПереданныеПараметры.Квартира + Символ(34), "") + " --serial " + + ПереданныеПараметры.НомерЛицензии + " --pin " + ПереданныеПараметры.НовыйПинКод + " --previous-pin " + + ПереданныеПараметры.ПинКод + " --validate", ФайлОтвет, ФайлОшибок + ); + SPS_ЗапуститьСистемныйСкрипт(ИмяВременногоФайлаCMD); + + SPS_ВыводФайлаОшибок(ФайлОшибок); + фФайлОтвет = Новый Файл(ФайлОтвет); + Если НЕ фФайлОтвет.Существует() Тогда + ВызватьИсключение "Ошибка чтения результата"; + КонецЕсли; + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ФайлОтвет, SPS_КодировкаФайлаОтвета()); + стр = Текст.Прочитать(); + Сообщить(стр); + Текст.Закрыть(); + УдалитьФайлы(ФайлОтвет); + УдалитьФайлы(ИмяВременногоФайлаCMD); +КонецПроцедуры + +&НаСервере +Процедура ПослеВводаСтрокиПинкода(ПолученноеЗначение, ПереданныеПараметры) Экспорт + ВведенныйКод = ПолученноеЗначение; + Если ПустаяСтрока(ВведенныйКод) Тогда + Отказ = Истина; + Иначе + ПереданныеПараметры.НовыйПинКод = ВведенныйКод; + ПовторнаяАктивацияЛицензииНаСервере(ПереданныеПараметры); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПовторнаяАктивацияЛицензии(Команда) + ТекущаяСтрока = Элементы.СписокЛицензий.ТекущиеДанные; + СтруктураПараметров = Новый Структура(" НомерЛицензии,НовыйПинКод,ПинКод, Описание, Фамилия, Имя, Отчество, EMail, Компания, Страна, Индекс, Регион, Район,Город, Улица, Дом, Корпус, Квартира, Строение, ДатаАктивации, РегистрационныйНомер, КодПродукта, ТекстоваяИнформация, КоличествоЛицензий"); + ЗаполнитьЗначенияСвойств(СтруктураПараметров, ТекущаяСтрока); + Оповещение = Новый ОписаниеОповещения("ПослеВводаСтрокиПинкода", ЭтотОбъект, СтруктураПараметров); + + ПоказатьВводСтроки( + Оповещение, , // пропускаем начальное значение + + "Введите пин-код для лицензии " + ТекущаяСтрока["НомерЛицензии"], 0, // (необ.) длина + + Ложь // (необ.) многострочность + ); +КонецПроцедуры + +&НаСервере +Процедура УдалитьЛицензиюНаСервере(ИмяЛицензии) + ФайлОтвет = ""; + ФайлОшибок = ""; + ИмяВременногоФайлаCMD = SPS_СоздатьСистемныйСкрипт("call ring license remove --name " + ИмяЛицензии, ФайлОтвет, ФайлОшибок); + SPS_ЗапуститьСистемныйСкрипт(ИмяВременногоФайлаCMD); + + SPS_ВыводФайлаОшибок(ФайлОшибок); + фФайлОтвет = Новый Файл(ФайлОтвет); + Если НЕ фФайлОтвет.Существует() Тогда + ВызватьИсключение "Ошибка чтения результата"; + КонецЕсли; + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ФайлОтвет, SPS_КодировкаФайлаОтвета()); + стр = Текст.Прочитать(); + Сообщить(стр); + Текст.Закрыть(); + УдалитьФайлы(ФайлОтвет); + УдалитьФайлы(ИмяВременногоФайлаCMD); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьЛицензию(Команда) + ТекущаяСтрока = Элементы.СписокЛицензий.ТекущиеДанные; + УдалитьЛицензиюНаСервере(ТекущаяСтрока["ПинКод"] + "-" + ТекущаяСтрока["НомерЛицензии"]); + Объект.СписокЛицензий.Удалить(Элементы.СписокЛицензий.ТекущаяСтрока); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ПодключитьОбработчикОжидания("ЗагрузитьДанные", 1, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьДанные() + ПолучитьСписокЛицензий(); + ПолучитьПолнуюИнформациюОЛицензии(); + //ПроверкаВалидностиЛицензий(); +КонецПроцедуры + +&НаКлиенте +Процедура СписокЛицензийПриАктивизацииСтроки(Элемент) + Попытка + Элементы.ГруппаДанныеАктивации.ТолькоПросмотр = Элементы.СписокЛицензий.ТекущиеДанные["Активна"]; + Элементы.СписокЛицензийАктивироватьЛицензию.Доступность = Не Элементы.СписокЛицензий.ТекущиеДанные["Активна"]; + Исключение + КонецПопытки; +КонецПроцедуры + +&НаКлиенте +Процедура СписокЛицензийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) + // Вставить содержимое обработчика. +КонецПроцедуры + +&НаКлиенте +Процедура АктивироватьЛицензию(Команда) + ПараметрыОткрытия = Новый Структура("Фамилия, Имя, Отчество, EMail, Компания, Страна, Индекс, Регион, Район,Город, Улица, Дом, Корпус, Квартира, Строение"); + ТекущаяСтрока = Элементы.СписокЛицензий.ТекущиеДанные; + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, ТекущаяСтрока); + ОткрытьФорму("ВнешняяОбработка.ИнформацияОЛицензиях1С.Форма.ФормаАктивацииЛицензии", ПараметрыОткрытия); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция SPS_ЭтоWindows() + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция SPS_КодировкаФайлаОтвета() + Возврат ?(SPS_ЭтоWindows(), Неопределено, КодировкаТекста.UTF8); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция SPS_СоздатьСистемныйСкрипт(Знач Команда, ФайлОтвет="", ФайлОшибок="") + Это_Windows = SPS_ЭтоWindows(); + ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла(?(Это_Windows, "cmd", "sh")); + + Если ПустаяСтрока(ФайлОтвет) Тогда + ФайлОтвет = ПолучитьИмяВременногоФайла("txt"); + КонецЕсли; + Если ПустаяСтрока(ФайлОшибок) Тогда + ФайлОшибок = ПолучитьИмяВременногоФайла("log"); + КонецЕсли; + + ТекстСкрипта = Новый ЗаписьТекста; + ТекстСкрипта.Открыть(ИмяФайлаСкрипта, ?(Это_Windows, КодировкаТекста.ANSI, КодировкаТекста.UTF8)); + + Если НЕ Это_Windows Тогда + // добавление Шебанг + ТекстСкрипта.ЗаписатьСтроку("#!/bin/sh"); + ТекстСкрипта.ЗаписатьСтроку(""); + + // исправление кодировки вывода (для парсинга) + ТекстСкрипта.ЗаписатьСтроку("export LC_ALL=en_US.UTF8"); + + // избавляемся от call + Команда = СтрЗаменить(Команда, "call ring", "ring"); + КонецЕсли; + + // добавляем перенаправления вывода + Команда = СтрШаблон("%1 >%2 2>%3", Команда, ФайлОтвет, ФайлОшибок); + + ТекстСкрипта.ЗаписатьСтроку(Команда); + ТекстСкрипта.Закрыть(); + + Возврат ИмяФайлаСкрипта; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура SPS_ЗапуститьСистемныйСкрипт(Знач ИмяФайлаСкрипта) + Это_Windows = SPS_ЭтоWindows(); + + // добавляем интерпретатор чтобы запускать скрипт без "chmod +x" + Если НЕ Это_Windows Тогда + ИмяФайлаСкрипта = СтрШаблон("/bin/sh %1", ИмяФайлаСкрипта); + КонецЕсли; + + ЗапуститьПриложение(ИмяФайлаСкрипта, КаталогВременныхФайлов(), Истина); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура SPS_ВыводФайлаОшибок(Знач ИмяФайлаОшибок) + фФайл = Новый Файл(ИмяФайлаОшибок); + Если НЕ фФайл.Существует() Тогда + Возврат; + КонецЕсли; + + Чтение = Новый ЧтениеТекста(ИмяФайлаОшибок, КодировкаТекста.ANSI); + Текст = Чтение.Прочитать(); + Чтение.Закрыть(); + + Попытка + УдалитьФайлы(ИмяФайлаОшибок); + Исключение + ; + КонецПопытки; + + Если ПустаяСтрока(СокрЛП(Текст)) Тогда + Возврат; + КонецЕсли; + + Сообщить(СтрШаблон("Ошибки: %1%2", Символы.ПС, Текст)); +КонецПроцедуры diff --git a/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии.xml b/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии.xml new file mode 100644 index 0000000..8c1f00b --- /dev/null +++ b/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии.xml @@ -0,0 +1,22 @@ + + +
+ + ФормаАктивацииЛицензии + + + ru + Форма активации лицензии + + + + Managed + false + + PlatformApplication + MobilePlatformApplication + + + +
+
\ No newline at end of file diff --git a/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии/Ext/Form.xml b/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии/Ext/Form.xml new file mode 100644 index 0000000..bb57d75 --- /dev/null +++ b/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии/Ext/Form.xml @@ -0,0 +1,445 @@ + +
+ + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Активация лицензии</v8:content> + </v8:item> + + LockOwnerWindow + None + + + ПриСозданииНаСервере + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа лицензия</v8:content> + </v8:item> + + + + ru + Группа лицензия + + + Usual + StrongSeparation + false + + + + НомерЛицензии + + + + + ПинКод + + + + + ПредыдущийПинКод + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Владелец лицензии</v8:content> + </v8:item> + + + + ru + Группа владелец лицензии + + + Usual + StrongSeparation + + + + Компания + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Организация</v8:content> + </v8:item> + + + + + + Фамилия + + + + + Имя + + + + + Отчество + + + + + email + + + + + Страна + + + + + Регион + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Регион/Область</v8:content> + </v8:item> + + + + + + Индекс + + + + + Район + + + + + Город + + + + + Улица + + + + + Дом + + + + + Строение + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Строение/Корпус</v8:content> + </v8:item> + + + + + + Квартира + + + + + + + + + + + cfg:ExternalDataProcessorObject.ИнформацияОЛицензиях1С + + true + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Фамилия</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Имя</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отчество</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Email</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Компания</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Страна</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Индекс</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Регион</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Район</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Город</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Улица</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дом</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Строение</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Квартира</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Номер лицензии</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пин код</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Предыдущий пин код</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Активировать</v8:content> + </v8:item> + + + + ru + Активировать + + + Активировать + + + \ No newline at end of file diff --git a/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии/Ext/Form/Module.bsl b/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии/Ext/Form/Module.bsl new file mode 100644 index 0000000..ac897a8 --- /dev/null +++ b/src/ИнформацияОЛицензиях1С/Forms/ФормаАктивацииЛицензии/Ext/Form/Module.bsl @@ -0,0 +1,142 @@ +&НаСервере +Функция АктивироватьНаСервере() + + ФайлОтвет = ""; + ФайлОшибок = ""; + ИмяВременногоФайлаCMD = SPS_СоздатьСистемныйСкрипт( + "call ring license activate" + ?(ЗначениеЗаполнено(Имя), + " --first-name " + Имя, "") + ?(ЗначениеЗаполнено(Отчество), " --middle-name " + Отчество, "") + ?( + ЗначениеЗаполнено(Фамилия), " --last-name " + Фамилия, "") + " --email " + EMail + ?(ЗначениеЗаполнено( + Компания), " --company " + Символ(34) + СтрЗаменить(Компания, Символ(34), "") + Символ(34), "") + " --country " + + Символ(34) + Страна + Символ(34) + " --zip-code " + Индекс + " --town " + Символ(34) + Город + Символ(34) + ?( + ЗначениеЗаполнено(Регион), " --region " + Символ(34) + Регион + Символ(34), "") + ?(ЗначениеЗаполнено(Район), + " --district " + Символ(34) + Район + Символ(34), "") + ?(ЗначениеЗаполнено(Улица), " --street " + Символ(34) + + Улица + Символ(34), "") + ?(ЗначениеЗаполнено(Дом), " --house " + Символ(34) + Дом + Символ(34), "") + ?( + ЗначениеЗаполнено(Строение), " --building " + Символ(34) + Строение + Символ(34), "") + ?(ЗначениеЗаполнено( + Квартира), " --apartment " + Символ(34) + Квартира + Символ(34), "") + " --serial " + НомерЛицензии + " --pin " + + ПинКод + ?(ЗначениеЗаполнено(ПредыдущийПинКод), " --previous-pin " + ПредыдущийПинКод, "") + " --validate", ФайлОтвет, ФайлОшибок + ); + SPS_ЗапуститьСистемныйСкрипт(ИмяВременногоФайлаCMD); + + SPS_ВыводФайлаОшибок(ФайлОшибок); + фФайлОтвет = Новый Файл(ФайлОтвет); + Если НЕ фФайлОтвет.Существует() Тогда + ВызватьИсключение "Ошибка чтения результата"; + КонецЕсли; + + Текст = Новый ЧтениеТекста; + Текст.Открыть(ФайлОтвет, SPS_КодировкаФайлаОтвета()); + стр = Текст.Прочитать(); + Сообщить(стр); + Текст.Закрыть(); + УдалитьФайлы(ФайлОтвет); + УдалитьФайлы(ИмяВременногоФайлаCMD); + Возврат стр; +КонецФункции + +&НаКлиенте +Процедура Активировать(Команда) + АктивироватьНаСервере(); +КонецПроцедуры + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Фамилия = Параметры.Фамилия; + Имя = Параметры.Имя; + Отчество = Параметры.Отчество; + Компания = Параметры.Компания; + email = Параметры.email; + Страна = Параметры.Страна; + Индекс = Параметры.Индекс; + Регион = Параметры.Регион; + Район = Параметры.Район; + Город = Параметры.Город; + Улица = Параметры.Улица; + Дом = Параметры.Дом; + Строение = Параметры.Строение; + Квартира = Параметры.Квартира; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция SPS_ЭтоWindows() + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + Или СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция SPS_КодировкаФайлаОтвета() + Возврат ?(SPS_ЭтоWindows(), Неопределено, КодировкаТекста.UTF8); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция SPS_СоздатьСистемныйСкрипт(Знач Команда, ФайлОтвет="", ФайлОшибок="") + Это_Windows = SPS_ЭтоWindows(); + ИмяФайлаСкрипта = ПолучитьИмяВременногоФайла(?(Это_Windows, "cmd", "sh")); + + Если ПустаяСтрока(ФайлОтвет) Тогда + ФайлОтвет = ПолучитьИмяВременногоФайла("txt"); + КонецЕсли; + Если ПустаяСтрока(ФайлОшибок) Тогда + ФайлОшибок = ПолучитьИмяВременногоФайла("log"); + КонецЕсли; + + ТекстСкрипта = Новый ЗаписьТекста; + ТекстСкрипта.Открыть(ИмяФайлаСкрипта, ?(Это_Windows, КодировкаТекста.ANSI, КодировкаТекста.UTF8)); + + Если НЕ Это_Windows Тогда + // добавление Шебанг + ТекстСкрипта.ЗаписатьСтроку("#!/bin/sh"); + ТекстСкрипта.ЗаписатьСтроку(""); + + // исправление кодировки вывода (для парсинга) + ТекстСкрипта.ЗаписатьСтроку("export LC_ALL=en_US.UTF8"); + + // избавляемся от call + Команда = СтрЗаменить(Команда, "call ring", "ring"); + КонецЕсли; + + // добавляем перенаправления вывода + Команда = СтрШаблон("%1 >%2 2>%3", Команда, ФайлОтвет, ФайлОшибок); + + ТекстСкрипта.ЗаписатьСтроку(Команда); + ТекстСкрипта.Закрыть(); + + Возврат ИмяФайлаСкрипта; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура SPS_ЗапуститьСистемныйСкрипт(Знач ИмяФайлаСкрипта) + Это_Windows = SPS_ЭтоWindows(); + + // добавляем интерпретатор чтобы запускать скрипт без "chmod +x" + Если НЕ Это_Windows Тогда + ИмяФайлаСкрипта = СтрШаблон("/bin/sh %1", ИмяФайлаСкрипта); + КонецЕсли; + + ЗапуститьПриложение(ИмяФайлаСкрипта, КаталогВременныхФайлов(), Истина); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура SPS_ВыводФайлаОшибок(Знач ИмяФайлаОшибок) + фФайл = Новый Файл(ИмяФайлаОшибок); + Если НЕ фФайл.Существует() Тогда + Возврат; + КонецЕсли; + + Чтение = Новый ЧтениеТекста(ИмяФайлаОшибок, КодировкаТекста.ANSI); + Текст = Чтение.Прочитать(); + Чтение.Закрыть(); + + Попытка + УдалитьФайлы(ИмяФайлаОшибок); + Исключение + ; + КонецПопытки; + + Если ПустаяСтрока(СокрЛП(Текст)) Тогда + Возврат; + КонецЕсли; + + Сообщить(СтрШаблон("Ошибки: %1%2", Символы.ПС, Текст)); +КонецПроцедуры