Вызов функции общего модуля серверной 1С (8.3) по COM #773493


#0 by alexeyomg
Я цепляюсь из программы (на c#) через COM к 1с (серверная, не файловая). Подключение проходит успешно, но я не могу обратиться к функции общего модуля. Пишет следующее: "2016-05-30 16:19:13.1634 ERROR Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: "System.__ComObject" не содержит определения для "ОбщийМодуль" на c# код следующий: string connectionString = "srvr='" + mainConfig.base1cServer + dynamic result1c = connection1C.ОбщийМодуль.Тест(new object[] {}); в 1С код следующий: Всё это находится в модуле "ОбщийМодуль" (созданный мной) в разделе "Общие модули". У этого модуля активированы следующие параметры: -Сервер -Внешнее соединение В случае с файловой базой - всё работает!!! В случае с серверной базой пишет ошибку, указанную в начале поста. Я пробовал делать общий модуль Глобальным, и тогда в c# команда выглядит так: dynamic result1c = connection1C.Тест(new object[] {}); С файловой это работает, с серверной нет. Я также пытался написать тот же метод в "Модуль внешнего соединения" в 1с-ке. И опять, с файловой это работает, а с серверной - нет. Подскажите, в чём прикол серверной версии 1с? И как мне обратиться к методу модуля?
#1 by alexeyomg
Через Com результат запроса на северную 1с приходит отлично!!! А вот с вызовом метода - проблемы :(
#2 by Philix
Вот тут: послали вот сюда для ознакомления с материалом:
#3 by Рэйв
поставить модулю  галку "Внешнее соединение" или скопировать функцию в модуль внешнего соединения и постаивть Экспорт
#4 by MrStomak
1. Галочка "Внешнее соединение" точно-точно-точно стоит?
#5 by arsik
Так у него стоит "внешнее соединение"
#6 by HardBall
Нажать F7 не предлагали?
#7 by Рэйв
Каюсь,прочитал сабж по диагонали:-)
#8 by alexeyomg
я видел где-то про f7, но что это? я нажимал, у меня ничего не происходило
#9 by alexeyomg
выше
#10 by Philix
И есть у меня какие-то сомнения на счет использования кириллицы в именах общих модулей и функций при обращении из Си Шарп. Попробуй старую добрую латынь
#11 by Рэйв
Нормально должно быть вроде.Я даже процедуры по русски называл.Съедало
#12 by Тролль главный
а зачем там пустой массив? dynamic result1c = connection1C.ОбщийМодуль.Тест;
#13 by MrStomak
А вызов метода без параметров обязательно с этим new object[] {} выполняется?
#14 by alexeyomg
ну в файловой работало нормально. сейчас попробую без пустого массива
#15 by Serginio1
#16 by Serginio1
#17 by alexeyomg
Так, убрал new object[] {} - заработало. Но есть метод с параметрами. Как его вызывать?
#18 by Тролль главный
вот так: dynamic result1c = connection1C.ОбщийМодуль.Тест(ПервыйПараметр,ВторойПараметр);
#19 by Philix
Через ком-соединения проходят только простые типы данных. Или сложные, но уже определенные на той стороне ком-соединения. Т.е. или строку туда (дату, число, буелво), или результат выражения типа connection1C.Справочники.Контрагенты.найтипокоду("12345678")
#20 by hhhh
параметры передавать
#21 by Serginio1
Чере COM соединения проходят любые COM совместимые типы в том числе и IDispatch
#22 by alexeyomg
мне обязательно нужно вызвать метод через InvokeMethod я делаю на самом деле так: valiuesDict- это Dictionary в c#. По сути оно сконвертируется в Соответствие в 1с-ке. Или нет? Вроде как если инвоук с параметрами, то надо писать последним атрибутом массив new object[] { valiuesDict }, чьи члены - это параметры. но у меня не работает. Даже если строку передаю
#23 by Serginio1
Dictionary в c#. По сути оно сконвертируется в Соответствие в 1с-ке. Или нет? Не сконвертируется. Нужна com обертка Например по ссылке из 15
#24 by alexeyomg
А если через массив?
#25 by hhhh
ты должен определить массив на той стороне connection1C.ntwObject("Массив"); и так далее. Даже если из 1с вызывать 1с, всё равно у них массивы свои у каждой.
#26 by hhhh
newObject
#27 by alexeyomg
Всё работает. НО!!! Не работает, если внутри функции вызывается метод с дерективой "&НаСервере". Пишет: System.Runtime.InteropServices.COMException (0x80020006): Неизвестное имя. (Исключение из HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))
#28 by Serginio1
Если массив простых типов то будет передаваться SafeArray
#29 by alexeyomg
Спасибо, ребят, заработало. потом добавляю данные в Соответствие object1c.Вставить(...); а потом передаю
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С