diff --git a/cspell.json b/cspell.json index 5757e960b..6315db4de 100644 --- a/cspell.json +++ b/cspell.json @@ -8,6 +8,17 @@ "words": [ "mxlogger", "mxloggerlogs", + "commercebridge", + "commerceml", + "Mishiko", + "checkauth", + "Imagick", + "pagetitle", + "longtitle", + "introtext", + "menutitle", + "hidemenu", + "редиректов", "modxapp", "createdon", "emailsender", diff --git a/docs/authors.json b/docs/authors.json index 8ee1da3af..3b6bf3b7a 100644 --- a/docs/authors.json +++ b/docs/authors.json @@ -153,6 +153,7 @@ "ru": "Антон Мамрашев" } }, + "Mishiko23": "Mishiko23", "modx-pro": "MODX RSC", "mvoevodskiy": { "modstore": "https://modstore.pro/authors/mvoevodskiy", diff --git a/docs/components/commercebridge1c/exchange-setup.md b/docs/components/commercebridge1c/exchange-setup.md new file mode 100644 index 000000000..3c799cb51 --- /dev/null +++ b/docs/components/commercebridge1c/exchange-setup.md @@ -0,0 +1,77 @@ +# Настройка обмена с 1С + +Названия разделов в интерфейсе 1С зависят от конфигурации. Используйте штатный узел обмена с сайтом по протоколу CommerceML 2. + +## Параметры подключения + +Укажите в 1С: + +| Параметр | Значение | +| --- | --- | +| Адрес сайта | `https://example.ru/assets/components/CommerceBridge1C/connector.php` | +| Пользователь | Логин из настроек CommerceBridge 1C | +| Пароль | Пароль из настроек CommerceBridge 1C | +| Протокол | CommerceML 2 | + +Сначала выполните штатную команду проверки соединения. После успешной авторизации настройте состав выгрузки. + +## Первый обмен + +Рекомендуемый порядок: + +1. включите режим отладки в CommerceBridge 1C; +2. ограничьте выгрузку одной категорией и несколькими товарами; +3. выполните полную выгрузку каталога и предложений; +4. проверьте категории, шаблоны, артикулы, цены, остатки и изображения; +5. настройте сопоставление нестандартных свойств; +6. повторите тестовый обмен; +7. отключите подробную отладку; +8. снимите временное ограничение номенклатуры. + +## Каталог и торговые предложения + +Обычно 1С отправляет данные несколькими файлами: + +- `import.xml` — группы, товары, описания и свойства; +- `offers.xml` — цены, остатки и характеристики предложений; +- ZIP — XML и изображения в одном архиве. + +После первоначального `import.xml` можно отправлять только `offers.xml`. Это обновит цены и остатки без повторного импорта полного каталога. + +## Изображения + +Компонент принимает расширения `jpg`, `jpeg`, `png`, `gif` и `webp`. PDF, XLS, DOC и другие присоединённые документы игнорируются. + +Изображения добавляются в галерею miniShop3. После импорта запускается стандартное создание миниатюр, а поля изображения и превью товара обновляются сразу. + +## Склады + +Если список складов не задан, остатки всех складов суммируются. Для отбора укажите GUID нужных складов через запятую в `commerceml_warehouse_ids`. + +Пример: + +```text +7f2a...,b91c... +``` + +## Отбор номенклатуры + +Ограничить импорт можно на обеих сторонах: + +- средствами узла обмена 1С; +- GUID категорий в `commerceml_category_ids`; +- GUID товаров в `commerceml_product_ids`. + +Пустой список означает, что ограничение компонента не применяется. + +## Автономная работа + +После настройки создайте регламентное задание на стороне 1С. Endpoint CommerceBridge 1C не требует открытой панели MODX или вкладки браузера. + +Для безопасности используйте HTTPS и, если возможно, разрешите доступ к endpoint только с IP сервера 1С. + +## Ручной импорт + +На вкладке ручного импорта можно загрузить отдельный XML или ZIP. Этот режим подходит для тестирования и диагностики. + +Для больших файлов предпочтителен автоматический HTTP-обмен из 1С: при ручной загрузке вкладка браузера должна оставаться открытой до завершения запроса. diff --git a/docs/components/commercebridge1c/field-mapping.md b/docs/components/commercebridge1c/field-mapping.md new file mode 100644 index 000000000..bc8fa6179 --- /dev/null +++ b/docs/components/commercebridge1c/field-mapping.md @@ -0,0 +1,100 @@ +# Свойства и типы цен + +CommerceBridge 1C умеет направлять свойства номенклатуры и характеристики предложений в выбранные поля товара. + +Правила настраиваются в панели компонента. Сопоставление выполняется по GUID свойства или по его наименованию без учёта регистра. + +## Поля правила + +| Поле | Назначение | +| --- | --- | +| Свойство 1С | GUID или точное наименование свойства | +| Название | Пояснение правила в панели | +| Назначение | Поле ресурса, поле miniShop3, TV или опция | +| Поле | Ключ или ID поля назначения | +| Преобразование | Строка, число, логическое значение или список | +| Коэффициент | Множитель для числового значения | +| Режим обновления | Всегда, только если поле пусто, либо никогда | +| Значение по умолчанию | Используется, когда 1С передала пустое значение | +| Активно | Включает или отключает правило | + +## Поля ресурса MODX + +Допустимые назначения: + +```text +pagetitle, longtitle, description, introtext, content, menutitle, +alias, published, hidemenu, searchable +``` + +Пример: свойство 1С `Заголовок H1` можно направить в `longtitle`. + +## Поля товара miniShop3 + +Допустимые назначения: + +```text +article, price, old_price, stock, weight, made_in, +new, popular, favorite, tags, color, size +``` + +Поля `tags`, `color` и `size` обрабатываются как списки. Остальные поля получают одно значение. + +## TV-параметры + +В качестве назначения укажите имя или числовой ID существующего TV. TV должен быть доступен шаблону товара. + +Для значения типа «Список» элементы записываются в TV через разделитель `||`. + +## Опции miniShop3 + +Укажите ключ опции латиницей. Если опции ещё нет, компонент создаст её автоматически: + +- `textfield` для одного значения; +- `combo-multiple` для списка. + +Недопустимые символы в ключе заменяются символом подчёркивания, а сам ключ приводится к нижнему регистру. + +## Преобразование значений + +### Строка + +Несколько значений объединяются через запятую и пробел. + +### Число + +Пробелы удаляются, десятичная запятая заменяется точкой, затем применяется коэффициент. + +Например, для перевода миллиметров в метры установите коэффициент `0.001`. + +### Логическое значение + +Значения `1`, `true`, `yes`, `да`, `истина` и `on` записываются как `1`; остальные — как `0`. + +### Список + +Все непустые значения свойства сохраняются как список. Формат хранения зависит от назначения. + +## Режим обновления + +| Режим | Поведение | +| --- | --- | +| Всегда | Перезаписывать поле при каждом обмене | +| Если пусто | Не изменять уже заполненное поле сайта | +| Никогда | Считать правило, но не записывать значение | + +::: warning +Для числовых полей значение `0` считается пустым в режиме «Если пусто». +::: + +## Несколько типов цен + +Поле `price` получает тип цены, заданный в `commerceml_primary_price_id`. Если GUID не указан, используется первая цена предложения. + +При включённой настройке `commerceml_create_price_tvs` остальные типы цен записываются в TV: + +- имя TV формируется из названия типа цены; +- TV автоматически привязывается к шаблону товара; +- ранее созданные GUID-имена TV заменяются короткими читаемыми именами. + +Выбор TV по группе покупателей выполняется на стороне шаблонов или логики сайта. Сам компонент не меняет цену корзины miniShop3 в зависимости от группы пользователя. diff --git a/docs/components/commercebridge1c/index.md b/docs/components/commercebridge1c/index.md new file mode 100644 index 000000000..937d55cde --- /dev/null +++ b/docs/components/commercebridge1c/index.md @@ -0,0 +1,90 @@ +--- +title: CommerceBridge 1C +description: Обмен каталогом, ценами, остатками и заказами между 1С и miniShop3 по CommerceML 2 +logo: /components/commercebridge1c/cover.png +author: Mishiko23 +repository: https://github.com/Mishiko23/CommerceBridge-1C +dependencies: miniShop3 +outline: deep + +items: + - text: Установка + link: installation + - text: Настройка обмена с 1С + link: exchange-setup + - text: Системные настройки + link: settings + - text: Свойства и типы цен + link: field-mapping + - text: Заказы и статусы + link: orders + - text: Диагностика + link: troubleshooting +--- + +# CommerceBridge 1C + +CommerceBridge 1C организует двусторонний обмен между **1С** и интернет-магазином на **MODX 3 + miniShop3** по протоколу **CommerceML 2**. + +Компонент принимает каталог и торговые предложения по HTTP, обновляет товары по GUID и выгружает заказы miniShop3 обратно в 1С. Для обмена не требуется FTP. + +## Возможности + +- импорт категорий с сохранением вложенности; +- импорт товаров, наименований, кратких и полных описаний; +- импорт артикула, кода 1С, производителя и SEO description; +- импорт свойств, веса, длины, ширины и высоты; +- загрузка изображений и создание миниатюр средствами miniShop3; +- фильтрация вложений по расширению: документы не загружаются как изображения; +- обновление цен и остатков через `offers.xml` без повторного импорта каталога; +- суммирование остатков всех складов или отбор выбранных складов; +- импорт нескольких типов цен в автоматически создаваемые TV; +- сопоставление свойств 1С с полями MODX, miniShop3, TV и опциями; +- отбор категорий и товаров по GUID; +- управление публикацией и видимостью товаров по остатку; +- скрытие пустых категорий; +- выгрузка заказов и данных покупателя в 1С; +- сопоставление статусов 1С и miniShop3; +- ручная загрузка XML/ZIP из панели компонента; +- история сеансов, краткий отчёт, журнал и режим отладки. + +## Схема обмена + +Компонент поддерживает стандартные команды CommerceML: + +1. `checkauth` — проверка логина и пароля; +2. `init` — согласование параметров сеанса; +3. `file` — загрузка XML, ZIP и изображений; +4. `import` — обработка загруженного файла; +5. `query` — передача заказов из miniShop3 в 1С; +6. `success` — завершение сеанса. + +Категории и товары связываются с объектами MODX по GUID 1С. Повторная выгрузка обновляет существующие объекты и не должна создавать дубликаты. + +## Требования + +- MODX Revolution 3.2 или новее; +- miniShop3; +- PHP 8.2 или новее; +- расширения PHP: XMLReader, SimpleXML, XMLWriter, ZIP и Fileinfo; +- OpenSSL для установки защищённого пакета; +- GD или Imagick для обработки изображений; +- HTTPS для endpoint обмена. + +## Ограничения версии 1.6.0 + +::: warning +Перед первым полным обменом создайте резервную копию файлов и базы данных. Первую проверку выполняйте на небольшой группе товаров. +::: + +- характеристики предложений сохраняются как свойства базового товара, отдельные дочерние SKU miniShop3 не создаются; +- TV с дополнительными ценами хранят значения, но выбор цены по группе покупателя настраивается отдельно в шаблонах сайта; +- валюта выгружаемых заказов — `RUB`; +- панель показывает результат завершённых HTTP-запросов, а не непрерывный прогресс внутри одного запроса; +- для большого ручного импорта вкладка браузера должна оставаться открытой, автоматический обмен из 1С работает автономно. + +## Безопасность + +Для 1С создаётся отдельная учётная запись обмена. Пароль сохраняется только в виде результата `password_hash()` и не отображается в панели после сохранения. + +Рекомендуется ограничить endpoint по IP сервера 1С на уровне nginx или Apache. Каталог `core/cache/commerceml/` не должен быть доступен из веба. diff --git a/docs/components/commercebridge1c/installation.md b/docs/components/commercebridge1c/installation.md new file mode 100644 index 000000000..4810ca76e --- /dev/null +++ b/docs/components/commercebridge1c/installation.md @@ -0,0 +1,84 @@ +# Установка + +## Подготовка + +Перед установкой проверьте: + +- miniShop3 установлен и открывается без ошибок; +- PHP соответствует [требованиям компонента](index#требования); +- создан родительский ресурс для каталога; +- созданы шаблоны категории и товара; +- настроен Media Source для изображений miniShop3; +- создана резервная копия сайта. + +## Установка transport-пакета + +1. Откройте в MODX раздел **Пакеты → Установщик**. +2. Загрузите или получите пакет `commercebridge1c-1.6.0-pl.transport.zip` из подключённого провайдера. +3. Запустите установку. +4. Для защищённой версии выберите провайдера `modstore.pro` и лицензированный домен. +5. Очистите системный кеш MODX. +6. Откройте **Компоненты → CommerceBridge 1C**. + +После установки создаются: + +- namespace `commercebridge1c`; +- системные настройки с префиксом `commerceml_`; +- пункт меню CommerceBridge 1C; +- таблицы сеансов, связей GUID и сопоставлений полей. + +## Первоначальная настройка + +На вкладке настроек укажите: + +| Поле | Что выбрать | +| --- | --- | +| Логин обмена | Отдельный логин для 1С, например `exchange` | +| Пароль | Новый сложный пароль, отличный от пароля менеджера MODX | +| Родитель каталога | Ресурс, внутри которого будут создаваться категории | +| Шаблон категории | Шаблон для новых категорий каталога | +| Шаблон товара | Шаблон для новых товаров miniShop3 | +| Контекст | Обычно `web` | +| Media Source | Источник файлов для изображений товаров | + +Сохраните настройки. Панель покажет URL обмена: + +```text +https://example.ru/assets/components/CommerceBridge1C/connector.php +``` + +::: info +Текущий пароль обмена повторно не отображается. Пустое поле пароля при последующем сохранении не заменяет установленный пароль. +::: + +## Проверка endpoint + +Если открыть URL обмена без параметров, компонент не выполняет импорт. Работу endpoint следует проверять штатной проверкой соединения из 1С. + +При запросе без правильной авторизации сервер должен вернуть HTTP `401` и заголовок Basic Auth. Если 1С не передаёт заголовок `Authorization`, проверьте конфигурацию FastCGI, nginx или Apache. + +## Обновление + +1. Создайте резервную копию сайта. +2. Установите новый transport поверх текущей версии. +3. Очистите кеш MODX. +4. Откройте компонент и проверьте настройки. +5. Выполните тестовый обмен небольшой группой товаров. + +GUID-связи, настройки и история обменов при обычном обновлении сохраняются. + +## Установка через CLI + +Для автоматизированного развёртывания доступен установщик: + +```bash +php core/components/CommerceBridge1C/setup/install.php exchange 'сложный-пароль' 12 +``` + +Аргументы команды: + +1. логин обмена; +2. пароль обмена; +3. ID родительского ресурса каталога. + +После выполнения откройте панель компонента и задайте шаблоны и Media Source. diff --git a/docs/components/commercebridge1c/orders.md b/docs/components/commercebridge1c/orders.md new file mode 100644 index 000000000..d71391ac9 --- /dev/null +++ b/docs/components/commercebridge1c/orders.md @@ -0,0 +1,63 @@ +# Заказы и статусы + +1С запрашивает заказы через стандартный вызов CommerceML: + +```text +type=sale&mode=query +``` + +CommerceBridge 1C формирует XML с заказами miniShop3 и данными покупателя. + +## Какие заказы выгружаются + +Настройка `commerceml_order_statuses` ограничивает выборку по ID статусов miniShop3. + +В панели компонента статусы загружаются из miniShop3 и отображаются флажками. При необходимости ID можно указать вручную через запятую. + +Если список пуст, ограничение по статусу не добавляется. Количество документов в одном ответе ограничено настройкой `commerceml_order_limit`, по умолчанию — `100`. + +## Данные покупателя + +В XML заказа передаются доступные данные покупателя и реквизиты заказа. Конкретное заполнение зависит от данных, сохранённых miniShop3 при оформлении. + +Перед запуском обмена проверьте тестовый заказ с заполненными ФИО, телефоном, электронной почтой и адресом. + +## Соответствие статусов + +Формат настройки: + +```text +Новый=2 +Оплачен=3 +Отменён=5 +``` + +Пары можно разделять новой строкой или запятой. Слева указывается название статуса из XML 1С, справа — числовой ID статуса miniShop3. + +Сопоставление не зависит от регистра и внешних пробелов. + +## Автоматическое изменение статусов + +Если `commerceml_auto_order_status` выключена, компонент принимает документ, но не меняет статус заказа автоматически. + +После включения настройки входящий статус: + +1. ищется в таблице соответствий; +2. преобразуется в ID miniShop3; +3. применяется через штатный сервис переходов статусов miniShop3. + +Благодаря штатному сервису сохраняются проверки перехода и связанные действия miniShop3. + +::: warning +Перед включением автоматического режима проверьте каждый переход на тестовом заказе. Не указывайте ID несуществующего или недоступного статуса. +::: + +## Ошибки статусов + +Сообщение `Не настроено соответствие статуса 1С` означает, что 1С прислала название, которого нет в таблице сопоставлений. + +Проверьте точный текст статуса в журнале и добавьте новое правило. После изменения повторите обмен документами. + +## Валюта + +В версии 1.6.0 заказы выгружаются в валюте `RUB`. Для магазина с другой валютой требуется адаптация формирования CommerceML заказа. diff --git a/docs/components/commercebridge1c/settings.md b/docs/components/commercebridge1c/settings.md new file mode 100644 index 000000000..a11f6ca42 --- /dev/null +++ b/docs/components/commercebridge1c/settings.md @@ -0,0 +1,78 @@ +# Системные настройки + +Основные параметры доступны в панели **Компоненты → CommerceBridge 1C**. Те же значения можно найти в системных настройках MODX по префиксу `commerceml_`. + +После ручного изменения системных настроек очистите кеш MODX. + +## Подключение и размещение каталога + +| Ключ | По умолчанию | Назначение | +| --- | --- | --- | +| `commerceml_username` | `exchange` | Логин HTTP Basic Auth для 1С | +| `commerceml_password_hash` | Пусто | Хеш пароля обмена; не записывайте сюда открытый пароль вручную | +| `commerceml_catalog_parent` | `0` | ID родительского ресурса каталога | +| `commerceml_product_template` | `0` | ID шаблона новых товаров | +| `commerceml_category_template` | `0` | ID шаблона новых категорий | +| `commerceml_context` | `web` | Контекст создаваемых ресурсов | +| `commerceml_source_id` | `1` | ID Media Source изображений miniShop3 | +| `commerceml_published_default` | Да | Публиковать новые объекты по умолчанию | + +Пароль следует изменять только через панель CommerceBridge 1C. Компонент проверяет формат логина и сохраняет результат `password_hash()`. + +## Файлы и ограничения обмена + +| Ключ | По умолчанию | Назначение | +| --- | --- | --- | +| `commerceml_max_file_size` | `268435456` | Максимальный размер входящего файла в байтах | +| `commerceml_file_limit` | `10485760` | Размер части файла, объявляемый 1С, в байтах | +| `commerceml_cleanup_days` | `7` | Срок хранения временных данных обмена | + +Фактический размер загрузки дополнительно ограничивается настройками PHP и веб-сервера: `upload_max_filesize`, `post_max_size`, `client_max_body_size` или их аналогами. + +## Отбор данных + +| Ключ | По умолчанию | Назначение | +| --- | --- | --- | +| `commerceml_warehouse_ids` | Пусто | GUID складов через запятую; пусто — суммировать все склады | +| `commerceml_category_ids` | Пусто | GUID разрешённых категорий; пусто — все категории | +| `commerceml_product_ids` | Пусто | GUID разрешённых товаров; пусто — все товары | + +GUID указываются через запятую. Пробелы удаляются при сохранении, повторяющиеся значения исключаются. + +## Цены + +| Ключ | По умолчанию | Назначение | +| --- | --- | --- | +| `commerceml_primary_price_id` | Пусто | GUID типа цены для поля `price`; пусто — первая цена предложения | +| `commerceml_create_price_tvs` | Да | Создавать TV для дополнительных типов цен | + +TV дополнительных цен создаются с короткими именами на основе названия типа цены и привязываются к шаблону импортированного товара. + +## Публикация и остатки + +| Ключ | По умолчанию | Назначение | +| --- | --- | --- | +| `commerceml_publish_by_stock` | Нет | Снимать товар с публикации при нулевом остатке | +| `commerceml_hidemenu_by_stock` | Нет | Устанавливать `hidemenu` товару без остатка | +| `commerceml_hide_empty_categories` | Нет | Снимать с публикации категории без товаров | + +Настройки публикации применяются во время обработки торговых предложений. Перед включением проверьте поведение на тестовой категории. + +## Заказы + +| Ключ | По умолчанию | Назначение | +| --- | --- | --- | +| `commerceml_order_statuses` | Пусто | ID статусов miniShop3 для выгрузки; пусто — без ограничения | +| `commerceml_order_status_map` | Пусто | Соответствие названий статусов 1С и ID miniShop3 | +| `commerceml_auto_order_status` | Нет | Автоматически применять входящие статусы 1С | +| `commerceml_order_limit` | `100` | Максимальное количество заказов в одном ответе | + +Подробнее см. раздел [Заказы и статусы](orders). + +## Журнал + +| Ключ | По умолчанию | Назначение | +| --- | --- | --- | +| `commerceml_debug` | Нет | Записывать подробности запросов и обработанных сущностей | + +Обычный режим записывает начало и итог обмена, предупреждения и ошибки. Режим отладки заметно увеличивает объём файла `core/cache/logs/commerceml.log`, поэтому после диагностики его следует отключить. diff --git a/docs/components/commercebridge1c/troubleshooting.md b/docs/components/commercebridge1c/troubleshooting.md new file mode 100644 index 000000000..0a1f02d40 --- /dev/null +++ b/docs/components/commercebridge1c/troubleshooting.md @@ -0,0 +1,140 @@ +# Диагностика + +## Где смотреть результат + +Панель CommerceBridge 1C содержит: + +- историю сеансов обмена; +- количество файлов и обработанных объектов; +- количество ошибок; +- краткое итоговое сообщение; +- просмотр и очистку файла журнала. + +Основной журнал компонента: + +```text +core/cache/logs/commerceml.log +``` + +Критические ошибки также могут попадать в журнал MODX: + +```text +core/cache/logs/error.log +``` + +## Режим отладки + +Включите `commerceml_debug`, повторите минимальный проблемный обмен и сохраните относящийся к нему фрагмент журнала. После диагностики отключите режим: он записывает запросы и каждую обработанную сущность. + +Не передавайте в поддержку пароли, ключи API, cookie и персональные данные покупателей. + +## Не проходит авторизация + +Проверьте: + +1. URL заканчивается на `/assets/components/CommerceBridge1C/connector.php`; +2. логин совпадает с `commerceml_username`; +3. пароль был задан через панель компонента; +4. запрос доходит до PHP с заголовком `Authorization`; +5. прокси или CDN не удаляет Basic Auth; +6. endpoint доступен по HTTPS без циклических редиректов. + +Если пароль неизвестен, задайте новый в панели CommerceBridge 1C и обновите узел обмена в 1С. + +## Предложение ссылается на неизвестный товар + +Сообщение означает, что товар с указанным GUID ещё не связан с ресурсом MODX. + +Основные причины: + +- 1С отправила `offers.xml` раньше `import.xml`; +- идентификаторы товара в каталоге и предложениях отличаются; +- товар исключён настройкой `commerceml_product_ids`; +- категория исключена настройкой `commerceml_category_ids`; +- предыдущий импорт каталога завершился ошибкой. + +Сначала выполните полный импорт каталога, затем повторите импорт предложений. + +## Артикул пустой + +Компонент использует следующий порядок: + +1. артикул из CommerceML; +2. код товара 1С; +3. штрихкод. + +Если все три значения отсутствуют, поле `article` останется пустым. + +## Не обновились цена или остаток + +Проверьте: + +- предложение связано с товаром по GUID; +- нужный склад включён в `commerceml_warehouse_ids`; +- GUID основной цены соответствует `commerceml_primary_price_id`; +- `offers.xml` содержит цену и количество; +- в журнале нет ошибок сохранения товара. + +Если основной тип цены не указан, компонент выбирает первую цену предложения. + +## Не появились дополнительные цены + +Убедитесь, что включена `commerceml_create_price_tvs`, а в CommerceML передано несколько типов цен. + +TV создаётся во время синхронизации и привязывается к шаблону импортируемого товара. Очистите кеш MODX и повторно откройте товар после первого импорта. + +## Нет изображения или миниатюры + +Проверьте: + +- расширение файла входит в список разрешённых изображений; +- Media Source существует и доступен на запись; +- GD или Imagick установлены; +- конфигурация миниатюр miniShop3 корректна; +- PHP и веб-сервер разрешают размер загружаемого файла. + +PDF, XLS, DOC и другие документы намеренно не импортируются как изображения. + +## Ошибка загрузки большого ZIP + +Согласуйте ограничения на всех уровнях: + +- `commerceml_max_file_size`; +- `commerceml_file_limit`; +- `upload_max_filesize` и `post_max_size` в PHP; +- `client_max_body_size` в nginx; +- лимиты прокси или CDN. + +Автоматическая загрузка поддерживает передачу файла частями. Не очищайте `core/cache/commerceml/` во время активного обмена. + +## Категория или товар скрылись + +Проверьте настройки: + +- `commerceml_publish_by_stock`; +- `commerceml_hidemenu_by_stock`; +- `commerceml_hide_empty_categories`. + +Отключите спорную настройку, повторите `offers.xml` и проверьте результат на тестовом товаре. + +## Не меняется статус заказа + +Проверьте, что: + +- включена `commerceml_auto_order_status`; +- название статуса 1С присутствует в сопоставлении; +- справа указан существующий ID статуса miniShop3; +- переход между текущим и новым статусом разрешён miniShop3. + +Подробности см. в разделе [Заказы и статусы](orders). + +## Данные для обращения в поддержку + +Подготовьте: + +- версии MODX, miniShop3, PHP и CommerceBridge 1C; +- название и версию конфигурации 1С; +- дату и время проблемного сеанса; +- краткий итог обмена; +- небольшой обезличенный XML, на котором воспроизводится ошибка; +- фрагмент `commerceml.log` за этот сеанс. diff --git a/docs/public/components/commercebridge1c/cover.png b/docs/public/components/commercebridge1c/cover.png new file mode 100644 index 000000000..4aa604663 Binary files /dev/null and b/docs/public/components/commercebridge1c/cover.png differ