При настройке обмена между 1С и сайтом на платформе 1С-Битрикс часто возникает потребность в дополнительной фильтрации данных. Одной из наиболее частых задач является запрет на выгрузку определенных изображений, которые не должны отображаться на витрине интернет-магазина. Разберем, где искать логику формирования пакетов и как правильно внести изменения, чтобы не нарушить типовой механизм обмена.
Для начала нам необходимо понять, как именно 1С собирает данные перед отправкой. Типовой обмен обычно работает через регламентное задание или интерактивный вызов обработки. Чтобы найти нужный участок кода, рекомендуем воспользоваться отладчиком.
Если вы запускаете обмен вручную, установите точку остановки на вызове функции формирования пакета. В современных конфигурациях 1С, интегрированных с Битрикс, ключевые процедуры обмена находятся в общих модулях подсистемы Битрикс. Ваша задача — найти модуль с названием, содержащим СерверВыгрузкаДанных (например, Б_ОбменССайтомСерверВыгрузкаДанных).
Проанализируем структуру модуля Б_ОбменССайтомСерверВыгрузкаДанных. Внутри него стоит обратить внимание на функцию СформироватьВременныеТаблицыПоИнформацииОТоварахПакета. Именно здесь происходит первичное накопление данных о номенклатуре, которые впоследствии попадут в XML-файл обмена.
Важным индикатором для поиска является параметр ВыгружатьКартинкиИФайлы. Вы можете использовать поиск по конфигурации (клавиши Ctrl+F), чтобы найти все вхождения этой переменной. В настройках узла обмена Номенклатура -> Товары также может быть предусмотрен флаг, регулирующий поведение обмена, который стоит проверить в первую очередь, прежде чем приступать к написанию кода.
Рассмотрим несколько подходов к решению задачи, от простых настроек до доработки конфигурации.
Рекомендуем избегать прямого редактирования типового кода. Вместо этого лучше создать Расширение конфигурации. Внутри расширения вы можете переопределить или дополнить логику, используя подписки на события. Ищите события, которые возникают перед записью объекта в XML или перед упаковкой файлов в архив.
Пример логики, которую можно реализовать в процедуре:
// Пример псевдокода для фильтрации в расширении
Процедура ПередВыгрузкойКартинки(Картинка, Отказ)
Если Картинка.Размер > 1024 * 1024 Тогда // Пример условия: не выгружать тяжелые файлы
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Картинки в 1С чаще всего хранятся в регистре сведений, привязанном к номенклатуре. Если вы нашли запрос, который формирует выборку картинок для выгрузки, вы можете добавить в него условие ГДЕ. Это позволит исключить файлы на этапе сбора данных, что является наиболее производительным методом.
Разберем подробнее шаги по настройке запроса:
ПометкаНаУдаление или по вашему собственному признаку (например, НеВыгружатьНаСайт).CommerceML.При отладке обмена всегда учитывайте, что он часто выполняется в фоновом режиме. Обычная точка остановки в конфигураторе может не сработать, если вы не включили настройку Отладка фоновых заданий в меню Отладка -> Подключение. Установите галочку напротив пункта Автоматически подключать фоновые задания.
Также помните о последствиях: если вы просто перестанете выгружать картинку, которая ранее уже была передана на сайт, модуль обмена может интерпретировать это как необходимость удаления данной картинки с сайта. Проверьте настройки модуля 1С-Битрикс: в нем есть опции, определяющие, что делать с данными, которые больше не попадают в текущую выгрузку. Будьте внимательны при тестировании, чтобы случайно не удалить все изображения из базы данных интернет-магазина.
Используя данные методы и структуру Расширений конфигурации, вы сможете гибко настроить процесс обмена, сохранив чистоту основной конфигурации и обеспечив стабильную работу интеграции с 1С-Битрикс.