При настройке или перенастройке обмена данными между конфигурациями (например, «1С:Управление торговлей» и «1С:Бухгалтерия предприятия 3.0») нередко возникает ситуация: префикс информационной базы в общих настройках изменен, старая настройка обмена удалена и создана новая, но формируемые файлы выгрузки все равно содержат старое обозначение (например, Message_1v_KA.zip вместо Message_ss_KA.zip). В результате база-получатель не может прочитать файл, так как ожидает пакет с обновленным кодом узла.
Разберем детально механизм формирования имен файлов обмена, выясним причины такого поведения системы и рассмотрим рабочие способы изменения кода узла.
Проанализируем структуру наименования файлов обмена. Стандартный файл сообщения формируется платформой по строгому правилу:
Message_<КодОтправителя>_<КодПолучателя>.zip
Здесь используются не строковые префиксы документов из общих настроек, а значения реквизита Код соответствующих узлов плана обмена:
ЭтотУзел текущей информационной базы (в интерфейсе он обычно отмечен специальным значком/зеленой точкой).При первичной инициализации синхронизации данных код узла ЭтотУзел автоматически заполняется текущим префиксом информационной базы. Однако при последующем изменении константы «Префикс информационной базы» платформа 1С не выполняет автоматическое обновление реквизита Код в уже существующих узлах планов обмена. Кроме того, предопределенный узел ЭтотУзел нельзя удалить стандартными средствами (система выдает ошибку: «Нельзя помечать на удаление элемент с установленным признаком "ЭтотУзел"»), а поле кода в форме настроек синхронизации заблокировано для интерактивного редактирования.
Рассмотрим наиболее надежный и быстрый способ для программиста — программную перезапись реквизита Код у предопределенного узла плана обмена. Для этого воспользуемся внешней обработкой или консолью кода:
// Получаем объект предопределенного узла плана обмена
УзелОбъект = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.ЭтотУзел().ПолучитьОбъект();
// Устанавливаем новый код узла (новый префикс)
УзелОбъект.Код = "SS";
// Записываем изменения
УзелОбъект.Записать();
Если используется другой план обмена (например, специализированный типовой обмен по правилам конвертации), укажем имя соответствующего плана обмена вместо СинхронизацияДанныхЧерезУниверсальныйФормат.
Если нет возможности запустить произвольный программный код, воспользуемся стандартной обработкой администрирования:
Ссылка Равно <Этот узел>, чтобы не затереть код у узла базы-корреспондента.Код, укажем новое значение (например, SS) и выполним изменение.В некоторых типовых конфигурациях при наличии полных прав можно изменить код непосредственно в форме узла плана обмена:
ЭтотУзел.После корректировки кода в базе-приемнике (в нашем примере — БП) необходимо синхронизировать настройки в базе-источнике (УТ):
Код точно такое же значение — SS.Если этого не сделать, источник продолжит адресовать пакеты старому коду узла, и система не сможет сопоставить входящий файл сообщения.
Обратим внимание на поведение связанных данных при изменении кода узла:
Номера сообщений: изменение кода не обнуляет счетчики НомерОтправленного и НомерПринятого. Если создается полностью новая цепочка обмена и при первом чтении возникает ошибка номера пакета, необходимо вручную сбросить номера сообщений в узлах обеих баз до нуля.
Сопоставление данных: регистр сведений Соответствия объектов информационных баз хранит ссылки на узел плана обмена (тип ПланОбменаСсылка), а не строковый код. Поэтому смена строкового кода узла не приводит к потере ранее сопоставленной номенклатуры, контрагентов и договоров.