При развертывании системы 1С:Предприятие из резервной копии СУБД (файла формата .bak) системные администраторы часто сталкиваются с ошибкой «Недопустимое преобразование типов данных в записи». Эта проблема особенно актуальна при попытке «подружить» старые версии платформы с новыми версиями MS SQL Server или при некорректном переносе данных. В данной статье мы подробно разберем, почему возникает эта ошибка, как диагностировать несовместимость версий и какой алгоритм действий обеспечит стабильную работу системы.
Проанализируем техническую природу ошибки. Сообщение о «недопустимом преобразовании типов» на уровне СУБД в контексте 1С обычно сигнализирует о том, что платформа пытается прочитать данные из таблиц SQL, используя механизмы, которые не поддерживаются текущей версией сервера базы данных, либо структура самих таблиц не соответствует ожиданиям платформы.
Рассмотрим основные причины подробнее:
SQL Server Native Client 11.0 или более современных драйверов. Если платформа «не знает» о новом драйвере, она пытается использовать стандартный провайдер Windows, который некорректно обрабатывает специфические типы данных 1С.datetime и datetime2, что приводит к ошибке преобразования при выполнении простейших запросов выборки метаданных.Выясним, на какой версии платформы была создана база, бэкап которой вы получили. Часто фраза «база на восьмерке» вводит в заблуждение. Рассмотрим ситуацию на примере: если вам передали бэкап с современной системы, а вы пытаетесь развернуть его на 1С 8.0.18.2 (как в рассматриваемом случае), система выдаст ошибку сразу при входе. Версия 8.0 — это очень старая платформа, которая практически не используется сегодня.
Для определения версии можно воспользоваться следующим методом. Восстановите бэкап в SQL Server Management Studio и проанализируйте состав таблиц. Если в базе присутствуют таблицы с именами типа _InfoRg... (регистры сведений) или _Document... (документы) с большим количеством индексов, это признак версий 8.2 или 8.3. Также можно заглянуть в таблицу Config:
SELECT TOP 10 * FROM [Имя_Вашей_Базы].[dbo].[Config]
Если структура таблицы и содержимое полей FileName напоминают современные метаданные, вам однозначно требуется платформа 1С:Предприятие 8.3 актуального релиза.
Разберем, как правильно развернуть базу из .bak файла, чтобы избежать конфликтов типов данных. Распространенная ошибка — сначала восстановить базу в SQL, а затем пытаться «подцепить» её в консоли 1С. Правильный порядок действий выглядит иначе:
.bak файла поверх созданной базы. При этом в настройках восстановления (раздел Options) обязательно установите флаг «Overwrite the existing database (WITH REPLACE)».Если вы вынуждены использовать старую версию 1С на новом SQL Server (хотя это крайне не рекомендуется), проанализируем настройки уровня совместимости (Compatibility Level). Это позволяет СУБД эмулировать поведение старых версий для конкретной базы данных.
Выполните следующие действия:
Properties.Options.Compatibility level.SQL Server 2008 (100) или SQL Server 2005 (90). Это может помочь платформе 1С корректно интерпретировать типы данных.Проверим наличие необходимых драйверов. Для работы 1С с SQL Server 2012 и выше на сервере должен быть установлен Microsoft SQL Server 2012 Native Client (компонент sqlncli.msi). Однако помните важное правило: платформа 1С 8.0 не «умеет» работать с 11-й версией драйвера. Она ищет более старые версии. Если вы используете современную платформу 8.3, убедитесь, что Native Client соответствует версии вашего SQL сервера.
Рассмотрим ситуацию развертывания на Windows Server 2019. Попытка запустить на этой операционной системе платформу 1С 8.0 — это заведомо рискованное мероприятие. Платформа 8.0 была создана задолго до появления современных механизмов защиты памяти и драйверов безопасности Windows Server 2019. Ошибки СУБД в данном случае могут быть лишь «верхушкой айсберга», скрывающей несовместимость на уровне системных вызовов ОС.
Рекомендация: Для восстановления данных из очень старых архивов используйте промежуточный сервер с Windows Server 2008 R2 и SQL 2005/2008. После успешного запуска выполните выгрузку в формат .dt, который уже можно будет загрузить в современную платформу 8.3.
Подведем итог нашему исследованию. Ошибка «Недопустимое преобразование типов данных в записи» в 99% случаев является следствием попытки открыть базу данных более новой версии платформы через устаревший исполняемый файл 1С. Всегда уточняйте версию платформы у поставщика бэкапа. Для версии 8.3 (которую часто называют просто «восьмеркой») используйте последние релизы платформы и создавайте базу сначала в консоли администрирования 1С, а только потом делайте RESTORE в SQL.