Почему объект не уходит в другую базу и как поставить его в очередь обмена через EnterpriseData
Содержание
Объект попадает в обмен 1С только тогда, когда он зарегистрирован в таблице изменений плана обмена для конкретного узла-получателя. Обычно это делает сама программа: при записи документа или справочника срабатывает авторегистрация или правила регистрации, а синхронизация через формат EnterpriseData выгружает всё, что накопилось в очереди.
Если документ есть в одной базе, а в другую не пришёл, почти всегда виноват один из трёх моментов: объект отсечён отбором, он не входит в состав плана обмена или его регистрацию сняли раньше времени. Каждый из них проверяется за пару минут, а зарегистрировать объекты для обмена вручную можно, не ломая нумерацию сообщений.
Что подготовить перед настройкой синхронизации
Регистрация работает только внутри настроенного обмена. Поэтому сначала проверьте базовые вещи в обеих базах.
- Включите синхронизацию:
Администрирование → Синхронизация данных, флажок «Синхронизация данных». - Задайте префикс информационной базы на той же странице. У баз-участников префиксы должны различаться, иначе номера документов будут конфликтовать.
- Сделайте резервные копии обеих баз. Первая синхронизация меняет данные в приёмнике, и откатить её можно только из копии.
- Договоритесь, какая база главная по справочникам. Обычно это база, где ведут номенклатуру и контрагентов.
Какой тип синхронизации выбрать
Типовые конфигурации на БСП (Бухгалтерия 3.0, Управление торговлей 11, Комплексная автоматизация, УНФ, Розница) обмениваются через формат EnterpriseData. Правила конвертации и регистрации уже зашиты в конфигурацию, писать их не нужно.
| Транспорт | Когда подходит | На что смотреть |
|---|---|---|
| Сетевой каталог | Базы в одной локальной сети | Права на папку у пользователя, от которого работает сервер 1С |
| FTP | Базы в разных офисах | Пассивный режим, стабильность канала |
| Электронная почта | Редкие обмены, нет общей сети | Ограничения размера вложений |
| Прямое подключение (COM или веб-сервис) | Нужен обмен «по кнопке» без файлов | Для COM — зарегистрированный comcntr.dll; для веб-сервиса — опубликованная база |
| Через интернет (сервис 1С) | Одна из баз в облаке | Логин и пароль интернет-поддержки |
Выбор транспорта на регистрацию не влияет: очередь изменений одинакова для любого способа доставки. Транспорт решает только, как файл сообщения дойдёт до второй базы.
Как устроен план обмена и что в нём регистрируется
План обмена — объект конфигурации, который описывает, с кем и чем база обменивается. Он хранит две вещи.
- 📦 Состав — список объектов метаданных, которые вообще могут участвовать в обмене: справочники, документы, регистры, константы.
- 🔗 Узлы — записи плана обмена. Один узел обозначает саму базу (
ЭтотУзел), остальные — базы-получатели.
Для каждого объекта из состава в конфигураторе задано свойство «Авторегистрация»: «Разрешить» или «Запретить». При «Разрешить» платформа регистрирует изменение на всех узлах сама при каждой записи объекта.
В типовых конфигурациях для EnterpriseData авторегистрация обычно запрещена. Вместо неё работают правила регистрации объектов (ПРО). Это подписки на события записи и удаления, которые проверяют отборы узла: организацию, дату, склад. Правила хранятся в макете плана обмена и вызываются при каждой записи объекта.
Если вы дорабатываете конфигурацию и добавили новый документ, его недостаточно включить в состав плана обмена. Нужно ещё правило регистрации и правило конвертации в формат EnterpriseData. Без них объект не встанет в очередь или выгрузится пустым.
Механизм регистрации изменений: узлы и номера сообщений
Для каждого объекта из состава плана обмена платформа ведёт таблицу изменений. В ней три ключевых поля:
Узел— кому объект нужно отправить;Ссылка(для регистров — измерения илиРегистратор) — что отправить;НомерСообщения— в каком сообщении объект ушёл. Пока сообщение не сформировано, здесьNULL.
Цикл выглядит так:
- Пользователь записал документ → правило регистрации добавило строку для узла «Торговля» с
НомерСообщения = NULL. - Запустилась синхронизация → документ попал в сообщение № 57, в таблице изменений появился номер 57.
- Вторая база загрузила сообщение и в ответном пакете подтвердила: «принято № 57».
- Первая база получила подтверждение и удалила регистрацию всех объектов с номером 57 и меньше.
Отсюда важное следствие. Пока подтверждение не пришло, объект остаётся в очереди и уходит повторно в каждом следующем сообщении. Это нормально: дубля в приёмнике не будет, объект просто перезапишется.
Как посмотреть, что стоит в очереди
Самый быстрый способ — запрос к таблице изменений в консоли запросов (режим 1С:Предприятие, внешняя обработка):
ВЫБРАТЬ
Изменения.Узел КАК Узел,
Изменения.Ссылка КАК Документ,
Изменения.НомерСообщения КАК НомерСообщения
ИЗ
Документ.РеализацияТоваровУслуг.Изменения КАК Изменения
УПОРЯДОЧИТЬ ПО
Изменения.НомерСообщения
Строки с пустым номером ещё не отправлены. Строки с номером отправлены, но подтверждения нет. Если документа в результате нет совсем, он не зарегистрирован, и проблема в регистрации, а не в доставке.
Номера отправленного и принятого сообщений хранятся в самом узле: реквизиты НомерОтправленного и НомерПринятого. Их удобно сравнить в обеих базах, когда кажется, что обмен «завис».
Чем РИБ отличается от обмена через EnterpriseData
В распределённой информационной базе (РИБ) конфигурации у узлов одинаковые, и регистрация устроена проще. Почти все объекты состава плана обмена имеют авторегистрацию «Разрешить», данные передаются как есть, без конвертации в формат.
| Признак | РИБ | EnterpriseData |
|---|---|---|
| Конфигурации баз | Одинаковые | Разные (БП, УТ, УНФ и т. д.) |
| Кто регистрирует | Платформа, авторегистрация | Правила регистрации с отборами |
| Изменения конфигурации | Передаются из главного узла | Не передаются |
| Типичный отбор | По организации или складу узла | По организациям, дате, видам документов |
Практический вывод: в РИБ объект «не уехал» чаще из-за транспорта или ошибки загрузки, а в EnterpriseData — из-за отбора. С этого и начинайте поиск.
Отборы и фильтры: как не гонять лишние данные
Отборы задаются при настройке синхронизации, на шаге правил отправки и получения данных. Позже их можно поменять в карточке настройки: Администрирование → Синхронизация данных → Настройки синхронизации данных, двойной щелчок по нужной настройке.
Типовые отборы для EnterpriseData:
- 🏢 По организациям — в обмен идут документы только выбранных юрлиц.
- 📅 По дате начала — документы раньше этой даты не регистрируются.
- 📑 По составу документов — какие виды документов отправлять: все, только первичку, без кассовых.
- 🗂 Справочники — отправлять все или только те, что встречаются в документах.
Отбор проверяется в момент записи объекта. Это главный подвох. Если документ записали, когда его организация не входила в отбор, он не зарегистрировался. Добавление организации в отбор задним числом не поставит старые документы в очередь. Их нужно зарегистрировать отдельно.
Пример. В отборе стояла только ООО «Альфа». 1 марта добавили ООО «Бета», у которой с января уже 340 реализаций. После следующей синхронизации во вторую базу уйдут только документы «Беты», записанные после 1 марта. Остальные 340 придётся поставить в очередь одним из способов ниже — иначе обороты по 62 счёту в двух базах разойдутся ровно на сумму январских и февральских отгрузок.
Режим «отправлять все справочники» на базе с десятками тысяч номенклатурных позиций делает первое сообщение огромным. Для таких баз выбирайте выгрузку справочников по мере использования в документах: в формате EnterpriseData ссылочные объекты выгружаются вместе с документом, в котором они встречаются.
Регистрация вручную после смены отборов
Есть два рабочих пути.
Через карточку настройки синхронизации. В формах БСП есть команда просмотра состава отправляемых данных (в разных релизах она может называться немного по-разному). Там видно, какие объекты стоят в очереди, и можно добавить или снять регистрацию для выбранных объектов или целого вида данных.
Через перезапись объекта. Для единичных документов достаточно открыть документ и перепровести его. Правило регистрации сработает заново и уже с новыми отборами. Не перепроводите так документы закрытого периода: это сбросит проведённое закрытие месяца .
Программно, если документов сотни. Пример для внешней обработки, которая регистрирует реализации за период для узла:
&НаСервере
Процедура ЗарегистрироватьРеализацииНаСервере(Узел, НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Док.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Док
|ГДЕ
| Док.Дата МЕЖДУ &Начало И &Конец
| И Док.Проведен";
Запрос.УстановитьПараметр("Начало", НачалоПериода);
Запрос.УстановитьПараметр("Конец", КонецДня(КонецПериода));
Выборка = Запрос.Выполнить().Выбрать();
Количество = 0;
Пока Выборка.Следующий() Цикл
ПланыОбмена.ЗарегистрироватьИзменения(Узел, Выборка.Ссылка);
Количество = Количество + 1;
КонецЦикла;
Сообщить(СтрШаблон("Зарегистрировано документов: %1", Количество));
КонецПроцедуры
ПланыОбмена.ЗарегистрироватьИзменения ставит объект в очередь напрямую, минуя правила регистрации и отборы. Поэтому сначала убедитесь, что документы действительно нужны во второй базе. Обратная операция — ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные).
Когда регистрация не срабатывает: симптомы и причины
Отдельно о пакетной очистке очереди. Иногда советуют снять всю регистрацию изменений по узлу, чтобы «разморозить» обмен. Это допустимо только когда вы точно знаете, что обе базы уже содержат одни и те же данные. Иначе часть документов не уедет никогда, и расхождение всплывёт на сверке через месяц.
Не меняйте вручную НомерОтправленного и НомерПринятого в узлах, если не понимаете, к чему это приведёт. Сбитая нумерация заставит приёмник отклонять сообщения или, наоборот, принять старое сообщение повторно.
Начальная выгрузка и проверка целостности данных
Когда синхронизация настроена впервые, в очереди ещё ничего нет: документы созданы до появления узла. Для этого помощник настройки предлагает начальную выгрузку. Она регистрирует все объекты, подходящие под отборы, и отправляет их первым пакетом.
Порядок, который избавляет от дублей справочников:
- В базе-приёмнике выполните сопоставление данных: программа предложит связать контрагентов по ИНН, номенклатуру по наименованию и артикулу. Проверьте строки, которые не сопоставились автоматически.
- Только после сопоставления запускайте загрузку. Иначе каждый несопоставленный контрагент создастся вторым экземпляром.
- Выполните первую полную синхронизацию в обе стороны и убедитесь, что каждая база получила подтверждение.
- Сверьте результат: количество документов за месяц по организации в обеих базах, оборотно-сальдовые ведомости по счетам 60, 62, 41 — если обмен идёт между торговой и бухгалтерской базой.
Регламентная синхронизация
Ручной запуск подходит для проверки. Для работы настройте расписание в карточке синхронизации: например, раз в час в рабочее время. В файловой базе регламентные задания выполняются только при открытом сеансе пользователя, поэтому для файлового варианта надёжнее серверная база или запуск по расписанию из отдельного сеанса.