Почему объект не уходит в другую базу и как поставить его в очередь обмена через EnterpriseData

· 9 мин

Содержание

Объект попадает в обмен 1С только тогда, когда он зарегистрирован в таблице изменений плана обмена для конкретного узла-получателя. Обычно это делает сама программа: при записи документа или справочника срабатывает авторегистрация или правила регистрации, а синхронизация через формат EnterpriseData выгружает всё, что накопилось в очереди.

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

Что подготовить перед настройкой синхронизации

Регистрация работает только внутри настроенного обмена. Поэтому сначала проверьте базовые вещи в обеих базах.

  1. Включите синхронизацию: Администрирование → Синхронизация данных, флажок «Синхронизация данных».
  2. Задайте префикс информационной базы на той же странице. У баз-участников префиксы должны различаться, иначе номера документов будут конфликтовать.
  3. Сделайте резервные копии обеих баз. Первая синхронизация меняет данные в приёмнике, и откатить её можно только из копии.
  4. Договоритесь, какая база главная по справочникам. Обычно это база, где ведут номенклатуру и контрагентов.

Какой тип синхронизации выбрать

Типовые конфигурации на БСП (Бухгалтерия 3.0, Управление торговлей 11, Комплексная автоматизация, УНФ, Розница) обмениваются через формат EnterpriseData. Правила конвертации и регистрации уже зашиты в конфигурацию, писать их не нужно.

ТранспортКогда подходитНа что смотреть
Сетевой каталогБазы в одной локальной сетиПрава на папку у пользователя, от которого работает сервер 1С
FTPБазы в разных офисахПассивный режим, стабильность канала
Электронная почтаРедкие обмены, нет общей сетиОграничения размера вложений
Прямое подключение (COM или веб-сервис)Нужен обмен «по кнопке» без файловДля COM — зарегистрированный comcntr.dll; для веб-сервиса — опубликованная база
Через интернет (сервис 1С)Одна из баз в облакеЛогин и пароль интернет-поддержки

Выбор транспорта на регистрацию не влияет: очередь изменений одинакова для любого способа доставки. Транспорт решает только, как файл сообщения дойдёт до второй базы.

Как устроен план обмена и что в нём регистрируется

План обмена — объект конфигурации, который описывает, с кем и чем база обменивается. Он хранит две вещи.

  • 📦 Состав — список объектов метаданных, которые вообще могут участвовать в обмене: справочники, документы, регистры, константы.
  • 🔗 Узлы — записи плана обмена. Один узел обозначает саму базу (ЭтотУзел), остальные — базы-получатели.

Для каждого объекта из состава в конфигураторе задано свойство «Авторегистрация»: «Разрешить» или «Запретить». При «Разрешить» платформа регистрирует изменение на всех узлах сама при каждой записи объекта.

В типовых конфигурациях для EnterpriseData авторегистрация обычно запрещена. Вместо неё работают правила регистрации объектов (ПРО). Это подписки на события записи и удаления, которые проверяют отборы узла: организацию, дату, склад. Правила хранятся в макете плана обмена и вызываются при каждой записи объекта.

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

Механизм регистрации изменений: узлы и номера сообщений

Для каждого объекта из состава плана обмена платформа ведёт таблицу изменений. В ней три ключевых поля:

  • Узел — кому объект нужно отправить;
  • Ссылка (для регистров — измерения или Регистратор) — что отправить;
  • НомерСообщения — в каком сообщении объект ушёл. Пока сообщение не сформировано, здесь NULL.

Цикл выглядит так:

  1. Пользователь записал документ → правило регистрации добавило строку для узла «Торговля» с НомерСообщения = NULL.
  2. Запустилась синхронизация → документ попал в сообщение № 57, в таблице изменений появился номер 57.
  3. Вторая база загрузила сообщение и в ответном пакете подтвердила: «принято № 57».
  4. Первая база получила подтверждение и удалила регистрацию всех объектов с номером 57 и меньше.

Отсюда важное следствие. Пока подтверждение не пришло, объект остаётся в очереди и уходит повторно в каждом следующем сообщении. Это нормально: дубля в приёмнике не будет, объект просто перезапишется.

Как посмотреть, что стоит в очереди

Самый быстрый способ — запрос к таблице изменений в консоли запросов (режим 1С:Предприятие, внешняя обработка):

ВЫБРАТЬ
    Изменения.Узел КАК Узел,
    Изменения.Ссылка КАК Документ,
    Изменения.НомерСообщения КАК НомерСообщения
ИЗ
    Документ.РеализацияТоваровУслуг.Изменения КАК Изменения
УПОРЯДОЧИТЬ ПО
    Изменения.НомерСообщения

Строки с пустым номером ещё не отправлены. Строки с номером отправлены, но подтверждения нет. Если документа в результате нет совсем, он не зарегистрирован, и проблема в регистрации, а не в доставке.

Номера отправленного и принятого сообщений хранятся в самом узле: реквизиты НомерОтправленного и НомерПринятого. Их удобно сравнить в обеих базах, когда кажется, что обмен «завис».

Чем РИБ отличается от обмена через EnterpriseData

В распределённой информационной базе (РИБ) конфигурации у узлов одинаковые, и регистрация устроена проще. Почти все объекты состава плана обмена имеют авторегистрацию «Разрешить», данные передаются как есть, без конвертации в формат.

ПризнакРИБEnterpriseData
Конфигурации базОдинаковыеРазные (БП, УТ, УНФ и т. д.)
Кто регистрируетПлатформа, авторегистрацияПравила регистрации с отборами
Изменения конфигурацииПередаются из главного узлаНе передаются
Типичный отборПо организации или складу узлаПо организациям, дате, видам документов

Практический вывод: в РИБ объект «не уехал» чаще из-за транспорта или ошибки загрузки, а в EnterpriseData — из-за отбора. С этого и начинайте поиск.

Отборы и фильтры: как не гонять лишние данные

Отборы задаются при настройке синхронизации, на шаге правил отправки и получения данных. Позже их можно поменять в карточке настройки: Администрирование → Синхронизация данных → Настройки синхронизации данных, двойной щелчок по нужной настройке.

Типовые отборы для EnterpriseData:

  • 🏢 По организациям — в обмен идут документы только выбранных юрлиц.
  • 📅 По дате начала — документы раньше этой даты не регистрируются.
  • 📑 По составу документов — какие виды документов отправлять: все, только первичку, без кассовых.
  • 🗂 Справочники — отправлять все или только те, что встречаются в документах.

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

Пример. В отборе стояла только ООО «Альфа». 1 марта добавили ООО «Бета», у которой с января уже 340 реализаций. После следующей синхронизации во вторую базу уйдут только документы «Беты», записанные после 1 марта. Остальные 340 придётся поставить в очередь одним из способов ниже — иначе обороты по 62 счёту в двух базах разойдутся ровно на сумму январских и февральских отгрузок.

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

Регистрация вручную после смены отборов

Есть два рабочих пути.

Через карточку настройки синхронизации. В формах БСП есть команда просмотра состава отправляемых данных (в разных релизах она может называться немного по-разному). Там видно, какие объекты стоят в очереди, и можно добавить или снять регистрацию для выбранных объектов или целого вида данных.

Через перезапись объекта. Для единичных документов достаточно открыть документ и перепровести его. Правило регистрации сработает заново и уже с новыми отборами. Не перепроводите так документы закрытого периода: это сбросит проведённое закрытие месяца .

Программно, если документов сотни. Пример для внешней обработки, которая регистрирует реализации за период для узла:

&НаСервере
Процедура ЗарегистрироватьРеализацииНаСервере(Узел, НачалоПериода, КонецПериода)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Док.Ссылка КАК Ссылка
    |ИЗ
    |    Документ.РеализацияТоваровУслуг КАК Док
    |ГДЕ
    |    Док.Дата МЕЖДУ &Начало И &Конец
    |    И Док.Проведен";
    Запрос.УстановитьПараметр("Начало", НачалоПериода);
    Запрос.УстановитьПараметр("Конец", КонецДня(КонецПериода));

    Выборка = Запрос.Выполнить().Выбрать();
    Количество = 0;
    Пока Выборка.Следующий() Цикл
        ПланыОбмена.ЗарегистрироватьИзменения(Узел, Выборка.Ссылка);
        Количество = Количество + 1;
    КонецЦикла;

    Сообщить(СтрШаблон("Зарегистрировано документов: %1", Количество));

КонецПроцедуры

ПланыОбмена.ЗарегистрироватьИзменения ставит объект в очередь напрямую, минуя правила регистрации и отборы. Поэтому сначала убедитесь, что документы действительно нужны во второй базе. Обратная операция — ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Данные).

Когда регистрация не срабатывает: симптомы и причины

Диагностика: выберите симптом

Отдельно о пакетной очистке очереди. Иногда советуют снять всю регистрацию изменений по узлу, чтобы «разморозить» обмен. Это допустимо только когда вы точно знаете, что обе базы уже содержат одни и те же данные. Иначе часть документов не уедет никогда, и расхождение всплывёт на сверке через месяц.

Не меняйте вручную НомерОтправленного и НомерПринятого в узлах, если не понимаете, к чему это приведёт. Сбитая нумерация заставит приёмник отклонять сообщения или, наоборот, принять старое сообщение повторно.

Начальная выгрузка и проверка целостности данных

Когда синхронизация настроена впервые, в очереди ещё ничего нет: документы созданы до появления узла. Для этого помощник настройки предлагает начальную выгрузку. Она регистрирует все объекты, подходящие под отборы, и отправляет их первым пакетом.

Порядок, который избавляет от дублей справочников:

  1. В базе-приёмнике выполните сопоставление данных: программа предложит связать контрагентов по ИНН, номенклатуру по наименованию и артикулу. Проверьте строки, которые не сопоставились автоматически.
  2. Только после сопоставления запускайте загрузку. Иначе каждый несопоставленный контрагент создастся вторым экземпляром.
  3. Выполните первую полную синхронизацию в обе стороны и убедитесь, что каждая база получила подтверждение.
  4. Сверьте результат: количество документов за месяц по организации в обеих базах, оборотно-сальдовые ведомости по счетам 60, 62, 41 — если обмен идёт между торговой и бухгалтерской базой.

Регламентная синхронизация

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

Перед тем как считать обмен настроенным
Выполнено: 0 / 6

Частые вопросы о регистрации объектов в обмене

Можно ли зарегистрировать для обмена только один документ?
Да. Перепроведите его, если он проходит отборы узла, или поставьте в очередь вызовом ПланыОбмена.ЗарегистрироватьИзменения из внешней обработки.
Почему после удаления документа в приёмнике он остаётся?
Удаление тоже регистрируется, но только если объект ещё входит в отборы узла. Если документ удалили после смены отбора, удаление не попадёт в обмен, и документ придётся удалить во второй базе вручную.
Регистрируются ли изменения, сделанные загрузкой из другой базы?
Объект, пришедший из узла, обратно этому же узлу не регистрируется. На другие узлы распределённой схемы он может быть зарегистрирован, если проходит их отборы.
Влияет ли размер очереди на скорость работы пользователей?
Сама регистрация — одна запись в таблицу изменений, это быстро. Тормозить начинает формирование сообщений, если очередь не очищается неделями из-за отсутствия подтверждений.
Нужен ли монопольный режим для ручной регистрации?
Нет. Регистрация изменений и снятие регистрации выполняются при работающих пользователях. Монопольный доступ нужен только для изменения структуры конфигурации, например при добавлении объекта в состав плана обмена.