Подключение к файлу .fbd через 1С

1. Stanislav1993 28.11.18 13:42 Сейчас в теме
Здравствуйте.
На работе используется система СКУД "Кронверк". Данные хранятся в БД Firebird.
На свой ноутбук установил компоненты расширений для Firebird.
Создал обработку для подключения, но при подключении выдается ошибка;
Ошибка при установке соединения: {Обработка.ПодключениеКБазе.Форма.Форма.Форма(21)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Unable to complete network request to host "xnet://Global\FIREBIRD".


&НаКлиенте
Процедура Подключиться(Команда)
	ПодключитьсяКБазе();	
КонецПроцедуры

&НаКлиенте
Процедура ПодключитьсяКБазе();
	ПутьКБазе = "E:\ibnet.fdb";
	мСоединение=Новый COMОбъект("ADODB.Connection");
	мСоединение.ConnectionString="driver=Firebird/InterBase® driver; 
	|Dialect=3; 
	|CHARSET=NONE; 
	|Uid=1;
	|Pwd=1;
	|Dbname="+СокрЛП(ПутьКБазе);
    мСоединение.ConnectionTimeOut=180; // и хватит
    мСоединение.CursorLocation=3;
	
	Попытка
        мСоединение.Open(мСоединение.ConnectionString);
		ПоказатьОповещениеПользователя("ОК",,"Соединение успешно установлено!");
	Исключение
		Сообщить("Ошибка при установке соединения: "+ОписаниеОшибки());
		мСоединение=Неопределено;
	КонецПопытки;
КонецПроцедуры
Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. t.v.s. 111 28.11.18 15:06 Сейчас в теме
(1)Путь к базе надо указывать с хостом, примерно так
localhost:E:\ibnet.fdb
6. Stanislav1993 28.11.18 15:08 Сейчас в теме
(5)Все равно та же самая ошибка
7. Denis_CFO 48 28.11.18 15:19 Сейчас в теме
(6) версия firebird какая? Попробуйте на версии 2.5
8. Stanislav1993 28.11.18 15:25 Сейчас в теме
(7) На проходной версия 2,0 стоит
2. Timur.V 78 28.11.18 14:24 Сейчас в теме
ПутьКБазе = "E:\ibnet.fdb";

Этот пусть где? на клиенте, на сервере (директивы сверху у процедуры)

Пример подключения, ссылка.
3. Stanislav1993 28.11.18 14:59 Сейчас в теме
(2)На основе этой публикации я и делаю подключение
4. Stanislav1993 28.11.18 15:05 Сейчас в теме
(2)Я и по этой ссылке тоже делал.
Вот такая ошибка выходит
Невозможно установить соединение с Firebird:
{Обработка.ПодключениеКБазе.Форма.Форма.Форма(42)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Unable to complete network request to host "xnet://Global\FIREBIRD".
9. t.v.s. 111 28.11.18 15:37 Сейчас в теме
Каким-нибудь клиентом получается подключиться к ней?
10. Stanislav1993 29.11.18 06:14 Сейчас в теме
(9)нет
Даже решил проверить подключение к ней через сам комп на котором работает СКУД
11. Denis_CFO 48 29.11.18 06:42 Сейчас в теме
(10) у меня взлетело после вот такого:
поставьте firebird сервер и ОДБЦ драйвер на той машине, с которой инициируете подключение. На той машине, где стоит база в файле aliases.conf (в папке сервера firebird) пропишите строку, типа
sBD = E:\ibnet.fdb
перезапустите сервер firebird и попробуйте подключиться указав строку подключения
ПутьКБазе = "IPИсточника_базы:sBD"
12. Stanislav1993 29.11.18 07:29 Сейчас в теме
(11) У меня теперь ошибка другого рода
Ошибка при установке соединения: {Обработка.ПодключениеКБазе.Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [ODBC Firebird Driver]Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
15. Stanislav1993 29.11.18 07:35 Сейчас в теме
(12)
&НаКлиенте
Процедура ПодключитьсяКБазе();
	
	ПутьКБазе = "localhost:E:\DB\DB.fbd";
	мСоединение=Новый COMОбъект("ADODB.Connection");
	мСоединение.ConnectionString="driver=Firebird/InterBase® driver; 
	|Dialect=3; 
	|CHARSET=NONE; 
	|Uid=SYSADMIN;
	|Pwd=masterkey;
	|Dbname="+СокрЛП(ПутьКБазе);
	мСоединение.ConnectionTimeOut=180; // и хватит
	мСоединение.CursorLocation=3;
	Попытка
	    мСоединение.Open(мСоединение.ConnectionString);
		ПоказатьОповещениеПользователя("ОК",,"Соединение успешно установлено!");
	Исключение
		Сообщить("Ошибка при установке соединения: "+ОписаниеОшибки());
		мСоединение=Неопределено;
	КонецПопытки;	
КонецПроцедуры
Показать

Код через который я обращаюсь
16. Denis_CFO 48 29.11.18 07:55 Сейчас в теме
(15) логин пароль у Вас сначала были 1 1 теперь другие указываете.
13. Stanislav1993 29.11.18 07:33 Сейчас в теме
(11)
sBD = E:\ibnet.fdb
Прикрепленные файлы:
14. Stanislav1993 29.11.18 07:34 Сейчас в теме
(11)Я сейчас установил на сервак и драйвер на мою машину. Службы запущены. Тестовую базу создал через прогу IBExpert
Сейчас выходит так, что авторизация не проходит
17. Stanislav1993 29.11.18 08:00 Сейчас в теме

&НаКлиенте
Процедура ПодключитьсяКБазе();
	ПутьКБазе = "localhost:E:\ibnet.fdb";
	мСоединение=Новый COMОбъект("ADODB.Connection");
	мСоединение.ConnectionString="driver=Firebird/InterBase® driver; 
	|Dialect=3; 
	|CHARSET=utf-8; 
	|Uid=SYSDBA;
	|Pwd=masterkey;
	|Role=rdb$admin;
	|Dbname="+СокрЛП(ПутьКБазе);
	мСоединение.ConnectionTimeOut=180; // и хватит
	мСоединение.CursorLocation=3;
	Попытка
	    мСоединение.Open(мСоединение.ConnectionString);
		ПоказатьОповещениеПользователя("ОК",,"Соединение успешно установлено!");
	Исключение
		Сообщить("Ошибка при установке соединения: "+ОписаниеОшибки());
		мСоединение=Неопределено;
	КонецПопытки;	
КонецПроцедуры
Показать

Сработало
18. Stanislav1993 29.11.18 08:12 Сейчас в теме
Осталось докопаться до внутренностей файла.Попробовать открыть этот файл и узнать название таблицы и полей
19. Stanislav1993 29.11.18 14:46 Сейчас в теме
&НаКлиенте
Процедура Подключиться(Команда)
	ВыполнитьЗапрос();
КонецПроцедуры

&НаКлиенте
Функция ВыполнитьПодключениеКБД()
	ПутьКБазе = "localhost:E:\ibnet.fdb";
	мСоединение=Новый COMОбъект("ADODB.Connection");
	мСоединение.ConnectionString="driver=Firebird/InterBase® driver; 
	|Dialect=3; 
	|CHARSET=utf-8; 
	|Uid=SYSDBA;
	|Pwd=masterkey;
	|Role=rdb$admin;
	|Dbname="+СокрЛП(ПутьКБазе);
	мСоединение.ConnectionTimeOut=180; // и хватит
	мСоединение.CursorLocation=3;
	Попытка
		мСоединение.Open(мСоединение.ConnectionString);
		ПоказатьОповещениеПользователя("ОК",,"Соединение успешно установлено!");
	Исключение
		Сообщить("Ошибка при установке соединения: "+ОписаниеОшибки());
		мСоединение=Неопределено;
	КонецПопытки;
	Возврат мСоединение;
КонецФункции

&НаКлиенте
Функция ВыполнитьЗапрос()
	ЗагруженоНовыхСотрудников = 0;
	Connection = ВыполнитьПодключениеКБД();
	
	RecordSetDepartanent = Новый COMОбъект("ADODB.Recordset");
	RecordSetDepartanent.ActiveConnection = Connection;
	RecordSetDepartanent.CursorType = 1;
	RecordSetDepartanent.LockType = 3;
	Try
		RecordSetDepartanent.Open("SEL ECT OW_FIRSTNAME, OW_MIDDLENAME, OW_LASTNAME,OW_WS_ID FR OM OWNER", Connection);
	Except  
		Сообщить("Не удалось выполнить запрос " + ОписаниеОшибки());
		Connection.Close();
		Return Connection;
	EndTry;  
	// Обработка результатов запроса
	Пока(RecordSetDepartanent.EOF() = 0)Цикл
		НаименованиеСотрудников 	 = String(RecordSetDepartanent.Fields("OW_LASTNAME").Value)+" " 
										+ String(RecordSetDepartanent.Fields("OW_FIRSTNAME").Value) + " " 
											+String(RecordSetDepartanent.Fields("OW_MIDDLENAME").Value) ;
		//Подразделение 				 = String(RecordSetDepartanent.Fields("WS_FULLNAME").Value); 
		RecordSetDepartanent.MoveNext();
	КонецЦикла;
	// Не забываем закрыть набор данных !!!
	RecordSetDepartanent.Close();
	Connection.Close();
КонецФункции

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

&НаСервереБезКонтекста
Процедура ЗаписатьНовогоСотрудника(НаименованиеСотрудников,НаименованиеСотрудника,Подразделение,ЗагруженоНовыхСотрудников)
	СпрСотрудники = Справочники.Сотрудники;
	СпрПодразделение = Справочники.Подразделения;
	
	НаименованиеСотрудников  				 = НаименованиеСотрудника;
	НайтиНаименованиеСпрСотр 				 = СпрСотрудники.НайтиПоНаименованию(НаименованиеСотрудников,Истина);
	НайтиЭлПодразделения					 = СпрПодразделение.НайтиПоНаименованию(Подразделение,Истина);
	
	Если НайтиНаименованиеСпрСотр.Пустая = СпрСотрудники.ПустаяСсылка() Тогда
		НовЭл = СпрСотрудники.СоздатьЭлемент();
		ЗагруженоНовыхСотрудников = ЗагруженоНовыхСотрудников + 1;
		
		Если ПустаяСтрока(НайтиЭлПодразделения) Тогда
			НовЭлПодразделения = СпрПодразделение.СоздатьЭлемент();
			НовЭлПодразделения.Наименование = Подразделение;
			НовЭлПодразделения.Записать();
			НовЭл.Подразделение = НовЭлПодразделения.Ссылка;
		Иначе
			НовЭл.Подразделение = НайтиЭлПодразделения;
		КонецЕсли;
	Иначе
		ВыборкаДетальныеЗаписи = НайтиНаименованиеСпрСотр;
	КонецЕсли;
КонецПроцедуры
Показать

Хотелось бы у Вас коллег спросить где у меня ошибка. Цель данного поста такова.
На предприятии где я работаю установлена турникетная система "Кронверк".
По этой системе идет выгрузка данных о входах/выходах сотрудников,. но это не главное.
Если создается новый сотрудник, то по в начале его приходится занести в СКУД, а потом только в 1С.
А моя задача/цель облегчить себе работу по добавлению сотрудников в 1С-ке.
Я хочу через подключение к базе СКУД-а, загружать новых сотрудников в 1с-ку.
Поэтому если можно просто скажите в каком месте мне нужно доработать данный код.
Все большое спасибо!
20. Denis_CFO 48 29.11.18 14:58 Сейчас в теме
(19)
то по в начале его приходится занести в СКУД, а потом только в 1С.
возьми код сотрудника из СКУД и этот код присвой сотруднику в 1С. После этого ищи по коду.
22. Stanislav1993 29.11.18 15:11 Сейчас в теме
(20)ммм то есть сначала добавить реквизит в спр.Сотрудники код по проходной, а потом уже делать загрузку новых сотрудников)
23. Denis_CFO 48 29.11.18 15:14 Сейчас в теме
(22)
ммм то есть сначала добавить реквизит в спр.Сотрудники код по проходной
ну да. Это идея. Как её реализовать - там на месте виднее. :) Суть в том, что должен быть какой-то уникальный реквизит для двух баз.
24. Stanislav1993 30.11.18 12:45 Сейчас в теме
(23)Привет!)
Я вот кое что тут сделал
&НаКлиенте
Функция ВыполнитьПодключениеКБД()
	ПутьКБазе = "localhost:E:\ibnet.fdb";
	мСоединение=Новый COMОбъект("ADODB.Connection");
	мСоединение.ConnectionString="driver=Firebird/InterBase® driver; 
	|Dialect=3; 
	|CHARSET=utf-8; 
	|Uid=SYSDBA;
	|Pwd=masterkey;
	|Role=rdb$admin;
	|Dbname="+СокрЛП(ПутьКБазе);
	мСоединение.ConnectionTimeOut=180; // и хватит
	мСоединение.CursorLocation=3;
	Попытка
		мСоединение.Open(мСоединение.ConnectionString);
		ПоказатьОповещениеПользователя("ОК",,"Соединение успешно установлено!");
	Исключение
		Сообщить("Ошибка при установке соединения: "+ОписаниеОшибки());
		мСоединение=Неопределено;
	КонецПопытки;
	Возврат мСоединение;
КонецФункции

&НаКлиенте
Функция ВыполнитьЗапрос()
	Connection = ВыполнитьПодключениеКБД();
	
	RecordSet = Новый COMОбъект("ADODB.Recordset");
	RecordSet.ActiveConnection = Connection;
	RecordSet.CursorType = 1;
	RecordSet.LockType = 3;
	
	RecordGetDepartament = Новый COMОбъект("ADODB.Recordset");
	RecordGetDepartament.ActiveConnection = Connection;
	RecordGetDepartament.CursorType = 1;
	RecordGetDepartament.LockType = 3;

	
	
	Try
		RecordSet.Open("SEL ECT OW_LASTNAME,OW_FIRSTNAME,OW_MIDDLENAME,OW_ID FR OM OWNER WH ERE OW_ID = 1943", Connection);
		RecordGetDepartament.Open("SELECT WS_ID, WS_FULLNAME FR OM WORKSITE",Connection);
		Сообщить("Ура:)");
	Except  
		Сообщить("Не удалось выполнить запрос " + ОписаниеОшибки());
		Connection.Close();
		Return Connection;
	EndTry;  
	
	
	
	// Обработка результатов запроса
	
	СпрСотр = Справочники.Сотрудники;
	СпрОтдел = Справочники.Подразделения;
	
	Пока(RecordSet.EOF() = 0 И RecordGetDepartament.EOF() = 0)Цикл
		
		ФамилияСотрудников				 = СокрЛП(String(RecordSet.Fields("OW_LASTNAME").Value));
		НаименованиеСотрудников 		 = СокрЛП(String(RecordSet.Fields("OW_FIRSTNAME").Value));
		ОтчествоСотрудников 	 		 = СокрЛП(String(RecordSet.Fields("OW_MIDDLENAME").Value));
		ОтделСотрудников				 = СокрЛП(String(RecordGetDepartament.Fields("WS_FULLNAME").Value));
		КодПодразделенияСотрудников      = СокрЛП(String(RecordGetDepartament.Fields("WS_ID").Value));
		КодСКУД = String(RecordSet.Fields("OW_ID").Value);
		
		FullWorkerSKUD = ФамилияСотрудников+" "+НаименованиеСотрудников+" "+ОтчествоСотрудников;
		Сообщить(НаименованиеСотрудников);
		
		
		Departament = СпрОтдел.НайтиПоНаименованию(ОтделСотрудников,Истина);
		Если Departament.Пустая() И ЗначениеЗаполнено(ОтделСотрудников) Тогда
			НовОтдел = СпрОтдел.СоздатьЭлемент();
			НовОтдел.Наименование = ОтделСотрудников;
			НовОтдел.Код = КодПодразделенияСотрудников;
			НовОтдел.Записать();
			Departament = НовОтдел.Ссылка;
		КонецЕсли;
		
		Worker = СпрСотр.НайтиПоНаименованию(FullWorkerSKUD,Истина);
		Если Worker.Пустая() И ЗначениеЗаполнено(FullWorkerSKUD) Тогда
			НовСотр = СпрСотр.СоздатьЭлемент();
			НовСотр.Наименование 	= FullWorkerSKUD;
			НовСотр.Подразделение 	= Departament;
			НовСотр.КодСотрудникаПроходная = КодСКУД;
			НовСотр.Записать();
		КонецЕсли;
		
		
		
		
		
			RecordSet.MoveNext();
			RecordGetDepartament.MoveNext();
	КонецЦикла;
	// Не забываем закрыть набор данных !!!
	
	RecordSet.Close();
	RecordGetDepartament.Close();
	
	Connection.Close();
	

Показать
25. Stanislav1993 30.11.18 12:53 Сейчас в теме
(24)Все подразделения СКУД-а загрузились в справочник Подразделения 1с. Код подразделения СКУД-а я загрузил в основным кодом в справочник в 1с.
Проблема в том, что у меня не все сотрудники подтянулись, да и еще подразделения им присвоились не те.
26. Denis_CFO 48 30.11.18 13:46 Сейчас в теме
(25) в конфигурацию 1с можешь изменения вносить?
27. Stanislav1993 30.11.18 14:01 Сейчас в теме
21. Denis_CFO 48 29.11.18 14:59 Сейчас в теме
(19) + (20) сделай код в СКУДе уникальным.
28. dmarenin 349 01.12.18 18:49 Сейчас в теме
(0) подключай через внешний источник
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот