К статье
Практический материал

Администрирование · 14 мин

Как перенести присоединенные файлы из одной базы 1С в другую

Перенос присоединенных файлов между базами 1С: типовые обработки, конвертация данных, хранение в томах и в базе. Пошаговая инструкция, ошибки и проверка результата.

Присоединенные файлы в 1С — это сканы документов, изображения товаров, договоры и прочие вложения, которые хранятся отдельно от основных данных: либо внутри информационной базы, либо в томах на диске. При переезде на новую конфигурацию, консолидации баз или создании копии для филиала вопрос их переноса становится критичным: ссылки на файлы без самих файлов превращаются в «битые» записи, а пользователи теряют доступ к первичке.

Главная сложность в том, что присоединенный файл — это связка из объекта-владельца (документа, элемента справочника), записи в справочнике присоединенных файлов и самого двоичного содержимого. Переносить нужно все три компонента согласованно, иначе в целевой базе появятся либо пустые карточки файлов, либо файлы без привязки к документам.

Ниже разобраны рабочие способы переноса: типовая обработка «Выгрузка и загрузка данных XML», конвертация данных, ручной перенос томов и программный вариант. Для каждого указаны условия применимости, порядок действий и способы проверить результат.

Как устроено хранение присоединенных файлов и почему это важно

В типовых конфигурациях на БСП (Библиотека стандартных подсистем) присоединенные файлы описываются парой справочников: например, «НоменклатураПрисоединенныеФайлы» и «ПрикрепленныеФайлы» (в разных конфигурациях имена отличаются). Запись такого справочника содержит ссылку на владельца, имя файла, расширение, размер и признак того, где лежит содержимое.

Само содержимое хранится одним из двух способов. При хранении в информационной базе двоичные данные лежат в таблице (обычно в общем справочнике «ДвоичныеДанныеФайлов» или в реквизите хранилища значений). При хранении в томах в базе остается только относительный путь, а сами файлы расположены в сетевой папке, указанной в справочнике «Тома хранения файлов».

Определить режим хранения просто: откройте «Администрирование → Обслуживание → Настройки работы с файлами» (в некоторых конфигурациях путь отличается) и посмотрите, включено ли хранение файлов в томах. Дополнительно проверьте размер базы: если база весит заметно больше, чем ожидалось от объема учетных данных, вероятно, файлы хранятся внутри нее.

Подготовка: что проверить перед переносом

До запуска любой обработки зафиксируйте исходное состояние. Посчитайте количество записей в справочниках присоединенных файлов и суммарный объем томов — эти цифры понадобятся для контроля после загрузки. Если файлы хранятся в томах, убедитесь, что у вас есть полный доступ к каталогам томов на чтение.

Сделайте резервную копию обеих баз — источника и приемника. Для файловой базы достаточно скопировать каталог с файлом 1Cv8.1CD, для клиент-серверной — выполнить выгрузку dt или штатный backup средствами СУБД. Перенос файлов затрагивает большие объемы данных, и откат без копии будет невозможен.

Проверьте совпадение конфигураций. Если источник и приемник — одна и та же конфигурация одной версии, подойдет типовая обработка выгрузки/загрузки XML. Если конфигурации разные (например, переход с УПП на ERP или из самописной базы в БП), потребуется «Конвертация данных» с настройкой правил обмена, и это отдельный проект.

Способ 1: типовая обработка «Выгрузка и загрузка данных XML»

Это основной вариант при переносе между идентичными конфигурациями. Обработка находится в разделе «Администрирование → Обслуживание» либо поставляется на диске ИТС. Она выгружает данные в XML с сохранением ссылок, поэтому связи «владелец — файл» не рвутся.

На стороне источника отметьте к выгрузке: справочники-владельцы (или нужные документы), соответствующие справочники присоединенных файлов, справочник «Тома хранения файлов» и таблицу двоичных данных, если файлы хранятся в базе. Для документов включайте выгрузку по ссылкам, чтобы подтянулись связанные объекты. Обратите внимание на флаг выгрузки присоединенных файлов — в актуальных версиях обработки он есть отдельно, и по умолчанию двоичные данные могут не выгружаться.

На стороне приемника запустите ту же обработку в режиме загрузки и укажите файл выгрузки. Рекомендуется включить режим «Продолжить загрузку при ошибке» только на тестовом прогоне: на боевом лучше видеть каждую ошибку сразу. После загрузки проверьте несколько документов вручную: откройте карточку и попробуйте открыть присоединенный файл.

Порядок действий при переносе через XML
  1. 1
    Сделайте резервные копии обеих баз и зафиксируйте количество файлов в источнике
  2. 2
    В источнике откройте «Выгрузка и загрузка данных XML» и отметьте владельцев, справочники присоединенных файлов и двоичные данные
  3. 3
    Выполните выгрузку и убедитесь, что размер XML-файла соответствует ожидаемому объему
  4. 4
    В приемнике запустите загрузку из полученного файла
  5. 5
    Проверьте: количество записей совпадает, файлы открываются из карточек документов
  6. 6
    Если файлы хранились в томах — настройте тома в приемнике и скопируйте содержимое каталогов

Способ 2: перенос файлов, хранящихся в томах на диске

Если файлы хранятся в томах, переносить их через XML не нужно и неэффективно: достаточно перенести записи справочников (владельцев, присоединенных файлов и томов), а само содержимое скопировать на уровне файловой системы. Это существенно быстрее при больших объемах — десятки и сотни гигабайт через XML выгружаются часами.

Порядок такой: выгрузите XML только со ссылочными данными, скопируйте каталоги томов на новый сервер с сохранением структуры подкаталогов, затем в приемнике откройте справочник «Тома хранения файлов» и укажите новые полные пути. Относительные пути внутри записей файлов менять не нужно — они совпадут, если структура каталогов сохранена.

Типичная проблема этого способа — права доступа. Служба агента сервера 1С (или пользователь, под которым работает файловая база) должна иметь чтение и запись в новые каталоги томов. Проверьте это до запуска пользователей: попытка открыть файл при отсутствии прав даст ошибку «файл не найден» или «отказано в доступе», хотя запись в базе выглядит корректной.

Способ 3: конвертация данных для разных конфигураций

Когда источник и приемник — разные конфигурации, ссылки нельзя переносить напрямую: состав объектов и имена справочников присоединенных файлов отличаются. Здесь применяется «Конвертация данных» (редакция 2 или 3) с правилами обмена. Для типовых пар конфигураций правила часто поставляются в составе самой конфигурации или на портале 1С.

В правилах должны быть описаны конвертации не только основных объектов, но и справочников присоединенных файлов с передачей двоичных данных. В конвертации данных 2 двоичные данные передаются через свойство с типом «Хранилище значения» либо через выгрузку файлов в каталог с последующей загрузкой. В конвертации данных 3 (через EnterpriseData) присоединенные файлы передаются как вложения в составе сообщения — но не все форматы и версии конфигураций это поддерживают, проверяйте документацию к конкретной паре.

Практическая рекомендация: сначала перенесите справочники и документы без файлов, добейтесь корректного сопоставления владельцев, и только потом настраивайте перенос вложений. Отладка правил на полном объеме файлов занимает в разы больше времени, а ошибки сопоставления владельцев все равно придется исправлять отдельно.

Сравнение способов переноса

Выгрузка/загрузка XML

Подходит для идентичных конфигураций и умеренных объемов. Ограничение: очень медленно при сотнях гигабайт файлов, требует совпадения версий.

Копирование томов

Оптимально при хранении файлов в томах и больших объемах. Ограничение: работает только при сохранении режима хранения в томах, нужны права на каталоги.

Конвертация данных

Единственный вариант для разных конфигураций. Ограничение: требует настройки и отладки правил, не все версии форматов передают вложения.

Программный перенос

Гибкий вариант для нестандартных задач и выборочного переноса. Ограничение: нужна разработка и тестирование, легко ошибиться со ссылками.

Способ 4: программный перенос через COM или веб-сервисы

Для выборочного переноса (например, только файлы по конкретному виду документов или за период) удобно написать собственную обработку. Классическая схема — COM-соединение с базой-источником: обработка в приемнике подключается к источнику, перебирает записи справочника присоединенных файлов, получает двоичные данные и создает файлы у себя через функционал БСП.

Ключевые точки такого кода: поиск владельца в приемнике должен выполняться по уникальному идентификатору или по надежному набору реквизитов (иначе файл прикрепится не к тому объекту), а создание файла корректнее выполнять через программный интерфейс работы с файлами, а не прямой записью в справочник — тогда путь в томе и служебные реквизиты заполнятся правильно.

bsl
// Упрощенный пример создания присоединенного файла в приемнике
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВХранилище);
ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("ВладелецФайлов", ВладелецСсылка);
ПараметрыФайла.Вставить("Автор", Пользователи.ТекущийПользователь());
ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяФайла);
ПараметрыФайла.Вставить("РасширениеБезТочки", Расширение);
НовыйФайл = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ПоместитьВоВременноеХранилище(ДвоичныеДанные));

Для клиент-серверных баз на разных серверах вместо COM лучше использовать HTTP-сервисы или универсальный обмен через промежуточный каталог: выгрузка файлов в папку с XML-описателем (владелец, имя, относительный путь) и загрузка из нее. Такой вариант проще отлаживать и можно выполнять порциями.

Проверка результата и типичные ошибки

После переноса сверьте количественные показатели: число записей в справочниках присоединенных файлов в источнике и приемнике должно совпадать. Затем выполните выборочную проверку содержимого: откройте файлы разных типов (картинки, PDF, офисные документы) из карточек разных владельцев. Файл, который открывается, но имеет нулевой размер или не читается, — признак того, что перенеслась только запись, а не содержимое.

Для хранения в томах полезно сравнить суммарный размер каталогов томов на старом и новом месте. Расхождение в единицы процентов допустимо из-за служебных файлов, но существенная разница означает недокопированные данные.

Типичные ошибки
01
Перенос записей справочника файлов без двоичных данных — в приемнике появляются карточки файлов, которые не открываются
02
Загрузка файлов до переноса владельцев — связи теряются, файлы остаются без привязки или привязываются к неправильным объектам
03
Копирование томов без исправления путей в справочнике томов — база ищет файлы по старым путям и выдает ошибку «файл не найден»
04
Игнорирование прав доступа на новые каталоги томов — у пользователей ошибки доступа при корректных записях в базе
05
Перенос полным объемом без тестового прогона — ошибки обнаруживаются в боевой базе, когда откат уже затруднен
Контрольные точки

Как проверить результат

Количество записей в справочниках присоединенных файлов
Норма

Совпадает с источником

Тревожный признак

Записей меньше — часть файлов не перенеслась

Открытие файла из карточки документа
Норма

Файл открывается, содержимое читается

Тревожный признак

Ошибка «файл не найден» или пустое содержимое

Пути томов в приемнике
Норма

Указывают на новые каталоги, доступные серверу 1С

Тревожный признак

Старые пути либо каталоги недоступны службе сервера

Размер каталогов томов
Норма

Сопоставим с размером в источнике

Тревожный признак

Существенно меньше — копирование не завершено

Ограничения и частные сценарии

Есть ситуации, где стандартные подходы требуют доработки. Если в источнике часть файлов хранится в базе, а часть в томах (так бывает после смены настроек), переносите каждую группу своим способом, контролируя обе. Если в приемнике уже есть свои присоединенные файлы, продумайте политику дублей: совпадение по владельцу и имени файла обычно означает дубль, но автоматическая замена опасна — безопаснее пропускать существующие и фиксировать их в журнале.

Отдельный случай — перенос между файловой и клиент-серверной базой. Сами данные переносятся теми же средствами, но тома в клиент-серверном варианте должны быть доступны именно серверу 1С, а не клиентским машинам. Частая ошибка — указать путь к тому как локальный диск администратора: на сервере этого диска нет, и файлы становятся недоступны.

Маршрут решения

Как выбрать способ

Конфигурации источника и приемника идентичны, объем файлов умеренныйИспользуйте типовую обработку «Выгрузка и загрузка данных XML» с выгрузкой двоичных данных
Файлы хранятся в томах и объем большойПереносите XML только ссылочные данные, а тома копируйте на уровне файловой системы
Конфигурации разныеНастраивайте конвертацию данных, сначала владельцы, затем вложения
Нужен выборочный перенос по условиямПишите обработку через COM или обмен через промежуточный каталог

Частые вопросы

Переносятся ли версии файлов вместе с файлами?

Зависит от способа. Типовая выгрузка XML может включать версии, если отметить соответствующие объекты, но объем выгрузки сильно вырастает. При копировании томов версии переносятся вместе со структурой каталогов. На практике часто переносят только текущие версии, а историю оставляют в архивной копии старой базы.

База стала очень большой из-за файлов. Что делать при переносе?

Перенос — хороший повод изменить режим хранения. Выгрузите файлы из базы в тома штатной обработкой переноса файлов в тома (доступна в настройках работы с файлами типовых конфигураций), а затем переносите уже тома копированием. Это существенно ускорит и сам перенос, и дальнейшее резервное копирование.

Можно ли перенести файлы, если конфигурация самописная и в ней нет БСП?

Да, но типовые обработки и методики ориентированы на БСП. Для самописной конфигурации изучите, где физически хранятся двоичные данные (реквизит хранилища значений, отдельный регистр), и пишите собственную выгрузку: сериализация двоичных данных в файл на диске плюс XML-описатель связей с владельцами.

Что делать, если после переноса часть файлов не открывается?

Сначала определите масштаб: единичные файлы или целые группы. Массовая проблема обычно означает неверные пути томов или отсутствие прав — проверьте справочник томов и доступ службы сервера к каталогам. Единичные случаи чаще связаны с поврежденными файлами еще в источнике: проверьте, открываются ли они там.

Нужно ли переносить файлы из закрытых периодов и архивных документов?

Юридически значимые вложения (сканы первички, договоры) переносить нужно независимо от периода — они могут понадобиться при проверках. Если объем критичен, допустим компромисс: старые файлы остаются в архивной копии базы, доступной только на чтение, но это решение стоит согласовать с бухгалтерией и зафиксировать порядок доступа к архиву.

Сколько времени занимает перенос большого объема файлов?

Точной цифры нет: скорость зависит от способа, объема, дисковой подсистемы и сети. Копирование томов на уровне файловой системы — самый быстрый вариант. Выгрузка через XML на десятках гигабайт может занять много часов, поэтому для больших объемов планируйте перенос на нерабочее время и делайте тестовый прогон на части данных, чтобы оценить длительность.

Итог

Что важно запомнить

Присоединенные файлы переносятся как связка: владелец, запись о файле и двоичное содержимое. Для одинаковых конфигураций используйте выгрузку XML, для больших томов — копирование каталогов с корректировкой путей, для разных конфигураций — конвертацию данных. Всегда делайте резервные копии, тестовый прогон и сверку количества записей после загрузки.