При организации многостороннего обмена данными в среде 1С, когда несколько баз-источников (например, две базы УНФ с разными индивидуальными предпринимателями) выгружают данные в одну общую базу-приемник (БП), часто возникает неприятная техническая коллизия. Документы одной организации начинают непроизвольно замещаться документами другой организации. При этом номера и даты документов остаются прежними, но меняется организация, суммы, контрагенты и табличные части. В результате в учете одной из организаций полностью пропадают проведенные документы, ломая книгу доходов и расходов и другие аналитические отчеты.
В этой статье мы подробно разберем, почему возникает эта проблема на уровне платформы 1С, рассмотрим механизм сопоставления объектов «под капотом» и предоставим пошаговый алгоритм для системного исправления ситуации без необходимости ручного ввода документов.
Для того чтобы понять, почему происходит замещение документов до бесконечности, проанализируем внутренний механизм синхронизации данных. Платформа 1С использует два основных эшелона идентификации объектов при обмене:
Соответствие объектов для обмена.Приходный кассовый ордер и Расходный кассовый ордер) ключевыми полями поиска по умолчанию являются Дата, Номер и Организация (или только Дата и Номер в некоторых редакциях правил).Исходя из этого, выделим две основные технические причины перезаписи документов:
UUID. При синхронизации база БП считает их одним и тем же объектом и просто обновляет данные последней пришедшей выгрузки.УНФ). При загрузке документов по ИП Иванову система ищет в БП документ с номером «000001» от «01.12.2023». Натыкаясь на уже существующий документ ИП Петрова с такими же реквизитами, система ошибочно сопоставляет их, связывает их UUID в регистре сопоставления и перезаписывает документ данными Иванова. При следующей выгрузке Петрова процесс повторяется в обратную сторону.Разберем детальный план действий по устранению этой системной ошибки и предотвращению ее появления в будущем.
Для того чтобы номера документов в разных информационных базах никогда не пересекались, необходимо правильно настроить систему префиксов. Полный номер документа в системе 1С формируется по следующей схеме:
[Префикс организации] + [Префикс информационной базы] + [Номер документа]
Выполним настройку в базах источниках и приемнике:
УНФ. Установим уникальные префиксы. Например, для ИП Иванова укажем префикс «ИВ», а для ИП Петрова — «ПЕ».УНФ присвоим префикс «У1», а второй — «У2». Базе БП назначим префикс «БП».При такой настройке новый документ в первой базе получит номер ИВУ1-000001, а во второй — ПЕУ2-000001. Эти номера гарантированно уникальны и никогда не пересекутся в базе БП.
Часто архитектурная ошибка кроется в том, что обе базы УНФ подключаются к одному и тому же узлу обмена в базе БП. Проанализируем это и настроим синхронизацию правильно:
БП должно быть создано два отдельных узла синхронизации (две разные настройки подключения).Выгружать/загружать данные только по организации ИП Иванов.ИП Петров.Если документы уже сопоставились неверно, простая настройка префиксов для старых документов не поможет, так как в регистре сведений Соответствие объектов для обмена базы БП уже жестко прописана связь между уникальными идентификаторами документов из разных баз. Эту связь необходимо разорвать.
Выполним очистку ошибочных записей сопоставления:
БП откроем меню «Функции для технического специалиста» (в старых версиях — «Все функции»).Соответствие объектов для обмена.ДокументСсылка.ПоступлениеВКассу или ДокументСсылка.РасходСоСчета).УНФ одного предпринимателя сопоставлен с документом другого предпринимателя в БП, и удалим эти записи.Для автоматизации этого процесса при большом объеме данных программист может использовать следующий код внешней обработки:
// Пример очистки некорректных связей сопоставления объектов программным путем
УзелИванова = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоКоду("УНФ_ИП_ИВАНОВ");
Если Не УзелИванова.Пустая() Тогда
НаборЗаписей = РегистрыСведений.СоответствиеОбъектовДляОбмена.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.УзелИнформационнойБазы.Установить(УзелИванова);
НаборЗаписей.Отбор.ТипПриемника.Установить("ДокументСсылка.ПоступлениеВКассу");
НаборЗаписей.Прочитать();
ТаблицаЗаписей = НаборЗаписей.Выгрузить();
Индекс = ТаблицаЗаписей.Количество() - 1;
Пока Индекс >= 0 Цикл
СтрокаЗаписи = ТаблицаЗаписей[Индекс];
ДокументБП = СтрокаЗаписи.СобственныйОбъект;
// Если сопоставленный документ в БП принадлежит другой организации, удаляем запись сопоставления
Если ДокументБП.Организация <> Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701234567") Тогда
ТаблицаЗаписей.Удалить(Индекс);
КонецЕсли;
Индекс = Индекс - 1;
КонецЦикла;
НаборЗаписей.Загрузить(ТаблицаЗаписей);
НаборЗаписей.Записать(Истина);
Сообщить("Очистка некорректных связей сопоставления успешно завершена.");
КонецЕсли;
После очистки связей необходимо привести номера документов в базах-источниках к единому стандарту с учетом новых префиксов, чтобы при повторной загрузке они не сопоставились некорректно по естественным ключам.
УНФ воспользуемся типовой обработкой Групповое изменение реквизитов (или встроенной обработкой перенумерации документов).УНФ перейдем в форму «Синхронизация данных» — «Состав отправляемых данных».В результате этих действий база БП примет измененные документы как абсолютно новые и уникальные объекты. Ранее затертые документы восстановятся под своими правильными номерами, сопоставление произойдет корректно, а затирание данных при последующих обменах полностью прекратится.