Добираемся до 32 битной Interbase/Firebird с актуального продового контура 1С

04.06.26

База данных - Администрирование СУБД

Чтение, запись и обновление строк с 64 битной, серверной 1С. Бесплатно и без смс.

 Вводные данные

  • Сервер: Windows Server 2003 R2 x86

  • Источник: Interbase (производственная база)

  • Приёмник: SQL Server 2008 Express x86

  • Клиент: 1С (выгрузка/синхронизация через SQL Server)

Цель: синхронизировать данные либо периодически затягивать их из Interbase в SQL Server для последующего использования в 1С.


1. Установка и настройка ODBC-драйвера Firebird

  • Скачайте ODBC-драйвер Firebird версии 2.0.3 или 2.0.5 (стабильные для Interbase).

  • Установите драйвер на сервере, где будет работать SQL Server.

Примечание: даже если целевая БД — Interbase, драйвер Firebird ODBC подходит (они совместимы на уровне протокола), а за оригинальные дрова просят доллары.


2. Создание системного DSN

  1. Откройте Администрирование → Источники данных ODBC.

  2. Перейдите на вкладку Системный DSN.

  3. Нажмите Добавить → выберите драйвер Firebird/InterBase ODBC.

  4. Настройте подключение:

    • Имя DSN (например, INTERBASE_DSN)

    • В строке Database укажите путь к файлу .gdb или .fdb, обязательно добавив в начало имя_сервера: или localhost:
      Пример: localhost:C:\Database\PROD.GDB
      Если этого не сделать, Interbase может не пустить подключение.

  5. Задайте остальные параметры (кодировка – обычно WIN1251 для кириллицы, пользователь SYSDBA, пароль masterkey).

  6. Сохраните DSN.


3. Установка SQL Server 2008 Express x86

  • Установите SQL Server 2008 Express (32-разрядная версия, даже если ОС 64-бит – для совместимости с драйвером).

  • В процессе установки выберите смешанный режим аутентификации (sa + пароль).

  • Запомните имя экземпляра (например, MSSQLSERVER или SQLEXPRESS).


4. Создание связанного сервера к Interbase через ODBC

Выполните в SQL Server Management Studio (или в sqlcmd) следующий скрипт:

-- 1. Создаём связанный сервер
EXEC sp_addlinkedserver   
   @server = N'INTERBASE_LINK',      -- Имя для запросов
   @srvproduct = N'InterBase',  
   @provider = N'MSDASQL',   
   @datasrc = N'INTERBASE_DSN';      -- Имя вашего системного DSN
GO

-- 2. Настраиваем учётные данные для подключения к Interbase
EXEC sp_addlinkedsrvlogin   
   @rmtsrvname = N'INTERBASE_LINK',   
   @useself = N'False',  
   @locallogin = NULL,   
   @rmtuser = N'SYSDBA',   
   @rmtpassword = N'masterkey';
GO

5. Настройка SQL Server для доступа из 1С

Чтобы сервер 1С «увидел» SQL Server:

  • Откройте SQL Server Configuration Manager.

  • В разделе Сетевые конфигурации SQL Server выберите Протоколы для вашего экземпляра.

  • Включите TCP/IP (и перезапустите службу SQL Server).

  • Включите службу SQL Server Browser (она должна быть запущена, чтобы отвечать на запросы по именам экземпляров).


6. Разрешение удалённого вызова процедур (RPC)

Выполните в SQL Server:

EXEC sp_serveroption 'INTERBASE_LINK', 'rpc', 'true';
EXEC sp_serveroption 'INTERBASE_LINK', 'rpc out', 'true';

Это позволит выполнять хранимые процедуры на связанном сервере и получать результаты.


7. Создание обёрточной хранимой процедуры для записи данных

Проблема: при прямом вызове OPENQUERY или EXEC AT из 1С возникают трудности с кодировками (WIN1251 ↔ UTF-16) и экранированием кавычек.

Решение: создаём на SQL Server процедуру, которая формирует динамический SQL и выполняет его через связанный сервер.

CREATE PROCEDURE dbo.InsertOrderToInterbase
    @OrderNo INT,
    @Customer VARCHAR(200),
    @FinishDate DATETIME,
    @Issue INT,
    @OrderSubNo VARCHAR(15),
    @WaitedOrder SMALLINT = 0
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @DateStr VARCHAR(25) = CONVERT(VARCHAR(25), @FinishDate, 120);
    DECLARE @SQL NVARCHAR(MAX);

    SET @SQL = N'EXEC (''INSERT INTO ORDERS (ORDER_NO, CUSTOMER, FINISH_DATE, ISSUE, ORDER_SUBNO, WAITED_ORDER) '
               + N'VALUES ('
               + CAST(@OrderNo AS VARCHAR(10)) + N', '
               + N'_WIN1251''''' + REPLACE(@Customer, '''', '''''') + N''''', '
               + N'''''' + @DateStr + N''''', '
               + CAST(@Issue AS VARCHAR(10)) + N', '
               + N'_WIN1251''''' + REPLACE(@OrderSubNo, '''', '''''') + N''''', '
               + CAST(@WaitedOrder AS VARCHAR(5)) + N')'') AT INTERBASE_LINK';

    EXEC sp_executesql @SQL;
END;

💡 Пояснение: _WIN1251 перед строкой – это указание Interbase на кодировку. Без этого кириллица превратится в «крокозябры».


8. Вызов процедуры из 1С (запись в Interbase)

&НаСервере
Процедура ЗаписатьСтрокуДанныхВInterBase(Connection)

    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = Connection;
    Command.CommandText = "dbo.InsertOrderToInterbase";
    Command.CommandType = 4; // adCmdStoredProc

    // Параметры (порядок и типы должны совпадать с определением процедуры)
    Command.Parameters.Append(Command.CreateParameter("@OrderNo",      3, 1, , НомерЗаказа));
    Command.Parameters.Append(Command.CreateParameter("@Customer",   200, 1, 200, ИмяКлиента));
    Command.Parameters.Append(Command.CreateParameter("@FinishDate",   7, 1, , ДатаЗавершения));
    Command.Parameters.Append(Command.CreateParameter("@Issue",        3, 1, , НомерИшью));
    Command.Parameters.Append(Command.CreateParameter("@OrderSubNo", 200, 1, 15, ПодномерЗаказа));
    Command.Parameters.Append(Command.CreateParameter("@WaitedOrder",  2, 1, , ЖдатьЗаказ));

    Command.Execute();

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

9. Чтение данных из Interbase через SQL Server (пример для 1С)

Чтение проще записи – используем OPENQUERY:

&НаСервере
Процедура SQLLinkНаСервере()

    // Подключение к SQL Server (не к Interbase!)
    СтрокаПодкл = "Provider=MSOLEDBSQL;Data Source=ИМЯ_СЕРВЕРА_SQL;Initial Catalog=master;User ID=sa;Password=пароль;";

    ЗапросInterbase = "SELECT ORDER_NO, ORDER_SUBNO, CUSTOMER, FINISH_DATE, ISSUE FROM ORDERS ROWS 1 TO 50";
    ОберткаSQL = "SELECT * FROM OPENQUERY(INTERBASE_LINK, '%1')";
    ТекстSQL = СтрШаблон(ОберткаSQL, ЗапросInterbase);

    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.Open(СтрокаПодкл);

    RecordSet = Connection.Execute(ТекстSQL);
    ТаблицаЗаписей = RecordSetВТаблицуЗначений(RecordSet);

    Для Каждого СтрокаЗаписи Из ТаблицаЗаписей Цикл
        Сообщить(СтрШаблон("ORDER_NO=%1, CUSTOMER=%2", СтрокаЗаписи[0], СтрокаЗаписи[2]));
    КонецЦикла;

    Сообщить("Количество записей: " + ТаблицаЗаписей.Количество());

    RecordSet.Close();
    Connection.Close();

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

10. Функция преобразования RecordSet → ТаблицаЗначений

Функция RecordSetВТаблицуЗначений(RecordSet)
    ТЗ = Новый ТаблицаЗначений;

    // 1. Создаём колонки
    Для Каждого Поле Из RecordSet.Fields Цикл
        ИмяКолонки = СтрЗаменить(Поле.Name, " ", "_"); // пробелы заменяем
        ТЗ.Колонки.Добавить(ИмяКолонки);
    КонецЦикла;

    // 2. Заполняем строки
    Пока НЕ RecordSet.EOF Цикл
        НоваяСтрока = ТЗ.Добавить();
        Для Каждого Поле Из RecordSet.Fields Цикл
            ИмяКолонки = СтрЗаменить(Поле.Name, " ", "_");
            НоваяСтрока[ИмяКолонки] = Поле.Value;
        КонецЦикла;
        RecordSet.MoveNext();
    КонецЦикла;

    Возврат ТЗ;
КонецФункции

 

Вступайте в нашу телеграмм-группу Инфостарт

Interbase SQL ADODB

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

HighLoad оптимизация Администрирование СУБД Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бухгалтерский учет Бесплатно (free)

После миграции с MS SQL на PostgreSQL закрытие месяца в 1С:ERP стало идти 8 часов вместо 12 минут. Рассказываем, как мы нашли причину в оценке Hash Join, которую планировщик завышал в миллионы раз, и как исправили её так, что проблемный запрос теперь выполняется за 18 секунд вместо часа.

19.10.2026    957    Tantor    0    

10

Администрирование СУБД HighLoad оптимизация Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Большинство материалов о компрессии в PostgreSQL отвечают на вопрос «во сколько раз удалось уменьшить базу». Мы предлагаем посмотреть на проблему с другой стороны — какой ценой достигается эта экономия? В статье разбираем архитектурные компромиссы различных подходов к компрессии страниц, объясняем, почему при разработке CSM в Tantor Postgres отказались от погони за максимальным коэффициентом сжатия, и показываем результаты нагрузочных испытаний на реальных базах 1С.

01.10.2026    1449    Tantor    6    

17

DevOps и автоматизация разработки Администрирование СУБД Групповая разработка (Git, хранилище) Разработчик 1С 8.3 Абонемент ($m)

В корпоративных инсталляциях «1С:Предприятие 8.3» под управлением PostgreSQL всё чаще проявляются архитектурные пределы масштабирования: рост числа пользователей, обязательная маркировка, плотный поток API-интеграций и высокая стоимость простоя. Вводная часть цикла разбирает ключевые факторы современной эксплуатационной нагрузки и формирует инженерную методологию эволюционной модернизации без остановки продуктивного контура. Материал основан на практическом кейсе «Торговый контур» и показывает, как определить целевые метрики (p95, MTTR, APDEX), выстроить наблюдаемость, стабилизировать работу кластера и подготовить инфраструктуру к дальнейшему масштабированию. Публикация задаёт фундамент для последующих частей, посвящённых телеметрии, оптимизации PostgreSQL, CI/CD и архитектурному росту.

1 стартмани

10.09.2026    1521    Ninel_S    0    

6

HighLoad оптимизация Администрирование СУБД Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

В рамках 18 релиза СУБД Tantor Postgres мы рассказывали об оптимизациях, которые помогают планировщику сделать более точный выбор между Nested Loop и Hash Join. В следующем релизе у нас планируются оптимизации, которые позволят ускорить выполнение как Nested Loop, так и Hash Join. Сегодня мы расскажем об одном из таких методов - фильтре Блума.

31.08.2026    6118    Tantor    3    

18

Администрирование СУБД Системный администратор Разработчик 1С 8.3 Бесплатно (free)

Мы подготовили для сообщества Infostart.ru практическое занятие, в котором каждый желающий сможет: научиться собирать реальные данные о процессах кластера 1С; выявлять «перестарков» — процессы старше периода и без соединений; выполнять безопасный перезапуск (с dry-run и подтверждением); настраивать автоматическую проверку через systemd на Linux; отправлять уведомления (Telegram, почта) при обнаружении проблем; работать с логами, ротацией, профилями кластеров и конфигурацией; развернуть полноценный учебный проект AdminClusterMonitor у себя в тестовой среде.

30.08.2026    1730    Ninel_S    2    

6

Администрирование СУБД Системный администратор 1С:Предприятие 8 Бесплатно (free)

На infostart.ru вышел разбор Ивана Недомолкова «Сервер 1С падает: настройка сбора дампов (logcfg.xml), лимиты памяти и передача дампа в поддержку» - это хорошая инструкция, как ловить и разбирать падение rphost постфактум: logcfg.xml, procdump, анализ дампа. Но там нет ответа на вопрос «а почему кластер вообще прибил процесс сам, ещё до всякого краша». Мы дополняем разбор тремя сводными таблицами лимитов памяти и автомасштабирования кластера - и заодно фиксируем, чем в этой части лицензия ПРОФ урезана относительно КОРП.

12.08.2026    2378    Ninel_S    5    

6

Администрирование СУБД Системный администратор Разработчик Бесплатно (free)

5,5 тысячи пользователей в единой базе 1С, розница в режиме 24/7 и SLA 99,98% – в таких условиях любая авария быстро превращается в очереди на кассах, потерю денег и давление со стороны бизнеса. Показываем, как выстроить процесс аварийно-восстановительных работ: от первых алертов и базового скрининга системы до подключения команды, проверки гипотез и дебрифа после инцидента. Разбираем, как метрики, дашборды, техжурнал, Zabbix, Prometheus, Grafana, Telegram-боты и скрипты помогают не гадать, а быстро находить причину проблемы. На реальных авариях объясняем, почему «быстро» не должно означать «рискованно», как работа над ошибками снижает панику и почему каждая авария может сделать систему надежнее.

11.08.2026    3406    jul.dolganova    9    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1146 04.06.26 10:56 Сейчас в теме
Через ВИДы не пробовали подключиться?
2. Baronello 36 04.06.26 12:56 Сейчас в теме
(1) Пробовал, там стандарты SQL, из интербейза не выдаст структуру таблиц.
3. Baronello 36 08.06.26 10:39 Сейчас в теме
(1) Хотя часть баз линкованный сервер открывает с табличками, может эти заведутся, мистика. Я еще успешно делал 64 битную обертку через ADODB com+ к драйверу ODBC, но туда замучаешься пропихивать переменные.

Еще забавный баг где пишешь через openquery update и он кроме строчки по отборам еще куда-то фигачит по кэшу/курсору. Exec опять же выручает тут.
Для отправки сообщения требуется регистрация/авторизация