Skip to content

Commit

Permalink
Добавлена возможность выбора типа СУБД вручную на форме настройки (#177)
Browse files Browse the repository at this point in the history
* Добавлена возможность выбора типа СУБД вручную на форме настройки

#159

* Исправление ошибок
  • Loading branch information
thvvmas authored Dec 28, 2024
1 parent 74eee97 commit c39b426
Show file tree
Hide file tree
Showing 6 changed files with 209 additions and 30 deletions.
44 changes: 44 additions & 0 deletions src/cf/Catalogs/пбп_НастройкиИнтеграции.xml
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,50 @@
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="6c9902f2-7e3f-4d2e-b51e-efd40a6134c0">
<Properties>
<Name>ТипСУБД</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Тип СУБД</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>30</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:type="xs:string"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Use>ForItem</Use>
<Indexing>DontIndex</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Form>ФормаЭлемента</Form>
<Form>ФормаСписка</Form>
<Form>ФормаЗагрузкиВнешнейКомпоненты</Form>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,31 @@

ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());

Если Не ЭтоНовый() И пбп_ИнтеграцииСлужебный.ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(ТипИнтеграции) Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст = "ВЫБРАТЬ
| пбп_НастройкиИнтеграции.СтрокаПодключения КАК СтрокаПодключения,
| пбп_НастройкиИнтеграции.Порт КАК Порт,
| пбп_НастройкиИнтеграции.ИмяОбъекта КАК ИмяОбъекта,
| пбп_НастройкиИнтеграции.ТипСУБД КАК ТипСУБД
|ИЗ
| Справочник.пбп_НастройкиИнтеграции КАК пбп_НастройкиИнтеграции
|ГДЕ
| пбп_НастройкиИнтеграции.Ссылка = &Ссылка";

ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
ВыборкаРезультатаЗапроса.Следующий();

Если ИмяОбъекта <> ВыборкаРезультатаЗапроса.ИмяОбъекта
Или СтрокаПодключения <> ВыборкаРезультатаЗапроса.СтрокаПодключения
Или Порт <> ВыборкаРезультатаЗапроса.Порт
Или ТипСУБД <> ВыборкаРезультатаЗапроса.ТипСУБД Тогда
ТекстСообщения = НСтр("ru = 'После записи настроек интеграции необходимо нажать на ""Установить соединение с базой данных"" для обновления параметров соединения с внешним источником данных'");
пбп_Переадресация.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
КонецЕсли;

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

Процедура ПриЗаписи(Отказ)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,83 @@
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ContextMenu name="СтрокаПодключенияМногострочнаяКонтекстноеМеню" id="70"/>
<ExtendedTooltip name="СтрокаПодключенияМногострочнаяРасширеннаяПодсказка" id="71"/>
<Events>
<Event name="OnChange">СтрокаПодключенияМногострочнаяПриИзменении</Event>
</Events>
</InputField>
<InputField name="ТипСУБД" id="76">
<DataPath>Объект.ТипСУБД</DataPath>
<DropListButton>true</DropListButton>
<ExtendedEditMultipleValues>true</ExtendedEditMultipleValues>
<ChoiceList>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Microsoft SQL Server</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">MSSQLServer</Value>
</xr:Value>
</xr:Item>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Postgre SQL</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">PostgreSQL</Value>
</xr:Value>
</xr:Item>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>IDM Db2</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">IBMDB2</Value>
</xr:Value>
</xr:Item>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Oracle Database</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">OracleDatabase</Value>
</xr:Value>
</xr:Item>
<xr:Item>
<xr:Presentation/>
<xr:CheckState>0</xr:CheckState>
<xr:Value xsi:type="FormChoiceListDesTimeValue">
<Presentation>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>MySQL</v8:content>
</v8:item>
</Presentation>
<Value xsi:type="xs:string">MySQL</Value>
</xr:Value>
</xr:Item>
</ChoiceList>
<ContextMenu name="ТипСУБДКонтекстноеМеню" id="77"/>
<ExtendedTooltip name="ТипСУБДРасширеннаяПодсказка" id="78"/>
</InputField>
</ChildItems>
</UsualGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,15 @@

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

&НаКлиенте
Процедура СтрокаПодключенияМногострочнаяПриИзменении(Элемент)

Если ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(Объект.ТипИнтеграции) Тогда
Объект.ТипСУБД = ПолучитьИмяСУБДВнешнегоИсточникаДанныхПоСтрокеСоединения(Объект.СтрокаПодключения);
КонецЕсли;

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

&НаКлиенте
Процедура СписокНастроекПриИзменении(Элемент)

Expand Down Expand Up @@ -202,6 +211,7 @@
ГруппаСтрокаПорт = "ГруппаСтрокаПорт";
СтрокаПодключенияМногострочная = "СтрокаПодключенияМногострочная";
УстановитьСоединениеСБазойДанных = "УстановитьСоединениеСБазойДанных";
ТипСУБДСтрокой = "ТипСУБД";

УстанавливаемоеСвойство = "Видимость";

Expand All @@ -211,6 +221,8 @@
Элементы, ГруппаСтрокаПорт, УстанавливаемоеСвойство, Истина);
пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, УстановитьСоединениеСБазойДанных, УстанавливаемоеСвойство, Ложь);
пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, ТипСУБДСтрокой, УстанавливаемоеСвойство, Ложь);

Если Не ЗначениеЗаполнено(Объект.ТипИнтеграции) Тогда
Элементы.СтрокаПодключения.Заголовок = НСтр("ru = 'Каталог'");
Expand Down Expand Up @@ -252,6 +264,7 @@
ПодключитьВнешнююКомпоненту = "ПодключитьВнешнююКомпоненту";
СтрокаПодключенияМногострочная = "СтрокаПодключенияМногострочная";
УстановитьСоединениеСБазойДанных = "УстановитьСоединениеСБазойДанных";
ТипСУБДСтрокой = "ТипСУБД";

СерверСтрока = НСтр("ru = 'Сервер'");

Expand Down Expand Up @@ -312,6 +325,8 @@

пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, УстановитьСоединениеСБазойДанных, УстанавливаемоеСвойство, Истина);
пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, ТипСУБДСтрокой, УстанавливаемоеСвойство, Истина);
ИначеЕсли ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.COM Тогда
Элементы.СтрокаПодключенияМногострочная.Заголовок = НСтр("ru = 'Строка подключения'");
Элементы.ИмяОбъекта.Заголовок = НСтр("ru = 'Имя COM-объекта'");
Expand Down Expand Up @@ -587,4 +602,32 @@

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

&НаСервереБезКонтекста
Функция ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(ТипИнтеграции)

Возврат пбп_ИнтеграцииСлужебный.ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(ТипИнтеграции);

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

&НаКлиенте
Функция ПолучитьИмяСУБДВнешнегоИсточникаДанныхПоСтрокеСоединения(СтрокаСоединения)

Если СтрНайти(СтрокаСоединения, "SQL Server") > 0 Тогда
ИмяСУБД = "MSSQLServer";
ИначеЕсли СтрНайти(СтрокаСоединения, "PostgreSQL") > 0 Тогда
ИмяСУБД = "PostgreSQL";
ИначеЕсли СтрНайти(СтрокаСоединения, "IBM DB2") > 0 Тогда
ИмяСУБД = "IBMDB2";
ИначеЕсли СтрНайти(СтрокаСоединения, "Oracle") > 0 Тогда
ИмяСУБД = "OracleDatabase";
ИначеЕсли СтрНайти(СтрокаСоединения, "MySQL") > 0 Тогда
ИмяСУБД = "MySQL";
Иначе
ИмяСУБД = "";
КонецЕсли;

Возврат ИмяСУБД;

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

#КонецОбласти // СлужебныеПроцедурыИФункции
Original file line number Diff line number Diff line change
Expand Up @@ -127,8 +127,7 @@
ПараметрыСоединения.АутентификацияОС = Ложь;
ПараметрыСоединения.АутентификацияСтандартная = Истина;
ПараметрыСоединения.СтрокаСоединения = СтруктураНастроек.СтрокаПодключения;
ПараметрыСоединения.СУБД = ПолучитьИмяСУБДВнешнегоИсточникаДанныхПоСтрокеСоединения(
СтруктураНастроек.СтрокаПодключения);
ПараметрыСоединения.СУБД = СтруктураНастроек.ТипСУБД;

Если СтруктураНастроек.Свойство("Логин") Тогда
ПараметрыСоединения.ИмяПользователя = СтруктураНастроек.Логин.Значение;
Expand Down Expand Up @@ -678,32 +677,6 @@

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

// Получить имя СУБД внешнего источника данных по строке соединения
//
// Параметры:
// СтрокаСоединения - Строка - строка соединения с базой данных
//
// Возвращаемое значение:
// Строка - тип СУБД (см. ПараметрыСоединенияВнешнегоИсточникаДанных)
//
Функция ПолучитьИмяСУБДВнешнегоИсточникаДанныхПоСтрокеСоединения(СтрокаСоединения)

Если СтрНайти(СтрокаСоединения, "SQL Server") > 0 Тогда
ИмяСУБД = "MSSQLServer";
ИначеЕсли СтрНайти(СтрокаСоединения, "PostgreSQL") > 0 Тогда
ИмяСУБД = "PostgreSQL";
ИначеЕсли СтрНайти(СтрокаСоединения, "IBM DB2") > 0 Тогда
ИмяСУБД = "IBMDB2";
ИначеЕсли СтрНайти(СтрокаСоединения, "Oracle") > 0 Тогда
ИмяСУБД = "OracleDatabase";
ИначеЕсли СтрНайти(СтрокаСоединения, "MySQL") > 0 Тогда
ИмяСУБД = "MySQL";
Иначе
ИмяСУБД = Неопределено;
КонецЕсли;

Возврат ИмяСУБД;

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


#КонецОбласти // СлужебныеПроцедурыИФункции
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@
УстановитьПривилегированныйРежим(Истина);

СтруктураНастроек = пбп_Переадресация.ЗначенияРеквизитовОбъекта(
НастройкаИнтеграции, "СтрокаПодключения, Порт, ИмяОбъекта");
НастройкаИнтеграции, "СтрокаПодключения, Порт, ИмяОбъекта, ТипСУБД");
ДанныеБезопасногоХранилища = пбп_Переадресация.ПрочитатьДанныеИзБезопасногоХранилища(НастройкаИнтеграции);

Для Каждого КлючИЗначение Из ДанныеБезопасногоХранилища Цикл
Expand Down Expand Up @@ -260,6 +260,23 @@

#КонецОбласти // РаботаСДанными

// Проверить это интеграция с внешним источником данных
//
// Параметры:
// ТипИнтеграции - СправочникСсылка.пбп_ТипыИнтеграций - тип интеграции
//
// Возвращаемое значение:
// Булево - Истина, если настройка интеграции с типом интеграция с внешним источником данных
//
Функция ПроверитьЭтоИнтеграцияСВнешнимИсточникомДанных(ТипИнтеграции) Экспорт

ЭлементНаследования = Справочники.пбп_ТипыИнтеграций
.ПолучитьПредопределенныйЭлементНаследованияНастроекТипаИнтеграции(ТипИнтеграции);

Возврат ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.ПрямоеПодключениеКБД;

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

#КонецОбласти // СлужебныйПрограммныйИнтерфейс

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

0 comments on commit c39b426

Please sign in to comment.