Ситуация: Не всегда для обеспечения взаимодействия между двумя базами удобно
использовать универсальный обмен данными. Бывают случаи, когда проще создать нужные
элементы в базе-приемнике, написав специализированный код. К тому же такой механизм менее
затратен.
Подсоединяемся к другой базе через ComConnector и вызываем написанную нами экспортную
функцию этой базы, передавая ей некий сложносочиненный аргумент. К примеру - структуру,
состоящую из строковых и числовых элементов.
Суть проблемы: пытаемся из модуля, помеченного для внешнего соединения, вызвать функцию
серверного модуля, передавая ей то, что получили по ComConnector.
А оно не передается, ибо внезапно оказалось мутабельно.
Механизм возникновения проблемы: Все просто, в базе-приемнике это уже не структура, а
COMОбъект.
Решение проблемы: Нам нужно вновь сделать это структурой. Благо использовать методы и
свойства структуры по отношению к COMОбъекту мы можем.
Пример:
// Аргумент - ComObject вида Структура, содержащая значения элементарных типов, любой
глубины вложенности
// или структура, содержащая элементы типа ComObject при рекурсивном вызове
// Результат - аналогичная Структура, содержащая значения элементарных типов.
Функция ПереинициализироватьСтруктуру(ИсхСтруктура)
НовСтруктура = Новый Структура;
Для Каждого Ключ из ИсхСтруктура Цикл
Если ТипЗнч(Ключ.Значение) = Тип("COMОбъект") Тогда
НовСтруктура.Вставить(Ключ.Ключ, ПереинициализироватьСтруктуру(Ключ.Значение));
Иначе
НовСтруктура.Вставить(Ключ.Ключ, Ключ.Значение);
КонецЕсли;
КонецЦикла;
Возврат НовСтруктура;
КонецФункции