20.04.2010, 11:47 | #1 |
Участник
|
Проблема вывода CreatedTime в отчет
Коллеги,
В отчет надо вывести поле SalesTable.CreatedTime, однако если указываешь например .... timeofday Time .... curTime = salesTable.CreatedTime то возвращает 0 Подскажите, что ж неправильно то? Заранее спасибо DAX 4.0, kernel 4.0.2503.454 |
|
20.04.2010, 11:59 | #2 |
Участник
|
У вас свойство "CreatedTime" включено на таблице SalesTable в AOT?
Если включено, то может быть тогда запись была создана до того, как это свойство включили. Поле SalesTable.CreatedTime начинает заполняться только после включения свойства. |
|
20.04.2010, 12:02 | #3 |
Участник
|
Да, включено. И на свежих записях тоже самое
|
|
20.04.2010, 12:04 | #4 |
Участник
|
у вас переменная объявлена с именем Time
а присваиваете вы его другой переменной: curTime = salesTable.CreatedTime |
|
20.04.2010, 12:06 | #5 |
Участник
|
Sorry, переменная, естественно, называется curTime и объявляется
timeofday curTime |
|
20.04.2010, 12:11 | #6 |
Участник
|
посмотрите в обозреватале таблицы SalesTable для данного конкретного заказа, у которого в отчет 0 выводится - поле CreatedTime заполнено?
Если заполнено, то в месте, где выводится это поле в отчет, выведите еще в инфолог: info(int2str(curTime)) - должно быть целое число >0. Если все правильно, то что-то не так в самом отчете. |
|
20.04.2010, 12:12 | #7 |
Участник
|
И еще покажите, как у вас переменная SalesTable инициализируется - какой запрос или метод find?
|
|
20.04.2010, 12:15 | #8 |
Участник
|
Значение для строки заказа есть. Инфолог выводит 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 |
Участник
|
Покажите select, который выбирает данные из SalesTable.
Может, у вас там перечислены отдельные поля, и среди них нет CreatedTime. |
|
20.04.2010, 12:20 | #10 |
Участник
|
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 |
Участник
|
Покажите весь код от начала метода до строки
X++: While(qrRun.next()) |
|
20.04.2010, 12:49 | #12 |
Участник
|
Чтобы не париться, предлагаю следующий способ:
Объявляете новую переменную с типом SalesTable X++: SalesTable localSalesTable; X++: localSalesTable = salesTable::find(salesTable.SalesId); curTime = localSalesTable.CreatedTime; info(int2str(curTime)); |
|
|
За это сообщение автора поблагодарили: Ulyxess (1). |
20.04.2010, 12:54 | #13 |
Участник
|
|
|
20.04.2010, 15:18 | #14 |
Участник
|
Спасибо, Ace, помогла новая переменная
А смысл можете объяснить? Какой группировки не было? |
|
20.04.2010, 15:34 | #15 |
Участник
|
Посмотрите что у вас в 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 |
Участник
|
Так у Вас еще и запрос с группировкой? Тогда надо было включить CreatedTime в список полей группировки.
Тут проблема в том, что запрос, может возвращать не все поля таблицы. Ну, например, запрос вида X++: select salesId, CustAccount from salesTable where salesTable.SalesId = "12345" Но в подобном запросе это как-бы "очевидно". Просто видно. Однако в запросе еще автоматически подтягиваются значения полей из группировки. Например X++: select maxOf(CustAccount) from salesTable group by SalesId where salesTable.SalesId = "12345" Ну, а Query - это создания анлогичных запросов другими средствами. Так что, к нему также применимы все эти рассуждения. Вероятно, Query, построенный по Вашему отчету либо имел явно указанный список извлекаемых полей таблицы SalesTable (узел Fields), либо был задан список полей группировки (узел Sorting и свойство OrderMode = GroupBy), что также автоматически оставляет только поля группировки и поля с аггрегирующими функциями (sum(), maxOf(), minOf()) Как следствие, для решения проблемы надо будет либо добавить CreatedTime в список Field, либо в список Sorting. Либо и то, и другое. |
|
Теги |
query, select, field |
|
|