![]() |
|
1c создание запроса в объекте и передача его в 1с | ☑ | ||
---|---|---|---|---|
0
club-dance
24.01.12
✎
16:21
|
Требуется создать запрос в com объекте и передать его 1с.
Вот код в c#: <pre> Type t = Type.GetTypeFromProgID("V82.COMConnector"); obj = System.Activator.CreateInstance(t); dynamic conObj = obj.Connect(@"File=c:\Users\Владимр\Documents\1C\Урок\Запросы;"); dynamic myQuery = conObj.newObject("Запрос"); myQuery.Текст = "ВЫБРАТЬ ВложенныйЗапрос.Номенклатура, СУММА(ВложенныйЗапрос.Закупки) КАК Закупки, СУММА(ВложенныйЗапрос.Продажи) КАК Продажи ИЗ (ВЫБРАТЬ ПриходнаяТовары.Номенклатура КАК Номенклатура, ПриходнаяТовары.Количество КАК Закупки, 0 КАК Продажи ИЗ Документ.Приходная.Товары КАК ПриходнаяТовары ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РасходнаяТовары.Номенклатура, 0, РасходнаяТовары.Количество ИЗ Документ.Расходная.Товары КАК РасходнаяТовары) КАК ВложенныйЗапрос СГРУППИРОВАТЬ ПО ВложенныйЗапрос.Номенклатура"; myQuery.УстановитьПараметр("ДатаОтчета", MyMessage); returnQuery = myQuery.Выполнить(); </pre> вот код вызова в 1с: <pre> ПрогИД = "AddIn.MyQuery"; ПодключитьВнешнююКомпоненту(ПрогИД); МояБиблиотека = Новый COMОбъект(ПрогИД); Запрос1 = МояБиблиотека.ShowMessage(1); </pre> в переменную запрос1 передается comобъект а мне нужно чтоб передавалось РезультатЗапроса |
|||
1
Fram
24.01.12
✎
16:23
|
а зачем из 1с вызвать сторонний ком объект, который вызывает 1с?
|
|||
2
Buster007
24.01.12
✎
16:27
|
тип результатЗапроса существует в приемнике?
|
|||
3
club-dance
24.01.12
✎
16:40
|
Fram это делается для скрытия запроса!
Buster007 существует.. но там много побочной информации.. |
|||
4
Skylark
24.01.12
✎
16:59
|
Не получится... Пока они не лягут, ничего у них не получится! (с)
|
|||
5
H A D G E H O G s
24.01.12
✎
17:03
|
(3) Хочешь я тебе этот запрос вытащу, ну минут за 10?
|
|||
6
Skylark
24.01.12
✎
17:04
|
А если попробовать использовать к переменной запрос1 методы обхода как у обычного результата запроса? Прокатит?
|
|||
7
1с-кин
24.01.12
✎
17:04
|
(0) не получится НИКОГДА!
По COM 1с всегда получает COM-же объекты - именно по этому ставка НДС18 в одной базе и ставка НДС18 - разные объекты, которые надо получать каждую из своей базы. |
|||
8
1с-кин
24.01.12
✎
17:04
|
(6) нужно сразу получать готовый РезультатЗапроса.
|
|||
9
H A D G E H O G s
24.01.12
✎
17:09
|
(7) Именно поэтому при написании обычных ВК и надо использовать Appdispatch, любезно предоставленный 1С входящим параметром в процедуре Init()
|
|||
10
Skylark
24.01.12
✎
17:18
|
(9) Ну не тяни, поделись знанием. В базу знаний добавим.
|
|||
11
club-dance
24.01.12
✎
17:35
|
H A D G E H O G s а как мне тогда скрыть текст запроса?
|
|||
12
1с-кин
24.01.12
✎
17:41
|
99) ну это опять на милости 1с - ладно хоть к диспатчу дали обратится ))
|
|||
13
H A D G E H O G s
24.01.12
✎
17:46
|
(10) Я на C++ языках ВК не писал.
В Дельфи это делается так: function AddInObject.Init(pConnection:IDispatch):HResult;stdcall; // 1С вызывает эту функцию при инициализации (старте) компоненты begin i1cv8 := pConnection; // Сохраняем ссылку, AppDispatch пока нельзя получать. ........ Init:=S_OK; end; В момент вызова метода компоненты получим AddDispatch function AddInObject.CallAsFunc(lMethodNum:Integer;var pvarRetValue:OleVariant;var paParams:PSafeArray):HResult;stdcall; { Здесь 1С выполняет код внешних функций } begin try vk_object.AppDispatch:=OleVariant(vk_object.iConnect).AppDispatch; //вызов метода, бла бла бла ..... vk_object.AppDispatch:=Unassigned; |
|||
14
H A D G E H O G s
24.01.12
✎
17:46
|
vk_object.AppDispatch:=OleVariant(vk_object.iConnect).AppDispatch;
заменить на AppDispatch:=OleVariant(i1cv8).AppDispatch; |
|||
15
H A D G E H O G s
24.01.12
✎
17:49
|
(11) Зашифруй каким-нибудь простейшим xor с автоключом.
|
|||
16
club-dance
24.01.12
✎
17:49
|
H A D G E H O G s дай какие-нибудь ссылки на конкретные примеры!
|
|||
17
Serginio1
24.01.12
✎
17:52
|
(0) Можешь создать и передать как результат функции. Если не нужны обратные вызовы ВК ненужна в 8 ке
|
|||
18
club-dance
24.01.12
✎
17:55
|
Serginio1 я и передаю как результат функции, но он мне возвращает comобъект, а мне надо тип результатзапроса
|
|||
19
Serginio1
24.01.12
✎
18:05
|
(18) Да тупанул. Маршалинга небудет. Тогда AppDispatch
Можешь взять http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 public void InitFrom1C(object Object1C) { dynamic Диспетчер=Object1C; AppDispatch=Диспетчер.Диспетчер; } Или переопределяй в Init |
|||
20
Serginio1
24.01.12
✎
18:06
|
AppDispatch=Диспетчер.AppDispatch;
|
|||
21
Serginio1
24.01.12
✎
18:09
|
Да в свое время делал ВК которая возвращает это AppDispatch, который передавал в методы обыкновенных COM объектов. Но технология ВК для Объектов Автоматизации поддерживающих ITypeInfo и выполняет все его свойства и методы через IlanguageExtender интересней
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |