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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.04.2010, 11:47   #1  
Ulyxess is offline
Ulyxess
Участник
 
13 / 10 (1) +
Регистрация: 06.04.2010
Проблема вывода CreatedTime в отчет
Коллеги,

В отчет надо вывести поле SalesTable.CreatedTime, однако если указываешь например
....
timeofday Time
....
curTime = salesTable.CreatedTime

то возвращает 0

Подскажите, что ж неправильно то?

Заранее спасибо

DAX 4.0, kernel 4.0.2503.454
Старый 20.04.2010, 11:59   #2  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
У вас свойство "CreatedTime" включено на таблице SalesTable в AOT?
Если включено, то может быть тогда запись была создана до того, как это свойство включили.
Поле SalesTable.CreatedTime начинает заполняться только после включения свойства.
Старый 20.04.2010, 12:02   #3  
Ulyxess is offline
Ulyxess
Участник
 
13 / 10 (1) +
Регистрация: 06.04.2010
Да, включено. И на свежих записях тоже самое
Старый 20.04.2010, 12:04   #4  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
у вас переменная объявлена с именем Time
а присваиваете вы его другой переменной:
curTime = salesTable.CreatedTime
Старый 20.04.2010, 12:06   #5  
Ulyxess is offline
Ulyxess
Участник
 
13 / 10 (1) +
Регистрация: 06.04.2010
Sorry, переменная, естественно, называется curTime и объявляется

timeofday curTime
Старый 20.04.2010, 12:11   #6  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
посмотрите в обозреватале таблицы SalesTable для данного конкретного заказа, у которого в отчет 0 выводится - поле CreatedTime заполнено?
Если заполнено, то в месте, где выводится это поле в отчет, выведите еще в инфолог: info(int2str(curTime)) - должно быть целое число >0.
Если все правильно, то что-то не так в самом отчете.
Старый 20.04.2010, 12:12   #7  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
И еще покажите, как у вас переменная SalesTable инициализируется - какой запрос или метод find?
Старый 20.04.2010, 12:15   #8  
Ulyxess is offline
Ulyxess
Участник
 
13 / 10 (1) +
Регистрация: 06.04.2010
Значение для строки заказа есть. Инфолог выводит 0.

Вот кусок кода отчета:

if (!firstRow)
{
//Выводим строку для предыдущей группы
s += curRow
+ colsDelim + strfmt("%1", decround(curWeight, 2))
+ colsDelim + strfmt("%1", decround(curConfirmedWeight, 2))
+ colsDelim + strfmt("%1", decround(curWeightBrutto, 2))
+ colsDelim + strfmt("%1", decround(curVolume, 2))
+ colsDelim + strfmt("%1", decround(curPalletQty, 2))
+ colsDelim + strfmt("%1", decround(curAmount, 2))
+ colsDelim + strfmt("%1", time2str(curTime, 99, 1));

allWeight += curWeight;
allConfirmedWeight += curConfirmedWeight;
allWeightBrutto += curWeightBrutto;
allVolume += curVolume;
allPalletQty += curPalletQty;
allAmount += curAmount;
s += rowsDelim;
}
firstRow = false;
curRow = int2str(i)
+ colsDelim + excelExp.formatValue(salesTable.SalesId)
+ colsDelim + excelExp.formatValue(salesTable.PurchOrderFormNum)
+ colsDelim + excelExp.formatValue(salesTable.CustAccount)
+ colsDelim + excelExp.formatValue(CustTable.NameAlias)
+ colsDelim + excelExp.formatValue(salesTable.DeliveryAddress)
+ printInventLocation();
// valio shol 09/05/14

curWeight = salesLine.QtyOrdered * inventTable.NetWeight;
curConfirmedWeight = confirmInventQty * inventTable.NetWeight;
curWeightBrutto = confirmInventQty * (inventTable.NetWeight + inventTable.TaraWeight);
curVolume = confirmInventQty * ((inventTable.Height/1000) * (inventTable.Width/1000) * (inventTable.Depth/1000));
curPalletQty = inventTable.standardPalletQuantity ?
(decround(confirmInventQty/inventTable.standardPalletQuantity,2)) : 0;
curAmount = custConfirmjour.ConfirmAmount;
curTime = salesTable.CreatedTime;
info(int2str(curTime));
}
Старый 20.04.2010, 12:20   #9  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Покажите select, который выбирает данные из SalesTable.
Может, у вас там перечислены отдельные поля, и среди них нет CreatedTime.
Старый 20.04.2010, 12:20   #10  
Ulyxess is offline
Ulyxess
Участник
 
13 / 10 (1) +
Регистрация: 06.04.2010
void makeReport()
{
Query query = new Query();
QueryBuildDataSource qbdsSalesTable, qbdsSalesLine;

QueryRun qrRun;
int i;

SalesTable salesTable;
CustTable custTable;
SalesLine salesLine;
InventTable inventTable;
Старый 20.04.2010, 12:32   #11  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Покажите весь код от начала метода до строки
X++:
 While(qrRun.next())
))))
Старый 20.04.2010, 12:49   #12  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Чтобы не париться, предлагаю следующий способ:
Объявляете новую переменную с типом SalesTable
X++:
SalesTable      localSalesTable;
далее, в месте, где у вас идет присвоение, написать такой код
X++:
localSalesTable = salesTable::find(salesTable.SalesId);
curTime = localSalesTable.CreatedTime;
info(int2str(curTime));
у вас скорее всего какая-то группировка идет и не указана группировка по CreatedTime
За это сообщение автора поблагодарили: Ulyxess (1).
Старый 20.04.2010, 12:54   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,430 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Покажите весь код от начала метода до строки
X++:
 While(qrRun.next())
а ещё лучше добавьте перед этой строкой вот такой код
X++:
info(qrRun.query().DataSourceNo(1).toString());
И результат запостите сюда.
Старый 20.04.2010, 15:18   #14  
Ulyxess is offline
Ulyxess
Участник
 
13 / 10 (1) +
Регистрация: 06.04.2010
Спасибо, Ace, помогла новая переменная

А смысл можете объяснить? Какой группировки не было?
Старый 20.04.2010, 15:34   #15  
hated8 is offline
hated8
Участник
Аватар для hated8
Злыдни
 
133 / 18 (1) ++
Регистрация: 27.06.2008
Посмотрите что у вас в SalesTable перед присвоением!

После строчки
X++:
curTime = salesTable.CreatedTime;
добавьте
X++:
    info(strfmt('SalesId = %1\nCreatedTime = %2\ncurTime = %3',salesTable.SalesId,time2str(salesTable.createdTime,1,1),int2str(curTime)));
Думаю что-то да прояснится...
А вообще breakpoint; и вперёд... )
__________________
Что сломалось не знаем, но уже немного подчинили...

Последний раз редактировалось hated8; 20.04.2010 в 16:01.
Старый 20.04.2010, 18:51   #16  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,658 / 1162 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Ulyxess Посмотреть сообщение
А смысл можете объяснить? Какой группировки не было?
Так у Вас еще и запрос с группировкой? Тогда надо было включить CreatedTime в список полей группировки.

Тут проблема в том, что запрос, может возвращать не все поля таблицы. Ну, например, запрос вида

X++:
select salesId, CustAccount from salesTable where salesTable.SalesId = "12345"
Очевидно вернет значения только 2 полей, указанных в списке полей. Но результат этой выборки будет записан в табличную переменную SalesTable, которая, что также очевидно, содержит все поля таблицы. Разумеется, не пустые значения будут только у тех полей, которые были указаны в запросе. А все остальные поля табличной переменной получат пустые значения. Ведь их значения никто не извлекал из таблицы.

Но в подобном запросе это как-бы "очевидно". Просто видно. Однако в запросе еще автоматически подтягиваются значения полей из группировки. Например

X++:
select maxOf(CustAccount) from salesTable group by SalesId where salesTable.SalesId = "12345"
Вроде бы, значения поля salesId в списке полей явно не указано. Тем не менее, если прочитать его значение в в табличной переменной, то оно будет не пустое. Просто потому, что это поле является признаком группировки. Так что, его значение тоже можно будет прочитать.

Ну, а Query - это создания анлогичных запросов другими средствами. Так что, к нему также применимы все эти рассуждения.

Вероятно, Query, построенный по Вашему отчету либо имел явно указанный список извлекаемых полей таблицы SalesTable (узел Fields), либо был задан список полей группировки (узел Sorting и свойство OrderMode = GroupBy), что также автоматически оставляет только поля группировки и поля с аггрегирующими функциями (sum(), maxOf(), minOf())

Как следствие, для решения проблемы надо будет либо добавить CreatedTime в список Field, либо в список Sorting. Либо и то, и другое.
Теги
query, select, field

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема некорректного вывода данных в EXCEL Dark Light DAX: Программирование 4 30.06.2009 14:43
Вписать динамический отчет в страницу (DAX 4.0) Qaz Qwerty DAX: Программирование 2 17.07.2008 05:46
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
PDF отчет. Проблема генерации. Dozer DAX: Программирование 2 29.06.2007 17:28
Возникла проблема с получением имени файла при создании своего канала вывода отчетов. oleg_kap DAX: Программирование 3 06.06.2006 14:12

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

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

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