При настройке синхронизации данных между конфигурациями на платформе 1С:Предприятие 8.3 разработчики и администраторы часто сталкиваются со следующей проблемой: в ручном режиме (при нажатии кнопки «Выполнить синхронизацию» в форме узла плана обмена) данные прекрасно переносятся, новые объекты регистрируются и выгружаются. Однако при настройке сценария обмена по расписанию регламентное задание выполняется за считанные секунды, не выдает никаких ошибок в журнале регистрации, но сами данные при этом не отправляются и не принимаются. В списке фоновых заданий состояние процесса отмечено как «Выполнено успешно», однако по факту никакого обмена не произошло. Для стабильной работы без изменения конфигураций можно организовать регулярный автоматический обмен данными между базами 1С по расписанию поверх существующих планов обмена.
В этой статье мы подробно разберем, почему возникает такое поведение системы, проанализируем внутренние механизмы Библиотеки стандартных подсистем (БСП) и рассмотрим два способа решения проблемы: для администраторов баз данных и для разработчиков конфигураций.
Для того чтобы понять, почему ручной обмен работает, а автоматический игнорирует узел, обратимся к архитектуре подсистемы обмена данными БСП. В БСП заложена строгая проверка готовности узлов планов обмена к выполнению автоматической синхронизации. Эта проверка необходима для предотвращения ситуаций, когда недонастроенный обмен (например, с некорректно сопоставленными объектами или незаполненными правилами конвертации) начинает выполняться автоматически и повреждает данные в базах-корреспондентах.
За эту безопасность отвечает специализированный регистр сведений — РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз. В этом регистре для каждого активного узла плана обмена хранится состояние его готовности. Ключевым ресурсом здесь является флаг «Настройка завершена» (в метаданных — НастройкаЗавершена).
Когда регламентное задание сценария обмена запускает фоновый процесс выгрузки или загрузки, система выполняет следующий алгоритм:
РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз.Ложь, БСП считает, что настройка интеграции пользователем еще не закончена.При ручном запуске интерактивным пользователем из формы узла эта жесткая проверка зачастую опускается, либо система позволяет принудительно проигнорировать предупреждения, поэтому ручной обмен отрабатывает корректно.
В типовых конфигурациях 1С создание новых настроек синхронизации происходит через специальный пошаговый интерактивный помощник. Именно этот помощник на самом последнем шаге («Завершение настройки синхронизации данных») автоматически делает запись в регистр РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз и устанавливает признак НастройкаЗавершена = Истина.
Если же вы создали новый план обмена путем копирования существующего, добавили узел программно через обработку, либо заполнили его вручную непосредственно в списке узлов плана обмена, стандартный помощник не запускался. В результате запись в регистре настроек не сформировалась, и регламентное задание «не видит» ваш новый узел.
Если вы столкнулись с этой проблемой в работающей базе данных и вам нужно оперативно запустить обмен по расписанию, выполните следующие шаги:
Общие настройки узлов информационных баз.Истина).После выполнения этих действий регламентное задание при следующем запуске по сценарию успешно идентифицирует узел как готовый к работе и осуществит выгрузку данных.
Если вы разрабатываете собственную конфигурацию или добавляете новый нетиповой план обмена в существующую базу на БСП, необходимо сделать так, чтобы система автоматически регистрировала узел при его создании. Для этого нужно интегрировать форму узла с механизмами БСП.
Рассмотрим по шагам, как это реализовать:
Шаг 1. Откройте ваш план обмена в конфигураторе и перейдите на вкладку Формы. Создайте или откройте существующую форму узла (обычно это ФормаУзла).
Шаг 2. В модуле формы узла найдите или создайте обработчик события ПриЗаписиНаСервере. Нам необходимо вызвать стандартный программный интерфейс БСП, который сам проверит состояние узла и внесет необходимую запись в регистр сведений.
Посмотрим на пример реализации кода:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
// Вызов стандартного механизма БСП для регистрации параметров узла
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
МодульОбменДаннымиСервер.ФормаУзлаПриЗаписиНаСервере(ТекущийОбъект, Отказ);
КонецЕсли;
КонецПроцедуры
Метод ОбменДаннымиСервер.ФормаУзлаПриЗаписиНаСервере выполняет всю рутинную работу. Он проверяет, заполнены ли ключевые реквизиты узла, и при первой интерактивной записи узла пользователем автоматически формирует запись в регистре РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз со значением НастройкаЗавершена = Истина.
Если вы установили флаг завершения настройки, но регламентное задание по-прежнему игнорирует обмен или завершается с ошибкой, проанализируйте следующие технические факторы:
РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз и записи в регистры регистрации изменений./C ЗапускРегламентныхЗаданий), либо в базе должен постоянно находиться хотя бы один активный пользователь, на сеанс которого система будет периодически возлагать выполнение фоновых задач.Применяя данные рекомендации и понимая внутреннюю структуру проверок БСП, вы сможете быстро локализовать и устранить проблемы автоматического обмена данными в любых конфигурациях 1С. Для последующего контроля качества перенесенных данных и поиска расхождений можно запустить автоматическое сравнение бухгалтерских и налоговых проводок между информационными базами.