AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.03.2008, 12:48   #1  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
482 / 351 (12) ++++++
Регистрация: 25.07.2007
Адрес: Москва
работа 1С из Аксапты через COM
Вот простенький джобик:
X++:
static void Job(Args _args)
{
    Com connect;
    Com base;
    Com ref,ref1;
    str tmp;
    ;
    connect = new COM("V81.COMConnector");
    base =  connect.Connect("bla-bla-bla");
    ref = base.NewObject("СправочникМенеджер.Контрагенты");
    ref1 = ref.FindByCode("00000153");
    tmp = ref1.Description();
    print(tmp);
    pause;
}
Так все работает.
Есть несколько вопросов:
1. Description у справочника Конрагентов это не метод, а поле. Если написать без скобок, то аксапта ругается. Работает конечно, но интересно можно как-нибудь все таки по правильному написать?
2. С системными полями в 1С все вроде бы получается - у них есть англоязычные аналоги. А вот как быть не с системными? Если я напишу например
X++:
tmp = ref1.();
то аксапта естественно ругается на русские буквы. В 1С v7.7 бы метод GetAttrib(ИмяРеквизита). В 1С v8.1 я такого метода не нашел. Вот собственно и вопрос: каким образом из аксапты можно достучаться до полей справочников, у которых нет англоязычного названия? Вопрос наверно больше к знатокам 1С, но может кто сталкивался, задачка-то типовая...

Последний раз редактировалось _scorp_; 14.03.2008 в 12:50. Причина: опечатка
Старый 14.03.2008, 13:14   #2  
Maximin is offline
Maximin
NavAx
NavAx Club
 
396 / 325 (11) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Вопрос больше к знатокам COM....
Вот мой совет (долго писать не смогу).
Попробуй сделать то же самое на VC++, потом тоже самое перенести на Аксапту - в процессе поймешь сам...
В крайнем случае, попробуй на VBA. Но там слишком многое скрывается, можно понммание упустить...

Вкратце:
1. Методы в COM можно вызывать по названию (ака GetDispatch). Это путь к методам с русским названиям.
2. Без скобок в Аксапте писать нельзя - по сути, в COM поля - разновидность методов, поэтому "по правильному" - это с точки зрения 1С. С другой точки зрения - это неправильно.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 14.03.2008, 14:10   #3  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
482 / 351 (12) ++++++
Регистрация: 25.07.2007
Адрес: Москва
X++:
tmp = ref1.();
Только что проверил - тройка на русские буквы не ругается. Может четверку тоже можно как-то научить русскому?
Старый 14.03.2008, 15:37   #4  
Diman is offline
Diman
Участник
Сотрудники Microsoft Dynamics
 
166 / 35 (2) +++
Регистрация: 27.06.2003
Адрес: Москва
По словам знакомых 1С-ников 8 ориентирована больше на использование запросов.
В аттаче проектик, который получает данные по запросу из 1С, Вам ведь наверняка помимо ИНН захочется получить еще и нформацию по банковским счетам, адресам проч. Текст 1С-ного запроса можно сгенерить в самой 1С, там есть тулза.
Вложения
Тип файла: xpo SharedProject_AxForum1C.xpo (9.7 Кб, 202 просмотров)
За это сообщение автора поблагодарили: driller (1), _scorp_ (1).
Старый 14.03.2008, 15:42   #5  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
482 / 351 (12) ++++++
Регистрация: 25.07.2007
Адрес: Москва
То что нужно, спасибо!
Старый 22.08.2008, 14:59   #6  
Zick-Zibn is offline
Zick-Zibn
Участник
 
74 / 35 (2) +++
Регистрация: 28.05.2004
Адрес: Moscow
У меня вопрос тот же только в обратную сторону. Немогу установить значение реквизита добавленного руками. К реквизитам Код и Наименование обратиться можно и присвоить значения можно. Если кто сталкивался подскажите.
X++:
static void Job3(Args _args)
{
    
    COM v8_1;
    COM connect;
    COM item, code;
    ;
    v8_1 = new COM("V81.COMConnector");
    connect = v8_1.Connect("File= c:\\1C_Test");
    item = connect.NewObject("СправочникМенеджер.Номенклатура");
    code = item.CreateItem();
    code.Code("00070");
    code.Description("Кресло офисное");
    code.  = ??????????????
    code.write();

}
Вообщем как задать значение реквизита номенклатурная группа?

Последний раз редактировалось Zick-Zibn; 22.08.2008 в 15:01. Причина: добавление
Старый 22.08.2008, 15:44   #7  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,142 / 2324 (86) +++++++++
Регистрация: 16.01.2004
Адрес: Москва
попробуйте \System Documentation\Classes\COMDispFunction
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kurt Hatlevik: Sneak preview of the WMS E&E Blog bot DAX Blogs 0 20.11.2008 01:10
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37
Проблема при создании через COM документа в 1С dd DAX: Программирование 3 21.09.2005 13:56
Передача данных из 1С в Axapta 3.0 через COM Connector isbist DAX: Программирование 10 03.12.2004 10:58
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:17.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.