Перенос данных между конфигурациями на разных платформах — задача, с которой сталкиваются многие специалисты при переходе с УТ 10.3 на современные решения на базе БСП (Библиотеки стандартных подсистем), такие как Розница 2.3. Основная сложность заключается в фундаментальном изменении архитектуры хранения файлов: если в старой версии картинки часто хранились в реквизитах типа ХранилищеЗначения, то в современных конфигурациях используется подсистема ПрисоединенныеФайлы.
Прежде чем приступать к написанию кода, важно осознать, как устроена работа с файлами в Рознице 2.3. Это не просто путь к картинке, а сложная структура:
НоменклатураПрисоединенныеФайлы отвечает за учет метаданных: имя файла, расширение, автор, дата создания.ДвоичныеДанныеФайлов содержит саму «начинку» файла.БСП автоматически управляет тем, где лежат эти данные — в самой базе данных или в томах на диске.Для успешного переноса изображений мы рекомендуем придерживаться следующего пошагового алгоритма, который позволит избежать повреждения данных и обеспечит корректную связь между номенклатурой и её визуальным представлением.
Номенклатура. Для каждой позиции с картинкой необходимо считать данные из реквизита ХранилищеКартинки и сохранить их как физический файл на диске. Параллельно формируется файл-маппинг (например, Excel или CSV), содержащий соответствие ключа поиска (артикул или код) и пути к сохраненному файлу на диске.Розницы необходимо использовать программный интерфейс ПрисоединенныеФайлы.Разберем пример кода, который позволяет программно добавить файл к номенклатуре в Рознице 2.3. Обратите внимание, что выполнение этих операций должно происходить на сервере.
// Исходные данные для создания записи
ИмяФайла = "c:\ФайлКартинки.png";
Парам = Новый Структура;
Парам.Вставить("Автор", ПользователиКлиентСервер.ТекущийПользователь);
Парам.Вставить("ВладелецФайлов", Номенклатура);
Парам.Вставить("ИмяБезРасширения", Номенклатура.Код);
Парам.Вставить("РасширениеБезТочки", "png");
Парам.Вставить("ВремяИзмененияУниверсальное", ТекущаяУниверсальнаяДата);
// Чтение данных и помещение во временное хранилище
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
// Создание присоединенного файла средствами БСП
СсылкаНаКартинку = ПрисоединенныеФайлы.ДобавитьПрисоединенныйФайл(Парам, Адрес, , , );
// Привязка к номенклатуре
ОбъектНоменклатура = Номенклатура.ПолучитьОбъект();
ОбъектНоменклатура.ФайлКартинки = СсылкаНаКартинку;
ОбъектНоменклатура.Записать();
Для того чтобы процесс прошел максимально эффективно, примите во внимание следующие рекомендации:
Розницы — это вручную добавить картинку к номенклатуре в интерфейсе программы, предварительно поставив «точку останова» в коде. Так вы увидите, какие именно функции из общих модулей БСП вызываются при записи файла.УникальныеИдентификаторы (GUID) объектов не совпадут. Ориентируйтесь на Артикул или Код, если они у вас унифицированы.Следуя этим рекомендациям и используя встроенные механизмы БСП, вы сможете успешно автоматизировать перенос изображений, избегая «ручного» труда и ошибок при ручном добавлении файлов через интерфейс.