При переходе на современные конфигурации 1С многие разработчики, привыкшие к работе с правилами обмена в «Конвертации данных 2.0», сталкиваются с новым механизмом синхронизации через «Универсальный формат обмена» (EnterpriseData). В этом формате правила обмена и регистрации изменений встроены непосредственно в код конфигурации, что вызывает вопросы о способах его доработки. Рассмотрим, как добавить в типовой обмен между «1С:Зарплата и Управление Персоналом 3» и «1С:Бухгалтерия предприятия 3» выгрузку кадровых данных, например, для заполнения должности сотрудника в авансовых отчетах.
Первое желание — просто добавить в обмен документ «Прием на работу». Кажется, что это решит проблему: документ появится в Бухгалтерии, и из него можно будет взять должность. Однако проанализируем ситуацию глубже. Основная цель — иметь в БП актуальную должность сотрудника. А что произойдет, если сотрудника переведут на другую должность? Документ «Прием на работу» останется прежним, и данные в БП устареют. Чтобы поддерживать их в актуальном состоянии, придется настраивать выгрузку и документов «Кадровый перевод», и «Увольнение», что значительно усложняет задачу.
Более правильный и современный подход — переносить не исторические документы, а срез актуальных кадровых данных из соответствующего регистра сведений, например, Текущие кадровые данные сотрудников. Этот регистр всегда содержит последнюю информацию о должности, подразделении и других параметрах сотрудника. Такой способ решает проблему с кадровыми изменениями: в БП всегда будут свежие данные, полученные из одного источника.
Рассмотрим несколько методов, как можно реализовать перенос необходимых данных, от наиболее предпочтительного к альтернативным.
Это самый правильный метод, который позволяет вносить изменения, не снимая конфигурацию с поддержки. Логика обмена в формате EnterpriseData сосредоточена в общих модулях. Наша задача — с помощью расширения модифицировать эту логику.
Разберем по шагам:
МенеджерОбменаЧерезУниверсальныйФормат. В зависимости от версии формата обмена могут использоваться модули с суффиксами, например, МенеджерОбменаЧерезУниверсальныйФормат13.Справочник.Сотрудники). Используйте поиск по коду по ключевым словам, например, "ВыгрузитьПоПравилу", "Сотрудники".Текущие кадровые данные сотрудников.ДополнительныеСвойства (в коде она может называться AdditionalInfo). Вы можете добавить в эту коллекцию полученные данные о должности и подразделении.
Примерный концепт кода, который может быть добавлен в процедуру выгрузки сотрудника:
// ... код формирования основных данных сотрудника ...
// Получаем актуальные кадровые данные
ПараметрыПолученияДанных = Новый Структура("Сотрудник", Объект.Ссылка);
АктуальныеДанные = РегистрыСведений.ТекущиеКадровыеДанныеСотрудников.ПолучитьПоследнее(ТекущаяДата(), ПараметрыПолученияДанных);
Если АктуальныеДанные <> Неопределено Тогда
// Добавляем должность в дополнительные свойства выгружаемого объекта
// Имя свойства ("ИмяДолжности") должно быть согласовано с доработкой на стороне приемника (БП)
Свойства = ВыходныеДанные.ДополнительныеСвойства;
НовоеСвойство = Свойства.Добавить();
НовоеСвойство.Имя = "ИмяДолжности";
НовоеСвойство.Значение = АктуальныеДанные.Должность.Наименование;
// Аналогично можно добавить подразделение и другие данные
КонецЕсли;
// ... дальнейший код выгрузки ...
ДополнительныеСвойства и записать их в соответствующие реквизиты или регистры в Бухгалтерии.Этот метод требует аккуратности и понимания структуры модулей обмена, но является наиболее гибким и правильным с точки зрения поддержки конфигурации. Наглядный пример адаптации процедур выгрузки можно посмотреть в решении с доработками модуля МенеджерОбменаЧерезУниверсальныйФормат13.
Если доработка типового механизма кажется слишком сложной или вы хорошо знакомы с КД 2, можно использовать этот подход как обходной путь.
Суть метода:
Прием на работу или, что более правильно, регистра сведений Текущие кадровые данные сотрудников.Плюсы: Изоляция от сложного типового механизма, использование знакомого инструмента (КД 2).
Минусы: Необходимость поддерживать второй, отдельный обмен; возможные проблемы с дублированием данных, если неаккуратно настроить поиск объектов при загрузке. Для автоматизации такого сценария подойдёт пример обработки для запуска обмена по правилам КД 2.0.
Это элегантное, но более сложное в настройке решение, которое позволяет получать данные в режиме реального времени без их дублирования.
Как это работает:
ПолучитьДолжность, который на вход принимает ИНН физлица и ИНН организации, а на выходе отдает строку с текущей должностью.ПриИзменении поля «Сотрудник»).Плюсы: Данные в БП не хранятся и не дублируются, информация всегда на 100% актуальна на момент запроса.
Минусы: Требует настройки веб-сервера; более высокая сложность разработки; создает онлайн-зависимость между базами (если ЗУП недоступен, данные получить не удастся).
Для решения задачи по отражению актуальных кадровых данных из ЗУП в БП наиболее эффективным и правильным является перенос сведений из регистра Текущие кадровые данные сотрудников, а не отдельных исторических документов. Рекомендуемый способ реализации — доработка типового обмена через расширение, так как это позволяет сохранить конфигурацию на поддержке и интегрировать решение в стандартный механизм. Альтернативные варианты, такие как отдельный обмен на КД 2 или использование HTTP-сервисов, также могут применяться в зависимости от конкретной ситуации и квалификации разработчика.