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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.01.2007, 15:08   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
ReqPO и ReqTrans - планирование
Здраствуйте ,

Мои шефы хотят чтобы в "Спланированных заказах" были видные данные для какого заказа пордажи есть запланирована строка . В первые я сделал как отображение через метод и он действует ( не на все строки ) . Но , как вы знаете , на такую информацию неработает поиск и филтрирование . Я буду добавлят два поля в ReqPO табличку - SalesId и CustName и заполню ети поля нужной информации . Вопрос в том , что я пока непонимаю как добиться до SalesId по настоящему . Вот мой метод отображения - и он не действует на все 100 % .. :-(( :

Код:
  Display InventTransRefId refId( Int nRez = 1 )
  {
    InventTransRefId cRet;
    ReqTrans         reqTrans, reqTrans2;
    ReqTransCov      reqCov;
    Salestable       salTbl;
    CustTable        cstTbl;
    ReqPO            reqPo;
    ;
    reqTrans  = this.reqTrans();
    reqCov    = reqTrans.selectCov(false);
    reqtrans2 = reqtrans.reqTransSettled(reqCov,false);
    if ( reqTrans2 )
    {
       cRet = reqTrans2.RefId;
       salTbl = salestable::find(cRet);
       if ( salTbl )
       {
          if ( nRez == 1 )
          {
             cstTbl = CustTable::find(salTbl.CustAccount);
             cRet = cRet + " " + cstTbl.Name;
          }
       }
       else
       {
          cRet = "";
          reqPo = ReqPo::find(reqTrans2.ReqPlanId,reqTrans2.RefId,false);
          if ( reqPo )
          {
             reqTrans  = reqPo.reqTrans();
             reqCov    = reqTrans.selectCov(false);
             reqtrans2 = reqtrans.reqTransSettled(reqCov,false);
             if ( reqTrans2 )
             {
                cRet = reqTrans2.RefId;
                salTbl = salestable::find(cRet);
                if ( salTbl )
                {
                   if ( nRez == 1 )
                   {
                      cstTbl = CustTable::find(salTbl.CustAccount);
                      cRet = cRet + " " + cstTbl.Name;
                   }
                }
             }
             else
             cRet = "";
          }
       }
    }
    return cRet;
  }
Буду благодарен если поясните , как можно добиться до продажного заказа для каждой строки из спланированных заказов . А то голова крутиться уже ...

С уважением , Римантас
Старый 17.01.2007, 16:02   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Пожалуйста: приведенный ниже код копирует поле из SalesLine в ReqPO. Практически ваш случай.

X++:
// EVGGL, PT0616 -->
protected void TCHUpdatePlannedOrderSalesPoolId(ReqSetupDim _setupDim)
{
    ReqTrans            reqTrans;
    ReqTransCov         reqTransCov;
    ReqTrans            reqTransSettled;
    SalesPoolId         salesPoolId, oldSalesPoolId;
    ReqPO               reqPO;

    Map                 mapPlannedOrder;
    MapIterator         mi_PlannedOrder;
    Map                 mapReqTransReceipts;

    ReqTransCache       reqTransCache   = reqPlanData.reqTransCache();

    mapPlannedOrder = reqTransCache.mapPlannedOrder();
    mapReqTransReceipts = reqTransCache.findReceipts(_setupDim);
    if (! mapPlannedOrder || ! mapReqTransReceipts)
        return;
    mi_PlannedOrder = new mapIterator(mapPlannedOrder);

    mi_PlannedOrder.begin();
    while (mi_PlannedOrder.more())
    {
        // ignore planned order coming from another cycle
        if (! mapReqTransReceipts.exists(mi_PlannedOrder.key()))
        {
            mi_PlannedOrder.next();
            continue;
        }

        reqTrans = mapPlannedOrder.lookup(mi_PlannedOrder.key());
        salesPoolId     = "";
        oldSalesPoolId  = "";

        if (reqTrans.CovQty && ! reqTrans.IsDerivedDirectly && ! reqTrans.IsForecastPurch &&
            (reqTrans.RefType == ReqRefType::ItemPlannedOrder || reqTrans.RefType == ReqRefType::BOMPlannedOrder))
        {
            reqTransCov     = reqTrans.selectCovJoinTrans(true);
            reqTransSettled = reqTransCov.joinChild();
            while (reqTransCov)
            {
                if (reqTransCov.Qty == 0)
                    continue;

                if (! reqTransSettled.InventTransId || ! reqTransSettled.RefId || reqTransSettled.RefType != ReqRefType::Sales)
                {
                    // There cannot be any common relation
                    salesPoolId = "";
                    break;
                }

                salesPoolId = SalesLine::findInventTransId(reqTransSettled.InventTransId).TCHSalesPoolId;
                if (! salesPoolId)
                    break;
                if (oldSalesPoolId && salesPoolId != oldSalesPoolId)
                {
                    salesPoolId = "";
                    break;
                }
                oldSalesPoolId = salesPoolId;

                next reqTransCov;
            }
            if (salesPoolId)
            {
                reqPO = reqTrans.reqPo(true);
                reqPO.TCHSalesPoolId = salesPoolId;
                reqPO.doUpdate();
            }
        }

        mi_PlannedOrder.next();
    }
}
Этот новый метод вызывается из ReqCalc.covCalc:
X++:
...
                                    }
                                    // EVGGL, PT0616 -->
                                    this.TCHUpdatePlannedOrderSalesPoolId(setupDim);
                                    // EVGGL, PT0616 <--
                                }

                                ttscommit;
                            }
                            catch (Exception::Deadlock)
...
Разумеется, все это работает только в модели планирования "1:1". В противном случае вы получаете одну закупку, которая "закрывает" несколько заказов на продажу.
За это сообщение автора поблагодарили: wojzeh (1), shogel (1).
Старый 17.01.2007, 16:04   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
оффтоп:
а почему EVGGL ?!?
Старый 17.01.2007, 16:06   #4  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от kashperuk Посмотреть сообщение
оффтоп:
а почему EVGGL ?!?
В той компании, в которой я сейчас работаю, в ходу 5-символьные логины.
Старый 17.01.2007, 16:17   #5  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от EVGL Посмотреть сообщение
Пожалуйста: приведенный ниже код копирует поле из SalesLine в ReqPO. Практически ваш случай.
...
Разумеется, все это работает только в модели планирования "1:1". В противном случае вы получаете одну закупку, которая "закрывает" несколько заказов на продажу.
БОЛЬШОЕ СПАСИБО !!! . Только хочу переспросить - где поместить етот метод TCHUpdatePlannedOrderSalesPoolId , в какoй класс ?

Ещё раз СПАСИБО ! Римантас
Старый 17.01.2007, 16:19   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
ReqCalc, очевидно.
Старый 17.01.2007, 18:03   #7  
Andrew K. is offline
Andrew K.
Участник
 
29 / 12 (1) ++
Регистрация: 02.12.2004
Адрес: Minsk
Евгений, правильно ли я понимаю что Ваш код обрабатывает только непосредственно связанные ReqTrans, т.е. через уровни Sales - Prod - ProdBOM - Purch или Sales - Transfer - Purch функция не работает?
Старый 17.01.2007, 20:49   #8  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от Andrew K. Посмотреть сообщение
Евгений, правильно ли я понимаю что Ваш код обрабатывает только непосредственно связанные ReqTrans, т.е. через уровни Sales - Prod - ProdBOM - Purch или Sales - Transfer - Purch функция не работает?
Верно.
Старый 18.01.2007, 09:32   #9  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от EVGL Посмотреть сообщение
ReqCalc, очевидно.
Замечательно ... Вечером пропускали планирование - всё работает ! EVGL , простите , но ещё хочу попросить совета . В некоторых случаях планирование делает в ручную - из заказов продажи делает Explosion ( форма ReqTransExplosion ) . Здесь ваш метод действует на главную строку заказа ( продукт ) , но незаполняет для строк составляюших продукта . Может быть и для етого у вас есть решение ? ...

С благодарносьтю , Римантас
Старый 18.01.2007, 10:28   #10  
Vals is offline
Vals
Аманд
Аватар для Vals
Компания АМАНД
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2009
 
1,766 / 507 (20) +++++++
Регистрация: 27.02.2002
Адрес: Pass partout, Москва
Цитата:
чтобы в "Спланированных заказах" были видные данные для какого заказа пордажи есть запланирована строка
А в нижней части "Использование" не то что нужно отображает?
Старый 18.01.2007, 10:32   #11  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Здесь ваш метод действует на главную строку заказа ( продукт ) , но незаполняет для строк составляюших продукта . Может быть и для етого у вас есть решение ?
К сожалению, готового решения нет. Это как раз то, о чем написал Andrew K.
Старый 18.01.2007, 10:32   #12  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Может быть и для етого у вас есть решение ? ...
X++:
[B]            if ( !salesid && reqTransSettled )
            {
               reqPO = reqTransSettled.reqPo(false);
               if ( reqPO.SalesId )
                  salesId = reqPO.SalesId;
            }[/B]            if ( salesId )
            {
               reqPO = reqTrans.reqPo(true);
               if ( salesid != reqPO.SalesId )
               {
                  reqPO.SalesId   = salesId;
                  reqPO.SalesName = Salestable::find(salesId,false).SalesName;
                  reqPO.doUpdate();
               }
            }
Решено ... Добавил ети строки , так что если не нашли , то шаг назад с reqTransSettled . Действует хорошо ...

Спасибо ! Римантас
За это сообщение автора поблагодарили: wojzeh (1).
Старый 18.01.2007, 10:37   #13  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Vals Посмотреть сообщение
А в нижней части "Использование" не то что нужно отображает?
В нижней части показывает только один раз продажный заказ - на конечный продукт . А на всех остальных - последовательность запланированных заказов . И проблема здесь в том , как филтрировать и найти кучу информации для конкретного заказа продажи . Так что для етого в ReqPO полей маловато ... Решение EVGL - очень хорошее .

С уважением , Римантас
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как правильно создать в коде X++ новый planned order (ReqPO, ReqTrans) rkorchagin DAX: Программирование 5 02.06.2016 18:00
Планирование номенклатуры с типом Основное средство AlexeyBP DAX: Функционал 19 29.01.2009 07:42
Отличия в строках ReqPO, почему одна строка появляется в форме а другая нет (Master Planning, Planned Orders) rkorchagin DAX: Программирование 8 21.02.2007 16:27
Планирование производственных операций Vikp DAX: Функционал 4 10.01.2006 15:43
Заказ -> Сводное планирование -> Изменение даты заказа ARRTEMka DAX: Функционал 8 14.02.2005 14:46

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

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

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