06.08.2012, 12:02 | #1 |
Участник
|
Помогите с запросои
Добрый день! Прошу помощи с этим запросом:
X++: SELECT sum(AmountCur) FROM PayRequestLine group by PayRequestAccountNum, BudgetCenterId asc where PayRequestLine.BudgetCenterId == '0400' && PayRequestLine.CreatedDate >= 01\05\2012 && PayRequestLine.CreatedDate <= 31\05\2012 && PayRequestLine.PaymentCurrencyCode == "RUR" Exists join payRequestTable where payRequestTable.PayREquestType == 1 Переделал этот запрос через QBDS: X++: qbds = query.addDataSource(tablenum(PayRequestLine)); qbds.addRange(fieldnum(PayRequestLine, CreatedDate)).value(QueryRange(fDate,tDate)); // фильтруем по дате создания qbds.addSelectionField(fieldnum(PayRequestLine, AmountCur),selectionfield::Sum); qbds.addRange(fieldnum(PayRequestLine, BudgetCenterId)).value(SysQuery::value(CFO));// фильтр по ЦФО qbds.addRange(fieldnum(PayRequestLine, PayRequestAccountNum)).value(SysQuery::value(AccountVend)); // фильтр по поставщику qbds.orderMode(ordermode::GroupBy); qbds.addSortField(fieldnum(PayRequestLine, PayRequestAccountNum)); qbds.addSortField(fieldnum(PayRequestLine, BudgetCenterId)); qbds.addRange(fieldNum(PayRequestLine, PaymentCurrencyCode)).value(SysQuery::value(CurCode)); // фильтр по валюте qbdsPRT = qbds.addDataSource(tablenum(PayRequestTable)); // выбираем только !!!исходящие безналичные платежи!!! qbdsPRT.joinMode(joinmode::ExistsJoin); qbdsPRT.relations(true); qbrPRT = qbdsPRT.addRange(fieldNum(PayRequestTable, PayRequestType)); qbrPRT.value("Исходящая"); queryRun = new SysQueryRun(query); info (queryRun.query().dataSourceNo(1).toString()); // просмотр текста запроса X++: SELECT SUM(AmountCur) FROM PayRequestLine GROUP BY PayRequestLine.PayRequestAccountNum ASC, PayRequestLine.BudgetCenterId ASC WHERE (((createdDate>={ts '2012-05-01 00:00:00.000'} AND createdDate<={ts '2012-05-31 00:00:00.000'}))) AND (((BudgetCenterId = '0400'))) AND (((PayRequestAccountNum = '*'))) AND (((PaymentCurrencyCode = 'RUR'))) EXISTS JOIN * FROM PayRequestTable WHERE PayRequestLine.PayRequestId = PayRequestTable.PayRequestId AND (((PayRequestType = 1))) |
|
06.08.2012, 12:07 | #2 |
Участник
|
Проблема в строке
X++: qbds.addRange(fieldnum(PayRequestLine, PayRequestAccountNum)).value(SysQuery::value(AccountVend)); // фильтр по поставщику
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |
06.08.2012, 12:42 | #3 |
Участник
|
Спасибо, помогло!
Не могли бы вы мне для "общего развития" объяснить разницу между SysQuery::value() и .value()? |
|
06.08.2012, 12:48 | #4 |
Axapta
|
SysQuery::value(a) (или просто queryValue(a)) искейпит спецсимволы, .value(a) - нет. Посмотрите на код SysQuery::value(), он же открыт.
|
|
06.08.2012, 12:54 | #5 |
северный Будда
|
Ещё SysQuery::value(a) хорошо использовать, когда фильтрация не по тексту идёт
__________________
С уважением, Вячеслав |
|
06.08.2012, 12:57 | #6 |
Axapta
|
1)
X++: q = new Query(); qbds = q.addDataSource(tableNum(InventTable)); qbds.addRange(fieldNum(InventTable, ItemId)).value('*a,b'); Цитата:
SELECT * FROM InventTable WHERE ((ItemId LIKE N'*a' OR ItemId = N'b'))
X++: q = new Query(); qbds = q.addDataSource(tableNum(InventTable)); qbds.addRange(fieldNum(InventTable, ItemId)).value(queryValue('*a,b')); Цитата:
SELECT * FROM InventTable WHERE ((ItemId = N'*a,b')) - поиск точного значения
|
|
|
За это сообщение автора поблагодарили: driller (2). |
06.08.2012, 14:07 | #7 |
Участник
|
Спасибо всем! До сих пор как то не придавал этому значения, теперь буду знать.
|
|