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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.10.2013, 15:33   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Pазширение ReqCalc ( Ax 2009 )
Здраствуйте,

Столкнулься стакой проблемой. Нужные ещё 3 параметра мне в ReqCalc классе . Добавил я их :
SalesId vtrmSales;
ItemId vtrmItem;
InventTransId vtrmSalesTrans;

Есть три метода которые возвращает значения етих переменных . В классах ReqCalcExplodeSales и ReqCalcExplodeProd в методах newSalesIdPrompt() и newProdIdPrompt() добавил первоначальные значения . Все работает . Суть етого разширения - заполнить в таблице ReqPo новые поля - mainSalesId, mainSalesItemId и mainSalesTransId. Чтобы полегче потом разобраться , групировать и т.д. инфо по заказам продаж.

Но вот зашёл менеджер в запланиров.заказах и решил сделать групировку нескольких производ.заказов . После диалога вылезает ошибка, что в классе в методе initParmDefault несовпадает значения .

public void initParmDefault()
{
deleteCoverage = NoYes::Yes;
}

Етот метод вызван из метода newReqTrans :

server public static ReqCalcExplode newReqTrans(
ReqTrans _reqTrans,
ReqPlanData _reqPlanData // May be NULl
)
{
ReqCalcExplode reqCalcExplode;
;
reqCalcExplode = ReqCalcExplode::construct(_reqTrans.RefType);

reqCalcExplode.getLast(); ПРОБЛЕМА Здесь ...
...
return reqCalcExplode;
}

Как понимаю - ето связано с getLast и CurrentList ... Но как ето перебить - пока непонимаю ... Помогите ...

С уважением , Римантас
Старый 21.10.2013, 15:43   #2  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Сначала сделайте инкрементную компиляцию класса.
Попробуйте запустить.
Если проблемы останутся, то в заголовке класса найдите строку вида
X++:
#DEFINE.CurrentVersion(10)
Увеличьте значение текущей версии на 1.

Последний раз редактировалось Ace of Database; 21.10.2013 в 15:47.
Старый 21.10.2013, 21:11   #3  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Сначала сделайте инкрементную компиляцию класса.
Попробуйте запустить.
Если проблемы останутся, то в заголовке класса найдите строку вида
X++:
#DEFINE.CurrentVersion(10)
Увеличьте значение текущей версии на 1.
Непомогло с номерами версии ... . Выпробывал всякие варянты ... Добавлял и к CurrentList ... Ни как неподдаеться . "Инкрементная компиляция" - как оно делаеться на Ах2009 ? Я вижу только команду "Компилировать" ... еще вопрос - а именно в каком месте повысить версию ? В ReqCalc есть два места :

X++:
    #DEFINE.CurrentVersion(12)
    #LOCALMACRO.CurrentList
        reqPlanId,
   ...
    #ENDMACRO

    #DEFINE.CurrentThreadVersion(2)
    #LOCALMACRO.CurrentThreadList
        reqPlanId,
        processId,
   ...
    #ENDMACRO
В ReqCalcExplode повысить также ?

Последний раз редактировалось Rimantas; 21.10.2013 в 21:31.
Старый 22.10.2013, 04:49   #4  
jasper is offline
jasper
Участник
 
13 / 11 (1) +
Регистрация: 22.10.2004
Адрес: Владивосток
Цитата:
"Инкрементная компиляция" - как оно делаеться на Ах2009 ?
на классе вызоваете контекстное меню
в нем подменю "Надстройки" пункт "Инкрементная компиляция"

Увеличивать CurrentVersion или CurrentThreadVersion
в том месте где изменяли соответсвующий список
CurrentList или CurrentThreadVersion
__________________
Нет ничего сложного есть простое и неправильное
Старый 22.10.2013, 08:43   #5  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
CurrentThreadVersion и currentThreadList используются только в многопоточной версии сводного планирования, запускаемой через периодические операции в модуле MRP и срабатывающей только если сводное запущено в пакетном режиме. Соответственно - на разертывание (explosion) они не влияют.
А что у вас за бизнес-задача кстати ? Мне просто кажется что сам выбранный подход изначально неверный и можно что-то поизящнее придумать...

Последний раз редактировалось fed; 22.10.2013 в 08:53.
Старый 22.10.2013, 11:01   #6  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от fed Посмотреть сообщение
CurrentThreadVersion и currentThreadList используются только в многопоточной версии сводного планирования, запускаемой через периодические операции в модуле MRP и срабатывающей только если сводное запущено в пакетном режиме. Соответственно - на разертывание (explosion) они не влияют.
А что у вас за бизнес-задача кстати ? Мне просто кажется что сам выбранный подход изначально неверный и можно что-то поизящнее придумать...
Вплоне могу согласиться ... . Может быть и мой подход неверный ...

Есть задачя пополнить таблицу ProdTable 3 данными - номер заказа продажа , какой товар из SalesLine и InventTransId из SalesLine . InventTransId - будет спрятан . Я знаю , что такое есть InventRefId и InventRefTransId . Но оно есть только при первой строке , которое соотвествует SalesLine . Но вот - надо что все дочерные субпродкты в производстве от главного товара из SalesLine тоже имели связь с продажным заказом . Ходить по развертываниям - неудобно . А если ещё надо отфилтрировать строки продаж.заказа ? Производ.заказы делаеться из запланированных строк . Так я сперва заполняю таблицу ReqPO етими данными , потом после потвердения все ето переноситься в производ.заказ . Как описал раньше - ето работает . Проблема возникает в других ветках ReqCalc ...

Если есть какой нибудь инной способ сделать такое - буду благодарнный за подсказку .
Старый 22.10.2013, 11:36   #7  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Вплоне могу согласиться ... . Может быть и мой подход неверный ...

Есть задачя пополнить таблицу ProdTable 3 данными - номер заказа продажа , какой товар из SalesLine и InventTransId из SalesLine . InventTransId - будет спрятан . Я знаю , что такое есть InventRefId и InventRefTransId . Но оно есть только при первой строке , которое соотвествует SalesLine . Но вот - надо что все дочерные субпродкты в производстве от главного товара из SalesLine тоже имели связь с продажным заказом . Ходить по развертываниям - неудобно . А если ещё надо отфилтрировать строки продаж.заказа ? Производ.заказы делаеться из запланированных строк . Так я сперва заполняю таблицу ReqPO етими данными , потом после потвердения все ето переноситься в производ.заказ . Как описал раньше - ето работает . Проблема возникает в других ветках ReqCalc ...

Если есть какой нибудь инной способ сделать такое - буду благодарнный за подсказку .
Кажеться такое местечко я нашёл ... :-) . Класс ProdTableType метод insert() . Достаточно заполнять мои поля из pordTableparent или из salesLine ... А всегда новая запись будет первыми из salesLine ? Как то ненадежно мне кажетьса ...
Старый 22.10.2013, 11:47   #8  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
В общем - полное решение задачи излогать долго, но если у вас уровень производства только один и производственный заказ всегда покрывает заказ напрямую (без промежуточных переносов и тп), то можно найти запись относящуюся к текущему производственному заказу в reqTrans (смотрите relation между reqTrans и prodTable), потом найти первый покрытый reqTrans по salesLine (reqTransCov связывает покрывающую и покрываемую записи в reqTrans. ReqTransCov.ReceiptRecId смотрит на запись по производственному заказу, reqTransCov.IssueRecId смотрит на запись по заказу на продажу) Потом из найденной записи по заказу на продажу в reqTrans можно перейти на саму строку заказа (да вообще-то и в самой ReqTrans все что нужно уже есть).

Но все равно - с бизнесовой точки зрения - задача не правильная Производственный заказ может покрывать несколько заказв на продажу, между призводством и продажей может стоять перенос (и не один), могут существовать вложенные производства (в которые по этой логике тоже надо бы ссылку на заказ на продажу тянуть) и тп. Правильнее было бы использовать форму развертывания потребности из производственного заказа. Да - пользователям придется давить на лишние клавиши, но зато результат всегда будет правильный - во всех случаях, а не только в том примитивном, который я тут только что рассмотрел.
За это сообщение автора поблагодарили: Rimantas (1).
Старый 22.10.2013, 16:02   #9  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от fed Посмотреть сообщение
В общем - полное решение задачи излогать долго, но если у вас уровень производства только один и производственный заказ всегда покрывает заказ напрямую (без промежуточных переносов и тп), то можно найти запись относящуюся к текущему производственному заказу в reqTrans (смотрите relation между reqTrans и prodTable), потом найти первый покрытый reqTrans по salesLine (reqTransCov связывает покрывающую и покрываемую записи в reqTrans. ReqTransCov.ReceiptRecId смотрит на запись по производственному заказу, reqTransCov.IssueRecId смотрит на запись по заказу на продажу) Потом из найденной записи по заказу на продажу в reqTrans можно перейти на саму строку заказа (да вообще-то и в самой ReqTrans все что нужно уже есть).

Но все равно - с бизнесовой точки зрения - задача не правильная Производственный заказ может покрывать несколько заказв на продажу, между призводством и продажей может стоять перенос (и не один), могут существовать вложенные производства (в которые по этой логике тоже надо бы ссылку на заказ на продажу тянуть) и тп. Правильнее было бы использовать форму развертывания потребности из производственного заказа. Да - пользователям придется давить на лишние клавиши, но зато результат всегда будет правильный - во всех случаях, а не только в том примитивном, который я тут только что рассмотрел.
Спасибо вам Фед за ето обьяснение - оно поможет мне . Думаю что некий вид оттыскивания и буду пробывать ... А так вы правы - с производ.заказами бывает всякого . 99 % у нас там все на том же самом уровне , а остающимся 1 % будем работать ещё ...
Теги
сводное планирование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Walkthrough & Tutorial Summary Blog bot DAX Blogs 1 09.09.2013 09:11
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11
axinthefield: Dynamics AX Event IDs Blog bot DAX Blogs 0 01.03.2011 22:11
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05

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

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

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