При настройке синхронизации данных между конфигурациями «1С:Управление торговлей» (ред. 11) и «1С:Бухгалтерия предприятия» (ред. 3.0) технические специалисты часто сталкиваются со следующей проблемой. Обмен проходит без видимых ошибок и предупреждений, новые или измененные документы и справочники успешно появляются в базе-приемнике. Однако при повторном запуске обмена система начинает заново выгружать те же самые объекты. Если открыть состав отправляемых данных, выясняется, что выгруженные объекты так и остались зарегистрированными на узле плана обмена.
В этой статье мы подробно разберем, как устроен механизм подтверждения доставки данных, почему он может давать сбой и как по шагам устранить проблему бесконечной повторной отправки объектов.
Для того чтобы понять, почему объекты зависают в регистрации, нам необходимо детально проанализировать логику платформенного механизма обмена. Стандартная синхронизация 1С (особенно на базе формата EnterpriseData) работает по принципу так называемого «тройного рукопожатия». Процесс обмена состоит из следующих этапов:
НомерОтправленного = 15). Все отправленные объекты фиксируются в транзакции как привязанные к сообщению № 15.НомерПринятого.Если этот цикл разрывается на любом этапе, УТ «не знает», дошли ли данные до БП, и в целях безопасности оставляет их зарегистрированными, чтобы отправить повторно при следующем сеансе. Если в мониторе обмена УТ вы видите статус «Данные загружены: Никогда», это главный признак того, что УТ ни разу не смогла успешно прочитать квитанцию от БП.
Одной из наиболее частых причин сбоя автосогласования является незаполненный или несовпадающий формат обмена на стороне информационной базы-приемника. Обычно формат обмена должен определяться автоматически после первого тестового сеанса, но при больших объемах первоначальных данных или системных сбоях автоматика отказывает.
Проанализируем алгоритм ручной настройки формата обмена в «1С:Бухгалтерия предприятия»:
Еще -> Изменить форму и установить флажок напротив элемента формы СлужебнаяИнформация.1.3, 1.5 или более поздние актуальные версии).Когда вы запускаете обмен в первый раз, количество зарегистрированных объектов может превышать десятки и сотни тысяч записей (например, справочники номенклатуры, контрагентов, партнеров и накопленные за годы документы). Попытка передать все 120 000 объектов за один раз при прямом COM-соединении часто приводит к аварийному завершению процесса из-за нехватки памяти на сервере, превышения времени ожидания транзакции или блокировок таблиц СУБД.
Выясним, как правильно выполнить первый запуск синхронизации без зависания регистрации:
Перед тем как выгружать реальные данные, полностью очистите регистрацию изменений на узле обмена в УТ. Для этого воспользуемся обработкой Регистрация изменений для обмена данными (ее можно открыть через монитор синхронизации или через «Функции для технического специалиста»). Выделим корневой узел и нажмем Отменить регистрацию всех объектов.
После этого запустим синхронизацию. Базы обменяются пустыми техническими пакетами. БП определит максимальный поддерживаемый формат, пропишет его у себя, отправит квитанцию обратно в УТ, и статус загрузки в УТ сменится с «Никогда» на текущую дату. Теперь «рукопожатие» настроено.
Не пытайтесь отправить все справочники и документы в одной куче. Сначала зарегистрируйте только базовые классификаторы (валюты, единицы измерения, ставки НДС) и выполните обмен. Затем зарегистрируйте справочники контрагентов и партнеров. На третьем этапе — номенклатуру. И только после успешного переноса нормативно-справочной информации (НСИ) переходите к регистрации документов.
Для порционной регистрации в обработке Регистрация изменений для обмена данными нажмите кнопку Зарегистрировать изменения, выберите конкретный тип объекта (например, справочник Номенклатура) и установите отбор (например, по группе или по ссылке), чтобы переносить данные небольшими частями по 5 000 – 10 000 элементов.
Если одна из баз восстанавливалась из архивной копии или правила обмена пересоздавались заново, счетчики номеров сообщений в УТ и БП неизбежно разойдутся. Например, УТ отправляет сообщение под номером 45, а БП считает, что последнее отправленное ею сообщение было под номером 12, и ожидает от УТ подтверждения более ранних транзакций. Произойдет рассинхронизация, и квитанции перестанут приниматься.
Рассмотрим по шагам, как выровнять номера сообщений вручную:
Регистрация изменений для обмена данными.Настройка (в некоторых интерфейсах она называется Изменить номера сообщений).Номер отправленного сообщения и Номер принятого сообщения.0.Пример структуры заголовка XML-файла обмена, который формируется платформой при выгрузке, выглядит следующим образом. Обратите внимание на параметры MessageNo (номер текущего сообщения) и ReceivedNo (номер принятого сообщения, то самое подтверждение):
<Header>
<FormatVersion>1.5</FormatVersion>
<CreationDate>2023-11-15T10:30:00</CreationDate>
<Source>УТ</Source>
<Destination>БП</Destination>
<MessageNo>1</MessageNo>
<ReceivedNo>1</ReceivedNo>
</Header>
После установки номеров в 0 выполните один цикл обмена. Базы автоматически присвоят первому пакету номер 1 и корректно зафиксируют квитирование.
Если обмен настроен через прямое подключение к базе-приемнику, весь процесс выполняется в рамках одной общей транзакции. Если при записи хотя бы одного документа на стороне БП происходит некритичная на первый взгляд ошибка (например, сработал некорректный код в подписке на событие ПриЗаписи, не заполнено обязательное субконто или заблокирована таблица базы данных), платформа выполняет полный откат транзакции.
В этом случае данные в интерфейсе БП могут не появиться, но счетчик отправки в УТ увеличится. При этом запись о получении квитанции в узел обмена БП не запишется. Для локализации этой проблемы выполните следующие действия:
Журнал регистрации в БП. Отфильтруйте записи по событию Обмен данными. Здесь вы увидите подробное описание ошибок (например, ошибки XDTO-сериализации, несоответствие типов или незаполненные реквизиты), которые блокировали успешное завершение транзакции.Администратор или специализированной ролью Выполнение синхронизации данных. Без достаточных прав СУБД заблокирует запись квитанций в служебные регистры сведений (такие как СоответствиеОбъектовИнформационныхБаз).