Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// Установка/получение параметров расширения конфигурации 1С:Предприятие 8
//
// Служебный модуль с набором методов работы с командами приложения
//
///////////////////////////////////////////////////////////////////////////////////////////////////

#Использовать asserts

#Область ОписаниеПеременных

Перем Лог; // Экземпляр логгера
Перем Активность; // Признак активности расширения
Перем БезопасныйРежим; // Признак безопасного режима
Перем ИмяПрофиляБезопасности; // Имя профиля безопасности
Перем ЗащитаОтОпасныхДействий; // Режим защиты от опасных действий
Перем ИспользуетсяВРаспределеннойИнформационнойБазе; // Режим использования в распределенной информационной базе
Перем ОбластьДействия; // Область действия расширения

#КонецОбласти

#Область ОбработчикиСобытий

// Регистрация команды и ее аргументов/ключей
//
// Параметры:
// ИмяКоманды - Строка - имя команды
// Парсер - Парсер - объект парсера
//
Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт

ТекстОписания =
" Получение/установка параметров расширения конфигурации с использованием ibcmd";

ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды,
ТекстОписания);

Парсер.ДобавитьПозиционныйПараметрКоманды(ОписаниеКоманды, "extensionName",
"Имя расширения, под которым оно зарегистрировано в списке расширений");

Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--active",
"Установить признак активности расширения. Допустимые значения true|false, yes|no");

Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--safe-mode",
"Установить признак безопасного режима. Допустимые значения true|false, yes|no");

Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--security-profile-name",
"Установить имя профиля безопасности.");

Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--unsafe-action-protection",
"Установить режим защиты от опасных действий. Допустимые значения true|false, yes|no");

Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--used-in-distributed-infobase",
"Установить режим использования в распределенной информационной базе. Допустимые значения true|false, yes|no");

Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--scope",
"Установить область действия расширения. Допустимые значения true,yes=infobase|false,no=data-separation");

Парсер.ДобавитьПараметрФлагКоманды(ОписаниеКоманды, "--no-info",
"Не выводить информацию о расширении");

ОбщиеМетоды.ДобавитьПараметрыПодключенияСУБДIbcmd(Парсер, ОписаниеКоманды);

Парсер.ДобавитьКоманду(ОписаниеКоманды);

КонецПроцедуры // ЗарегистрироватьКоманду

// Выполняет логику команды
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно)
//
// Возвращаемое значение:
// Число - Код возврата команды
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры = Неопределено) Экспорт

Лог = ОбщиеМетоды.ЛогКоманды(ДополнительныеПараметры);

ИмяРасширения = ПараметрыКоманды["extensionName"];
Ожидаем.Что(ИмяРасширения, "Имя расширения должно быть указано").Заполнено();

МенеджерСборки = Новый МенеджерIbcmd();
ДанныеПодключения = ОбщиеМетоды.ДанныеПодключения(ПараметрыКоманды);
МенеджерСборки.Конструктор(ДанныеПодключения, ПараметрыКоманды);

УстановитьАктивность(ПараметрыКоманды);
УстановитьБезопасныйРежимРасширения(ПараметрыКоманды);
УстановитьИмяПрофиляБезопасности(ПараметрыКоманды);
УстановитьРежимЗащитыОтОпасныхДействий(ПараметрыКоманды);
УстановитьИспользованиеВРаспределеннойИнформационнойБазе(ПараметрыКоманды);
УстановитьОбластьДействия(ПараметрыКоманды);

ВыводитьИнформациюОРасширении = НЕ ПараметрыКоманды["--no-info"];

Попытка
Если УстанавливатьСвойства() Тогда
МенеджерСборки.ИзменитьСвойстваРасширения(ИмяРасширения, Активность,
БезопасныйРежим, ИмяПрофиляБезопасности, ЗащитаОтОпасныхДействий,
ИспользуетсяВРаспределеннойИнформационнойБазе, ОбластьДействия);
Иначе
Лог.Информация("Свойства расширения не изменяются");
КонецЕсли;

Если ВыводитьИнформациюОРасширении Тогда
МенеджерСборки.ИнформацияОРасширении(ИмяРасширения);
Иначе
Лог.Информация("Информация о свойствах расширения не выводится");
КонецЕсли;

Исключение
МенеджерСборки.Деструктор();
ВызватьИсключение;
КонецПопытки;

МенеджерСборки.Деструктор();

Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;

КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ЗначениеПараметраБулево(ЗначениеПараметра)

Если ПустаяСтрока(ЗначениеПараметра) Тогда
Возврат Неопределено;
КонецЕсли;

РегулярноеВыражениеИстина = Новый РегулярноеВыражение("true|yes");
РегулярноеВыражениеЛожь = Новый РегулярноеВыражение("false|no");

Если РегулярноеВыражениеИстина.Совпадает(ЗначениеПараметра) Тогда
Возврат Истина;
ИначеЕсли РегулярноеВыражениеЛожь.Совпадает(ЗначениеПараметра) Тогда
Возврат Ложь;
Иначе
ВызватьИсключение "Некорректное значение параметра " + ЗначениеПараметра;
КонецЕсли;

КонецФункции

Функция УстанавливатьСвойства()

Возврат НЕ (Активность = Неопределено
И БезопасныйРежим = Неопределено
И ПустаяСтрока(ИмяПрофиляБезопасности)
И ЗащитаОтОпасныхДействий = Неопределено
И ИспользуетсяВРаспределеннойИнформационнойБазе = Неопределено
И ОбластьДействия = Неопределено);

КонецФункции

Процедура УстановитьАктивность(ПараметрыКоманды)

Активность = ЗначениеПараметраБулево(ПараметрыКоманды["--active"]);
Если Активность = Неопределено Тогда
Лог.Отладка("Режим активности расширения не изменяется");
Иначе
Лог.Информация("Активность расширения: %1", Строка(Активность));
КонецЕсли;

КонецПроцедуры

Процедура УстановитьБезопасныйРежимРасширения(ПараметрыКоманды)

БезопасныйРежим = ЗначениеПараметраБулево(ПараметрыКоманды["--safe-mode"]);
Если БезопасныйРежим = Неопределено Тогда
Лог.Отладка("Безопасный режим расширения не изменяется");
Иначе
Лог.Информация("Безопасный режим расширения: %1", Строка(БезопасныйРежим));
КонецЕсли;

КонецПроцедуры

Процедура УстановитьИмяПрофиляБезопасности(ПараметрыКоманды)

ЗначениеПараметра = ПараметрыКоманды["--security-profile-name"];
Если ЗначениеПараметра = Неопределено Тогда
ИмяПрофиляБезопасности = "";
Лог.Отладка("Имя профиля безопасности расширения не изменяется");
Иначе
ИмяПрофиляБезопасности = ЗначениеПараметра;
Лог.Информация("Имя профиля безопасности расширения: %1", ИмяПрофиляБезопасности);
КонецЕсли;

КонецПроцедуры

Процедура УстановитьРежимЗащитыОтОпасныхДействий(ПараметрыКоманды)

ЗащитаОтОпасныхДействий = ЗначениеПараметраБулево(ПараметрыКоманды["--unsafe-action-protection"]);
Если ЗащитаОтОпасныхДействий = Неопределено Тогда
Лог.Отладка("Режим защиты от опасных действий расширения не изменяется");
Иначе
Лог.Информация("Режим защиты от опасных действий расширения: %1", Строка(ЗащитаОтОпасныхДействий));
КонецЕсли;

КонецПроцедуры

Процедура УстановитьИспользованиеВРаспределеннойИнформационнойБазе(ПараметрыКоманды)

ИспользуетсяВРаспределеннойИнформационнойБазе =
ЗначениеПараметраБулево(ПараметрыКоманды["--used-in-distributed-infobase"]);
Если ИспользуетсяВРаспределеннойИнформационнойБазе = Неопределено Тогда
Лог.Отладка("Режим использования расширения в распределенной информационной базе не изменяется");
Иначе
Лог.Информация("Режим использования расширения в распределенной информационной базе: %1",
Строка(ИспользуетсяВРаспределеннойИнформационнойБазе));
КонецЕсли;

КонецПроцедуры

Процедура УстановитьОбластьДействия(ПараметрыКоманды)

ОбластьДействия = ЗначениеПараметраБулево(ПараметрыКоманды["--scope"]);
Если ОбластьДействия = Неопределено Тогда
Лог.Отладка("Область действия расширения расширения не изменяется");
ИначеЕсли ОбластьДействия = Истина Тогда
Лог.Информация("Область действия расширения: Информационная база");
Иначе
Лог.Информация("Область действия расширения: Разделение данных");
КонецЕсли;

КонецПроцедуры

#КонецОбласти
37 changes: 37 additions & 0 deletions src/Классы/МенеджерIbcmd.os
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,43 @@

КонецПроцедуры

// Изменить свойства расширения
//
// Параметры:
// ИмяРасширения - Строка - Имя расширения, у которого будем изменять свойства
// Активность - Булево, Неопределено - Активность
// БезопасныйРежим - Булево, Неопределено - Безопасный режим
// ИмяПрофиляБезопасности - Строка - Имя профиля безопасности
// ЗащитаОтОпасныхДействий - Булево, Неопределено - защита от опасных действий
// ИспользуетсяВРаспределеннойИнформационнойБазе - Булево, Неопределено - расширение используется в РИБ
// ОбластьДействия - Булево, Неопределено - если Истина - область действия ИБ, иначе - разделитель данных
//
Процедура ИзменитьСвойстваРасширения(Знач ИмяРасширения, Знач Активность,
Знач БезопасныйРежим, Знач ИмяПрофиляБезопасности, Знач ЗащитаОтОпасныхДействий,
Знач ИспользуетсяВРаспределеннойИнформационнойБазе, Знач ОбластьДействия) Экспорт

Лог.Информация("Выполняю установку свойств расширения %1", ИмяРасширения);

УправлениеИБ.ИзменитьСвойстваРасширения(ИмяРасширения, Активность,
БезопасныйРежим, ИмяПрофиляБезопасности, ЗащитаОтОпасныхДействий,
ИспользуетсяВРаспределеннойИнформационнойБазе, ОбластьДействия);

Лог.Информация("Установка свойств расширения %1 завершена", ИмяРасширения);

КонецПроцедуры

// Выводит в лог информацию о расширении конфигурации
//
// Параметры:
// ИмяРасширения - Строка - Имя расширения, у которого будем изменять свойства
//
Процедура ИнформацияОРасширении(Знач ИмяРасширения) Экспорт

ИнформацияОРасширении = УправлениеИБ.ИнформацияОРасширении(ИмяРасширения);
Лог.Информация("Информация о расширении конфигурации:%2%1", ИнформацияОРасширении, Символы.ПС);

КонецПроцедуры

// Возвращает каталог времнной ИБ
//
// Возвращаемое значение:
Expand Down
13 changes: 9 additions & 4 deletions src/Модули/ОбщиеМетоды.os
Original file line number Diff line number Diff line change
Expand Up @@ -726,10 +726,15 @@
"Использовать утилиту ibcmd вместо конфигуратора");

// Для использования серверных баз, добавим параметры подключения к СУБД для --ibcmd
// BSLLS:LineLength-off
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--dbms-type", "Тип СУБД. Разрешенные значения: MSSQLServer, PostgreSQL, IBMDB2, OracleDatabase
| или их сокращенные варианты: mssql, postgresql, db2, oracle соответственно.");
// BSLLS:LineLength-on
ДобавитьПараметрыПодключенияСУБДIbcmd(Парсер, ОписаниеКоманды);

КонецПроцедуры

Процедура ДобавитьПараметрыПодключенияСУБДIbcmd(Знач Парсер, ОписаниеКоманды) Экспорт

Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--dbms-type",
"Тип СУБД. Разрешенные значения: MSSQLServer, PostgreSQL, IBMDB2, OracleDatabase
| или их сокращенные варианты: mssql, postgresql, db2, oracle соответственно.");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--dbms-server", "Сервер СУБД");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--dbms-base", "Имя базы на сервере СУБД");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--dbms-user", "Пользователь СУБД");
Expand Down
Loading
Loading