Перевод рабочей базы 1С:Предприятия 7.7 из файлового формата DBF в формат клиент-серверной базы MS SQL Server — стандартная административная задача, которая нередко сопровождается труднодиагностируемыми ошибками. Типичный сценарий: штатная процедура выгрузки из конфигуратора проходит успешно, однако на этапе «Загрузить данные» в SQL-базу процесс намертво зависает или аварийно закрывается на обработке определенного вида документов (например, «Оказание услуг»). Рассмотрим причины подобного поведения платформы и разберем по шагам, как выявить источник проблемы и успешно завершить миграцию.
В файловой версии формата DBF требования к целостности и типам данных менее строгие, чем в реляционной СУБД MS SQL Server. В процессе загрузки данных парсер конфигуратора выполняет вставку строк в таблицы SQL, где накладываются жесткие ограничения. Выделим основные факторы, приводящие к прерыванию процесса:
01.01.0201 или нулевые даты). Тип DATETIME в MS SQL Server строго ограничен диапазоном от 1 января 1753 года до 31 декабря 9999 года. Попытка вставить дату вне этого диапазона приводит к ошибке СУБД и мгновенному падению конфигуратора.0x00) или символы конца файла (0x1A), возникающие при аппаратных сбоях сети. При чтении текстового файла выгрузки парсер платформы спотыкается о такие символы и аварийно завершает работу.1SJOURN) или табличных частях могут появиться дубликаты записей по ключевым полям IDDOC или связке IDDOC + LINENO_. Если в DBF это могло оставаться незамеченным, то в MS SQL наличие уникального кластерного индекса блокирует вставку дубликата.Full, журнал транзакций стремительно разрастается и блокирует загрузку при нехватке дискового пространства.Чтобы не гадать, на каком именно объекте происходит сбой, проанализируем выполняемые запросы через инструмент SQL Server Profiler. Для этого выполним следующие действия:
RPC:Completed, SQL:BatchStarting и Exception, настроив фильтрацию по имени нашей базы данных.DHXXXX — шапка документа, или DTXXXX — табличная часть), номер строки и идентификатор документа IDDOC, на котором произошел сбой.После того как проблемный вид документа определен (например, «Оказание услуг»), перейдем к исправлению исходных файлов. Разберем практические шаги по устранению дефектов в исходной копии DBF перед повторной выгрузкой:
1SJOURN.DBF проверим поле DATE_TIME_IDDOC на наличие пустых дат или дат ранее 17530101. При обнаружении некорректных дат исправим их на актуальные значения.
Док = СоздатьОбъект("Документ.ОказаниеУслуг");
Док.ВыбратьДокументы();
Пока Док.ПолучитьДокумент() = 1 Цикл
Если ПустаяСтрока(Док.Комментарий) = 0 Тогда
Стр = Док.Комментарий;
// Удаляем недопустимые нулевые символы
СтрОчищенная = СтрЗаменить(Стр, Симв(0), "");
Если Стр <> СтрОчищенная Тогда
Док.Комментарий = СтрОчищенная;
Док.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Корректная подготовка серверного окружения предотвратит системные сбои механизма выгрузки/загрузки:
Simple (Простая). Это предотвратит лавинообразное разрастание файла журнала транзакций (.ldf) во время импорта.1cv7s.exe при пиковой загрузке памяти. Добавим исполняемые файлы платформы 1С 7.7 в список исключений DEP в параметрах быстродействия системы.BkEnd.dll), позволяющий корректно работать со структурой системных таблиц более новых СУБД. При этом принудительно понижать уровень совместимости базы данных не требуется.Если в файле выгрузки содержится критическое повреждение, которое не удается быстро локализовать, применим надежный обходной маневр:
OLE (объект V77.Application). При таком подходе ошибки в конкретных документах сразу отобразятся в журнале сообщений без прерывания загрузки всей базы.