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