Почему новые физические лица не переносятся из ЗУП 3.1 в Бухгалтерию предприятия 3.0 и как это исправить?

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

При настройке синхронизации между конфигурациями «Зарплата и управление персоналом» (ЗУП 3.1) и «Бухгалтерия предприятия» (БП 3.0) специалисты часто сталкиваются с ситуацией, когда данные, казалось бы, зарегистрированы к обмену, но в целевую базу не попадают. Особенно остро эта проблема проявляется при попытке передать новые элементы справочника ФизическиеЛица. Вместо данных об объекте в файле обмена появляется тег УдалениеОбъекта, хотя физическое лицо реально существует в базе-источнике.

Рассмотрим причины возникновения этой ошибки и разберем по шагам несколько способов ее решения: от простых настроек интерфейса до программной корректировки механизмов регистрации.

Анализируем причину проблемы: почему появляется «Удаление объекта»?

В современных конфигурациях 1С на базе БСП (Библиотеки стандартных подсистем) используется механизм контроля миграции данных. Когда объект регистрируется для обмена, система проверяет, соответствует ли он установленным правилам. Если объект не проходит фильтры (например, по организации, по дате или из-за отсутствия ссылок в документах), механизм обмена считает, что этого объекта в базе-приемнике быть не должно. В результате вместо данных система отправляет команду на удаление, чтобы «вычистить» лишнее из целевой базы.

Для справочника ФизическиеЛица в типовых правилах часто установлен режим «Выгружать при необходимости». Это значит, что физлицо уйдет в БП только в том случае, если на него есть ссылка в документе (например, в «Отражении зарплаты в бухучете»), который сам по себе разрешен к выгрузке. Если вы создали физлицо, но оно еще не «прошло» по документам в текущем периоде обмена, система может блокировать его передачу.

Способ 1. Программная регистрация с отключением контроля миграции

Если в вашей конфигурации реализована дописка, которая должна принудительно регистрировать физическое лицо при записи кадрового документа (например, «Прием на работу»), стандартный метод ПланыОбмена.ЗарегистрироватьИзменения() может не сработать. Система все равно применит правила фильтрации при выгрузке.

Выясним причину: при использовании стандартного метода 1С включает внутренние механизмы контроля миграции. Чтобы обойти это ограничение, мы можем использовать функции БСП. Проанализируем пример кода, который решает проблему:


Процедура ОбменЗарплата3Бухгалтерия3ПередЗаписью(Источник, Отказ) Экспорт
    
    Если ТипЗнч(Источник) = Тип("ДокументОбъект.ПриемНаРаботу") Тогда
        
        // Получаем физическое лицо из документа
        ФизическоеЛицо = ?(НЕ ЗначениеЗаполнено(Источник.ФизическоеЛицо), 
            ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Источник.Сотрудник, "ФизическоеЛицо"), 
            Источник.ФизическоеЛицо);
        
        Если НЕ ЗначениеЗаполнено(ФизическоеЛицо) Тогда
            Возврат;
        КонецЕсли;
        
        // Регистрируем физлицо на узлах обмена
        РегистрацияНаВсехУзлах(ФизическоеЛицо);
        
        Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(Источник) Тогда
            Возврат;
        КонецЕсли;
    
    КонецЕсли;
    
КонецПроцедуры

Процедура РегистрацияНаВсехУзлах(РегистрируемаяСсылка)
    
    Если НЕ РегистрируемаяСсылка.Пустая() Тогда
        
        Узлы = ОбменДаннымиСобытия.ВсеУзлыПланаОбмена("ОбменЗарплата3Бухгалтерия3");
        
        // Вместо стандартного ПланыОбмена.ЗарегистрироватьИзменения(Узлы, РегистрируемаяСсылка)
        // используем метод БСП с параметром ВыполнитьКонтрольМиграции = Ложь
        Для Каждого Узел Из Узлы Цикл
            ОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных(Узел, РегистрируемаяСсылка, Ложь);
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры

В данном коде ключевым является использование функции ОбменДаннымиСобытия.ЗарегистрироватьИзмененияДанных. Третий параметр этой функции — Ложь — отключает проверку правил миграции. Таким образом, объект попадет в файл обмена безусловно, игнорируя настройки «выгрузки при необходимости».

Способ 2. Изменение правил регистрации объектов (RegistrationRules.xml)

Если вы не хотите вносить изменения в программный код модулей, можно отредактировать Правила регистрации данных. Эти правила определяют логику поведения объектов при обмене. Рассмотрим, какие изменения необходимо внести в XML-файл правил для справочника ФизическиеЛица.

Посмотрим на пример настройки правила:

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

Пример фрагмента правила:


<Правило Отключить="false" Валидное="true">
    <Код>000000027</Код>
    <Наименование>Физические лица</Наименование>
    <ОбъектМетаданныхИмя>Справочник.ФизическиеЛица</ОбъектМетаданныхИмя>
    <ПередОбработкой>
        // Убираем лишние фильтры, которые могут блокировать выгрузку карточки
        Если Объект.ЭтоГруппа Тогда
            Отказ = Истина;
        КонецЕсли;
    </ПередОбработкой>
</Правило>

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

Способ 3. Проверка настроек в интерфейсе программы

Прежде чем переходить к программированию, следует убедиться, что проблема не вызвана базовыми настройками синхронизации. Проанализируем ситуацию через форму «Состав отправляемых данных»:

  1. Откройте настройки синхронизации данных.
  2. Нажмите кнопку «Состав отправляемых данных» (иконка с синим монитором).
  3. В открывшемся окне найдите справочник Физические лица.
  4. Перейдите в меню «Еще» -> «Настройка».
  5. Попробуйте сбросить флаг «Использовать при регистрации изменений объекта ограничения миграции данных».

Этот флаг напрямую влияет на то, будет ли система применять сложные фильтры (например, по организации) в момент регистрации изменений. Однако стоит помнить, что в некоторых версиях конфигураций этот флаг влияет только на ручную регистрацию через эту форму, а не на автоматическую при записи объекта.

Дополнительные рекомендации

Разберем еще несколько нюансов, которые могут влиять на перенос физлиц:

Используя предложенный программный метод с параметром ВыполнитьКонтрольМиграции = Ложь, вы гарантированно обеспечите попадание новых физических лиц в файл обмена, что решит проблему их отсутствия в базе «1С:Бухгалтерия».

← На главную