Почему при выгрузке из УНФ в БП замещаются документы и как решить эту проблему?

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

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

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

Глубинная причина проблемы: как 1С сопоставляет объекты при обмене

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

  1. Поиск по уникальному идентификатору (UUID / GUID): Каждому создаваемому в базе объекту (справочнику, документу) присваивается скрытый 36-символьный код. Если документ регистрируется к обмену, система в первую очередь ищет его в базе-приемнике по этому идентификатору. Информация об успешном сопоставлении фиксируется в специальном регистре сведений Соответствие объектов для обмена.
  2. Поиск по полям поиска (Естественные ключи): Если по уникальному идентификатору объект в приемнике не найден (например, при самом первом обмене), система ищет его по правилам, прописанным в правилах конвертации. Для кассовых документов (таких как Приходный кассовый ордер и Расходный кассовый ордер) ключевыми полями поиска по умолчанию являются Дата, Номер и Организация (или только Дата и Номер в некоторых редакциях правил).

Исходя из этого, выделим две основные технические причины перезаписи документов:

Разберем детальный план действий по устранению этой системной ошибки и предотвращению ее появления в будущем.

Шаг 1. Настройка сквозной уникальной префиксации

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

[Префикс организации] + [Префикс информационной базы] + [Номер документа]

Выполним настройку в базах источниках и приемнике:

  1. Префикс организации: Перейдем в карточку организации в каждой базе УНФ. Установим уникальные префиксы. Например, для ИП Иванова укажем префикс «ИВ», а для ИП Петрова — «ПЕ».
  2. Префикс информационной базы: Перейдем в раздел «Администрирование» — «Синхронизация данных». Настроим уникальный префикс для каждой информационной базы. Например, первой базе УНФ присвоим префикс «У1», а второй — «У2». Базе БП назначим префикс «БП».

При такой настройке новый документ в первой базе получит номер ИВУ1-000001, а во второй — ПЕУ2-000001. Эти номера гарантированно уникальны и никогда не пересекутся в базе БП.

Шаг 2. Разделение узлов обмена в Бухгалтерии предприятия

Часто архитектурная ошибка кроется в том, что обе базы УНФ подключаются к одному и тому же узлу обмена в базе БП. Проанализируем это и настроим синхронизацию правильно:

Шаг 3. Очистка некорректных связей в регистре сопоставления

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

Выполним очистку ошибочных записей сопоставления:

  1. В базе БП откроем меню «Функции для технического специалиста» (в старых версиях — «Все функции»).
  2. Найдем и откроем регистр сведений Соответствие объектов для обмена.
  3. Установим отбор по узлу информационной базы (выберем проблемный узел обмена) и типу объекта (например, ДокументСсылка.ПоступлениеВКассу или ДокументСсылка.РасходСоСчета).
  4. Найдем записи, где документ из УНФ одного предпринимателя сопоставлен с документом другого предпринимателя в БП, и удалим эти записи.

Для автоматизации этого процесса при большом объеме данных программист может использовать следующий код внешней обработки:


// Пример очистки некорректных связей сопоставления объектов программным путем
УзелИванова = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("УНФ_ИП_ИВАНОВ");

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

Шаг 4. Групповая перенумерация старых документов и повторный обмен

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

  1. В базах УНФ воспользуемся типовой обработкой Групповое изменение реквизитов (или встроенной обработкой перенумерации документов).
  2. Для кассовых документов за прошлый период установим новые префиксы в номерах (например, заменим номер «000001» на «ИВУ1-000001» в базе Иванова и на «ПЕУ2-000001» в базе Петрова).
  3. После перенумерации в базах УНФ перейдем в форму «Синхронизация данных» — «Состав отправляемых данных».
  4. Принудительно зарегистрируем измененные кассовые документы за проблемный период к обмену.
  5. Запустим сеанс синхронизации данных.

В результате этих действий база БП примет измененные документы как абсолютно новые и уникальные объекты. Ранее затертые документы восстановятся под своими правильными номерами, сопоставление произойдет корректно, а затирание данных при последующих обменах полностью прекратится.

← На главную