Как настроить единую НСИ номенклатуры и контрагентов в 40 разрозненных базах 1С без покупки MDM-систем

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Синхронизация нормативно-справочной информации (НСИ) в крупной холдинговой структуре — это классическая головная боль ИТ-отдела. Ситуация усугубляется, когда в компании функционирует несколько десятков разрозненных баз данных (в нашем случае от 30 до 40 баз «1С:Бухгалтерия предприятия»), пользователи привыкли к полной свободе действий, регламенты работы отсутствуют, а руководство не готово инвестировать в тяжелые комплексные решения уровня 1С:Управление холдингом или специализированные MDM-системы. Кроме того, отсутствует административный ресурс для принудительного наведения порядка руками пользователей.

В этой статье мы подробно разберем, как решить задачу обеспечения единой НСИ (Контрагенты и Номенклатура) силами разработчиков 1С, используя гибкие механизмы платформы «1С:Предприятие 8.3», расширения, веб-сервисы и встроенный функционал.

---

Часть 1. Унификация справочника «Контрагенты»

Для контрагентов решение лежит на поверхности благодаря переходу на современные редакции программ. Если перевести все базы на редакцию «Бухгалтерия предприятия 3.0», можно задействовать встроенный механизм заполнения по ИНН.

Давайте проанализируем план действий для унификации контрагентов:

  1. Ограничение прав пользователей: Через расширение конфигурации или механизм подписок на события мы запрещаем ручное создание и редактирование наименований, КПП и ИНН контрагентов. Заполнение должно выполняться строго по кнопке «Заполнить по ИНН» (сервис 1С:Контрагент).
  2. Программное сведение существующей базы: На старте нам необходимо очистить дубли и выровнять справочники во всех базах. Для этого мы пишем обработку, которая собирает все ИНН из имеющихся 40 информационных баз, исключает дубли и формирует единый массив.
  3. Автоматическое заполнение: Программно запускается процесс создания контрагентов во всех базах по единому списку ИНН с использованием стандартных методов API сервиса автозаполнения.

Ниже рассмотрим пример кода для программного создания контрагента по ИНН. Мы можем вызвать стандартные процедуры общего модуля БП 3.0 (в разных версиях имена модулей могут незначительно отличаться, но суть остается единой):


// Пример программного заполнения данных контрагента по ИНН в БП 3.0
Процедура ЗаполнитьКонтрагентаПоИНН(НовыйКонтрагентСсылка, ЗначениеИНН) Экспорт
    
    КонтрагентОбъект = НовыйКонтрагентСсылка.ПолучитьОбъект();
    КонтрагентОбъект.ИНН = ЗначениеИНН;
    
    // Используем программный вызов подсистемы работы с сервисом 1С:Контрагент
    ДанныеИНН = РаботаСАдресамиКлиентСервер.СведенияОЮридическомЛице(ЗначениеИНН);
    
    Если ДанныеИНН <> Неопределено Тогда
        КонтрагентОбъект.Наименование = ДанныеИНН.СокращенноеНаименование;
        КонтрагентОбъект.НаименованиеПолное = ДанныеИНН.ПолноеНаименование;
        КонтрагентОбъект.КПП = ДанныеИНН.КПП;
        КонтрагентОбъект.Записать();
    КонецЕсли;

КонецПроцедуры

---

Часть 2. Унификация справочника «Номенклатура» — Архитектурные варианты

С номенклатурой ситуация сложнее: у нее нет единого государственного реестра, аналогичного ЕГРЮЛ/ЕГРИП для контрагентов. Нам требуется создать техническое решение, которое обеспечит сквозную идентичность элементов (как минимум равенство кодов, наименований и ключевых реквизитов, а в идеале — совпадение внутренних идентификаторов UUID) во всех базах.

Выясним преимущества и недостатки основных подходов к решению этой задачи.

---

Вариант А. Создание микро-MDM на базе HTTP-сервисов и Расширений

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

Суть метода: Мы выделяем одну из баз в качестве «Мастер-базы» (это может быть база головной организации). В ней публикуется разработанный нами HTTP-сервис. Во все остальные 39 баз устанавливается легкое Расширение конфигурации, которое перехватывает попытку создания новой номенклатуры.

Разберем алгоритм работы по шагам:

  1. Пользователь в периферийной базе нажимает кнопку «Создать» в справочнике Номенклатура.
  2. Форма создания перехватывается расширением. При попытке записи расширение формирует HTTP-запрос к Мастер-базе, передавая туда ключевые реквизиты поиска (например, Артикул, Штрихкод или Наименование).
  3. Мастер-база производит поиск в своем справочнике:
    • Если товар найден, HTTP-сервис возвращает его данные и уникальный идентификатор (UUID). Периферийная база записывает элемент именно с этим UUID.
    • Если товар не найден, он создается в Мастер-базе, получает новый UUID, который возвращается в периферийную базу для создания локальной копии.

Рассмотрим пример кода отправки запроса из локальной базы в Мастер-базу через HTTP-соединение:


// Функция отправки запроса создания/поиска номенклатуры в Мастер-базу
Функция ПолучитьНоменклатуруИзМастерБазы(Наименование, Артикул)
    
    АдресСервера = "master-nsi.company.local";
    ИмяРесурса = "/v1/nomenclature/search";
    
    HTTPСоединение = Новый HTTPСоединение(АдресСервера, , "API_User", "Password_123");
    
    // Формируем JSON-тело запроса
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    
    ПараметрыЗапроса = Новый Структура;
    ПараметрыЗапроса.Вставить("Name", Наименование);
    ПараметрыЗапроса.Вставить("Article", Артикул);
    
    ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    HTTPЗапрос = Новый HTTPЗапрос(ИмяРесурса);
    HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
    
    Попытка
        HTTPОтвет = HTTPСоединение.ОтправитьДляОбъекта(HTTPЗапрос);
        Если HTTPОтвет.КодСостояния = 200 Тогда
            Возврат HTTPОтвет.ПолучитьТелоКакСтроку();
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("НСИ.Обмен", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
    КонецПопытки;
    
    Возврат Неопределено;
    
КонецФункции

---

Вариант Б. Обмен по схеме «Звезда» с использованием планов обмена

Если постоянное онлайн-соединение между базами нестабильно, целесообразно использовать асинхронную схему обмена по расписанию.

Реализация схемы:

  1. Создается отдельный план обмена (например, ПО_СинхронизацияНСИ). В состав отправляемых данных включается только справочник Номенклатура (и сопутствующие: КлассификаторЕдиницИзмерения, НоменклатурныеГруппы).
  2. Обмен настраивается по топологии «Звезда», где центром является Мастер-база, а лучами — все остальные 40 баз.
  3. Каждую ночь базы выгружают новые элементы в центр. Центральная база выполняет автоматический поиск дублей по алгоритмам сопоставления наименований (например, расстояние Левенштейна) или штрихкодов.
  4. После обработки центральная база рассылает эталонный справочник обратно во все периферийные базы, заменяя дубли и унифицируя UUID элементов.

Для реализации этого сценария отлично подойдет современный универсальный формат обмена EnterpriseData, встроенный в платформу 1С. Это избавит вас от необходимости писать и поддерживать устаревшие правила обмена в программе «Конвертация данных 2.0».

---

Вариант В. Использование встроенного сервиса «1С:Номенклатура»

Многие разработчики забывают про готовое облачное решение от самой фирмы 1С, которое не требует разработки собственных систем контроля.

Как организовать процесс:

---

Вариант Г. Жесткая привязка к штрихкодам (EAN-13) как к мастер-ключу

Если бизнес-процессы компании не позволяют запретить ручной ввод названий (например, специфика производства), технически можно опереться на штрихкодирование:

  1. В расширении конфигурации для справочника Номенклатура реквизит Штрихкод (или штрихкод в подчиненном регистре сведений) делается строго обязательным к заполнению при записи элемента.
  2. При синхронизации баз сопоставление номенклатуры происходит исключительно по уникальному штрихкоду EAN-13, полностью игнорируя текстовое наименование.
  3. Даже если в базе №1 товар занесен как «Кабель силовой ВВГ 3х2.5», а в базе №2 — «Каб. ВВГ 3*2,5», система сопоставит их в единую сущность по общему штрихкоду, что позволит корректно собирать консолидированную отчетность.

---

Часть 3. Первоначальное сведение баз и решение проблемы «Переход в середине года»

Один из самых частых вопросов при внедрении единой НСИ: «Как объединить справочники и документы, если базы велись весь год обособленно, а сведение нужно сделать прямо сейчас?»

Рассмотрим по шагам технологию слияния данных через перенос документов и перепривязку НСИ:

Шаг 1. Формирование единого словаря соответствий

Прежде чем переносить документы или объединять базы, пишется техническая таблица соответствий (транслятор). В ней фиксируется, какому элементу из локальной Базы А соответствует элемент из Мастер-Базы. Сопоставление выполняется программно:

Шаг 2. Объединение баз через выгрузку/загрузку XML

Если принято решение объединить учет нескольких организаций в одну физическую базу (чтобы облегчить администрирование), используется встроенная обработка «Выгрузка загрузка данных XML»:

  1. Из локальных баз выгружаются документы за текущий период (с начала года).
  2. При загрузке в объединенную базу используется созданная на Шаге 1 таблица соответствий, чтобы ссылки в реквизитах документов (Номенклатура, Контрагент) автоматически подменялись на эталонные элементы из объединенной базы, не создавая дублей.

Пример концептуальной схемы сопоставления объектов при загрузке данных:


// Фрагмент алгоритма сопоставления при загрузке сторонних данных
Процедура ПриЗагрузкеОбъекта(ОбъектДанных, СвойстваОбъекта)
    
    ТипОбъекта = ТипЗнч(ОбъектДанных);
    
    Если ТипОбъекта = Тип("СправочникОбъект.Номенклатура") Тогда
        // Ищем эталонный UUID по нашей таблице соответствий
        ЭталоннаяСсылка = НайтиЭталоннуюНоменклатуру(ОбъектДанных.Артикул, ОбъектДанных.Наименование);
        Если ЗначениеЗаполнено(ЭталоннаяСсылка) Тогда
            // Перенаправляем ссылку загружаемого объекта на эталон
            ОбъектДанных.Ссылка = ЭталоннаяСсылка;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

---

Подведение итогов

Обеспечить единую НСИ в 40 базах без административного ресурса и дорогих MDM-систем — задача сложная, но вполне решаемая техническими методами платформы «1С:Предприятие 8.3».

Главные выводы нашего разбора:

Используя данные подходы, ИТ-отдел сможет навести порядок в учете холдинга исключительно техническими средствами, не вовлекая пользователей в сложные процессы ручной чистки справочников.

← На главную