Имя: Пароль:
1C
1С v8
Передача структуры через COM соединение
0 Romich1981
 
24.04.13
11:55
Добрый день, коллеги.
Помогите старому глупому программисту решить проблему.
Устанавливаю СОМ-соединение, вызываю функцию из общего модуля, передаю в нее параметр.
Параметр имеет тип "Структура" и неважно, есть в нем значения или нет, выдается ошибка "Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода .."
То же самое и при передаче таблицы значений.
В обратную сторону таблица значений - как результат выполнения функции - прилетает без проблем.
1 Галахад
 
гуру
24.04.13
11:56
Может в коде ошибка?
2 Romich1981
 
24.04.13
11:59
Кода нет еще. Просто функция с параметром. Если параметр имеет простейший тип (число, строка, дата), функция отрабатывает без проблем.
3 бомболюк
 
24.04.13
11:59
Структуру то надо создавать на стороне соединения:
Структура = Соединение.NewObject("Структура");
4 Romich1981
 
24.04.13
12:01
а таблицу, которая возвращается функцией, я должен создавать на какой стороне?
5 Галахад
 
гуру
24.04.13
12:03
(4) Смотря где будешь использовать.
6 бомболюк
 
24.04.13
12:03
ошибся, пардон. тут не то немного. надо структуру в строку сериализовать и передавать между клиентом и сервером.
7 Romich1981
 
24.04.13
12:04
В описании структуры указано: "Возможен обмен с сервером"
Неужели она автоматом не сериализуется?
8 бомболюк
 
24.04.13
12:06
а внутри структуры чего у нас лежит?
9 Romich1981
 
24.04.13
12:06
может и ничего не лежать. Вообще должны лежать даты и строка
10 Romich1981
 
24.04.13
12:08
При работе в 8.2 с тонким клиентом передача таблиц и структур возможна.
Механизмы передачи сильно отличаются от СОМ-соединения?
11 Defender aka LINN
 
24.04.13
12:15
При чем тут COM? Текст ошибки глазами прочитать - не, не вариант?
12 hhhh
 
24.04.13
12:19
(11) тогда всё-таки Соединение.NewObject("Структура"); ??
13 Defender aka LINN
 
24.04.13
12:22
(12) Та хоть Соединение.NewObject("УникальныйИдентификатор")
14 fisher
 
24.04.13
12:22
Ну, можно из пушки по воробьям попробовать.
Я для передачи табличных документов такое делал:

// Функция - возвращает XML-строку с сериализованным значением
//
// Параметры:
//  Значение - значение произвольного типа, которое необходимо сериализовать
//
// Возвращаемое значение:
//  XML-строка, содержащая сериализованное значение
//
Функция СериализацияXML(Значение) Экспорт
   
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.УстановитьСтроку();
   СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение);
   
   Возврат ЗаписьXML.Закрыть();
   
КонецФункции

// Функция - возвращает значение, десериализованное из XML-строки
//
// Параметры:
//  СтрокаXML - XML-строка с сериализованным значением произвольного типа
//
// Возвращаемое значение:
//  Десериализованное значение
//
Функция ДесериализацияXML(СтрокаXML) Экспорт
   
   ЧтениеXML = Новый ЧтениеXML;
   ЧтениеXML.УстановитьСтроку(СтрокаXML);
   ЧтениеXML.Прочитать();
   
   Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
   
КонецФункции
15 Defender aka LINN
 
24.04.13
12:24
рукалицо...
16 fisher
 
24.04.13
12:25
Блин, точно. Тут же COM вообще не причем...
(15) Есть способ проще получить табличный документ сформированный на той стороне?
17 Romich1981
 
24.04.13
12:52
(11) (13) (15) Я вот зайду на форму спецов по Ораклу, в котором я не понимаю ничего, и буду там писать "рукалицо", "читайте глазами" и пр. Интересно, я буду от этого казаться в их глазах гуру оракла или нет?
прочитал три ваших сообщения. Ни одно из них неинформативно. Вопрос: для чего пишем?
18 Romich1981
 
24.04.13
12:56
(16)На той стороне формируется Таблица значений, и она прекрасно передается на вызывающую сторону. Проблема запихнуть на ту сторону структуру, созданную на вызывающей стороне, без конструкций типа Соединение.NewObject("Структура").
Я так понимаю, вердикт отрицательный?
19 Рэйв
 
24.04.13
13:03
(18)А чем принципиально создание именно на этой стороне?.Методы одинаковые.
20 Рэйв
 
24.04.13
13:05
+(19)Да и родная структура для функции будет более съедобна.
21 Romich1981
 
24.04.13
13:07
(19) да вообщем то непринципиально... просто структура есть, возможен обмен с сервером, а он не идет. Стало интересно...
22 Romich1981
 
24.04.13
13:14
Невозможность передать структуру через СОМ объект буду считать догмой и обходить стороной. Спасибо всем за участие.
23 Рэйв
 
24.04.13
13:15
(21)Скорее всего потьому что функция получает в параметр не структуру, а COMObject и не может точно определить что за хрень она получила,т.к.  он то может быть чем угодно, то есть мутабельней некуда
24 Romich1981
 
24.04.13
13:19
(23) Да, наверное так и есть...
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой