Часто перед разработчиками встает задача переноса определенного функционала из одной конфигурации, например, типовой, в другую — самописную. Проблема в том, что при выполнении одного действия, скажем, по нажатию кнопки, может вызываться целая цепочка процедур и функций из разных модулей. Выделить весь этот код вручную — трудоемкая и чреватая ошибками задача. Рассмотрим, какие существуют подходы для автоматизации этого процесса и какие архитектурные решения можно применить.
Этот метод подходит, если наша цель — именно скопировать код в целевую конфигурацию. Идея заключается в том, чтобы сначала отследить все вызываемые процедуры, а затем автоматически извлечь их тексты из исходных файлов конфигурации.
Основной инструмент — Замер производительности. Это встроенный механизм платформы, который логирует последовательность вызовов кода.
Разберем процесс по шагам:
Важные моменты и сложности:
&НаКлиенте или &НаСервере. Это повлияет на то, в какие модули целевой конфигурации его нужно будет помещать.Как видим, это не простое решение, и оно требует серьезных навыков программирования. Более мощным, но и более сложным в настройке инструментом для анализа является Технологический журнал.
Вместо прямого копирования кода можно организовать взаимодействие между базами, чтобы целевая конфигурация вызывала нужный функционал из исходной. Это позволяет избежать проблем с зависимостями.
Современный и наиболее гибкий подход. В исходной конфигурации публикуется HTTP-сервис, который предоставляет доступ к нужным экспортным функциям. Целевая "самописная" конфигурация отправляет HTTP-запрос с параметрами и получает результат в формате JSON или XML.
Преимущества:
Недостатки:
Классический способ для взаимодействия баз данных в пределах одного сервера или локальной сети. Он позволяет напрямую обращаться к экспортным процедурам и функциям другой базы.
// Пример вызова функции из другой базы через COM
Попытка
V83COM = Новый COMОбъект("V83.COMConnector");
Соединение = V83COM.Connect("Srvr=""ИмяСервера"";Ref=""ИмяБазы"";Usr=""Пользователь"";Pwd=""Пароль"";");
// Вызываем экспортную функцию общего модуля
Результат = Соединение.ИмяОбщегоМодуля.ИмяЭкспортнойФункции(Параметр1, Параметр2);
Сообщить(Результат);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Преимущества:
Недостатки:
Если целевая конфигурация находится на поддержке, и мы хотим избежать ее изменения, лучшим решением будет вынести переносимый функционал в расширение. Весь новый код, а также заимствованные или созданные объекты метаданных, инкапсулируются в расширении. Это значительно упрощает последующее обновление основной конфигурации и поддержку решения.
В заключение отметим, что простого "магического" способа вытащить исполняемый код не существует. Для изолированных и небольших функций подойдет ручное копирование с анализом зависимостей. Для сложного функционала лучше рассмотреть архитектурные решения, такие как HTTP-сервисы, или использовать современный механизм расширений, чтобы сделать интеграцию более гибкой и надежной.