![]() |
![]() |
![]() |
|
Вопрос по вк: Delphi + 1с 8.1 | ☑ | ||
---|---|---|---|---|
0
DSSS
28.03.11
✎
18:07
|
Доброго дня!
Delphi 7.0, 1С 8.2.13.205 Начал изучать вк, хочу решить простенькую задачу: нужно передать в вк номер и дату документа авансовый отчет, чтобы по этим параметрам получить ссылку на документ. Что делаю: В Delphi: function T_LIB1_object.meth2(mode: TMode): String; var NUM: String; OLEDOC1: Variant; DATEDOC: TDateTime; begin case mode of m_rus_name: Result:='ПоискПоНомеру'; m_eng_name: Result:='GetNUM'; m_n_params: g_NParams:=2; m_execute: begin NUM:=GetParamAsString(0); ShowMessage(NUM); DATEDOC:=GetParamAsTDateTime(1); ShowMessage(DateTimeToStr(DATEDOC)); OLEDOC1:=s1C8_ole.Документы.АвансовыйОтчет; OLEDOC1:=OLEDOC1.НайтиПоНомеру(NUM,DATEDOC); g_Value:=OLEDOC1; end; end;//case end; В 1С: Результат = LIB1.GetNUM("ТД00-000001",ТекущаяДата()); Тип значения "Результата" COMОбъект. Подскажите, пжл, как получить не COMОбъект, а именно ссылку? |
|||
1
H A D G E H O G s
28.03.11
✎
18:23
|
s1C8_ole
как получаешь? |
|||
2
DSSS
28.03.11
✎
18:27
|
(1)
s1C8_ole:=UnAssigned; s1C8_ole:=CreateOleObject('V82.COMConnector'); s1C8_ole:=s1C8_ole.Connect(Trim(ConnectString)); |
|||
3
DSSS
28.03.11
✎
18:40
|
Где-то видел ссылку на форуме как раз по такой теме, не могу найти что-то, может кто подскажет, где почитать?
|
|||
4
DSSS
28.03.11
✎
19:10
|
Подниму.
|
|||
5
H A D G E H O G s
28.03.11
✎
21:33
|
Мистец.
А зачем оно тогда, это ВК? |
|||
6
H A D G E H O G s
28.03.11
✎
21:39
|
s1C8_ole:=OleVariant(PConnect).AppDispatch;
Это мы получим "контекст" текущей базы, к которой подключена ВК. Этот контекст поймет твою ссылку. PConnect:IDispatch; - свойство экземпляра класса T_vk_object. romix за нас всех уже подумал. |
|||
7
DSSS
29.03.11
✎
17:03
|
(6) Спасибо. Если использую s1C8_ole:=OleVariant(PConnect).AppDispatch;
В 1с возникает ошибка: LIB1 : Access violation at address 0C8B648F in module 'LIB1.dll'. Read of address 00000000. Подскажи, пжл, как побороть? И если можно, подскажи где можно посмотреть пример использования OleVariant(PConnect).AppDispatch; |
|||
8
GenV
29.03.11
✎
17:10
|
||||
9
DSSS
29.03.11
✎
19:11
|
(8) Спасибо! смотрел статью ромикса в КЗ, но в том примере нет работы со ссылочными типами. На его сайте скачал шаблон для работы специально со ссылками. Пытаюсь перевести его (шаблон) на работу с 8.2. Подскажите, пжл, почему возникает ошибка
"Внешняя компонента : Method 'ValueToStringInternal' not supported by automation object." при выполнении вот такого кода в 8.2 Ссылка = ПолучитьСсылкуНаСервере(); Попытка СВнутр = vk_rekv.ЗначениеВСтрокуВнутр(Ссылка); Сообщить(СВнутр); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; |
|||
10
reanimator
29.03.11
✎
20:00
|
(0) Набор невизуальных компонент для работы с 1С 7.7 через OLE (Pascal, Delphi 5)
http://www.1partner.nnov.ru/develop/opis180.shtml Хоть и для пятого, но думаю будет полезно. |
|||
11
DSSS
29.03.11
✎
20:23
|
(10) Спасибо, только все для 77.
На 77 библиотека Ромикса работает, все нормально, проблема с 8.2 в (9) |
|||
12
DSSS
30.03.11
✎
09:39
|
Подниму. Интересует ответ на (9)
|
|||
13
lxs
30.03.11
✎
09:42
|
(12) ссылка нужна в 16тиричном представлении?
|
|||
14
DSSS
30.03.11
✎
09:55
|
(13) без разницы. Нужно заставить ВК научиться принимать ссылку из 1с и обрабатывать ее. Пусть это будет ЗначениеВСтрокуВнутр, как в примере ромикса.
|
|||
15
lxs
30.03.11
✎
10:14
|
(1)
s1C8_ole:=UnAssigned; s1C8_ole:=CreateOleObject('V82.COMConnector'); s1C8:=s1C8_ole.Connect(Trim(ConnectString)); id: = s1C8.string(s1C8.Документы.АвансовыйОтчет.НайтиПоНомеру(NUM,DATEDOC).uuid()) |
|||
16
DSSS
30.03.11
✎
11:08
|
(15) Спасибо, но мне нужно способом, который посоветовал H A D G E H O G s в (6)
|
|||
17
lxs
30.03.11
✎
11:27
|
s1C8.ValueToStringInternal(s1C8.Документы.АвансовыйОтчет.НайтиПоНомеру(NUM,DATEDOC))
|
|||
19
H A D G E H O G s
30.03.11
✎
12:29
|
type T_vk_object = class(TObject)
public g_Value: OleVariant; g_NParams: Integer;(???????) g_Params: PSafeArray; g_Event, g_Event_Data: String; pConnect:IDispatch; .................. модуль addinObj.pas процедура Init vk_object:=T_vk_object.Create(); vk_object.pConnect:=pConnection; процедура Done vk_object.pConnect:=nil; vk_object.Destroy(); |
|||
20
H A D G E H O G s
30.03.11
✎
12:38
|
function T_vk_object.meth1(mode: TMode): String;
var NUM: String; OLEDOC1: OleVariant; Res:OleVariant; DATEDOC: TDateTime; s1C8_ole:OleVariant; begin case mode of m_rus_name: Result:='?????????????'; m_eng_name: Result:='GetNUM'; m_n_params: g_NParams:=2; m_execute: begin NUM:=GetParamAsString(0); DATEDOC:=GetParamAsTDateTime(1); s1C8_ole:=OleVariant(PConnect).AppDispatch; OLEDOC1:=s1C8_ole.Документы.АвансовыйОтчет; Res:=OLEDOC1.НайтиПоНомеру(NUM,DATEDOC); OLEDOC1:=unassigned; s1C8_ole:=unassigned; g_Value:=Res; end; end;//case end; В процедуре AddInObject.CallAsFunc модуля AddinObj.pas заменить pvarRetValue := vk_object.g_Value; на pvarRetValue := vk_object.g_Value; vk_object.g_Value:=unassigned; И добавить variants в uses Недоработал Ромикс. |
|||
21
DSSS
30.03.11
✎
12:45
|
(19), (20) Спасибо тебе, дома попробую.
|
|||
22
romix
31.03.11
✎
13:55
|
Тут у меня пример работы из Дельфи со ссылочными типами:
Книга знаний: Внешняя компонента для безопасной работы с базами данных по интерфейсу ADO |
|||
23
DSSS
06.04.11
✎
02:34
|
(19),(20)
Попробовал, вроде все сделал по твоим рекомендациям. При выполнении в 1С &НаКлиенте Процедура Команда(Команда) Ссылка = TestVK.GetNUM("ТД00-000001",ТекущаяДата()); КонецПроцедуры Возникает ошибка: TestVK : Method 'Документы' not supported by automation object. Как побороть? |
|||
24
H A D G E H O G s
06.04.11
✎
11:22
|
(23) Скинь свой проджект на файлообменник.
|
|||
25
DSSS
06.04.11
✎
11:29
|
(24). ОК. Через несколько часов, когда буду дома.
|
|||
26
DSSS
06.04.11
✎
15:38
|
||||
27
DSSS
06.04.11
✎
16:50
|
Может все дело в
&НаКлиенте Ссылка = TestVK.GetNUM("ТД00-000001",ТекущаяДата()); По-хорошему бы ссылку получить на сервере надо.. В ВК тоже получается в контексте клиента все выполняется? Вот интересно в ВК для 8.2 можно указывать среду исполнения? |
|||
28
H A D G E H O G s
06.04.11
✎
16:54
|
(27) RTFM!
|
|||
29
H A D G E H O G s
06.04.11
✎
16:54
|
COM ВК не работает на Тонком и Веб клиентах!
|
|||
30
H A D G E H O G s
06.04.11
✎
16:55
|
Только NativeAPI.
Так что либо сервер, либо nativeAPI |
|||
31
H A D G E H O G s
06.04.11
✎
16:59
|
Хотя в FM этого не написано. Странно.
p.s. Запусти на сервере. |
|||
32
DSSS
07.04.11
✎
09:12
|
(29)>> COM ВК не работает на Тонком и Веб клиентах!
Точно, не работает. Спасибо! Запустил толстого клиента, все работает нормально. |
|||
33
DSSS
07.04.11
✎
09:15
|
(30)>> Так что либо сервер, либо nativeAPI
Насчет nativeAPI как я понимаю та нельзя работать со ссылочными типами, а только с примитивными.., так что не вариант. Остается COM &НаСервере. Не подскажешь, где можно посмотреть такой способ реализации ВК в 8.2? что-то все что нашел про ПодключитьВнешнююКомпоненту в 8.2 все про nativeAPI. |
|||
34
DSSS
07.04.11
✎
09:16
|
Небольшая просьба к модераторам: исправьте, пожалуйста, в названии ветки 8.1 на 8.2
|
|||
35
H A D G E H O G s
07.04.11
✎
12:10
|
(33) Чуть позже прмиер выложу
|
|||
36
DSSS
07.04.11
✎
14:49
|
(35) ОК. Буду очень признателен.
|
|||
37
Kerk
07.04.11
✎
18:12
|
Закладка.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |