|
v8.3 COMConnection [C#] выскакивает Исключение | ☑ | ||
---|---|---|---|---|
0
Frdezleen
29.05.14
✎
10:40
|
Доброго времени суток. Надеюсь по адресу обращаюсь. Не могу никак заставить работать программу. На форме 1 кнопка. Текст клика:
private void button1_Click(object sender, EventArgs e) { string user = "Admin"; string pas = "123456"; string file = "D:\\1cv83\\TEST"; dynamic result; dynamic refer; V83.COMConnector com1s = new V83.COMConnector(); com1s.PoolCapacity = 10; com1s.PoolTimeout = 60; com1s.MaxConnections = 2; result = com1s.Connect("File='" + file + "';Usr='" + user + "';pwd='" + pas + "';"); refer = result.Справочники.Номенклатура.СоздатьЭлемент(); refer.Наименование = "Создано из C# Алексом"; refer.Записать(); } Текст ошибки при клике по кнопке Необработанное исключение типа "System.Runtime.InteropServices.COMException" произошло в Link1C.exe Дополнительные сведения: В результате вызова компонента COM возвращена ошибка в формате HRESULT E_FAIL. P.S. система Windows 7 x64. 1С лицензионная, установлена в системе. Разработка ведется для x86 платформы в VS2010. База такая существует, пользователь в ней создан. Права на папку выданы P.P.S только что обнаружил что во время выброса исключения в папке с базой появляются два *tmp* файлика, которые исчезают. То есть что-то происходит во время подключения, а что не понятно. |
|||
1
Рэйв
29.05.14
✎
10:44
|
(0)А апострофы точно можно исмпользовать вместо нормальных
кавычек? А то у меня например вот так: Соединение = Сом.Connect ("File="""+СокрЛП(ПутьКБазеФ)+"""; Usr ="""+СокрЛП(ПользовательБазыФ)+""";Pwd ="""+СокрЛП(ПарольБазыФ)+""""); |
|||
2
Maxus43
29.05.14
✎
10:45
|
имхо строка соединения неправильная
|
|||
3
Maxus43
29.05.14
✎
10:47
|
проверь строку собранную средствами винды
|
|||
4
Frdezleen
29.05.14
✎
11:13
|
проверил. собирает как у Рэйва.
Я пробовал, кавычки, без кавычек, апострофы - все уже перебрал |
|||
5
Maxus43
29.05.14
✎
11:21
|
(4) средствами винды проверил? (файлик с расширением .udl сделай) по твоей строке подключения подключается вобще? не из VS
|
|||
6
Frdezleen
29.05.14
✎
11:25
|
(5) Как не из VS проверить строку подключения не знаю пока. С udl разбираюсь сейчас
|
|||
7
shuhard
29.05.14
✎
11:28
|
(5) udl для ADODB, с комами он не работает
|
|||
8
shuhard
29.05.14
✎
11:28
|
(0) в какой строке произошла ошибка ?
|
|||
9
Maxus43
29.05.14
✎
11:30
|
(7) точняк..(
|
|||
10
Frdezleen
29.05.14
✎
11:32
|
(8) result = com1s.Connect("File='" + file + "';Usr='" + user + "';pwd='" + pas + "';"); в этой.
Немного изменил текст программы string user = @"""Admin"""; string pas = @"""123456"""; string file = @"""D:\1cv83\TEST"""; dynamic result; dynamic refer; V83.COMConnector com1s = new V83.COMConnector(); //com1s.PoolCapacity = 10; //com1s.PoolTimeout = 60; //com1s.MaxConnections = 2; string con = "File=" + file + ";Usr=" + user + ";Pwd=" + pas + ";"; Console.Write(con); //string con =@"File=""D:\1cv83\Test"";Usr=""Admin"";pwd=""123456"""; try { result = com1s.Connect(con); refer = result.Справочники.Номенклатура.СоздатьЭлемент(); refer.Наименование = "Создано из C# Алексом"; refer.Записать(); } catch (System.Exception ex) { MessageBox.Show(ex.Message + " " + con); } |
|||
11
Maxus43
29.05.14
✎
11:48
|
из 1с к 1с попробуй цепанись по кому.
|
|||
12
Frdezleen
30.05.14
✎
07:42
|
Такой вопрос. Может ли блокировать мне внешнее соединение отсутствие лицензии? Качал технологическую платформу 8.2 с сайта https://users.v8.1c.ru/
|
|||
13
shuhard
30.05.14
✎
07:44
|
(12) а ключ ?
|
|||
14
Frdezleen
30.05.14
✎
07:45
|
а вот хз, она ключ не просила и работает...
|
|||
15
Frdezleen
30.05.14
✎
07:48
|
(13) У нас есть лицензия на 1 рабочее место, я по этому регномеру на сайте users зарегистрировался, скачал оттуда технологическую платформу 8.2 и конфиг с целью разработки внешнего приложения. Вот она и не просит никакой ключ, а работать позволяет...Но как будто именно она блокирует внешние соединения
|
|||
16
shuhard
30.05.14
✎
08:00
|
(15) [Но как будто именно она блокирует внешние соединения]
а у пользователя в ролях есть работа по Com ? |
|||
17
Frdezleen
30.05.14
✎
08:19
|
да есть полные права (ну все галочки проставил)
|
|||
18
shuhard
30.05.14
✎
08:23
|
(17) ещё раз, права на корень
|
|||
19
Frdezleen
30.05.14
✎
08:27
|
(18) это как?
|
|||
20
shuhard
30.05.14
✎
08:37
|
(19) нужно открыть конфигуратор
найти роль и позырить все права этой роли на корень конфигурации, возможно нет галки на Внешнее соединение |
|||
21
Frdezleen
30.05.14
✎
08:41
|
(20) хм... а какая может быть роль у пользователя. Я создал пользователя и проставил ему все галки в правах.
|
|||
22
shuhard
30.05.14
✎
08:42
|
(21) у пользователя может быть неограниченно количество ролей
и все эти роли чудесно видны в конфигураторе Администрирование - пользователи |
|||
23
Frdezleen
06.06.14
✎
09:32
|
Продолжение истории. К базе я подключился, объект получил. А вот теперь на строчке refer.Записать(); выскакивает эксепшн что ссылка на объект не указывает на экземпляр объекта...
|
|||
24
kiruha
06.06.14
✎
09:40
|
(23)
referObject=refer.ПолучитьОбъект(); ... referObject.Записать(); |
|||
25
kiruha
06.06.14
✎
09:41
|
А у тебя уже объект сорри
|
|||
26
Dolphinbet
06.06.14
✎
09:50
|
(0) А не лучше ли веб-сервисы использовать вместо com?
|
|||
27
Frdezleen
06.06.14
✎
09:54
|
(26) мне нужно чтобы это и у заказчика работало, а я не знаю стоит ли у него web-расширение, можно ли залезть в конфиг 1С.
Так я просто сначала на своей машине соберу конфиг, потом на машине заказчика установлю IDE и пересоберу проект с его COM.Connector. Версия 1С заказчика 7.7 |
|||
28
Dolphinbet
06.06.14
✎
09:56
|
(27) Если у заказчика 7.7 почему Вы используете V83.COMConnector()? Это совершенно разные вещи..
|
|||
29
Frdezleen
06.06.14
✎
09:59
|
(27) Я у себя разрабатываю и тестирую приложение, платформы 7.7 и не имею. Планирую потом на компьютере заказчика пересобрать проект
|
|||
30
Dolphinbet
06.06.14
✎
10:08
|
(29) не знаю... я бы поставил 7.7 на Вашем месте, потом придется все переделывать
|
|||
31
Frdezleen
06.06.14
✎
10:09
|
(30) у меня нет 7.7 )
|
|||
32
Dolphinbet
06.06.14
✎
10:09
|
А вообще посоветуйте заказчику перейти на платформу 8.3 :)
|
|||
33
Frdezleen
06.06.14
✎
10:11
|
(32) я то посоветую, это мою проблему не решает. Почему выскакивает эксепшн на refer.Записать()
|
|||
34
Dolphinbet
06.06.14
✎
10:14
|
(33) а какая у Вас конфигурация? какая то из типовых или самописная?
|
|||
35
Dolphinbet
06.06.14
✎
10:15
|
интерактивно создается элемент справочника?
|
|||
36
Frdezleen
06.06.14
✎
10:15
|
(35) что? я не знаю - это работа через COM же
|
|||
37
Serginio1
06.06.14
✎
12:04
|
||||
38
Frdezleen
06.06.14
✎
12:05
|
(37) на всякий случай спасибо. Но пока не понял
|
|||
39
Serginio1
06.06.14
✎
12:12
|
Проблема может быть в том, что из модуля объекта ПриЗаписи вызываются методы из модулей у которых не стоит галка ВнешнееСоединение. Поэтому при выполнении данных методов вызывается ошибка. Так же для справочников может вызываться событие ПриУстановкеНовогоКода (при подписке на событие)
|
|||
40
Frdezleen
06.06.14
✎
12:18
|
(39)хм то есть про ссылку на объект еще не факт? ладно посмотрю
|
|||
41
Frdezleen
06.06.14
✎
13:33
|
(39) проверка не выявила ошибок
|
|||
42
Serginio1
06.06.14
✎
14:05
|
(41)Параметры\Модули\проверка галку напротив внешнее соединение. И сделай проверку модуля или проверка модулей в меню конфигурация
точно галочку поставил? |
|||
43
Frdezleen
06.06.14
✎
14:18
|
Все на другом форуме помогли. добавил строчку
refer.ОбменДанными.Загрузка=true перед refer.Записать() и все заработало. Всем спасибо за потраченное время) Еще увидимся |
|||
44
Serginio1
06.06.14
✎
14:25
|
(43) Значит проблема у тебя при записи где обычно проверяется ОбменДанными.Загрузка
|
|||
45
Frdezleen
06.06.14
✎
14:28
|
(44) Где это посмотреть? А то работает то работает. Но я не люблю "случайные" и непонятные решения проблем
|
|||
46
Serginio1
06.06.14
✎
14:35
|
(39) Если внимательно перечитаешь 39 то поймешь откуда проблема. Где то вызывается модуль у которого не стоит галочка внешнее соединение.
Если ты считаешь, что предусмотрел все действия которые происходят при записи то используй ОбменДанными.Загрузка=истина. Она как раз предназначена, что бы не проводить никаких действий при записи например Процедура ПриЗаписи(Отказ) Если НЕ ОбменДанными.Загрузка Тогда НастройкаПравДоступа.ОбновитьПраваДоступаКИерархическимОбъектамПриНеобходимости(Ссылка,ПрошлыйИзмененныйРодительОбъектаДоступа, Отказ); КонецЕсли; КонецПроцедуры |
|||
47
Frdezleen
06.06.14
✎
14:36
|
(46) А как мне "предусмотреть"? То бишь, где узнать ВСЁ, что происходит при записи, а то выходит это костыль и опасный костыль
|
|||
48
Serginio1
06.06.14
✎
14:39
|
(47) Угу. Прочитать модуль при записи и подписки на события
|
|||
49
kiruha
06.06.14
✎
20:45
|
(47)
Ставишь точку останова в ПередЗаписью и по шагам отлаживаешь В чем проблема ? |
|||
50
EvgeniuXP
06.06.14
✎
22:52
|
(31) у тебя нет - в инете всё есть, попробуй поискать там. Только 7.7 инсталлируй, а не перепиши просто папку, иначе OLE не будет работать, ну или регай dll отдельно.
|
|||
51
EvgeniuXP
06.06.14
✎
22:54
|
и книжку заодно найди Андрей Михайлов 2-ое издание "1С.Предприятие 7.7 8.0. Системное программирование", там всё написано.
|
|||
52
Frdezleen
10.06.14
✎
06:28
|
итак...вся проблема была в...единице измерения. Кому интересно вот нормальный код на C#. Записи также присваивается новый код из нумерации 1С.
private void button1_Click(object sender, EventArgs e) { string user = @"""Admin"""; string pas = @"""123456"""; string file = @"""D:\1CBase\AccountingBase"""; dynamic result; dynamic refer; V82.COMConnector com1s = new V82.COMConnector(); com1s.PoolCapacity = 10; com1s.PoolTimeout = 60; com1s.MaxConnections = 2; string con = "File=" + file + ";Usr=" + user + ";Pwd=" + pas + ";"; result = com1s.Connect(con); refer = result.Справочники.Номенклатура.СоздатьЭлемент(); refer.УстановитьНовыйКод(); refer.Наименование = "Персики"; refer.НаименованиеПолное = "Персики солнечные"; refer.БазоваяЕдиницаИзмерения = result.Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");//соответствует ЕИ "штук" refer.Записать(); } |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |