1C как ole automation сервер

Новая тема
Показывать по 10 20 40 сообщений
"нужно из внешней программы Delphi2006 обратиться к 1С7.7 Бухгалтерия (стандартная).
//строка соединения
...
constr:='/d '+inifile.ReadString('1c1','path','')+' /n '+inifile.ReadString('1c1','login','')+' /p '+ inifile.ReadString('1c1','password','');
//собственно соединеняемся
c1:=createoleobject ('v77s.application');
c1.initialize(c1.rmtrade,constr,'NO_SPLASH_SHOW');
//создаем объекты
c2vip:=c1.createobject ('Документ.Выписка');
c2val:=c1.createobject('Справочник.валюты');
c2bs:=c1.createobject('Справочник.банковскиесчета');
c2dvizh:=c1.createobject('Справочник.ДвиженияДенежныхСредств');
c2cont:=c1.createobject ('Справочник.Контрагенты');
//начинаем работать с объектами
c2vip.новый();
c2vip.датадок := datetimepicker1.Date;
c2val.найтипонаименованию ('руб');
c2vip.валюта := c2val.текущийэлемент ();
c2bs.найтипонаименованию ('РФБ');
c2vip.банковскийсчет := c2bs.текущийэлемент ();
...
именно в строке
c2vip.новый();
и возникает ошибка
First chance exception at $7C812AEB. Exception class EOleError with message 'Method новый' not supported by automation object'. Process Project1.exe (252)

думал что из-за проблем данной версии Delphi с русским языком, но применение вместо новый (), new () не меняет ситуации.
Если есть люди работавшие в такой связке, посоветуйте, пожалуйста, что делать.
"
"А если перед
c2vip.New();
сделать
c2vip.SelectItems(0);
что происходит?"
"попробовал то же самое сделать в Delphi 7:
вот что мы имеем:
1. c2vip.SelectItems(0); - что предложил IceBeerg - то же самое "method selectitems not supported by automation object"
2. c2vip.new () или c2vip.новый() - "Несовпадение типов"
Ясно что 2. лучше, чем 1. или то, что было раньше, т.к. ошибка выдается уже русскими буквами, т.е. я так понимаю, что команды передались через Ole в 1с, а не застревают где-то посредине между Delphi, Ole и 1С. Так что дальше давайте копать отсюда:
имеем Delphi 7, код:

constr:='/d '+inifile.ReadString('1c1','path','')+' /n '+inifile.ReadString('1c1','login','')+' /p '+ inifile.ReadString('1c1','password','');

c1:=createoleobject ('v77s.application');
c1.initialize(c1.rmtrade,constr,'NO_SPLASH_SHOW');
c2vip:=c1.createobject ('Документ.Выписка');
c2val:=c1.createobject('Справочник.валюты');
c2bs:=c1.createobject('Справочник.банковскиесчета');
c2dvizh:=c1.createobject('Справочник.ДвиженияДенежныхСредств');
c2cont:=c1.createobject ('Справочник.Контрагенты');
//c2vip.selectitems(0);
c2vip.новый();
c2vip.датадок := datetimepicker1.Date;
c2val.найтипонаименованию ('руб');
c2vip.валюта := c2val.текущийэлемент ();
c2bs.найтипонаименованию ('РФБ');
c2vip.банковскийсчет := c2bs.текущийэлемент ();


на строке: c2vip.новый(); выдает ошибку "Несовпадение типов".
Есть ли у кого-нибудь какие мысли?
"
"Вот я жестоко ошибся...
не c2vip.SelectItems(0);
а c2vip.SelectDocuments(0);

Но
> 2. c2vip.new () или c2vip.новый() - "Несовпадение типов"
что-то подозрительно настораживает..."
"c2vip.selectdocuments(0); проглотил нормально
но в следующей строке
c2vip.новый;
снова ошибка:
Project Project1.exe raised exception class EOleSysError with message 'Несовпадение типов' Process stopped."
"поразительно, но написав
c2vip.новый; , а имел ввиду
c2vip.новый ();
теперь подумал и решил написать именно
c2vip.новый;
и эту строку проглотил нормально, сейчас буду дальше смотреть где выбросится ошибка."
"c1:=createoleobject ('v77s.application');
c1.initialize(c1.rmtrade,constr,'NO_SPLASH_SHOW');
c2vip:=c1.createobject ('Документ.Выписка');
c2val:=c1.createobject('Справочник.валюты');
c2bs:=c1.createobject('Справочник.банковскиесчета');
c2dvizh:=c1.createobject('Справочник.ДвиженияДенежныхСредств');
c2cont:=c1.createobject ('Справочник.Контрагенты');
c2vip.selectitems(0);
c2vip.новый;
c2vip.датадок := datetimepicker1.Date;
c2val.найтипонаименованию ('руб');
c2vip.валюта := c2val.текущийэлемент ;
c2bs.найтипонаименованию ('РФБ');
c2vip.банковскийсчет := c2bs.текущийэлемент ;

В коде теперь возникает та же ошибка на строке

c2val.найтипонаименованию ('руб');

т.е. русскоязычные методы с параметрами почему-то он не воспринимает
т.е.
c2vip.selectitems(0);-норм
c2vip.новый(); - ошибка
c2vip.новый; - норм
c2vip.датадок := datetimepicker1.Date; - норм
c2val.найтипонаименованию ('руб'); - ошибка
Где бы мне скачать соответствие: русскоязычное написание методов 1С - англоязычное описание методов 1С?

"
Ну, во-первых, все методы в русском и английском вариантах есть в "желтых" книжках 1С - "Описание языка программирования"
Во-вторых, в конфигураторе 1С есть Синтакс-помощник. В конфигураторе через меню Сервис - Параметры откройте Настройка параметров системы. Там есть закладка Синакс-Помощник. В ней поставьте галочку Использовать оба языка.
Тогда все описания в Помощнике будут в русском и в английскоv вариантах.
"Какая ошибка в?
>c2val.найтипонаименованию ('руб'); - ошибка
что пишет?"
"c1:=createoleobject ('v77s.application');
c1.initialize(c1.rmtrade,constr,'NO_SPLASH_SHOW');
c2vip:=c1.createobject ('Документ.Выписка');
c2val:=c1.createobject('Справочник.валюты');
c2bs:=c1.createobject('Справочник.банковскиесчета');
c2dvizh:=c1.createobject('Справочник.ДвиженияДенежныхСредств');
c2cont:=c1.createobject ('Справочник.Контрагенты');
c2vip.selectitems(0);
c2vip.new;
c2vip.датадок := datetimepicker1.Date;
c2val.findbydescr ('руб');
c2vip.валюта := c2val.currentitem ;
c2bs.findbydescr ('РФБ');
c2vip.банковскийсчет := c2bs.currentitem ;

Теперь мы доходим до строки
c2vip.валюта := c2val.currentitem ;
При таком написании ошибка вида "Параметр задан неверно".
при написании:
c2vip.валюта := c2val.currentitem ();
другая уже встрачавшаяся: "Несовпадение типов".
Видимо ошибка именно в правой части:
c2val.currentitem
В описании к данному методу сказано, что он не должен иметь никаких параметров, т.е. только
currentitem()/текущийэлемент()"
Читают тему
(гостей: 1)

Быстрый переход