При работе с внешними обработками загрузки данных из Excel в конфигурации «1С:Управление торговлей 11» (УТ 11) программисты часто сталкиваются с критической ошибкой: Поле объекта не обнаружено (ПрисоединенныеФайлы). Эта проблема обычно возникает при попытке программного добавления изображений к номенклатуре. Рассмотрим подробно, почему старые методы загрузки перестали работать и как адаптировать код под современную архитектуру 1С.
Ошибка возникает из-за того, что в коде обработки присутствует прямое обращение к объекту метаданных, которого больше не существует в вашей версии конфигурации: РегистрыСведений.ПрисоединенныеФайлы. В ранних версиях систем на платформе «1С:Предприятие 8» (например, в УТ 10.3) файлы действительно могли храниться в специализированных регистрах сведений.
Современная «1С:Управление торговлей 11» построена на базе Библиотеки стандартных подсистем (БСП). В рамках этой библиотеки механизм хранения присоединенных файлов был полностью пересмотрен. Теперь вместо единого глобального регистра используются распределенные справочники и специализированные механизмы работы с двоичными данными.
Чтобы успешно загрузить фото, нам нужно понять, куда именно 1С записывает данные. В актуальных релизах УТ 11 структура хранения выглядит следующим образом:
Справочник.НоменклатураПрисоединенныеФайлы.ВладелецФайла, который ссылается на конкретную карточку номенклатуры.ДанныеПрисоединенныхФайлов.Номенклатура есть реквизит ФайлКартинки, куда записывается ссылка на элемент из справочника присоединенных файлов. Именно этот реквизит отвечает за то, какое фото будет отображаться в карточке товара как главное.Рассмотрим, как изменить проблемный участок кода. Вместо обращения к РегистрыСведений.ПрисоединенныеФайлы, нам необходимо реализовать алгоритм создания элемента справочника и записи двоичных данных. Проанализируем пример правильного подхода с использованием программного интерфейса БСП.
Для начала, вместо прямого манипулирования наборами записей регистров, мы будем использовать функции модуля РаботаСФайлами. Это наиболее безопасный и правильный метод, так как он автоматически учитывает настройки системы (хранение в базе или в томах на диске).
Пример программного кода для добавления картинки к номенклатуре:
// Предположим, у нас есть СсылкаНаНоменклатуру и ПутьКФайлу
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
НаименованиеФайла = "Фото_товара.jpg";
ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("Автор", Пользователи.ТекущийПользователь());
ПараметрыФайла.Вставить("ВладелецФайла", СсылкаНаНоменклатуру);
ПараметрыФайла.Вставить("Наименование", НаименованиеФайла);
// Используем стандартный метод БСП для создания файла
НовыйФайлСсылка = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ДвоичныеДанные, НаименованиеФайла);
// Устанавливаем загруженное фото как основное для номенклатуры
ОбъектНоменклатура = СсылкаНаНоменклатуру.ПолучитьОбъект();
ОбъектНоменклатура.ФайлКартинки = НовыйФайлСсылка;
ОбъектНоменклатура.Записать();
Если по каким-то причинам вы не хотите использовать высокоуровневые функции БСП, разберем, как создать структуру хранения вручную. Это поможет лучше понять логику системы. Процесс состоит из трех шагов:
Шаг 1. Создание записи в справочнике присоединенных файлов.
Нам нужно создать элемент в справочнике НоменклатураПрисоединенныеФайлы. Обязательно заполняем владельца, имя и расширение.
НовыйФайл = Справочники.НоменклатураПрисоединенныеФайлы.СоздатьЭлемент();
НовыйФайл.Наименование = "ИмяКартинки";
НовыйФайл.ВладелецФайла = СсылкаНаНоменклатуру;
НовыйФайл.Расширение = "jpg";
НовыйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
НовыйФайл.Записать();
Шаг 2. Запись двоичных данных.
Теперь необходимо поместить само тело картинки в базу. Для этого в БСП используется регистр сведений ДанныеПрисоединенныхФайлов.
МенеджерЗаписи = РегистрыСведений.ДанныеПрисоединенныхФайлов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ПрисоединенныйФайл = НовыйФайл.Ссылка;
МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
МенеджерЗаписи.Записать();
Шаг 3. Привязка к карточке номенклатуры.
Не забываем обновить основной реквизит ФайлКартинки у номенклатуры, иначе фото будет числиться в списке присоединенных файлов, но не отобразится в интерфейсе карточки товара.
Выясним, как ваша обработка получает картинки из файла Excel. Существует два основных способа:
C:\Images\Photo1.jpg). В этом случае мы просто читаем строку и создаем объект Новый ДвоичныеДанные(ПутьИзЭксель).Shapes, задача усложняется. Обработке необходимо использовать COM-соединение с приложением Excel, программно выделить объект-картинку, сохранить её во временную папку на диске и только потом загружать в 1С.Совет: Если ваша обработка не умеет извлекать картинки, встроенные «внутрь» листа, попробуйте подготовить файл Excel таким образом, чтобы в колонке был прописан путь к папке с фотографиями. Это значительно упростит отладку кода.
Прежде чем глубоко погружаться в переписывание кода внешней обработки, проанализируем возможности типового функционала УТ 11. В современных релизах механизм «Загрузка данных из файла» (раздел «НСИ и администрирование» — «Сервис») значительно доработан.
Типовой механизм позволяет:
Рассмотрим этот вариант как альтернативу, если внешняя обработка слишком устарела и требует масштабной переработки. Использование типовых средств гарантирует корректное заполнение всех служебных регистров БСП и корректную работу с томами хранения файлов.
Подведем итог: ошибка Поле объекта не обнаружено (ПрисоединенныеФайлы) — это сигнал о том, что код обращается к архитектуре «прошлого поколения». Для решения проблемы необходимо переориентировать логику на использование справочников НоменклатураПрисоединенныеФайлы и регистра ДанныеПрисоединенныхФайлов, либо воспользоваться встроенными функциями модуля РаботаСФайлами. Это обеспечит стабильную работу загрузки фото в актуальных версиях 1С:УТ 11.