|
|
#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);
}
} но теперь просто зацепило и хочется все таки через классы реализовать
|
|
|