31.03.2008, 10:35 | #1 |
Axapta Retail User
|
Не отрабатывает выборка
Уважаемые гуру аксы, столкнулсо с проблемкой .... попросили добавить в отчет сумму ндс, но так как НДС встречаются двух типов нужно определить каторый из них встретился...
X++: display real nds18() { str nds ; real nds18; ; while select SalesLine where salesLIne.SalesId==inventtrans.TRANSREFID { nds = salesline.TaxItemGroup; if (nds=='НДС18'){ nds18 = SalesLine.LineAmount; } } return nds18 ; } |
|
31.03.2008, 10:43 | #2 |
Участник
|
Почему не делает? Делает. Только таблицы inventTrans и SalesLine связаны совсем по другому полю - по лоту. Поэтому записей, удовтелворяющих вашему условию в Аксапте нет.
|
|
31.03.2008, 10:48 | #3 |
Участник
|
Кроме того:
Цитата:
2. предельно внимательно относитесь к производительности display-методов. Обращение к базе данных (select) внутри display-метода скорее всего приведет к диким тормозам, если вы будете этот метод показывать в гриде. 3. SalesLine.LineAmount - это чистая сумма, сумма безо всяких налогов. 4. заказ бывает частично отгруженный. Поэтому обращение к SalesLine.LineAmount может выдать совсем не те суммы, которые будут в накладной, если эта строчка уже частично отгружена. |
|
31.03.2008, 10:52 | #4 |
Участник
|
И еще... Уж извините, но по вашему коду можно обучение проводить на тему "как не надо писать код в Аксапте"
Никогда не используйте базовые типы для display- и edit-методов. У вас будут проблемы с именованием, шириной, размещением и security... Создайте EDT на базе наиболее подходящего типа и используйте только EDT в display- и edit-методах. |
|
31.03.2008, 11:17 | #5 |
Axapta Retail User
|
суть не в том как он ее считает или не считает это выянить можно, суть в том что он не находит совпадений ... связаны они вроди всетаки по этим ид, проверял через квери аналайзер ... он отображает данные ...
вот так например: X++: display real nds18() { str nds ; real nds18; ; while select SalesLine where salesLIne.SalesId==inventtrans.TRANSREFID { nds = salesline.TaxItemGroup; if (nds=='НДС18') { nds18 += SalesLine.LineAmount; } } nds18 = (nds18*0.18)+nds18; return nds18 ; } Последний раз редактировалось CasperSKY; 31.03.2008 в 11:22. |
|
31.03.2008, 11:19 | #6 |
Axapta Retail User
|
я месяц назад увидел аксапту учусь как могу ... конкретно дисплей метод взят откуда то из стандартного метода ...
Последний раз редактировалось CasperSKY; 31.03.2008 в 11:22. |
|
31.03.2008, 11:34 | #7 |
Участник
|
Вот переписанный ваш запрос.
X++: display SalesLineAmount nds18() // НИКАКИХ real. Только Extended Data Type = EDT { TaxItemGroup nds; // НИКАКИХ str. Только Extended Data Type = EDT SalesLineAmount nds18; // НИКАКИХ real. Только Extended Data Type = EDT ; while select SalesLine where salesLIne.InventTransId==inventtrans.inventTransId && salesline.TaxItemGroup == 'НДС18' // сразу сокращайте выборку, не надо тянуть с сервера лишние записи { nds18 += SalesLine.LineAmount; } return nds18 ; } X++: display SalesLineAmount nds18() // НИКАКИХ real. Только Extended Data Type = EDT { TaxItemGroup nds; // НИКАКИХ str. Только Extended Data Type = EDT ; select sum(lineAmount) from SalesLine where salesLIne.InventTransId==inventtrans.inventTransId && salesline.TaxItemGroup == 'НДС18' // сразу сокращайте выборку, не надо тянуть с сервера лишние записи ; nds18 = SalesLine.LineAmount; .... return nds18 ; } но даже после такой модификации все равно написано плохо, поскольку в display-методах не должно быть обращений к базе. Не может такого быть! |
|
31.03.2008, 11:44 | #8 |
Участник
|
Цитата:
Определить поля связи можно следующим образом 1. Создайте новый запрос (Query) в АОТ 2. ДОбавьте в датасорс одну таблицу 3. Добавьте во вложенный датасорс вторую таблицу 4. у вложенной таблицы включите свойство Relation = Yes 5. Посмотрите какие relation создала Аксапта Если relation не пояивлись, значит таблицы никак не связаны. Если relation появился, то скорее всего это правильный relation. но учтите, что это возможно не самый оптимальный (таблицы могут быть связаны несколькими способами, ядро покажет первую попавшуюся) |
|
|
За это сообщение автора поблагодарили: CasperSKY (1). |
31.03.2008, 14:27 | #9 |
Участник
|
У вас возможно записи не выбираются, потому что вы используете переменные источников данных отчета, насколько я погляжу.
Во всяком случае, в методе у вас их не объявлено. |
|
31.03.2008, 15:55 | #10 |
Axapta Retail User
|
Всё заработало, как всегда .... всё дело во внимательности ... mazzy был прав
Последний раз редактировалось CasperSKY; 31.03.2008 в 15:58. |
|