|
09.04.2009, 16:45 | #1 |
Участник
|
Отчёт ProjectInvoice - добавление нового поля.
Всем здравствуйте.
у меня вопрос: я хочу добавить поле LastName из DirPartyTable в Section Group: ProjInvoiceEmpl. Создаю display методу: X++: display Name emplLastName() { DirPartyTable dirPartyTable; EmplTable emplTable; Name _name; ; select lastName from dirPartyTable join PartyId from emplTable where dirPartyTable.PartyId == emplTable.PartyId join EmplId from projInvoiceEmpl where emplTable.EmplId == projInvoiceEmpl.EmplId join ProjinvoiceID from projInvoiceJour where projInvoiceJour.ProjInvoiceId == projInvoiceEmpl.ProjInvoiceId && projInvoiceJour.invoiceDate == projInvoiceEmpl.InvoiceDate; _name = dirPartyTable.LastName; return _name; } Пробовал вызвать её с fetch() до этой строки: this.send(projInvoiceEmpl); в while projInvoiceEmpl, результат тот-же. Что я делаю неправильно??? Заранее спасибо. Последний раз редактировалось Dima_Dima; 09.04.2009 в 16:55. |
|
09.04.2009, 17:00 | #2 |
MCTS
|
Попробуйте в этом методе
X++: display Name emplLastName() { DirPartyTable dirPartyTable; EmplTable emplTable; Name _name; projInvoiceEmpl projInvoiceEmplloc; projInvoiceJour projInvoiceJourloc; ; select lastName from dirPartyTable join PartyId from emplTable where dirPartyTable.PartyId == emplTable.PartyId join EmplId from projInvoiceEmplloc where emplTable.EmplId == projInvoiceEmplloc.EmplId && projInvoiceEmplloc.transid ==projInvoiceEmpl.transid join ProjinvoiceID from projInvoiceJourloc where projInvoiceJourloc.ProjInvoiceId == projInvoiceEmplloc.ProjInvoiceId && projInvoiceJourloc.invoiceDate == projInvoiceEmplloc.InvoiceDate &&; _name = dirPartyTable.LastName; return _name; } |
|
|
За это сообщение автора поблагодарили: Dima_Dima (1). |
09.04.2009, 17:05 | #3 |
Участник
|
всё заработало!!!
Спасибо! |
|
09.04.2009, 18:28 | #4 |
Участник
|
Цитата:
Сообщение от Eldar9x
Попробуйте в этом методе
X++: display Name emplLastName() { DirPartyTable dirPartyTable; EmplTable emplTable; Name _name; projInvoiceEmpl projInvoiceEmplloc; projInvoiceJour projInvoiceJourloc; ; select lastName from dirPartyTable join PartyId from emplTable where dirPartyTable.PartyId == emplTable.PartyId join EmplId from projInvoiceEmplloc where emplTable.EmplId == projInvoiceEmplloc.EmplId && projInvoiceEmplloc.transid ==projInvoiceEmpl.transid join ProjinvoiceID from projInvoiceJourloc where projInvoiceJourloc.ProjInvoiceId == projInvoiceEmplloc.ProjInvoiceId && projInvoiceJourloc.invoiceDate == projInvoiceEmplloc.InvoiceDate &&; _name = dirPartyTable.LastName; return _name; } Кроме того, если учесть, что CacheLookup свойство таблиц EmplTable, DirPartyTable выставлено в found, можно так выбрать X++: return EmplTable::find(projInvoiceEmpl.EmplId).dirPartyTable().LastName;
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
|
За это сообщение автора поблагодарили: Dima_Dima (1). |
09.04.2009, 18:39 | #5 |
Боец
|
Цитата:
Если вам необходимо вернуть только фамилию, то в выборку не нужно включать PartyId, EmplId, ProjinvoiceID - только лишние данные выбираете
Вообще, полезно пользоваться select firstonly + exist join |
|
|
За это сообщение автора поблагодарили: Dima_Dima (1). |
09.04.2009, 19:18 | #6 |
Участник
|
Согласен, но если их опустить - есть вероятность получение этих данных из кеша
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
23.04.2009, 18:33 | #7 |
Участник
|
полдня битвы теперь с custAccount, вставляю в job все корректно, если в display, то во всех строках выдается первое значение. Делаю все вроде по лучшим рекомендациям. Такое ощущение, что значения достаются не с таблиц, а с кеша.
Где я косячу? X++: display AccountNum customerId() { SMAserviceOrderTable smaserviceordertableloc; SMAServiceOrderLine smaserviceorderlineloc; Name _patID; ProjInvoiceEmpl projinvoiceemplloc; ; select CustAccount from smaserviceordertableloc exists join serviceOrderId from smaserviceorderlineloc where smaserviceordertableloc.serviceorderid == smaserviceorderlineloc.ServiceOrderId && smaserviceordertableloc.AgreementId == smaserviceorderlineloc.AgreementId exists join TransId from projInvoiceEmplloc where projinvoiceemplloc.TransId == smaserviceorderlineloc.ProjTransId; _patID = smaserviceordertableloc.CustAccount; return _patID; } |
|
23.04.2009, 18:44 | #8 |
Боец
|
А метод где написан, на датасорсе?
Последний раз редактировалось DSPIC; 23.04.2009 в 18:50. |
|
23.04.2009, 18:51 | #9 |
Участник
|
|
|
23.04.2009, 19:04 | #10 |
Боец
|
Ок, посмотрим на этот код по другому. Ваш код возвращает какой CustAccount ? Т.е. если метод представить в виде функции, то должно быть что-то вроде:
CustAсcount = F(x,y,...), где х,у - входные параметры, в зависимости от которых вычисляется CustAсcount. Глядя на этот код, можно сказать, что входные параметры отсутствуют, и естественно, результат выполнения метода будет статичен. И как результат - во всех строках одно и то же. Ну в зависимости от чего метод долженг выбрать нужный CustAсcount? В дисплэй\эдит методах входным параметром является курсор, которые в сию секунду отрисовывается на форме. Если метод написан на датасорсе формы, то этот курсор приходит в метод параметром. Если на таблице, то этим курсором служит this. Если в отчете, то этим курсором служит имя датасорса квери. |
|
|
За это сообщение автора поблагодарили: Dima_Dima (1). |
23.04.2009, 19:39 | #11 |
Участник
|
ProjInvoice --> DataSource --> Query --> DataSource --> ProjInvoiceJour
X++: display AccountNum customerId() { SMAserviceOrderTable smaserviceordertableloc; SMAServiceOrderLine smaserviceorderlineloc; Name _patID; ProjInvoiceEmpl projinvoiceemplloc; ; select firstonly CustAccount, ServiceOrderId from smaserviceordertableloc exists join serviceOrderId from smaserviceorderlineloc where smaserviceordertableloc.serviceorderid == smaserviceorderlineloc.ServiceOrderId && smaserviceordertableloc.AgreementId == smaserviceorderlineloc.AgreementId exists join TransId from projInvoiceEmplloc where projinvoiceemplloc.TransId == smaserviceorderlineloc.ProjTransId exists join ProjinvoiceID from projInvoiceJour where projInvoiceEmplloc.ProjInvoiceId == projInvoiceJour.ProjInvoiceId; _patID = smaserviceordertableloc.CustAccount; return _patID; |
|
23.04.2009, 21:10 | #12 |
MCITP
|
Цитата:
Сообщение от Dima_Dima
ProjInvoice --> DataSource --> Query --> DataSource --> ProjInvoiceJour
X++: display AccountNum customerId() { SMAserviceOrderTable smaserviceordertableloc; SMAServiceOrderLine smaserviceorderlineloc; Name _patID; ProjInvoiceEmpl projinvoiceemplloc; ; select firstonly CustAccount, ServiceOrderId from smaserviceordertableloc exists join serviceOrderId from smaserviceorderlineloc where smaserviceordertableloc.serviceorderid == smaserviceorderlineloc.ServiceOrderId && smaserviceordertableloc.AgreementId == smaserviceorderlineloc.AgreementId exists join TransId from projInvoiceEmplloc where projinvoiceemplloc.TransId == smaserviceorderlineloc.ProjTransId exists join ProjinvoiceID from projInvoiceJour where projInvoiceEmplloc.ProjInvoiceId == projInvoiceJour.ProjInvoiceId; _patID = smaserviceordertableloc.CustAccount; return _patID; X++: display AccountNum customerId(ProjInvoiceJour _projInvoiceJour)
__________________
Zhirenkov Vitaly |
|
|
За это сообщение автора поблагодарили: Dima_Dima (1). |
23.04.2009, 22:03 | #13 |
Боец
|
Цитата:
2 Dima_Dima: У вас, как я понимаю, DAX2009? У меня, к сожалению, её нет под рукой. Но глядя на этот отчет в 4-ке, можно увидеть, что секция \Reports\ProjInvoice\Designs\Standard\Generated Design\Section Group: ProjInvoiceJour\Body:ProjectInvoiceJour\Section Group: ProjInvoiceEmpl может выполняться несколько раз для одного и того же projInvoiceJour, от которого зависит получаемый Вами _patID. Посмотрите строки отчета, где изменяется projInvoiceJour. Логичнее было бы разместить ваше поле на уровне секции "\Reports\ProjInvoice\Designs\Standard\Generated Design\Section Group: ProjInvoiceJour\Body:ProjectInvoiceJour" , но тут уже вопросы дизайна. P.S. Могу ошибаться. Последний раз редактировалось DSPIC; 23.04.2009 в 22:09. |
|
|
За это сообщение автора поблагодарили: Dima_Dima (1). |
27.04.2009, 12:44 | #14 |
Участник
|
Цитата:
Сообщение от DSPIC
CustAсcount = F(x,y,...), где х,у - входные параметры, в зависимости от которых вычисляется CustAсcount.
Глядя на этот код, можно сказать, что входные параметры отсутствуют, и естественно, результат выполнения метода будет статичен. И как результат - во всех строках одно и то же. Ну в зависимости от чего метод долженг выбрать нужный CustAсcount? Всё заработало! Последний раз редактировалось Dima_Dima; 27.04.2009 в 13:21. |
|
27.04.2009, 13:57 | #15 |
Модератор
|
Не вводите людей в заблуждение, AX-Тренер (http://axforum.info/forums/member.php?u=1524) довольно известная личность, в свое время. Когда еще занимался проектом http://ax-test.narod.ru
Правда, он довольно давно не публикуется на форуме. С Уважением, Георгий |
|
27.04.2009, 14:15 | #16 |
Участник
|
|
|
27.04.2009, 19:25 | #17 |
Участник
|
Каким образом можно управлять на какой странице печатаются суммы? Если позиций много, то суммы почему-то печатаются на первой странице...
когда нужно, чтобы печатались на последней. |
|
Теги |
отчет, axapta |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|