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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.07.2010, 02:16   #1  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 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

С Уважением, Денис
Старый 20.07.2010, 10:21   #2  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
:( вопрос, конечно, интересен...
Цитата:
Сообщение от rDenis2 Посмотреть сообщение
Или правильнее использовать какие-то классы
Не какие-то, а классы InventUpd_*
Именно они и служат для манипуляций складскими проводками.
Именно их работу вам предстоит изучить перед тем, как выполнять ваше задание.
И, да, удачи вам
__________________
Axapta non erubescit
Старый 20.07.2010, 12:09   #3  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 13.05.2010
Спасибо за наводку.
Думаю что, поменять dimensions в InventTrans можно с помощью InventUpd_ChangeDimension. Qty и резервацию через InventUpd_Reservation. Интересно как с созданием новой inventTrans. Тоесть если я создаю новую salesLine или InventPickingListJournalLine, inventTrans создается с помощью InventUpd_Estimated, и она основана на этой самой salesLine. Как быть если надо создать InventTrans от InventTrans.
Старый 20.07.2010, 12:59   #4  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
Согласен с b_nosoff
От себя добавлю, что изменять проводки в InventTrans вручную крайне не рекомендуется ввиду всевозможных нехороших последствий, а именно проблем с количеством номенклатур в наличии, заказанных и зарезервированных.
А по вопросу: скажите с какой целью вы собираетесь создавать новые проводки? И с какой целью вы их меняете? Для каких манипуляций с журналом отгрузочных накладных это необходимо?
Поставьте задачу конкретнее =)
Старый 20.07.2010, 13:17   #5  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 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();
    }
Старый 20.07.2010, 19:28   #6  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от rDenis2
...
Существует модификация... из нескольких sales orders, получается один InvenPickingListJournalTable.
...
Есть стандартный функционал, который это делает.
Цитата:
Сообщение от rDenis2
...
Линии суммируются по ItemId в случае совпадающих InventDimId.
...
А что происходит с ссылками на SalesId, InventTransId?

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

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

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

Последний раз редактировалось Sada; 21.07.2010 в 12:57.
Старый 21.07.2010, 15:00   #9  
rDenis2 is offline
rDenis2
Участник
 
62 / 36 (2) +++
Регистрация: 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();
    }
}
Старый 21.07.2010, 15:51   #10  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Все я понял что вам нужно. Все что я говорил не верно... делете меня
в каком статусе находятся проводки строк заказов? скомплектовано?

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Связь 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

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

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

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