| 
    
        
     
     | 
    
    
  | 
Передача СОМ-объекта с клиента на сервер | ☑ | ||
|---|---|---|---|---|
| 
    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  | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |