Предыстория
В 2009 году появилась задача разработать обмен данными между различными конфигурациями УТ10 и БП 1.6 (от 15 БД). Принял решение использовать КД 2. Разработчик я "ленивый", после пары недель нажимания одних и тех же кнопок выгрузить/загрузить/выгрузить и т.п. решил сделать свою версию обмена. За основу взял типовой обмен из УТ 10 и обработку "Универсальный обмен данными в формате XML", обработку практически не менял, а сам обмен был серьезно переделан. С того времени алгоритм дорабатывался и дополнялся под различные задачи. Использовал его много раз, работал(ет) годами без сбоев (за это отдельное спасибо разработчику конфигурации "Конвертации данных 2.0"). Планировал от него отказаться и начать использовать Конвертацию данных 3. Но в итоге увидел, что КД 3 не подходит для некоторых задач, и КД 2 все еще остается актуальной. Закончилось тем, что переделал свой обмен под тонкого клиента, но отключил часть функционала, такого как обмен через FTP, Com подключение, кэширование правил, распределенная БД (это довольно просто включить), отложенная обработка загруженных объектов и другие, но дополнил двумя новыми подсистемами из других разработок и обновил обработки "Универсальный обмен данными в формате XML", "Регистрация изменений для обмена данными". Почему не публиковал ранее - редко разработки выкладываю, причины разные, как пример, эту подсистему ранее не публиковал, так как для предыдущей версии требовались правила обмена с отклонениями от стандарта.
Примечание
Справочной информации нет - публикация рассчитана на опытных разработчиков, которые могут заглянуть в код и прояснить какие-то для себя моменты. Из-за высокой загруженности не готов отвечать на вопросы подобные: а зачем нужна КД 2, если есть КД 3, а почему не используем БСП и т.п. Но с удовольствием отвечу на вопросы по работе подсистем. Если кто-то подключит какую-либо из подсистем и создаст видео/обычную справку, опубликую с благодарностью.
Подсистема "Общего назначения"
Пара общих функций и регистров сведений используется всеми подсистемами. Не особо много интересного, разве что использование аналога констант (данные хранятся в регистре сведений, используется кэш). Для фонового обмена необходимо указать строку соединения с рабочей БД.
Подсистема "Регламентные задания"
Для данной разработки эта подсистема явно "избыточна", разрабатывалась она совсем для других целей. Но не уменьшать же существующий функционал, встроил подсистему как есть.
Что умеет - запускать по очереди/отдельно выполнение задания для связанных с регламентным заданием объектов. Приведу пример - есть 300 обменов данными (неважно для чего, пример не из этой публикации). Если мы запускаем каждую минуту все 300 заданий отдельно - получаем конфликт блокировок, огромное кол-во записей в журнале регистрации т.п. Решение - выполняем последовательно обмены. Но вопрос, если один обмен выполняется два часа, остальные в очереди должны его ждать? А если "проблемных" обменов несколько, это может привести к неработоспособности системы. Решение - "маленькие", стабильные обмены выносим в одно регламентное задание и запускаем по очереди в одном фоновом задании, а для оперативных или проблемных выполняем в отдельных фоновых задачах. Если в конфигурации есть типовой модуль "РаботаСПочтовымиСообщениями", тогда можно настроить отправку ошибок администратору. Обратите внимание, отправляются ошибки, только если это необработанное исключение. Ошибки при обмене таковыми не являются, но можно добавить несколько строк кода и настроить отправку и этой информации. Через эту подсистему запускается можно запустить задачу на выполнение задание как в фоновом режиме, так и на сервере/толстом клиенте. В файловом варианте функционал ограничен, так как в файловом варианте задания могут запускаться только по очереди.
Подключение данной подсистемы к другим объектам - возможно. Я подключил менее чем за час, но это не показатель в данном случае.
Подсистема "Журнал событий"
Что умеет: регистрировать события разного уровня (информация, отладка, ошибка); добавлять файлы к событиям; передавать сообщения из фонового задания пользователю; показывать длительность события; завершать фоновое задание; отчет по событиям; автоматическая очистка журнала от устаревших данных. После подключения к обмену нашел некоторые минусы в подсистеме, но плюсов больше.
Пример добавления записей в журнал событий:
ДанныеЖурнала = одКонв2_ЖурналСобытий.ИнициализироватьДанныеПодсистемы("одКонв2_",Настройка);
одКонв2_ЖурналСобытий.ДобавитьСобытие(ДанныеЖурнала,ТекстСообщения);
одКонв2_ЖурналСобытий.ДобавитьСобытие(ДанныеЖурнала,"Настройка заблокирована!","Ошибка");
одКонв2_ЖурналСобытий.ЗаписатьСобытия(ДанныеЖурнала);
В фоновом режиме пользователь получает сообщения каждые n секунд. Запись в регистр происходит при завершении обработки. Если фоновое задание завершено с ошибкой и запись не произведена в регистр, сработает регламентная процедура и перенесет данные об ошибке из фонового задания в журнал событий.
Если журнал событий разрастается быстро, и начинает тормозить отображение событий, поменяйте настройки автоматической очистки.
Подключение данный подсистемы к другим объектам - аналогично как и с предыдущей подсистемой
Подсистема "Обмен данными. Конвертация 2.1"
Ответы на некоторые вопросы:
Правила регистрации объектов поддерживаются? Правил регистрации объектов нет в подсистеме. Подсистема вынесена в расширение? Да, но так как регламентные задания не поддерживаются в расширении, приходится вносить небольшие изменения и в конфигурацию. Работают ли правила обмена, разработанные n лет назад? Должны. Но тут ситуация такая, версии ниже 2.1.8 обработки "Универсальный обмен данными в формате XML» позволяли некоторые вольности при разработке правил обмена. Например, при поиске по уникальному идентификатору можно было не передавать уникальный идентификатор приемнику, не было контроля по дате запрета изменения данных и т.п. Когда обновил обработку на новый релиз, такие недоработки проявились и пришлось исправлять правила. Если у вас старые правила и вы не планируете их изменять, укажите в настройках использовать версию обработки «2.1.7» Стабильность работы? В предыдущей версии все было проверено годами, здесь все-таки опыт использования гораздо меньше, но основную задачу выполняет.
Проверено на следующих конфигурациях и релизах:
- Управление производственным предприятием, редакция 1.3, релизы 1.3.231.3
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.157.32
- 1С:Конвертация данных 2.0, релизы 2.3.11.37
- Управление торговлей, редакция 11, релизы 11.5.18.64
- Управление торговлей, редакция 10.3, релизы 10.3.88.3
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.30.35