Как разобраться в обменах 1С: состав, карта и сравнение планов
Разбор обменов по выгрузке 1С: explain_exchange_plan в режимах plan, diff и map, осмотр файлов через exchange_drops и границы выводов без живой базы.
В задаче «разобраться, почему не пришли данные» легко смешать три разных вопроса: что настроено в конфигурации, что изменилось между версиями и что происходило при выполнении обмена. Начните с состава плана, сравните его с предыдущей выгрузкой и найдите обработчики обмена. Номера сообщений и состояние узлов придётся проверять отдельно в базе.
Профессиональная редакция MCP-1C предоставляет explain_exchange_plan с v2.27.0, а с v2.30.0 — режимы сравнения и карты, а также инструмент exchange_drops для осмотра каталогов. Они позволяют собрать исходные факты до обращения к живой базе. Источники: справочник обменов и история релизов.
В статье: состав, сравнение, карта, файлы, проверка в базе.
Сначала прочитайте состав плана
explain_exchange_plan работает по выгрузке. Режим plan показывает имя, синоним, признак РИБ, включение расширений, ссылки на шаблоны и состав объектов с токеном авторегистрации AutoRecord.
{
"base": "test",
"mode": "plan",
"plan": "ОбменФилиалы",
"format": "json"
}
Имена в примере условные. Не трактуйте AutoRecord: Deny как доказательство, что объект не передаётся: в РИБ он может переноситься составом конфигурации. Отсутствующий Content.xml тоже не означает пустой состав — отбор может определяться форматом обмена. Непрочитанный состав должен остаться неизвестным в выводах по задаче.
Сравните версии перед изменением
Режим diff сравнивает один план в двух выгрузках либо два плана в одной. В первом случае нужны dump_path, dump_path_b и plan; во втором — plan и plan_b. Пример для двух выгрузок внутри разрешённого дерева:
{
"mode": "diff",
"dump_path": "/opt/1c/dump/current",
"dump_path_b": "/opt/1c/dump/new",
"plan": "ОбменФилиалы",
"format": "json"
}
Ответ показывает изменившиеся свойства, добавленные и удалённые объекты, изменения AutoRecord и число совпавших позиций. Признак clean требует не только пустой разницы, но и полноты сравнения без примечаний. Если сторона не найдена или состав не удалось сравнить, пустые списки разницы не подтверждают равенство.
С v2.30.0 абсолютные пути ограничены зарегистрированными выгрузками. Относительные доступны при настройке --exchange-compare-root; правила обоих маршрутов подробно описаны в справочнике.
Постройте карту мест, связанных с обменом
Режим map собирает планы, регламентные задания с расписаниями, подписки на события и признаки обмена в коде. Он помогает найти места для чтения, когда доработка затронула несколько подсистем. Для поиска признаков в BSL нужна подключённая база с готовым индексом: если передан только каталог или индекс недоступен, этот раздел помечается непроверенным, хотя планы и расписания разбираются.
| Источник карты | Что уточнить дальше |
|---|---|
| План обмена | Состав и настройки нужного плана |
| Регламентное задание | Где и при каких условиях запускается обработчик |
| Подписка | Какие события связаны с обработчиком |
| Признак в BSL | Реально ли выполняется найденная ветка |
Совпадение конструкции в модуле не доказывает, что этот код выполнялся. Карта не показывает номера сообщений, очередь ошибок, состояние узлов и конфликты РИБ. Это ориентир для расследования по исходникам.
Осмотрите каталог файлов без чтения содержимого
exchange_drops показывает имена, размеры, даты изменения и возраст файлов. Администратор заранее задаёт корень через --exchange-drop-root или MCP_1C_EXCHANGE_DROP_ROOT; без этой настройки инструмент отсутствует в списке.
Чтобы посмотреть разрешённый подкаталог и посчитать файлы старше часа, передайте в exchange_drops:
{
"subdir": "incoming",
"stale_after_minutes": 60,
"format": "json"
}
Содержимое сообщений не читается. Возраст файла сам по себе не означает остановленный обмен: перед вами может быть архив. Копирование с обновлением даты также меняет этот показатель.
При ограниченном обходе сводные показатели относятся только к показанным записям; в JSON это отмечает aggregates_partial. Поля и пределы перечислены в описании exchange_drops.
Подтвердите гипотезу в тестовой базе
Теперь гипотеза должна быть конкретной: например, нужный объект исчез из состава плана или ожидаемый обработчик не найден в доступных исходниках. Проверьте именно её по штатной диагностике обмена и на тестовых данных.
Для изменения состава проверьте передачу нужного объекта между тестовыми узлами, обработку повторного сообщения и восстановление после предусмотренного сбоя. Статическая карта и даты файлов поддерживают расследование, но не заменяют проверку доставки данных.
Рядом полезны карта подсистем и анализ технологического журнала.