AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 20.07.2010, 02:16   #1  
rDenis2 ist offline
rDenis2
Участник
 
62 / 36 (2) +++
Registriert seit: 13.05.2010
Создание, изменение InventTrans Ax4Sp2
Добрый вечер,

Существует модификация, при создании InvenPickingListJournalTable/Line. Записи в Line суммируются. Тоесть из нескольких sales orders, получается один InvenPickingListJournalTable. Линии суммируются по ItemId в случае совпадающих InventDimId. Отдельно сохраняются ссылки на все InventTrans и Qty для каждой sales line входящей в InvenPickingListJournalLine.
Есть задача модифицировать эти InventTrans - inventDimId, qty, и создать новые на основе существующих если необходимо, и зарезервировать относительно нового InventDimId. SalesLine изменять нельзя.
Вопрос такой, как правильнее это сделать. Можно ли просто select'om выбрать нужные InventTrans и изменить, как создать новую InventTrans, можно ли её инициализировать от другой и просто поменять inventDimId, qty и сделать insert. Или правильнее использовать какие-то классы.
Нашел в SalesLinetype.insert() такой код

X++:
estimated = InventUpd_Estimated::newInventMovement(InventMovement::construct(salesLine, InventMovSubType::None, childBuffer));
estimated.updateNow();
Может что-то подобное нужно сделать и с inventTrans

С Уважением, Денис
Alt 20.07.2010, 10:21   #2  
b_nosoff ist offline
b_nosoff
Читатель
Benutzerbild von b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Registriert seit: 01.12.2004
Ort: Msk
Blog-Einträge: 13
:( вопрос, конечно, интересен...
Zitat:
Zitat von rDenis2 Beitrag anzeigen
Или правильнее использовать какие-то классы
Не какие-то, а классы InventUpd_*
Именно они и служат для манипуляций складскими проводками.
Именно их работу вам предстоит изучить перед тем, как выполнять ваше задание.
И, да, удачи вам
__________________
Axapta non erubescit
Alt 20.07.2010, 12:09   #3  
rDenis2 ist offline
rDenis2
Участник
 
62 / 36 (2) +++
Registriert seit: 13.05.2010
Спасибо за наводку.
Думаю что, поменять dimensions в InventTrans можно с помощью InventUpd_ChangeDimension. Qty и резервацию через InventUpd_Reservation. Интересно как с созданием новой inventTrans. Тоесть если я создаю новую salesLine или InventPickingListJournalLine, inventTrans создается с помощью InventUpd_Estimated, и она основана на этой самой salesLine. Как быть если надо создать InventTrans от InventTrans.
Alt 20.07.2010, 12:59   #4  
AGRESSOR ist offline
AGRESSOR
Сам.AX
Benutzerbild von AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Registriert seit: 26.04.2010
Ort: Тюмень
Согласен с b_nosoff
От себя добавлю, что изменять проводки в InventTrans вручную крайне не рекомендуется ввиду всевозможных нехороших последствий, а именно проблем с количеством номенклатур в наличии, заказанных и зарезервированных.
А по вопросу: скажите с какой целью вы собираетесь создавать новые проводки? И с какой целью вы их меняете? Для каких манипуляций с журналом отгрузочных накладных это необходимо?
Поставьте задачу конкретнее =)
Alt 20.07.2010, 13:17   #5  
rDenis2 ist offline
rDenis2
Участник
 
62 / 36 (2) +++
Registriert seit: 13.05.2010
Задача - резервировать суммарную InvenPickingListJournalLine относительно одной inventDim той где есть максимальное наличие ItemId. Тоесть надо модифицировать существующие InventTrans.

В принципе наметил примерно так пока.
X++:
     InventTransSplit::newInventTransSplit(inventTrans.RecId).run();
//или
    InventUpd_ChangeDimension::updateForceDimInventTrans(InventMovement::construct(inventTrans, InventMovSubType::None, null), qty,
    inventTrans.inventDim(), InventDim::find(''), false, true,false);
//потом
    inventMovement = InventMovement::construct(inventTrans);
    if(inventMovement)
    {
        reservation = InventUpd_Reservation::newMovement(inventMovement,
                                                         _qty ,
                                                         _mayBeReduced,
                                                         _forceNotReserveOrdered,
                                                         _showInfo);
        reservation.updateNow();
    }
Alt 20.07.2010, 19:28   #6  
glibs ist offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4.942 / 911 (40) +++++++
Registriert seit: 10.06.2002
Ort: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Zitat:
Zitat von rDenis2
...
Существует модификация... из нескольких sales orders, получается один InvenPickingListJournalTable.
...
Есть стандартный функционал, который это делает.
Zitat:
Zitat von rDenis2
...
Линии суммируются по ItemId в случае совпадающих InventDimId.
...
А что происходит с ссылками на SalesId, InventTransId?

Судя по вашему описанию модификация у вас губительная для стандартного функционала, и лучше подумать над тем, чтобы сделать ее корректнее. Заодно и решите вашу проблему.
__________________
С уважением,
glibs®
Alt 20.07.2010, 19:52   #7  
rDenis2 ist offline
rDenis2
Участник
 
62 / 36 (2) +++
Registriert seit: 13.05.2010
Zitat:
Zitat von glibs Beitrag anzeigen
Есть стандартный функционал, который это делает.

А что происходит с ссылками на SalesId, InventTransId?

Судя по вашему описанию модификация у вас губительная для стандартного функционала, и лучше подумать над тем, чтобы сделать ее корректнее. Заодно и решите вашу проблему.
InvenTTransId для каждой salesLine сохраняется в отделной таблице. с refrecId на сyммарную InventPickingListJournalLine.
Модификация большая, InventPickingListJournalTable создается нестандартным способом, но в конечном итоге надо изменять InventTrans оригинальных salesLine.
Alt 21.07.2010, 12:48   #8  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Я так понимаю у вас проводки строк заказа в статусе "в заказе". почему просто не перебирать все проводки строки заказа в нужном статусе и резервировать в нужной вам аналитике и с нужным количеством? Строки заказов вы знаете. Класс InventUpd_Reservation поможет это вам сделать. Если в проводке количество больше чем нужно зарезервировать, то по-моему проводка сама разделится на две - зарезервированную и заказанную. Хотя возможно я что то не понял и подзабыл

Geändert von Sada (21.07.2010 um 12:57 Uhr)
Alt 21.07.2010, 15:00   #9  
rDenis2 ist offline
rDenis2
Участник
 
62 / 36 (2) +++
Registriert seit: 13.05.2010
Так и делаю, только если делаешь InventMovement, на основе Inventtrans, он в конце концов всё равно делается на основе salesLine, в InventMovemnet:construct(). InventMov_Sales. На данный момент суммарная InventPickigListJournalLine делается на основе первой, тоесть все остальные прибавяются к ней. Соответсвенна она не удаляется, и InventTrans идет с типом TransChildType Picking list.Тоесть при
X++:
reservation = InventUpd_Reservation::newMovement(inventMovement,
                                                         _qty ,
                                                         _mayBeReduced,
                                                         _forceNotReserveOrdered,
                                                         _showInfo);
        reservation.updateNow();
в updateReserveMore()
ищутся InventTrans с
X++:
 inventTrans.TransChildType        == None
                      inventTrans.TransChildRefId  == ''
соответсвенно резервируются не все. Думаю поменять принцип суммирование линии, тоесть удалять все, через delete(), TransChildType становится None. И создавать новую суммарную линию через doInsert(), InventTrans не должен меняться в етом случае.
Ну и дальше что то типа такого
X++:
server static void makeReservation(Common       _buffer,
                                   InventQty    _qty,
                                   InventDim    _inventDim,
                                   inventMovement _inventMovement = null,
                                   boolean      _mayBeReduced =true,
                                   boolean      _forceNotReserveOrdered = false,
                                   boolean      _showInfo = true
                                   )
{

    InventMovement                  inventMovement = _inventMovement;
    InventUpd_Reservation           reservation;
    InventDim                       inventDim;
    InventTrans                     inventTransLocal;
    Common                          _newBuffer;
    ;


    if(!inventMovement)
    {
        switch (_buffer.TableId)
        {
            case tablenum(InventTrans) :
                inventTransLocal = _buffer;
                switch (inventTransLocal.TransType)
                {
                    case InventTransType::Sales :
                        _newBuffer = inventTransLocal.salesLine();
                        inventMovement = Inventmovement::construct(_newBuffer);
                        break;
                }
                break;
            default:
                inventMovement = InventMovement::construct(_buffer);
                break;
        }
    }
    if(_inventDim && inventMovement)
    {
        inventDim.data(_inventDim);
        inventMovement.inventdim(inventDim);
    }
    if(inventMovement)
    {
        reservation = InventUpd_Reservation::newMovement(inventMovement,
                                                         _qty ,
                                                         _mayBeReduced,
                                                         _forceNotReserveOrdered,
                                                         _showInfo);
        reservation.updateNow();
    }
}
Alt 21.07.2010, 15:51   #10  
Sada ist offline
Sada
Программатор
Benutzerbild von Sada
 
1.450 / 153 (8) ++++++
Registriert seit: 29.03.2005
Ort: Толи Барнаул, толи Москва
Все я понял что вам нужно. Все что я говорил не верно... делете меня
в каком статусе находятся проводки строк заказов? скомплектовано?

Geändert von Sada (21.07.2010 um 16:03 Uhr)
Alt 21.07.2010, 21:09   #11  
rDenis2 ist offline
rDenis2
Участник
 
62 / 36 (2) +++
Registriert seit: 13.05.2010
Строки заказа это sales order?
если да, то они в нетронутом состоянии. Суммируются, только inventPickingListJournalLine.
Вообщем как я описал выше, работает, как надо. Добавлю что для InventTrans со статусом reserved pshysical, делаю
X++:
reservation = InventUpd_Reservation::newMovement(inventMovement,
                                                         +salesLineLocal.reservedPhysical()  ,
                                                         _mayBeReduced,
                                                         _forceNotReserveOrdered,
                                                         _showInfo);
        reservation.updateNow();
может кому пригидится.
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Связь CustInvoiceJour и InventTrans Silphidae DAX: Программирование 19 29.10.2009 15:18
Изменение "курсора" в цикле ZVV DAX: Программирование 8 09.12.2008 15:11
Изменение RevenueAmountPhysical на InventTrans HorrR DAX: Программирование 2 29.09.2008 16:47
Как правильно достучаться из InventTrans до даты накладыной NJD DAX: Программирование 6 22.07.2005 20:52
Связь таблиц InventTrans и PurchLine Pustik DAX: Программирование 2 25.11.2004 12:23

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 04:10 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.