Как изменить названия фотографий в 1С:Управление торговлей при выгрузке на сайт?

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

При стандартной интеграции «1С:Управление торговлей» (УТ) с интернет-магазином многие владельцы бизнеса сталкиваются с проблемой: красивые и понятные названия картинок товаров (например, tovar-ochen-horoshiy.jpg) при выгрузке превращаются в громоздкий и непонятный набор символов вида 3dc32dc5bfcb11e8a924c86000020f05_853d9bd7cad743e6b4bc51579d121880.jpg.

С технической точки зрения система делает это умышленно. Платформа 1С использует уникальные идентификаторы (UUID) ноmenклатуры и присоединенных файлов, чтобы гарантировать уникальность имен на сервере и избежать конфликтов (когда у двух разных товаров загружаются изображения с одинаковым именем). Однако с точки зрения поисковой оптимизации (SEO) это серьезный минус. Поисковые системы Яндекс и Google гораздо лучше ранжируют изображения, которые имеют человекопонятные названия (ЧПУ), отражающие суть товара.

В этой статье мы подробно рассмотрим, как решить эту проблему, проанализируем доступные методы и разберем по шагам варианты реализации как на стороне 1С, так и на стороне веб-ресурса.

---

Почему 1С выгружает картинки с непонятными именами?

Прежде чем переходить к решению, выясним причину такого поведения программы. По умолчанию в типовом обмене по протоколу CommerceML имя файла формируется по следующему шаблону:

[ИдентификаторТовара]_[ИдентификаторКартинки].jpg

В XML-файле выгрузки (обычно это import.xml) путь к картинке выглядит следующим образом:

<Картинка>import_files/3d/3dc32dc5bfcb11e8a924c86000020f05_853d9bd7cad743e6b4bc51579d121880.jpg</Картинка>

Если мы хотим, чтобы на сайт попадали ЧПУ-имена картинок, нам нужно либо научить 1С выгружать файлы под другими именами, либо настроить CMS-систему сайта так, чтобы она переименовывала их при импорте.

---

Вариант 1. Модификация алгоритма выгрузки в 1С (Создание расширения)

Самый надежный способ решить задачу непосредственно в источнике данных — доработать типовой механизм выгрузки 1С. Чтобы база оставалась на поддержке и без проблем обновлялась, мы рекомендуем делать это с помощью расширения конфигурации.

Рассмотрим подробнее логику, которую должен реализовать программист:

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

Проанализируем пример функции транслитерации на языке 1С, которую можно внедрить в расширение:


Функция ТранслитерироватьСтроку(Знач ИсходнаяСтрока) Экспорт
    Соответствие = Новый Соответствие;
    Соответствие.Вставить("а", "a"); Соответствие.Вставить("б", "b");
    Соответствие.Вставить("в", "v"); Соответствие.Вставить("г", "g");
    Соответствие.Вставить("д", "d"); Соответствие.Вставить("е", "e");
    Соответствие.Вставить("ё", "yo"); Соответствие.Вставить("ж", "zh");
    Соответствие.Вставить("з", "z"); Соответствие.Вставить("и", "i");
    Соответствие.Вставить("й", "y"); Соответствие.Вставить("к", "k");
    Соответствие.Вставить("л", "l"); Соответствие.Вставить("м", "m");
    Соответствие.Вставить("н", "n"); Соответствие.Вставить("о", "o");
    Соответствие.Вставить("п", "p"); Соответствие.Вставить("р", "r");
    Соответствие.Вставить("с", "s"); Соответствие.Вставить("т", "t");
    Соответствие.Вставить("у", "u"); Соответствие.Вставить("ф", "f");
    Соответствие.Вставить("х", "kh"); Соответствие.Вставить("ц", "ts");
    Соответствие.Вставить("ч", "ch"); Соответствие.Вставить("ш", "sh");
    Соответствие.Вставить("щ", "shch"); Соответствие.Вставить("ъ", "");
    Соответствие.Вставить("ы", "y"); Соответствие.Вставить("ь", "");
    Соответствие.Вставить("э", "e"); Соответствие.Вставить("ю", "yu");
    Соответствие.Вставить("я", "ya");
    
    Результат = "";
    Для Индекс = 1 По СтрДлина(ИсходнаяСтрока) Цикл
        Символ = НРег(Сред(ИсходнаяСтрока, Индекс, 1));
        НайденныйСимвол = Соответствие.Получить(Символ);
        Если НайденныйСимвол <> Неопределено Тогда
            Результат = Результат + НайденныйСимвол;
        ИначеЕсли Найти("abcdefghijklmnopqrstuvwxyz0123456789-_", Символ) > 0 Тогда
            Результат = Результат + Символ;
        ИначеЕсли Символ = " " Тогда
            Результат = Результат + "-"; // Заменяем пробелы на дефисы
        КонецЕсли;
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

При записи файла картинки в процедуре экспорта мы вызываем данную функцию. Например, новое имя файла будет формироваться так:


НовоеИмяФайла = ТранслитерироватьСтроку(НоменклатураСсылка.Артикул + "-" + НоменклатураСсылка.Наименование);

Важный нюанс: если у одного товара прикреплено несколько фотографий, алгоритм должен добавлять к имени порядковый индекс (например, tovar-1.jpg, tovar-2.jpg), иначе последующие фотографии будут перезаписывать первую.

---

Вариант 2. Использование сторонних модулей интеграции

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

Такие модули часто содержат встроенный функционал для генерации SEO-имен файлов прямо «из коробки». Они позволяют:

---

Вариант 3. Решение на стороне CMS сайта (на примере 1С-Битрикс)

Довольно часто переписывать логику выгрузки внутри 1С оказывается трудозатратно или нежелательно из-за частых обновлений программы. В этом случае задачу можно решить непосредственно на стороне сайта. Рассмотрим два основных способа.

Способ А. Включение стандартной опции сохранения оригинальных имен

Если ваша CMS — 1С-Битрикс, в ней предусмотрена штатная настройка. Проследуем по шагам в административной панели сайта:

  1. Переходим в раздел Настройки -> Настройки продукта -> Настройки модулей -> Главный модуль.
  2. Находим вкладку Файлы.
  3. Активируем галочку «Сохранять исходные имена загружаемых файлов».

Обратите внимание: эта опция сработает только в том случае, если 1С передает исходное наименование файла в метаданных XML-пакета выгрузки. Если модуль обмена передает картинку строго как UUID, этот способ не поможет.

Способ Б. Написание скрипта-обработчика события после импорта

Поскольку веб-сайт хранит связь между ID товара и его картинками в своей базе данных (например, в таблицах инфоблоков), физическое имя файла на хостинге можно безопасно изменить. Веб-разработчик может написать PHP-скрипт, который будет запускаться автоматически сразу после завершения импорта каталога из 1С.

Логика работы скрипта выглядит следующим образом:

  1. Скрипт выбирает товары, у которых картинки имеют старые названия (содержат UUID).
  2. Берется символьный код товара (SEO URL) или его название.
  3. Происходит переименование файла непосредственно в папке на сервере (например, в каталоге /upload/iblock/...).
  4. В базе данных сайта обновляется путь к файлу для соответствующего товара, чтобы не нарушить отображение на страницах.

Этот метод считается одним из самых безопасных, так как система 1С работает в своем штатном режиме, а вся тяжелая работа по оптимизации ложится на веб-сервер.

---

Резюме: какой путь выбрать?

Подведем итоги нашего анализа:

← На главную