AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2006, 09:31   #1  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Помогите сваять отчет по остаткам на складе
Вообщем я начинающий в Ax, необходимо сварганить отчет, выдающий остатки по номенклатуре на определенную дату.
При этом учесть возможность фильтрации и группировки по 5-ти признакам:
- склад
- МОЛ
- номенклатурная группа
- номенклатура
- партия

Подскажите какого вида Query надо забить, ну и как лучше его обработать!!!
Старый 29.05.2006, 09:48   #2  
slava09 is offline
slava09
Участник
Аватар для slava09
MCBMSS
Дети Юза
1C
 
1,642 / 237 (11) ++++++
Регистрация: 06.03.2003
Адрес: Украина, Киев
Читайте классику!!!

http://www.axapta.mazzy.ru/lib/inventsumdate/
Старый 29.05.2006, 10:25   #3  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от slava09
Читайте классику!!!

http://www.axapta.mazzy.ru/lib/inventsumdate/
уже читаю только вот не могу пока разобраться как их применять...начинаешь смотреть использование этих классов хотя бы в том же стандартном отчете Физ. наличие по складам...и начинаются такие дебри...не понять что за кем вызывается и для чего...
Старый 29.05.2006, 09:48   #4  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Начать надо с анализа отчетов Управление запасами/Отчеты/Статус/Физ.наличие/Физ.наличие по складам (Физ.наличие по группам)
Старый 29.05.2006, 10:26   #5  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от raz
Начать надо с анализа отчетов Управление запасами/Отчеты/Статус/Физ.наличие/Физ.наличие по складам (Физ.наличие по группам)
пытаюсь... пока слабо получается
Старый 29.05.2006, 10:48   #6  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
каким образом в отчете Физ. наличие по группам вызываются стандартные классы, описанные в статье http://www.axapta.mazzy.ru/lib/inventsumdate/...??
там если идти по отладчику отслеживая события, вызываемые нажатием кнопы ОК, приходим к тому что запускается класс RunBaseReport и нигде нет ни намека на использование классов: InventSumDateValueReport, InventSumDateValueReportDim
о которых в статье написано что именно они используются этими стандартными отчетами
Старый 29.05.2006, 11:22   #7  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от sparur
каким образом в отчете Физ. наличие по группам вызываются стандартные классы, описанные в статье
коллега, как программист программисту - Вы точки останова в интересующих методах ставить пробовали?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 29.05.2006, 12:00   #8  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Vadik
коллега, как программист программисту - Вы точки останова в интересующих методах ставить пробовали?
угу, теперь буду пробовать...
канеш пробовал....
Старый 29.05.2006, 11:03   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Смотрите отчет InventDimPhys.
В нем в методе fetch() создается экземпляр класса InventSumDateValueReportDim, а на секциях отчета созданы дисплейные методы, которые возвращают значения из этого класса
__________________
Axapta v.3.0 sp5 kr2
Старый 30.05.2006, 07:25   #10  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от AndyD
Смотрите отчет InventDimPhys.
В нем в методе fetch() создается экземпляр класса InventSumDateValueReportDim, а на секциях отчета созданы дисплейные методы, которые возвращают значения из этого класса
спасибо за подсказку, теперь бы еще сформировать запрос, делающий пробег по всем моим позициям фильтрации (5 штук), чтобы на основе данных, полученных из цикла формировать собственный экземпляр InventSumDateValueReportDim
Старый 30.05.2006, 13:10   #11  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
неужто никто не подскажет ничего полезного в этом плане ??
Старый 30.05.2006, 14:35   #12  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
PHP код:
server static InventSumDateValueReportDim newParameters(
    
TransDate       _perDate,
    
ItemId          _itemId,
    
InventDim       _inventDimCriteria,
    
InventDimParm   _inventDimParm
где
_inventDimCriteria - запись из InventDim (необязательно существующая), значения полей из которой будут использованы как фильтр при выборке всех возможных вариантов. то есть если нет ограничений, то все поля должна быть пустыми (или см. _inventDimParm)
_inventDimParm - запись в которой поля носят имена аналогичные полям из InventDim с добавлением "Flag" и являются флажками, показывающими по каким полям фильтровать (какие поля из _inventDimCriteria использовать, а какие проигнорировать)

Таким образом, чтобы отфильтровать по складу надо, чтобы в _inventDimCriteria было заполнено хотя бы поле склад (InventLocationId), а в _inventDimParm стоял только флаг InventLocationIdFlag.
Чтобы не использовались никакие фильтры _inventDimParm должна быть без флажков (и тогда все-равно что в _inventDimCriteria).

И постарайтесь это запомнить, так как данный прием используется повсеместно.

Последний раз редактировалось Wamr; 30.05.2006 в 14:40.
Старый 30.05.2006, 15:32   #13  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Wamr
PHP код:
server static InventSumDateValueReportDim newParameters(
TransDate _perDate,
ItemId _itemId,
InventDim _inventDimCriteria,
InventDimParm _inventDimParm
где
_inventDimCriteria - запись из InventDim (необязательно существующая), значения полей из которой будут использованы как фильтр при выборке всех возможных вариантов. то есть если нет ограничений, то все поля должна быть пустыми (или см. _inventDimParm)
_inventDimParm - запись в которой поля носят имена аналогичные полям из InventDim с добавлением "Flag" и являются флажками, показывающими по каким полям фильтровать (какие поля из _inventDimCriteria использовать, а какие проигнорировать)

Таким образом, чтобы отфильтровать по складу надо, чтобы в _inventDimCriteria было заполнено хотя бы поле склад (InventLocationId), а в _inventDimParm стоял только флаг InventLocationIdFlag.
Чтобы не использовались никакие фильтры _inventDimParm должна быть без флажков (и тогда все-равно что в _inventDimCriteria).

И постарайтесь это запомнить, так как данный прием используется повсеместно.
благодарен конечно, но в этом я уже сам разобрался... на данный момент проблема стоит в другом...
а именно как передать все возможные поля в таблицу InventDim (_inventDimCriteria), то есть грубо говоря организовать цикл по всем Складам, МОЛам, Номеклатурам, группам номенклатур, партиям!!! чтоб на основе этих значений создать экземпляр класса InventSumDateValueReportDim.
вот в чем трабл. в частном случае, когда все фильтры указаны все прекрасно считает, а вот если что-то опущено(не заполнен какой-либо фильтр) тут возникает проблема перебора.
Старый 29.05.2006, 11:57   #14  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
PHP код:
static void Job110(Args _args)
{
inventtrans inventtrans;
inventdim inventdim;
inventsum inventsum;
;
     
select sum(Qty),sum(costAmountPosted),
                                   
sum(costAmountAdjustmentfrom InventTrans index hint ItemIdx
        group by ItemId
            where 
                  InventTrans
.DatePhysical  <= ваша дата                          &&
                  
InventTrans.ItemId        == "ваша номенклатура" && 
                  
InventTrans.StatusIssue   != StatusIssue::OnOrder               &&
                  
InventTrans.StatusIssue   != StatusIssue::Picked                &&
                  
InventTrans.StatusIssue   != StatusIssue::ReservOrdered         &&
                  
InventTrans.StatusIssue   != StatusIssue::ReservPhysical        &&
                  
InventTrans.StatusIssue   != StatusIssue::Deducted              &&
                  
InventTrans.StatusIssue   != StatusIssue::QuotationIssue        &&
                  
InventTrans.StatusReceipt != StatusReceipt::Registered          &&
                  
InventTrans.StatusReceipt != StatusReceipt::Arrived             &&
                  
InventTrans.StatusReceipt != StatusReceipt::QuotationReceipt    &&
                  
InventTrans.StatusReceipt != StatusReceipt::Ordered
        join inventDim index hint DimIdIdx
            where inventDim
.inventDimId      == InventTrans.inventDimId           &&
                  
inventDim.InventLocationId == "ваш склад";
inventDim.inventDimId;

info(strfmt("%1,  %2 ",inventtrans.Qtyinventtrans.costAmountAdjustment inventtrans.costAmountPosted));


Старый 29.05.2006, 12:26   #15  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
Цитата:
Сообщение от Sada
PHP код:
static void Job110(Args _args)
{
inventtrans inventtrans;
inventdim inventdim;
inventsum inventsum;
;
select sum(Qty),sum(costAmountPosted),
sum(costAmountAdjustmentfrom InventTrans index hint ItemIdx
group by ItemId
where 
InventTrans
.DatePhysical <= ваша дата &&
InventTrans.ItemId == "ваша номенклатура" && 
InventTrans.StatusIssue != StatusIssue::OnOrder &&
InventTrans.StatusIssue != StatusIssue::Picked &&
InventTrans.StatusIssue != StatusIssue::ReservOrdered &&
InventTrans.StatusIssue != StatusIssue::ReservPhysical &&
InventTrans.StatusIssue != StatusIssue::Deducted &&
InventTrans.StatusIssue != StatusIssue::QuotationIssue &&
InventTrans.StatusReceipt != StatusReceipt::Registered &&
InventTrans.StatusReceipt != StatusReceipt::Arrived &&
InventTrans.StatusReceipt != StatusReceipt::QuotationReceipt &&
InventTrans.StatusReceipt != StatusReceipt::Ordered
join inventDim index hint DimIdIdx
where inventDim
.inventDimId == InventTrans.inventDimId &&
inventDim.InventLocationId == "ваш склад";
inventDim.inventDimId;
 
info(strfmt("%1, %2 ",inventtrans.Qtyinventtrans.costAmountAdjustment inventtrans.costAmountPosted));
 

ругается однако
Старый 29.05.2006, 12:29   #16  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
на что? хотелось бы знать...
Старый 29.05.2006, 12:31   #17  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
вот на это:
inventDim.inventDimId;
грит ошибка синтаксическая
Старый 29.05.2006, 12:35   #18  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Это моя ошибка , удалите эту строку.
Старый 29.05.2006, 12:43   #19  
sparur is offline
sparur
Участник
 
334 / 25 (1) +++
Регистрация: 19.05.2006
ну теперь работает, однако зачем пользовать inventtrans, если есть таблица InventSum со складскими остатками??
Старый 29.05.2006, 12:51   #20  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Насколько я понял, если делать через inventtrans на сегодня (к примеру), то данные совпадут с обороткой стандартной (хотя я не уверен что она на 100% у нас стандартная), если через InventSum, то будет физическое наличие...
Может я в чём не прав и меня поправят...
PHP код:
static void Job109(Args _args)
{
inventsum   i;
InventDim   id;
select sum(postedQty),sum(received),sum(deducted),sum(registered),sum(pickedfrom i group by itemid where i.ItemId == "номенклатура"
            
&& i.LastUpdDatePhysical <= today()
    
join id where id.InventLocationId == "склад" && id.inventDimId == i.InventDimId;
print 
i.postedQty i.received i.deducted i.registered i.picked;
pause;


Последний раз редактировалось Sada; 29.05.2006 в 13:03.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вписать динамический отчет в страницу (DAX 4.0) Qaz Qwerty DAX: Программирование 2 17.07.2008 05:46
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
Ошибки в отчете о статусе БД, Не совсем понятный отчет. Помогите разобраться. Poleax DAX: Администрирование 7 21.08.2007 12:23
Отчет по остаткам с партиями... NJD DAX: Программирование 6 21.01.2005 11:47
Отчет по остаткам ТМЦ на складах в разрезе бух.счетов tolstjak DAX: Функционал 10 26.02.2004 00:53

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:38.