Сопоставить записи по составному ключу
Робот «Сопоставить записи по составному ключу» находит добавленные, удалённые и изменённые записи, отдельно показывая неоднозначные ключи.

Видимая часть формы настройки в Битрикс24. Скриншот показывает поля действия; он не подтверждает выполнение учебного примера.
Для кого и какую задачу решает
Администратору CRM и специалисту по обмену данными, который сравнивает два снимка одного набора: перечень позиций до и после согласования либо выгрузки из двух источников.
Обычное сравнение строк JSON замечает порядок полей, но не объясняет смысл изменений. Здесь записи сопоставляются по выбранному ключу. Повторяющийся ключ выделяется как конфликт, чтобы несколько похожих позиций не превратились в ложное добавление или удаление.
Параметры и подготовка
| Поле | Как заполнить |
|---|---|
Исходные записи JSON (BEFORE) |
Обязательное поле |
Новые записи JSON (AFTER) |
Обязательное поле |
Поля ключа JSON (KEYS) |
Обязательное поле |
Сравниваемые поля JSON; []: все (FIELDS) |
Необязательное поле. по умолчанию [] |
Перед настройкой выберите, откуда процесс получит каждое значение: постоянная настройка, поле карточки или результат предыдущего шага. Подписи в таблице соответствуют полям робота. Коды в скобках помогают различать похожие параметры при передаче данных между шагами.
Как использовать
- Передайте старые и новые записи отдельными массивами объектов. Выберите устойчивые поля верхнего уровня, которые вместе однозначно определяют запись.
- Перечислите имена ключа JSON-массивом, например
["sku","store"]. Каждый компонент должен присутствовать в каждой записи и не быть null, объектом или массивом. - Оставьте
FIELDS=[], чтобы сравнить все поля, либо перечислите только значимые для согласования. Это позволяет не учитывать второстепенные изменения. - Проверьте статус и признак конфликтов. Отправляйте изменения в дальнейшую обработку только после отдельного решения по неоднозначным ключам.
Как заполнить JSON-поля
Исходные записи JSON (BEFORE)
[
{
"sku": "A",
"qty": 2
}
]
Исходный снимок: массив объектов до 1000 записей, включая допустимый пустой [].
Это массив: внешние квадратные скобки обязательны. Пустой массив [] отличается от объекта {}; возможность пустого списка определяется правилами этого поля, описанными ниже.
Новые записи JSON (AFTER)
[
{
"sku": "A",
"qty": 3
},
{
"sku": "B",
"qty": 1
}
]
Новый снимок того же набора, массив объектов; [] означает отсутствие записей.
Это массив: внешние квадратные скобки обязательны. Пустой массив [] отличается от объекта {}; возможность пустого списка определяется правилами этого поля, описанными ниже.
Поля ключа JSON (KEYS)
[
"sku"
]
Непустой список до 50 уникальных имён верхнего уровня. В каждой записи ключ обязателен, скалярен и не null. Для составного ключа перечислите несколько имён.
Это массив: внешние квадратные скобки обязательны. Пустой массив [] отличается от объекта {}; возможность пустого списка определяется правилами этого поля, описанными ниже.
Сравниваемые поля JSON; []: все (FIELDS)
[
"qty"
]
Список сравниваемых полей. [] означает все поля обеих записей, а не отсутствие сравнения.
Это массив: внешние квадратные скобки обязательны. Пустой массив [] отличается от объекта {}; возможность пустого списка определяется правилами этого поля, описанными ниже.
Учебный пример и ожидаемый результат
BEFORE: [{"sku":"A","qty":2}], AFTER: [{"sku":"A","qty":3},{"sku":"B","qty":1}], KEYS: ["sku"], FIELDS: ["qty"]. Ожидаются добавленная запись B и изменённая запись A с полем qty. Удалённых записей нет. Если в любом наборе дважды встретится A, записи с таким ключом попадут в конфликты, а не в изменения.
Пример показывает подготовленные учебные данные. Фактический результат зависит от переданных значений и доступных данных вашего процесса.
Что возвращает и как продолжить процесс
- «Добавленные записи JSON» (
addedJson). - «Удалённые записи JSON» (
removedJson). - «Изменённые записи JSON» (
changedJson). - «Конфликты ключей JSON» (
duplicatesJson). - «Есть неоднозначные ключи» (
hasConflicts). - «Совпавших записей» (
unchangedCount).
Изменённые записи содержат ключ, список отличающихся полей и данные до/после. «Совпавших записей» учитывает однозначные записи без различий в выбранных полях. Индексы конфликтующих записей отсчитываются от нуля.
Выход «Статус выполнения» проверяйте перед передачей результата дальше. При отрицательном статусе прочитайте «Пояснение ошибки» и направьте процесс на исправление исходных данных. Успешный статус подтверждает выполнение действия; содержательные признаки результата проверяйте отдельно.
Ограничения и разбор ошибок
Два JSON-массива объектов до 1000 записей; ключ: до 50 имен верхнего уровня. Компоненты ключа обязательны, скалярны и не null. Строка, число и boolean различаются; 1 и 1.0 равны. Сравниваемые поля по умолчанию все; отсутствие поля отличается от null. Все записи с повторяющимся ключом на любой стороне исключаются из изменений и перечисляются как конфликты. Индексы дубликатов: от нуля; пустые массивы допустимы. JSON и каждый результат до 1 МБ.
Отсутствующее поле и поле со значением null различаются. Числовой ключ и строковый ключ не объединяются автоматически. Робот сравнивает снимки, но не синхронизирует записи на портале и не решает, какой источник считать главным.