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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.08.2012, 12:02   #1  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Помогите с запросои
Добрый день! Прошу помощи с этим запросом:
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
Это то что мне нужно из таблицы PayRequestLine. Введя данный запрос в обозревателе таблиц, получаю нужные мне данные!
Переделал этот запрос через 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  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Проблема в строке

X++:
qbds.addRange(fieldnum(PayRequestLine, PayRequestAccountNum)).value(SysQuery::value(AccountVend)); // фильтр по поставщику
Если AccountVend - это фильтр, который может содержать спец. символы, то надо просто писать .value(AccountVend), иначе система фильтрует записи по поставщику с кодом "*"
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: JuniorAx (1).
Старый 06.08.2012, 12:42   #3  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо, помогло!
Не могли бы вы мне для "общего развития" объяснить разницу между SysQuery::value() и .value()?
Старый 06.08.2012, 12:48   #4  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
SysQuery::value(a) (или просто queryValue(a)) искейпит спецсимволы, .value(a) - нет. Посмотрите на код SysQuery::value(), он же открыт.
Старый 06.08.2012, 12:54   #5  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Ещё SysQuery::value(a) хорошо использовать, когда фильтрация не по тексту идёт
__________________
С уважением,
Вячеслав
Старый 06.08.2012, 12:57   #6  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
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'))
2)
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  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо всем! До сих пор как то не придавал этому значения, теперь буду знать.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Помогите!!!!!Обработка вх.НДС в SP4 lila DAX: Функционал 4 15.02.2006 16:41
Помогите написать запрос Кандидат DAX: Программирование 7 17.10.2005 14:44
Курсовые разницы! Помогите! SSM DAX: Функционал 7 26.09.2005 11:10
Помогите - не формируются Российские отчеты!!! ravil DAX: Функционал 13 27.11.2003 13:42
Помогите. Никак не могу законектиться по ODBC!!! SocratPSV DAX: Администрирование 10 17.03.2003 09:16

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

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

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