Как добавить выгрузку кадровых данных из ЗУП 3 в БП 3 при типовой синхронизации?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При переходе на современные конфигурации 1С многие разработчики, привыкшие к работе с правилами обмена в «Конвертации данных 2.0», сталкиваются с новым механизмом синхронизации через «Универсальный формат обмена» (EnterpriseData). В этом формате правила обмена и регистрации изменений встроены непосредственно в код конфигурации, что вызывает вопросы о способах его доработки. Рассмотрим, как добавить в типовой обмен между «1С:Зарплата и Управление Персоналом 3» и «1С:Бухгалтерия предприятия 3» выгрузку кадровых данных, например, для заполнения должности сотрудника в авансовых отчетах.

Анализ задачи: документ или актуальные данные?

Первое желание — просто добавить в обмен документ «Прием на работу». Кажется, что это решит проблему: документ появится в Бухгалтерии, и из него можно будет взять должность. Однако проанализируем ситуацию глубже. Основная цель — иметь в БП актуальную должность сотрудника. А что произойдет, если сотрудника переведут на другую должность? Документ «Прием на работу» останется прежним, и данные в БП устареют. Чтобы поддерживать их в актуальном состоянии, придется настраивать выгрузку и документов «Кадровый перевод», и «Увольнение», что значительно усложняет задачу.

Более правильный и современный подход — переносить не исторические документы, а срез актуальных кадровых данных из соответствующего регистра сведений, например, Текущие кадровые данные сотрудников. Этот регистр всегда содержит последнюю информацию о должности, подразделении и других параметрах сотрудника. Такой способ решает проблему с кадровыми изменениями: в БП всегда будут свежие данные, полученные из одного источника.

Способы технической реализации

Рассмотрим несколько методов, как можно реализовать перенос необходимых данных, от наиболее предпочтительного к альтернативным.

Способ 1: Доработка типового обмена через расширение (Рекомендуемый)

Это самый правильный метод, который позволяет вносить изменения, не снимая конфигурацию с поддержки. Логика обмена в формате EnterpriseData сосредоточена в общих модулях. Наша задача — с помощью расширения модифицировать эту логику.

Разберем по шагам:

  1. Создайте новое расширение в конфигурации-источнике (ЗУП). Снимите с него флаг «Безопасный режим».
  2. Найдите ключевой модуль. Основная логика обмена находится в общих модулях, обычно с названием МенеджерОбменаЧерезУниверсальныйФормат. В зависимости от версии формата обмена могут использоваться модули с суффиксами, например, МенеджерОбменаЧерезУниверсальныйФормат13.
  3. Заимствуйте модуль в расширение. Добавьте нужный общий модуль в ваше расширение. Это позволит переопределять его процедуры и функции.
  4. Определите место для вставки кода. Вам нужно найти процедуру, которая формирует данные для выгрузки сотрудника (объект Справочник.Сотрудники). Используйте поиск по коду по ключевым словам, например, "ВыгрузитьПоПравилу", "Сотрудники".
  5. Добавьте логику получения кадровых данных. В найденной процедуре, после того как сформированы основные данные сотрудника, добавьте код для получения среза последних данных из регистра сведений Текущие кадровые данные сотрудников.
  6. Передайте данные через дополнительные свойства. Универсальный формат обмена имеет специальный механизм для передачи данных, не предусмотренных стандартной структурой, — коллекцию ДополнительныеСвойства (в коде она может называться AdditionalInfo). Вы можете добавить в эту коллекцию полученные данные о должности и подразделении.

    Примерный концепт кода, который может быть добавлен в процедуру выгрузки сотрудника:

    
    // ... код формирования основных данных сотрудника ...
    
    // Получаем актуальные кадровые данные
    ПараметрыПолученияДанных = Новый Структура("Сотрудник", Объект.Ссылка);
    АктуальныеДанные = РегистрыСведений.ТекущиеКадровыеДанныеСотрудников.ПолучитьПоследнее(ТекущаяДата(), ПараметрыПолученияДанных);
    
    Если АктуальныеДанные <> Неопределено Тогда
        // Добавляем должность в дополнительные свойства выгружаемого объекта
        // Имя свойства ("ИмяДолжности") должно быть согласовано с доработкой на стороне приемника (БП)
        Свойства = ВыходныеДанные.ДополнительныеСвойства;
        НовоеСвойство = Свойства.Добавить();
        НовоеСвойство.Имя = "ИмяДолжности";
        НовоеСвойство.Значение = АктуальныеДанные.Должность.Наименование;
        
        // Аналогично можно добавить подразделение и другие данные
    КонецЕсли;
    
    // ... дальнейший код выгрузки ...
    
  7. Доработка на стороне приемника (БП). Аналогичным образом с помощью расширения в БП нужно доработать логику загрузки данных. В процедуре, которая обрабатывает загрузку сотрудника, нужно прочитать данные из коллекции ДополнительныеСвойства и записать их в соответствующие реквизиты или регистры в Бухгалтерии.

Этот метод требует аккуратности и понимания структуры модулей обмена, но является наиболее гибким и правильным с точки зрения поддержки конфигурации. Наглядный пример адаптации процедур выгрузки можно посмотреть в решении с доработками модуля МенеджерОбменаЧерезУниверсальныйФормат13.

Способ 2: Создание отдельного обмена на «Конвертации данных 2.0»

Если доработка типового механизма кажется слишком сложной или вы хорошо знакомы с КД 2, можно использовать этот подход как обходной путь.

Суть метода:

  1. Создаете новые, полностью отдельные правила обмена в конфигурации «Конвертация данных 2.0».
  2. В этих правилах настраиваете выгрузку только тех объектов, которых не хватает в типовом обмене. Например, вы можете настроить выгрузку документа Прием на работу или, что более правильно, регистра сведений Текущие кадровые данные сотрудников.
  3. В правилах прописываете точную конвертацию нужных полей: Сотрудник, Организация, Подразделение, Должность, Дата приема. Важно: не нужно переносить все реквизиты, достаточно только тех, которые необходимы в БП (обычно это 4-5 ключевых полей).
  4. Для выполнения этого обмена создается отдельная обработка «Универсальный обмен данными в формате XML», которая будет работать по вашим правилам параллельно с основной типовой синхронизацией.

Плюсы: Изоляция от сложного типового механизма, использование знакомого инструмента (КД 2).
Минусы: Необходимость поддерживать второй, отдельный обмен; возможные проблемы с дублированием данных, если неаккуратно настроить поиск объектов при загрузке. Для автоматизации такого сценария подойдёт пример обработки для запуска обмена по правилам КД 2.0.

Способ 3: Использование HTTP-сервиса (Продвинутый вариант)

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

Как это работает:

  1. В ЗУП создается HTTP-сервис. Он будет иметь один метод, например, ПолучитьДолжность, который на вход принимает ИНН физлица и ИНН организации, а на выходе отдает строку с текущей должностью.
  2. В БП создается расширение. Оно перехватывает событие в форме документа «Авансовый отчет» (например, ПриИзменении поля «Сотрудник»).
  3. В обработчике этого события код на стороне БП отправляет HTTP-запрос к сервису в ЗУП, передавая данные сотрудника.
  4. Получив ответ, код подставляет актуальную должность в соответствующее поле печатной формы или документа.

Плюсы: Данные в БП не хранятся и не дублируются, информация всегда на 100% актуальна на момент запроса.
Минусы: Требует настройки веб-сервера; более высокая сложность разработки; создает онлайн-зависимость между базами (если ЗУП недоступен, данные получить не удастся).

Заключение

Для решения задачи по отражению актуальных кадровых данных из ЗУП в БП наиболее эффективным и правильным является перенос сведений из регистра Текущие кадровые данные сотрудников, а не отдельных исторических документов. Рекомендуемый способ реализации — доработка типового обмена через расширение, так как это позволяет сохранить конфигурацию на поддержке и интегрировать решение в стандартный механизм. Альтернативные варианты, такие как отдельный обмен на КД 2 или использование HTTP-сервисов, также могут применяться в зависимости от конкретной ситуации и квалификации разработчика.

← На главную