При настройке и выполнении обмена данными между конфигурациями «Управление торговлей 10.3» и «Бухгалтерия предприятия 3.0» нередко возникает коллизия: документы нового года (например, №50 и №51 за 2017 год) при загрузке в бухгалтерию перезаписывают собой документы с аналогичными номерами за прошлый год (2016 год). При этом последующая выгрузка документов прошлого года затирает документы текущего года обратно.
Разберем подробнее, почему возникает такое поведение платформы и правил обмена, как устроена логика сопоставления объектов и как исправить эту ошибку.
Проанализируем ситуацию и механизм работы конвертации данных («Конвертация данных 2.0» / механизмы БСП):
НайтиПоНомеру(Номер, ДатаИнтервала). Если в правилах конвертации объектов (ПКО) задан поиск по номеру и дате, но не включен признак точного совпадения даты, поиск выполняется не по конкретному значению даты, а по всему интервалу периодичности нумерации. В результате документ нового года ошибочно сопоставляется с документом прошлого года.СоответствияОбъектовИнформационныхБаз. Даже если после этого изменить номер документа в базе-источнике, обмен будет продолжать ориентироваться на уже записанную связку GUID.Рассмотрим, как скорректировать правила конвертации в конфигурации «Конвертация данных»:
Дата.
УстановитьАтрибут(УзелСвойства, "ПоискПоДатеНаРавенство", Истина);
Если сопоставление уже произошло, изменение правил само по себе не разделит уже «склеенные» объекты, так как в базе БП 3.0 зафиксирована связка в служебном регистре. Разберем по шагам, как очистить соответствия:
СоответствияОбъектовИнформационныхБаз.Если стандартный поиск по полям поиска работает некорректно из-за специфики учета, настроим собственный алгоритм поиска в событии ПКО «Поля поиска» на стороне приемника:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Док.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Док
|ГДЕ
| Док.Номер = &Номер
| И Док.Организация = &Организация
| И Док.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ГОД) И КОНЕЦПЕРИОДА(&Дата, ГОД)";
Запрос.УстановитьПараметр("Номер", СвойстваПоиска["Номер"]);
Запрос.УстановитьПараметр("Организация", СвойстваПоиска["Организация"]);
Запрос.УстановитьПараметр("Дата", СвойстваПоиска["Дата"]);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СсылкаНаОбъект = Выборка.Ссылка;
Иначе
СсылкаНаОбъект = Неопределено;
КонецЕсли;
СсылкаНаОбъект остается равной Неопределено, что приведет к созданию нового документа с корректным GUID без затирания документов прошлых лет.Убедимся, что в ПКО в список полей поиска включен не только Номер и Дата, но и реквизит Организация. В противном случае документы с одинаковыми номерами, выписанные по разным организациям в один день, также будут перезаписывать друг друга.