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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.03.2011, 16:36   #1  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Сбор суммы по партионным остаткам
Доброго времени суток.
Добрые люди, подскажите плиз, как (по каким полям) собрать сумму по остаткам?
Метод который собирает количественные остатки:
X++:
static InventQty Get_InventDateSum(ItemId _itemId,
                                   InventLocationId _inventLocationId,
                                   InventBatchId    _inventBatchId,
                                   DateStatus endDate
                                  )
{

    InventTrans _inventTrans;
    InventDim   _inventDim;

    // находим количество пришедшее за период
    select sum(Qty) from _inventTrans
    group by ItemId
    where  _inventTrans.ItemId          == _itemId                              &&
           _inventTrans.DatePhysical    <= endDate                              &&
           _inventTrans.StatusIssue     != StatusIssue::OnOrder                 &&
           _inventTrans.StatusIssue     != StatusIssue::Picked                  &&
           _inventTrans.StatusIssue     != StatusIssue::ReservOrdered           &&
           _inventTrans.StatusIssue     != StatusIssue::ReservPhysical          &&
           _inventTrans.StatusIssue     != StatusIssue::QuotationIssue          &&
           _inventTrans.StatusReceipt   != StatusReceipt::Registered            &&
           _inventTrans.StatusReceipt   != StatusReceipt::Arrived               &&
           _inventTrans.StatusReceipt   != StatusReceipt::QuotationReceipt      &&
           _inventTrans.StatusReceipt   != StatusReceipt::Ordered
    join _inventDim
        where _inventTrans.InventDimId == _inventDim.inventDimId &&
        _inventDim.inventBatchId == _inventBatchId &&
        _inventDim.InventLocationId == _inventLocationId;
    return _inventTrans.Qty;
}
а вот по каким полям собрать сумму - не знаю... По CostAmountPosted? Или нет?
Старый 15.03.2011, 16:53   #2  
AX2009
Гость
 
n/a
не изобретайте велосипед, кривой и одноколесный
используйте классы INVENTSUM*
там есть разные на любой вкус
Старый 15.03.2011, 17:01   #3  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Цитата:
Сообщение от AX2009 Посмотреть сообщение
не изобретайте велосипед, кривой и одноколесный
используйте классы INVENTSUM*
там есть разные на любой вкус
если б я его с самого начала писал) ...а тут приходится дописывать
Старый 15.03.2011, 17:07   #4  
AX2009
Гость
 
n/a
ну посмотрите как в InventSumFinancial сделано.
заодно может пару идей оттуда украдете. например, будете не складывать инвенттранс со дня пришествия, а отнимать от инвентсам
просто лучше делать сразу правильно, и тогда на багфиксинг меньше будет времени тратиться. и на апгрейд тоже.
Старый 15.03.2011, 18:40   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Che Посмотреть сообщение
по каким полям собрать сумму - не знаю... По CostAmountPosted? Или нет?
Есть нюансы . Поищите по форуму по ключевому слову CostAmountAdjustment.
Например:
Себестоимость проданного товара SQL запросом
Оборотно-сальдовая ведомость по складу
За это сообщение автора поблагодарили: Che (1).
Старый 16.03.2011, 10:23   #6  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Господа, нужна критика
Вот каким образом я решил задачку:
X++:
//+++Che 16032011
static container Get_InventDate_Qty_Cost(ItemId _itemId,
                                   InventLocationId _inventLocationId,
                                   InventBatchId    _inventBatchId,
                                   DateStatus endDate
                                  )
{

    InventTrans _inventTrans;
    InventDim   _inventDim;
    container   con;
    real        costSum;

    // íàõîäèì êîëè÷åñòâî ïðèøåäøåå çà ïåðèîä
    select sum(Qty),sum(costAmountPosted),sum(costAmountAdjustment) from _inventTrans
    group by ItemId
    where  _inventTrans.ItemId          == _itemId                              &&
           _inventTrans.DatePhysical    <= endDate                              &&
           _inventTrans.StatusIssue     != StatusIssue::OnOrder                 &&
           _inventTrans.StatusIssue     != StatusIssue::Picked                  &&
           _inventTrans.StatusIssue     != StatusIssue::ReservOrdered           &&
           _inventTrans.StatusIssue     != StatusIssue::ReservPhysical          &&
           _inventTrans.StatusIssue     != StatusIssue::QuotationIssue          &&
           _inventTrans.StatusReceipt   != StatusReceipt::Registered            &&
           _inventTrans.StatusReceipt   != StatusReceipt::Arrived               &&
           _inventTrans.StatusReceipt   != StatusReceipt::QuotationReceipt      &&
           _inventTrans.StatusReceipt   != StatusReceipt::Ordered
    join _inventDim
        where _inventTrans.InventDimId == _inventDim.inventDimId &&
        _inventDim.inventBatchId == _inventBatchId &&
        _inventDim.InventLocationId == _inventLocationId;
    costSum = _inventTrans.CostAmountPosted + _inventTrans.CostAmountAdjustment;
    con = conins(con, 1,_inventTrans.Qty, costsum);
    return con;
}
Задачка была в следующем: дополнить отчет физическое наличие по партиям (количественный учет), для ввода первичных остатков в 1с. Оптимально? Как думаете?
Старый 16.03.2011, 10:38   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Che Посмотреть сообщение
Оптимально? Как думаете?

Ограничения на статус проводки
X++:
           _inventTrans.StatusIssue     != StatusIssue::OnOrder                 &&
           _inventTrans.StatusIssue     != StatusIssue::Picked                  &&
           _inventTrans.StatusIssue     != StatusIssue::ReservOrdered           &&
           _inventTrans.StatusIssue     != StatusIssue::ReservPhysical          &&
           _inventTrans.StatusIssue     != StatusIssue::QuotationIssue          &&
           _inventTrans.StatusReceipt   != StatusReceipt::Registered            &&
           _inventTrans.StatusReceipt   != StatusReceipt::Arrived               &&
           _inventTrans.StatusReceipt   != StatusReceipt::QuotationReceipt      &&
           _inventTrans.StatusReceipt   != StatusReceipt::Ordered
можно заменить на условие существования физической даты
X++:
_inventTrans.DatePhysical != dateNull()

P.S.: А для чего вы делатете con = conins(con, 1, Qty, CostSum);
вместо более наглядного con = [Qty, CostSum] или даже сразу return [Qty, CostSum];
К слову и в обратную сторону можно также [Qty, CostSum] = con;
Старый 16.03.2011, 10:49   #8  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Точно! Спасибо!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Расхождение суммы проводки по поставщику и сопоставленной суммы petr DAX: Функционал 2 15.10.2008 23:31
Алгоритм расчета общей суммы kashperuk DAX: Программирование 31 05.09.2007 22:37
Корректировка суммы налога в закупке ymv2000 DAX: Функционал 4 26.10.2006 09:19
В кассовой книге не печатаются суммы больше 1000000 mad_pilot DAX: Функционал 10 29.01.2003 10:58
Изменение формата вывода суммы в платежке Maxim Gorbunov DAX: Программирование 1 28.12.2001 13:57

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

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

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