|
подключение к 1С8.2 средствами Delphi? | ☑ | ||
---|---|---|---|---|
0
leftmails
25.04.12
✎
11:58
|
Всем привет!
Пожалуйста подскажите, как наиболее проще подключится к базе 8.2 средствами Delphi7? Перепробовал кучу вариантов, среди которых: http://doc-prg.narod.ru/art_00001/art_00001.htm v8: Вопрос по вк: Delphi + 1с 8.1 Но ни чего не получается:( При создании Ole1C := CreateOleObject('V8.Application'); выдает ошибку Недопустимая срока с указанием класса Может есть вариант средствами ADO? (тоже пытался - не получилось) В заранее благодарю за помощь! |
|||
1
H A D G E H O G s
25.04.12
✎
11:59
|
Ole1C := CreateOleObject('V82.Application');
|
|||
2
leftmails
25.04.12
✎
12:05
|
Да, это я тоже пробывал, но какраз таки выдает ошибку на эту строчку, что недопустимая строка
|
|||
3
КМ155
25.04.12
✎
12:07
|
(2) значит на компике с Delphi не установлен 1С 8.2 или не зарегистрирована dll
|
|||
4
leftmails
25.04.12
✎
12:11
|
Вот как проверку подключения пытаюсь сделать:
procedure TForm1.Button2Click(Sender: TObject); var ResOpen: Integer; path1c: string; begin path1c:='\\server\1С\'; Ole1C :=UnAssigned; Ole1C := CreateOleObject('V82.Application'); ResOpen := Ole1C.Initialize(Ole1C.RMTrade, '/D'+ path1c, ''); if ResOpen = -1 then begin ShowMessage(' Соединение установленно!'); end else begin ShowMessage(' Ошибка соединения!'); Ole1C:=Unassigned; end; end; --------------------------------- Ну да, не установлена. Значит надо установить? База находится на удаленном сервере, доступ к которому я себе расширил.. Сейчас попытаюсь установить 1С8.2 к себе на компьютер. Подскажите тогда пожалуйста как и где вводить имя пользователя и пароль для доступа? |
|||
5
H A D G E H O G s
25.04.12
✎
12:14
|
||||
6
hhhh
25.04.12
✎
12:21
|
'/D'+ path1c + ' /N'+name+' /P'+password
|
|||
7
leftmails
25.04.12
✎
12:25
|
Перетащил EXE скомпилированный на сервер с 1С, данная ошибка перестала быть.
Теперь ругается на RMTrade: Method 'RMTrade' not supported automation object На что поменять надо? (Ole1C.RMTrade, '/D'+ path1c, ''); "'/D'+ path1c + ' /N'+name+' /P'+password" Спасибо, попробую! |
|||
8
H A D G E H O G s
25.04.12
✎
12:26
|
ResOpen := Ole1C.Initialize(Ole1C.RMTrade, '/D'+ path1c, '');
Это строка для 7/7 |
|||
9
H A D G E H O G s
25.04.12
✎
12:28
|
function CreateConnect():Boolean;
var tmp:string; begin Result:=false; if not VarIsEmpty(Connection) then begin try tmp:=Connection.Метаданные.Имя; if tmp='БухгалтерияПредприятия' then begin Result:=true; exit; end; except end; end; try Connect:=CreateOleObject('v82.comconnector'); except AddLog('Не удалось выполнить соединение с базой 1С. Не установлены компоненты 1С для работы с внешним соединением!'); Connect:=Unassigned; Connection:=Unassigned; exit; end; try Connection:=Connect.Connect(MakeConnectionString()); except Connect:=Unassigned; Connection:=Unassigned; AddLog('Не удалось выполнить соединение с базой 1С.'); exit; end; Result:=true; end; function MakeConnectionString:String; begin if BaseType=1 then Result:='File="'+BasePath+'";'; if BaseType=2 then Result:='Srvr="'+ServerName+'";Ref="'+BaseName+'";'; if UserName<>'' then Result:=Result+'Usr="'+UserName+'";'; if Password<>'' then Result:=Result+'Pwd="'+Password+'";'; end; |
|||
10
leftmails
25.04.12
✎
12:45
|
Сложновато:(
А как использовать эти функции? Можно обойтись вот этой строкой? ResOpen := Ole1C.Initialize(Ole1C.*****, '/D'+ path1c + ' /N'+name+' /P'+password, ''); |
|||
11
leftmails
25.04.12
✎
13:06
|
[9] H A D G E H O G s
К сожалению у меня не получается использовать эти функции:( |
|||
12
H A D G E H O G s
25.04.12
✎
13:36
|
Бида
|
|||
13
leftmails
25.04.12
✎
14:34
|
даа.. большая:(
Ну ладно, придется все свои действия по шагам описывать: создал глобальные функции от H A D G E H O G s: public { Public declarations } function CreateConnect():Boolean; function MakeConnectionString:String; Вставил в них содержимое, Компилю, ругается на "[Error] Unit1.pas(33): Undeclared identifier: 'Connection'" Ставлю глобально:Connection:OleVariant; Компилю ругается: [Error] Unit1.pas(46): Undeclared identifier: 'Connect' Ставлю глобально OleVariant Adlog заменил на showmessage, т.к. у меня не видет эту штуку:( Застрял на типе BaseType, в функции MakeConnectionString Ошибка:[Error] Unit1.pas(69): Undeclared identifier: 'BaseType' |
|||
14
H A D G E H O G s
25.04.12
✎
14:41
|
BaseType - глобальная переменная, 1 - sql база, 2 - файловая
|
|||
15
leftmails
25.04.12
✎
14:59
|
Присвоил глобально BaseType:integer;
BaseType:=1; ( H A D немножко перепутал, только наоборот. А я сам с тормозил не догадался:) спасибо ему:)) Прописал данные для BasePath:='D:\1С\base(8.2)'; UserName:='Логин'; Password:='пароль'; Компилю.. ошибок нет:) Добавляю кнопку на форму, и вношу в нее вызов функции CreateConnect; Компилирую, запускаю на сервере.. немного подвисает секунд на 5 и отходит. Как теперь правильно обратится к справочнику Сотрудники и вывести какую либо информацию? Я видел что обращались так: Ole1C.CreateObject('Справочники.Сотрудники'); Поэтому пытаюсь: Connection.CreateObject('Справочники.Сотрудники'); и получаю ошибка при тесте на сервере: Method 'CreateObject' not supported by automation object |
|||
16
leftmails
25.04.12
✎
15:08
|
попытался извратится:)
str:=Connection.string('Справочники.Сотрудники'); Выдало: Справочники.Сотрудники эх:( и как же чтонибуть вытащить? |
|||
17
jsmith
25.04.12
✎
15:10
|
что за программа на дельфи
где скриншоты |
|||
18
H A D G E H O G s
25.04.12
✎
15:12
|
var Selection:OleVariant;
begin Selection:=Connection.Справочники.Сотрудники.Выбрать(); While Selection.Следующий()=True do begin showmessage(Selection.Наименование); end; |
|||
19
H A D G E H O G s
25.04.12
✎
15:12
|
Но это конечно дикий пример
|
|||
20
leftmails
25.04.12
✎
15:14
|
str:=Connection.string(Connection.Справочники.Сотрудники);
выдало ошибку Method 'Сотрудники' not supported by automation object Я код копирую, к сожалению не знаю как выложить скриншоты сюда. Если необходимо выложу сюда все что у меня на данный момент получилось |
|||
21
H A D G E H O G s
25.04.12
✎
15:16
|
Справочника Сотрудники нет, либо нет прав
|
|||
22
H A D G E H O G s
25.04.12
✎
15:16
|
Хотя нет - просто нет такого справочника
|
|||
23
leftmails
25.04.12
✎
15:22
|
procedure TForm1.Button1Click(Sender: TObject);
var str:string; var Selection:OleVariant; begin CreateConnect; Selection:=Connection.Справочники.Сотрудники.Выбрать(); While Selection.Следующий()=True do begin showmessage(Selection.Наименование); end; end; Выдает ошибку Method 'Сотрудники' not supported by automation object Справочник этот есть и права у пользователя полные. Сейчас попробовал загрузить Организации, получилось!!! Всем огромное спасибо, в частности H A D G E H O G s, за помощь в настройки!!! Если позволите буду писать тут по возникшим вопросам, дабы не плодить темы, новичкам вышеописанное подойдет для практики:) |
|||
24
jsmith
25.04.12
✎
15:35
|
ты скрины сначала выложи
|
|||
25
leftmails
26.04.12
✎
07:20
|
||||
26
leftmails
26.04.12
✎
07:21
|
А как провести обратную манипуляцию по записи??
пробовал: Selection.Наименование:='77777'; Он мне не дал:( |
|||
27
badboychik
26.04.12
✎
07:36
|
по моему в инете давно написали кучу статей с примерами для такого скрещивания ужа с ежом, я еще лет 5 назад тягал данные из 1С чисто ради прикола попробовать.
Вроде даже в инете была готовая библиотека-обертка для делфи чтоб удобнее было обращатся к 1С |
|||
28
leftmails
26.04.12
✎
07:47
|
[27] да было, но к сожалению 7,7 . Да и непонятные ошибки возникали:(
А так мне H A D G E H O G s помог, теперь данные тягаю спокойно, выяснить как бы можно было записать... |
|||
29
badboychik
26.04.12
✎
08:24
|
а почему делфи? На C# прикольнее писать, и отладчик удобнее
|
|||
30
badboychik
26.04.12
✎
08:25
|
устанавливать значение присвоением вроде не прокатит, надо что то типа SetProperty("наименование","77777")
|
|||
31
leftmails
26.04.12
✎
08:32
|
[29] мне на дельфи как то удобнее,превычнее, а на Си давно уже не делаю(
[30] не получается с SetProperty, (ошибка)пишет что не знает эту штуку |
|||
32
badboychik
26.04.12
✎
08:42
|
причем тут Си?
Я на Делфи ХЕ2 пишу прогу курсак щас и отладчик мне не нравится, в C# я могу по ходу отладки дописать кусок кода, потом продолжить без перезапуска или вернуться на несколько строк назад и отлаживать уже измененный код, а тут пробел поставил и он требует перекомпиляции заново. Просматривать переменные тоже удобнее в VisualStudio, в делфи не все свойства объектов показывает нормально и Inspect какойто неудобный. Может когданибуть в ХЕ5 сделают нормальную эргономику, можно будет попробовать снова чтото написать... |
|||
33
leftmails
26.04.12
✎
08:45
|
[32] это да
|
|||
34
badboychik
26.04.12
✎
08:46
|
(31) ты че хочешь присвоить то? И куда? выполнил запрос и пытаешься в результат что то записать? Ничего не смущает??
|
|||
35
leftmails
26.04.12
✎
08:53
|
(34) смущает:)
Вот допустим я загрузил справочник контр агентов и мне нужно переименовать одного контр агента, как это сделать не пойму? |
|||
36
badboychik
26.04.12
✎
08:59
|
смотри в отладчике какой тип у Selection и какие свойства/методы есть
|
|||
37
leftmails
26.04.12
✎
09:02
|
(36) как это сделать?
|
|||
38
badboychik
26.04.12
✎
09:12
|
что сделать? отладчиком не умеешь пользоваться что ли
я не помню как там правильно с 1С из делфи обращаться, найди примеры в инете и все |
|||
39
ice777
26.04.12
✎
09:16
|
А в чем, простите, смысл прямых запросов из дельфи в 82?
|
|||
40
leftmails
26.04.12
✎
09:19
|
(39)Думал создать свой справочник по планированию и вносить некоторые данные через свою программку, без входа в 1С.
|
|||
41
badboychik
26.04.12
✎
09:26
|
через много лет потомки скажут - "Так зарождалась 1С 9"
|
|||
42
leftmails
26.04.12
✎
09:30
|
)))
|
|||
43
H A D G E H O G s
26.04.12
✎
11:18
|
pfffff
Че там? Загрузить справочник?, типа списка, как в рассово верной 8.2? Тут либо 1) Загрузить весь справочник в Tstringgrid и по таймеру обновлять (бред) 2) Написать самому класс - рассово верный аналог динамического списка в 1С - со всеми движухами onscroll-ами, и прочей мутотней. Жуть - ниасилил. 3) Юзать рассово верный ADO от самой дельфи - но только в случае ms sql базы от 1С. |
|||
44
H A D G E H O G s
26.04.12
✎
11:23
|
(33) Не верь льстивым речам c++снутых адептов, не сходи не Темную сторону, светлый рыцарь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |