Передача аргумента, полученного по ComConnector, на сервер

20.03.13

Разработка - Математика и алгоритмы

С точки зрения инкапсуляции, данные, переданные по COMConnector, следует обрабатывать в базе-приемнике. И тут возникает проблема, малопонятная для новичка из-за сложностей в отладке модуля внешнего соединения. Аргументы попросту не передаются в серверные модули.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Статья в PDF
.pdf 369,22Kb
7
7 Скачать (1 SM) Купить за 1 850 руб.

Ситуация: Не всегда для обеспечения взаимодействия между двумя базами удобно использовать универсальный обмен данными. Бывают случаи, когда проще создать нужные элементы в базе-приемнике, написав специализированный код. К тому же такой механизм менее затратен. 

Подсоединяемся к другой базе через ComConnector и вызываем написанную нами экспортную функцию этой базы, передавая ей некий сложносочиненный аргумент.  К примеру - структуру, состоящую из строковых и числовых элементов. 

Суть проблемы: пытаемся из модуля, помеченного для внешнего соединения, вызвать функцию серверного модуля, передавая ей то, что получили по ComConnector. 

А оно не передается, ибо внезапно оказалось мутабельно. 

Механизм возникновения проблемы:  Все просто, в базе-приемнике это уже не структура, а COMОбъект.

Решение проблемы: Нам нужно вновь сделать это структурой. Благо использовать методы и свойства структуры по отношению к COMОбъекту мы можем.

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

 PS приведенный механизм работает только на структурах. А вот как бы добавить функционал вложения в структуры таблиц значений? Собственно загвоздка заключается в том, чтобы выяснить, что из себя представляет очередной вложенный COMОбъект - структуру или ТЗ.

Пока кроме как через попытка-исключение с применением какого-нибудь специфичного для ТЗ метода идей нет... Впрочем, никто не мешает использовать структуры вместо ТЗ, т.к. ТЗ в структуру переводится достаточно просто. 

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    3925    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    8625    user1959478    52    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    3846    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    11600    8    SpaceOfMyHead    19    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    5067    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

В статье анализируются средства платформы для решения системы линейных уравнений в 1С. Приводятся доводы в пользу некорректной работы встроенных алгоритмов, а значит потенциально некорректного расчета себестоимости в типовых конфигурациях.

23.11.2022    4216    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    9181    7    kalyaka    11    

44
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wowik 891 27.03.13 10:52 Сейчас в теме
Ничего не понял, хотя и не новичок во всей этой ерунде с COM.
2. rar_xxx 23 11.03.14 12:08 Сейчас в теме
Я через массивы передаю, муторно, индекс перепутаешь ошибка будет, но у меня мало что через com надо передавать, переживу ).
Оставьте свое сообщение