Имя: Пароль:
1C
1С v8
1С и Axapta. Работа с ComObject, переданными из Axapta.
, , ,
0 Dunstan
 
20.12.11
11:18
День добрый господа! Мои коллеги аксаптологи подкинули мне задачку. Суть заключается в том, что в 1С 8.2 передается огбъект аксапты контейнер. Контейнер это конечный набор каких-либо простых объектов.
Аксапта возращает ComObject. См. текст программы:
//************************************************
Axapta = Новый COMObject("AxaptaCOMConnector.Axapta3");
   Попытка
       Axapta.Logon("ORO", "", "", "C:\191211\test1.axc");
       Massiv = Axapta.CallStaticClassMethod("ComBalanceInterface_AC","Test");
       Сообщить("Ура");
       Axapta.logoff();
   Исключение
       Axapta.logoff();    
       Сообщить("Облом");
   КонецПопытки
//************************************************
Мassiv содержит КомОбъект контейнер. Вот как можно из этого контейнера
извлечь его содерживое в 1С.
Сам объект container имеет в своем составе методы:

conlen(c)          - кол-во элементов контейнера с

conpeek(c, n) – получить элемент #n из контейнера с

Я думал все просто:

прямо в 1С пишешь код
Для I= 1 По Axapta.conlen(Massiv) Цикл
   Эл = Axapta.conpeek(Massiv, I);
КонецЦикла;
Но так не работает...:(
Может кто занет как быть в этой ситуации...
1 Ненавижу 1С
 
гуру
20.12.11
11:22
"Но так не работает"
предлагается угадать почему ты считаешь, что не работает?
2 Ненавижу 1С
 
гуру
20.12.11
11:23
1. может не стоит сразу же закрывать соединение?
2. нумерация случайно не с 0 начинается?
3 АйЭм
 
20.12.11
11:28
Даже не задумываясь - на http://www.mazzy.ru/ смотрел?
В свое время из Кацапты в Эксель коннект делался по материалам этого сайта.
4 Dunstan
 
20.12.11
11:28
(1) На Axapta.conlen(Massiv) пишет нет такого метода

(2) Соединение не закрыто
5 Serginio1
 
20.12.11
11:37
А может Это методы массива Massiv?
т.е. Massiv.conlen()

Massiv.conpeek(i)
6 Dunstan
 
20.12.11
11:41
(5) Я в аксапте не силен. Но в этих функциях контейнер выступает как аргумент функции. И ,казалось бы, функция глобальная
7 Dunstan
 
20.12.11
11:42
(3) А где там конкретно http://www.mazzy.ru/ про вызов Кацапты из Ёкселя?
8 Serginio1
 
20.12.11
11:44
(7) Посмотри в отладчике. Может это обычный SafeArray
9 Ненавижу 1С
 
гуру
20.12.11
11:45
пальцем в небо: Massiv[i]
10 Dunstan
 
20.12.11
11:45
(8) MaSSIV ОПРЕДЕЛЯЕТСЯ С ТИПОМ cOMoBJECT
11 Ненавижу 1С
 
гуру
20.12.11
11:46
(10) а правильно писать:
conLen
12 Serginio1
 
20.12.11
11:57
(10) А какие нибудь поля показывает?
Может через ADO или рекордсеты проще будет?
Найди обработку, которая через ITypeInfo  показывает все свойства и методы объекта
13 Serginio1
 
20.12.11
12:01
Попробуй конструкцию для каждого
Если объект поддерживает интерфейс итератор
14 Dunstan
 
20.12.11
12:05
(12) НИКАКИХ ПОЛЕЙ НЕ ПОКАЗЫВАЕТ
ПРОСТО КОМОБЪЕКТ
15 Ненавижу 1С
 
гуру
20.12.11
12:06
(14)
1. капс-лок выключи
2. что насчет (11)?
16 Dunstan
 
20.12.11
12:09
(15) теже яйца только в профиль
17 Serginio1
 
20.12.11
12:27
А вообще пользовательские функции из Акзапты Экспортируютс?
Судя по Axapta.CallStaticClassMethod("ComBalanceInterface_AC","Test");
Сроздай две функци которые бы применяли conlen(c) и conpeek(c, n)
И вызывай их через Axapta.CallStaticClassMethod
18 Dunstan
 
20.12.11
15:55
Правильно, мне дали сосет по поводу делать так как в Экселе. У AxaptaCOMConnector.Axapta3 есть свои объекты. И, в том числе, объект Axapta.Container у которого свои методы,отличные от чисто аксаптивных.
//**********************
Axapta = Новый COMObject("AxaptaCOMConnector.Axapta3");
Попытка
Axapta.Logon("ORO", "", "", "c:\test1.axc");
x = Axapta.CallStaticClassMethod("ComBalanceInterface_AC","Test");

Сообщить (x.peek(2));

Сообщить("УРА");
Axapta.logoff();
Исключение
Axapta.logoff();
КонецПопытки
//****************************