Почему при синхронизации УТ 11 и БП 3.0 двоятся документы и появляется префикс «У»?

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

Синхронизация данных между конфигурациями 1С:Управление торговлей 11 (УТ) и 1С:Бухгалтерия предприятия 3.0 (БП) — один из самых популярных и одновременно чувствительных механизмов в экосистеме 1С. Любые отклонения от стандартного сценария работы могут приводить к нежелательным последствиям: дублированию документов, искажению нумерации и появлению «лишних» префиксов.

В этой статье мы подробно разберем классическую проблему, с которой сталкиваются многие администраторы и программисты 1С. Сценарий следующий: в УТ 11 создается документ «Акт об оказании услуг» с номером 000001. После выгрузки в БП 3.0 документ получает номер У000001. При последующей обратной синхронизации этот же документ возвращается в УТ 11, но уже как новый объект с номером У000001, образуя дубликат. Рассмотрим причины этой проблемы и разберем по шагам, как вернуть обмен в штатный режим.

Причина 1. Почему в БП появляется префикс «У»?

При настройке синхронизации данных между различными базами 1С каждой информационной базе присваивается свой уникальный буквенный код — префикс информационной базы. Для торговли часто используют префикс «УТ» (или сокращенно «У»), а для бухгалтерии — «БП».

Когда документ выгружается из УТ в БП, система автоматически добавляет к его номеру префикс базы-отправителя. Превращение номера 000001 в У000001 — это стандартное системное поведение платформы 1С. Данный механизм решает две важнейшие задачи:

  1. Предотвращение конфликтов уникальности номеров (коллизий). Если в БП бухгалтер вручную создаст аналогичный документ с номером 000001, то без префикса загружаемый из УТ документ просто не сможет записаться в базу из-за неуникальности номера.
  2. Визуальная идентификация источника данных. Бухгалтер сразу видит по префиксу, что документ пришел из внешней торговой базы, а не был создан непосредственно в БП.

Кроме того, в правилах обмена заложена логика конвертации типов. Несколько различных типов документов из УТ 11 могут трансформироваться в один и тот же тип документа в БП 3.0. Чтобы номера этих документов не пересекались внутри одной таблицы в БП, им также присваиваются соответствующие служебные префиксы.

Причина 2. Почему при обратной выгрузке в УТ создается дубликат?

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

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

В рассматриваемой нами ситуации произошел сбой на первом этапе. Соответствие по GUID в регистре сопоставления не записалось (или было разрушено). Это могло произойти по следующим причинам:

Когда документ с номером У000001 регистрируется к отправке из БП в УТ, на стороне УТ происходит поиск. Так как запись в регистре соответствия по GUID отсутствует, система переходит ко второму этапу — поиску по полям «Номер» + «Дата». УТ ищет у себя документ с номером У000001. Но в УТ оригинальный документ хранится под номером 000001 (без префикса). Система не находит совпадений, считает пришедший документ абсолютно новым и создает его дубликат.

Причина 3. Почему торговые документы вообще выгружаются из БП в УТ?

В типовом сценарии совместного использования УТ 11 и БП 3.0 движение документов должно быть строго регламентировано. Торговые документы (реализации, акты, поступления, складские ордера) создаются в УТ 11 и мигрируют в БП 3.0 в одностороннем порядке. Обратно, из БП в УТ, должны возвращаться только документы движения денежных средств (банковские выписки, кассовые ордера) для контроля взаиморасчетов, а также информация о проведении документов.

Если акты и реализации выгружаются из БП в УТ — это явная ошибка в настройках синхронизации на стороне БП 3.0. Либо в настройках отправки документов выбрано значение «Отправлять все», либо пользователи вручную зарегистрировали эти документы к обмену.

Пошаговый план решения проблемы

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

Шаг 1. Корректировка настроек синхронизации на стороне БП 3.0

Выясним причину избыточного экспорта данных из бухгалтерии. Нам необходимо запретить выгрузку документов реализации и актов обратно в торговую базу.

  1. Перейдем в БП 3.0 в раздел Администрирование — Синхронизация данных.
  2. Откроем Настройки синхронизации данных.
  3. Выберем нашу настройку обмена с УТ 11 и нажмем кнопку Изменить настройки.
  4. На вкладке Правила отправки данных найдем раздел Документы.
  5. Установим значение Не отправлять (или настроим отправку только документов cash-flow: платежных поручений, кассовых ордеров).
  6. Сохраним настройки.

Шаг 2. Очистка нежелательной регистрации изменений в БП 3.0

Даже после изменения настроек в очереди обмена БП могли остаться уже зарегистрированные к отправке акты. Их нужно удалить из регистрации вручную.

  1. В настройках синхронизации нажмем кнопку Состав отправляемых данных (иконка с синим блокнотом и карандашом).
  2. В открывшемся дереве объектов найдем документ «Акт об оказании услуг» или «Реализация товаров и услуг».
  3. Если напротив этих объектов стоит ненулевое количество зарегистрированных изменений, раскроем список, выделим все документы, нажмем правую кнопку мыши и выберем пункт Отменить регистрацию.

Шаг 3. Удаление дубликатов в УТ 11

Теперь наведем порядок в торговой базе, где уже успели создаться дубли документов с префиксом «У».

  1. Найдем все ошибочно созданные документы с префиксом «У» (например, У000001).
  2. Пометим их на удаление.
  3. Оригинальные документы без префикса (например, 000001) оставим нетронутыми.
  4. Для полной безопасности запустим стандартную обработку Поиск и удаление дублей (раздел Администрирование — Обслуживание — Корректировка данных), чтобы перенаправить все возможные движения и ссылки с дубликатов на оригинальные документы, созданные в УТ.

Шаг 4. Анализ регистра соответствий и восстановление GUID

Для того чтобы при последующих обменах документы корректно обновляли друг друга, а не плодили новые сущности, рекомендуется проверить состояние регистра сведений РегистрСведений.СоответствияОбъектовИнформационныхБаз. Это можно сделать с помощью обработки «Групповая обработка данных» или написав небольшой проверочный запрос в консоли запросов.

Рассмотрим пример запроса, с помощью которого программист может проверить связи сопоставления для конкретного типа документов:


ВЫБРАТЬ
	Соответствия.СобственныйОбъект КАК ДокументСсылка,
	Соответствия.УникальныйИдентификаторИсточника КАК GUID_ТекущейБазы,
	Соответствия.УникальныйИдентификаторПриемника КАК GUID_Приемника,
	Соответствия.ТипИсточника КАК ТипОбъекта
ИЗ
	РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК Соответствия
ГДЕ
	Соответствия.ТипИсточника ПОДОБНО &ТипДокумента

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

Если требуется исправить связи вручную программным путем, можно использовать следующий шаблон кода на языке 1С:


// Пример записи соответствия объектов вручную
НаборЗаписей = РегистрыСведений.СоответствияОбъектовИнформационныхБаз.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.СобственныйОбъект.Установить(СсылкаНаДокументУТ);

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

НаборЗаписей.Записать(Истина);

Использование этого кода позволяет принудительно связать два уже существующих документа в разных базах по их уникальным идентификаторам, после чего любые изменения в УТ будут успешно проецироваться на существующий документ в БП без риска создания дублей.

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

← На главную