Имя: Пароль:
1C
1С v8
подключение к 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
"Ну да, не установлена. Значит надо установить?"

http://lurkmore.so/images/0/0b/CaptainFacepalm.png
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++снутых адептов, не сходи не Темную сторону, светлый рыцарь.