В 1с необходимо получить данные из другой программы, хранящей данные в БД Firebird. Для решения задачи будем использовать драйвер ODBC для Firebird / Interbase – для подключения к базе данных. Получать данные будем при помощи языка запросов SQL.
Установка драйвера ODBC для Firebird/ Interbase
1.Скачиваем драйвер ODBC
- Firebird/Interbase(r) ODBC driver 2.0.1.152 32 разрядная ОС.
- Firebird/Interbase(r) ODBC driver 2.0.1.152 64 разрядная ОС.
2.Разархивируем и запускаем загруженный файл от имени администратора
3.После окончания установки если все прошло успешно драйвер установлен. Файлы fbclient.dll и gds32.dll должны попасть в папку windows\system32
Подключение к базе данных Firebird / Interbase из 1с
Для подключения будем использовать Com Объект ADODB.Connection
Cnn = Новый COMОбъект(“ADODB.Connection”);
и строку подключения вида:
СтрокаПодключения=”Driver=Firebird/InterBase(r) driver;Dbname=192.168.0.100:d:\Base\BD.FDB;CHARSET=WIN1251; PWD=masterkey;UID=SYSDBA;ReadOnly=1;SafeThread=1;NoWait=1;”;
Основные параметры строки подключения:
- Driver=Firebird/InterBase(r) driver – Имя драйвера
- Dbname=192.168.0.1:f:\sw7\SW7.FDB – Путь к базе данных (Имя или IP сервера:Папка с файлом БД
- UID=SYSDBA – Имя пользователя БД
- PWD=masterkey – пароль пользователя БД
- CHARSET=WIN1251 – кодировка таблиц БД
- ReadOnly=1 – только чтение
После подключения делаем запрос на языке SQL к нужным данным при помощи COM Объекта ADODB.Command
SQL = “select invoices.AMOUNT as AMOUNT from invoices
| where
| invoices.invn = ” + счет + ” AND invoices.depno = ” + отдел;
После получения данных делаем обход полученных результатов в цикле. К данным обращаемся через псевдонимы в запросе. Пример: select invoices.AMOUNT as AMOUNT –> Rst.Fields(“AMOUNT”).Value
Код 1с для обращения к БД Firebird
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | Функция ADO_Recordset(Cnn, SQL, Cmd = Неопределено, ToWrite = Ложь, NoWait = Истина) Экспорт Если Cmd = Неопределено Тогда Cmd = Новый COMОбъект("ADODB.Command"); Cmd.ActiveConnection = Cnn; Если NoWait Тогда Cmd.CommandText = "SET TRANSACTION NO WAIT"; Cmd.Execute(); КонецЕсли; КонецЕсли; Cmd.CommandText = SQL; Rst = Cmd.Execute(); Возврат(Новый Структура("Cmd, Rst", Cmd, Rst)); КонецФункции Функция ПолучитьЦенуСО(счет,отдел); Cnn = Новый COMОбъект("ADODB.Connection"); СтрокаПодключения="Driver=Firebird/InterBase(r) driver;Dbname=192.168.0.100:d:\Base\BD.FDB;CHARSET=WIN1251;PWD=masterkey;UID=SYSDBA;ReadOnly=1;SafeThread=1;NoWait=1;"; Cnn.ConnectionString = СтрокаПодключения; Попытка Cnn.Open(,); Исключение Сообщить("Проверьте строку подключения и драйвер ODBC"); КонецПопытки; Если (Cnn = Неопределено) Или (Cnn.State <> 1) Тогда Возврат(0); КонецЕсли; SQL = "select invoices.AMOUNT as AMOUNT from invoices | where | invoices.invn = " + счет + " AND invoices.depno = " + отдел; ADO = ADO_Recordset(Cnn, SQL); Rst = ADO.Rst; Cmd = ADO.Cmd; Пока Не Rst.EOF() Цикл ОбработкаПрерыванияПользователя(); сумма = Rst.Fields("AMOUNT").Value; Rst.MoveNext(); КонецЦикла; Возврат(Сумма) КонецФункции |