|
Подключиться к 1С из Delphi | ☑ | ||
---|---|---|---|---|
0
SHKoder
26.05.22
✎
15:58
|
Помогите пожалуйста решить квест
Стоит задача, подключиться к 1С 8.3 из Delphi и отправить запрос: ПолучитьСтруктуруХраненияБазыДанных() Получить ответ в приложении Delphi в грид Далее этот грид нужно будет разложить, но это я сделаю сам. Основная проблема это подключиться к 1С, отправить запрос и получить ответ на запрос. Использую Delphi 11, 1С 8.3 Я не программист на 1С, и в этом основная загвостка. Спасибо за помощь Подключение к 1С получилось, а вот дальше чего куда и как? var connect,Connection, Query, Rslt, Choose :OleVariant; version:string; SQL : string; sel_res,res: variant; Base1S, Sprav1S, Data1S :OleVariant; begin Connection:=CreateOleObject('V83.ComConnector.1'); connect := Connection.Connect('Srvr="server"; Ref="base"; Usr="user"; pwd="123"; '); if not VarIsEmpty(connect) then begin Mmo1.Lines.Add(trim(connect.СтрокаСоединенияИнформационнойБазы())); ... |
|||
1
Garykom
гуру
26.05.22
✎
17:07
|
Это может хватит некрофилией заниматься?
Речь и про Олю и про Дельфи |
|||
2
Garykom
гуру
26.05.22
✎
17:08
|
Публикуем базу 1С через иис или апач, юзаем встроенную OData или ваяем по быстрому свой http-сервис
Дергаем его откуда надо |
|||
3
Kassern
26.05.22
✎
17:09
|
(2) Это что-то из области фантастики с учетом - "Я не программист на 1С, и в этом основная загвостка"
|
|||
4
Kassern
26.05.22
✎
17:10
|
хотя самый правильный вариант поднять сервис со стороны 1с и уже с ним любаться)
|
|||
5
Garykom
гуру
26.05.22
✎
17:13
|
(3) мануалов в инете дофига как опубликовать и простейший http сервис сделать на 1С
остается только туда засунуть вызов ПолучитьСтруктуруХраненияБазыДанных |
|||
6
Garykom
гуру
26.05.22
✎
17:16
|
(0) Не используй больше V83.ComConnector - оно устарело
На реальных базах сейчас линукс или облако/фреш Да и под виндой обычно глючит и не пашет и хрен админов заставишь чтобы заработало Особенно обидно когда студент приходит лабу сдавать а оно не пашет... |
|||
7
Выпрь
26.05.22
✎
17:26
|
(6) приходишь лабу сдавать, а веб сервис не поднят да и вообще вебсервера нет
|
|||
8
Garykom
гуру
26.05.22
✎
17:26
|
(7) тут все проще ибо веб-сервис легко проверяется
а почему com|ole глючит хрен поймешь |
|||
9
H A D G E H O G s
26.05.22
✎
18:41
|
procedure TForm1.Button1Click(Sender: TObject);
var connect, Connection: OleVariant; DBStorageStructureInfo: OleVariant; DBStorageStructureInfoCount: Integer; DBStorageStructureInfoIndex: Integer; RowDBStorageStructureInfo: OleVariant; ИндексСтроки: Integer; РазмерТаблицы: Integer; StorageTableName: String; TableName: String; Metadata: String; Purpose: String; Fields: OleVariant; Indexes: OleVariant; begin Connection := CreateOleObject('V83.ComConnector.1'); connect := Connection.connect('Srvr="localhost"; Ref="Empty2"; Usr=""; pwd="";'); if VarIsEmpty(connect) then raise Exception.Create('Не удалось подключиться к базе 1С'); DBStorageStructureInfo := connect.ПолучитьСтруктуруХраненияБазыДанных(); РазмерТаблицы := DBStorageStructureInfo.Количество(); Mmo1.Lines.BeginUpdate(); try Mmo1.Lines.Add('StorageTableName:TableName:Metadata:Purpose'); for DBStorageStructureInfoIndex := 0 to РазмерТаблицы - 1 do begin RowDBStorageStructureInfo := DBStorageStructureInfo.Получить(DBStorageStructureInfoIndex); StorageTableName := RowDBStorageStructureInfo.ИмяТаблицыХранения; TableName := RowDBStorageStructureInfo.ИмяТаблицы; Metadata := RowDBStorageStructureInfo.Метаданные; Purpose := RowDBStorageStructureInfo.Назначение; Mmo1.Lines.Add(StorageTableName + ':' + TableName + ':' + Metadata + ':' + Purpose + ':'); Fields := RowDBStorageStructureInfo.Поля; Indexes := RowDBStorageStructureInfo.Индексы; end; finally Mmo1.Lines.EndUpdate(); end; end; Fields и Indexes обработаете сами, пример есть |
|||
10
H A D G E H O G s
26.05.22
✎
18:47
|
(8) "а почему com|ole глючит хрен поймешь"
keyword "хрен поймешь" |
|||
11
ДедМорроз
26.05.22
✎
20:01
|
Можно самому зашрузить Comcntr.dll и из нее вызвать функцию GetClassObject напрямую и не мучиться с тем,почему не работает,но нужно точно знать,как работает Com,чтобы не накосячить.
Особенно это касается Allocator. |
|||
12
Garykom
гуру
26.05.22
✎
20:05
|
(11) под линукс?
|
|||
13
yopQua
26.05.22
✎
20:13
|
(12) про линукс речи не было же
(0) а на хуа? |
|||
14
yopQua
26.05.22
✎
20:16
|
так то операция не каждодневная наверно, СОМом он уже подключился, зачем сейчас огород строить с сервисами
коннекшн.ПолучитьСтруктуруХраненияБазыДанных() вызывать, но вернет оно тоже ком, его перебирать и вытаскивать строки в грид, наверно получится |
|||
15
ДедМорроз
26.05.22
✎
20:22
|
(12) Чистую dll с Com-объектом в Linux можно и загрузить и даже заставить работать,если правильно системные вызовы перехватить,а вот когда одна dll потом грузит другую - это намного сложнее.
Опять же,все вызовы kernel и user нужно правильно оттранслировать,а это сложно только один раз,потом для любой dll. |
|||
16
Жан Пердежон
26.05.22
✎
21:57
|
(0) у тебя тупо типы разные в - Mmo1.Lines.Add() строка нужна, а функция тебе ком-объект возвращает
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |