При автоматизации совместной работы конфигураций «1С:Зарплата и управление персоналом 3.1» (ЗУП) и «1С:Документооборот 2.1» (ДО) часто возникает необходимость синхронизации основных кадровых справочников. Это три ключевых справочника: ФизическиеЛица, Должности и СтруктураПредприятия.
Многие начинающие специалисты сталкиваются с дилеммой: написать собственную обработку выгрузки/загрузки, использовать COM-соединение, настроить правила через «1С:Конвертация данных» или попытаться задействовать механизмы бесшовной интеграции. Проанализируем ситуацию, разберем архитектурные особенности систем и выберем наиболее стабильное техническое решение.
Перед тем как приступать к написанию правил или кода обмена, необходимо четко понимать, что логика хранения и использования данных в этих конфигурациях различается:
ПодразделенияОрганизаций). В ДО 2.1 используется справочник СтруктураПредприятия, который отражает управленческую структуру. Напрямую они могут не совпадать. При обмене вам потребуется либо транслировать регламентированную структуру «один в один», либо настраивать правила маппинга.Рассмотрим подробнее три основных подхода к реализации этой задачи, выделив их преимущества и недостатки.
1. Ручной ввод данных
На первый взгляд кажется, что если структура предприятия и должности меняются редко, то проще вносить изменения вручную. Однако реальная практика показывает, что при средней текучести кадров ручной режим приводит к постоянным ошибкам: забыли завести сотрудника, некорректно написали фамилию, вовремя не деактивировали уволенного. В результате ломаются процессы маршрутизации задач в ДО. Этот вариант мы сразу отметаем.
2. COM-соединение (прямое подключение к базе)
Этот способ привлекает разработчиков высокой скоростью реализации «в моменте». Написание обработки, которая напрямую подключается из ЗУП к ДО через COM и перезаписывает элементы, занимает минимум времени.
Пример кода инициализации COM-соединения:
ПараметрыПодключения = "Srvr=""Server1C"";Ref=""DO_Base"";Usr=""Администратор"";Pwd=""Пароль"";";
Connector = Новый COMОбъект("V83.COMConnector");
Попытка
СоединениеДО = Connector.Connect(ПараметрыПодключения);
Исключение
ЗаписьЖурналаРегистрации("Обмен_ЗУП_ДО", УровеньЖурналаРегистрации.Ошибка, , ,
"Ошибка подключения: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат;
КонецПопытки;
Почему COM-соединение использовать не рекомендуется: Оно крайне нестабильно при работе в клиент-серверном варианте на 64-битных операционных системах. Постоянно возникают проблемы с регистрацией библиотеки comcntr.dll, разрядностью процессов сервера приложений 1С, а также падением сессий при сетевых микросбоях. Кроме того, COM-соединение жестко привязывает вас к версии платформы 1С на обоих серверах.
3. Бесшовная интеграция (Веб-сервисы)
Штатный механизм бесшовной интеграции ЗУП и ДО работает через публикацию веб-сервиса DMService на веб-сервере (IIS или Apache). Этот механизм великолепен для работы с документами прямо из интерфейса ЗУП, но он не предназначен для фонового автоматического наполнения справочников структуры и должностей в автоматическом режиме «из коробки» без серьезного переписывания веб-сервиса.
4. Обмен XML/XDTO через Конвертацию данных (КД 2.1) — Рекомендуемый выбор
Использование технологии создания правил обмена в «1С:Конвертация данных 2.1» совместно с регистрацией изменений на узлах планов обмена — это наиболее надежный, промышленный стандарт интеграции.
Выясним, как настроить надежный ежедневный фоновый обмен без написания сложного кода интеграции с нуля.
Для начала нам необходимо выгрузить структуры метаданных обеих конфигураций (ЗУП и ДО) с помощью обработки MD83Exp.epf, которая идет в комплекте с шаблоном конфигурации «Конвертация данных 2.1».
Запустим базу «Конвертация данных 2.1» и создадим новую настройку правил обмена, указав конфигурацию-источник (ЗУП) и конфигурацию-приемник (ДО).
Создадим три правила конвертации объектов (ПКО):
Подразделения (или ПодразделенияОрганизаций), а в ДО — СтруктураПредприятия, настроим ПКО с источником СправочникСсылка.ПодразделенияОрганизаций и приемником СправочникСсылка.СтруктураПредприятия. Позаботимся о сохранении иерархии подразделений, сопоставив реквизит Родитель.Чтобы не выгружать всю базу каждый раз заново, создадим в ЗУП простой кастомный план обмена (например, через механизм расширений, чтобы не снимать конфигурацию с поддержки) или задействуем существующий универсальный план обмена.
В состав плана обмена включим наши три справочника с авторегистрацией изменений. Теперь при изменении карточки физлица или подразделения в ЗУП, ссылка на этот объект автоматически попадет в таблицу зарегистрированных изменений для узла обмена Документооборота.
Для программной регистрации объектов (если требуется тонкая настройка фильтрации изменений) мы можем использовать следующий код в модуле объекта справочника-источника:
Процедура ПриЗаписи(Отказ)
Если Не ОбменДанными.Загрузка Тогда
УзелОбмена = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("ДО");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, ЭтотОбъект.Ссылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Разберем, как автоматизировать этот процесс, чтобы он выполнялся незаметно для пользователей один раз в сутки (например, ночью):
Такой подход полностью изолирует базы друг от друга. Если одна из баз будет временно недоступна (например, во время обновления или резервного копирования), обмен не упадет с критической ошибкой, а просто выполнится при следующем запуске регламентного задания, когда файл обмена появится в каталоге.
ФизическиеЛица ничего критически не меняется, но в ДО соответствующего пользователя необходимо заблокировать (снять флаг «Активен» или пометить недействительным), чтобы на него перестали сыпаться задачи. Для этого в правилах обмена (в обработчиках ПКО) или при загрузке в ДО рекомендуется написать код-обработчик, проверяющий статус работы физлица и отключающий его учетную запись в ДО.