![]() |
![]() |
![]() |
|
ComConnector в Delphi | ☑ | ||
---|---|---|---|---|
0
Andrey_sy4
02.07.18
✎
19:52
|
Всем привет. Сразу скажу, что до сего момента в 1С не работал.
Задача следующая: Задать имя функции на форме в делфи и выполнить её в 1С базе. Для этого использую V83.COMConnector (Application). pDisp := CreateOleObject('V83.Application'); sMethodName := 'Connect'; OleCheck (pDisp.GetIDsOfNames (GUID_NULL, @sMethodName, 1, LOCALE_SYSTEM_DEFAULT, @iDispId)); vSet := 'File=C:\Users\Admin\Documents\InfoBase'; FillChar (dpPutArgs, sizeof (dpPutArgs), 0); dpPutArgs.rgvarg := @vSet; dpPutArgs.cArgs := 1; dpPutArgs.cNamedArgs := 0; dpPutArgs.rgdispidNamedArgs := nil; OleCheck (pDisp.Invoke (iDispId, GUID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, dpPutArgs, @VarResult, @ei, @iError)); sMethodName := 'Тест1'; OleCheck (pDisp.GetIDsOfNames (GUID_NULL, @sMethodName, 1, GetThreadLocale, @iDispId)); vParams[1] := 2; vParams[2] := 5; FillChar (dpPutArgs, sizeof (dpPutArgs), 0); dpPutArgs.rgvarg := @vParams; dpPutArgs.cArgs := num_params; dpPutArgs.cNamedArgs := 0; dpPutArgs.rgdispidNamedArgs := nil; OleCheck (pDisp.Invoke (iDispId, GUID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, dpPutArgs, @VarResult, @ei, @iError)); Этот код прекрасно работает, но как только я меняю строку V83.Application на V83.COMConnector, то вызывается ошибка (Неизвестное имя). Т.е. "Тест1" - не распознаётся и функция Getidsofnames не может получить её номер. Может быть с кодировками что-то не так? Использую delphi xe 3 и 1C предприятие 8.3 |
|||
1
H A D G E H O G s
02.07.18
✎
19:59
|
Жесть какая.
|
|||
2
Лефмихалыч
02.07.18
✎
20:00
|
> до сего момента в 1С не работал
да может лучше и не надо? |
|||
3
H A D G E H O G s
02.07.18
✎
20:01
|
Вам IDispatch для чего дали? Что мозг себе не страдать.
|
|||
4
H A D G E H O G s
02.07.18
✎
20:08
|
var
connect,Connection:OleVariant; version:string; begin Connection:=CreateOleObject('V83.ComConnector'); connect:=Connection.Connect('File="E:\Projects\IEGAIS"; usr="Ежов Дмитрий"; pwd="128500"'); version:=connect.ОбщийМодульМой.ПолучитьВерсию(); ShowMessage(version); |
|||
5
H A D G E H O G s
02.07.18
✎
20:08
|
У ОбщийМодульМой не забыть поставить галочку "ВнешнееСоединение", у функции Экспорт.
|
|||
6
Andrey_sy4
02.07.18
✎
20:14
|
Connection:=CreateOleObject('V83.ComConnector');
connect:=Connection.Connect('File="E:\Projects\IEGAIS"; usr="Ежов Дмитрий"; pwd="128500"'); version:=connect.ОбщийМодульМой.ПолучитьВерсию(); ShowMessage(version); Это всё понятно и само собой разумеется. Но это решение не подходит, т.к. тут чётко в коде будет задаваться исполняемая функция. Мне же необходимо её вводить с клавиатуры. Поэтому и вожусь с поздним связыванием через Idispatch и Invoke |
|||
7
H A D G E H O G s
02.07.18
✎
20:15
|
(6) Ну сделай Экспортную функцию в 1С да и вводи туда имя функции. Но вообще, идея бредовая, вводить функции в форме.
|
|||
8
H A D G E H O G s
02.07.18
✎
20:16
|
Процедура ЗапуститьВыполнение(Выражение) Экспорт
Выполнить(Выражение); КонецПроцедуры version:=connect.ЗапуститьВыполнение("ПолучитьВерсию()"); |
|||
9
Andrey_sy4
02.07.18
✎
20:22
|
Думаю надо более чётко объяснить зачем я этим занимаюсь.
У меня задача стоит следующая: Написать внешнее ПО для запуска функций/процедур в базе 1С по регламенту. Именно внешнее ПО. (И да, я знаю, что в 1с есть регламентные задачи, но из-за некоторых особенностей на предприятии - они не подходят). И в написанной программе пользователь должен будет выбирать нужную функцию для исполнения. |
|||
10
Andrey_sy4
02.07.18
✎
20:23
|
Подход через connect.ОбщийМодуль.Функция - не подходит.
|
|||
11
Dmitry1c
02.07.18
✎
20:48
|
(9) в 1С есть веб-сервисы, через которые ты можешь вызывать необходимый тебе код
|
|||
12
Сияющий в темноте
02.07.18
✎
22:56
|
Что тут может быть сложного,подключились к базе,для этого создали коннектор,сформировали строку и вызвали подключить,у меня это даже нп Си прекрасно пишется.потом
получили строку для вычисления выражения и загнали ее в функцию.вот когдп нужно будет параметры передавать,придетсч думать,т.к.нн все в строку собирается. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |