# Обмен с 1С (CommerceML) Модуль `commerceml` принимает стандартный HTTP-обмен 1С и потоково разбирает XML через `XMLReader`. Для работы нужны модули **Товары** и **Планировщик**. Это модуль торгового контура: он не публикуется в общем каталоге модулей для чистой системы. ## Безопасный запуск 1. Создайте профиль и выберите товарную рубрику. 2. Сопоставьте внешний ID, артикул, цену и остаток с реальными полями рубрики. 3. Оставьте **Создавать неизвестные товары** выключенным. 4. Загрузите тестовый XML и проверьте журнал. 5. После сверки разрешите создание; публикацию новых товаров включайте отдельно. Адрес обмена: `/exchange/1c/<код-профиля>`. Для каждого профиля задаются свои логин и пароль. Пароль хранится в защищённом хранилище секретов и не выводится в панели. Имена загружаемых файлов нормализуются, разрешён только XML, разбор выполняется с `LIBXML_NONET`. После `checkauth` сервер создаёт отдельную временную сессию обмена. `init`, загрузка частей файла и `import` принимаются только с выданной cookie `ave_commerceml`. Поэтому два последовательных или одновременных обмена не дописывают XML друг друга. Размер одной части ограничен 20 МБ, общий объём сессии — 200 МБ. Данные читаются и записываются небольшими блоками, а после попытки импорта временная сессия удаляется. Незавершённые сессии старше трёх дней удаляет задание планировщика `commerceml.cleanup`. Сначала товар ищется по сохранённой связи внешнего ID, затем по полю артикула. Неизвестная позиция либо пропускается, либо создаётся в выбранной рубрике. Все запуски сохраняют количество обработанных, созданных, обновлённых и ошибочных позиций. Фильтр `commerceml.document.payload` позволяет изменить `payload` перед сохранением документа. События `commerceml.item.failed` и `commerceml.import.completed` подходят для уведомлений и интеграционного лога.