Перенос данных между идентичными конфигурациями 1С:Управление торговлей 11.4 часто кажется тривиальной задачей, пока дело не доходит до мультимедийного контента. Многие разработчики сталкиваются с ситуацией, когда справочник Номенклатура переносится успешно, но карточки товаров в базе-приемнике остаются без изображений. В этой статье мы подробно разберем, почему стандартный перенос реквизитов не работает для картинок и как правильно настроить правила обмена в Конвертации данных 2.1 (КД 2.1), чтобы изображения отображались корректно.
Для начала проанализируем архитектуру современных конфигураций на базе БСП (Библиотеки стандартных подсистем). В старых версиях 1С изображения могли храниться непосредственно в реквизите справочника с типом ХранилищеЗначения. Однако в УТ 11.4 механизм хранения файлов гораздо сложнее и распределен между несколькими объектами:
Хранилище, лежат реальные двоичные данные (байты изображения), если в системе не настроено хранение в томах на диске.Таким образом, когда мы пытаемся перенести только Номенклатура, мы переносим только ссылку на основной файл. Если в приемнике нет соответствующих записей в справочнике присоединенных файлов и регистре сведений, картинка просто не отобразится.
Рассмотрим по шагам, как настроить правила конвертации объектов (ПКО). Первым делом нам необходимо создать ПКО для справочника НоменклатураПрисоединенныеФайлы. Важно понимать, что этот справочник является подчиненным по отношению к номенклатуре.
В правилах обмена для этого справочника обязательно включите поиск по Уникальному Идентификатору (GUID). Это гарантирует, что связи между объектами не нарушатся при переносе. Также убедитесь, что переносятся следующие реквизиты:
ВладелецФайла (ссылка на Номенклатура);Наименование, Расширение, ТипХраненияФайла;СтатусИзвлеченияТекста.Выясним причину, по которой данные не попадают в файл выгрузки. Даже если вы настроили перенос справочника файлов, само «тело» картинки лежит в регистре сведений ПрисоединенныеФайлы. Нам нужно создать ПКО для этого регистра.
В КД 2.1 при создании ПКО для регистра сведений ПрисоединенныеФайлы, обратите внимание на следующие моменты:
ПрисоединенныйФайл должно иметь признак «Ведущее».ХранимыйФайл (который имеет тип ХранилищеЗначения) должен быть отмечен для выгрузки.Важный нюанс: в некоторых версиях КД 2.1 автоматическая выгрузка ХранилищаЗначения может давать сбои. Если вы видите, что поле в XML пустое, воспользуйтесь обработчиком ПередВыгрузкой для данного ПКС:
// В обработчике ПередВыгрузкой ПКС ХранимыйФайл
Значение = Base64Строка(Источник.ХранимыйФайл.Получить());
В базе-приемнике, соответственно, в обработчике ПослеЗагрузки этого ПКО, нам нужно выполнить обратное преобразование, чтобы 1С поняла, что это двоичные данные:
// В обработчике ПослеЗагрузки ПКО регистра ПрисоединенныеФайлы
Если ТипЗнч(Объект.ХранимыйФайл) = Тип("Строка") Тогда
ДвоичныеДанные = Base64Значение(Объект.ХранимыйФайл);
Объект.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные);
КонецЕсли;
Проанализируем ситуацию, если в базе-источнике настроено хранение файлов не в информационной базе, а в томах на диске. В этом случае прямой доступ к реквизиту ХранимыйФайл в регистре может вернуть пустое значение. Для универсальности решения рекомендуется использовать программный интерфейс БСП.
В ПКО справочника присоединенных файлов или в правилах выгрузки данных (ПВД) можно использовать функции общего модуля РаботаСФайлами. Посмотрим на пример кода, который гарантированно извлекает данные файла, независимо от способа хранения:
// Пример получения данных файла в источнике
Данные = РаботаСФайлами.ДвоичныеДанныеФайла(СсылкаНаФайл);
Если Данные <> Неопределено Тогда
// Передаем данные через параметры объекта для последующей записи в приемнике
ПередатьФайл = Base64Строка(Данные);
КонецЕсли;
Рассмотрим подробнее финальный штрих. В самом справочнике Номенклатура есть реквизит ФайлКартинки. Это ссылка на элемент справочника НоменклатураПрисоединенныеФайлы, который мы переносили на Шаге 1.
Чтобы в карточке товара сразу появилась нужная картинка, убедитесь, что в ПКО Номенклатура настроено правило конвертации свойства (ПКС) для ФайлКартинки. В качестве правила для этого свойства должно быть указано ПКО справочника присоединенных файлов.
Алгоритм работы выгрузки будет следующим:
Номенклатура.ФайлКартинки инициируется выгрузка объекта НоменклатураПрисоединенныеФайлы.ПрисоединенныеФайлы (через ПВД или через механизм «правила после выгрузки»).Если после всех настроек изображения всё равно не отображаются, выполните следующие проверки:
ФайлКартинки.ПрисоединенныеФайлы и ДанныеФайлов.Использование вышеописанных методов позволит вам настроить надежный и стабильный перенос изображений в УТ 11.4, соблюдая все требования архитектуры Библиотеки стандартных подсистем. Помните, что ключ к успеху в КД 2.1 при работе с БСП — это перенос не только самих объектов, но и связанных с ними записей регистров сведений, где хранятся фактические данные.