Перенос расчета заработной платы из устаревшей конфигурации УПП 1.3 (Управление производственным предприятием) в современную ЗУП 3.1 (Зарплата и управление персоналом) — частая практика. Законодательство по регламентированному учету кадров и зарплаты меняется стремительно, и поддерживать эти изменения в старой УПП становится слишком трудозатратно. Однако само производство, склады и основной бухгалтерский учет зачастую остаются в УПП, которая к тому же за многие годы обросла уникальными кастомными доработками.
В такой ситуации возникает необходимость настроить регулярный обмен данными. Чаще всего требуется переносить справочники физических лиц, сотрудников, контрагентов, способов отражения, а также документы Отражение зарплаты в бухучете и Ведомость в банк. При этом крайне желательно оставить конфигурацию ЗУП 3.1 полностью типовой, чтобы обновлять ее безболезненно в автоматическом режиме.
В данной статье мы подробно разберем, как решить эту задачу, проанализируем различные варианты реализации интеграции и выберем наиболее оптимальные архитектурные решения.
Рассмотрим подробнее три основных подхода к интеграции этих систем, их преимущества и недостатки:
Выясним подробнее, как реализовать на практике два наиболее жизнеспособных сценария: обмен через правила КД 2 с автоматизацией и прямое COM-соединение.
Для реализации этого сценария нам потребуются правила обмена, разработанные в базе «Конвертация данных 2.1». Поскольку структура ЗУП 3.1 и УПП 1.3 сильно различается (например, учет взаиморасчетов и аналитика отражения в учете имеют разную глубину детализации), правила КД 2 позволят гибко настроить сопоставление реквизитов.
Для того чтобы запускать выгрузку из ЗУП автоматически по расписанию и без изменения основной конфигурации, воспользуемся механизмом расширений или механизмом дополнительных отчетов и обработок.
Разберем по шагам схему автоматизации выгрузки через внешнюю обработку:
Шаг 1. Пишем внешнюю обработку для ЗУП 3.1, которая будет запускаться в фоновом режиме регламентным заданием. В модуле объекта обработки прописываем процедуру выгрузки, использующую типовую обработку УниверсальныйОбменДаннымиXML, которая встроена в ЗУП.
Пример программного вызова выгрузки по правилам КД 2:
Процедура ВыполнитьВыгрузкуДанных() Экспорт
ПутьКФайлуПравил = "C:\Exchange\Rules_ZUP_UPP.xml";
ПутьКФайлуДанных = "C:\Exchange\ExportData.xml";
ОбработкаВыгрузки = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаВыгрузки.ИмяФайлаПравилОбмена = ПутьКФайлуПравил;
ОбработкаВыгрузки.ИмяФайлаВыгрузки = ПутьКФайлуДанных;
ОбработкаВыгрузки.РежимОбмена = "Выгрузка";
// При необходимости передаем параметры в правила
ОбработкаВыгрузки.Параметры.Вставить("ОрганизацияВыгрузки", Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701010101"));
ОбработкаВыгрузки.ЗагрузитьПравилаОбмена();
// Настраиваем построитель отбора, если нужно ограничить выборку документов
// Например, выгружаем только документы за текущий месяц
ОбработкаВыгрузки.ВыполнитьВыгрузку();
ЗаписьЖурналаРегистрации("Обмен Данными ЗУП - УПП",
УровеньЖурналаРегистрации.Информация, , ,
"Выгрузка данных успешно завершена в файл: " + ПутьКФайлуДанных);
КонецПроцедуры
Шаг 2. Подключаем данную обработку в базу ЗУП через меню «Администрирование» — «Печатные формы, отчеты и обработки» — «Дополнительные отчеты и обработки». В настройках указываем выполнение по расписанию. Теперь выгрузка будет выполняться в фоне на сервере 1С без участия пользователей.
Шаг 3. На стороне УПП настраиваем аналогичное регламентное задание, которое будет забирать файл ExportData.xml и загружать его с помощью аналогичной обработки УниверсальныйОбменДаннымиXML.
Если вы хотите полностью исключить любые регламентные процессы и хранение файлов на стороне ЗУП 3.1, идеальным выбором будет организация пула регламентных задач на стороне УПП. УПП сама будет инициировать сессию, забирать новые данные и создавать у себя объекты.
Проанализируем пример кода на стороне УПП, который подключается к ЗУП 3.1 через COM-соединение, находит проведенные документы отражения зарплаты за указанный период и переносит их структуру:
Процедура ВыполнитьИмпортИзЗУПЧерезCOM() Экспорт
// 1. Инициализируем COM-соединение
ПараметрыПодключения = "Srvr=""Server1C"";Ref=""zup_production"";Usr=""ExchangeUser"";Pwd=""StrongPassword"";";
COMСоединитель = Новый COMОбъект("V83.COMConnector");
Попытка
БазаЗУП = COMСоединитель.Connect(ПараметрыПодключения);
Исключение
ЗаписьЖурналаРегистрации("Обмен_COM", УровеньЖурналаРегистрации.Ошибка, , ,
"Не удалось подключиться к ЗУП: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// 2. Формируем запрос к базе ЗУП для поиска документов отражения
ЗапросЗУП = БазаЗУП.NewObject("Запрос");
ЗапросЗУП.Текст =
"ВЫБРАТЬ
| Отражение.Ссылка КАК Ссылка
|ИЗ
| Документ.ОтражениеЗарплатыВБухучете КАК Отражение
|ГДЕ
| Отражение.Проведен = ИСТИНА
| И Отражение.Дата МЕЖДУ &НачалоПериода И &КонецПериода";
ЗапросЗУП.SetParameter("НачалоПериода", НачалоМесяца(ТекущаяДата()));
ЗапросЗУП.SetParameter("КонецПериода", КонецМесяца(ТекущаяДата()));
РезультатЗапроса = ЗапросЗУП.Execute();
Выборка = РезультатЗапроса.Select();
Пока Выборка.Next() Цикл
ДокументЗУП = Выборка.Ссылка;
// Создаем или находим аналогичный документ в УПП
ДокументУПП = Документы.ОтражениеЗарплатыВРеглУчете.СоздатьДокумент();
ДокументУПП.Дата = ДокументЗУП.Дата;
ДокументУПП.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", ДокументЗУП.Организация.ИНН);
// Переносим табличную часть "Отражение в учете"
Для Каждого СтрокаЗУП Из ДокументЗУП.Начисления Цикл
НоваяСтрока = ДокументУПП.ОтражениеВУчете.Добавить();
НоваяСтрока.Сумма = СтрокаЗУП.Результат;
// Находим или создаем физическое лицо по СНИЛС/ИНН
ФизЛицоЗУП = СтрокаЗУП.ФизическоеЛицо;
НоваяСтрока.ФизЛицо = НайтиСоздатьФизлицоПоCOM(ФизЛицоЗУП);
// Сопоставляем способы отражения
СпособЗУП = СтрокаЗУП.СпособОтражения;
НоваяСтрока.СпособОтражения = НайтиСпособОтражения(СпособЗУП.Наименование);
КонецЦикла;
Попытка
ДокументУПП.Записать(РежимЗаписиДокумента.Запись);
Исключение
ЗаписьЖурналаРегистрации("Обмен_COM", УровеньЖурналаРегистрации.Предупреждение, , ,
"Ошибка записи документа в УПП: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Важно помнить, что при работе с COM-соединением все вызовы методов и получение реквизитов объектов удаленной базы происходят через сетевые вызовы. Чтобы ускорить процесс переноса больших объемов данных (например, табличных частей на десятки тысяч строк), рекомендуется минимизировать обращения к свойствам COM-объектов в цикле. Вместо этого лучше выгружать результаты запросов на стороне ЗУП во временные таблицы (например, в структуры или массивы соответствий) и передавать их в УПП за один вызов.
Вне зависимости от того, какой технический способ интеграции вы выберете, вы обязательно столкнетесь со структурными различиями между базами ЗУП 3.1 и УПП 1.3. Проанализируем критически важные аспекты, на которые нужно обратить внимание:
СпособыОтраженияЗарплатыВБухучете содержит только наименования способов (шаблонов проводок), без указания конкретных счетов дебета/кредита и субконто. Вся привязка к счетам учета настраивается на стороне бухгалтерской программы (в нашем случае УПП). Поэтому при переносе документов правила должны сопоставлять способ отражения в ЗУП по наименованию с аналогичным элементом справочника в УПП, где уже жестко прописана аналитика счетов (например, Дт 20.01 — Кт 70).Подводя итог, можно утверждать: интеграция ЗУП 3.1 и сильно кастомизированной УПП 1.3 вполне реализуема стандартными средствами платформы. Использование правил КД 2, запускаемых регламентными заданиями, либо написание прямого COM-коннектора на стороне УПП позволит вам автоматизировать обмен без необходимости снимать ЗУП 3.1 с поддержки и усложнять её дальнейшее сопровождение.