Как перенести изображения номенклатуры в 1С:УТ 11 при помощи Конвертации данных?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет
← На главную

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

Разбираем архитектуру хранения файлов в БСП

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

В типовом решении задействованы следующие объекты:

  1. Справочник НоменклатураПрисоединенныеФайлы — здесь хранится информация об имени файла, расширении, дате создания и ссылке на владельца (номенклатуру).
  2. Справочник ВерсииФайлов — БСП поддерживает версионирование, поэтому текущая картинка — это всегда конкретная версия.
  3. Регистр сведений ДвоичныеДанныеФайлов — именно здесь в поле ДанныеФайла (тип ХранилищеЗначения) лежат реальные данные картинки, если выбран тип хранения «В информационной базе».

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

Шаг 1: Настройка правил конвертации для регистра сведений

Выясним причину неудачи: при использовании «Конвертации данных 2.1» программисты часто забывают создать правило выгрузки данных (ПВД) для регистра ДвоичныеДанныеФайлов. Чтобы изображения «ожили», необходимо выполнить следующие действия в базе-источнике:

  1. Создайте ПКО (Правило конвертации объектов) для регистра сведений ДвоичныеДанныеФайлов.
  2. Убедитесь, что измерение Файл (которое является ссылкой на присоединенный файл) сопоставляется корректно.
  3. В ПВД (Правило выгрузки данных) настройте выборку записей этого регистра.

Проанализируем ситуацию, если файлов очень много. Выгрузка огромного регистра через XML может привести к ошибке нехватки памяти (Out of memory). В этом случае рекомендуется выгружать данные порциями или использовать обработчики для программного извлечения данных.

Шаг 2: Программная запись данных через обработчики

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


Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда
    РаботаСФайламиСлужебный.ЗаписатьФайлВИнформационнуюБазу(НоваяСсылкаНаФайл, ДвоичныеДанные);
КонецЕсли;

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

Рассмотрим алгоритм действий в обработчике:

  1. Получаем двоичные данные, которые мы предварительно передали в параметрах объекта или через отдельный алгоритм.
  2. Проверяем, не пустые ли они.
  3. Вызываем экспортный метод БСП для записи.

Важно помнить, что в новых версиях БСП метод ЗаписатьФайлВИнформационнуюБазу может быть скрыт во внутренние модули, поэтому лучше использовать программный интерфейс общего модуля РаботаСФайлами.

Шаг 3: Особенности хранения в томах на диске

Разберем ситуацию, когда в базе включена опция «Хранить файлы в томах на диске». В этом случае ДвоичныеДанныеФайлов будут пустыми, а в справочнике присоединенных файлов в реквизите ТипХраненияФайла будет стоять значение ВТомахНаДиске.

Проанализируем необходимые действия для этого сценария:

  1. Перенесите справочник ТомаХраненияФайлов.
  2. Физически скопируйте папку с файлами с сервера-источника на новый сервер.
  3. Важный момент: пути к томам в новой базе должны быть актуальными. Если на новом сервере диск называется иначе или папка расположена по другому пути, необходимо зайти в справочник ТомаХраненияФайлов и обновить «Полный путь» для каждого тома (отдельно для Windows и, если актуально, для Linux).

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

Рекомендации по оптимизации переноса

При работе с изображениями через «Конвертацию данных» советуем придерживаться следующих правил, чтобы избежать типичных ошибок:

Таким образом, для успешного переноса изображений номенклатуры в УТ 11 недостаточно просто перенести один справочник. Необходимо обеспечить связку между Присоединенными файлами, их Версиями и Двоичными данными в регистре или на диске. Только комплексный перенос этих трех составляющих гарантирует корректную работу системы после миграции данных.

← На главную