Как направить данные на нужную организацию при обмене между 1С:ЗУП и 1С:Бухгалтерия, если в базе есть организации с одинаковыми ИНН и КПП?

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

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

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

Способ 1. Быстрое программное решение через подписку на событие «ПередЗаписью»

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

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

Посмотрим на пошаговую реализацию:

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

Посмотрим на пример программного кода обработчика события:


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

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

Способ 2. Корректировка правил обмена в «Конвертации данных» (рекомендуемый)

Проанализируем более надежное и архитектурно правильное решение — настройку правил обмена данными (ПКО) в конфигурации «1С:Конвертация данных 2.0».

Разберем по шагам варианты настройки сопоставления:

  1. Поиск по уникальному коду: В правиле конвертации объекта для справочника Организации включаем признак «Использовать для поиска» для реквизита Код. Предварительно выравниваем коды организаций в базах ЗУП и Бухгалтерии, чтобы они строго совпадали у нужной пары элементов.
  2. Переопределение алгоритма поиска: В ПКО справочника Организации переходим в обработчик Поля поиска и явно задаем логику сопоставления через программный код:

Если СвойстваПоиска["ИНН"] = "7700000000" Тогда
    СсылкаНаОбъект = Справочники.Организации.НайтиПоКоду("000000001");
    ПрекратитьПоиск = Истина;
КонецЕсли;

После изменения правил сохраняем результирующий XML-файл и подключаем его в обработку обмена или узел плана обмена на стороне источника как внешние правила конвертации.

Способ 3. Методическое устранение дублей организаций в учете

Рассмотрим первопричину проблемы с точки зрения методологии учета. Наличие двух карточек с одинаковыми ИНН и КПП в одной информационной базе является ошибкой ведения учета. Если дублирование создавалось бухгалтерией ради разделения отчетности или подразделений, правильным решением будет реорганизация структуры справочников:

  1. Для сдачи отчетности в разные налоговые инспекции регистрируются записи в справочнике Регистрации в налоговом органе и привязываются к обособленным подразделениям (справочник Подразделения), а не к отдельным организациям.
  2. Существующие дубли организаций объединяются в одну карточку с помощью типовой обработки Поиск и удаление дублей или обработки Поиск и замена значений.

Устранение дублей на уровне данных исключает неопределенность при сопоставлении объектов в любых обменах и предотвращает ошибки при закрытии месяца и формировании регламентированной отчетности.

← На главную