-
Доброго времени суток.
Вот надо при помощи OLE сделать программу, описание в внутри на Visul Basic делаю на 1С получается. А на Delphi не хочет, подскажите, пожалуйста, в чем причина. Вот пример на 1с: Mpos = CreateObject("CashTANP9.Application"); crt = Mpos.CashTANs.Item(1); crt.StartConnection(); Colecti = crt.Sections; For c = 1 to Colecti.Count do Colecti = Colecti.Item(c); Message(Colecti.Name); EndDo;
Вот пример на Delphi: var i:integer; mpos:Variant; crt:Variant; Colecti:Variant; begin mpos:=CreateOleObject('CashTANP9.Application'); crt := Mpos.CashTANs.Item(1); crt.StartConnection(); Colecti := crt.Sections; for i:=1 to Colecti.Count do begin Colecti := Colecti.Item(i); memo1.Lines.Add(Colecti.Name); end; end;
При попытке выполнить crt := Mpos.CashTANs.Item(1); выдает ошибку ”Project Project1.exe raised exception class EOleSysError with message ‘Член группы не найден’. Process stopped. Use Step or Run to continue.”
Может, подскажите, в чем проблема.
Всем заранее спасибо.
-
Проблема в элементарном незнании Object Pascal.
> > При попытке выполнить > crt := Mpos.CashTANs.Item(1);
При этой попытке ты пытаешься вызвать функциональный метод по имени Item объекта Mpos, каковой, разумеется, не существует, о чем как раз и говорит текст сообщения об ошибке.
Item - это свойство типа элемент коллекции, в Object Pascal обращения к такого типа свойствам выглядит как обращение к свойству типа элемент массива, а обращение к элементу массива в Паскале подразумевает заключение индекса этого элемента в квадратные скобки.
-
Да действительно. Большое спасибо(буду знать на бедующие). Но возникла другая проблема, при выполнении кода for i:=1 to Colecti.Count do begin Colecti := Colecti.Item(i); memo1.Lines.Add(Colecti.Name); end; Возникает ошибка „Method ‘Item’ not supported by automation object”
В самой инструкции написано так: Совет: Для перебора всех компонентов коллекции желательно использовать конструкцию For Each...Next
И пример: Dim cta As New CashTANP9.Application Dim dc As CashTANP9.DiscountCards Dim flds as CashTANP9.Fields Dim fld as CashTANP9.Field
Set dc = cta.DiscountCards Set flds = dc.Fields For Each fld In flds Debug.Print fld.Name Next
Но как это реализовать в Object Pascal?
-
то есть вот так:
> for i:=1 to Colecti.Count do >begin > Colecti := Colecti.Item[i]; >memo1.Lines.Add(Colecti.Name); >end;
-
> как это реализовать в Object Pascal?
Вот так:
for i:=1 to Colecti.Count do begin memo1.Lines.Add(Colecti[i].Name); end;
-
Почти! Пишет неправельный аргумент! А правильно оказалось: for i:=1 to Colecti.Count do begin memo1.Lines.Add(Colecti.item[i].Name); end;
Большое спасибо! Но почему пока непонял!
|