При переходе с файловой базы на SQL или при восстановлении данных в 1С:Предприятии 7.7 администраторы часто сталкиваются с системной ошибкой: «ошибка поиска в файле безымянный файл». Проблема проявляется на этапе загрузки данных из архива (файл 1Cv77.dat), когда процесс доходит до определенного момента (часто на документах или больших справочниках) и прерывается. Разберем подробно, почему это происходит и какими способами можно обойти это ограничение.
Проанализируем техническую сторону вопроса. Основная причина кроется в архитектуре платформы 1С 7.7, а именно в библиотеке bkend.dll. В коде этой библиотеки для работы с файлами используются 32-битные знаковые целые числа для позиционирования внутри файла. Рассмотрим цепочку событий:
1Cv77.dat в подпапке UZ* каталога базы данных.SetFilePointer отрабатывает некорректно, и платформа теряет доступ к данным, выдавая ту самую ошибку «безымянного файла».Важно понимать, что выгрузка (создание архива) может проходить успешно даже при превышении этого объема (особенно с использованием патчей для больших ZIP-файлов), но штатная загрузка в SQL или DBF без модификаций движка всегда будет спотыкаться о порог в 2 Гб.
Посмотрим на существующие инструменты, которые позволяют «научить» 1С работать с большими смещениями. Наиболее известными являются решения от Romix и Alf (SpyConfig/Solution7).
Патч от Romix перехватывает системный вызов SetFilePointer и корректирует логику работы платформы, позволяя ей корректно обрабатывать файлы более 2 Гб. Однако при использовании «секретных релизов» (Solution7 для работы на новых версиях MS SQL 2005/2008+) может возникнуть конфликт, так как оба решения пытаются перехватывать одни и те же функции API Windows.
Если вы используете SpyConfig, убедитесь, что у вас установлена версия, в которой реализована поддержка больших файлов. В противном случае придется использовать альтернативные методы миграции.
Рассмотрим надежный, хоть и более трудоемкий способ обхода проблемы «датовского» файла. Если загрузка в SQL напрямую не удается, разберем алгоритм загрузки через файловый режим:
.dat файлы более 2 Гб в файловом режиме.Проанализируем структуру файла 1Cv77.dat. Это обычный текстовый файл с жесткой структурой блоков. Если объем данных велик, мы можем попытаться загрузить данные частями. Посмотрим, как это сделать:
.dat в редакторе по границе блока данных, чтобы его размер стал менее 2 Гб, и загрузить оставшееся через механизмы обмена (УРБД) или внешние обработки.Если мы решим переносить данные напрямую в SQL, минуя механизм загрузки выгрузки, нам придется столкнуться с особенностями формирования полей 1С. Выясним важные моменты:
1SJOURN и таблицах документов это поле является критически важным. Оно состоит из даты, времени и внутреннего идентификатора документа. При ручном импорте его нужно формировать программно.char, а не varchar, иначе платформа может их «не увидеть».Для успешного завершения процесса рекомендуем придерживаться следующего плана:
Solution7 (или аналоги), чтобы избежать ошибок с ODBC драйвером..dat файлом, попробуйте поднять временный сервер MS SQL 2000. Это «родная» среда для 1С 7.7, где многие ошибки загрузки проходят незаметно. После загрузки в 2000-й SQL можно сделать Backup/Restore на более свежую версию сервера.Следуя этим шагам и понимая природу 32-битного ограничения, мы сможем успешно перенести даже очень тяжелую базу 1С 7.7 в современную инфраструктуру.