Перевод информационной базы 1С:Предприятия 7.7 из файлового режима (DBF) в клиент-серверный вариант (MS SQL Server) нередко сопровождается непредвиденными сбоями при выполнении команды «Загрузить данные». Чаще всего администраторы сталкиваются с двумя последовательными проблемами: невозможностью выполнить модификацию структуры базы данных на сервере и ошибками нарушения уникальности записей при загрузке табличных частей документов. Разберем по шагам причины возникновения этих сбоев и детально рассмотрим способы их устранения.
Первая ошибка обычно возникает в самом начале процесса загрузки, когда конфигуратор 1С пытается пересоздать или обновить структуры таблиц и индексов на сервере баз данных. Если пользователю СУБД не хватает привилегий, процесс прерывается с ошибкой выполнения инструкции ALTER TABLE или создания объектов базы.
Разберем требования к правам учетной записи SQL:
db_datareader и db_datawriter) недостаточно. Пользователь обязательно должен обладать ролью db_owner для целевой базы данных.После настройки прав и повторной попытки загрузки процесс может прерваться ошибкой вставки данных из-за дублирования ключей в индексах. В окне сообщений платформа выдает предупреждение вида: «Документ.ХХХ Обнаружены дублирующиеся номера строк документа. Произведена перенумерация строк. ' 50'».
Проанализируем природу этой ошибки. В файловой версии формат DBF менее строго контролирует целостность связей. При многопользовательской работе, аварийных сбоях питания, разрывах сетевых соединений или включенном кэшировании (SMB Oplocks) файл таблицы документа может содержать строки с одинаковыми номерами, либо строки, некорректно помеченные на удаление. В MS SQL Server табличные части документов (таблицы с префиксом DT) имеют кластерный индекс по полям IDDOC (идентификатор документа) и LINENO_ (номер строки). При попытке загрузить одинаковые номера строк сервер СУБД блокирует транзакцию из-за нарушения уникальности первичного ключа.
В тексте системного сообщения конфигуратора в кавычках выводится идентификатор проблемного документа, дополненный пробелами слева (например, ' 50'). Это значение поля IDDOC.
Чтобы найти конкретный документ в исходной файловой базе, выполним следующие действия:
IDDOC, указав значение из ошибки (например, 50, с учетом лидирующих пробелов до 9 символов).DOCNO) и вид документа (поле IDDOCDEF).Простое переиндексирование файловой базы не устраняет физические дубли в строках. Выгрузка поврежденных данных в файл архива перенесет ошибку в файл выгрузки. Для полного исправления проблемы рассмотрим несколько способов:
DT*.DBF, отфильтруем записи по IDDOC, устраним некорректные номера в колонке LINENO_ и выполним команду сжатия таблицы (Pack) для окончательного удаления физически помеченных на удаление строк.После того как исходные данные в файловой базе исправлены, выполним финализацию переноса:
Такой последовательный подход гарантирует устранение структурных расхождений и обеспечивает корректный перенос данных в клиент-серверную базу без потерь информации.