17.10.2006, 07:36 | #1 |
Участник
|
Автозаполнение строк в журнале
Люди подскажите как это правильнее реализовать:
Стоит задача сделать автозаполнение строк в скласких журналах на основании выбранной складской аналитики (т.е. пользователь выбирает Склад и МОЛ жмет ОК и ему в журнал попадает все что висит на этой складской аналитике)! Причем наличие считать не на конкретную дату, а так как считает сама Аксапта (абстрагированно от дат, например как в LookUp-форме для контрола Склад на закладке Аналитика любого складского журнала). реализовал запрос вида: SELECT SUM(Qty), inventDimId, ItemId FROM InventTrans GROUP BY InventTrans.ItemId, InventTrans.inventDimId JOIN * FROM InventDim WHERE InventTrans.inventDimId = InventDim.inventDimId AND ((InventLocationId = X)) AND ((inventMOLId = Y)) однако данные разнятся с Аксаптой... почему? |
|
17.10.2006, 09:11 | #2 |
Участник
|
А зачем ты используешь InventTrans, если текущие остатки лежат в InventSum, а для получения остатков в разрезе дат есть специальные классы, например:
http://axapta.mazzy.ru/lib/inventsumdate/ |
|
17.10.2006, 09:17 | #3 |
Участник
|
ну вот пошел по пути складских проводок , что не правильный ход??
а что касается разреза дат, то мне как раз дату учитывать НЕ надо, надо так как рассчитывает наличие сама Аксапта. |
|
17.10.2006, 09:40 | #4 |
NavAx
|
В вашем запросе нужно фильтровать только приходы и расходы, т.е должен быть еще такой фильтр:
X++: inventTrans.packingSlipReturned == 0 && (inventTrans.statusReceipt == StatusReceipt::Purchased || inventTrans.statusIssue == StatusIssue::Sold); Последний раз редактировалось Roman777; 17.10.2006 в 09:56. Причина: Исправил ошибку. |
|
17.10.2006, 09:54 | #5 |
program-ёр
|
во второй строке || (или)
__________________
Становись лучше |
|
|
За это сообщение автора поблагодарили: Roman777 (1). |
17.10.2006, 09:54 | #6 |
NavAx
|
|
|
|
За это сообщение автора поблагодарили: kvg6 (1). |
17.10.2006, 10:19 | #7 |
Участник
|
У меня такое же задание было.. использовал именно InventSum + #InventDimJoin ... Работает всё, как надо. По проводкам лучше не лазить.
|
|
17.10.2006, 10:23 | #8 |
Участник
|
|
|
17.10.2006, 10:56 | #9 |
NavAx
|
|
|
17.10.2006, 12:07 | #10 |
Участник
|
в классах все прекрасно, НО я так и не могу понять никак одну вещь. а именно...
Во всех классах этих используется ItemId, так вот где его брать??? мне что перебирать ВСЕ номенклатурные единицы и подставлять в этот класс??? БРЕД. Тогда получается надо делать while select... по таблице InventTrans или InventSum c ограничениями по складу и по МОЛу, и потом передавать в класс... НО какой тогда в этом смысл, если все сводится все равно к запросу по одной из таблиц? |
|
17.10.2006, 12:11 | #12 |
NavAx
|
|
|
17.10.2006, 12:13 | #13 |
Участник
|
Я же говорю, InventSum + #InventDimJoin работает прекрасно.
Код: while select InventSum where InventSum.AvailPhysical > 0 /* dimension criteria */ #InventDimJoin(InventSum.inventDimId,inventDimSum,inventDimCriteria,InventDimParm) { } |
|
|
За это сообщение автора поблагодарили: sparur (1). |
17.10.2006, 12:23 | #14 |
Участник
|
|
|
17.10.2006, 12:24 | #15 |
Участник
|
|
|
17.10.2006, 12:39 | #16 |
Member
|
Цитата:
Сообщение от sparur
...
мне что перебирать ВСЕ номенклатурные единицы и подставлять в этот класс??? ... Если нужны текущие остатки, то брать только не закрытые физически. Если остатки на дату, то все.
__________________
С уважением, glibs® |
|
17.10.2006, 12:39 | #17 |
Участник
|
Цитата:
Не видите вигрыша в производительности между перебором в таблице номенклатур и в таблице проводок? Ну, как скажете. Согласен с glibs. |
|
17.10.2006, 12:40 | #18 |
Участник
|
Код: static void Job10(Args _args) { InventSum InventSum; inventDim inventDimSum; inventDim inventDimCriteria; InventDimParm InventDimParm; ; inventDimCriteria.clear(); inventDimCriteria.InventLocationId = 'VN'; InventDimParm.initFromInventDim(inventDimCriteria); while select InventSum where InventSum.AvailPhysical > 0 /* dimension criteria */ #InventDimJoin(InventSum.inventDimId,inventDimSum,inventDimCriteria,InventDimParm) { trace("%1 - %2 (%3)",InventSum.ItemId,InventSum.AvailPhysical,InventSum.InventDimId); } } |
|
17.10.2006, 12:45 | #19 |
Участник
|
эээ, не совсем так поняли я не вижу смысла особого в использовании классов когда скажем дата достаточно поздняя, получается тоже самое (если не хуже) что и ограниченный запрос по складским проводкам, хотя... конечно спорно все это... эмпирика нужна ...
|
|
17.10.2006, 12:47 | #20 |
Участник
|
Цитата:
Сообщение от Delfins
Код: static void Job10(Args _args) { InventSum InventSum; inventDim inventDimSum; inventDim inventDimCriteria; InventDimParm InventDimParm; ; inventDimCriteria.clear(); inventDimCriteria.InventLocationId = 'VN'; InventDimParm.initFromInventDim(inventDimCriteria); while select InventSum where InventSum.AvailPhysical > 0 /* dimension criteria */ #InventDimJoin(InventSum.inventDimId,inventDimSum,inventDimCriteria,InventDimParm) { trace("%1 - %2 (%3)",InventSum.ItemId,InventSum.AvailPhysical,InventSum.InventDimId); } } |
|