BUSSOL / DATABRIDGE

Документация версии 1.6.0

Установка, профили, сущности, источники, экспорт, импорт, автоматизация, безопасность, rollback, обновление и приёмка.
1С-БитриксXLSX / XLSM / XLS / CSVGoogle Sheets / IMAP / HTTP / FTPPHP 8.1+
24 сентября 2026 года · SHA-256 архива: 3684b07d2be299cb14410c1fcbe4d9b2b52247f2cd23c3c7ed3b286a7cf553ef
Страница решения в Marketplace

1. Назначение и модель работы

Модуль BUSSOL DataBridge: импорт, экспорт и автоматизация каталога организует повторяемый обмен данными между 1С-Битрикс и файлами XLSX/XLSM/XLS/CSV, Google Sheets и внешними источниками. Версия 1.6.0 работает не только с элементами инфоблоков, но и с разделами/SEO, Highload-блоками, скидками/правилами корзины и наборами/комплектами.

КомпонентНазначение
ПрофильХранит тип сущности, источник, формат, направление, столбцы, фильтр, правила импорта, доставку результата и расписание.
ЗаданиеФиксирует один запуск экспорта, импорта или отката: файл, статус, прогресс, счётчики и состояние.
ЖурналСодержит построчные сообщения, предупреждения и ошибки с номером строки и ID сущности.
Агент и планировщикРазбирают очередь, ставят задания по расписанию, восстанавливают зависшие операции и очищают старые задания.
Rollback-журналСохраняет обратные действия до изменений и позволяет отдельным заданием откатить поддерживаемые изменения импорта.
ДоставкаПосле успешного экспорта может передать файл по FTP/FTPS, HTTP(S), Google Drive, Google Sheets или email.

Рекомендуемая модель эксплуатации: создать профиль, выполнить контрольный экспорт или dry-run импорта, проверить журнал, сделать резервную копию, запустить реальный обмен, а автоматизацию и расписание включать после успешной приёмки сценария на копии сайта.

2. Возможности версии 1.6.0

  • Неограниченное число профилей; направления «Экспорт», «Импорт» и «Импорт и экспорт».
  • Типы профилей: элементы/товары, разделы и SEO, Highload-блоки, скидки/правила корзины, наборы и комплекты.
  • Форматы XLSX, XLSM, XLS и CSV; многолистовой импорт и экспорт.
  • Импорт из ручного файла, HTTP/HTTPS/FTP/FTPS, email-вложений по IMAP и Google Sheets.
  • Экспорт с автоматической доставкой на FTP/FTPS, HTTP(S), Google Drive, Google Sheets и по email.
  • Элементы и свойства инфоблоков, разделы, SEO, файлы, изображения, цены, валюты, товарные параметры и остатки отдельных складов.
  • Создание и обновление SKU прямо из строк товарного профиля, включая свойства, цены и складские остатки.
  • Составные ключи, стратегии найден/не найден, дубликаты, деактивация или удаление отсутствующих объектов там, где это поддерживает тип профиля.
  • Highload-профили с UF-полями, составными ключами, dry-run и удалением отсутствующих записей.
  • Создание свойств инфоблока, свойств SKU и UF-полей по явно размеченным заголовкам файла.
  • Безопасные цепочки преобразований колонок без eval и произвольного PHP-кода.
  • Внешние JPEG/PNG/GIF/WebP с SSRF-защитой, проверкой MIME, размера и геометрии.
  • XLSX/XLSM-шаблоны с сохранением стилей, формул и VBA-пакета XLSM.
  • Расписание: интервал, ежедневно или по дням недели.
  • Dry-run и журналируемый откат выполненного импорта.
  • Очередь, прогресс, статистика, журнал, групповые права D/R/W и защищённая выдача файлов.
Тип профиляОсновные сценарии
Элементы / товарыИнфоблоки, свойства, разделы, файлы, каталог, цены, склады и генерация SKU.
Разделы и SEOПоля разделов, родительская иерархия, UF и SEO-шаблоны IProperty.
Highload-блокUF-поля существующего HL-блока; импорт, экспорт, ключи и удаление отсутствующих записей.
Скидки / правила корзиныБезопасно ограниченный набор полей CSaleDiscount: группы, сроки, процент/фиксированная скидка, валюта, товары.
Наборы и комплектыШтатные CCatalogProductSet: SET/GROUP, владелец, состав, количества и сортировка.

3. Системные требования

КомпонентТребование
1С-БитриксАктуальное ядро «1С-Битрикс: Управление сайтом» с D7 ORM. Модуль iblock обязателен.
PHPPHP 8.1 или новее.
Базовые расширения PHPmbstring, zip, XMLReader и SimpleXML для XLSX/XLSM.
Дополнительные расширенияimap — для email-источника; ftp — для FTP/FTPS.
Модули Битриксcatalog — для цен, складов, SKU и наборов/комплектов; sale — для скидок; highloadblock — для HL-профилей.
База данныхMySQL или MariaDB.
Файловая системаПрава веб-процесса на запись в /upload/bussol.iblockexcel/ и системный временный каталог.
LibreOffice / sofficeНужен только для импорта старого бинарного BIFF .xls. XML Spreadsheet 2003 .xls читается без конвертации.
СетьИсходящий доступ к настроенным HTTP(S), FTP/FTPS, IMAP и Google API, если соответствующие функции используются.
GoogleOAuth Client ID, Client Secret и Refresh Token для Google Sheets/Drive.
Фоновые задачиАгент модуля должен выполняться примерно раз в минуту; на production рекомендуется штатный перевод агентов Битрикс на cron.

4. Установка обновление и удаление

Чистая установка

  1. Распакуйте каталог bussol.iblockexcel в /local/modules/ сайта либо установите решение штатным механизмом Marketplace.
  2. Откройте «Marketplace → Установленные решения», найдите BUSSOL DataBridge и нажмите «Установить».
  3. Установщик создаст таблицы модуля, административные прокси и тему, зарегистрирует меню и агент \Bussol\IblockExcel\Service\Agent::run(); с интервалом 60 секунд.
  4. Откройте настройки модуля и назначьте групповые права, а также глобально разрешите/запретите HTTP/FTP- и email-источники.
  5. Перейдите в «BUSSOL → BUSSOL DataBridge → Профили обмена» и создайте тестовый профиль.

Обновление с 1.2.4–1.5.x до 1.6.0

  • Сделайте резервную копию каталога модуля и базы данных.
  • При штатном обновлении Marketplace используйте механизм обновлений решения.
  • При ручном обновлении замените каталог /local/modules/bussol.iblockexcel новой версией, не удаляя решение и его таблицы.
  • Схема таблиц в 1.6.0 не меняется: новые параметры хранятся в SETTINGS_JSON, rollback-журналы — в файловой системе.
  • Убедитесь, что административные прокси и тема обновлены. При контролируемой переустановке обязательно выберите сохранение данных.
  • Очистите управляемый кеш Битрикс и кеш браузера, затем проверьте меню, права, один экспорт и dry-run одного импорта.

Удаление

Деинсталлятор удаляет агент, обработчик меню, административные прокси и тему модуля. В диалоге удаления можно сохранить таблицы профилей, заданий и журнала. Если данные не сохраняются, таблицы b_bussol_ibx_profile, b_bussol_ibx_job и b_bussol_ibx_log удаляются.

5. Права настройки и навигация

Права групп

ПравоВозможности
DДоступ к административным страницам модуля запрещён.
RПросмотр профилей, заданий, статистики, файлов и журнала.
WСоздание и изменение профилей, запуск/отмена заданий, ручной запуск источников, удаление заданий и запуск rollback.

Настройки модуля

ПараметрПо умолчаниюДиапазон / смысл
Хранить завершённые задания, дней301–3650 дней. Вместе с заданием очищаются файл, журнал и rollback-журнал.
Остановить импорт после числа ошибок10001–100000 ошибок.
Разрешить импорт из HTTP/FTP URIВключеноГлобальный предохранитель для REMOTE-источников.
Разрешить импорт вложений из email (IMAP)ВключеноГлобальный предохранитель для EMAIL-источников.

Путь к интерфейсу: BUSSOL → BUSSOL DataBridge. Внутри доступны «Профили обмена» и «Задания и журнал». Администратор сайта получает полный доступ независимо от группового права.

6. Создание и параметры профиля

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

ПараметрОписание
Название профиляПонятное назначение сценария, например «Прайс поставщика — ночь» или «B2B XLSM для дилеров».
Тип данныхЭлементы/товары, разделы и SEO, Highload-блок, скидки/правила корзины, наборы и комплекты.
Целевая сущностьДля элементов/разделов/наборов выбирается инфоблок; для HL — существующий Highload-блок; скидки работают по правилам корзины.
НаправлениеЭкспорт, импорт или оба направления.
ФорматXLSX, XLSM, XLS или CSV UTF-8. Импортируемый файл должен соответствовать формату профиля.
Источник импортаРучной файл, REMOTE URI, Email (IMAP) или Google Sheets.
СостояниеТолько активный профиль можно запускать вручную и по расписанию.

Рекомендуемый порядок настройки

  1. Создайте профиль, выберите тип сущности и целевой объект.
  2. Выберите направление и формат.
  3. Для автоматического импорта настройте источник и его учётные данные.
  4. Настройте выбранные столбцы, заголовки, порядок и преобразования.
  5. Настройте ключи и стратегии импорта; для товарного профиля при необходимости — отдельные правила SKU.
  6. Настройте листы, внешние изображения, создание схемы и rollback.
  7. Для экспорта при необходимости настройте шаблон и каналы доставки.
  8. Выполните ручную приёмку, после чего включите расписание.

7. Конструктор столбцов

ГруппаПримеры
Поля элементаID, XML_ID, CODE, NAME, ACTIVE, SORT, даты, тексты, картинки, теги.
СвойстваPROPERTY:CODE/ID, включая множественные значения и поддерживаемые типы.
Разделы элементаSECTION_IDS и SECTION_PATHS. Пути могут создавать отсутствующую иерархию при включённой опции.
Торговый каталогКоличество, вес, размеры, закупочная цена/валюта.
ЦеныPRICE:<ID> и валюта каждого типа цен.
СкладыSTORE:<ID> для каждого активного склада.
SKUSKU:поля, SKU:PROPERTY:*, SKU:CATALOG:*, SKU:PRICE:* и SKU:STORE:*; для инфоблока предложений — связь с родительским товаром.
Разделы и SEOПоля раздела, родитель, SEO:* и UF-поля разделов.
HighloadID и существующие UF_* выбранного Highload-блока.
СкидкиПоля скидки, группы пользователей, тип/размер скидки и PRODUCT_IDS.
Наборы/комплектыSET_ID, TYPE, OWNER_ID, ITEM_IDS, QUANTITIES, SORTS.

Для каждой колонки задаются пользовательский заголовок, порядок, разрешение экспорта/импорта, базовое преобразование и дополнительная цепочка правил. Заголовки выбранных колонок должны быть уникальны без учёта регистра. Порядок меняется drag-and-drop или кнопками вверх/вниз.

Базовые преобразования

ЭкспортИмпорт
RAW — без измененийRAW — без изменений
TEXT — только текст без HTMLTRIM — убрать пробелы
YES_NO — Да / НетUPPER — верхний регистр
DATE — дата ДД.ММ.ГГГГLOWER — нижний регистр
YES_NO — Да/Нет → Y/N

Цепочки правил

Дополнительные правила выполняются сверху вниз, по одному правилу на строку. Строки, начинающиеся с #, считаются комментариями. Поддерживаются следующие команды:

ПравилоПример / смысл
trim / ltrim / rtrim / upper / lowerТекстовая нормализация.
strip_tags / html_decode / spacesОчистка HTML и нормализация пробелов.
yes_no|Y|NПреобразование логического значения.
default|значениеПодставить значение, если ячейка пуста.
prefix|... / suffix|...Добавить префикс или суффикс.
replace|старое|новоеПростая замена.
map|A=Активен;N=АрхивСопоставление точных значений.
template|{BRAND} {MODEL} — {value}Шаблон с текущим значением и другими колонками строки.
coalesce|COL1|COL2Если текущая ячейка пуста, взять первое непустое значение из перечисленных ключей.
substr|0|100Подстрока.
round|2 / multiply|1.2 / divide|100 / number|2|.|Числовые операции и форматирование.
date|Y-m-dФорматирование даты через strtotime.
translit / slugТранслитерация или URL-подобный slug.
split_join|,|||YРазбить строку и собрать другим разделителем; Y — удалить дубли.

8. Экспорт и фильтрация

ФильтрНазначение
АктивностьДля поддерживающих активность сущностей: все, только активные или только неактивные.
ID разделаДля элементов: ограничение одним разделом; можно включить подразделы.
ID от / доОграничение диапазоном идентификаторов, если применимо к типу профиля.
Лимит строкДо 1 000 000 строк; 0 означает отсутствие лимита.

Запуск экспорта

  1. Откройте активный профиль с направлением EXPORT или BOTH.
  2. Настройте экспортируемые колонки, фильтр и формат.
  3. При необходимости настройте многолистовой режим, XLSX/XLSM-шаблон и каналы доставки.
  4. Нажмите «Сохранить и запустить экспорт» либо дождитесь расписания.
  5. После статуса «Готово» скачайте файл в карточке задания и проверьте записи доставки в журнале.

Многолистовой экспорт

РежимПоведение
Один листОбычная книга с одним целевым листом.
Разбивать по N строкНовый лист создаётся после заданного числа строк; предел настройки — 1 000 000 строк на лист.
Группировать по колонкеОтдельный лист для каждого значения выбранной экспортной колонки.

Шаблон XLSX / XLSM

Для XLSX/XLSM можно загрузить существующий шаблон, выбрать лист по номеру или имени, строку заголовков и первую строку данных. Модуль копирует книгу, заполняет выбранный лист, переносит стили и формулы строки-шаблона. Относительные ссылки формул сдвигаются, абсолютные ссылки с $ сохраняются. Формулы ниже расширяемого блока также сдвигаются. Для XLSM нужен именно .xlsm-шаблон, чтобы сохранить VBA-пакет.

Автоматическая доставка

КаналОсобенности
FTP / FTPSURI назначения + отдельные логин/пароль; поддерживаются ftp:// и ftps://.
HTTP / HTTPSPOST multipart или PUT body; Bearer token разрешён только для HTTPS.
Google DriveOAuth refresh token и загрузка в указанную папку.
Google SheetsСоздать новую таблицу или обновить существующий Spreadsheet с сохранением его ID.
EmailОдин или несколько получателей, тема и текст; доступны #PROFILE_NAME#, #PROFILE_ID#, #FILE_NAME#.

Для основного элементного экспорта перед записью строки вызывается событие OnBeforeExportRow; обработчик может изменить строку или вернуть false, чтобы её исключить.

9. Импорт и стратегии обработки

Входные столбцы сопоставляются по заголовкам профиля. Порядок колонок в файле не важен, лишние колонки игнорируются, а при включённом создании схемы явно размеченные неизвестные заголовки могут создать новое свойство/UF.

Ключ поиска

Ключ может состоять из одной или нескольких импортируемых keyable-колонок. Для элементов это ID/XML_ID/CODE/NAME и одиночные нефайловые свойства; для других типов доступность ключей определяется каталогом колонок. Все части составного ключа должны быть заполнены.

СитуацияВарианты
Объект найденОбновить, пропустить или ошибка.
Объект не найденСоздать, пропустить или ошибка.
Ключ повторяется в файлеОшибка, первая строка или последняя строка.
Объект отсутствует в файлеKEEP; для элементов/разделов — DEACTIVATE или DELETE; для HL — DELETE; для скидок и наборов массовое действие отсутствующих отключено.

Торговые предложения SKU

Если выбран инфоблок товаров с настроенным инфоблоком предложений, одна строка может одновременно создать/обновить товар и одно SKU. Для SKU выбирается собственный составной ключ и отдельные стратегии «найден / не найден». Поддерживаются поля, свойства, каталог, цены, валюты и остатки складов. Для нескольких предложений одного товара используйте отдельную строку на каждое предложение. Скрытая перепривязка существующего SKU к другому товару блокируется.

Разделы и списки

  • SECTION_PATHS может разрешать путь и при включённой опции создавать отсутствующую иерархию разделов.
  • В самостоятельном профиле разделов PARENT_PATH может создать отсутствующий родительский путь.
  • Для элементного профиля можно автоматически создавать новые значения существующих свойств типа «Список».

Создание свойств и UF из заголовков

Включите «Создавать свойства / UF из заголовков». Обычный неизвестный заголовок не меняет схему — новое поле создаётся только по явному префиксу.

PROPERTY:BRAND
PROPERTY:COLOR{type=L;name=Цвет;multiple=N;sort=500;values=Красный|Синий|Белый}
SKU:PROPERTY:SIZE{type=L;name=Размер;values=S|M|L|XL}
UF_VENDOR{type=string;name=Поставщик;multiple=N;required=N}
UF_STATUS{type=enumeration;name=Статус;values=Новый|Активный|Архив}

Для свойств инфоблока поддерживаются типы S, N, L, F, E, G. Для UF: string, integer, double, boolean, date, datetime, enumeration, file. Созданные свойства, UF и значения списков записываются в rollback-журнал, если он включён.

Безопасный запуск

  1. Создайте резервную копию базы данных.
  2. Включите «Тестовый импорт — без записи изменений».
  3. Запустите файл или источник и проверьте счётчики/журнал.
  4. Исправьте данные, преобразования, ключи и стратегии.
  5. Отключите dry-run; оставьте включённым rollback-журнал.
  6. Запустите реальный импорт и проверьте результат до включения расписания.

10. Форматы значения файлов и изображений

ФорматОсобенности
XLSXOOXML ZIP; многолистовой импорт/экспорт; чтение через потоковый механизм.
XLSMИмпортируется как OOXML. Экспорт требует .xlsm-шаблон и сохраняет VBA-пакет шаблона.
XLSXML Spreadsheet 2003 читается напрямую; старый бинарный BIFF при импорте конвертируется локальным LibreOffice/soffice. Экспорт создаётся как Excel 2003 XML SpreadsheetML с расширением .xls.
CSVUTF-8; разделитель: точка с запятой, запятая или табуляция.
Google SheetsИсточник выгружается Google Drive API в XLSX и проходит тот же многолистовой движок; назначение формируется как нативный Spreadsheet.

Листы и строки

Для XLSX/XLSM/XLS-импорта можно указать * (все листы), список 1,3,5 или диапазоны 1-3,5-7. Заголовок определяется заново на каждом выбранном листе. Также задаются явная строка заголовков и первая строка данных; значение 0 включает автоматический режим.

Источники импорта

ИсточникНастройки и поведение
UPLOADРучная загрузка файла в карточке профиля.
REMOTEHTTP/HTTPS/FTP/FTPS URI, отдельные логин/пароль, лимит файла до 2048 МБ (по умолчанию 200 МБ). Credentials в URI запрещены.
EMAILIMAP host/port, SSL или STARTTLS, папка, логин/пароль, фильтр отправителя/темы, только непрочитанные, лимит вложения до 2048 МБ (по умолчанию 100 МБ). Выбирается подходящее вложение с расширением формата профиля.
GOOGLE_SHEETSSpreadsheet ID + OAuth Client ID/Secret/Refresh Token; вся книга импортируется через XLSX.

Множественные значения

Множественные значения объединяются и разбираются по разделителю профиля, по умолчанию |. Выберите символ, который не встречается внутри отдельных значений. Для наборов/комплектов тот же разделитель используется для ITEM_IDS, QUANTITIES и SORTS.

Файлы и изображения

  • При импорте файловых значений принимается существующий ID файла Битрикс или локальный путь внутри /upload/.
  • HTTP(S)-URL изображения разрешён только при включённой опции «Разрешить внешние изображения».
  • Допустимы JPEG, PNG, GIF и WebP; SVG из внешнего источника не принимается.
  • По умолчанию максимальный размер внешнего изображения — 10 МБ, лимит пикселей — 40 000 000; значения настраиваются в профиле.
  • Можно задать allowlist хостов. Пустой список разрешает любой публичный HTTP(S)-хост, прошедший SSRF-проверки.
  • Пустая ячейка для файлового поля удаляет текущее файловое значение там, где сущность поддерживает такую операцию.

11. Задания прогресс и журнал

СтатусСмысл
В очередиЗадание создано и ожидает агента или ручного запуска.
ВыполняетсяИмпорт, экспорт или rollback обрабатывается.
ГотовоОперация завершена; для экспорта доступен файл результата.
ОшибкаВыполнение остановлено из-за исключения, ошибки источника/доставки или ограничения.
ОтмененоПользователь отменил ещё не начавшееся задание.

Карточка задания показывает обработанные, созданные, обновлённые, пропущенные записи и ошибки. Журнал выводит до 500 последних событий в обратном порядке с уровнем, номером строки, ID сущности и сообщением.

  • Задание в очереди можно выполнить немедленно или отменить.
  • Экспортный файл и исходный импортный файл скачиваются через административную страницу после проверки прав.
  • После экспорта в журнал попадают успешные каналы автоматической доставки.
  • Для импорта с включённым rollback создаётся серверный журнал обратных действий.

Откат импорта

Если в профиле включено «Записывать журнал отката импорта» и импорт выполнялся не в dry-run, для завершённого задания со статусом «Готово» или «Ошибка» может быть доступна команда «Откатить импорт». Откат ставится в очередь как отдельное задание типа ROLLBACK.

  • Откат покрывает поддерживаемые изменения элементов, свойств, привязок разделов, каталога, цен и складов.
  • Поддерживается откат созданных элементов/SKU, разделов/SEO, Highload-записей, созданных свойств/UF/значений списков, скидок и наборов/комплектов.
  • Два одновременных rollback-задания для одного импорта блокируются.
  • После полностью успешного rollback его журнал удаляется; повторно применить тот же откат нельзя.

12. Очередь агент и хранение

При установке регистрируется агент \Bussol\IblockExcel\Service\Agent::run(); с интервалом 60 секунд. За один проход агент восстанавливает зависшие задания, проверяет расписание, выполняет самое раннее задание очереди и очищает часть старых записей.

  • Задания RUNNING старше двух часов помечаются ошибкой «Выполнение прервано или превысило 2 часа».
  • Планировщик использует lock-файл и не ставит один и тот же профиль/операцию повторно, если уже есть QUEUED/RUNNING задание.
  • За один проход ScheduleService ставит не более 5 плановых заданий.
  • Агент выполняет одно самое раннее задание очереди за проход.
  • За один проход очищается до 20 старых DONE/ERROR/CANCELLED заданий вместе с файлом, журналом и rollback-журналом.

Режимы расписания

РежимНастройка
ИнтервалКаждые 5–10080 минут.
ЕжедневноОдин запуск после указанного времени в каждый календарный день.
По дням неделиВыбранные дни недели + время запуска.

Плановый импорт использует REMOTE, EMAIL или GOOGLE_SHEETS, выбранный в профиле. Плановый экспорт может после создания файла выполнить все включённые каналы доставки.

Файловое хранение

ПутьНазначение
/upload/bussol.iblockexcel/jobsФайлы заданий импорта/экспорта.
/upload/bussol.iblockexcel/templatesЗагруженные XLSX/XLSM-шаблоны профилей.
/upload/bussol.iblockexcel/rollbackRollback-журналы импорта.
/upload/bussol.iblockexcel/schedule.lockЛокальная блокировка прохода планировщика.

13. Безопасность

КонтрольРеализация
ПраваАдминистративные страницы проверяют R/W; администратор получает W.
CSRFИзменение профилей, запуск, отмена, удаление и rollback защищаются bitrix_sessid.
Пути файлов заданияНормализуются, обязаны находиться внутри /upload/bussol.iblockexcel/jobs и не могут содержать последовательность ..
ТранзакцииИзменение одной строки импорта выполняется транзакционно там, где это поддерживает обработчик.
REMOTE HTTP(S)Проверка схемы, DNS/IP, запрет private/reserved/loopback/link-local, повторная проверка редиректов, блокировка HTTPS→HTTP downgrade и ограничение размера.
REMOTE FTP/FTPSЛогин/пароль задаются отдельно; FTPS не должен незаметно переходить на незашифрованный FTP.
HTTP-доставкаBearer token разрешён только для HTTPS и не должен передаваться на другой host при redirect.
Email sourceHost проходит DNS/IP-проверку; private/reserved адреса блокируются.
Внешние изображенияSSRF-проверки + allowlist, MIME, геометрия, размер; только JPEG/PNG/GIF/WebP.
ПреобразованияБелый список встроенных команд; eval и произвольный PHP отсутствуют.
Создание схемыТолько по явным PROPERTY:/SKU:PROPERTY:/UF_ заголовкам; неизвестный обычный заголовок сам ничего не создаёт.
ОшибкиИмпорт останавливается после глобально настроенного числа ошибок.
  • Выдавайте W только доверенным администраторам и контент-менеджерам.
  • При необходимости глобально отключайте REMOTE и EMAIL источники в настройках модуля.
  • Для поставщиков с изображениями используйте allowlist доменов.
  • Не помещайте пароли в HTTP/FTP URI; используйте отдельные поля профиля.
  • Перед включением DELETE/DEACTIVATE, автосоздания схемы и расписания выполните dry-run и backup.

14. Расширение разработчиком

Модуль использует стандартный механизм событий Битрикс для module ID bussol.iblockexcel. В версии 1.6.0 публичные события сохранили сигнатуры предыдущих версий.

Перед экспортом строки элемента/товара

OnBeforeExportRow(array &$row, array $elementFields, array $profile): bool|null

Событие вызывается основным ExportService для профиля элементов/товаров. Обработчик может изменить row по ссылке. Возврат false исключает строку из файла.

Перед импортом строки

OnBeforeImportRow(array &$valuesByKey, int $rowNumber, array $profile): bool|null

Событие вызывается при импорте элементов/товаров, разделов и Highload-блоков. Обработчик может нормализовать значения по ссылке; false пропускает строку. Профили скидок и наборов/комплектов используют отдельные сервисы и это событие не вызывают.

15. Хранение данных и структура модуля

ТаблицаСодержимое
b_bussol_ibx_profileПрофиль: тип сущности, направление, формат, JSON столбцов, фильтра и SETTINGS_JSON.
b_bussol_ibx_jobТип (IMPORT/EXPORT/ROLLBACK), статус, файл, прогресс, счётчики, STATE_JSON и время выполнения.
b_bussol_ibx_logПострочный журнал; поле ROW_INDEX совместимо с MySQL 8.

В 1.6.0 схема таблиц не меняется по сравнению с предыдущими версиями: новые функции сохраняют параметры внутри существующего SETTINGS_JSON.

Каталог / файлНазначение
admin/Профили, задания, карточка задания, UI и административные ресурсы.
lib/Service/ImportService.php / ExportService.phpОсновной элементный обмен и генерация SKU.
lib/Service/Section*Разделы, иерархия и SEO.
lib/Service/Highload*Highload-профили.
lib/Service/Discount*Скидки / правила корзины.
lib/Service/ProductSet*Наборы и комплекты.
lib/Service/RemoteSourceService.php / EmailSourceService.php / GoogleApiService.phpУдалённые и облачные источники.
lib/Service/DeliveryService.phpFTP/HTTP/Google/email доставка результата экспорта.
lib/Service/ScheduleService.phpРасписание и защита от дублирующих плановых запусков.
lib/Service/RollbackService.phpФайловый журнал обратных действий и откат импорта.
lib/Service/SchemaProvisionService.phpСоздание свойств и UF по заголовкам файла.
lib/Service/ColumnTransformService.phpЦепочки безопасных преобразований.
lib/Spreadsheet/Чтение/запись CSV, XLS, XLSX/XLSM и шаблонный writer.
lib/Model/D7 ORM-модели таблиц.
install/Установщик, SQL, admin proxy, тема и иконки.

16. Ограничения и совместимость

  • DataBridge не создаёт сами инфоблоки и Highload-блоки; создание схемы ограничено свойствами инфоблока, свойствами SKU и UF-полями существующих сущностей.
  • Автосоздание свойств инфоблока поддерживает типы S/N/L/F/E/G; UF — string/integer/double/boolean/date/datetime/enumeration/file.
  • Профиль скидок поддерживает безопасно ограниченный набор правил; произвольные сложные деревья условий/действий Битрикс из строкового кода не генерируются.
  • Для набора/комплекта, если у владельца есть несколько наборов одного типа, для однозначного обновления нужен SET_ID.
  • Экспорт XLSM требует существующего .xlsm-шаблона; без него профиль с экспортом XLSM не сохраняется.
  • Шаблонизированный XLSX/XLSM заполняет один целевой лист; многолистовое разбиение применяется обычному экспорту.
  • Импорт бинарного BIFF .xls требует локального LibreOffice/soffice; SpreadsheetML 2003 .xls читается напрямую.
  • Google Sheets/Drive требуют OAuth Client ID, Client Secret, Refresh Token и исходящий доступ к Google API.
  • Email-источник требует PHP imap, FTP/FTPS — PHP ftp.
  • Внешние URL принимаются только для растровых изображений JPEG/PNG/GIF/WebP и только при включённой опции; SVG запрещён.
  • Формулы при обычном импорте не пересчитываются модулем как Excel-приложением; шаблонный экспорт переносит формулы и включает полный пересчёт книги при открытии.
  • Rollback восстанавливает только изменения, которые записал DataBridge; это не транзакция всей базы и не замена backup.
  • Стратегия «Последняя строка» и массовая обработка отсутствующих объектов требуют памяти пропорционально числу уникальных ключей.
  • Очень большие обмены необходимо тестировать с реальными лимитами PHP, базы, диска, почты и внешних API.

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

17. Диагностика

СимптомЧто проверить
Модуль не виден в менюМодуль зарегистрирован, обработчик OnBuildGlobalMenu активен, admin/theme-файлы обновлены, кеш Битрикс очищен.
Профиль не запускаетсяПрофиль активен, направление разрешает операцию, у пользователя право W, выбран хотя бы один столбец нужного направления.
Импорт файла отклонёнРасширение совпадает с FORMAT профиля, файл не пуст, структура XLSX/XLSM/XLS валидна.
REMOTE импорт отключёнПроверьте глобальную настройку «Разрешить импорт из HTTP/FTP URI», публичность DNS/IP, схему URI, лимит размера и credentials.
Email-источник не находит вложениеУстановлен php-imap; host/port/security, папка, логин/пароль, FROM/SUBJECT/UNSEEN фильтры; расширение вложения совпадает с форматом профиля.
Google Sheets не работаетПроверьте Client ID/Secret/Refresh Token, Spreadsheet ID, сетевой доступ к Google API и права OAuth.
Бинарный XLS не импортируетсяLibreOffice/soffice установлен и доступен веб-процессу; либо используйте XLSX/SpreadsheetML.
XLSM не экспортируетсяЗагружен .xlsm-шаблон и выбран режим экспорта «Один лист».
Свойство/UF не создаётсяВключено автосоздание схемы; заголовок явно начинается с PROPERTY:, SKU:PROPERTY: или UF_; тип поддерживается.
SKU не создаётсяУстановлен catalog, инфоблок товаров связан с инфоблоком предложений, SKU-колонки включены в импорт, выбран непустой SKU-ключ.
Внешнее изображение отклоненоОпция включена; host попадает в allowlist (если задан); адрес публичный; MIME JPEG/PNG/GIF/WebP; соблюдены лимиты размера и пикселей.
Доставка экспорта завершилась ошибкойПроверьте URI/URL, credentials, Bearer только с HTTPS, OAuth Google, email получателей и доступ внешней системы.
Rollback недоступенОн был включён до реального импорта, dry-run был выключен, журнал ещё не очищен и не был успешно применён ранее.
Задание остаётся в очередиРаботают агенты/cron; для проверки используйте «Выполнить сейчас».
Слишком много ошибокОткройте построчный журнал; проверьте ключи, заголовки, преобразования, обязательные поля и MAX_ERRORS.

18. Чек-лист приёмки

  • Есть актуальная резервная копия файлов и базы данных.
  • Проверены PHP 8.1+, mbstring/zip/XMLReader/SimpleXML и дополнительные imap/ftp/LibreOffice по используемым сценариям.
  • Проверены iblock и необходимые catalog/sale/highloadblock.
  • Веб-процесс может записывать /upload/bussol.iblockexcel и системный temp.
  • Модуль отображается в меню BUSSOL; права D/R/W проверены на тестовых группах.
  • Глобальные REMOTE/EMAIL-переключатели соответствуют политике проекта.
  • Создан тестовый профиль нужного типа; заголовки уникальны, выбранные колонки и порядок корректны.
  • Экспорт выбранных XLSX/XLSM/XLS/CSV открывается ожидаемым приложением; многолистовой режим проверен при использовании.
  • Если используется XLSX/XLSM-шаблон — проверены стили, формулы, целевой лист и сохранение макросов XLSM.
  • Dry-run формирует ожидаемые счётчики и журнал без изменения данных.
  • Реальный импорт проверен на создании, обновлении, пропуске и ошибке.
  • Составные ключи и стратегия дублей проверены отдельными тестовыми строками.
  • SKU проверены на создании/обновлении, ценах и остатках складов.
  • Разделы/SEO и HL-профили проверены, если используются.
  • Создание PROPERTY:/SKU:PROPERTY:/UF_ проверено на тестовой схеме.
  • Удаление/деактивация отсутствующих объектов проверены только в ограниченной тестовой области.
  • Внешние изображения проверены на допустимом и запрещённом host/MIME/размере.
  • REMOTE/IMAP/Google Sheets источники проверены вручную до включения расписания.
  • FTP/HTTP/Google/email доставка экспорта проверена для каждого включённого назначения.
  • Планировщик проверен в выбранном режиме; нет дублирующих QUEUED/RUNNING заданий.
  • Rollback проверен на тестовом реальном импорте; команда создаёт отдельное задание и восстанавливает ожидаемые изменения.
  • Агент обрабатывает очередь, помечает зависшие задания и очищает старые данные в соответствии с retention.
  • Сценарии аварийного восстановления, backup и ответственность за внешние интеграции задокументированы для проекта.