Как выгрузить конкретное физическое лицо из ЗУП в УТ через Конвертацию данных?

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

При интеграции систем 1С часто возникает задача выборочного переноса данных. Например, когда в базе «1С:Зарплата и управление персоналом 3.1» (ЗУП) создается новое физическое лицо, и его необходимо мгновенно передать в «1С:Управление торговлей 10.3» (УТ) по нажатию кнопки, не запуская при этом полную синхронизацию. Рассмотрим, как реализовать этот механизм с помощью конфигурации «Конвертация данных 2.1» (КД 2.1) и программного вызова обработки обмена через COM-соединение.

Настройка правил в Конвертации данных 2.1

Первым делом нам необходимо подготовить правила обмена таким образом, чтобы они умели «понимать», какой именно объект мы хотим выгрузить. Если просто запустить стандартную выгрузку, система попытается перенести все справочники, подходящие под условия правил выгрузки данных (ПВД). Чтобы этого избежать, воспользуемся механизмом параметров.

Проанализируем шаги настройки в КД 2.1:

  1. Откроем правила обмена для справочника ФизическиеЛица.
  2. На вкладке «Параметры» создадим новый параметр, например, ФизическоеЛицоДляВыгрузки.
  3. В правиле конвертации объекта (ПКО) для физических лиц перейдем в обработчик события «Перед выгрузкой».
  4. Пропишем условие, которое будет проверять, совпадает ли текущий выгружаемый объект с тем, что мы передали в параметре:

Если Параметры.Свойство("ФизическоеЛицоДляВыгрузки") 
   И ЗначениеЗаполнено(Параметры.ФизическоеЛицоДляВыгрузки) Тогда
    Если Объект.Ссылка <> Параметры.ФизическоеЛицоДляВыгрузки Тогда
        Отказ = Истина;
    КонецЕсли;
КонецЕсли;

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

Реализация программной выгрузки через COM-соединение

Теперь рассмотрим, как инициировать процесс из кода 1С. Поскольку ЗУП 3.1 находится на поддержке, лучшим решением будет использование Расширения конфигурации. Мы создадим команду в форме справочника, которая будет подключаться к базе-приемнику (УТ 10.3) и передавать данные.

Разберем пример кода для подключения и выгрузки. Сначала подготовим COM-соединение с базой УТ:


// Создаем COM Объект для подключения к базе УТ 10.3
Попытка
    V83COMConnector = Новый COMОбъект("V83.COMConnector");
    // СтрокаПодключения должна содержать путь к базе, логин и пароль
    БазаПриемник = V83COMConnector.Connect(СтрокаПодключения);
Исключение
    Сообщить("Не удалось подключиться к базе: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

После успешного подключения нам нужно вызвать обработку УниверсальныйОбменДаннымиXML, которая встроена в большинство типовых конфигураций. Весь процесс будет состоять из выгрузки данных во временный файл в источнике и последующей загрузки этого файла в приемнике через то же COM-соединение.

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


&НаСервере
Функция ВыполнитьПереносОбъекта(СсылкаНаОбъект)
    // 1. Подготовка обработки выгрузки в текущей базе (ЗУП)
    ОбработкаВыгрузки = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    ОбработкаВыгрузки.ИмяФайлаПравилОбмена = ПутьКФайлуПравил;
    ОбработкаВыгрузки.ЗагрузитьПравилаОбмена();
    
    // 2. Настройка временного файла для данных
    ИмяФайлаОбмена = КаталогВременныхФайлов() + "exchange_data.xml";
    ОбработкаВыгрузки.ИмяФайлаОбмена = ИмяФайлаОбмена;
    
    // 3. Установка отбора (аналог того, что мы делали в КД 2.1)
    // Можно использовать построитель или напрямую передать параметры в таблицу правил
    Для Каждого СтрокаПВД Из ОбработкаВыгрузки.ТаблицаПравилВыгрузки.Строки Цикл
        Если СтрокаПВД.Имя = "ФизическиеЛица" Тогда
            СтрокаПВД.Включить = 1;
            // Устанавливаем отбор по ссылке
            Построитель = Новый ПостроительОтчета;
            Построитель.Текст = "ВЫБРАТЬ _.* ИЗ Справочник.ФизическиеЛица КАК _ ГДЕ _.Ссылка = &Ссылка";
            Построитель.Параметры.Вставить("Ссылка", СсылкаНаОбъект);
            СтрокаПВД.НастройкиПостроителя = Построитель.ПолучитьНастройки();
            СтрокаПВД.ИспользоватьОтбор = Истина;
        Иначе
            СтрокаПВД.Включить = 0;
        КонецЕсли;
    КонецЦикла;
    
    ОбработкаВыгрузки.ВыполнитьВыгрузку();
    
    // 4. Загрузка в приемник через COM
    Попытка
        ОбработкаЗагрузки = БазаПриемник.Обработки.УниверсальныйОбменДаннымиXML.Создать();
        ОбработкаЗагрузки.ИмяФайлаОбмена = ИмяФайлаОбмена;
        ОбработкаЗагрузки.РежимОбмена = "Загрузка";
        ОбработкаЗагрузки.ВыполнитьЗагрузку();
    Исключение
        Сообщить("Ошибка при загрузке в УТ: " + ОписаниеОшибки());
    КонецПопытки;
    
    УдалитьФайлы(ИмяФайлаОбмена);
КонецФункции

Решение проблем с COM-соединением

Часто при работе с COMConnector возникают технические сложности. Разберем наиболее популярные ошибки и способы их устранения:

1. Ошибка «Класс не зарегистрирован» (0x80040154).
Это означает, что операционная система не знает о существовании библиотеки comcntr.dll.
Решение: Необходимо зарегистрировать компоненту вручную. Запустите командную строку от имени администратора и выполните команду:
regsvr32 "C:\Program Files\1cv8\8.3.X.XXXX\bin\comcntr.dll" (где 8.3.X.XXXX — ваша версия платформы).
Важно: Если у вас 64-битный сервер 1С, убедитесь, что регистрируете библиотеку соответствующей разрядности.

2. Несоответствие версий клиента и сервера.
Ошибка возникает, если версия платформы, из которой вызывается COM-соединение, отличается от версии платформы, на которой работает база-приемник.
Решение: Самый правильный способ — обновить платформы до одинаковой версии. Если это невозможно, можно воспользоваться файлом конфигурации comcntcfg.xml, в котором можно принудительно указать, какую версию V83.COMConnector использовать для конкретных соединений.

3. Проблемы прав доступа.
Пользователь, под которым запущен сервер 1С (обычно USR1CV8), должен иметь права на чтение/запись в каталоге временных файлов и права на запуск COM-объектов в системе.

Особенности передачи паспортных данных

Проанализируем важный нюанс: в ЗУП 3.1 паспортные данные хранятся в регистре сведений ДокументыФизическихЛиц, а в УТ 10.3 они могут находиться либо в реквизитах самого справочника, либо в аналогичном регистре.

Чтобы данные перенеслись корректно, в КД 2.1 в ПКО ФизическиеЛица на вкладке «Входящие данные» или в обработчике «При выгрузке» необходимо программно получить срез последних из регистра документов и передать их в соответствующие поля приемника. Выясним, как это сделать: используйте запрос к регистру сведений по владельцу (выгружаемой ссылке) и заполните структуру Значение или свойства объекта приемника.

Таким образом, комбинируя гибкость настроек КД 2.1 и возможности программного управления обменом, мы получаем мощный инструмент для оперативного переноса данных между базами 1С без нарушения целостности конфигураций.

← На главную