← На главную
При переносе файловой базы данных 1С:Предприятие 7.7 (DBF) в клиент-серверный вариант на Microsoft SQL Server администраторы часто сталкиваются со сбоем на этапе «загрузка системной информации». Процесс аварийно прерывается сообщением: «подключение занято до получения результатов для другого hstmt» (ODBC State HY000). Разберем причины возникновения этой неполадки и пошаговые методы её решения.
Причины возникновения ошибки
Проанализируем механику взаимодействия платформы 1С 7.7 с сервером баз данных:
- Особенности ODBC-интерфейса и дескрипторов команд: Ошибка возникает, когда через одно физическое соединение платформа пытается выполнить новую SQL-инструкцию (или DDL-команду создания системных таблиц), не дождавшись полного завершения обработки результирующего набора от предыдущей команды дескриптора
hstmt.
- Протокол Shared Memory при локальном запуске: При выполнении загрузки в конфигураторе непосредственно на сервере СУБД клиент по умолчанию подключается через протокол разделяемой памяти (Shared Memory). Из-за специфических таймингов и отсутствия сетевой буферизации пакеты ответа поступают быстрее, чем устаревший сетевой стек 1С 7.7 успевает освободить дескрипторы.
- Отсутствие поддержки MARS: Платформа 7.7 разрабатывалась под классический драйвер
SQLSRV32.DLL и не поддерживает режим Multiple Active Result Sets (MARS), который используется в современных версиях SQL Native Client.
Способ 1. Выполнение загрузки с клиентской рабочей станции
Самый простой и надежный практический прием — перенести процесс импорта на клиентский компьютер:
- Установим платформу 1С 7.7 с необходимыми модификациями для поддержки современных версий MS SQL («секретный релиз» / пропатченный
BkEnd.dll) на клиентскую машину под управлением Windows 7 или Windows 10.
- Настроим подключение к целевому SQL-серверу по сети.
- Запустим конфигуратор 1С 7.7 на клиентском ПК, укажем параметры подключения к базе на SQL-сервере и выполним операцию «Администрирование — Загрузить данные».
- При сетевом подключении стек TCP/IP обеспечивает корректную задержку и синхронизацию пакетов, что исключает коллизию дескрипторов
hstmt.
Способ 2. Принудительное переключение протокола на TCP/IP на сервере
Если загрузку необходимо выполнить непременно на самом сервере, отключим протокол Shared Memory для клиента 1С:
- Откроем 32-разрядную утилиту настройки клиента SQL —
cliconfg.exe (расположена в каталоге C:\Windows\SysWOW64\cliconfg.exe на 64-битных ОС).
- Перейдем на вкладку «Псевдонимы» (Alias) и нажмем «Добавить».
- Укажем сетевое имя SQL-сервера, выберем сетевую библиотеку TCP/IP, укажем адрес
127.0.0.1 и порт (по умолчанию 1433).
- При настройке параметров базы данных в конфигураторе 1С 7.7 укажем созданный псевдоним либо строку вида
127.0.0.1,1433 вместо локального имени (local) или ., чтобы исключить использование разделяемой памяти.
Способ 3. Проверка метаданных и структуры базы перед выгрузкой
Рассмотрим подготовительные действия в исходной файловой базе данных (DBF), которые предотвратят системные ошибки при конвертации метаданных в SQL-формат:
- В файловой базе выполним полное «Тестирование и исправление ИБ» (меню «Администрирование — Тестирование и исправление ИБ») с проверкой физической целостности и логической структуры.
- Проверим структуру конфигурации: реквизиты документов и справочников неограниченной длины в дереве метаданных должны находиться в самом конце списка реквизитов объекта, так как на уровне SQL такие поля размещаются в отдельных типах данных (
TEXT/IMAGE).
- Убедимся в отсутствии пустых некорректных дат (например, дат вида
00.00.0000), которые не поддерживаются форматом DATETIME в Microsoft SQL Server.
- Убедимся, что для целевой базы данных на сервере установлена модель восстановления Simple (простая), предотвращающая переполнение журнала транзакций во время массовой вставки данных.