Как исправить ошибку «Поле объекта не обнаружено (ПрисоединенныеФайлы)» при загрузке фото из Excel в 1С:УТ 11?

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

При работе с внешними обработками загрузки данных из Excel в конфигурации «1С:Управление торговлей 11» (УТ 11) программисты часто сталкиваются с критической ошибкой: Поле объекта не обнаружено (ПрисоединенныеФайлы). Эта проблема обычно возникает при попытке программного добавления изображений к номенклатуре. Рассмотрим подробно, почему старые методы загрузки перестали работать и как адаптировать код под современную архитектуру 1С.

Анализируем причину возникновения ошибки

Ошибка возникает из-за того, что в коде обработки присутствует прямое обращение к объекту метаданных, которого больше не существует в вашей версии конфигурации: РегистрыСведений.ПрисоединенныеФайлы. В ранних версиях систем на платформе «1С:Предприятие 8» (например, в УТ 10.3) файлы действительно могли храниться в специализированных регистрах сведений.

Современная «1С:Управление торговлей 11» построена на базе Библиотеки стандартных подсистем (БСП). В рамках этой библиотеки механизм хранения присоединенных файлов был полностью пересмотрен. Теперь вместо единого глобального регистра используются распределенные справочники и специализированные механизмы работы с двоичными данными.

Разбираем архитектуру хранения файлов в УТ 11

Чтобы успешно загрузить фото, нам нужно понять, куда именно 1С записывает данные. В актуальных релизах УТ 11 структура хранения выглядит следующим образом:

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

Корректируем код для загрузки изображений

Рассмотрим, как изменить проблемный участок кода. Вместо обращения к РегистрыСведений.ПрисоединенныеФайлы, нам необходимо реализовать алгоритм создания элемента справочника и записи двоичных данных. Проанализируем пример правильного подхода с использованием программного интерфейса БСП.

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

Пример программного кода для добавления картинки к номенклатуре:


// Предположим, у нас есть СсылкаНаНоменклатуру и ПутьКФайлу
ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу);
НаименованиеФайла = "Фото_товара.jpg";

ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("Автор", Пользователи.ТекущийПользователь());
ПараметрыФайла.Вставить("ВладелецФайла", СсылкаНаНоменклатуру);
ПараметрыФайла.Вставить("Наименование", НаименованиеФайла);

// Используем стандартный метод БСП для создания файла
НовыйФайлСсылка = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ДвоичныеДанные, НаименованиеФайла);

// Устанавливаем загруженное фото как основное для номенклатуры
ОбъектНоменклатура = СсылкаНаНоменклатуру.ПолучитьОбъект();
ОбъектНоменклатура.ФайлКартинки = НовыйФайлСсылка;
ОбъектНоменклатура.Записать();

Реализация загрузки «вручную» (без использования API БСП)

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

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

Нам нужно создать элемент в справочнике НоменклатураПрисоединенныеФайлы. Обязательно заполняем владельца, имя и расширение.


НовыйФайл = Справочники.НоменклатураПрисоединенныеФайлы.СоздатьЭлемент();
НовыйФайл.Наименование = "ИмяКартинки";
НовыйФайл.ВладелецФайла = СсылкаНаНоменклатуру;
НовыйФайл.Расширение = "jpg";
НовыйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе;
НовыйФайл.Записать();

Шаг 2. Запись двоичных данных.

Теперь необходимо поместить само тело картинки в базу. Для этого в БСП используется регистр сведений ДанныеПрисоединенныхФайлов.


МенеджерЗаписи = РегистрыСведений.ДанныеПрисоединенныхФайлов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ПрисоединенныйФайл = НовыйФайл.Ссылка;
МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
МенеджерЗаписи.Записать();

Шаг 3. Привязка к карточке номенклатуры.

Не забываем обновить основной реквизит ФайлКартинки у номенклатуры, иначе фото будет числиться в списке присоединенных файлов, но не отобразится в интерфейсе карточки товара.

Особенности работы с Excel

Выясним, как ваша обработка получает картинки из файла Excel. Существует два основных способа:

  1. Путь к файлу в ячейке: В Excel указан локальный путь (например, C:\Images\Photo1.jpg). В этом случае мы просто читаем строку и создаем объект Новый ДвоичныеДанные(ПутьИзЭксель).
  2. Картинка внутри Excel: Если изображения вставлены непосредственно в лист Excel как объекты Shapes, задача усложняется. Обработке необходимо использовать COM-соединение с приложением Excel, программно выделить объект-картинку, сохранить её во временную папку на диске и только потом загружать в 1С.

Совет: Если ваша обработка не умеет извлекать картинки, встроенные «внутрь» листа, попробуйте подготовить файл Excel таким образом, чтобы в колонке был прописан путь к папке с фотографиями. Это значительно упростит отладку кода.

Использование типового функционала 1С

Прежде чем глубоко погружаться в переписывание кода внешней обработки, проанализируем возможности типового функционала УТ 11. В современных релизах механизм «Загрузка данных из файла» (раздел «НСИ и администрирование» — «Сервис») значительно доработан.

Типовой механизм позволяет:

Рассмотрим этот вариант как альтернативу, если внешняя обработка слишком устарела и требует масштабной переработки. Использование типовых средств гарантирует корректное заполнение всех служебных регистров БСП и корректную работу с томами хранения файлов.

Заключение

Подведем итог: ошибка Поле объекта не обнаружено (ПрисоединенныеФайлы) — это сигнал о том, что код обращается к архитектуре «прошлого поколения». Для решения проблемы необходимо переориентировать логику на использование справочников НоменклатураПрисоединенныеФайлы и регистра ДанныеПрисоединенныхФайлов, либо воспользоваться встроенными функциями модуля РаботаСФайлами. Это обеспечит стабильную работу загрузки фото в актуальных версиях 1С:УТ 11.

← На главную