При обновлении конфигурации Зарплата и Управление Персоналом 3.1 (особенно на релизы выше 3.1.10) многие технические специалисты сталкиваются с внезапным отказом отлаженного обмена с Управлением производственным предприятием 1.3. Основные симптомы проблемы: данные выгружаются, но при загрузке в УПП справочники (Подразделения, Физические лица) игнорируются, а привычные функции обработки XML начинают возвращать НЕОПРЕДЕЛЕНО. В этой статье мы подробно разберем, почему это происходит и как настроить стабильную синхронизацию.
Рассмотрим ситуацию, когда в правилах обмена (созданных в Конвертации данных 2.0) перестает работать функция одАтрибут(ЧтениеСсылки, одТипЧисло, "Нпп"). До обновления она корректно возвращала номер по порядку объекта из XML-файла, но теперь результатом всегда является НЕОПРЕДЕЛЕНО. Выясним причину этого поведения.
Проблема кроется не только в коде конфигурации, но и в поведении платформы 1С:Предприятие 8.3 (начиная с релизов 8.3.14 и выше). В новых версиях изменился внутренний алгоритм работы объекта ЧтениеXML. Когда вызывается чтение атрибутов, указатель внутри потока XML может смещаться иначе, чем в старых версиях. Если в XML-файле появляются новые пространства имен (namespaces) или изменяется порядок следования технических узлов, старая функция одАтрибут, зашитая в обработку ОбменДаннымиXML, теряет контекст.
Проанализируем, как можно обойти эту ошибку в правилах обмена. Вместо использования жестко заданной функции, рекомендуется переписать фрагмент кода, отвечающий за поиск атрибута, используя стандартные методы платформы:
// Пример более надежного поиска атрибута "Нпп"
Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
Если ЧтениеXML.ЛокальноеИмя = "Нпп" Тогда
ЗначениеНпп = ЧтениеXML.Значение;
Прервать;
КонецЕсли;
КонецЦикла;
Такой подход гарантирует, что мы переберем все доступные атрибуты текущего узла, независимо от их позиции и наличия дополнительных метаданных, внедренных новыми релизами ЗУП.
Разберем вторую важную проблему: различие версий формата обмена. При использовании стандартной кнопки Синхронизация данных в современных версиях ЗУП 3.1 система автоматически пытается сформировать файл в формате 3.1. Однако конфигурация УПП 1.3 является "ретро-конфигурацией" и ее встроенные механизмы обмена рассчитаны на формат 2.0.
Выясним, почему это критично для справочников. В формате 2.0 структура ссылки выглядит прозрачно для старых обработок. В формате 3.1 (ориентированном на EnterpriseData) структура узлов СправочникСсылка существенно усложнена. Рассмотрим пример из сообщения пользователя, где виден флаг НеСоздаватьЕслиНеНайден="true". Это важный момент: если в УПП объект не найден по УникальномуИдентификатору (GUID), система, согласно этому флагу, просто пропускает объект, не пытаясь найти его по наименованию или коду.
Для корректной работы с УПП необходимо принудительно использовать формат 2.0. Если вручную через Универсальный обмен данными XML всё грузится хорошо, значит, проблема именно в способе вызова обмена через интерфейс синхронизации.
Посмотрим, как настроить процесс так, чтобы он был автоматическим, но использовал правильный формат. Использовать стандартную "Синхронизацию данных" (БСП) в данном случае не всегда удобно, так как она навязывает свои правила. Вместо этого разберем алгоритм настройки через Планы обмена.
.../1c/HRM/3_1_X_X/Обмены данными/Обмен с конфигурацией УПП 1.3/. Не используйте правила, "зашитые" внутри конфигурации, так как внешние файлы обновляются чаще и содержат исправления для новых версий платформы.ОбменЗарплата3ЗарплатаУправлениеПерсоналом или аналогичный, предназначенный для обмена с прошлыми версиями.V8Exch82.epf.Рассмотрим подробнее использование V8Exch82.epf в регламентном задании. Это наиболее стабильный путь для связки ЗУП 3.1 -> УПП 1.3. Мы можем написать небольшой скрипт в модуле приложения или во внешней обработке, который будет запускать выгрузку по расписанию:
// Пример вызова универсальной выгрузки программно
ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаПравилОбмена = "C:\Rules\ZUP_UPP.xml";
ОбработкаОбмена.ИмяФайлаДанных = "C:\Exchange\Data.xml";
ОбработкаОбмена.РежимОбмена = "Выгрузка";
ОбработкаОбмена.ВыполнитьВыгрузку();
Проанализируем ситуацию: почему документы загружаются, а справочники — нет? В 1С УПП 1.3 обработка загрузки работает итерационно. Если в файле сначала идет документ ОтражениеЗарплатыВРеглУчете, а ссылки на подразделения находятся внутри него, система пытается найти эти подразделения в базе УПП.
Важные моменты поиска:
Ссылка ПродолжитьПоиск="true". Это означает, что если по идентификатору объект не найден, система должна перейти к поиску по полям (Наименование, Код).true (как в Сообщении 10), а поиск по всем полям провалился, объект не будет создан "на лету". В результате в документе в поле "Подразделение" будет пустота или объект "Объект не найден".Чтобы исправить это, необходимо в конфигурации Конвертация данных 2.0 открыть правила обмена для ПКО ПодразделенияОрганизаций и проверить вкладку "Настройка поиска". Мы рекомендуем убедиться, что поиск по наименованию и родителю (владельцу-организации) активен, а флаг "Не создавать новый объект" снят, если вы допускаете появление новых подразделений из ЗУП.
Подводя итог, можно сказать, что стабильный обмен между ЗУП 3.1 и УПП 1.3 требует отказа от современных "упрощенных" настроек в пользу классического механизма Exchange Rules (2.0).
Краткий чек-лист для восстановления обмена:
V8Exch82.epf) убедитесь, что используется формат 2.0.Следуя этим шагам, мы обеспечим корректную передачу данных, и табличные части документов Отражение зарплаты в регл учете будут заполняться всеми необходимыми аналитиками без ошибок.