Перенос данных между двумя идентичными конфигурациями 1С:ERP кажется простой задачей, особенно когда конфигурации полностью совпадают. Однако, когда дело доходит до справочников с присоединенными файлами (например, СертификатыНоменклатуры), стандартная выгрузка через Конвертацию данных или обработку ВыгрузкаЗагрузкаДанныхXML часто приводит к тому, что в базе-приемнике ссылки на файлы есть, а сами изображения или документы не открываются. Выходит ошибка «Файл не найден».
В этой статье мы подробно разберем, почему так происходит, проанализируем структуру хранения файлов в типовых решениях на базе БСП (Библиотеки стандартных подсистем) и составим пошаговый алгоритм успешного переноса.
Основная сложность заключается в том, что в современных версиях ERP файлы могут храниться двумя способами: в самой информационной базе (в виде двоичных данных) или во внешних томах на диске. Если в настройках системы выбран вариант «Хранить файлы в томах на диске», то в базе данных 1С сохраняются лишь метаданные: имя файла, его расширение, размер и относительный путь к файлу в конкретном томе.
При использовании стандартных средств выгрузки в XML попадает только содержимое справочника. Сами файлы, лежащие на жестком диске сервера, в XML-файл не упаковываются. Кроме того, возникают проблемы с идентификаторами (GUID) самих томов. Разберем ситуацию по шагам.
Первым делом проанализируем справочник ТомаХраненияФайлов. Даже если вы вручную создали том с таким же именем в новой базе, его внутренний уникальный идентификатор (GUID) будет отличаться от идентификатора в исходной базе. Поскольку справочник СертификатыНоменклатурыПрисоединенныеФайлы ссылается на конкретную запись в справочнике ТомаХраненияФайлов, при переносе возникнет ситуация «Объект не найден» в реквизите Том.
Решение: При использовании обработки ВыгрузкаЗагрузкаДанныхXML обязательно включайте в состав выгрузки справочник ТомаХраненияФайлов. Это гарантирует сохранение GUID, и ссылки в присоединенных файлах останутся рабочими.
Одной выгрузки справочников недостаточно. В системе 1С:ERP за корректную работу с файлами отвечают также служебные регистры сведений. Рассмотрим, какие объекты необходимо включить в правила переноса:
СертификатыНоменклатуры (или другой владелец файлов).СертификатыНоменклатурыПрисоединенныеФайлы.ТомаХраненияФайлов.СведенияОФайлах. Это критически важный регистр. Именно из него система берет данные о размере файла, расширении и о том, находится ли файл в томе.НаличиеФайлов. Используется для быстрого отображения значка «скрепки» в списках.ХранилищеФайлов. Если часть файлов все же хранится в базе, они находятся здесь.Проанализируем ситуацию с регистром ХранилищеФайлов. В ERP он использует «Определяемый тип» для измерения, что может затруднить установку фильтров при выгрузке. Если файлов много, мы рекомендуем переносить этот регистр целиком или использовать запрос для отбора данных по владельцу.
Это тот этап, о котором чаще всего забывают программисты. Поскольку 1С хранит только пути, сами файлы нужно перенести вручную средствами операционной системы.
Рассмотрим порядок действий:
ТомаХраненияФайлов убедитесь, что в реквизите ПолныйПутьWindows (или путь для Linux) указан актуальный путь к новому месту хранения.Если сервер 1С остался прежним, а базы просто разные, проблем с доступом быть не должно. Однако, если базы разнесены на разные сервера, проверим права доступа. Важно понимать: доступ к папке тома должен иметь не текущий пользователь компьютера, а пользователь, под которым запущена служба «Агент сервера 1С:Предприятия» (обычно это USR1CV8).
Если том указан как сетевой путь (UNC, например \\ServerName\FileStorage), убедитесь, что служба сервера 1С имеет права на чтение и запись в этот сетевой ресурс. Помните, что локальный системный аккаунт LocalSystem часто не имеет прав на работу с сетью.
После переноса данных и физических файлов нам нужно убедиться, что система «видит» объекты. Посмотрим на реквизит ПутьКФайлу в справочнике присоединенных файлов. Он должен быть относительным. Например:
2023\10\25\abcdef12-3456...bin
Полный путь к файлу система собирает динамически: Путь к Тому + ПутьКФайлу. Если в реквизит случайно попал абсолютный путь (например, начинающийся с C:\...), система не сможет найти файл внутри структуры тома.
Для массовой проверки воспользуемся встроенным инструментом 1С:
Система сформирует подробный отчет. Рассмотрим результаты отчета: если файл числится «лишним» на диске, значит, не перенеслись записи в справочнике или регистрах. Если файл «отсутствует», значит, метаданные перенеслись, а физический файл в папку не скопировали или ошиблись в путях.
Если вы подозреваете, что ссылки на тома перенеслись некорректно (как «Объект не найден»), можно воспользоваться небольшим фрагментом кода в консоли кода, чтобы проанализировать ситуацию:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Файлы.Ссылка КАК ФайлСсылка,
| Файлы.Том КАК Том,
| Файлы.ПутьКФайлу КАК Путь
|ИЗ
| Справочник.СертификатыНоменклатурыПрисоединенныеФайлы КАК Файлы
|ГДЕ
| Файлы.Том.Наименование ЕСТЬ NULL И Файлы.Том <> ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка)";
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Сообщить("Найдены битые ссылки на тома!");
КонецЕсли;
Этот запрос поможет быстро выявить файлы, у которых реквизит Том указывает на несуществующий в данной базе идентификатор (битая ссылка).
Подводя итог, можно сказать: перенос присоединенных файлов в ERP — это комплексная задача. Для успеха нам необходимо обеспечить единство трех составляющих: метаданные справочников, записи в служебных регистрах и физические файлы на диске. Использование только XML-выгрузки без учета специфики хранения в томах неизбежно приведет к ошибкам. Следуя приведенному выше алгоритму, вы сможете перенести сертификаты номенклатуры и любые другие документы без потери данных.