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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.02.2011, 10:47   #1  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Остатки по inventsum... По каким полям правильнее собрать?
Доброго времени!
Передо мной стоит задача - дописать процедуру импорта в Аксу v3.0 с 1С v7.7.
Проблема в следующем - склады с которых списывается продукция в 1с не должны уходить в минус по партии... Чтобы каждый раз не высчитывать по inventtrans`у - решил брать остатки с inventsum (жду критики ).
Но как мне проверить количество, учитывая ранее закаченный заказ, но не разнесенный? Т.е. я закачиваю сначала заказы, допустим со склад1 на склад2 (насколько я понимаю данное количество получается в заказе), потом - заказы со склада2 на клиентов... дык вот, если проверять при закачке заказов на клиента по полю физ. доступно - ясно дело количества по партии не хватит.
По каким полям высчитать "доступное количество" по партии?
Может где нибудь есть тема по расшифровке полей inventsum (но что то не нашел)?
Старый 22.02.2011, 10:57   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Che Посмотреть сообщение
Проблема в следующем - склады с которых списывается продукция в 1с не должны уходить в минус по партии... Чтобы каждый раз не высчитывать по inventtrans`у - решил брать остатки с inventsum (жду критики ).
http://axapta.mazzy.ru/lib/inventsumdate/

Цитата:
Сообщение от Che Посмотреть сообщение
Но как мне проверить количество, учитывая ранее закаченный заказ, но не разнесенный? Т.е. я закачиваю сначала заказы, допустим со склад1 на склад2 (насколько я понимаю данное количество получается в заказе), потом - заказы со склада2 на клиентов... дык вот, если проверять при закачке заказов на клиента по полю физ. доступно - ясно дело количества по партии не хватит.
По каким полям высчитать "доступное количество" по партии?
Может где нибудь есть тема по расшифровке полей inventsum (но что то не нашел)?
легко:
1 - физическое наличие - товар лежит на полках
2 - зарезервировано из физ.наличия - зарезервировано из того, что лежит на полках
3 - доступно на полках после резервирования
4 - ожидается приход (заказы на покупку/журналы в статусе Заказано)
5 - ожидается расход (заказы на продажу/журналы в статусе Заказано)
6 - зарезервировано из ожидаемого прихода (если включена эта функциональность)
7 - доступно с учетом ожидаемого прихода и расхода

вам нужна колока 7

на вкладке "В наличии" есть более детальные суммы.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 363
Размер:	96.9 Кб
ID:	6613  
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Che (1).
Старый 22.02.2011, 11:01   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Che Посмотреть сообщение
Может где нибудь есть тема по расшифровке полей inventsum (но что то не нашел)?
Коль уж тема создана в разделе программирование, то тогда в качестве "расшировки полей" можно использовать код метода InventSum.addInventTransOnSum . Там наглядно видно какой из статусов на какое из полей влияет
За это сообщение автора поблагодарили: Che (1).
Старый 22.02.2011, 11:02   #4  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Спасибо за исчерпывающие ответы!
Честно говоря, думал что будет критика))))
Все-таки, как думаете, оптимально ли по инвентсуму проверять (сам уже не раз сталкивался с корявыми остатками)... Но по инвенттрансу - долго

Последний раз редактировалось Che; 22.02.2011 в 11:04.
Старый 22.02.2011, 11:09   #5  
Evgeniy2020 is offline
Evgeniy2020
Участник
 
309 / 68 (3) ++++
Регистрация: 10.04.2007
Адрес: Москва, САО, СЗАО
рекомендую сначала сделать пробное суммирование по inventtrans по 200 - 1000 номенклатур и сравнить полученное значение с inventsum по этим же номенклатурам. если различий будет очень очень мало, то можно и по inventsum остатки считать.

но у нас было много кастомизаций. в итоге беглое сравнение показало что для первых 1000 номенклатур в 30% случаях суммы отличаются.

видимо где не успевало обновится inventsum
если у вас различия меньше 5% то можно наверно и по inventsum.
Старый 22.02.2011, 11:12   #6  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А остатки вам нужны "мгновенные" или все-таки на какую-то дату?
Если inventsum расходится с inventtrans - это повод сильно задуматься над работоспособностью вашего "решения".
__________________
Ivanhoe as is..
Старый 22.02.2011, 11:12   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Che Посмотреть сообщение
Все-таки, как думаете, оптимально ли по инвентсуму проверять (сам уже не раз сталкивался с корявыми остатками)... Но по инвенттрансу - долго
Ну как бы так сказать... она (таблица InventSum) как раз для этого и предназначена. Все стандартные проверки при разноске складских проводок используют её в этих целях.

А то что она у вас корявая, это значит что вы ручками/программно корректируете InventTrans в обход стандарта.
Также помните что всегда можно запустить процедуру пересчёта/актуализации InventSum.

Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Если inventsum расходится с inventtrans - это повод сильно задуматься над работоспособностью вашего "решения".
Это повод задуматься над работоспособностью всей системы!
Старый 22.02.2011, 11:15   #8  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Цитата:
Сообщение от Evgeniy2020 Посмотреть сообщение
рекомендую сначала сделать пробное суммирование по inventtrans по 200 - 1000 номенклатур и сравнить полученное значение с inventsum по этим же номенклатурам. если различий будет очень очень мало, то можно и по inventsum остатки считать.

но у нас было много кастомизаций. в итоге беглое сравнение показало что для первых 1000 номенклатур в 30% случаях суммы отличаются.

видимо где не успевало обновится inventsum
если у вас различия меньше 5% то можно наверно и по inventsum.
Ок! Спасибо! Но я думаю при возникновении ошибок воспользуюсь джобиком:
X++:
static void Job70(Args _args)
{
    InventTrans     inventTransStatus;
    RecordSortedList cacheInventSum;
    InventSum       inventSum;
    InventSum       inventSumCurrent;
    InventDimId     lastDimId;
    ItemId          itemId;
    boolean         mustInventBeControlled;
    boolean         ok;
    Dialog          dialog = new Dialog("Пересчет");
    DialogField     dfItemId;
    InventTable     iTb;

    void testSum(InventSum _inventSum)
    {
        inventSumCurrent.itemId         = _inventSum.itemId;
        inventSumCurrent.inventDimId    = _inventSum.inventDimId;
        cacheInventSum.find(inventSumCurrent);
        cacheInventSum.del(inventSumCurrent);
    }
    dfItemId = dialog.addFieldValue(typeid(ItemId),itemId,"Номенклатура");
    if(!dialog.run()) return; itemId = dfItemId.value();
    cacheInventSum = new RecordSortedList(TableNum(InventSum));
    cacheInventSum.sortOrder(FieldNum(InventSum,itemId),FieldNum(InventSum,inventDimId));
//Che
while select iTb where iTb.ItemId like itemId
{
//Che

//    mustInventBeControlled = InventTable::find(itemId).inventItemType().mustInventBeControlled();
    mustInventBeControlled = InventTable::find(iTb.ItemId).inventItemType().mustInventBeControlled();
    ttsbegin;
//    while select forupdate inventSum where inventSum.itemId == itemId
    while select forupdate inventSum where inventSum.itemId == iTb.ItemId
    {
        cacheInventSum.ins(inventSum);
        inventSum.delete();
    }
    if(mustInventBeControlled)
    {
    while select sum(qty),sum(costAmountPosted),sum(costAmountAdjustment),sum(CostAmountSecCurPosted_RU),sum(CostAmountSecCurAdjustment_RU),sum(CostAmountSecCurPhysical_RU),sum(costAmountPhysical)
            from inventTransStatus group by itemId,inventDimId,statusReceipt,statusIssue,datePhysical,dateInvent,dateExpected
//            where inventTransStatus.itemId == itemId
            where inventTransStatus.itemId == iTb.ItemId
        {
            if (ok)
            {
             if (inventTransStatus.inventDimId != lastDimId)
             {
//              inventSum.itemId        = itemId;
              inventSum.itemId        = iTb.ItemId;
              inventSum.inventDimId   = lastDimId;
              inventSum.insert();
              testSum(inventSum);
              inventSum.clear();
             }//if (inventTransStatus.inventDimId != lastDimId)
            } //if (ok)
            else ok = true;
            lastDimId       = inventTransStatus.inventDimId;
            inventSum.addInventTransOnSum(inventTransStatus);
        } //while
    }//if(mustInventBeControlled)
            if (ok)
            {
//             inventSum.itemId        = itemId;
             inventSum.itemId        = iTb.ItemId;
             inventSum.inventDimId   = lastDimId;
             inventSum.insert();
             testSum(inventSum);
            }//if (ok)
    ttscommit;
}//while select iTb where iTb.ItemId like itemId
}
Мало ли кому поможет)

Последний раз редактировалось Che; 22.02.2011 в 11:22.
Старый 22.02.2011, 11:22   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На всякий случай ещё кину ссылочку на тему Пересчет inventSum
За это сообщение автора поблагодарили: mazzy (5).
Старый 22.02.2011, 11:44   #10  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
На всякий случай ещё кину ссылочку на тему Пересчет inventSum
ээээх поблагодарил бы... да плюсы кончились)))))))


Спасибо ВСЕМ!
Старый 22.02.2011, 12:43   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Che Посмотреть сообщение
Ок! Спасибо! Но я думаю при возникновении ошибок воспользуюсь джобиком:
это неправильный джобик.
на правильный указал S.Kuskov
там же сказано как сделать принудительный пересчет без джобиков, из главного меню
__________________
полезное на axForum, github, vk, coub.
Старый 22.02.2011, 12:50   #12  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Цитата:
Сообщение от mazzy Посмотреть сообщение
это неправильный джобик.
на правильный указал S.Kuskov
там же сказано как сделать принудительный пересчет без джобиков, из главного меню
Хм... что же в нем не так? Вроде как нормально отрабатывает
Из главного меню, честно говоря не пользовался) Попробую...
Старый 22.02.2011, 13:06   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Che Посмотреть сообщение
Хм... что же в нем не так? Вроде как нормально отрабатывает
1. Закат солнца вручную
2. в вашей проверке нет таблицы inventSettlement, поэтому финансовые остатки вы проверить не сможете. только количество.
3. поле costAmountAdjustment само по себе является агрегатом (= sum of inventSettlement). это поле может содержать неверные значения (обычно из-за вмешательства программистов). Его нельзя использовать для ПРОВЕРКИ!

и сравните со стандартным кодом:
Пересчет inventSum
юзайте стандартные классы
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Sustained Engineering: Fields modifiedDateTime and modifiedBy on Table InventSum Blog bot DAX Blogs 0 30.12.2010 00:12
InventSum Alexanderrrr DAX: Функционал 18 12.01.2010 07:43
Ошибка при разноске складских движений Starling DAX: Администрирование 9 12.10.2007 14:21
Вытащить записи из InventSum ... Rimantas DAX: Программирование 23 07.11.2006 14:47
Остатки номенклатуры Def DAX: Программирование 16 16.11.2005 16:12

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

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

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