Администрирование · 10 мин
Как изменить правила регистрации объектов 1С для обмена
Как изменить правила регистрации объектов 1С для обмена: состав плана обмена, подписки на события, фильтры по свойствам, отладка и типичные ошибки.
Правила регистрации объектов определяют, какие данные и при каких условиях попадут в очередь обмена между базами 1С. Если регистрация настроена неверно, в узел обмена уходит лишнее (и растёт объём трафика) либо, наоборот, не уходят нужные документы и справочники — и базы расходятся. Изменить правила можно штатно, через настройку состава плана обмена и обработчики регистрации, без отключения самого обмена.
Есть два уровня настройки: состав плана обмена (какие типы объектов вообще регистрируются) и правила регистрации (условия, при которых конкретный объект отправляется в конкретный узел). Первый уровень меняется в конфигураторе, второй — либо штатными настройками фильтров в режиме предприятия, либо через обработчики событий регистрации на встроенном языке.
Как устроена регистрация объектов в плане обмена
План обмена — объект конфигурации, который описывает узлы обмена и состав регистрируемых данных. У каждого узла есть таблица изменений: когда объект записывается, платформа проверяет, входит ли его тип в состав плана обмена, и если да — создаёт запись регистрации изменений для узлов-получателей.
При выгрузке механизм обмена читает таблицу изменений, формирует сообщение и после успешной отправки удаляет регистрацию. Поэтому «правила регистрации» — это фактически фильтр на входе в таблицу изменений: они решают, нужно ли вообще фиксировать изменение данного объекта для данного узла.
Важно понимать разницу: состав плана обмена отвечает на вопрос «регистрируется ли этот тип данных в принципе», а обработчики регистрации — «нужно ли регистрировать этот конкретный объект для этого конкретного узла». Ограничения по организациям, складам, датам задаются именно на втором уровне.
Изменение состава плана обмена в конфигураторе
Если нужно добавить или убрать целый тип данных (например, перестать передавать документ «Реализация товаров» или начать передавать новый справочник), правка делается в конфигураторе. Откройте ветку «Общие» → «Планы обмена», выберите нужный план и перейдите на закладку «Основные» — там находится список объектов состава.
Для каждого объекта доступен режим авторегистрации: «Разрешить» или «Запретить». Если авторегистрация запрещена, платформа не будет автоматически отслеживать изменения объектов этого типа — регистрировать их придётся программно через метод ПланыОбмена.ЗарегистрироватьИзменения(). Это используют, когда логика отбора сложная и полностью управляется кодом.
После изменения состава обновите конфигурацию базы данных. Учтите: в типовых конфигурациях план обмена может быть на поддержке — изменение состава потребует снятия объекта с поддержки, что усложнит будущие обновления. По возможности оставляйте состав нетронутым и решайте задачу обработчиками регистрации.
Настройка правил регистрации через обработчики событий
Основной способ задать условия регистрации — обработчики, которые вызываются при записи объекта. В типовых конфигурациях с БСП (Библиотека стандартных подсистем) для этого используются подписки на события «Перед записью» / «При записи» и переопределяемые процедуры в общих модулях обмена данными, где можно отменить регистрацию объекта для узла.
Логика проста: в обработчике проверяются условия (организация, склад, дата, статус документа), и если объект не подходит под фильтр узла — регистрация для этого узла отменяется. Проверка выполняется до фактической записи в таблицу изменений, поэтому лишние записи в неё не попадают.
// Пример: регистрировать документ только по нужной организации
Процедура ПередЗаписьюДокументаРегистрация(Источник, Отказ) Экспорт
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Источник.Организация <> Константы.ОсновнаяОрганизация.Получить() Тогда
Источник.ОбменДанными.Получатели.Очистить();
КонецЕсли;
КонецПроцедурыОбратите внимание на коллекцию ОбменДанными.Получатели у объекта: она определяет, для каких узлов будет выполнена регистрация при данной записи. Очистив или сузив список получателей, вы управляете регистрацией без изменения конфигурации плана обмена. Также всегда проверяйте флаг ОбменДанными.Загрузка, чтобы обработчик не срабатывал при загрузке данных из другого узла — иначе возможны зацикливания обмена.
Фильтры по свойствам и значениям
Частая задача — отправлять в узел только часть данных: документы одной организации, номенклатуру определённой группы, контрагентов с заполненным ИНН. Такие фильтры реализуются в обработчике проверкой реквизитов объекта. Пишите условия максимально конкретно и учитывайте, что реквизит может быть не заполнен — пустое значение не должно приводить к ошибке обработчика.
Программная регистрация и отмена регистрации
Для разовых операций (первоначальная выгрузка, досылка конкретного объекта) используются методы ПланыОбмена.ЗарегистрироватьИзменения(Узел, Объект) и ПланыОбмена.УдалитьРегистрациюИзменений(Узел, Объект). В типовых конфигурациях есть штатная обработка «Регистрация изменений для обмена данными», которая позволяет вручную зарегистрировать или снять с регистрации объекты по отбору — это безопаснее, чем писать код для разовой задачи.
Как безопасно применить изменения на рабочей базе
Любую правку правил регистрации сначала проверяйте на копии базы: поведение обмена зависит от реальных данных, и на пустой тестовой базе ошибку можно не заметить. После проверки переносите изменения в рабочую базу в период минимальной нагрузки, когда обмен не выполняется по расписанию.
- 1Сделайте резервную копию обеих баз, участвующих в обмене
- 2Внесите изменения в обработчики регистрации или состав плана обмена на копии
- 3Выполните тестовую запись объекта, подпадающего под фильтр, и объекта вне фильтра
- 4Проверьте таблицу регистрации изменений: лишних записей быть не должно
- 5Выполните полный цикл обмена и сверьте номера отправленных и принятых сообщений
- 6Перенесите изменения в рабочую базу и повторите контрольный обмен
Если вы добавили новый тип объектов в состав плана обмена, существующие данные не зарегистрируются сами — выполните первоначальную регистрацию через обработку регистрации изменений или программно по всем объектам типа. Иначе в узел уйдут только изменения, сделанные после доработки.
Проверка результата и диагностика
Главный индикатор корректной работы — таблица регистрации изменений. После записи тестового объекта она должна содержать ровно те записи, которые предусматривают ваши правила: нужный узел, нужный объект, ничего лишнего. Посмотреть регистрацию можно через обработку «Регистрация изменений для обмена» или запросом к таблице изменений.
Как проверить результат
Появилась регистрация для нужного узла
Регистрации нет или она для всех узлов подряд
Регистрация не создаётся
Запись появляется — условие фильтра не срабатывает
Номера принятых/отправленных сообщений синхронно растут
Сообщения копятся, регистрация не очищается
Данные появляются без дублей
Дубли объектов или ошибки в журнале регистрации
Дополнительно следите за журналом регистрации: ошибки в обработчиках регистрации часто видны только там, пользователь при записи документа может ничего не заметить. Настройте отбор журнала по событиям обмена данными на время тестирования.
Типичные ошибки при изменении правил
Отдельная ошибка — снимать объекты с поддержки ради небольшого фильтра, который можно было реализовать в переопределяемом модуле. В типовых конфигурациях почти всегда есть предусмотренный механизм расширения правил регистрации без изменения типового кода.
Когда лучше привлечь специалиста
Самостоятельно безопасно менять фильтры по реквизитам, состав регистрируемых типов и выполнять ручную регистрацию объектов через штатные обработки. К специалисту по 1С стоит обращаться, если обмен не типовой (конвертация данных, универсальный формат EnterpriseData с доработками), если ошибки уже привели к расхождению данных между базами или если обмен работает в режиме реального времени и остановка недопустима.
Что важно запомнить
Правила регистрации меняются на двух уровнях: состав плана обмена (типы данных) и обработчики регистрации (условия по объектам). Всегда проверяйте флаг ОбменДанными.Загрузка, тестируйте на копии, выполняйте первоначальную регистрацию существующих данных и контролируйте таблицу изменений после правок.
Частые вопросы
Можно ли изменить правила регистрации без конфигуратора?
Частично. Состав плана обмена меняется только в конфигураторе, но условия отбора объектов в типовых конфигурациях часто настраиваются в режиме предприятия: в настройках синхронизации данных есть отборы по организациям, датам начала выгрузки и другим параметрам. Проверьте форму настройки узла — возможно, доработка вообще не потребуется.
Почему после изменения правил старые объекты не выгружаются?
Правила регистрации действуют только на момент записи объекта. Данные, существовавшие до изменения правил, не регистрируются автоматически. Зарегистрируйте их вручную через обработку «Регистрация изменений для обмена данными» или программно методом ПланыОбмена.ЗарегистрироватьИзменения с отбором по нужным объектам.
Как отменить регистрацию уже накопленных изменений?
Используйте метод ПланыОбмена.УдалитьРегистрациюИзменений с указанием узла — можно удалить регистрацию для конкретного объекта, типа метаданных или всех данных узла целиком. В типовых конфигурациях то же самое делает обработка регистрации изменений. Учтите: удалённые изменения в узел уже не уйдут, при необходимости их придётся регистрировать заново.
Объекты ходят между базами по кругу — что делать?
Это классический признак обработчика регистрации без проверки ОбменДанными.Загрузка: при загрузке объекта из сообщения он записывается, снова регистрируется и отправляется обратно. Добавьте в начало обработчика проверку «Если Источник.ОбменДанными.Загрузка Тогда Возврат» и остановите обмен до исправления, чтобы не плодить сообщения.
Нужно ли менять правила в обеих базах обмена?
Да, если фильтрация должна быть симметричной. Каждая база самостоятельно решает, что регистрировать для отправки. Если правила изменить только в одном узле, вторая база продолжит отправлять данные по-старому, и содержимое баз со временем разойдётся. Планируйте обновление обоих узлов одновременно.
Чем отличается авторегистрация от программной регистрации?
Авторегистрация — штатный механизм платформы: при записи объекта изменение фиксируется для всех узлов автоматически, без кода. Программная регистрация выполняется явно через ПланыОбмена.ЗарегистрироватьИзменения и даёт полный контроль над условиями, но требует, чтобы авторегистрация для этого типа была запрещена, иначе записи продублируются.