Синхронизация данных между конфигурациями 1С:Управление торговлей 11 (УТ) и 1С:Бухгалтерия предприятия 3.0 (БП) — один из самых популярных и одновременно чувствительных механизмов в экосистеме 1С. Любые отклонения от стандартного сценария работы могут приводить к нежелательным последствиям: дублированию документов, искажению нумерации и появлению «лишних» префиксов.
В этой статье мы подробно разберем классическую проблему, с которой сталкиваются многие администраторы и программисты 1С. Сценарий следующий: в УТ 11 создается документ «Акт об оказании услуг» с номером 000001. После выгрузки в БП 3.0 документ получает номер У000001. При последующей обратной синхронизации этот же документ возвращается в УТ 11, но уже как новый объект с номером У000001, образуя дубликат. Рассмотрим причины этой проблемы и разберем по шагам, как вернуть обмен в штатный режим.
При настройке синхронизации данных между различными базами 1С каждой информационной базе присваивается свой уникальный буквенный код — префикс информационной базы. Для торговли часто используют префикс «УТ» (или сокращенно «У»), а для бухгалтерии — «БП».
Когда документ выгружается из УТ в БП, система автоматически добавляет к его номеру префикс базы-отправителя. Превращение номера 000001 в У000001 — это стандартное системное поведение платформы 1С. Данный механизм решает две важнейшие задачи:
000001, то без префикса загружаемый из УТ документ просто не сможет записаться в базу из-за неуникальности номера.Кроме того, в правилах обмена заложена логика конвертации типов. Несколько различных типов документов из УТ 11 могут трансформироваться в один и тот же тип документа в БП 3.0. Чтобы номера этих документов не пересекались внутри одной таблицы в БП, им также присваиваются соответствующие служебные префиксы.
Для того чтобы понять, почему документ «раздваивается», проанализируем базовые принципы поиска и сопоставления объектов при синхронизации 1С. Обмен данными опирается на два основных эшелона сопоставления объектов:
РегистрСведений.СоответствияОбъектовИнформационныхБаз. При последующих обменах система сразу находит документ-приемник по этой связи, независимо от того, как изменились его номер или дата.В рассматриваемой нами ситуации произошел сбой на первом этапе. Соответствие по GUID в регистре сопоставления не записалось (или было разрушено). Это могло произойти по следующим причинам:
Когда документ с номером У000001 регистрируется к отправке из БП в УТ, на стороне УТ происходит поиск. Так как запись в регистре соответствия по GUID отсутствует, система переходит ко второму этапу — поиску по полям «Номер» + «Дата». УТ ищет у себя документ с номером У000001. Но в УТ оригинальный документ хранится под номером 000001 (без префикса). Система не находит совпадений, считает пришедший документ абсолютно новым и создает его дубликат.
В типовом сценарии совместного использования УТ 11 и БП 3.0 движение документов должно быть строго регламентировано. Торговые документы (реализации, акты, поступления, складские ордера) создаются в УТ 11 и мигрируют в БП 3.0 в одностороннем порядке. Обратно, из БП в УТ, должны возвращаться только документы движения денежных средств (банковские выписки, кассовые ордера) для контроля взаиморасчетов, а также информация о проведении документов.
Если акты и реализации выгружаются из БП в УТ — это явная ошибка в настройках синхронизации на стороне БП 3.0. Либо в настройках отправки документов выбрано значение «Отправлять все», либо пользователи вручную зарегистрировали эти документы к обмену.
Для того чтобы исправить сложившуюся ситуацию, необходимо выполнить комплекс последовательных действий в обеих базах данных.
Выясним причину избыточного экспорта данных из бухгалтерии. Нам необходимо запретить выгрузку документов реализации и актов обратно в торговую базу.
Даже после изменения настроек в очереди обмена БП могли остаться уже зарегистрированные к отправке акты. Их нужно удалить из регистрации вручную.
Теперь наведем порядок в торговой базе, где уже успели создаться дубли документов с префиксом «У».
У000001).000001) оставим нетронутыми.Для того чтобы при последующих обменах документы корректно обновляли друг друга, а не плодили новые сущности, рекомендуется проверить состояние регистра сведений РегистрСведений.СоответствияОбъектовИнформационныхБаз. Это можно сделать с помощью обработки «Групповая обработка данных» или написав небольшой проверочный запрос в консоли запросов.
Рассмотрим пример запроса, с помощью которого программист может проверить связи сопоставления для конкретного типа документов:
ВЫБРАТЬ
Соответствия.СобственныйОбъект КАК ДокументСсылка,
Соответствия.УникальныйИдентификаторИсточника КАК GUID_ТекущейБазы,
Соответствия.УникальныйИдентификаторПриемника КАК GUID_Приемника,
Соответствия.ТипИсточника КАК ТипОбъекта
ИЗ
РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК Соответствия
ГДЕ
Соответствия.ТипИсточника ПОДОБНО &ТипДокумента
Если для проблемных документов записи отсутствуют, сопоставление можно восстановить программно или с помощью встроенного интерактивного помощника сопоставления данных, который запускается в процессе выполнения очередной синхронизации при возникновении конфликтов.
Если требуется исправить связи вручную программным путем, можно использовать следующий шаблон кода на языке 1С:
// Пример записи соответствия объектов вручную
НаборЗаписей = РегистрыСведений.СоответствияОбъектовИнформационныхБаз.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.СобственныйОбъект.Установить(СсылкаНаДокументУТ);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.СобственныйОбъект = СсылкаНаДокументУТ;
НоваяЗапись.УникальныйИдентификаторИсточника = Строка(СсылкаНаДокументУТ.УникальныйИдентификатор());
НоваяЗапись.УникальныйИдентификаторПриемника = Строка(UUID_Документа_Из_БП);
НоваяЗапись.ТипИсточника = "ДокументСсылка.АктВыполненныхРаботных";
НоваяЗапись.ТипПриемника = "ДокументСсылка.РеализацияУслугПротивно";
НоваяЗапись.УзелИнформационнойБазы = УзелОбмена;
НаборЗаписей.Записать(Истина);
Использование этого кода позволяет принудительно связать два уже существующих документа в разных базах по их уникальным идентификаторам, после чего любые изменения в УТ будут успешно проецироваться на существующий документ в БП без риска создания дублей.
Выполнив эти шаги, мы полностью исключим появление дубликатов, упорядочим префиксы и обеспечим стабильную одностороннюю миграцию торговых документов в бухгалтерскую базу.