Как изменить код узла плана обмена и префикс базы при синхронизации в 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При настройке или перенастройке обмена данными между конфигурациями (например, «1С:Управление торговлей» и «1С:Бухгалтерия предприятия 3.0») нередко возникает ситуация: префикс информационной базы в общих настройках изменен, старая настройка обмена удалена и создана новая, но формируемые файлы выгрузки все равно содержат старое обозначение (например, Message_1v_KA.zip вместо Message_ss_KA.zip). В результате база-получатель не может прочитать файл, так как ожидает пакет с обновленным кодом узла.

Разберем детально механизм формирования имен файлов обмена, выясним причины такого поведения системы и рассмотрим рабочие способы изменения кода узла.

Почему смены префикса базы недостаточно

Проанализируем структуру наименования файлов обмена. Стандартный файл сообщения формируется платформой по строгому правилу:

Message_<КодОтправителя>_<КодПолучателя>.zip

Здесь используются не строковые префиксы документов из общих настроек, а значения реквизита Код соответствующих узлов плана обмена:

  1. Код отправителя — берется из предопределенного элемента ЭтотУзел текущей информационной базы (в интерфейсе он обычно отмечен специальным значком/зеленой точкой).
  2. Код получателя — берется из узла базы-корреспондента, созданного в том же плане обмена.

При первичной инициализации синхронизации данных код узла ЭтотУзел автоматически заполняется текущим префиксом информационной базы. Однако при последующем изменении константы «Префикс информационной базы» платформа 1С не выполняет автоматическое обновление реквизита Код в уже существующих узлах планов обмена. Кроме того, предопределенный узел ЭтотУзел нельзя удалить стандартными средствами (система выдает ошибку: «Нельзя помечать на удаление элемент с установленным признаком "ЭтотУзел"»), а поле кода в форме настроек синхронизации заблокировано для интерактивного редактирования.

Способ 1. Программная смена кода узла через внешнюю обработку

Рассмотрим наиболее надежный и быстрый способ для программиста — программную перезапись реквизита Код у предопределенного узла плана обмена. Для этого воспользуемся внешней обработкой или консолью кода:


// Получаем объект предопределенного узла плана обмена
УзелОбъект = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.ЭтотУзел().ПолучитьОбъект();

// Устанавливаем новый код узла (новый префикс)
УзелОбъект.Код = "SS";

// Записываем изменения
УзелОбъект.Записать();

Если используется другой план обмена (например, специализированный типовой обмен по правилам конвертации), укажем имя соответствующего плана обмена вместо СинхронизацияДанныхЧерезУниверсальныйФормат.

Способ 2. Использование обработки «Групповое изменение реквизитов»

Если нет возможности запустить произвольный программный код, воспользуемся стандартной обработкой администрирования:

  1. Перейдем в меню «Функции для технического специалиста» (или «Все функции»).
  2. Откроем стандартную обработку «Групповое изменение реквизитов».
  3. В поле «Выбор элементов для изменения» выберем нужный план обмена (например, «Синхронизация данных через универсальный формат»).
  4. Нажмем кнопку «Дополнительные параметры» и установим флаг «Показывать служебные реквизиты» (режим разработчика).
  5. В списке отбираемых элементов обязательно настроим отбор по ссылке: Ссылка Равно <Этот узел>, чтобы не затереть код у узла базы-корреспондента.
  6. В таблице реквизитов найдем поле Код, укажем новое значение (например, SS) и выполним изменение.

Способ 3. Интерактивное разрешение редактирования реквизитов

В некоторых типовых конфигурациях при наличии полных прав можно изменить код непосредственно в форме узла плана обмена:

  1. Откроем список узлов плана обмена через «Функции для технического специалиста».
  2. Откроем элемент с признаком ЭтотУзел.
  3. Через меню «Еще» выберем команду «Разрешить редактирование реквизитов».
  4. При попытке ввода нового кода подтвердим системный запрос («Код заполняется при записи автоматически. Продолжить редактирование?»), указав «Да».
  5. Сохраним элемент по кнопке «Записать и закрыть».

Обязательные действия во второй базе (корреспонденте)

После корректировки кода в базе-приемнике (в нашем примере — БП) необходимо синхронизировать настройки в базе-источнике (УТ):

  1. Откроем базу «Управление торговлей».
  2. Перейдем в соответствующий план обмена.
  3. Найдем узел, отвечающий за связь с «Бухгалтерией предприятия».
  4. Установим в поле Код точно такое же значение — SS.

Если этого не сделать, источник продолжит адресовать пакеты старому коду узла, и система не сможет сопоставить входящий файл сообщения.

Важные нюансы: счетчики сообщений и соответствия объектов

Обратим внимание на поведение связанных данных при изменении кода узла:

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

Сопоставление данных: регистр сведений Соответствия объектов информационных баз хранит ссылки на узел плана обмена (тип ПланОбменаСсылка), а не строковый код. Поэтому смена строкового кода узла не приводит к потере ранее сопоставленной номенклатуры, контрагентов и договоров.

← На главную