Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

ComConnector в Delphi

ComConnector в Delphi
Я
   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
 
 
   H A D G E H O G s
 
1 - 02.07.18 - 19:59
Жесть какая.
   Лефмихалыч
 
2 - 02.07.18 - 20:00
> до сего момента в 1С не работал

да может лучше и не надо?
   H A D G E H O G s
 
3 - 02.07.18 - 20:01
Вам IDispatch для чего дали? Что мозг себе не страдать.
   H A D G E H O G s
 
4 - 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);
   H A D G E H O G s
 
5 - 02.07.18 - 20:08
У ОбщийМодульМой не забыть поставить галочку "ВнешнееСоединение", у функции Экспорт.
   Andrey_sy4
 
6 - 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
   H A D G E H O G s
 
7 - 02.07.18 - 20:15
(6) Ну сделай Экспортную функцию в 1С да и вводи туда имя функции. Но вообще, идея бредовая, вводить функции в форме.
   H A D G E H O G s
 
8 - 02.07.18 - 20:16
Процедура ЗапуститьВыполнение(Выражение) Экспорт
    Выполнить(Выражение);
КонецПроцедуры



version:=connect.ЗапуститьВыполнение("ПолучитьВерсию()");
   Andrey_sy4
 
9 - 02.07.18 - 20:22
Думаю надо более чётко объяснить зачем я этим занимаюсь.
У меня задача стоит следующая: Написать внешнее ПО для запуска функций/процедур в базе 1С по регламенту.
Именно внешнее ПО. (И да, я знаю, что в 1с есть регламентные задачи, но из-за некоторых особенностей на предприятии - они не подходят). И в написанной программе пользователь должен будет выбирать нужную функцию для исполнения.
   Andrey_sy4
 
10 - 02.07.18 - 20:23
Подход через connect.ОбщийМодуль.Функция - не подходит.
 
 Рекламное место пустует
   Dmitry1c
 
11 - 02.07.18 - 20:48
(9) в 1С есть веб-сервисы, через которые ты можешь вызывать необходимый тебе код
   Сияющий в темноте
 
12 - 02.07.18 - 22:56
Что тут может быть сложного,подключились к базе,для этого создали коннектор,сформировали строку и вызвали подключить,у меня это даже нп Си прекрасно пишется.потом
получили строку для вычисления выражения и загнали ее в функцию.вот когдп нужно будет параметры передавать,придетсч думать,т.к.нн все в строку собирается.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует