При работе с конфигурациями разных поколений, такими как 1С:Комплексная автоматизация 1.1 (на обычных формах) и 1С:Бухгалтерия предприятия 3.0 (на управляемых формах), специалисты часто сталкиваются с проблемой несовместимости механизмов обмена. Основная сложность заключается в том, что в БСП (Библиотеке стандартных подсистем) современных версий БП 3.0 заложены проверки, которые не позволяют корректно принимать сообщения из старой КА 1.1. В этой статье мы подробно разберем, как обойти эти ограничения и настроить стабильный автоматический обмен.
Когда мы пытаемся настроить синхронизацию между КА 1.1 и БП 3.0, наиболее частой ошибкой является сообщение о несоответствии версии формата обмена. Это происходит по нескольким причинам:
Конвертации данных 2.0.КА 1.1 планов обмена, предназначенных именно для взаимодействия с актуальными редакциями БП 3.0.БП 3.0 (например, справочники контрагентов, банковских счетов), которые старые правила обмена не учитывают.Рассмотрим пошагово пути решения этой задачи.
Для реализации автоматического обмена нам необходим механизм регистрации изменений. Этот механизм неразрывно связан с объектом метаданных ПланОбмена. Разберем ситуацию, когда в КА 1.1 нет специализированного плана обмена для БП 3.0.
Во-первых, проанализируем возможность использования существующего плана обмена. Можно использовать узел ОбменДаннымиСБухгалтериейПредприятия или даже создать свой собственный узел в плане обмена Полный, если нет возможности дорабатывать конфигурацию. Однако правильнее будет создать отдельный узел в плане обмена, предназначенном для обмена по правилам.
Во-вторых, нам потребуется внешняя обработка V8Exchang82.epf (Универсальный обмен данными в формате XML). С ее помощью мы можем автоматизировать процесс, не дорабатывая код конфигурации. Рассмотрим пример настройки выгрузки через регламентное задание:
// Пример логики для выгрузки измененных данных
Обработка = Обработки.УниверсальныйОбменаДаннымиXML.Создать();
Обработка.ИмяФайлаПравилОтражения = "C:\Rules\Rules_KA_BP.xml";
Обработка.ИмяФайлаСообщенияОбмена = "C:\Exchange\Data.xml";
Обработка.РежимОбмена = "Выгрузка";
Обработка.УзелОбмена = ПланыОбмена.ОбменСБухгалтерией.НайтиПоКоду("БП_001");
Обработка.ВыполнитьВыгрузку();
В этом сценарии КА 1.1 будет фиксировать изменения объектов. При запуске регламентного задания обработка считывает правила и выгружает только те объекты, которые были изменены с момента последнего обмена для конкретного узла.
Если ваша версия КА 1.1 достаточно свежая (например, релиз 1.1.110), в ней уже может присутствовать частичная поддержка обмена через универсальный формат. Выясним, как подружить ее с новой БП 3.0.
Проблема часто кроется в том, что БП 3.0 ожидает формат версии 1.10, а КА 1.1 умеет отдавать только 1.3 или 1.5. В настройках синхронизации в БП 3.0 при создании нового обмена необходимо вручную указать версию формата, которую поддерживает источник. Если стандартный помощник этого не позволяет, можно изменить версию формата в настройках транспорта или в самом узле плана обмена через «Все функции» (Функции для технического специалиста).
Если обмен через файлы постоянно прерывается из-за ошибок заголовков XML, проанализируем вариант с прямым подключением к информационной базе (COM). Этот метод позволяет избежать записи промежуточных файлов, на этапе чтения которых БСП часто «ругается» на версию.
При использовании COM-соединения КА 1.1 выступает в роли клиента, который подключается к БП 3.0, создает в ней объекты и записывает их. Посмотрим, как это выглядит структурно:
КА 1.1 открывается форма настройки обмена данными.БП 3.0.Конвертации данных 2.0.Важный момент: для работы COM-соединения необходимо, чтобы версии платформы 1С на сервере или компьютере, где выполняется задание, совпадали или были совместимы, а компонента comcntlev83.dll была зарегистрирована в системе.
Если вы готовы к минимальным правкам кода, выясним причину возникновения ошибки в модулях. Ошибка «Версия формата не соответствует» обычно генерируется в общем модуле ОбменДаннымиСервер (в БП 3.0) или в менеджере плана обмена.
Рассмотрим алгоритм обхода:
ЧтениеСообщенияОбмена).ВерсияФормата из файла с допустимыми значениями в текущей базе.
// Пример принудительной замены версии в файле перед загрузкой
Текст = Новый ТекстовыйДокумент;
Текст.Прочитать(ПутьКФайлу);
СтрокаXML = Текст.ПолучитьТекст();
СтрокаXML = СтрЗаменить(СтрокаXML, "ВерсияФормата=""1.3""", "ВерсияФормата=""1.5""");
Текст.УстановитьТекст(СтрокаXML);
Текст.Записать(ПутьКФайлу);
Для того чтобы обмен был действительно автоматическим и не «зацикливался», после успешной выгрузки нам необходимо очистить регистрацию изменений. Если мы используем стандартную обработку V8Exchang82.epf, она делает это автоматически, если указан узел обмена. Однако, если мы пишем свой механизм, разберем, как программно снять объекты с регистрации:
// Снятие регистрации изменений после выгрузки
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, ВыгруженныеОбъектыСписок);
Это гарантирует, что при следующем запуске регламентного задания система не будет повторно выгружать те же самые данные, что существенно повышает производительность.
При настройке обмена между КА 1.1 и БП 3.0 обратите внимание на следующие технические детали:
БП 3.0 многие поля (например, наименования или дополнительные реквизиты) могут иметь другую длину. В правилах (ПВД/ПКС) используйте функцию Лев(Значение, МаксДлина) для предотвращения ошибок записи.Бухгалтерии структура хранения счетов контрагентов изменилась. Проверьте, чтобы в правилах конвертации корректно определялся владелец счета.БП 3.0 не возникает конфликтов с существующими записями по дате периода.Подводя итог, можно сказать, что автоматизация обмена между КА 1.1 и БП 3.0 возможна даже без глубокого обновления конфигураций. Оптимальным решением будет использование правил Конвертации данных 2.0 в сочетании с регламентным заданием, которое запускает внешнюю обработку выгрузки, ориентируясь на специально созданный узел в плане обмена.