|
Передача СОМ-объекта с клиента на сервер | ☑ | ||
---|---|---|---|---|
0
Max Street
19.11.15
✎
13:19
|
Привет. Как передать СОМ-объект с клиента на сервер?
Пробовал так: V8 = Новый COMОбъект("V83.Application"); РезультатПодключения = V8.Connect(ПараметрыСоединения); Объект.АдресВХ = ПоместитьВоВременноеХранилище(V8, Новый УникальныйИдентификатор()); //где Объект.АдресВХ - реквизит типа Строка неограниченной длины и вот так: V8 = Новый COMОбъект("V83.Application"); РезультатПодключения = V8.Connect(ПараметрыСоединения); СтруктураСОМ = Новый Структура("СОМ", V8); Объект.АдресВХ = ПоместитьВоВременноеХранилище(СтруктураСОМ, Новый УникальныйИдентификатор()); в обоих случаях одна ошибка: Ошибка помещения значения во временное хранилище по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: Запись значения свойства 'request': Процедуры по переносу находятся в модуле объекта. Туда и нужно передать V8 |
|||
1
ДенисЧ
19.11.15
✎
13:20
|
Никак не передашь.
|
|||
2
Чайник Рассела
19.11.15
✎
13:20
|
(1) только хотел про тебя написать
|
|||
3
VikingKosmo
19.11.15
✎
13:21
|
Не передавать COM соединение, а создавать его сразу на сервере
|
|||
4
Чайник Рассела
19.11.15
✎
13:22
|
+(3) еще лучше в общем модуле с повторным использованием значений на время сеанса
|
|||
5
Max Street
19.11.15
✎
13:23
|
(3) пробовал процедуру установки соединения перенести в модуль объекта, но так соединение не устанавливается вообще
|
|||
6
VikingKosmo
19.11.15
✎
13:25
|
может потому что сервер не в курсе, куда коннектиться нужно?
|
|||
7
los_hooliganos
19.11.15
✎
13:25
|
(5) Сервера на разных физических. На тот к которому подключаетесь должны быть права и разрешения у того кто подключается.
А в связи с глюковастостью 8.2/3 желательно идентичные логин/пароли для серверов 1С. |
|||
8
Max Street
19.11.15
✎
13:31
|
(6) еще как в курсе. в ПараметрыСоединения содержится строка, в которой указаны путь к базе(файловая), имя пользователя, пароль
|
|||
9
Nuobu
19.11.15
✎
13:31
|
(0) ХранилищеЗначения пробовал?
|
|||
10
Max Street
19.11.15
✎
13:33
|
(9) нет, сейчас попробую, спасибо
|
|||
11
VikingKosmo
19.11.15
✎
13:33
|
(8) а доступ с сервера 1С, к диску на котором база лежит, хоть есть?
|
|||
12
ДенисЧ
19.11.15
✎
13:33
|
А давайте подумаем...
Что произойдёт, если программа этого кома на клиенте установлена, а на сервере нет? |
|||
13
Cyberhawk
19.11.15
✎
13:34
|
Нужно не просто через хранилище значения, а поместить СОМ-объект в структуру, а ее уже в хранилище значения
|
|||
14
Max Street
19.11.15
✎
13:35
|
(11) есть конечно
|
|||
15
VikingKosmo
19.11.15
✎
13:36
|
(14) ну так и в чем проблема все делать на сервере?!
|
|||
16
DexterMorgan
19.11.15
✎
13:37
|
А почему сразу на сервере нельзя создать ком?
|
|||
17
Max Street
19.11.15
✎
13:38
|
(15) (16) я сразу так и делал, но соединение не устанавливается. только на клиенте получилось
|
|||
18
VikingKosmo
19.11.15
✎
13:39
|
(17) а разобраться, почему на сервере не устанавливается?
|
|||
19
Fish
19.11.15
✎
13:40
|
(17) А какие ошибки были?
|
|||
20
Max Street
19.11.15
✎
13:41
|
(18) (19) да никаких ошибок. в списке процессов только видно, что соединение устанавливается, но через секунду пропадает.
|
|||
21
VikingKosmo
19.11.15
✎
13:42
|
(20) а как узнал, что ошибок не было?
|
|||
22
Max Street
19.11.15
✎
13:43
|
(21) сообщений с ошибками не выдавало
|
|||
23
DexterMorgan
19.11.15
✎
13:59
|
(17) Надо разбираться почему
|
|||
24
Max Street
19.11.15
✎
14:00
|
(23) Уже пробовал - никаких идей. А у тебя?
|
|||
25
Fish
19.11.15
✎
14:01
|
(24) Отладчиком смотрел?
|
|||
26
Max Street
19.11.15
✎
14:01
|
Господа, а кто-нибудь пробовал устанавливать соединение и переносить данные на стороне сервера?
|
|||
27
DexterMorgan
19.11.15
✎
14:02
|
(24) ну а ком объект создается в отладке? у пользователя в параметрах соединения есть право внешнего соединения?
|
|||
28
DexterMorgan
19.11.15
✎
14:03
|
(26) да конечно пробовали =)
|
|||
29
cw014
19.11.15
✎
14:03
|
(24) Журнал регистрации курил? Пробовал при "отвале" в Попытку Исключение с сообщением об ошибке?
|
|||
30
vde69
19.11.15
✎
14:04
|
если COM объект зарегистрирован на сервере 1с или используется удаленный вызов то нужно
пользователю под которым работает сервер 1с (служба) нужно добавить права "пользователь DCOM" после этого перезагрузить сервер 1с во всех других случаях - ничего не выйдет |
|||
31
DexterMorgan
19.11.15
✎
14:05
|
(30) точно кста, сам сталкивался =)
|
|||
32
Tateossian
19.11.15
✎
14:06
|
(26) У меня регламентно данные с одной базы в другую так на сервере переносятся.
|
|||
33
Max Street
19.11.15
✎
14:07
|
сейчас перенесу процедуру по установке соединения на сервер и отпишусь
|
|||
34
vde69
19.11.15
✎
14:08
|
(31) я кстати сам допер в свое время, когда делал в регламенте выгрузку отчетов в ексель... копался целый день пока допер... в тот момент в инете подсказок на эту тему еще не было вообще...
|
|||
35
Nuobu
19.11.15
✎
14:09
|
(13) А зачем? Разве ты помещаешь в структуру таблицу значений, чтобы получить её в другом серверном вызове?
|
|||
36
Tateossian
19.11.15
✎
14:13
|
Я помню еще как-то ручками прописывал компоненту COM+, но там был сервер x64.
|
|||
37
Max Street
19.11.15
✎
14:20
|
Перенес процедуру по установке соединения в модуль объекта. Отладчик показывает, что V8 имеет тип СОМОбъект. В списке процессов появляется нужный процесс, через секунду исчезает. при запуске процедуры по переносу из v8 вылетает ошибка:
Значение не является значением объектного типа (NewObject) Запрос = V8.NewObject("Запрос"); |
|||
38
vde69
19.11.15
✎
14:22
|
весь код покажи
|
|||
39
Max Street
19.11.15
✎
14:22
|
(9) хранилище значений тоже не подходит, т.к его можно создать только на сервере, а сом-объект на сервер не передать
|
|||
40
Max Street
19.11.15
✎
14:24
|
(28)
Процедура УстановкаСоединения() Экспорт ПараметрыСоединения = "File="""+СокрЛП("C:\test\перенос131115\настройки")+"""; Usr="""+СокрЛП("Иванов")+"""; Pwd="""+СокрЛП("123456")+""";"; V8 = Новый COMОбъект("V83.Application"); РезультатПодключения = V8.Connect(ПараметрыСоединения); Каталог_1С = V8.Метаданные.Имя; Сообщить("Соединение установлено"); КонецПроцедуры Процедура ПервоначальныеНастройки() Экспорт Запрос = V8.NewObject("Запрос"); Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | Константы КАК Константы"; ТЗ = Запрос.Выполнить().Выгрузить(); НачатьТранзакцию(); Для Каждого Элемент Из ТЗ.Колонки Цикл ЗначениеТЗ = ТЗ.Получить(0)[Элемент.Заголовок]; Если ТипЗнч(ЗначениеТЗ) = Тип("Булево") ИЛИ ТипЗнч(ЗначениеТЗ) = Тип("Число") ИЛИ ТипЗнч(ЗначениеТЗ) = Тип("Дата") ИЛИ ТипЗнч(ЗначениеТЗ) = Тип("Строка") Тогда Константы[Элемент.Заголовок].Установить(ЗначениеТЗ); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
41
Nuobu
19.11.15
✎
14:24
|
(37) Потому что делал без попытки.
|
|||
42
Max Street
19.11.15
✎
14:24
|
(38)
Процедура УстановкаСоединения() Экспорт ПараметрыСоединения = "File="""+СокрЛП("C:\test\перенос131115\настройки")+"""; Usr="""+СокрЛП("Иванов")+"""; Pwd="""+СокрЛП("123456")+""";"; V8 = Новый COMОбъект("V83.Application"); РезультатПодключения = V8.Connect(ПараметрыСоединения); Каталог_1С = V8.Метаданные.Имя; Сообщить("Соединение установлено"); КонецПроцедуры Процедура ПервоначальныеНастройки() Экспорт Запрос = V8.NewObject("Запрос"); Запрос.Текст = "ВЫБРАТЬ | * |ИЗ | Константы КАК Константы"; ТЗ = Запрос.Выполнить().Выгрузить(); НачатьТранзакцию(); Для Каждого Элемент Из ТЗ.Колонки Цикл ЗначениеТЗ = ТЗ.Получить(0)[Элемент.Заголовок]; Если ТипЗнч(ЗначениеТЗ) = Тип("Булево") ИЛИ ТипЗнч(ЗначениеТЗ) = Тип("Число") ИЛИ ТипЗнч(ЗначениеТЗ) = Тип("Дата") ИЛИ ТипЗнч(ЗначениеТЗ) = Тип("Строка") Тогда Константы[Элемент.Заголовок].Установить(ЗначениеТЗ); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
43
vde69
19.11.15
✎
14:54
|
мда....
1. у тебя что лежит НА СЕРВЕРЕ ПО АДРЕСУ "C:\test\перенос131115\настройки" ??? вероятно на сервере такого вообще нет.... 2. "V83.Application" - не будет работать по определению, там есть оконные функции, тебе нужен не OLE а COM конектор 3. убери у всех процедур слово "Экспорт", это даст гарантию что нет клиент/серверных переходов и т.д. |
|||
44
vde69
19.11.15
✎
14:57
|
а вообще не парь мозг, используй конвертацию данных, там все куда проще...
|
|||
45
Max Street
19.11.15
✎
17:09
|
(43) Я переношу из файловой базы. На что заменить "V83.Application"?
|
|||
46
vde69
19.11.15
✎
18:50
|
||||
47
Cyberhawk
19.11.15
✎
19:03
|
(35) нет, для ТЗ Я использую преобразование в массив структур и обратно (это если нет желания или возможности использовать временное хранилище).
А по поводу СОМ-а - в 8.3 это такой хак: http://goo.gl/kC6YOq |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |