powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Вызов процедуры из C#
10 сообщений из 10, страница 1 из 1
Вызов процедуры из C#
    #37197647
EvolVER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть процедура "Проц1" в объекте конфигурации "Общие\общие модули\ОМодуль1". Может кто вкурсе, как вызвать эту процедури из C# (подойдет и VB)?

Начало такое:

Код: plaintext
1.
2.
3.
4.
5.
6.
Type v8type = Type.GetTypeFromProgID("V82.ComConnector");
object v8 = Activator.CreateInstance(v8type);

Object[] arguments = { "Srvr=srv;Ref=dbsr;Usr=usr;Pwd=pssw;" };

object v8connect = v8type.InvokeMember("Connect", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, v8, arguments);

Дальше не знаю как подойти.
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37197859
rigus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример.
http://v8.1c.ru/overview/Term_000000632.htm?printversion=1
Вроде там все просто
1 у общего модуля должно быть право внешнее соединение (для 8.2)
2. создаешь Com объект V82.COMConnector
3.создаешь внешнее соединение через метод Connect
4. Вызваешь свою функцию
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37220368
fcs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fcs
Гость
Всем привет.
Тоже необходимо вызвать функцию 1С из c#.

Делаю примерно также как и автор топика.
Но функцию вызвать не могу - ошибку пишет Неизвестное имя.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
private void doProcess()
{
BindingFlags v8flags = BindingFlags.Public | BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.GetProperty;
connection_string = "Srvr=srv;Ref=dbsr;Usr=usr;Pwd=pssw;"
object v8_connect = Activator.CreateInstance(Type.GetTypeFromProgID("V82.COMConnector"));
object[] connectargs = new object[1];
connectargs[0] = connection_string;
//Соединяемся - ок
object v8_base = v8_connect.GetType().InvokeMember("Connect",v8flags, null, v8_connect, connectargs);
// Получаем объект справочника пользователи - ок
object v8_user = InvokeMethod(v8_base, v8_base, "NewObject", new object[] { "СправочникМенеджер.Пользователи" });
//Выбираем
object v8_account = InvokeMethod(v8_user, v8_user, "Выбрать", null);
//Далее могу выбрать значения из справочника...

//не работает вот этот код. Ошибку пишет Неизвестное имя.
object res_f = InvokeMethod(v8_base, v8_base, "Внешний.СоздатьСчет", new object[] { par1, par2, par3 });
//par1, par2, par3 - параметры, которые передаются функции Внешний.СоздатьСчет

}

private object InvokeMethod(object v82, object refObject,string methodName, Object[] parameters)
{
           return v82.GetType().InvokeMember(methodName,this.v8flags, null, refObject, parameters);
}

Пробовал на функции ТекущаяДата - та же ошибка.
Подскажите, где ошибка ? Как такие функции вызывать ? И можно ли через внешнее соединение ?
rigus, дал ссылку - но там не нашел ответа.
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37220511
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а, собственно, что за имя ?
Код: plaintext
"Внешний.СоздатьСчет"
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37220564
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще... никакой из способов подключения (ни так называемое "внешние соединение" ни Automation) не поддерживают операторы встроенного языка. Прочтите еще раз приведенную статью, где сказано о поддержке встроенного языка?.
Хотите что-то эдакое делать через COM не вопрос - пишите соответвующую процедуру и в путь. Тем немение, объекты конфигурации - справочники, документы... - имеют, ну как-бы так сказать, свою объектную модель которая доступна через Com-интерейс. Работа с этими объектами ведется так же как и с любыми Com-объектами(не 1С) средствами встроенного языка - циклы, механизмы работы с колекциями, типизация, логические выражения и т.д.

Методы и свойства доступные для Automation серверов(обоих) перечислены во встроенном хелпе в разделе "Глобальный контексдт"

P.S.
А почему вы используете конектор а не "нормальный" Automation server("v82.Application")?
В принцепе, использование аутпрок сервера предпочтительней. Так как его же можно создать на любой машине(например на самом сервере 1С, да и лишний инстанс не требуется, а не только на той, на которой запускается ваше приложение.

Ка-то вот так(JScript)....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
V8 =  new  ActiveXObject("V81.Application", "RemoteHost");
V8.Connect("File=\"D:\\base1c; Usr=\"Usr\"; Pwd=\"pwd\" ");
	
SprSelected = V8.Catalogs["Контрагенты"].Select();
SprSelected.Next();
WScript.Echo(SprSelected.Наименование);
	
V8.Quit;

Грабли.
У некоторох конфигураций в глобальном модуле "Модуле обычного приложения" в процедуре ПередЗавершениемРаботыСистемы проверяется, задавать ли пользователю вопрос о том что он действительно хочет выйти из системы или нет. Если вопрос настроено что вопрос задается, то при вызове метода Quit происходит некторое подвисание, а потом на заднем плане появляется диалог "Вы действительно хотете завершить работу системы да/нет". Если Alt+Tab окна не пощлкать, то можно подумать что приложение обртившееся через COM зависло. А на самом деле висит диалог. Да и на какой машине он повиснет, если объект создан на удаленном хосте.
Имейте это в виду...
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37220579
fcs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fcs
Гость
The Dim!Ну а, собственно, что за имя ?
Код: plaintext
"Внешний.СоздатьСчет"


Это имя функции реализованной в 1С.
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37220582
fcs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fcs
Гость
Что не так с именем функции?
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37220604
The Dim!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внешний - это имя модуля?
И у него установлен флаг "Внешние соединение".

СоздатьСчет - имя процедуры/функции, объявленой с ключевым словом "Экспорт"

?
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37220892
fcs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
fcs
Гость
В итоге вот такое решение

В 1С необходимая функция СоздатьСчётИз перенесена в объект СчетНаОплатуПокупателю

код выглядит следующим образом
Код: plaintext
1.
2.
object v8_docmanager = InvokeMethod(v8_base, v8_base, "NewObject", new object[] { "ДокументМенеджер.СчетНаОплатуПокупателю" });
                object v8_doc = InvokeMethod(v8_docmanager, v8_docmanager, "СоздатьДокумент", null);
                v8_invoice = InvokeMethod(v8_doc, v8_doc, "СоздатьСчётИз", new object[] { par1, par2, par3 });
...
Рейтинг: 0 / 0
Вызов процедуры из C#
    #37220923
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
используйте тип dynamic и не надо будет использовать малочитабельный метод InvokeMethod
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Вызов процедуры из C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]