Как выгрузить и загрузить картинки номенклатуры между базами в 1С:УТ 11.5?

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

Многие разработчики и системные администраторы сталкиваются с задачей переноса базы товаров вместе с изображениями из одной информационной базы «1С:Управление торговлей 11.5» в другую. Сложность заключается в том, что старый программный код, который отлично работал в версии 11.4, в релизе 11.5 перестает функционировать из-за существенных изменений в Библиотеке стандартных подсистем (БСП) и модулях работы с файлами. Рассмотрим подробнее, как устроено хранение файлов в новой версии и разберем по шагам надежный способ их переноса. При сопоставлении объектов по произвольным реквизитам миграцию выполняет обработка переноса данных между похожими конфигурациями 1С.

Архитектура хранения картинок в УТ 11.5

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

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

Именно поэтому простая выгрузка картинок по старым алгоритмам часто приводит к тому, что файлы выгружаются «валом», без привязки к владельцам, либо процесс завершается с ошибками из-за обращения к несуществующим реквизитам.

Практическое решение проблемы переноса

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

  1. Выгрузка файлов в том. В исходной базе настраиваем или проверяем настройки хранения файлов. Убеждаемся, что картинки выгружены в том на диске. В этой папке файлы будут лежать сплошным массивом (часто под системными именами или идентификаторами), без явных ссылок на справочник номенклатуры.
  2. Перенос связей (справочника). В конфигураторе или через стандартные обработки находим справочник НоменклатураПрисоединенныеФайлы. В нем описаны все владельцы и пути нахождения картинок в томе. Берем стандартную обработку «Выгрузка загрузка данных XML» (она обычно поставляется на диске ИТС) и выгружаем данные этого справочника в файл.
  3. Загрузка связей. В новой (целевой) базе открываем ту же обработку «Выгрузка загрузка данных XML» и загружаем ранее созданный файл. Теперь в новой базе есть карточки файлов с привязками к товарам.
  4. Копирование физических файлов. Копируем папку с томом из старой базы и подкладываем ее в директорию тома новой базы (или настраиваем путь к этому тому в новой базе).
  5. Заливка в базу (опционально). Если в новой базе вы планируете хранить картинки внутри БД, а не на диске, после подкладывания тома можно запустить штатную регламентную операцию переноса файлов из томов в информационную базу. После этого все картинки появятся в карточках номенклатуры рабочей базы!

Альтернативные способы и нюансы программной работы

Если конфигурации абсолютно идентичны, обработка «Выгрузка загрузка данных XML» позволяет перенести не только карточки файлов, но и сами двоичные данные, если они хранятся в базе. Однако, для баз большого объема этот процесс может потребовать много времени и оперативной памяти.

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

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

Практический совет: Если картинки утеряны, но есть папка с изображениями, где файлы названы по артикулам (например, АртикулТовара.jpg), разработчики часто пишут простую обработку, которая в цикле обходит каталог, ищет номенклатуру по артикулу и программно создает присоединенные файлы, используя методы БСП. Это избавляет от необходимости восстанавливать сложные связи по внутренним идентификаторам (UUID).

← На главную