Как исправить ошибку «Каталог не обнаружен» при отправке электронного письма из 1С?

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

В процессе работы с конфигурациями на обычных формах, такими как 1С:Управление торговлей 10.3 или 1С:Управление производственным предприятием 1.3, пользователи часто сталкиваются с неприятной ошибкой при попытке отправить письмо с вложением или отчетом в формате HTML. Ошибка выглядит следующим образом: Ошибка при вызове метода контекста (Послать): Каталог не обнаружен 'v8_..._files\image000.png'.

Давайте подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы платформы и рассмотрим несколько эффективных способов решения — от изменения настроек до правки программного кода.

Причина возникновения ошибки: почему 1С «теряет» каталог?

Прежде чем переходить к коду, выясним причину сбоя. Когда мы отправляем отчет или печатную форму в теле письма, 1С преобразует табличный документ в формат HTML. Если в документе есть изображения (логотипы, подписи, печати), метод Записать() создает основной HTML-файл и дополнительную папку с суффиксом _files, в которую помещаются все картинки.

Проблема заключается в том, что в сформированном HTML-коде ссылки на картинки прописываются как относительные. Например: IMG SRC="v8_A94C_57_files\image001.png". При вызове метода Послать() почтовый клиент 1С пытается найти этот каталог относительно текущего рабочего пути, но не находит его, так как временные файлы могут быть уже перемещены или путь интерпретируется некорректно. Ситуация усугубляется в новых версиях Windows и при обновлении движков браузеров, которые используются внутри 1С.

Рассмотрим по шагам, как можно исправить эту ситуацию программно.

Решение 1: Преобразование путей в абсолютные (универсальный метод)

Самый надежный способ — программно перехватить текст HTML перед отправкой и заменить относительные пути к картинкам на полные (абсолютные). Это гарантирует, что метод Послать() точно найдет файлы на диске.

Проанализируем пример кода, который можно внедрить в процедуру отправки:


// Получаем временный путь и записываем документ
ИмяВременногоФайлаHTML = ПолучитьИмяВременногоФайла(".htm");
ТабДок.Записать(ИмяВременногоФайлаHTML, ТипФайлаТабличногоДокумента.HTML3);

// Читаем полученный текст HTML
ДокHTML = Новый ТекстовыйДокумент;
ДокHTML.Прочитать(ИмяВременногоФайлаHTML, КодировкаТекста.UTF8);
ТекстHTML = ДокHTML.ПолучитьТекст();

// Определяем путь к папке с картинками
ФайлHTML = Новый Файл(ИмяВременногоФайлаHTML);
ТекущийКаталогКартинок = ФайлHTML.Путь + ФайлHTML.ИмяБезРасширения + "_files";

// Заменяем относительный путь на абсолютный
ТекстHTML = СтрЗаменить(ТекстHTML, ФайлHTML.ИмяБезРасширения + "_files", ТекущийКаталогКартинок);

// Устанавливаем обновленный текст обратно в письмо
Письмо.Текст = ТекстHTML;

В данном примере мы используем объект Файл, чтобы корректно вычислить путь к каталогу _files, и функцию СтрЗаменить для модификации текста письма. Этот подход исключает неопределенность при поиске изображений.

Решение 2: Исправление ошибки слэша в типовых конфигурациях (УТ 10.3)

В последних релизах УТ 10.3 (начиная с 10.3.50.2) разработчики уже добавили типовой код для обработки картинок, но в нем часто встречается досадная ошибка в синтаксисе путей. Код ищет обратный слэш \, в то время как современные системы могут формировать пути через прямой слэш /.

Рассмотрим, как исправить общую форму НастройкаОтправкиОтчета. Нам нужно найти строку проверки источника (обычно это процедура ОсновныеДействияФормыOK):

Найдите строку:

Если Лев(Источник, 6) = "about:" И Найти(Источник, "files\image") > 0 Тогда

И замените её на вариант с прямым слэшем:

Если Лев(Источник, 6) = "about:" И Найти(Источник, "files/image") > 0 Тогда

Как показывает практика, такая простая замена одного символа решает проблему «Каталог не обнаружен» в большинстве современных инсталляций 1С, так как браузерный движок внутри платформы начинает использовать URL-стандарты написания путей.

Решение 3: Работа с HTML DOM (для УПП 1.3)

Если конфигурация позволяет использовать объектную модель HTML-документа, мы можем более элегантно заменить пути через перебор тегов IMG. Посмотрим на пример для УПП 1.3 в модуле формы НастройкаОтправкиОтчета:


ТегКартинки = НовыйHTMLДокумент.all.tags("IMG");
Для а = 0 По ТегКартинки.length - 1 Цикл
    Источник = ТегКартинки.item(а).src;
    // Удаляем префикс "about:" и подставляем путь к временному каталогу
    ТегКартинки.item(а).src = СтрЗаменить(Источник, "about:", КаталогВременныхФайлов);
КонецЦикла;

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

Решение 4: Простой пользовательский обход (без программирования)

Если у вас нет возможности оперативно внести изменения в программный код, рассмотрите административный вариант решения проблемы. В окне настройки отправки отчета 1С предлагает выбор формата текста.

  1. Откройте настройки отправки сообщения.
  2. Найдите опцию формата текста сообщения.
  3. Выберите значение «Поместить в сообщение отчет в текстовом формате».
  4. Сами отчеты при этом будут прикреплены как отдельные файлы-вложения (PDF, Excel).

Важно: При таком подходе тело письма не будет содержать таблиц и картинок, но зато отправка пройдет без ошибок, так как 1С не придется генерировать сложную HTML-структуру с внешними ресурсами.

Дополнительные рекомендации

При отладке этой ошибки также полезно обратить внимание на следующие моменты:

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

← На главную