You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-08-10 22:41:43 +02:00
Оптимизация CLI: замена #Использовать на динамическое подключение
This commit is contained in:
@@ -1,337 +1,371 @@
|
||||
#Использовать oint
|
||||
#Использовать "../../tools"
|
||||
#Использовать "../../help"
|
||||
#Использовать "../../data"
|
||||
#Использовать "../../env"
|
||||
|
||||
Перем Отладка; // Флаг вывода отладочной информации
|
||||
Перем Тестирование; // Флаг отключения отправки данных после обработки
|
||||
|
||||
Перем Парсер; // Объект парсера входящих данных
|
||||
Перем ОбъектОПИ; // Объект работы с методами ОПИ
|
||||
|
||||
Перем ФайлВывода; // Путь перенаправления вывода в файл
|
||||
|
||||
Перем ТаблицаПараметров; // Таблица параметров текущей библиотеки
|
||||
Перем ТекущаяКоманда; // Имя текущей команды
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#Область Основные
|
||||
|
||||
Процедура ОсновнойОбработчик()
|
||||
|
||||
Отладка = Ложь;
|
||||
Тестирование = Ложь;
|
||||
|
||||
Парсер = Новый CommandLineArgumentParser();
|
||||
ОбъектОПИ = Новый LibraryComposition();
|
||||
|
||||
ОпределитьТекущуюКоманду();
|
||||
СформироватьКоманду();
|
||||
|
||||
Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
|
||||
ВыполнитьОбработкуКоманды(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОпределитьТекущуюКоманду()
|
||||
|
||||
Если АргументыКоманднойСтроки.Количество() > 0 Тогда
|
||||
ТекущаяКоманда = АргументыКоманднойСтроки[0];
|
||||
Иначе
|
||||
ТекущаяКоманда = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СформироватьКоманду()
|
||||
|
||||
Если ТекущаяКоманда = Неопределено Тогда
|
||||
|
||||
ВсеКоманды = ОбъектОПИ.ПолучитьСоответствиеКомандМодулей();
|
||||
Версия = ОбъектОПИ.ПолучитьВерсию();
|
||||
|
||||
Help.ВывестиНачальнуюСтраницу(ВсеКоманды, Версия);
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Команда = Парсер.ОписаниеКоманды(ТекущаяКоманда);
|
||||
ТаблицаПараметров = ОбъектОПИ.ПолучитьСостав(ТекущаяКоманда);
|
||||
|
||||
Если Не ТаблицаПараметров = Неопределено Тогда
|
||||
|
||||
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод");
|
||||
|
||||
ДобавитьПараметрыКоманды(Парсер, Команда);
|
||||
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--help");
|
||||
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--debug");
|
||||
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--test");
|
||||
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "--out");
|
||||
|
||||
Парсер.ДобавитьКоманду(Команда);
|
||||
|
||||
Иначе
|
||||
Help.ВывестиСообщениеИсключения("Команда", ФайлВывода);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыполнитьОбработкуКоманды(Знач Данные)
|
||||
|
||||
ТекущаяКоманда = Данные["Команда"];
|
||||
Параметры = Данные["ЗначенияПараметров"];
|
||||
Вывод = "";
|
||||
|
||||
УстановитьРежимОтладки(Параметры);
|
||||
УстановитьРежимТеста(Параметры);
|
||||
УстановитьФайлВывода(Параметры);
|
||||
ВывестиДопИнформацию(Параметры);
|
||||
|
||||
Попытка
|
||||
|
||||
Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Параметры);
|
||||
|
||||
ОбработатьВыводJSON(Вывод);
|
||||
СообщитьРезультат(Вывод, СтатусСообщения.Внимание);
|
||||
|
||||
Исключение
|
||||
ОбработатьОшибочныйВывод(Вывод, ИнформацияОбОшибке());
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьРезультатОбработки(Знач Команда, Знач Параметры)
|
||||
|
||||
Метод = Параметры["Метод"];
|
||||
Ответ = "Функция вернула пустое значение";
|
||||
|
||||
ЧислоСтандартныхПараметров = 4;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Метод) Или Метод = "--help" Тогда
|
||||
Help.ВывестиСправкуПоМетодам(Команда, ТаблицаПараметров);
|
||||
КонецЕсли;
|
||||
|
||||
Если Параметры.Количество() = ЧислоСтандартныхПараметров Или Параметры["--help"] Тогда
|
||||
|
||||
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
|
||||
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
|
||||
|
||||
Если Не ЗначениеЗаполнено(ПараметрыМетода) Тогда
|
||||
Help.ВывестиСообщениеИсключения("Метод", ФайлВывода);
|
||||
КонецЕсли;
|
||||
|
||||
Help.ВывестиСправкуПоПараметрам(ПараметрыМетода);
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураВыполнения = ОбъектОПИ.СформироватьСтрокуВызоваМетода(Параметры, Команда, Метод);
|
||||
|
||||
Если СтруктураВыполнения["Ошибка"] Тогда
|
||||
Help.ВывестиСообщениеИсключения(СтруктураВыполнения["Результат"], ФайлВывода);
|
||||
Иначе
|
||||
ТекстВыполнения = СтруктураВыполнения["Результат"];
|
||||
КонецЕсли;
|
||||
|
||||
Если Отладка Или Тестирование Тогда
|
||||
Сообщить(ТекстВыполнения, СтатусСообщения.Внимание);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Тестирование Тогда
|
||||
Выполнить(ТекстВыполнения);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Вспомогательные
|
||||
|
||||
Процедура ДобавитьПараметрыКоманды(Парсер, Команда);
|
||||
|
||||
Параметр_ = "Параметр";
|
||||
|
||||
ТаблицаДляИспользования = ТаблицаПараметров.Скопировать(, Параметр_);
|
||||
ТаблицаДляИспользования.Свернуть(Параметр_);
|
||||
|
||||
МассивПараметров = ТаблицаДляИспользования.ВыгрузитьКолонку(Параметр_);
|
||||
|
||||
Для Каждого Параметр Из МассивПараметров Цикл
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьВыводJSON(Вывод)
|
||||
|
||||
Если ПустойВывод(Вывод) Тогда
|
||||
Вывод = Новый Структура;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Вывод) = Тип("Структура")
|
||||
Или ТипЗнч(Вывод) = Тип("Соответствие")
|
||||
Или ТипЗнч(Вывод) = Тип("Массив") Тогда
|
||||
|
||||
Вывод = OPI_Инструменты.JSONСтрокой(Вывод, , , Ложь);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьРежимОтладки(Знач Параметры)
|
||||
|
||||
Если Параметры["--debug"] Тогда
|
||||
Отладка = Истина;
|
||||
ПеременнаяСреды = "YES";
|
||||
Иначе
|
||||
Отладка = Ложь;
|
||||
ПеременнаяСреды = "NO"
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьПеременнуюСреды("OINT_DEBUG", ПеременнаяСреды);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьРежимТеста(Знач Параметры)
|
||||
|
||||
Если Параметры["--test"] Тогда
|
||||
Тестирование = Истина;
|
||||
Иначе
|
||||
Тестирование = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьФайлВывода(Знач Параметры)
|
||||
|
||||
Вывод = Параметры["--out"];
|
||||
|
||||
Если ЗначениеЗаполнено(Вывод) Тогда
|
||||
ФайлВывода = Вывод;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиДопИнформацию(Параметры)
|
||||
|
||||
Если Отладка Или Тестирование Тогда
|
||||
|
||||
Для каждого ВводныйПараметр Из Параметры Цикл
|
||||
Сообщить(ВводныйПараметр.Ключ + " : " + ВводныйПараметр.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьОшибочныйВывод(Вывод, ИнформацияОбОшибке)
|
||||
|
||||
Информация = "";
|
||||
Если ЗначениеЗаполнено(Вывод) Тогда
|
||||
|
||||
Если Отладка Или Тестирование Тогда
|
||||
Информация = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
КонецЕсли;
|
||||
|
||||
СообщитьРезультат(Вывод);
|
||||
Иначе
|
||||
|
||||
Если Отладка Или Тестирование Тогда
|
||||
Информация = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
Иначе
|
||||
Информация = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Help.ВывестиСообщениеИсключения(Информация, ФайлВывода);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СообщитьРезультат(Знач Текст, Знач Статус = "")
|
||||
|
||||
Если Не ЗначениеЗаполнено(Статус) Тогда
|
||||
Статус = СтатусСообщения.БезСтатуса;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(ФайлВывода) Тогда
|
||||
Текст = ЗаписатьЗначениеВФайл(Текст, ФайлВывода);
|
||||
ИначеЕсли ТипЗнч(Текст) = Тип("ДвоичныеДанные") Тогда
|
||||
Текст = "Похоже, что в ответе пришли двоичные данные! "
|
||||
+ "В следующий раз используйте опцию --out для указания пути их сохранения";
|
||||
Статус = СтатусСообщения.Информация;
|
||||
Иначе
|
||||
Текст = Строка(Текст);
|
||||
КонецЕсли;
|
||||
|
||||
Сообщить(Текст, Статус);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЗаписатьЗначениеВФайл(Знач Значение, Знач Путь)
|
||||
|
||||
СтандартнаяЕдиница = 1024;
|
||||
ЕдиницаДанных = СтандартнаяЕдиница * СтандартнаяЕдиница;
|
||||
Значение = ?(ТипЗнч(Значение) = Тип("ДвоичныеДанные"), Значение, Строка(Значение));
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Строка") Тогда
|
||||
|
||||
ВозможныйФайл = Новый Файл(Значение);
|
||||
|
||||
Если ВозможныйФайл.Существует() Тогда
|
||||
Путь = Значение;
|
||||
Иначе
|
||||
Значение = ПолучитьДвоичныеДанныеИзСтроки(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
Значение.Записать(Путь);
|
||||
КонецЕсли;
|
||||
|
||||
ЗаписанныйФайл = Новый Файл(Путь);
|
||||
|
||||
Если ЗаписанныйФайл.Существует() Тогда
|
||||
Возврат "Файл размером "
|
||||
+ Строка(Окр(ЗаписанныйФайл.Размер() / ЕдиницаДанных, 3))
|
||||
+ " МБ был записан в "
|
||||
+ ЗаписанныйФайл.ПолноеИмя;
|
||||
Иначе
|
||||
ВызватьИсключение "Файл не был записан! Используйте флаг --debug для получения дополнительной информации";
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПустойВывод(Вывод)
|
||||
|
||||
Если ТипЗнч(Вывод) = Тип("ДвоичныеДанные") Тогда
|
||||
Возврат Вывод.Размер() = 0;
|
||||
Иначе
|
||||
Возврат Не ЗначениеЗаполнено(Вывод);
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Попытка
|
||||
ОсновнойОбработчик();
|
||||
Исключение
|
||||
|
||||
Если Отладка Тогда
|
||||
Информация = ОписаниеОшибки();
|
||||
Иначе
|
||||
Информация = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
|
||||
КонецЕсли;
|
||||
|
||||
Help.ВывестиСообщениеИсключения(Информация, ФайлВывода);
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
Перем Отладка; // Флаг вывода отладочной информации
|
||||
Перем Тестирование; // Флаг отключения отправки данных после обработки
|
||||
|
||||
Перем Парсер; // Объект парсера входящих данных
|
||||
Перем ОбъектОПИ; // Объект работы с методами ОПИ
|
||||
Перем Справка; // Объект вывода справочной информации
|
||||
|
||||
Перем ФайлВывода; // Путь перенаправления вывода в файл
|
||||
|
||||
Перем ТаблицаПараметров; // Таблица параметров текущей библиотеки
|
||||
Перем ТекущаяКоманда; // Имя текущей команды
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#Область Основные
|
||||
|
||||
Процедура ОсновнойОбработчик()
|
||||
|
||||
Отладка = Ложь;
|
||||
Тестирование = Ложь;
|
||||
|
||||
ТекущийКаталог = ТекущийСценарий().Каталог;
|
||||
ТекущийКаталог = СтрЗаменить(ТекущийКаталог, "\", "/");
|
||||
|
||||
ЧастиПути = СтрРазделить(ТекущийКаталог, "/");
|
||||
ЧастиПути.Удалить(ЧастиПути.ВГраница());
|
||||
ЧастиПути.Удалить(ЧастиПути.ВГраница());
|
||||
|
||||
ШаблонДоступа = СтрСоединить(ЧастиПути, "/") + "/%1";
|
||||
|
||||
Парсер = ЗагрузитьСценарий(СтрШаблон(ШаблонДоступа, "env/Classes/CommandLineArgumentParser.os"));
|
||||
ОбъектОПИ = ЗагрузитьСценарий(СтрШаблон(ШаблонДоступа, "data/Classes/LibraryComposition.os"));
|
||||
|
||||
ПодключитьСценарий(СтрШаблон(ШаблонДоступа, "help/Classes/Help.os"), "Справка");
|
||||
Справка = Новый Справка(ШаблонДоступа);
|
||||
|
||||
ОпределитьТекущуюКоманду();
|
||||
СформироватьКоманду();
|
||||
|
||||
Результат = Парсер.Разобрать(АргументыКоманднойСтроки);
|
||||
ВыполнитьОбработкуКоманды(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОпределитьТекущуюКоманду()
|
||||
|
||||
Если АргументыКоманднойСтроки.Количество() > 0 Тогда
|
||||
ТекущаяКоманда = АргументыКоманднойСтроки[0];
|
||||
Иначе
|
||||
ТекущаяКоманда = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СформироватьКоманду()
|
||||
|
||||
Если ТекущаяКоманда = Неопределено Тогда
|
||||
|
||||
ВсеКоманды = ОбъектОПИ.ПолучитьСоответствиеКомандМодулей();
|
||||
Версия = ОбъектОПИ.ПолучитьВерсию();
|
||||
|
||||
Справка.ВывестиНачальнуюСтраницу(ВсеКоманды, Версия);
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Команда = Парсер.ОписаниеКоманды(ТекущаяКоманда);
|
||||
ТаблицаПараметров = ОбъектОПИ.ПолучитьСостав(ТекущаяКоманда);
|
||||
|
||||
Если Не ТаблицаПараметров = Неопределено Тогда
|
||||
|
||||
Парсер.ДобавитьПозиционныйПараметрКоманды(Команда, "Метод");
|
||||
|
||||
ДобавитьПараметрыКоманды(Парсер, Команда);
|
||||
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--help");
|
||||
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--debug");
|
||||
Парсер.ДобавитьПараметрФлагКоманды(Команда, "--test");
|
||||
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, "--out");
|
||||
|
||||
Парсер.ДобавитьКоманду(Команда);
|
||||
|
||||
Иначе
|
||||
Справка.ВывестиСообщениеИсключения("Команда", ФайлВывода);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВыполнитьОбработкуКоманды(Знач Данные)
|
||||
|
||||
ТекущаяКоманда = Данные["Команда"];
|
||||
Параметры = Данные["ЗначенияПараметров"];
|
||||
Вывод = "";
|
||||
|
||||
УстановитьРежимОтладки(Параметры);
|
||||
УстановитьРежимТеста(Параметры);
|
||||
УстановитьФайлВывода(Параметры);
|
||||
ВывестиДопИнформацию(Параметры);
|
||||
|
||||
Попытка
|
||||
|
||||
Вывод = ПолучитьРезультатОбработки(ТекущаяКоманда, Параметры);
|
||||
|
||||
ОбработатьВыводJSON(Вывод);
|
||||
СообщитьРезультат(Вывод, СтатусСообщения.Внимание);
|
||||
|
||||
Исключение
|
||||
ОбработатьОшибочныйВывод(Вывод, ИнформацияОбОшибке());
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьРезультатОбработки(Знач Команда, Знач Параметры)
|
||||
|
||||
Метод = Параметры["Метод"];
|
||||
Ответ = "Функция вернула пустое значение";
|
||||
|
||||
ЧислоСтандартныхПараметров = 4;
|
||||
|
||||
Если Не ЗначениеЗаполнено(Метод) Или Метод = "--help" Тогда
|
||||
Справка.ВывестиСправкуПоМетодам(Команда, ТаблицаПараметров);
|
||||
КонецЕсли;
|
||||
|
||||
Если Параметры.Количество() = ЧислоСтандартныхПараметров Или Параметры["--help"] Тогда
|
||||
|
||||
ОтборКоманды = Новый Структура("МетодПоиска", вРег(Метод));
|
||||
ПараметрыМетода = ТаблицаПараметров.НайтиСтроки(ОтборКоманды);
|
||||
|
||||
Если Не ЗначениеЗаполнено(ПараметрыМетода) Тогда
|
||||
Справка.ВывестиСообщениеИсключения("Метод", ФайлВывода);
|
||||
КонецЕсли;
|
||||
|
||||
Справка.ВывестиСправкуПоПараметрам(ПараметрыМетода);
|
||||
КонецЕсли;
|
||||
|
||||
СтруктураВыполнения = ОбъектОПИ.СформироватьСтрокуВызоваМетода(Параметры, Команда, Метод);
|
||||
|
||||
Если СтруктураВыполнения["Ошибка"] Тогда
|
||||
Справка.ВывестиСообщениеИсключения(СтруктураВыполнения["Результат"], ФайлВывода);
|
||||
Иначе
|
||||
ТекстВыполнения = СтруктураВыполнения["Результат"];
|
||||
КонецЕсли;
|
||||
|
||||
Если Отладка Или Тестирование Тогда
|
||||
Сообщить(ТекстВыполнения, СтатусСообщения.Внимание);
|
||||
КонецЕсли;
|
||||
|
||||
Если Не Тестирование Тогда
|
||||
Выполнить(ТекстВыполнения);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Ответ;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Вспомогательные
|
||||
|
||||
Процедура ДобавитьПараметрыКоманды(Парсер, Команда);
|
||||
|
||||
Параметр_ = "Параметр";
|
||||
|
||||
ТаблицаДляИспользования = ТаблицаПараметров.Скопировать(, Параметр_);
|
||||
ТаблицаДляИспользования.Свернуть(Параметр_);
|
||||
|
||||
МассивПараметров = ТаблицаДляИспользования.ВыгрузитьКолонку(Параметр_);
|
||||
|
||||
Для Каждого Параметр Из МассивПараметров Цикл
|
||||
Парсер.ДобавитьИменованныйПараметрКоманды(Команда, Параметр);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьВыводJSON(Вывод)
|
||||
|
||||
Если ПустойВывод(Вывод) Тогда
|
||||
Вывод = Новый Структура;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Вывод) = Тип("Структура")
|
||||
Или ТипЗнч(Вывод) = Тип("Соответствие")
|
||||
Или ТипЗнч(Вывод) = Тип("Массив") Тогда
|
||||
|
||||
Вывод = JSONСтрокой(Вывод);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьРежимОтладки(Знач Параметры)
|
||||
|
||||
Если Параметры["--debug"] Тогда
|
||||
Отладка = Истина;
|
||||
ПеременнаяСреды = "YES";
|
||||
Иначе
|
||||
Отладка = Ложь;
|
||||
ПеременнаяСреды = "NO"
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьПеременнуюСреды("OINT_DEBUG", ПеременнаяСреды);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьРежимТеста(Знач Параметры)
|
||||
|
||||
Если Параметры["--test"] Тогда
|
||||
Тестирование = Истина;
|
||||
Иначе
|
||||
Тестирование = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьФайлВывода(Знач Параметры)
|
||||
|
||||
Вывод = Параметры["--out"];
|
||||
|
||||
Если ЗначениеЗаполнено(Вывод) Тогда
|
||||
ФайлВывода = Вывод;
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиДопИнформацию(Параметры)
|
||||
|
||||
Если Отладка Или Тестирование Тогда
|
||||
|
||||
Для каждого ВводныйПараметр Из Параметры Цикл
|
||||
Сообщить(ВводныйПараметр.Ключ + " : " + ВводныйПараметр.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОбработатьОшибочныйВывод(Вывод, ИнформацияОбОшибке)
|
||||
|
||||
Информация = "";
|
||||
Если ЗначениеЗаполнено(Вывод) Тогда
|
||||
|
||||
Если Отладка Или Тестирование Тогда
|
||||
Информация = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
КонецЕсли;
|
||||
|
||||
СообщитьРезультат(Вывод);
|
||||
Иначе
|
||||
|
||||
Если Отладка Или Тестирование Тогда
|
||||
Информация = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
Иначе
|
||||
Информация = КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Справка.ВывестиСообщениеИсключения(Информация, ФайлВывода);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СообщитьРезультат(Знач Текст, Знач Статус = "")
|
||||
|
||||
Если Не ЗначениеЗаполнено(Статус) Тогда
|
||||
Статус = СтатусСообщения.БезСтатуса;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(ФайлВывода) Тогда
|
||||
Текст = ЗаписатьЗначениеВФайл(Текст, ФайлВывода);
|
||||
ИначеЕсли ТипЗнч(Текст) = Тип("ДвоичныеДанные") Тогда
|
||||
Текст = "Похоже, что в ответе пришли двоичные данные! "
|
||||
+ "В следующий раз используйте опцию --out для указания пути их сохранения";
|
||||
Статус = СтатусСообщения.Информация;
|
||||
Иначе
|
||||
Текст = Строка(Текст);
|
||||
КонецЕсли;
|
||||
|
||||
Сообщить(Текст, Статус);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ЗаписатьЗначениеВФайл(Знач Значение, Знач Путь)
|
||||
|
||||
СтандартнаяЕдиница = 1024;
|
||||
ЕдиницаДанных = СтандартнаяЕдиница * СтандартнаяЕдиница;
|
||||
Значение = ?(ТипЗнч(Значение) = Тип("ДвоичныеДанные"), Значение, Строка(Значение));
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Строка") Тогда
|
||||
|
||||
ВозможныйФайл = Новый Файл(Значение);
|
||||
|
||||
Если ВозможныйФайл.Существует() Тогда
|
||||
Путь = Значение;
|
||||
Иначе
|
||||
Значение = ПолучитьДвоичныеДанныеИзСтроки(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
Значение.Записать(Путь);
|
||||
КонецЕсли;
|
||||
|
||||
ЗаписанныйФайл = Новый Файл(Путь);
|
||||
|
||||
Если ЗаписанныйФайл.Существует() Тогда
|
||||
Возврат "Файл размером "
|
||||
+ Строка(Окр(ЗаписанныйФайл.Размер() / ЕдиницаДанных, 3))
|
||||
+ " МБ был записан в "
|
||||
+ ЗаписанныйФайл.ПолноеИмя;
|
||||
Иначе
|
||||
ВызватьИсключение "Файл не был записан! Используйте флаг --debug для получения дополнительной информации";
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПустойВывод(Вывод)
|
||||
|
||||
Если ТипЗнч(Вывод) = Тип("ДвоичныеДанные") Тогда
|
||||
Возврат Вывод.Размер() = 0;
|
||||
Иначе
|
||||
Возврат Не ЗначениеЗаполнено(Вывод);
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
||||
Функция JSONСтрокой(Знач Данные)
|
||||
|
||||
Перенос = ПереносСтрокJSON.Windows;
|
||||
|
||||
ПараметрыJSON = Новый ПараметрыЗаписиJSON(Перенос
|
||||
, " "
|
||||
, Ложь
|
||||
, ЭкранированиеСимволовJSON["Нет"]
|
||||
, Ложь
|
||||
, Ложь
|
||||
, Ложь
|
||||
, Ложь);
|
||||
|
||||
Попытка
|
||||
|
||||
ЗаписьJSON = Новый ЗаписьJSON;
|
||||
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
|
||||
|
||||
ЗаписатьJSON(ЗаписьJSON, Данные);
|
||||
Возврат ЗаписьJSON.Закрыть();
|
||||
|
||||
Исключение
|
||||
Возврат "НЕ JSON: " + Строка(Данные);
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Попытка
|
||||
ОсновнойОбработчик();
|
||||
Исключение
|
||||
|
||||
Если Отладка Тогда
|
||||
Информация = ОписаниеОшибки();
|
||||
Иначе
|
||||
Информация = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
|
||||
КонецЕсли;
|
||||
|
||||
Справка.ВывестиСообщениеИсключения(Информация, ФайлВывода);
|
||||
|
||||
КонецПопытки;
|
||||
|
@@ -1,8 +1,9 @@
|
||||
#Использовать "./internal"
|
||||
|
||||
Перем СоответствиеКомандМодулей;
|
||||
Перем Версия;
|
||||
Перем КэшированиеСоставов;
|
||||
Перем ШаблонДоступа;
|
||||
Перем НачальноеПодключениеСкриптов;
|
||||
Перем МодульИнструментовOint;
|
||||
|
||||
|
||||
Процедура ПриСозданииОбъекта()
|
||||
@@ -10,6 +11,20 @@
|
||||
Версия = "1.26.0";
|
||||
ИнициализироватьОсновныеСписки();
|
||||
|
||||
ТекущийКаталог = ТекущийСценарий().Каталог;
|
||||
ШаблонДоступа = ОбъединитьПути(ТекущийКаталог, "internal", "Classes", "%1.os");
|
||||
|
||||
КаталогПрограммы = СтрЗаменить(КаталогПрограммы(), "\", "/");
|
||||
ЧастиПути = СтрРазделить(КаталогПрограммы, "/");
|
||||
|
||||
ЧастиПути.Удалить(ЧастиПути.ВГраница());
|
||||
ЧастиПути.Добавить("lib/oint/%1");
|
||||
|
||||
КаталогOint = СтрСоединить(ЧастиПути, "/");
|
||||
КаталогМодулей = СтрШаблон(КаталогOint , "core/Modules/%1.os");
|
||||
|
||||
НачальноеПодключениеСкриптов = СтрШаблон("%%1 = ЗагрузитьСценарий(""%1"");" + Символы.ПС , КаталогМодулей);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ИнициализироватьОсновныеСписки() Экспорт
|
||||
@@ -65,9 +80,15 @@
|
||||
ТекущийСостав = КэшированиеСоставов.Получить(Команда);
|
||||
|
||||
Если ТекущийСостав = Неопределено Тогда
|
||||
ОбъектСостава = Новый(Команда);
|
||||
ТекущийСостав = ОбъектСостава.ПолучитьСостав();
|
||||
КэшированиеСоставов.Вставить(Команда, ТекущийСостав);
|
||||
|
||||
Попытка
|
||||
ОбъектСостава = ЗагрузитьСценарий(СтрШаблон(ШаблонДоступа, Команда));
|
||||
ТекущийСостав = ОбъектСостава.ПолучитьСостав();
|
||||
КэшированиеСоставов.Вставить(Команда, ТекущийСостав);
|
||||
Исключение
|
||||
ВызватьИсключение СтрШаблон("Некорректное имя команды: %1", Команда)
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат ТекущийСостав;
|
||||
@@ -111,7 +132,7 @@
|
||||
Возврат Новый Структура("Ошибка,Результат", Истина, "Метод");
|
||||
КонецЕсли;
|
||||
|
||||
ТекстВыполнения = "";
|
||||
ТекстВыполнения = СтрШаблон(НачальноеПодключениеСкриптов, Модуль);
|
||||
СтрокаВызова = Модуль + "." + Метод + "(";
|
||||
Счетчик = 0;
|
||||
|
||||
@@ -120,6 +141,10 @@
|
||||
ИмяПараметра = НеобходимыйПараметр.Параметр;
|
||||
ЗначениеПараметра = ПереданныеПараметры.Получить(ИмяПараметра);
|
||||
|
||||
Если ТребуетсяОбработкаУправляющихПоследовательностей(ИмяПараметра, ЗначениеПараметра) Тогда
|
||||
ЗаменитьУправляющиеПоследовательности(ЗначениеПараметра);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЗначениеЗаполнено(ЗначениеПараметра) Тогда
|
||||
|
||||
ИмяПараметра = "Параметр" + СтрЗаменить(ИмяПараметра, "--", "_");
|
||||
@@ -131,14 +156,6 @@
|
||||
+ СтрЗаменить(ЗначениеПараметра, """", """""")
|
||||
+ """;";
|
||||
|
||||
Если ТребуетсяОбработкаУправляющихПоследовательностей(ИмяПараметра, ЗначениеПараметра) Тогда
|
||||
|
||||
ТекстВыполнения = ТекстВыполнения + "
|
||||
| OPI_Инструменты.ЗаменитьУправляющиеПоследовательности(" + ИмяПараметра + ");
|
||||
|";
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
СтрокаВызова = СтрокаВызова + ИмяПараметра + ", ";
|
||||
Счетчик = Счетчик + 1;
|
||||
|
||||
@@ -178,6 +195,34 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаменитьУправляющиеПоследовательности(Текст) Экспорт
|
||||
|
||||
Текст = Строка(Текст);
|
||||
|
||||
СоответствиеСимволов = ПолучитьСоответствиеУправляющихПоследовательностей();
|
||||
|
||||
Для Каждого Символ Из СоответствиеСимволов Цикл
|
||||
|
||||
Текст = СтрЗаменить(Текст, Символ.Ключ , Символ.Значение);
|
||||
Текст = СтрЗаменить(Текст, "\" + Символ.Значение, Символ.Ключ);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПолучитьСоответствиеУправляющихПоследовательностей()
|
||||
|
||||
СоответствиеСимволов = Новый Соответствие;
|
||||
|
||||
СоответствиеСимволов.Вставить("\n", Символы.ПС);
|
||||
СоответствиеСимволов.Вставить("\r", Символы.ВК);
|
||||
СоответствиеСимволов.Вставить("\f", Символы.ПФ);
|
||||
СоответствиеСимволов.Вставить("\v", Символы.ВТаб);
|
||||
|
||||
Возврат СоответствиеСимволов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#Region Alternate
|
||||
|
||||
Procedure InitializeCommonLists() Export
|
||||
|
@@ -1,241 +1,244 @@
|
||||
#Использовать "../../tools"
|
||||
#Использовать "../../env"
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ВывестиНачальнуюСтраницу(Знач СоответствиеКомандМодулей, Знач Версия) Экспорт
|
||||
|
||||
СписокКоманд = "";
|
||||
|
||||
Для Каждого Команда Из СоответствиеКомандМодулей Цикл
|
||||
СписокКоманд = СписокКоманд + Команда.Ключ + ", ";
|
||||
КонецЦикла;
|
||||
|
||||
ЛишниеСимволы = 2;
|
||||
СписокКоманд = Лев(СписокКоманд, СтрДлина(СписокКоманд) - ЛишниеСимволы);
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Зеленый;
|
||||
Консоль.ВывестиСтроку("");
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Желтый;
|
||||
ColorOutput.Вывести("
|
||||
| _______ _____________ ___ _______
|
||||
| __ __ ___/__ _/_ / | / /___ __/
|
||||
| _ / / / __ / __ / __ /
|
||||
| / /_/ / __/ / _ /| / _ /
|
||||
| \____/ /___/ /_/ |_/ /_/
|
||||
|
|
||||
|
|
||||
| Добро пожаловать в (OInt|#color=Белый) v (" + Версия + "|#color=Зеленый)!
|
||||
|
|
||||
| Структура вызова:
|
||||
|
|
||||
| "
|
||||
+ "(oint|#color=Белый) "
|
||||
+ "(<бибилотека>|#color=Бирюза) "
|
||||
+ "(<метод>|#color=Бирюза) "
|
||||
+ "(--опция1|#color=Серый) "
|
||||
+ "(""|#color=Зеленый)"
|
||||
+ "(Значение|#color=Белый)"
|
||||
+ "(""|#color=Зеленый) "
|
||||
+ "(...|#color=Белый) "
|
||||
+ "(--опцияN|#color=Серый) "
|
||||
+ "(""|#color=Зеленый)"
|
||||
+ "(Значение|#color=Белый)"
|
||||
+ "(""|#color=Зеленый) ");
|
||||
|
||||
Консоль.Вывести("
|
||||
|
|
||||
| Вызов библиотеки без метода или метода без параметров возвращает справку
|
||||
| Список доступных библиотек: ");
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
Консоль.Вывести(СписокКоманд);
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
ColorOutput.ВывестиСтроку("
|
||||
|
|
||||
| (Стандартные опции:|#color=Желтый)
|
||||
|
|
||||
| (--help|#color=Зеленый) - выводит справку по текущей команде или методу. Аналогично вызову команды без опций
|
||||
| (--debug|#color=Зеленый) - флаг, отвечающий за предоставление более подробной информации при работе программы
|
||||
| (--out|#color=Зеленый) - путь к файлу сохранения результата (двоичных данных в частности)
|
||||
|");
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Желтый;
|
||||
ColorOutput.ВывестиСтроку(" Полную документацию можно найти по адресу: (https://openintegrations.dev|#color=Бирюза)" + Символы.ПС);
|
||||
|
||||
Консоль.ВывестиСтроку("");
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
|
||||
ЗавершитьРаботу(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиСправкуПоМетодам(Знач Команда, Знач ТаблицаПараметров) Экспорт
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
ColorOutput.ВывестиСтроку(Символы.ПС + " (##|#color=Зеленый) Библиотека - (" + Команда + "|#color=Бирюза)");
|
||||
|
||||
ТаблицаПараметров.Свернуть("Метод,Область");
|
||||
|
||||
ColorOutput.ВывестиСтроку(" (##|#color=Зеленый) Доступные методы: " + Символы.ПС);
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
|
||||
ТекущаяОбласть = "";
|
||||
Счетчик = 0;
|
||||
КоличествоПараметров = ТаблицаПараметров.Количество();
|
||||
|
||||
Для каждого СтрокаМетода Из ТаблицаПараметров Цикл
|
||||
|
||||
Первый = Ложь;
|
||||
Последний = Ложь;
|
||||
|
||||
Если ТекущаяОбласть <> СтрокаМетода.Область Тогда
|
||||
ТекущаяОбласть = СтрокаМетода.Область;
|
||||
ColorOutput.ВывестиСтроку(" (o|#color=Желтый) (" + ТекущаяОбласть + "|#color=Бирюза)");
|
||||
Первый = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
Если Счетчик >= КоличествоПараметров - 1 Тогда
|
||||
Последний = Истина;
|
||||
Иначе
|
||||
Последний = ТаблицаПараметров[Счетчик + 1].Область <> ТекущаяОбласть;
|
||||
КонецЕсли;
|
||||
|
||||
Если Первый И Последний Тогда
|
||||
Метка = "└───";
|
||||
ИначеЕсли Первый Тогда
|
||||
Метка = "└─┬─";
|
||||
ИначеЕсли Последний Тогда
|
||||
Метка = " └─";
|
||||
Иначе
|
||||
Метка = " ├─";
|
||||
КонецЕсли;
|
||||
|
||||
ColorOutput.ВывестиСтроку(" (" + Метка + "|#color=Желтый) " + СтрокаМетода.Метод);
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
КонецЦикла;
|
||||
|
||||
Сообщить(Символы.ПС);
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
|
||||
ЗавершитьРаботу(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиСправкуПоПараметрам(Знач ТаблицаПараметров) Экспорт
|
||||
|
||||
Если ТаблицаПараметров.Количество() = 0 Тогда
|
||||
ВывестиСообщениеИсключения("Метод");
|
||||
КонецЕсли;
|
||||
|
||||
ИмяМетода = ТаблицаПараметров[0].Метод;
|
||||
ТекстСправки = "
|
||||
| (##|#color=Зеленый) Метод (" + ИмяМетода + "|#color=Бирюза)
|
||||
| (##|#color=Зеленый) " + ТаблицаПараметров[0].ОписаниеМетода;
|
||||
|
||||
ColorOutput.ВывестиСтроку(ТекстСправки);
|
||||
ТекстСправки = "";
|
||||
|
||||
ОбработатьТабуляциюСправки(ТаблицаПараметров);
|
||||
|
||||
Для Каждого ПараметрМетода Из ТаблицаПараметров Цикл
|
||||
|
||||
ТекстСправки = ТекстСправки
|
||||
+ Символы.ПС
|
||||
+ " ("
|
||||
+ ПараметрМетода["Параметр"]
|
||||
+ "|#color=Желтый) - "
|
||||
+ ПараметрМетода["Описание"];
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ColorOutput.ВывестиСтроку(ТекстСправки + Символы.ПС);
|
||||
|
||||
ЗавершитьРаботу(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиСообщениеИсключения(Знач Причина, Знач ФайлВывода = "") Экспорт
|
||||
|
||||
ФайлВывода = Строка(ФайлВывода);
|
||||
|
||||
Если Причина = "Команда" Тогда
|
||||
Текст = "Некорректная команда! Проверьте правильность ввода";
|
||||
Код = 1;
|
||||
|
||||
ИначеЕсли Причина = "Метод" Тогда
|
||||
Текст = "Некорректный метод! Проверьте правильность ввода";
|
||||
Код = 2;
|
||||
|
||||
Иначе
|
||||
Текст = "Непредвиденная ошибка!: " + Причина;
|
||||
Код = 99;
|
||||
КонецЕсли;
|
||||
|
||||
Текст = Символы.ПС + Текст + Символы.ПС;
|
||||
|
||||
Сообщить(Текст, СтатусСообщения.ОченьВажное);
|
||||
|
||||
Если ЗначениеЗаполнено(ФайлВывода) Тогда
|
||||
|
||||
ТекстДД = ПолучитьДвоичныеДанныеИзСтроки(Текст);
|
||||
|
||||
Попытка
|
||||
ТекстДД.Записать(ФайлВывода);
|
||||
Сообщить("Сообщение об ошибке сохранено в файл: " + ФайлВывода, СтатусСообщения.Внимание);
|
||||
Исключение
|
||||
Сообщить("Не удалось сохранить ошибку в файл вывода: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗавершитьРаботу(Код);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ОбработатьТабуляциюСправки(ТаблицаПараметров)
|
||||
|
||||
Параметр_ = "Параметр";
|
||||
МаксимальнаяДлина = 15;
|
||||
|
||||
Для Каждого ПараметрМетода Из ТаблицаПараметров Цикл
|
||||
|
||||
Пока Не СтрДлина(ПараметрМетода[Параметр_]) = МаксимальнаяДлина Цикл
|
||||
ПараметрМетода[Параметр_] = ПараметрМетода[Параметр_] + " ";
|
||||
КонецЦикла;
|
||||
|
||||
ТекущееОписание = ПараметрМетода["Описание"];
|
||||
МассивОписания = СтрРазделить(ТекущееОписание, Символы.ПС);
|
||||
НачальнаяТабуляция = 4;
|
||||
|
||||
Если МассивОписания.Количество() = 1 Тогда
|
||||
Продолжить;
|
||||
Иначе
|
||||
|
||||
Для Н = 1 По МассивОписания.ВГраница() Цикл
|
||||
|
||||
ТекущийЭлемент = МассивОписания[Н];
|
||||
НеобходимаяДлина = СтрДлина(ТекущийЭлемент) + СтрДлина(ПараметрМетода[Параметр_] + " - ") + НачальнаяТабуляция;
|
||||
|
||||
Пока СтрДлина(МассивОписания[Н]) < НеобходимаяДлина Цикл
|
||||
МассивОписания[Н] = " " + МассивОписания[Н];
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ПараметрМетода["Описание"] = СтрСоединить(МассивОписания, Символы.ПС);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
Перем ЦветнойВывод;
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ПриСозданииОбъекта(ШаблонДоступа)
|
||||
ЦветнойВывод = ЗагрузитьСценарий(СтрШаблон(ШаблонДоступа, "env/Modules/ColorOutput.os"));
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиНачальнуюСтраницу(Знач СоответствиеКомандМодулей, Знач Версия) Экспорт
|
||||
|
||||
СписокКоманд = "";
|
||||
|
||||
Для Каждого Команда Из СоответствиеКомандМодулей Цикл
|
||||
СписокКоманд = СписокКоманд + Команда.Ключ + ", ";
|
||||
КонецЦикла;
|
||||
|
||||
ЛишниеСимволы = 2;
|
||||
СписокКоманд = Лев(СписокКоманд, СтрДлина(СписокКоманд) - ЛишниеСимволы);
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Зеленый;
|
||||
Консоль.ВывестиСтроку("");
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Желтый;
|
||||
ЦветнойВывод.Вывести("
|
||||
| _______ _____________ ___ _______
|
||||
| __ __ ___/__ _/_ / | / /___ __/
|
||||
| _ / / / __ / __ / __ /
|
||||
| / /_/ / __/ / _ /| / _ /
|
||||
| \____/ /___/ /_/ |_/ /_/
|
||||
|
|
||||
|
|
||||
| Добро пожаловать в (OInt|#color=Белый) v (" + Версия + "|#color=Зеленый)!
|
||||
|
|
||||
| Структура вызова:
|
||||
|
|
||||
| "
|
||||
+ "(oint|#color=Белый) "
|
||||
+ "(<бибилотека>|#color=Бирюза) "
|
||||
+ "(<метод>|#color=Бирюза) "
|
||||
+ "(--опция1|#color=Серый) "
|
||||
+ "(""|#color=Зеленый)"
|
||||
+ "(Значение|#color=Белый)"
|
||||
+ "(""|#color=Зеленый) "
|
||||
+ "(...|#color=Белый) "
|
||||
+ "(--опцияN|#color=Серый) "
|
||||
+ "(""|#color=Зеленый)"
|
||||
+ "(Значение|#color=Белый)"
|
||||
+ "(""|#color=Зеленый) ");
|
||||
|
||||
Консоль.Вывести("
|
||||
|
|
||||
| Вызов библиотеки без метода или метода без параметров возвращает справку
|
||||
| Список доступных библиотек: ");
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
Консоль.Вывести(СписокКоманд);
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
ЦветнойВывод.ВывестиСтроку("
|
||||
|
|
||||
| (Стандартные опции:|#color=Желтый)
|
||||
|
|
||||
| (--help|#color=Зеленый) - выводит справку по текущей команде или методу. Аналогично вызову команды без опций
|
||||
| (--debug|#color=Зеленый) - флаг, отвечающий за предоставление более подробной информации при работе программы
|
||||
| (--out|#color=Зеленый) - путь к файлу сохранения результата (двоичных данных в частности)
|
||||
|");
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Желтый;
|
||||
ЦветнойВывод.ВывестиСтроку(" Полную документацию можно найти по адресу: (https://openintegrations.dev|#color=Бирюза)" + Символы.ПС);
|
||||
|
||||
Консоль.ВывестиСтроку("");
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
|
||||
ЗавершитьРаботу(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиСправкуПоМетодам(Знач Команда, Знач ТаблицаПараметров) Экспорт
|
||||
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
ЦветнойВывод.ВывестиСтроку(Символы.ПС + " (##|#color=Зеленый) Библиотека - (" + Команда + "|#color=Бирюза)");
|
||||
|
||||
ТаблицаПараметров.Свернуть("Метод,Область");
|
||||
|
||||
ЦветнойВывод.ВывестиСтроку(" (##|#color=Зеленый) Доступные методы: " + Символы.ПС);
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
|
||||
ТекущаяОбласть = "";
|
||||
Счетчик = 0;
|
||||
КоличествоПараметров = ТаблицаПараметров.Количество();
|
||||
|
||||
Для каждого СтрокаМетода Из ТаблицаПараметров Цикл
|
||||
|
||||
Первый = Ложь;
|
||||
Последний = Ложь;
|
||||
|
||||
Если ТекущаяОбласть <> СтрокаМетода.Область Тогда
|
||||
ТекущаяОбласть = СтрокаМетода.Область;
|
||||
ЦветнойВывод.ВывестиСтроку(" (o|#color=Желтый) (" + ТекущаяОбласть + "|#color=Бирюза)");
|
||||
Первый = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
Если Счетчик >= КоличествоПараметров - 1 Тогда
|
||||
Последний = Истина;
|
||||
Иначе
|
||||
Последний = ТаблицаПараметров[Счетчик + 1].Область <> ТекущаяОбласть;
|
||||
КонецЕсли;
|
||||
|
||||
Если Первый И Последний Тогда
|
||||
Метка = "└───";
|
||||
ИначеЕсли Первый Тогда
|
||||
Метка = "└─┬─";
|
||||
ИначеЕсли Последний Тогда
|
||||
Метка = " └─";
|
||||
Иначе
|
||||
Метка = " ├─";
|
||||
КонецЕсли;
|
||||
|
||||
ЦветнойВывод.ВывестиСтроку(" (" + Метка + "|#color=Желтый) " + СтрокаМетода.Метод);
|
||||
|
||||
Счетчик = Счетчик + 1;
|
||||
КонецЦикла;
|
||||
|
||||
Сообщить(Символы.ПС);
|
||||
Консоль.ЦветТекста = ЦветКонсоли.Белый;
|
||||
|
||||
ЗавершитьРаботу(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиСправкуПоПараметрам(Знач ТаблицаПараметров) Экспорт
|
||||
|
||||
Если ТаблицаПараметров.Количество() = 0 Тогда
|
||||
ВывестиСообщениеИсключения("Метод");
|
||||
КонецЕсли;
|
||||
|
||||
ИмяМетода = ТаблицаПараметров[0].Метод;
|
||||
ТекстСправки = "
|
||||
| (##|#color=Зеленый) Метод (" + ИмяМетода + "|#color=Бирюза)
|
||||
| (##|#color=Зеленый) " + ТаблицаПараметров[0].ОписаниеМетода;
|
||||
|
||||
ЦветнойВывод.ВывестиСтроку(ТекстСправки);
|
||||
ТекстСправки = "";
|
||||
|
||||
ОбработатьТабуляциюСправки(ТаблицаПараметров);
|
||||
|
||||
Для Каждого ПараметрМетода Из ТаблицаПараметров Цикл
|
||||
|
||||
ТекстСправки = ТекстСправки
|
||||
+ Символы.ПС
|
||||
+ " ("
|
||||
+ ПараметрМетода["Параметр"]
|
||||
+ "|#color=Желтый) - "
|
||||
+ ПараметрМетода["Описание"];
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ЦветнойВывод.ВывестиСтроку(ТекстСправки + Символы.ПС);
|
||||
|
||||
ЗавершитьРаботу(0);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ВывестиСообщениеИсключения(Знач Причина, Знач ФайлВывода = "") Экспорт
|
||||
|
||||
ФайлВывода = Строка(ФайлВывода);
|
||||
|
||||
Если Причина = "Команда" Тогда
|
||||
Текст = "Некорректная команда! Проверьте правильность ввода";
|
||||
Код = 1;
|
||||
|
||||
ИначеЕсли Причина = "Метод" Тогда
|
||||
Текст = "Некорректный метод! Проверьте правильность ввода";
|
||||
Код = 2;
|
||||
|
||||
Иначе
|
||||
Текст = "Непредвиденная ошибка!: " + Причина;
|
||||
Код = 99;
|
||||
КонецЕсли;
|
||||
|
||||
Текст = Символы.ПС + Текст + Символы.ПС;
|
||||
|
||||
Сообщить(Текст, СтатусСообщения.ОченьВажное);
|
||||
|
||||
Если ЗначениеЗаполнено(ФайлВывода) Тогда
|
||||
|
||||
ТекстДД = ПолучитьДвоичныеДанныеИзСтроки(Текст);
|
||||
|
||||
Попытка
|
||||
ТекстДД.Записать(ФайлВывода);
|
||||
Сообщить("Сообщение об ошибке сохранено в файл: " + ФайлВывода, СтатусСообщения.Внимание);
|
||||
Исключение
|
||||
Сообщить("Не удалось сохранить ошибку в файл вывода: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
|
||||
КонецПопытки;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗавершитьРаботу(Код);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Процедура ОбработатьТабуляциюСправки(ТаблицаПараметров)
|
||||
|
||||
Параметр_ = "Параметр";
|
||||
МаксимальнаяДлина = 15;
|
||||
|
||||
Для Каждого ПараметрМетода Из ТаблицаПараметров Цикл
|
||||
|
||||
Пока Не СтрДлина(ПараметрМетода[Параметр_]) = МаксимальнаяДлина Цикл
|
||||
ПараметрМетода[Параметр_] = ПараметрМетода[Параметр_] + " ";
|
||||
КонецЦикла;
|
||||
|
||||
ТекущееОписание = ПараметрМетода["Описание"];
|
||||
МассивОписания = СтрРазделить(ТекущееОписание, Символы.ПС);
|
||||
НачальнаяТабуляция = 4;
|
||||
|
||||
Если МассивОписания.Количество() = 1 Тогда
|
||||
Продолжить;
|
||||
Иначе
|
||||
|
||||
Для Н = 1 По МассивОписания.ВГраница() Цикл
|
||||
|
||||
ТекущийЭлемент = МассивОписания[Н];
|
||||
НеобходимаяДлина = СтрДлина(ТекущийЭлемент) + СтрДлина(ПараметрМетода[Параметр_] + " - ") + НачальнаяТабуляция;
|
||||
|
||||
Пока СтрДлина(МассивОписания[Н]) < НеобходимаяДлина Цикл
|
||||
МассивОписания[Н] = " " + МассивОписания[Н];
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ПараметрМетода["Описание"] = СтрСоединить(МассивОписания, Символы.ПС);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
Reference in New Issue
Block a user