Когда обмен между двумя системами начинает врать, первым делом проверяют код. Почти всегда зря: подавляющая часть проблем рождается на уровень выше — там, где не договорились, какая система главная по каждому справочнику и по какому полю записи считаются одинаковыми. Пока этой договорённости нет, любая правка кода лечит симптом, а через месяц дубли приходят снова.

Цена вопроса измерима. В компании на 20 сотрудников с двумя системами несогласованные справочники съедают 37 939 ₽ в месяц: минуты менеджеров на поиск «это тот же контрагент или другой», время кладовщика на сопоставление номенклатуры, часы бухгалтера при закрытии и часы руководителя на сведение отчётов, которые не сходятся. За год — 455 268 ₽, и ни одна из этих строк не выглядит как расход.

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

Хозяин справочника: таблица на одну страницу

Хозяин — это система, чьё значение считается верным, когда значения разошлись. Не «более удобная», не «более новая», а назначенная. Вторая система при этом справочник видит, использует и не имеет права менять; попытка изменить откатывается обратно на следующем прогоне обмена.

Весь регламент помещается в одну таблицу. Заполнить её — это шесть часов обсуждения, в которых участвуют не программисты, а те, кто заводит записи. Именно здесь выясняется, что менеджеры заводят контрагентов в CRM, потому что «в учёте долго», а бухгалтер потом заводит их же заново, потому что реквизиты в CRM неполные.

СправочникГлавная системаКто имеет право заводить записьПоле сопоставленияЧто при конфликте
Контрагенты — юридические лицаУчётная системаБухгалтер по заявке менеджераИНН и КПППобеждает учёт; правка в CRM откатывается и уходит в карантин
Клиенты — физические лицаCRMМенеджерТелефон в едином формате, вторым ключом — почтаПобеждает CRM; учёт принимает как есть
НоменклатураУчётная системаТовароведАртикул производителя, при отсутствии — штрихкодПобеждает учёт; новые позиции в CRM создаются только через заявку
Цены и скидкиУчётная системаРуководитель отдела продажАртикул и тип ценыПобеждает учёт; ручная правка цены в CRM запрещена правами
Склады и подразделенияУчётная системаАдминистраторВнутренний кодПобеждает учёт; меняется несколько раз в год
Статусы заказаCRMНикто, справочник закрытВнутренний кодИзменяется только вместе с правкой обмена

Последняя строка нужна почти всегда и почти всегда забывается. Справочник статусов — единственный, который не должен пополняться пользователями: каждый новый статус, заведённый менеджером «для удобства», ломает маршрутизацию в обмене, потому что обмен про него не знает. Такие справочники закрывают правами и меняют только вместе с кодом.

схема процессаsinhronizaciya-spravochnikov-mezhdu-sistemami--01
Схема обмена справочниками: главная система, односторонний поток и карантин спорных записей

Схема потоков данных. Слева блок «Учётная система — хозяин справочника контрагентов». Справа блок «CRM». Между ними толстая стрелка слева направо с подписью «ИНН, КПП, наименование, реквизиты — раз в 15 минут». Обратной толстой стрелки нет; вместо неё тонкая стрелка справа налево, помеченная «только заявка на заведение», ведущая в блок «Карантин: очередь на проверку». От «Карантина» стрелка вниз к фигуре человека с подписью «бухгалтер: 1,5 часа в неделю», и от него стрелка обратно в учётную систему с подписью «запись заведена по правилам». Отдельная перечёркнутая стрелка из CRM прямо в учёт помечена «прямая правка запрещена правами». Внизу подпись: «ключ сопоставления — ИНН и КПП, а не наименование». Чертёжный стиль, подписи по-русски.

Справочник едет в одну сторону, а спорные записи — не в другую систему, а человеку

Поле сопоставления: почему название не годится

Сопоставление по наименованию — причина большинства дублей в обменах. «ООО Ромашка», «ООО «Ромашка»» и «Ромашка ООО» — это три разные строки для любой программы и одна организация для человека. Добавьте сюда лишний пробел, латинскую «а» вместо кириллической и сокращение «ООО» до «О О О» в чужой выгрузке — и совпадений не будет вовсе.

СправочникКлюч первого выбораЗапасной ключЧего избегать
Юридические лицаИНН и КПП вместеИНН один, если контрагент — индивидуальный предпринимательНаименования в любом виде; ИНН, сохранённый как число — теряются ведущие нули
Физические лицаТелефон, приведённый к единому форматуЭлектронная почта в нижнем регистреФИО: однофамильцы, инициалы вместо имени, смена фамилии
НоменклатураАртикул производителяШтрихкод, если он есть у всех позицийНаименование товара; внутренний код одной из систем — у второй он свой
ДокументыСквозной идентификатор, присвоенный в первой системе на путиНомер и дата вместеНомер документа отдельно: у двух систем своя нумерация, и они пересекаются

Отдельная ловушка — внутренний код. Он выглядит идеальным ключом: короткий, уникальный, уже есть. Но он уникален внутри одной системы, а во второй у той же записи свой. Поэтому внутренний код не ключ сопоставления, а результат: после первой сверки создаётся таблица соответствий «код в системе А — код в системе Б», и дальше обмен ходит по ней. Ключ нужен ровно один раз — чтобы эту таблицу построить.

И обязательный шаг перед любым сравнением — нормализация. Телефон приводится к единому виду, почта — к нижнему регистру, ИНН хранится как текст, лишние пробелы и невидимые символы вычищаются. Поиск дублей по ненормализованным данным находит меньше половины настоящих совпадений; подробный порядок нормализации и пороги нечёткого сравнения мы разбирали в материале про дубли клиентов в CRM.

сравнениеsinhronizaciya-spravochnikov-mezhdu-sistemami--02
Сопоставление по названию даёт три записи вместо одной, сопоставление по ИНН — одну

Сравнение в две колонки. Левая «Ключ — наименование»: три карточки под одной скобкой — «ООО Ромашка», «ООО «Ромашка»», «Ромашка ООО»; под ними подпись «три записи, три истории продаж, три акта сверки» и итог «9 % дублей в базе на 4 200 контрагентов — 380 записей». Правая «Ключ — ИНН и КПП»: одна карточка «ИНН 7810991747 / КПП 781001001», под ней подпись «одна запись, три написания как варианты наименования» и итог «0 дублей по ключу». Между колонками вертикальная линия с подписью «нормализация до сравнения: пробелы, регистр, ИНН как текст». Чертёжный стиль, подписи по-русски.

Одна организация, три написания и один ИНН — весь смысл выбора ключа в этой строке

Правило конфликта: четыре варианта

Конфликт — это когда одна и та же запись изменена в обеих системах между двумя прогонами обмена. Он случается реже, чем кажется, и обходится дороже, чем кажется: без правила обмен выбирает победителя случайно — по тому, чей прогон был последним, — и правка тихо исчезает.

  1. 1
    Побеждает главная система

    Базовое правило, которое закрывает около девяти случаев из десяти. Значение из системы-хозяина затирает значение во второй, а затёртая правка не выбрасывается, а уходит в карантин с пометкой, кто и когда её сделал. Карантин здесь не бюрократия: без него сотрудник будет вносить одну и ту же правку неделю подряд, не понимая, почему она пропадает.

  2. 2
    Побеждает последнее изменение по времени

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

  3. 3
    Поле за полем

    Хозяин назначается не на запись целиком, а на отдельные поля: реквизиты ведёт учёт, адрес доставки и контактное лицо — CRM. Сложнее в настройке и честнее по сути, потому что так и устроена работа. Применяется к двум-трём самым спорным справочникам, а не ко всем.

  4. 4
    Никто не побеждает: запись уходит человеку

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

Двусторонняя синхронизация «в обе стороны без ограничений» не существует

Формулировка «данные синхронизируются в обе стороны» в коммерческом предложении означает, что правило конфликта не описано. Спросите прямо: что произойдёт, если менеджер поменяет реквизиты в CRM, а бухгалтер — в учёте, в один и тот же день. Если ответ не содержит слова «побеждает» или «карантин», этого механизма в проекте нет, и вы обнаружите его отсутствие на первом же расхождении. Формулировки для договора мы собирали в материале про требования к интеграции.

Порядок чистки перед запуском: пять шагов

Чистка делается до включения обмена, а не после. Обмен, запущенный на грязных справочниках, не наводит порядок — он размножает беспорядок в обе стороны, и объём работы удваивается.

  1. 1Заморозить ручное заведение в неглавной системе. Пока менеджеры продолжают заводить контрагентов в CRM, вы догоняете движущуюся цель. Заморозка делается правами: кнопка «создать» остаётся только у тех, кто указан в таблице владения, остальные подают заявку.
  2. 2Нормализовать поле сопоставления в обеих системах. Телефоны к единому формату, ИНН к тексту, пробелы и невидимые символы вон. Этот шаг занимает часы и определяет результат следующего: по ненормализованным данным находится меньше половины дублей.
  3. 3Найти и склеить дубли по точному ключу. Совпадение по ИНН и КПП или по нормализованному телефону — основание для автоматической склейки. В базе на 4 200 контрагентов таких обычно набирается около 9 %, то есть 380 записей, и большая их часть закрывается без участия человека.
  4. 4Разобрать нечёткие совпадения руками. Похожие, но не совпадающие по ключу записи выводятся списком парами и разбираются глазами. Это самая долгая часть чистки и единственная, которую нельзя ускорить: решение «это одна организация или две» иногда требует звонка.
  5. 5Построить таблицу соответствий и зафиксировать её. Внутренний код системы А против внутреннего кода системы Б по каждой записи. С этого момента обмен ходит по таблице, а ключ сопоставления нужен только для новых записей.

Порядок жёсткий, и нарушать его дорого. Самая частая ошибка — начать с кода обмена, потому что это единственный шаг, который выглядит как работа. Дальше сценарий известен: обмен запускается, дубли идут в обе стороны, через месяц заказывают чистку, а после чистки обмен приходится переписывать под новую логику сопоставления. Семь типовых поломок такого рода и их признаки мы собрали в материале про ошибки обмена с 1С.

Сколько это стоит и кто отвечает после запуска

Модельная компания: 20 сотрудников, две системы — CRM и учёт, справочники контрагентов и номенклатуры. Пять менеджеров, кладовщик, бухгалтер, руководитель. Ставки — полная стоимость часа с налогами и рабочим местом.

Что стоят несогласованные справочники в месяц
5 менеджеров × 15 минут в день × 21 рабочий день = 26,25 часа × 900 ₽/час23 625 ₽
Кладовщик: сопоставление номенклатуры при приёмке, 20 минут в день = 7 часов × 550 ₽/час3 850 ₽
Бухгалтер: разбор задвоенных контрагентов при закрытии месяца, 6 часов × 844 ₽/час5 064 ₽
Руководитель: сведение расходящихся отчётов, 3 часа × 1 800 ₽/час5 400 ₽
Итого37 939 ₽ в месяц, 455 268 ₽ в год — и ни одна из этих строк не попадает ни в один отчёт

Теперь наведение порядка по описанному методу и то, что остаётся после. Ставка инженера — 3 000 ₽/час.

Наведение порядка и остаточные расходы
Хозяин справочника и поле сопоставления: 6 часов обсуждения и таблица владения18 000 ₽
Нормализация, поиск и склейка дублей, разбор нечётких совпадений: 24 часа72 000 ₽
Правило конфликта и карантин в обмене: 12 часов36 000 ₽
Заморозка ручного заведения: права, заявки, справочник-источник — 8 часов24 000 ₽
Остаточные потери после наведения, около 25 % от исходных9 485 ₽ в месяц
Владелец справочников: 1,5 часа в неделю = 6,5 часа в месяц × 900 ₽/час5 850 ₽ в месяц
Итого150 000 ₽ разово; месячные потери падают с 37 939 до 15 335 ₽ — экономия 22 604 ₽, возврат за 6,6 месяца

Обратите внимание на строку «остаточные потери». Они не уходят в ноль и не должны: новые товары, нетиповые контрагенты, разовые исключения будут всегда. Подрядчик, обещающий полное исчезновение ручной работы со справочниками, обещает то, чего не бывает. Реалистичный ориентир — снижение примерно вчетверо, и он достигается за счёт того, что работа переезжает от пяти человек к одному, который делает её осознанно.

графикsinhronizaciya-spravochnikov-mezhdu-sistemami--03
Месячные потери от несогласованных справочников: 37 939 рублей до и 15 335 после

Две группы столбцов, ось Y — рубли в месяц. Левая группа «До», общая высота 37 939 ₽, разбита на четыре сегмента с подписями: «менеджеры 23 625 ₽», «кладовщик 3 850 ₽», «бухгалтер 5 064 ₽», «руководитель 5 400 ₽». Правая группа «После», общая высота 15 335 ₽, два сегмента: «остаточные потери 9 485 ₽» и «владелец справочников 5 850 ₽». Между группами стрелка с подписью «−22 604 ₽ в месяц». Под диаграммой горизонтальная шкала окупаемости от 0 до 12 месяцев с отметкой на 6,6 и подписью «вложение 150 000 ₽ возвращается». Чертёжный стиль, подписи по-русски.

Работа не исчезает — она переезжает от пяти человек к одному владельцу справочников

Роль владельца справочников — не должность, а полтора часа в неделю у человека, который и так работает с этими данными: у бухгалтера по контрагентам, у товароведа по номенклатуре. В эти полтора часа входит разбор карантина, проверка заявок на заведение новых записей и раз в месяц — просмотр отчёта по появившимся дублям. Порог, после которого совмещение перестаёт работать, — около 200 новых записей в месяц; выше него роль оформляется отдельно, иначе карантин перестают разбирать и через квартал всё возвращается.

Когда синхронизировать справочники не надо

Полная синхронизация — не всегда правильный ответ. Четыре случая, в которых она избыточна или прямо вредна.

  • Справочник нужен только одной системе. Классификатор для внутренней аналитики, справочник причин отказа, свои категории для отчёта — их не надо ни синхронизировать, ни согласовывать. Синхронизируют то, что участвует в обмене документами, а не всё подряд.
  • Записей меньше двухсот и они почти не меняются. Список из полутора сотен постоянных контрагентов, который пополняется раз в месяц, синхронизируется руками за десять минут. Обмен справочником здесь стоит 36 000 ₽ и экономит меньше, чем стоит его поддержка.
  • Одна из систем скоро уезжает. Согласование справочников — это договорённости между людьми, а не только код. Делать их под систему, которую меняют через квартал, значит проводить одну и ту же работу дважды: сначала под старую пару систем, потом под новую.
  • Некому быть владельцем. Если после запуска карантин никто не разбирает и заявки на заведение никто не рассматривает, синхронизация превращается в препятствие: сотрудники находят обходной путь, заводят записи там, где ещё можно, и через два месяца вы получаете те же дубли, только с потраченными 150 000 ₽. Роль владельца назначается до старта работ, а не после.

Обмен не наводит порядок в справочниках. Он с одинаковой скоростью копирует и порядок, и беспорядок.