Имя: Пароль:
1C
1С v8
C# и V82.Application
0 DMF84
 
30.04.15
11:14
Приветствую всех.
Не получается соединиться с 1С из приложения на C# через V82.Application.
Код:
V8 = Activator.CreateInstance(Type.GetTypeFromProgID("V82.Application"));
// Запускается 1cv8.exe

Object[] arg = new Object[3];
arg[0] = V8.GetType().InvokeMember("RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod, null, V8, null);
// Выдает ошибку: "Неизвестное имя. (Исключение из HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))".

arg[1] = @"/d" + split[2] + " /n" + split[7] + "  /p" + split[8];
arg[2] = @"NO_SPLASH_SHOW";
bool result = (Boolean)V8.GetType().InvokeMember(@"Initialize", BindingFlags.Public | BindingFlags.InvokeMethod, null, V8, arg);
if (!result)
{}
Конец кода.

Подскажите что не так делаю? Какие в InvokeMember значения должны быть? Что-то нигде информации найти не могу.
RMTrade - это имя конфигурации или чего? Уж простите, в 1С я - "дуб-дубом"...
1 DMF84
 
30.04.15
11:19
П.С.: Рабочий код на старую версию 7.7:
V7 = Activator.CreateInstance(Type.GetTypeFromProgID("V77.Application"));
Object[] arg = new Object[3];
arg[0] = V7.GetType().InvokeMember("RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, null);
arg[1] = @"/d" + pathBase + " /n" + loginUser + "  /p" + paswordUser;
arg[2] = @"NO_SPLASH_SHOW";
bool result = (Boolean)V7.GetType().InvokeMember(@"Initialize", BindingFlags.Public | BindingFlags.InvokeMethod, null, V7, arg);
if (!result)
{
}
На v8.2 по аналогии не заработало...
2 Ненавижу 1С
 
гуру
30.04.15
11:30
RMTrade это что?
и вообще вместо этих ваших InvokeMember использовать dynamic
3 DMF84
 
30.04.15
13:05
(2) "RMTrade это что?" самому интересно. Это из третей строки кода: "arg[0] = V8.GetType().InvokeMember("RMTrade", BindingFlags.Public | BindingFlags.InvokeMethod, null, V8, null);"
"вместо этих ваших InvokeMember использовать dynamic" а подробней можно? Как его использовать применительно к 1С? Или пример кода можно?
4 Господин ПЖ
 
30.04.15
13:08
RMTrade - осталось его в 8.2 найти
5 butterbean
 
30.04.15
13:11
(0) это похоже на код для запуска приложения v7.7, он нафиг тут не нужен
6 DMF84
 
30.04.15
13:15
(4) Как?
7 DMF84
 
30.04.15
13:15
(5) А что тут нужно?
8 Xapac
 
30.04.15
13:31
9 Ненавижу 1С
 
гуру
30.04.15
13:59
dynamic V8 = Activator.CreateInstance(Type.GetTypeFromProgID("V82.ComConnector"));
            dynamic tr = V8.Connect("...");
            dynamic s = tr.Справочники.Валюты.СоздатьЭлемент();
10 Serginio1
 
30.04.15
14:04
11 DMF84
 
30.04.15
16:35
На другом форуме нашёл ответ.
Может кому пригодится:
var v82ComConnector = Type.GetTypeFromProgID("V82.Application");
V82 = Activator.CreateInstance(v82ComConnector);
string t = ("File=\"" + split[2] + "\";Usr=\"" + split[7] + "\";" + "Pwd=\"" + split[8] + "\";");
Object[] ar = {};
Object[] arguments = { t };
bool isConnected = (bool)v82ComConnector.InvokeMember("Connect", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, V82, arguments);
dynamic _Module = v82ComConnector.InvokeMember("ПроцедурыОбменаДаннымиСУправлениемТорговлей", BindingFlags.Public | BindingFlags.GetProperty | BindingFlags.Static, null, V82, ar);
                      
string _ResaltFunc = _Module.Привет();

V82 = null;
v82ComConnector = null;

Осталось понять как завершить 1cv8.exe по окончании работы...
12 sapphire
 
30.04.15
16:45
см метод Exit
False
13 sapphire
 
30.04.15
16:45
Глобальный контекст (Global context)
ЗавершитьРаботуСистемы (Exit)
Синтаксис:

ЗавершитьРаботуСистемы(<ЗапрашиватьВозможность>, <ПерезапуститьПриЗавершении>, <ДополнительныеПараметрыКомаднойСтроки>)
Параметры:

<ЗапрашиватьВозможность> (необязательный)

Тип: Булево.
Если Ложь, то завершение работы программы будет выполнено безусловно (не зависимо от наличия редактируемых данных).
Если значение параметра Истина, то будут вызываться обработчики закрытия для каждой открытой формы и для всего приложения. Для редакторов текстов, табличных документов и HTML-документов будет произведен анализ модифицированности. Если нет факторов, препятствующих закрытию (например, данные модифицированы и не сохранены), то выполняется завершение работы. В противном случае (такие данные есть) будет выдан вопрос о необходимости сохранения документов.
Значение по умолчанию: Истина
<ПерезапуститьПриЗавершении> (необязательный)

Тип: Булево.
Указывает необходимость выполнения запуска нового сеанса с текущими установками после завершения работы.
Значение по умолчанию: Ложь
<ДополнительныеПараметрыКомаднойСтроки> (необязательный)

Тип: Строка.
Содержит дополнительные параметры, которые будет переданы новому сеансу. Если такие параметры уже есть среди текущих установок, переданные заменят текущие.
Параметр указывается, если значение параметра <Перезапустить при завершении>=Истина.
Если режим приложения (УправляемоеПриложение/ ОбычноеПриложение) не задан явно дополнительным параметром командной строки, при запуске текущего приложения учитывается использование параметров принудительного включения режима управляемого или обычного приложения /RunModeManagedApplication и /RunModeOrdinaryApplication.
Описание:

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

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
Примечание:

Если вызов осуществляется из модуля формы, открытой в модальном режиме, завершение работы системы не выполняется.
Если параметр <ПерезапуститьПриЗавершении>=Истина, то после завершения работы системы будет открыт новый сеанс 1С:Предприятия.
Если в процессе завершения системы пользователь отменит завершение работы, запуск нового сеанса выполнен не будет.
Пример:

// безусловное завершение работы программы
ЗавершитьРаботуСистемы(Ложь);
14 Serginio1
 
30.04.15
16:56
FinalReleaseComObject