Как перенести изображения номенклатуры между базами УТ 11.4 с помощью Конвертации данных 2.1

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

Перенос данных между идентичными конфигурациями 1С:Управление торговлей 11.4 часто кажется тривиальной задачей, пока дело не доходит до мультимедийного контента. Многие разработчики сталкиваются с ситуацией, когда справочник Номенклатура переносится успешно, но карточки товаров в базе-приемнике остаются без изображений. В этой статье мы подробно разберем, почему стандартный перенос реквизитов не работает для картинок и как правильно настроить правила обмена в Конвертации данных 2.1 (КД 2.1), чтобы изображения отображались корректно.

Почему изображения не переносятся вместе с номенклатурой

Для начала проанализируем архитектуру современных конфигураций на базе БСП (Библиотеки стандартных подсистем). В старых версиях 1С изображения могли храниться непосредственно в реквизите справочника с типом ХранилищеЗначения. Однако в УТ 11.4 механизм хранения файлов гораздо сложнее и распределен между несколькими объектами:

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

Таким образом, когда мы пытаемся перенести только Номенклатура, мы переносим только ссылку на основной файл. Если в приемнике нет соответствующих записей в справочнике присоединенных файлов и регистре сведений, картинка просто не отобразится.

Шаг 1. Настройка правил для справочника присоединенных файлов

Рассмотрим по шагам, как настроить правила конвертации объектов (ПКО). Первым делом нам необходимо создать ПКО для справочника НоменклатураПрисоединенныеФайлы. Важно понимать, что этот справочник является подчиненным по отношению к номенклатуре.

В правилах обмена для этого справочника обязательно включите поиск по Уникальному Идентификатору (GUID). Это гарантирует, что связи между объектами не нарушатся при переносе. Также убедитесь, что переносятся следующие реквизиты:

Шаг 2. Перенос двоичных данных через регистр сведений

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

В КД 2.1 при создании ПКО для регистра сведений ПрисоединенныеФайлы, обратите внимание на следующие моменты:

  1. Измерение ПрисоединенныйФайл должно иметь признак «Ведущее».
  2. Реквизит ХранимыйФайл (который имеет тип ХранилищеЗначения) должен быть отмечен для выгрузки.

Важный нюанс: в некоторых версиях КД 2.1 автоматическая выгрузка ХранилищаЗначения может давать сбои. Если вы видите, что поле в XML пустое, воспользуйтесь обработчиком ПередВыгрузкой для данного ПКС:


// В обработчике ПередВыгрузкой ПКС ХранимыйФайл
Значение = Base64Строка(Источник.ХранимыйФайл.Получить());

В базе-приемнике, соответственно, в обработчике ПослеЗагрузки этого ПКО, нам нужно выполнить обратное преобразование, чтобы 1С поняла, что это двоичные данные:


// В обработчике ПослеЗагрузки ПКО регистра ПрисоединенныеФайлы
Если ТипЗнч(Объект.ХранимыйФайл) = Тип("Строка") Тогда
    ДвоичныеДанные = Base64Значение(Объект.ХранимыйФайл);
    Объект.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные);
КонецЕсли;

Шаг 3. Учет хранения файлов в томах

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

В ПКО справочника присоединенных файлов или в правилах выгрузки данных (ПВД) можно использовать функции общего модуля РаботаСФайлами. Посмотрим на пример кода, который гарантированно извлекает данные файла, независимо от способа хранения:


// Пример получения данных файла в источнике
Данные = РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаФайл);
Если Данные <> Неопределено Тогда
    // Передаем данные через параметры объекта для последующей записи в приемнике
    ПередатьФайл = Base64Строка(Данные);
КонецЕсли;

Шаг 4. Синхронизация реквизита «ФайлКартинки» в справочнике Номенклатура

Рассмотрим подробнее финальный штрих. В самом справочнике Номенклатура есть реквизит ФайлКартинки. Это ссылка на элемент справочника НоменклатураПрисоединенныеФайлы, который мы переносили на Шаге 1.

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

Алгоритм работы выгрузки будет следующим:

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

Типичные ошибки и способы их решения

Если после всех настроек изображения всё равно не отображаются, выполните следующие проверки:

  1. Проверка кэша: В 1С Управляемых формах изображения часто кэшируются. Попробуйте очистить временные файлы или перезайти в базу.
  2. Проверка навигационных ссылок: Зайдите в карточку номенклатуры, перейдите в меню «Присоединенные файлы». Если файл там есть и открывается, но не виден на главной форме — проблема в обновлении реквизита ФайлКартинки.
  3. Права доступа: Убедитесь, что у пользователя, под которым идет загрузка, есть права на запись в регистры сведений ПрисоединенныеФайлы и ДанныеФайлов.

Использование вышеописанных методов позволит вам настроить надежный и стабильный перенос изображений в УТ 11.4, соблюдая все требования архитектуры Библиотеки стандартных подсистем. Помните, что ключ к успеху в КД 2.1 при работе с БСП — это перенос не только самих объектов, но и связанных с ними записей регистров сведений, где хранятся фактические данные.

← На главную