Синхронизация данных между филиалами в конфигурации Бит.Фитнес (как и в других решениях на платформе 1С:Предприятие 8) строится на механизме планов обмена. Когда этот механизм дает сбой, пользователи часто сталкиваются с ошибкой «Сообщение обмена было принято ранее». Это блокирует передачу актуальной информации о клиентах, абонементах и посещениях. В рамках данной статьи мы подробно разберем, почему возникает эта ситуация, как работают номера сообщений и как восстановить работоспособность системы без потери данных.
Для начала проанализируем, как 1С понимает, какой файл обмена является «новым», а какой — «старым». В каждом узле плана обмена хранятся два ключевых счетчика:
Когда База А отправляет файл Базе Б, она записывает в него свой номер. База Б, принимая файл, сравнивает номер в файле со своим значением Номер принятого сообщения. Если номер в файле меньше или равен уже принятому, система выдает ошибку. Это защитный механизм, предотвращающий повторную загрузку одних и тех же данных, что могло бы привести к конфликтам или избыточной нагрузке.
Рассмотрим подробнее ситуации, при которых счетчики в базах начинают «противоречить» друг другу:
Если вы столкнулись с ошибкой «Сообщение обмена было принято ранее», нам необходимо синхронизировать счетчики вручную. Для этого воспользуемся встроенной обработкой Регистрация изменений для обмена.
Рассмотрим по шагам процесс настройки для двух баз — Базы А и Базы Б:
Проанализируем пример. Если в Базе А Номер отправленного равен 150, то в Базе Б Номер принятого должен стоять 149. Тогда следующий файл от Базы А (с номером 150) будет успешно принят Базой Б.
Иногда правка номеров не помогает, и система начинает выдавать другую ошибку: «В каталоге обмена информацией не был обнаружен файл сообщения с данными». Это означает, что транспортный механизм (папка на диске или в облаке) работает некорректно.
Посмотрим, на что нужно обратить внимание при использовании Dropbox или других облаков:
Message_001_002 (Конфликтующая копия...), их нужно удалить, оставив только актуальные файлы с правильными именами.Часто возникает вопрос: не потеряем ли мы данные, если обнулим номера? Выясним это. В современных версиях Бит.Фитнес синхронизация объектов (клиентов, карт, документов) происходит по внутреннему идентификатору GUID (Уникальный Идентификатор).
Важные моменты:
GUID. Дубликатов (например, двух одинаковых клиентов) не возникнет.Для надежности, если произошел серьезный сбой, мы рекомендуем выполнить «полную перерегистрацию» данных. В обработке Регистрация изменений для обмена можно выбрать нужные типы объектов (например, все документы «Посещение») и добавить их в состав обмена вручную:
// Пример логики программной регистрации изменений (для ознакомления)
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Тип("ДокументСсылка.Бит_Посещение"));
Если интерфейс программы не дает полной картины, мы можем заглянуть «под капот» самого файла обмена. Откроем файл Message_XXX_YYY.xml любым текстовым редактором (например, Notepad++) и изучим заголовок:
<v8msg:Message>
<v8msg:Header>
<v8msg:ExchangePlan>Полный</v8msg:ExchangePlan>
<v8msg:To>ФЛ</v8msg:To>
<v8msg:From>ЦБ</v8msg:From>
<v8msg:MessageNo>150</v8msg:MessageNo>
<v8msg:ConfirmationNo>145</v8msg:ConfirmationNo>
</v8msg:Header>
</v8msg:Message>
Здесь MessageNo — это номер текущего сообщения, а ConfirmationNo — номер последнего сообщения, которое эта база приняла от партнера. Сверив эти цифры со значениями в 1С, вы точно поймете, в какой базе счетчик сбился.
Следуя этой инструкции, мы восстановим стабильный обмен данными в Бит.Фитнес и обеспечим актуальность информации во всех филиалах сети.