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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2007, 15:51   #1  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
Еще вопрос по AxaptaCOMConnector
Вот рабочий кусок кода:
Код:
AxaptaQuery = Axapta.CreateObject("Query");
	AxaptaDataSource = AxaptaQuery.Call("AddDataSource", 77);
	AxaptaQueryRun = Axapta.CreateObject("QueryRun", AxaptaQuery);
	
	Пока AxaptaQueryRun.Call("Next") Цикл
		Buffer = AxaptaQueryRun.Call("GetNo", 1);
		Сообщить("1 -- " + Buffer.field("RecID") + "::" + Buffer.field("Name"));
	КонецЦикла;
т.е. записи в таблице есть

а вот этот:
Код:
	axaptaCustTable = Axapta.CreateRecord("CustTable");
    axaptaCustTable.ExecuteStmt("select * CustTable");
 
    Пока axaptaCustTable.found() Цикл
		Сообщить("0 -- " + axaptaCustTable.field("RecID") + "::" + axaptaCustTable.field("Name"));
	КонецЦикла;
нифига не выводит... а я вообще хотел туда запросы с джоинами "засовывать"...
почему так есть и как это решить?
Старый 23.12.2007, 16:12   #2  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
в таком варианте:
X++:
    axaptaCustTable.ExecuteStmt("select * from %1 where %1.Name == 'CustTable'");
тоже не выдает ничего...
Старый 23.12.2007, 16:39   #3  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
А есть клиент, у которого название "CustTable"?
__________________
С уважением,
glibs®
Старый 23.12.2007, 16:46   #4  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
Цитата:
Сообщение от glibs Посмотреть сообщение
А есть клиент, у которого название "CustTable"?
упс... а я так понял, что мы передаем именно имя таблицы... я вообще все записи хочу перебрать...

вообще по идее хочу типа как SQL запросами пользоваться для получения данных через КОМ-коннектор, а не вызовом методов таблиц
Старый 23.12.2007, 16:48   #5  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
вот, посматриваю в сторону SQLBuilderSelectExpression - только никак понять не могу, как он работает :-)
Старый 23.12.2007, 16:56   #6  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
да, glibs, я ступил с параметрами
а как из нескольких таблиц выбрать?

и еще, метод Found не переводит на следующую запись выборки... а примеров как сделать не нашел...
Старый 23.12.2007, 17:00   #7  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
О!
X++:
	axaptaCustTable = Axapta.CreateRecord("CustTable");
    axaptaCustTable.ExecuteStmt("select * from %1");
    //axaptaCustTable.ExecuteStmt("select *");
	
	 axaptaCustTable.found() 
		();
		
		("0 -- " + axaptaCustTable.field("RecID") + "::" + axaptaCustTable.field("Name"));
		axaptaCustTable.next();
	;
сработало...

только вот теперь разобраться как из нескольких таблиц вытянуть данные, соединив их...
Старый 23.12.2007, 19:04   #8  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
У меня не получилось . Я пробовал рыть примерно в таком направлении. Дальше рыть нет времени...

axaptaCustTable = Axapta.CreateRecord("CustTable");
axaptaCustTrans = Axapta.CreateRecord("CustTrans");
axaptaCustTable.ExecuteStmt("select * from %1 join %2 where %1.SalesId == %2.SalesId"), axaptaCustTable, axaptaCustTrans;

Если хочешь — можешь поискать информацию в google. Авось повезет.
__________________
С уважением,
glibs®
Старый 23.12.2007, 20:12   #9  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
Цитата:
Сообщение от glibs Посмотреть сообщение
У меня не получилось . Я пробовал рыть примерно в таком направлении. Дальше рыть нет времени...

axaptaCustTable = Axapta.CreateRecord("CustTable");
axaptaCustTrans = Axapta.CreateRecord("CustTrans");
axaptaCustTable.ExecuteStmt("select * from %1 join %2 where %1.SalesId == %2.SalesId"), axaptaCustTable, axaptaCustTrans;

Если хочешь — можешь поискать информацию в google. Авось повезет.
в этом направлении и я попытался... и тоже не получилось...
в гугле, как и в прочих поисковиках, пусто
Старый 23.12.2007, 19:23   #10  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Вот еще взгляни. Может поможет.

The statement must be an Axapta X++ statement. A valid a statement could be: select * from %1 where %2.Name == ‘Axapta’. This statement requires two Axapta records, one for %1 (record1) and one for %2 (record2). The %-signs are automatically substituted with the corresponding record names.

На сегодня я точно пасс.

А написать класс, который будет возвращать необходимые данные, нет никакой возможности?
__________________
С уважением,
glibs®
Старый 23.12.2007, 20:14   #11  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
Цитата:
Сообщение от glibs Посмотреть сообщение
The statement must be an Axapta X++ statement. A valid a statement could be: select * from %1 where %2.Name == ‘Axapta’. This statement requires two Axapta records, one for %1 (record1) and one for %2 (record2). The %-signs are automatically substituted with the corresponding record names.
попробую... хотя это именно то, что выше...
Цитата:
Сообщение от glibs Посмотреть сообщение
А написать класс, который будет возвращать необходимые данные, нет никакой возможности?
можно попробовать...

СПАСИБО
Старый 23.12.2007, 20:41   #12  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Вот так сработало. Вроде.

Sub testBatch()
On Error GoTo testBatch_error
Dim axapta As AxaptaCOMConnector.axapta
Dim cac As COMAdminCatalog
Dim axR1 As IAxaptaRecord
Dim axR2 As IAxaptaRecord
Dim res As Object
Dim i As Integer

Set axapta = New AxaptaCOMConnector.axapta
axapta.Logon "glibs", "", "", "AxGleb-30-ru"

Set axR1 = axapta.CreateRecord("CustTable")
Set axR2 = axapta.CreateRecord("CustGroup")
axapta.ExecuteStmt "SELECT * FROM %1 JOIN %2 WHERE %1.CustGroup == %2.CustGroup && %2.CustGroup == 'ХХХ'", axR1, axR2
While axR1.Found
MsgBox CStr(axR1.Field("Name"))
axR1.Next
Wend

Set cac = New COMAdminCatalog
cac.ShutdownApplication ("Navision Axapta Business Connector")

Set cac = Nothing
Set axapta = Nothing

testBatch_exit:
Exit Sub
testBatch_error:
MsgBox Err.Description
GoTo testBatch_exit
End Sub
__________________
С уважением,
glibs®
Старый 25.11.2009, 14:38   #13  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
Пробую
X++:
  axaptaCustInvoiceJour.ExecuteStmt("select firstonly %1 where %1.InvoiceDate == %2",axaptaCustInvoiceJour,transdate);
Компилируется, но при запуске выдает ошибку:
Ошибка времени выполнения: Метод был вызван с недопустимым числом параметров.
Как в аксапте работать с такой конструкцией?
Старый 25.11.2009, 15:07   #14  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Попробуйте так:
X++:
recId = "38182";
CustInvoiceJour = ax.CreateRecord("CustInvoiceJour");
	CustInvoiceJour.ExecuteStmt(
				"select firstonly %1 where %1.RecId == "+recId);
т.е. не используя параметры вообще
все параметры внесите в строку
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 25.11.2009, 15:42   #15  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
Цитата:
Сообщение от Russland Посмотреть сообщение
Попробуйте так:
все параметры внесите в строку

Для строковых типов все понятно это сработает, но у меня тип данных - дата. Мне приходится его переделывать в строковый но тогда мой запрос ничего не возвращает из за того что параметр должен быть типом дата а не строка.
Как можно передать дату в запрос через коннектор?
Старый 25.11.2009, 15:43   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от propeller Посмотреть сообщение
Для строковых типов все понятно это сработает, но у меня тип данных - дата. Мне приходится его переделывать в строковый но тогда мой запрос ничего не возвращает из за того что параметр должен быть типом дата а не строка.
Как можно передать дату в запрос через коннектор?
Надо использовать специфический формат просто для даты:
dd\mm\yyyy
Старый 25.11.2009, 15:31   #17  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
В справке по методу ExecuteStmt() сказано, что параметром может быть только и исключительно Record (до 6 штук). Константы (значения) параметрами быть не могут. Они должны явно прописываться в выполняемой строке как и предложил Russland
Старый 25.11.2009, 15:46   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Альтернативно, можно включить в выражение функцию, аля:

string.Format("%1.MyDate == str2date('{0}/{1}/{2}', 123) ", dateTime.Day, dateTime.Month, dateTime.Year);
Старый 25.11.2009, 16:28   #19  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Странно
X++:
CustInvoiceJour.ExecuteStmt(
"select firstonly %1 where %1.DueDate == 24\10\2005");
сработало. Возможно в вашем случае надо было Found"ом установиться на первую запись.

Ну да ладно
можно воспользоваться date2StrXpp() класса Global которая проконвертит дату в string

X++:
	ax.CallStaticClassMethod("Global", "date2StrXpp", myDate );
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню

Последний раз редактировалось Russland; 25.11.2009 в 16:32.
Теги
com connector

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблемы с AxaptaCOMConnector Old DAX: Программирование 1 26.07.2007 10:34
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
AxaptaCOMConnector Yari DAX: Программирование 3 14.04.2006 15:25
AxaptaComConnector для новичка murad DAX: Программирование 8 05.10.2005 15:30
Вопрос по AxaptaCOMConnector sk45 DAX: Программирование 5 10.09.2004 16:16

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:29.