Skip to content

Commit fde3624

Browse files
committed
feat: реализован плагин использования утилиты ibcmd для выгрузки конфигурации/расширения в файлы.
1 parent 8544729 commit fde3624

File tree

1 file changed

+232
-0
lines changed

1 file changed

+232
-0
lines changed

src/Классы/useIbcmd.os

Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
#Использовать logos
2+
#Использовать v8find
3+
#Использовать tempfiles
4+
5+
Перем Лог;
6+
Перем Обработчик;
7+
Перем КомандыПлагина;
8+
9+
Перем РабочийКаталогIBCMD; // Строка, путь к рабочему каталогу утилиты ibcmd
10+
Перем ТипСУБД; // ТипСУБД - Строка - тип сервера базы данных
11+
Перем СерверБД; // СерверБД - Строка - адрес сервера базы данных
12+
Перем ИмяБД; // ИмяБД - Строка - имя базы данных
13+
Перем ПользовательБД; // ПользовательБД - Строка - имя пользователя базы данных
14+
Перем ПарольБД; // ПарольБД - Строка - пароль пользователя базы данных
15+
16+
17+
#Область Интерфейс_плагина
18+
19+
// Возвращает версию плагина
20+
//
21+
// Возвращаемое значение:
22+
// Строка - текущая версия плагина
23+
//
24+
Функция Версия() Экспорт
25+
Возврат "1.0.0";
26+
КонецФункции
27+
28+
// Возвращает приоритет выполнения плагина
29+
//
30+
// Возвращаемое значение:
31+
// Число - приоритет выполнения плагина
32+
//
33+
Функция Приоритет() Экспорт
34+
Возврат 0;
35+
КонецФункции
36+
37+
// Возвращает описание плагина
38+
//
39+
// Возвращаемое значение:
40+
// Строка - описание функциональности плагина
41+
//
42+
Функция Описание() Экспорт
43+
Возврат "Плагин включает использование утилиты ibcmd для выгрузки конфигурации в файлы";
44+
КонецФункции
45+
46+
// Возвращает подробную справку к плагину
47+
//
48+
// Возвращаемое значение:
49+
// Строка - подробная справка для плагина
50+
//
51+
Функция Справка() Экспорт
52+
Возврат "Плагин включает использование утилиты ibcmd для выгрузки конфигурации в файлы";
53+
КонецФункции
54+
55+
// Возвращает имя плагина
56+
//
57+
// Возвращаемое значение:
58+
// Строка - имя плагина при подключении
59+
//
60+
Функция Имя() Экспорт
61+
Возврат "use-ibcmd";
62+
КонецФункции
63+
64+
// Возвращает имя лога плагина
65+
//
66+
// Возвращаемое значение:
67+
// Строка - имя лога плагина
68+
//
69+
Функция ИмяЛога() Экспорт
70+
Возврат "oscript.lib.gitsync.plugins.useIbcmd";
71+
КонецФункции
72+
73+
#КонецОбласти
74+
75+
#Область Подписки_на_события
76+
77+
Процедура ПриАктивизации(СтандартныйОбработчик) Экспорт
78+
79+
Обработчик = СтандартныйОбработчик;
80+
81+
РабочийКаталогIBCMD = "";
82+
ТипСУБД = "MSSQLServer";
83+
СерверБД = "localhost";
84+
ИмяБД = "";
85+
ПользовательБД = "sa";
86+
ПарольБД = "";
87+
88+
КонецПроцедуры
89+
90+
Процедура ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) Экспорт
91+
92+
Лог.Отладка("Ищу команду <%1> в списке поддерживаемых", ИмяКоманды);
93+
Если КомандыПлагина.Найти(ИмяКоманды) = Неопределено Тогда
94+
Возврат;
95+
КонецЕсли;
96+
97+
Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды);
98+
99+
КлассРеализации.Опция("d ibcmd-data", "", "рабочий каталог утилиты ibcmd")
100+
.Флаговый()
101+
.ВОкружении("GITSYNC_IBCMD_DATA");
102+
103+
КлассРеализации.Опция("t ibcmd-dbms", "MSSQLServer", "тип СУБД (при использовании ibcmd)")
104+
.ТСтрока()
105+
.ВОкружении("GITSYNC_IBCMD_DBMS");
106+
107+
КлассРеализации.Опция("s ibcmd-db-server", "", "адрес сервера базы данных (при использовании ibcmd)")
108+
.ТСтрока()
109+
.ВОкружении("GITSYNC_IBCMD_DB_SERVER");
110+
111+
КлассРеализации.Опция("n ibcmd-db-name", "", "имя базы данных (при использовании ibcmd)")
112+
.ТСтрока()
113+
.ВОкружении("GITSYNC_IBCMD_DB_NAME");
114+
115+
КлассРеализации.Опция("U ibcmd-db-user", "", "имя пользователя базы данных (при использовании ibcmd)")
116+
.ТСтрока()
117+
.ВОкружении("GITSYNC_IBCMD_DB_USER");
118+
119+
КлассРеализации.Опция("P ibcmd-db-pwd", "", "пароль пользователя базы данных (при использовании ibcmd)")
120+
.ТСтрока()
121+
.ВОкружении("GITSYNC_IBCMD_DB_PWD");
122+
123+
КонецПроцедуры
124+
125+
Процедура ПриПолученииПараметров(ПараметрыКоманды) Экспорт
126+
127+
РабочийКаталогIBCMD = ПараметрыКоманды.Параметр("ibcmd-data", "");
128+
ТипСУБД = ПараметрыКоманды.Параметр("ibcmd-dbms", "MSSQLServer");
129+
СерверБД = ПараметрыКоманды.Параметр("ibcmd-db-server", "localhost");
130+
ИмяБД = ПараметрыКоманды.Параметр("ibcmd-db-name", "");
131+
ПользовательБД = ПараметрыКоманды.Параметр("ibcmd-db-user", "sa");
132+
ПарольБД = ПараметрыКоманды.Параметр("ibcmd-db-pwd", "");
133+
134+
КонецПроцедуры
135+
136+
Процедура ПриВыгрузкеКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, СтандартнаяОбработка) Экспорт
137+
138+
СтандартнаяОбработка = Ложь;
139+
140+
Попытка
141+
ВыгрузитьКонфигурациюВФайлыIBCMD(КаталогВыгрузки);
142+
Исключение
143+
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
144+
Лог.Ошибка("Невозможно выгрузить конфигурацию в файлы. Ошибка:%1%2", Символы.ПС, ТекстОшибки);
145+
ВызватьИсключение;
146+
КонецПопытки;
147+
148+
КонецПроцедуры
149+
150+
#КонецОбласти
151+
152+
Процедура Инициализация()
153+
154+
Лог = Логирование.ПолучитьЛог(ИмяЛога());
155+
КомандыПлагина = Новый Массив;
156+
КомандыПлагина.Добавить("sync");
157+
158+
КонецПроцедуры
159+
160+
#Область Вспомогательные_процедуры_и_функции
161+
162+
Процедура ВыгрузитьКонфигурациюВФайлыIBCMD(Знач КаталогВыгрузки)
163+
164+
РабочийКонфигуратор = Обработчик.ПолучитьРабочийКонфигуратор();
165+
КонтекстКонфигуратора = РабочийКонфигуратор.ПолучитьКонтекст();
166+
ИмяРасширения = Обработчик.ПолучитьИмяРасширения();
167+
168+
ПутьКIBCMD = Платформа1С.ПутьКIBCMD(Обработчик.ТекущаяВерсияПлатформы);
169+
170+
СервернаяБаза = Ложь;
171+
ПутьКБД = "";
172+
173+
Если Лев(КонтекстКонфигуратора.СтрокаСоединения, 2) = "/F" Тогда
174+
ПутьКБД = СокрЛП(Сред(КонтекстКонфигуратора.СтрокаСоединения, 3));
175+
ИначеЕсли Лев(КонтекстКонфигуратора.СтрокаСоединения, 2) = "/S" Тогда
176+
СервернаяБаза = Истина;
177+
ЧастиПути = СтрРазделить(Сред(КонтекстКонфигуратора.СтрокаСоединения, 3), "\", Ложь);
178+
Если НЕ ЗначениеЗаполнено(СерверБД) Тогда
179+
СерверБД = СокрЛП(ЧастиПути[0]);
180+
КонецЕсли;
181+
Если НЕ ЗначениеЗаполнено(ИмяБД) И ЧастиПути.Количество() > 1 Тогда
182+
ИмяБД = СокрЛП(ЧастиПути[1]);
183+
КонецЕсли;
184+
Иначе
185+
ПутьКБД = РабочийКонфигуратор.ПутьКВременнойБазе();
186+
КонецЕсли;
187+
188+
КомандаIBCMD = Новый Команда;
189+
КомандаIBCMD.УстановитьКоманду(ПутьКIBCMD);
190+
КомандаIBCMD.ДобавитьПараметр("infobase config export");
191+
192+
Если ЗначениеЗаполнено(РабочийКаталогIBCMD) Тогда
193+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD));
194+
КонецЕсли;
195+
Если СервернаяБаза Тогда
196+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--dbms=%1", ТипСУБД));
197+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-server=%1", СерверБД));
198+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-name=%1", ИмяБД));
199+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-user=%1", ПользовательБД));
200+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-pwd=%1", ПарольБД));
201+
Иначе
202+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--db-path=%1", ПутьКБД));
203+
КонецЕсли;
204+
Если ЗначениеЗаполнено(КонтекстКонфигуратора.Пользователь) Тогда
205+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--user=%1", КонтекстКонфигуратора.Пользователь));
206+
Если ЗначениеЗаполнено(КонтекстКонфигуратора.Пароль) Тогда
207+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--pwd=%1", КонтекстКонфигуратора.Пароль));
208+
КонецЕсли;
209+
КонецЕсли;
210+
Если ЗначениеЗаполнено(ИмяРасширения) Тогда
211+
КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--extension=%1", ИмяРасширения));
212+
КонецЕсли;
213+
КомандаIBCMD.ДобавитьПараметр("--force");
214+
215+
ФайлКонфигурации = Новый Файл(ОбъединитьПути(КаталогВыгрузки, "Configuration.xml"));
216+
Если ФайлКонфигурации.Существует() Тогда
217+
КомандаIBCMD.ДобавитьПараметр("--sync");
218+
КонецЕсли;
219+
220+
КомандаIBCMD.ДобавитьПараметр(КаталогВыгрузки);
221+
222+
КодВозврата = КомандаIBCMD.Исполнить();
223+
224+
Если КодВозврата <> 0 Тогда
225+
Лог.КритичнаяОшибка("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD");
226+
КонецЕсли;
227+
228+
КонецПроцедуры // ВыгрузитьКонфигурациюВФайлыIBCMD()
229+
230+
#КонецОбласти
231+
232+
Инициализация();

0 commit comments

Comments
 (0)