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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.02.2009, 14:16   #1  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
передача параметров в запрос while select
Здравствуйте уважаемые.

Подскажите пожалуйста как правильно передать параметры запроса в запрос while select ....
ошибка появляется в том случае, когда один из параметров не указан. Запрос ничего не вводит.

К примеру параметры отчета:
период: fromDate, toDate
Клиент: CustID

Запрос:
while select * from CustTrans
where CustTrans.TransDate > fromDate && CustTrans.TransDate < toDate
&& CustTrans.CustID == CustID .......

Если параметр отчета Клиент (CustID = " ") не указан отчет ничего не выводит.

Заранее благодарен.
__________________
Александр
Старый 15.02.2009, 14:25   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Правильно заменить while select на while(QueryRun.next())
Старый 15.02.2009, 14:38   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
А так?
X++:
while select * from CustTrans
where CustTrans.TransDate > fromDate && CustTrans.TransDate < toDate && 
((CustID && CustTrans.CustID == CustID) ||
!CustID)
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
За это сообщение автора поблагодарили: tolstjak (1).
Старый 15.02.2009, 14:55   #4  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от miklenew Посмотреть сообщение
X++:
((CustID && CustTrans.CustID == CustID) || !CustID)
К чему такие сложности?
X++:
!ustId || custTrans.CustId == custId
За это сообщение автора поблагодарили: miklenew (2).
Старый 15.02.2009, 15:08   #5  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от miklenew Посмотреть сообщение
А так?
X++:
while select * from CustTrans
where CustTrans.TransDate > fromDate && CustTrans.TransDate < toDate && 
((CustID && CustTrans.CustID == CustID) ||
!CustID)

Как я понимаю в таком случае отчет не будет выдавать ошибку, но данные тоже не будет выводить, а надо чтобы отчет выдавал данные по выбранному клиенты, если клиент не выбран ыдавал отчет по всем клиентам.
__________________
Александр
Старый 15.02.2009, 15:14   #6  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от Wamr Посмотреть сообщение
Правильно заменить while select на while(QueryRun.next())
А до этого сформировать запрос через QueryRun ?
Примерно
query query;
QueryBuildDataSource qBSСTrans;
;

query = new Query();


qBSСTrans = query.addDataSource(tableNum(CustTrans));
.......
.......


правильно понял?
__________________
Александр
Старый 15.02.2009, 15:23   #7  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от oip Посмотреть сообщение
К чему такие сложности?
X++:
!ustId || custTrans.CustId == custId
Согласен. Так лучше.
Цитата:
Сообщение от tolstjak Посмотреть сообщение
Как я понимаю в таком случае отчет не будет выдавать ошибку, но данные тоже не будет выводить, а надо чтобы отчет выдавал данные по выбранному клиенты, если клиент не выбран ыдавал отчет по всем клиентам.
Пробовали?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 15.02.2009, 15:26   #8  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от miklenew Посмотреть сообщение
Согласен. Так лучше.

Пробовали?
Сейчас попробую
__________________
Александр
Старый 15.02.2009, 15:51   #9  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Попробовал.
Ничего не выводит.

Пример:
CustTrans custTrans;
TransDate fromDate;
TransDate toDate;
CustAccount CustId;

;
fromDate = 01\12\2007;
toDate = 31\12\2007;
//CustId = "001131";
CustId = " ";


while select * from custTrans
where custTrans.TransDate > fromDate && custTrans.TransDate < toDate &&
((CustID && custTrans.AccountNum == CustID) ||
!CustID)
if (custTrans)

info(strfmt("%1, %2", custTrans.AccountNum, custTrans.AmountMST));

Что сделал не так?
__________________
Александр
Старый 15.02.2009, 15:57   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от tolstjak Посмотреть сообщение
Попробовал.
Ничего не выводит.

Пример:
CustTrans custTrans;
TransDate fromDate;
TransDate toDate;
CustAccount CustId;

;
fromDate = 01\12\2007;
toDate = 31\12\2007;
//CustId = "001131";
CustId = " ";


while select * from custTrans
where custTrans.TransDate > fromDate && custTrans.TransDate < toDate &&
((CustID && custTrans.AccountNum == CustID) ||
!CustID)
if (custTrans)

info(strfmt("%1, %2", custTrans.AccountNum, custTrans.AmountMST));

Что сделал не так?
Например, вместо
X++:
CustId = " ";
попробовать
X++:
CustId = "";
...
мелочь конечно, а всё-таки...
__________________
Zhirenkov Vitaly
Старый 15.02.2009, 15:57   #11  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от tolstjak Посмотреть сообщение
CustId = " ";
CustId = "";
Старый 15.02.2009, 16:04   #12  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от oip Посмотреть сообщение
CustId = "";

Да. Согласен. Получилось.
__________________
Александр
Старый 15.02.2009, 19:38   #13  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от tolstjak Посмотреть сообщение
... надо чтобы отчет выдавал данные по выбранному клиенты, если клиент не выбран ыдавал отчет по всем клиентам.
А что будет, если пользователь захочет посмотреть данные по двум или трём клиентам? Если он захочет ввести критерий поиска:

клиент1,клиент2,клиент3

Не лишайте пользователя удобств стандартного функционала. Прислушайтесь к совету Wamr.
Старый 15.02.2009, 19:39   #14  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от oip Посмотреть сообщение
CustId = "";
Можно ли без серьезных трудностей перевести нижеуказанный SQL запрос в Аксаптовский типа while........
Для использования в // Поговорим об ADO

DECLARE @DD1 DATETIME /* Начальная дата */
DECLARE @DD2 DATETIME /* Начальная дата */
DECLARE @AccountNum Varchar(13) /* Подразделение */

SET @DD1 = '20081001'
SET @DD2 = '20081031'
SET @AccountNum = '%000155%'


select dd.Контрагент, sum(dd.Клиент_Н) AS Клиент_Н
, sum(dd.Поставщик_Н) AS Поставщик_Н
, (sum(dd.Клиент_Н) - sum(dd.Поставщик_Н)) AS Сводная_Н
, sum(dd.Клиент_О) As Клиент_О
, sum(dd.Поставщик_О) AS Поставщик_О
, (sum(dd.Клиент_О) - sum(dd.Поставщик_О)) AS Сводная_О
, ((sum(dd.Клиент_Н) - sum(dd.Поставщик_Н)) - (sum(dd.Клиент_О) - sum(dd.Поставщик_О))) AS Разница
from


(Select
a.Название AS Контрагент
--, a.Клиент, ' ' AS Поставщик, a.PK
, sum(a.НачСальдо) AS Клиент_Н, null AS Поставщик_Н
, sum(a.Оборот)AS Клиент_О, null AS Поставщик_О
from
(select ct.AccountNum AS Клиент, ct2.Name AS Название, ct2.VendAccount AS PK, sum(ct.AmountMST)AS НачСальдо, null As Оборот
from CustTrans ct, CustTable ct2
where ct.TransDate < @DD1
AND ct.AccountNum = ct2.AccountNum
Group by
--Клиент
ct.AccountNum, ct2.Name, ct2.VendAccount


UNION

select ct1.AccountNum AS Клиент, ct3.Name AS Название, ct3.VendAccount AS PK, null AS НачСальдо, sum(ct1.AmountMST)As Оборот
from CustTrans ct1, CustTable ct3
where (ct1.TransDate between @DD1 and @DD2)
AND ct1.AccountNum = ct3.AccountNum
Group by
--Клиент
ct1.AccountNum, ct3.Name, ct3.VendAccount
)
AS a
Group by a.Клиент, a.Название, a.PK
--Order by a.Клиент




UNION




Select
--a.Клиент, a.Название, a.PK, sum(a.НачСальдо), sum(a.Оборот)
aa.Название AS Контрагент
--, a.Клиент, ' ' AS Поставщик, a.PK
, null AS Клиент_Н, sum(aa.НачСальдо) AS Поставщик_Н
, null AS Клиент_О, sum(aa.Оборот) AS Поставщик_О


from
(select ct.AccountNum AS Клиент, ct2.Name AS Название, ct2.CustAccount AS PK, sum(ct.AmountMST)AS НачСальдо, null As Оборот
from VendTrans ct, VendTable ct2
where ct.TransDate < @DD1
AND ct.AccountNum = ct2.AccountNum
Group by
--Клиент
ct.AccountNum, ct2.Name, ct2.CustAccount


UNION

select ct1.AccountNum AS Клиент, ct3.Name AS Название, ct3.CustAccount AS PK, null AS НачСальдо, sum(ct1.AmountMST)As Оборот
from VendTrans ct1, VendTable ct3
where (ct1.TransDate between @DD1 and @DD2)
AND ct1.AccountNum = ct3.AccountNum
Group by
--Клиент
ct1.AccountNum, ct3.Name, ct3.CustAccount
)
AS aa
Group by aa.Клиент, aa.Название, aa.PK
--Order by aa.Клиент ;
) AS dd
Group by Контрагент


За ранее благодарен.
__________________
Александр
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Запрос по таблице параметров. uchenik DAX: Программирование 26 18.03.2009 07:12
Передача параметра в Запрос(Query) Zoe DAX: Программирование 5 07.07.2008 15:27
Передача параметров запроса из CurrentList tolstjak DAX: Программирование 3 21.04.2008 09:56
Запрос на форме как Select или готовая выборка в форму? rohlenko DAX: Программирование 9 23.06.2005 13:38
передача параметров в Report eugene egorov DAX: Программирование 1 25.06.2002 19:34

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

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

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