![]() |
#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)) однако данные разнятся с Аксаптой... почему? |
|
![]() |
#2 |
Участник
|
А зачем ты используешь InventTrans, если текущие остатки лежат в InventSum, а для получения остатков в разрезе дат есть специальные классы, например:
http://axapta.mazzy.ru/lib/inventsumdate/ |
|
![]() |
#3 |
Участник
|
ну вот пошел по пути складских проводок
![]() а что касается разреза дат, то мне как раз дату учитывать НЕ надо, надо так как рассчитывает наличие сама Аксапта. |
|
![]() |
#4 |
NavAx
|
В вашем запросе нужно фильтровать только приходы и расходы, т.е должен быть еще такой фильтр:
X++: inventTrans.packingSlipReturned == 0 && (inventTrans.statusReceipt == StatusReceipt::Purchased || inventTrans.statusIssue == StatusIssue::Sold); Последний раз редактировалось Roman777; 17.10.2006 в 09:56. Причина: Исправил ошибку. |
|
![]() |
#5 |
program-ёр
|
Цитата:
![]()
__________________
Становись лучше |
|
|
За это сообщение автора поблагодарили: Roman777 (1). |
![]() |
#6 |
NavAx
|
|
|
|
За это сообщение автора поблагодарили: kvg6 (1). |
![]() |
#7 |
Участник
|
У меня такое же задание было.. использовал именно InventSum + #InventDimJoin ... Работает всё, как надо. По проводкам лучше не лазить.
|
|
![]() |
#8 |
Участник
|
|
|
![]() |
#9 |
NavAx
|
|
|
![]() |
#10 |
Участник
|
в классах все прекрасно, НО я так и не могу понять никак одну вещь. а именно...
Во всех классах этих используется ItemId, так вот где его брать??? мне что перебирать ВСЕ номенклатурные единицы и подставлять в этот класс??? БРЕД. Тогда получается надо делать while select... по таблице InventTrans или InventSum c ограничениями по складу и по МОЛу, и потом передавать в класс... НО какой тогда в этом смысл, если все сводится все равно к запросу по одной из таблиц? |
|
![]() |
#12 |
NavAx
|
|
|
![]() |
#13 |
Участник
|
Я же говорю, InventSum + #InventDimJoin работает прекрасно.
Код: while select InventSum where InventSum.AvailPhysical > 0 /* dimension criteria */ #InventDimJoin(InventSum.inventDimId,inventDimSum,inventDimCriteria,InventDimParm) { } |
|
|
За это сообщение автора поблагодарили: sparur (1). |
![]() |
#14 |
Участник
|
|
|
![]() |
#15 |
Участник
|
|
|
![]() |
#16 |
Member
|
Цитата:
Сообщение от sparur
...
мне что перебирать ВСЕ номенклатурные единицы и подставлять в этот класс??? ... Если нужны текущие остатки, то брать только не закрытые физически. Если остатки на дату, то все.
__________________
С уважением, glibs® |
|
![]() |
#17 |
Участник
|
Цитата:
Не видите вигрыша в производительности между перебором в таблице номенклатур и в таблице проводок? Ну, как скажете. Согласен с glibs. |
|
![]() |
#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); } } |
|
![]() |
#19 |
Участник
|
Цитата:
![]() ![]() |
|
![]() |
#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); } } ![]() ![]() |
|