ADG Оставить заявку
Блог Интеграции 5 мин чтения

SAP R/3 и 1С 8.2: строим интеграцию через Web Services для производственного клиента

Интегрируем SAP R/3 и 1С 8.2 для производственника: Web Services, маппинг справочников НСИ, почасовая синхронизация с логированием расхождений вместо ручной сверки.

Контекст момента

SAP и 1С-коннекторы через Web Services и COM-объекты - распространённый паттерн интеграции в российских производственных компаниях в 2011 году

Производственный клиент - средний завод, несколько сотен сотрудников. Управленческий учёт и финансы идут в SAP R/3, оперативный склад и закупки - в 1С 8.2. Исторически так сложилось: SAP внедряли давно под давлением немецкого акционера, 1С прилипла потому что дёшево, быстро и бухгалтеры умели. Задача пришла простая по формулировке и не очень простая по исполнению: данные должны ходить между системами автоматически, а не через экселевские выгрузки раз в неделю.

Что именно нужно синхронизировать

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

  • Номенклатура. Справочник товаров ведётся в SAP как master-система. В 1С должна отражаться актуальная карточка: код, наименование, единица измерения, группа.
  • Заказы на производство. Создаются в SAP, статус и факт выполнения обновляются из 1С.
  • Остатки на складах. Фактические остатки из 1С нужны SAP для планирования.

Направление данных разное: номенклатура идёт SAP -> 1С, статусы заказов - 1С -> SAP, остатки - тоже 1С -> SAP. Это не симметричный обмен, и это важно для выбора транспорта.

Почему Web Services, а не COM-объекты напрямую

COM-объекты 1С - классический способ обращаться к 1С из внешнего кода. Поднимаешь COM-сервер, вызываешь методы конфигурации, читаешь и пишешь данные. Работает, но есть условие: вызывающая сторона тоже должна быть Windows-процессом. SAP R/3 в нашем случае стоит на AIX. Вариант с COM отпадает физически.

Остаются два реальных пути. Первый - промежуточная база: 1С и SAP пишут в общую таблицу, читают из неё же. Работает, но создаёт третью систему, которую нужно поддерживать, мониторить и которая становится единой точкой отказа. Второй - Web Services с обеих сторон. 1С 8.2 умеет публиковать веб-сервисы через IIS начиная с платформы 8.2, SAP умеет вызывать SOAP-сервисы и публиковать свои через SAP NetWeaver PI или напрямую через RFC-адаптер.

Выбрали Web Services. У клиента NetWeaver PI уже был в инфраструктуре - использовался для другой интеграции. Дополнительного сервера не нужно.

Маппинг справочников: самая болезненная часть

Технический транспорт - это решаемо. Маппинг справочников - это боль.

В SAP материал идентифицируется восемнадцатизначным кодом. В 1С номенклатура имеет свой внутренний GUID и произвольный пользовательский код. Эти коды не совпадают. Исторически в 1С часть позиций создавалась руками, часть переносилась из старой системы учёта с другими кодами. Смысловое соответствие есть, формальное - нет.

Пришлось создавать таблицу соответствий. Вариантов было два:

Первый - автоматическое сопоставление по наименованию. Запускаешь сравнение строк, получаешь кандидатов. Соблазнительно, но опасно: «Болт М8х20» в SAP и «Болт М8 L20 оц.» в 1С - одно и то же, но алгоритм не угадает без человека.

Второй - ручная разметка с инструментом. Выгружаем номенклатуру из обеих систем, строим интерфейс сравнения, ответственный со стороны клиента проставляет соответствия. Долго, но надёжно.

Выбрали второй путь с элементами первого: алгоритм предлагает кандидатов с рейтингом схожести, человек подтверждает или исправляет. Заняло около двух недель на стороне клиента. Пять процентов позиций остались несопоставленными - либо были только в одной системе, либо настолько по-разному названы, что алгоритм уже не помогал. Их вынесли в отдельный список для разбора с технологами.

Расписание и логирование

Синхронизация раз в час. Логика такая: в начале каждого часа на стороне 1С запускается регламентное задание, которое:

  1. Забирает из SAP изменения по номенклатуре за последний час через SOAP-вызов.
  2. Применяет изменения в 1С с использованием таблицы соответствий.
  3. Формирует пакет исходящих данных - статусы заказов и остатки.
  4. Отправляет пакет в SAP.
  5. Записывает в журнал: сколько записей получено, сколько применено, что не смогло примениться и почему.

Последний пункт критичен. Без него первые две недели будут потрачены на попытки понять, почему данные не совпадают. Расхождения гарантированно будут - хотя бы потому что единицы измерения в SAP и 1С кодируются по-разному: в SAP «ST» (штука по немецкому стандарту), в 1С «шт.». Это нужно конвертировать, и конвертер нужно проверять на реальных данных.

В журнале пишем по каждой записи: код в SAP, код в 1С, статус (применено / пропущено / ошибка), описание ошибки если есть. Раз в день автоматически формируем отчёт по расхождениям и отправляем ответственным с обеих сторон.

Где сейчас

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

Параллельный режим планируем держать минимум месяц. После этого - решение о переводе в промышленную эксплуатацию и отключении ручного процесса.

Интеграция корпоративных систем - это в значительной части про то, чтобы превратить «данные должны ходить» в конкретный список потоков, транспорт, маппинг и журнал расхождений. Каждый из этих пунктов занимает в несколько раз больше времени, чем кажется на этапе оценки.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.