Когда обмен между двумя системами начинает врать, первым делом проверяют код. Почти всегда зря: подавляющая часть проблем рождается на уровень выше — там, где не договорились, какая система главная по каждому справочнику и по какому полю записи считаются одинаковыми. Пока этой договорённости нет, любая правка кода лечит симптом, а через месяц дубли приходят снова.
Цена вопроса измерима. В компании на 20 сотрудников с двумя системами несогласованные справочники съедают 37 939 ₽ в месяц: минуты менеджеров на поиск «это тот же контрагент или другой», время кладовщика на сопоставление номенклатуры, часы бухгалтера при закрытии и часы руководителя на сведение отчётов, которые не сходятся. За год — 455 268 ₽, и ни одна из этих строк не выглядит как расход.
Метод состоит из четырёх шагов, и все четыре делаются до написания интеграции: назначить хозяина по каждому справочнику, выбрать поле сопоставления, описать правило разрешения конфликтов и вычистить то, что уже накопилось. Ниже — каждый шаг с деталями, расчёт стоимости и ответ на вопрос, кто отвечает за справочники после запуска.
Хозяин справочника: таблица на одну страницу
Хозяин — это система, чьё значение считается верным, когда значения разошлись. Не «более удобная», не «более новая», а назначенная. Вторая система при этом справочник видит, использует и не имеет права менять; попытка изменить откатывается обратно на следующем прогоне обмена.
Весь регламент помещается в одну таблицу. Заполнить её — это шесть часов обсуждения, в которых участвуют не программисты, а те, кто заводит записи. Именно здесь выясняется, что менеджеры заводят контрагентов в CRM, потому что «в учёте долго», а бухгалтер потом заводит их же заново, потому что реквизиты в CRM неполные.
| Справочник | Главная система | Кто имеет право заводить запись | Поле сопоставления | Что при конфликте |
|---|---|---|---|---|
| Контрагенты — юридические лица | Учётная система | Бухгалтер по заявке менеджера | ИНН и КПП | Побеждает учёт; правка в CRM откатывается и уходит в карантин |
| Клиенты — физические лица | CRM | Менеджер | Телефон в едином формате, вторым ключом — почта | Побеждает CRM; учёт принимает как есть |
| Номенклатура | Учётная система | Товаровед | Артикул производителя, при отсутствии — штрихкод | Побеждает учёт; новые позиции в CRM создаются только через заявку |
| Цены и скидки | Учётная система | Руководитель отдела продаж | Артикул и тип цены | Побеждает учёт; ручная правка цены в CRM запрещена правами |
| Склады и подразделения | Учётная система | Администратор | Внутренний код | Побеждает учёт; меняется несколько раз в год |
| Статусы заказа | CRM | Никто, справочник закрыт | Внутренний код | Изменяется только вместе с правкой обмена |
Последняя строка нужна почти всегда и почти всегда забывается. Справочник статусов — единственный, который не должен пополняться пользователями: каждый новый статус, заведённый менеджером «для удобства», ломает маршрутизацию в обмене, потому что обмен про него не знает. Такие справочники закрывают правами и меняют только вместе с кодом.
Схема потоков данных. Слева блок «Учётная система — хозяин справочника контрагентов». Справа блок «CRM». Между ними толстая стрелка слева направо с подписью «ИНН, КПП, наименование, реквизиты — раз в 15 минут». Обратной толстой стрелки нет; вместо неё тонкая стрелка справа налево, помеченная «только заявка на заведение», ведущая в блок «Карантин: очередь на проверку». От «Карантина» стрелка вниз к фигуре человека с подписью «бухгалтер: 1,5 часа в неделю», и от него стрелка обратно в учётную систему с подписью «запись заведена по правилам». Отдельная перечёркнутая стрелка из CRM прямо в учёт помечена «прямая правка запрещена правами». Внизу подпись: «ключ сопоставления — ИНН и КПП, а не наименование». Чертёжный стиль, подписи по-русски.
Поле сопоставления: почему название не годится
Сопоставление по наименованию — причина большинства дублей в обменах. «ООО Ромашка», «ООО «Ромашка»» и «Ромашка ООО» — это три разные строки для любой программы и одна организация для человека. Добавьте сюда лишний пробел, латинскую «а» вместо кириллической и сокращение «ООО» до «О О О» в чужой выгрузке — и совпадений не будет вовсе.
| Справочник | Ключ первого выбора | Запасной ключ | Чего избегать |
|---|---|---|---|
| Юридические лица | ИНН и КПП вместе | ИНН один, если контрагент — индивидуальный предприниматель | Наименования в любом виде; ИНН, сохранённый как число — теряются ведущие нули |
| Физические лица | Телефон, приведённый к единому формату | Электронная почта в нижнем регистре | ФИО: однофамильцы, инициалы вместо имени, смена фамилии |
| Номенклатура | Артикул производителя | Штрихкод, если он есть у всех позиций | Наименование товара; внутренний код одной из систем — у второй он свой |
| Документы | Сквозной идентификатор, присвоенный в первой системе на пути | Номер и дата вместе | Номер документа отдельно: у двух систем своя нумерация, и они пересекаются |
Отдельная ловушка — внутренний код. Он выглядит идеальным ключом: короткий, уникальный, уже есть. Но он уникален внутри одной системы, а во второй у той же записи свой. Поэтому внутренний код не ключ сопоставления, а результат: после первой сверки создаётся таблица соответствий «код в системе А — код в системе Б», и дальше обмен ходит по ней. Ключ нужен ровно один раз — чтобы эту таблицу построить.
И обязательный шаг перед любым сравнением — нормализация. Телефон приводится к единому виду, почта — к нижнему регистру, ИНН хранится как текст, лишние пробелы и невидимые символы вычищаются. Поиск дублей по ненормализованным данным находит меньше половины настоящих совпадений; подробный порядок нормализации и пороги нечёткого сравнения мы разбирали в материале про дубли клиентов в CRM.
Сравнение в две колонки. Левая «Ключ — наименование»: три карточки под одной скобкой — «ООО Ромашка», «ООО «Ромашка»», «Ромашка ООО»; под ними подпись «три записи, три истории продаж, три акта сверки» и итог «9 % дублей в базе на 4 200 контрагентов — 380 записей». Правая «Ключ — ИНН и КПП»: одна карточка «ИНН 7810991747 / КПП 781001001», под ней подпись «одна запись, три написания как варианты наименования» и итог «0 дублей по ключу». Между колонками вертикальная линия с подписью «нормализация до сравнения: пробелы, регистр, ИНН как текст». Чертёжный стиль, подписи по-русски.
Правило конфликта: четыре варианта
Конфликт — это когда одна и та же запись изменена в обеих системах между двумя прогонами обмена. Он случается реже, чем кажется, и обходится дороже, чем кажется: без правила обмен выбирает победителя случайно — по тому, чей прогон был последним, — и правка тихо исчезает.
- 1Побеждает главная система
Базовое правило, которое закрывает около девяти случаев из десяти. Значение из системы-хозяина затирает значение во второй, а затёртая правка не выбрасывается, а уходит в карантин с пометкой, кто и когда её сделал. Карантин здесь не бюрократия: без него сотрудник будет вносить одну и ту же правку неделю подряд, не понимая, почему она пропадает.
- 2Побеждает последнее изменение по времени
Выглядит справедливо и работает плохо. Часы двух систем расходятся, отметки времени хранятся в разных зонах, а прогон обмена добавляет собственную задержку. Правило допустимо только для справочников, где обе стороны равноправны, и только после того, как все отметки времени приведены к единой зоне.
- 3Поле за полем
Хозяин назначается не на запись целиком, а на отдельные поля: реквизиты ведёт учёт, адрес доставки и контактное лицо — CRM. Сложнее в настройке и честнее по сути, потому что так и устроена работа. Применяется к двум-трём самым спорным справочникам, а не ко всем.
- 4Никто не побеждает: запись уходит человеку
Для критичных полей — цены, банковских реквизитов, кода маркировки — обмен не выбирает сам, а останавливает синхронизацию по этой записи и кладёт её в карантин. Это дороже в эксплуатации и единственно правильно там, где автоматическая ошибка стоит больше, чем задержка на день.
Формулировка «данные синхронизируются в обе стороны» в коммерческом предложении означает, что правило конфликта не описано. Спросите прямо: что произойдёт, если менеджер поменяет реквизиты в CRM, а бухгалтер — в учёте, в один и тот же день. Если ответ не содержит слова «побеждает» или «карантин», этого механизма в проекте нет, и вы обнаружите его отсутствие на первом же расхождении. Формулировки для договора мы собирали в материале про требования к интеграции.
Порядок чистки перед запуском: пять шагов
Чистка делается до включения обмена, а не после. Обмен, запущенный на грязных справочниках, не наводит порядок — он размножает беспорядок в обе стороны, и объём работы удваивается.
- 1Заморозить ручное заведение в неглавной системе. Пока менеджеры продолжают заводить контрагентов в CRM, вы догоняете движущуюся цель. Заморозка делается правами: кнопка «создать» остаётся только у тех, кто указан в таблице владения, остальные подают заявку.
- 2Нормализовать поле сопоставления в обеих системах. Телефоны к единому формату, ИНН к тексту, пробелы и невидимые символы вон. Этот шаг занимает часы и определяет результат следующего: по ненормализованным данным находится меньше половины дублей.
- 3Найти и склеить дубли по точному ключу. Совпадение по ИНН и КПП или по нормализованному телефону — основание для автоматической склейки. В базе на 4 200 контрагентов таких обычно набирается около 9 %, то есть 380 записей, и большая их часть закрывается без участия человека.
- 4Разобрать нечёткие совпадения руками. Похожие, но не совпадающие по ключу записи выводятся списком парами и разбираются глазами. Это самая долгая часть чистки и единственная, которую нельзя ускорить: решение «это одна организация или две» иногда требует звонка.
- 5Построить таблицу соответствий и зафиксировать её. Внутренний код системы А против внутреннего кода системы Б по каждой записи. С этого момента обмен ходит по таблице, а ключ сопоставления нужен только для новых записей.
Порядок жёсткий, и нарушать его дорого. Самая частая ошибка — начать с кода обмена, потому что это единственный шаг, который выглядит как работа. Дальше сценарий известен: обмен запускается, дубли идут в обе стороны, через месяц заказывают чистку, а после чистки обмен приходится переписывать под новую логику сопоставления. Семь типовых поломок такого рода и их признаки мы собрали в материале про ошибки обмена с 1С.
Сколько это стоит и кто отвечает после запуска
Модельная компания: 20 сотрудников, две системы — CRM и учёт, справочники контрагентов и номенклатуры. Пять менеджеров, кладовщик, бухгалтер, руководитель. Ставки — полная стоимость часа с налогами и рабочим местом.
Теперь наведение порядка по описанному методу и то, что остаётся после. Ставка инженера — 3 000 ₽/час.
Обратите внимание на строку «остаточные потери». Они не уходят в ноль и не должны: новые товары, нетиповые контрагенты, разовые исключения будут всегда. Подрядчик, обещающий полное исчезновение ручной работы со справочниками, обещает то, чего не бывает. Реалистичный ориентир — снижение примерно вчетверо, и он достигается за счёт того, что работа переезжает от пяти человек к одному, который делает её осознанно.
Две группы столбцов, ось 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 ₽. Роль владельца назначается до старта работ, а не после.
Обмен не наводит порядок в справочниках. Он с одинаковой скоростью копирует и порядок, и беспорядок.
