При создании распределенных систем часто встает задача синхронизации данных. В этой статье мы подробно и простыми словами разберем, для чего нужен план обмена в 1С, как устроен этот механизм и как с ним работать начинающему разработчику.
Для чего нужен план обмена в 1С? Простыми словами
Когда мы рассматриваем планы обмена в 1С, речь идет о специальном объекте метаданных платформы. Его главная задача — следить за тем, какие именно данные (справочники, документы, регистры) изменились в системе, и фиксировать, кому эти изменения нужно отправить.
Аналогия из жизни: Представьте обычный блокнот со списком почтовой рассылки. Когда в вашей базе создается новый документ, платформа делает пометку в этом блокноте: «Документ №5 изменен, его нужно отправить получателям А и Б». При отправке писем программа заглядывает в блокнот, берет нужные документы и после успешной отправки стирает пометку.
Каждый отдельный участник такой «рассылки» — это узел плана обмена. Среди них всегда есть один особенный предопределенный узел — «Этот узел». Он представляет собой текущую информационную базу 1С, в которой вы сейчас находитесь. Все остальные созданные вами узлы — это внешние получатели данных.
Виды планов обмена
В типовых конфигурациях можно встретить разные стандартные планы обмена в 1с. Они оптимизированы под конкретные задачи, например
план обмена Полный — используется при создании распределенных информационных баз (РИБ), когда нужно полностью синхронизировать структуру и данные между филиалами;
план обмена ОбновлениеИнформационнойБазы — служебный план обмена, который отслеживает и контролирует процесс обновления конфигурации;
Тем не менее для интеграций с кастомными внешними системами разработчики чаще всего создают собственный план обмена. И бывает даже так, что у нашего плана обмена узел получатель - не 1С (например, им является сайт интернет-магазина, стороннее мобильное приложение или CRM-система).
Создание и настройка первого плана обмена
Давайте разберем, как устроен типовой план обмена в 1С и как создать его самостоятельно в Конфигураторе:
Откройте дерево конфигурации, найдите ветку Планы обмена и добавьте новый объект. Дайте ему понятное имя, например ОбменСИнтернетМагазином.
Перейдите на вкладку Состав. Здесь указываются объекты метаданных, изменения которых мы хотим отслеживать (например, справочник Номенклатура или документ РеализацияТоваровУслуг).
Для каждого добавленного объекта настройте свойство Авторегистрация:
Разрешить: при любой интерактивной или программной записи объекта платформа сама зарегистрирует его для обмена на всех узлах. Это самый простой вариант.
Запретить: автоматической регистрации не будет. Вам потребуется самостоятельно решать в коде, когда и для кого фиксировать изменения.
На этом базовая работа с планами обмена в Конфигураторе 1С завершена.
💡 Важное примечание про БСП (Библиотека стандартных подсистем):
В современных конфигурациях 1С (таких как УТ, ERP, БП) разработчики редко пишут обмены полностью с нуля. Там используется готовая подсистема «Обмен данными» из состава БСП. Она берет на себя всю рутину: создание расписаний, ведение логов, выбор каналов связи (FTP, почта, папки).
Однако, чтобы использовать БСП, вам все равно сначала придется создать свой план обмена в Конфигураторе по инструкции выше, а затем зарегистрировать его в коде БСП. Понимание ручных механизмов — это обязательная база, без которой невозможно разобраться в работе готовых библиотек.
Регистрация изменений: автоматическая и ручная
Хотя автоматическая регистрация удобна, в реальной практике часто требуется более тонкая логика. Например, отправлять документ контрагенту нужно только тогда, когда он проведен и сумма сделки превышает определенный лимит.
В таких сценариях авторегистрацию в составе отключают (выбирают Запретить), а на сцену выходит ручная регистрация в плане обмена, которая реализуется в модулях объектов или через подписки на события.
Рассмотрим подробнее, как работает 1с регистрация в плане обмена программными методами.
Как зарегистрировать изменения в плане обмена 1С программно
Для того чтобы зарегистрировать изменения в плане обмена 1С программно, используется метод глобального контекста ПланыОбмена.ЗарегистрироватьИзменения().
Ниже представлен простой пример того, как программно зарегистрировать объекты для обмена:
// 1. Находим узел, для которого хотим зарегистрировать изменения СсылкаНаУзел = ПланыОбмена.ОбменСИнтернетМагазином.НайтиПоКоду("SITE"); Если ЗначениеЗаполнено(СсылкаНаУзел) Тогда // 2. Находим конкретный документ, который хотим отправить СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру("00001", ТекущаяДата()); Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда // 3. Регистрируем изменения ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, СсылкаНаДокумент); Сообщить("Выполнена регистрация в плане обмена в 1С программно!"); КонецЕсли; КонецЕсли;
Этот пример демонстрирует, как происходит программная регистрация изменений в плане обмена 1С для единичного объекта.
Если перед вами стоит задача зарегистрировать в плане обмена абсолютно все элементы определенного справочника (например, при первоначальной выгрузке данных на сайт), то в качестве второго параметра метода можно передать объект метаданных:
// Регистрируем всю номенклатуру для узла получателя ПланыОбмена.ЗарегистрироватьИзменения(СсылкаНаУзел, Метаданные.Справочники.Номенклатура);
Работа с зарегистрированными данными: выборка и очистка
После того как изменения зафиксированы в базе, их нужно прочитать для отправки получателю, а затем удалить регистрацию, чтобы не отправлять одни и те же данные по кругу.
Выборка изменений
Для чтения зарегистрированных объектов используется метод ПланыОбмена.ВыбратьИзменения:
НомерСообщения = 1; // Уникальный номер пакета обмена // Получаем выборку изменений для конкретного узла ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(СсылкаНаУзел, НомерСообщения); Пока ВыборкаИзменений.Следующий() Цикл Данные = ВыборкаИзменений.Получить(); // Здесь располагается логика выгрузки (например, сериализация объекта в JSON или XML) // Отправляем данные получателю... КонецЦикла;
Очистка регистрации
Как только принимающая сторона подтвердила успешное получение пакета с номером НомерСообщения, мы обязаны удалить эти записи из таблицы регистрации изменений. Для этого предназначен метод ПланыОбмена УдалитьРегистрациюИзменений:
// Очищаем отправленные данные, чтобы не хранить лишнее в БД
ПланыОбмена.УдалитьРегистрациюИзменений(СсылкаНаУзел, НомерСообщения);
Вообще, метод УдалитьРегистрациюИзменений очень гибкий, и в зависимости от переданных параметров, будет вести себя по-разному. Например, если мы передаем ссылку на один узел, то вторым параметром мы указываем число - номер сообщения. В этом случае будут удалены все изменения, относящиеся к этому узлу, у которых номер сообщения меньше или равен тому, что мы передали вторым параметром.
Планы обмена в расширении конфигурации 1С
Современные стандарты разработки требуют минимизировать изменения типовой конфигурации, чтобы не усложнять последующие обновления системы. Для этого используется план обмена в расширении конфигурации 1с.
Используя план обмена в расширении, вы можете:
Добавлять новые реквизиты, табличные части или табличные документы в заимствованный план обмена;
Добавлять новые типы данных в состав обмена.
- менять программный код в модуле объекта или модуле менеджера
- редактировать или добавлять формы
В общем, если вам нужно изменить план обмена через расширение, просто заимствуйте необходимый план обмена в ваше активное расширение конфигурации и управляйте его составом или свойствами без изменения основной конфигурации. Либо можно создать в расширении план обмена с нуля, и он будет независим от основной конфигурации.
Полезные инструменты и разбор частых ошибок
Ошибка: «Для состава плана обмена не указана регистрация объекта»
Это классическая ошибка начинающих разработчиков. Она означает, что вы попытались автоматически или программно зарегистрировать для обмена объект, который отсутствует во вкладке Состав вашего плана обмена в Конфигураторе.
Решение: Вернитесь в Конфигуратор, откройте свойства нужного плана обмена, перейдите на вкладку Состав и установите флажок напротив требуемого типа данных.
Если вам необходимо в процессе отладки проверить состав метаданных, вы можете получить состав плана обмена программно с помощью следующего кода:
Для Каждого ЭлементСостава Из Метаданные.ПланыОбмена.МойОбменДанными.Состав Цикл Сообщить("Объект в составе: " + ЭлементСостава.Метаданные.Имя); КонецЦикла;
Инструменты администратора и разработчика
Чтобы не писать каждый раз тестовый код для просмотра зарегистрированных объектов, можно использовать уже существующие инструменты:
Обработка Регистрация изменений для обмена — штатный инструмент, встроенный во многие современные типовые конфигурации на БСП. В разных прикладных решениях может незначительно отличаться по функциональности и внешнему виду.
Внешняя обработка регистрация изменений для обмена данными — еще один инструмент разработчика. С ее помощью можно в удобном интерактивном режиме посмотреть дерево всех зарегистрированных к отправке объектов на любом узле, выборочно удалить ошибочные записи или вручную добавить новые объекты к выгрузке. Внешнюю обработку можно скачать на официальном сайте ИТС по ссылке.
Заключение
Механизм планов обмена в 1С — это мощный, но при этом простой для понимания инструмент. Поняв принципы работы с узлами, составом объектов, а также освоив базовые методы регистрации и удаления изменений, вы сможете легко проектировать надежные и контролируемые схемы обмена данными любой сложности.
Чувствуете, что застряли в основах 1С?
Информация в интернете кажется обрывочной, а на решение простых задач уходят часы? Вы не одиноки. Я запустил Клуб для 1С разработчиков Alexcode.PRO. Внутри - продвинутые статьи, видео, материалы для скачивания, закрытый чат для резидентов и возможность влиять на контент.
