Интеграция 1С:УНФ и OpenCart: Как исправить сбои обмена, очистить кэш картинок и настроить выгрузку по артикулу

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

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

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

Проанализируем ситуацию по каждой проблеме отдельно.

1. Устраняем нестабильную работу периодического обмена по расписанию

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

Рассмотрим основные причины сбоя регламентного задания обмена в файловом режиме:

  1. Отсутствие активных сеансов: В файловой базе регламентные задания выполняются в контексте активного пользовательского сеанса. Если в базе никто не работает, обмен не запустится. Чтобы решить эту проблему, рекомендуется выделить отдельный служебный сеанс (например, под специальным пользователем «Администратор обмена»), который будет запущен на сервере или постоянно включенном компьютере круглосуточно.
  2. Ограничения прав доступа: Часто внешние модули интеграции (например, сторонние модули синхронизации с OpenCart) требуют для своей работы полных административных прав. Если первым в базу зашел пользователь с ограниченными правами, фоновое задание обмена может инициализироваться под его сеансом и завершиться с ошибкой из-за недостатка прав доступа к чтению каталогов или записи логов.
  3. Блокировка заданий на веб-сервере: Если ваша файловая база опубликована на веб-сервере (Apache или IIS) для обмена с сайтом, регламентные задания по умолчанию могут быть заблокированы. Проанализируем конфигурационный файл публикации default.vrd, который находится в каталоге публикации на веб-сервере. В нем обязательно должен быть взведен параметр allowexecutescheduledjobs="true".

Посмотрим на пример правильной структуры файла default.vrd для IIS или Apache:


<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/UNF_Exchange"
       ib="File=&quot;C:\1C_Bases\UNF&quot;;"
       allowexecutescheduledjobs="true">
    <ws>
        <point name="Exchange" alias="exchange.1cws" enable="true"/>
    </ws>
</point>

Если параметр allowexecutescheduledjobs установлен в значение false или вовсе отсутствует, веб-сервер будет игнорировать запуск расписания фоновых задач.

Вторая сторона медали — это тайм-ауты и ограничения со стороны хостинга OpenCart. Процесс передачи номенклатуры и картинок из 1С может занимать длительное время. Если сервер хостинга обрывает соединение до завершения транзакции, 1С выдает ошибку обмена, и расписание сбивается. Совместно с веб-мастером вашего сайта проанализируйте настройки веб-сервера и PHP на хостинге. Необходимо увеличить следующие лимиты в файле php.ini или настройках панели управления хостингом:

2. Почему сжатые в 1С фотографии выгружаются на сайт в старом (большом) размере?

Это крайне распространенная проблема. Вы уменьшили исходные файлы изображений (например, с 8 МБ до 60 КБ), перезагрузили их в карточки товаров в 1С, но при выполнении синхронизации сайт по-прежнему сообщает о загрузке огромных файлов. Выясним, почему так происходит.

Дело в многоуровневом кэшировании и особенностях работы планов обмена 1С:

  1. Локальный временный кэш платформы 1С: При подготовке пакета выгрузки CommerceML (файлы import.xml, offers.xml и папка import_files) 1С собирает выгружаемые картинки во временную папку операционной системы текущего пользователя (обычно это %USERPROFILE%\AppData\Local\Temp). Если имена файлов не меняются, алгоритм выгрузки может посчитать, что файлы в папке временных файлов актуальны, и отправить старые закэшированные тяжелые версии картинок на сайт вместо обращения к обновленной базе данных. Очистите папку Temp на компьютере, с которого запускается обмен.
  2. Отсутствие регистрации изменений в Плане обмена: План обмена в 1С работает по принципу фиксации изменений. Когда вы заменяете картинку внутри карточки товара, сама карточка номенклатуры (ее наименование, артикул, цены) не меняется. Система считает, что товар изменять не нужно, и при очередном инкрементальном (быстром) обмене просто не включает этот товар и его картинку в пакет выгрузки. Соответственно, на сайте остаются старые файлы. Решение: необходимо выполнить полную выгрузку картинок, временно выбрав в настройках узла обмена опцию «Выполнить полную выгрузку данных», либо принудительно зарегистрировать изменения для товаров с помощью обработки «Регистрация изменений для обмена».
  3. Кэш на стороне OpenCart: CMS OpenCart имеет собственный мощный механизм кэширования изображений. При первой загрузке картинки оригинальный файл сохраняется в директории image/catalog/, а для отображения на страницах сайта создаются уменьшенные копии в папке image/cache/. Если вы заменили изображение в 1С, но имя файла (его GUID-идентификатор) осталось прежним, OpenCart при импорте может пропустить перезапись файла, посчитав его уже загруженным, либо продолжит отдавать пользователям старую картинку из папки cache. После обновления картинок в 1С обязательно очищайте кэш изображений в панели администрирования OpenCart или вручную удаляйте содержимое папки image/cache/ через FTP/файловый менеджер хостинга.

3. Как полностью удалить загруженные фотографии из базы 1С

Просто очистить поле картинки в карточке номенклатуры в «1С:УНФ» недостаточно. База данных устроена так, что все файлы хранятся в подчиненном справочнике присоединенных файлов. Сами файлы физически остаются в таблицах базы данных, увеличивая её размер и продолжая выгружаться при сбоях алгоритмов обмена.

Рассмотрим по шагам, как полностью очистить базу 1С от загруженных ранее картинок товаров без остатка:

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

Для начала нам нужно убрать ссылки на основные изображения в самих товарах. Воспользуемся встроенным инструментом «Групповое изменение реквизитов»:

  1. Перейдем в раздел Администрирование — Обслуживание — Корректировка данных — Групповое изменение реквизитов.
  2. В поле «Выбирать элементы» укажем справочник Номенклатура.
  3. Если нужно очистить картинки не у всех товаров, настроим отбор (например, по конкретной группе или категории товаров).
  4. В списке реквизитов найдем поле Файл картинки (или Основное изображение) и установим для него галочку изменения, оставив значение пустым (будет установлена «Пустая ссылка»).
  5. Нажмем кнопку Изменить реквизиты. Теперь карточки товаров больше не ссылаются на старые картинки.

Шаг 2. Пометка на удаление присоединенных файлов

Сами файлы всё еще хранятся в системе как самостоятельные объекты. Теперь пометим их на удаление:

  1. Снова откроем обработку Групповое изменение реквизитов.
  2. В поле выбора элементов найдем справочник Присоединенные файлы (Номенклатура) (в метаданных он называется НоменклатураПрисоединенныеФайлы).
  3. В списке доступных реквизитов найдем реквизит Пометка удаления.
  4. Установим флаг в значение Да (Истина).
  5. Нажмем кнопку Изменить реквизиты. Все прикрепленные файлы картинок теперь помечены на удаление.

Шаг 3. Окончательное физическое удаление файлов из СУБД

Завершим очистку удалением объектов из базы данных:

  1. Перейдем в раздел Администрирование — Обслуживание — Удаление помеченных объектов.
  2. Выберем автоматический или выборочный режим поиска и запустим сканирование базы.
  3. Система выведет список помеченных файлов номенклатуры. Нажмем кнопку Удалить.
  4. Важно для файловых баз: Физический размер файла базы данных 1Cv8.1CD на диске после этого шага не уменьшится автоматически. Чтобы освободить место на жестком диске компьютера, запустите конфигуратор, перейдите в меню Администрирование — Тестирование и исправление, отметьте пункт Сжатие таблиц информационной базы и выполните процедуру. Для клиент-серверной базы потребуется выполнить операцию «Shrink» (сжатие базы данных) средствами вашей СУБД (MS SQL Server, PostgreSQL).

Для программистов и опытных администраторов приведем пример кода на встроенном языке 1С, который позволяет быстро автоматизировать процедуру отвязки и пометки на удаление всех присоединенных файлов картинок для выбранного списка номенклатуры:


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

4. Настройка выгрузки картинок с именем по артикулу вместо GUID

По умолчанию типовые механизмы выгрузки 1С используют международный стандарт CommerceML. Согласно этому стандарту, файлы картинок при передаче переименовываются в уникальные GUID-идентификаторы (например, import_files/3a/3a12b45c-d78e-11ef-80f2-00155d012345.jpg). Это гарантирует отсутствие конфликтов имен на сервере, но крайне неудобно для SEO-оптимизации сайта (поисковые роботы любят осмысленные названия изображений) и ручной работы с файлами на хостинге.

Проанализируем варианты решения этой задачи:

Вариант А. Настройка на стороне OpenCart (Рекомендуемый и самый простой способ)

Вместо того чтобы переписывать закрытый программный код выгрузки внутри платформы 1С, правильнее и безопаснее решить эту проблему на стороне сайта. Современные модули обмена для OpenCart (например, популярные модули от NeoSeo, Elit-Board или «Обмен 1С предпритиями» от разработчиков OpenCart) имеют встроенный функционал SEO-транслитерации.

Вам необходимо зайти в настройки модуля обмена на стороне CMS OpenCart, найти вкладку «Изображения» или «SEO» и активировать опцию «Переименовывать файлы изображений при импорте». В качестве шаблона переименования выберите [артикул] или [название_товара_транслит]. При получении пакета CommerceML от 1С модуль сайта сам переименует файлы на диске хостинга и правильно привяжет их в базе данных MySQL сайта. Исходная база 1С при этом останется типовой и обновляемой.

Вариант Б. Доработка модуля обмена в 1С:УНФ

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

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

Совместная последовательная настройка этих параметров позволит вам добиться полностью стабильного автоматического обмена между 1С:УНФ и сайтом на OpenCart, минимизировать нагрузку на хостинг и оптимизировать изображения под требования поисковых систем.

← На главную