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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.03.2007, 09:28   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
SalesPrices и PriceDiscTable
Здраствуйте !

Дело с договорными ценами , которые введется в PriceDiscTablе . Потом введется заказ продажи и указываеться ID - PriceGroupId в SalesTable . Никак немогу перехватить в каком месте изменяет цены в SalesLine salesPrice . Дело в том , что я добавил несколько полей в PriceDiscTable из за своих нужд предприятия чтобы ещё по своим требованиям отыскать цены . Надо перехватить замену PriceGroupId и добавить свои требования ...

Спасибо заранее ! С уважением , Римантас
Старый 29.03.2007, 09:54   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Смотри Maps SalesPurchLine, в нем метод setPriceAgreement. Сам поиск идет в классе PriceDisc
Старый 29.03.2007, 11:50   #3  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Смотри Maps SalesPurchLine, в нем метод setPriceAgreement. Сам поиск идет в классе PriceDisc
Спасибо за ответ ! Да , там в PriceDisc классе есть нужный метод - findPriceAgreement . Осталось одна проблема - как в етот метод получить IventDimID от SalesLine ? Теперь через debug вижу , что _inventDimId идёт пустой ( "Axapta" ) , то есть он от PriceDiscTablе . Мне нужен для поравнения InventDimId от SalesLinе . Может ещё подскажете как ето сделать ?

С уважением , Римантас
Старый 29.03.2007, 11:56   #4  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
В смысле как получить? Он же есть в самом мапе SalesPurchLine это раз. Передается InventDim в качестве параметра - это два.
Старый 29.03.2007, 12:14   #5  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
В смысле как получить? Он же есть в самом мапе SalesPurchLine это раз. Передается InventDim в качестве параметра - это два.
Простите , но непонял ... Я здесь пробую и точно знаю что на моей строке SalesLine есть заполненный нужный InventDim , но тогда етот SalesPurchLine передаёт не тот inventDimid - так выходить ...

Мне надо поравнивать размеры , только от них зависят цена .

Код:
                   
 nSize = ConfigTable::find( itemRelation, InventDim::find( _inventDimId, false ).configId, false ).CIRFASSizeValue;
 if ( nSize != 0 )
   ...
Здесь внутри findPriceAgreement(PriceGroupId _priceGroupId, InventDimId _inventDimId) . Поетому выходить , что _inventDimId здесь есть от PriceDiscTable - ето поле пустое здесь . Ну будем искать где спрячаться InventDimId от SalesLinе ...

С уважением , Римантас
Старый 29.03.2007, 12:36   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Посмотрите метод \Classes\PriceDisc\findPrice

В нем аналитика подбирается в зависимости от активности аналитики (включенности).
Возможно просто у вас они выключены?
Старый 29.03.2007, 12:49   #7  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Посмотрите метод \Classes\PriceDisc\findPrice

В нем аналитика подбирается в зависимости от активности аналитики (включенности).
Возможно просто у вас они выключены?
Простите - ето я ошибся ! . Поправил по нужному findPriceAgreement() - _inventDimId там правильный . Всё хорошо !

Последний раз редактировалось Rimantas; 29.03.2007 в 16:56.
Старый 29.03.2007, 16:57   #8  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Простите - ето я ошибся ! . Поправил по нужному findPriceAgreement() - _inventDimId там правильный . Всё хорошо !
Паблагодарил и нашёл ещё одну проблемку ... . С PriceDisc классом всё хорошо действует если менять PriceGroupId в SalesTable . Но вот попробывал я поменять только InvetDimId ( конфигурацию ) в SalesLine . Обращаеться на те же сами методы как и редактируя PriceGroupId , но ItemId совсем не такой , не говоря уже обо InventDim'е .. . Признаюсь что пока нету у меня опыта с Maps обьектами , пока здесь я их непонимаю . По идее меняя InventDimId в SalesLine должен к PriceDisc класс поступит данные правильные - ItemId и InvetDimId . Так выходит , что SalesPurchLine блудит где-то ... Как ето можно решить ?

С уважением , Римантас
Старый 29.03.2007, 17:00   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Честно говоря, читаю ваши сообщения, и как сквозь чащи пробираюсь. Почти ничего непонятно

А по поводу ваших проблем с классами.
Вы явно что-то не договариваете здесь
Как может в класс PriceDisc передаться неверная номенклатура, если метод этот вызывается из МАПа SalesPurchLine, который имеет маппинг на код номенклатуры для заказа?
Ответ: никак, если до этого кто-то что-то не испортил. А вот это вы, видимо, как раз и не договорили.
Так что ищите в пред. модификациях, кто чего трогал.
Старый 29.03.2007, 17:33   #10  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Честно говоря, читаю ваши сообщения, и как сквозь чащи пробираюсь. Почти ничего непонятно

А по поводу ваших проблем с классами.
Вы явно что-то не договариваете здесь
Как может в класс PriceDisc передаться неверная номенклатура, если метод этот вызывается из МАПа SalesPurchLine, который имеет маппинг на код номенклатуры для заказа?
Ответ: никак, если до этого кто-то что-то не испортил. А вот это вы, видимо, как раз и не договорили.
Так что ищите в пред. модификациях, кто чего трогал.
Наверное вы правый ... . Вот мои замены в PriceDisc классе :

Код:
boolean  findPriceAgreement(PriceGroupId    _priceGroupId,  InventDimId     _inventDimId)
{
    PriceDiscTable      priceDiscTable;

    PriceType           relation        = this.priceRelation();
    boolean             priceExist      = false;

    TableGroupAll       itemCode;
    TableGroupAll       accountCode;

    ItemRelation        itemRelation;
    CustVendRel         accountRelation;

    Integer             idx;
    Qty                 absQty          = abs(qty);

    PriceDiscTable    priceTbl;
    CIRFASSizeValue   nSize;
    Boolean           lSize, lSize2;
    InventDimId       nullInvDim = "Axapta";
    ;

    this.resetPrice();

    if (! itemId)
        return priceExist;

    idx = 0;

    while (idx < 9)
    {
        itemCode        = idx mod 3;
        accountCode     = idx div 3;

        itemRelation    = itemCode == 0 ? itemId : '';
        accountRelation = this.accountRelation(accountCode, _priceGroupId);

        if (PriceDiscTable::activation(relation, accountCode, itemCode, priceParameters))
        {
            if (PriceDisc::validateRelation(accountCode, accountRelation)  &&
                PriceDisc::validateRelation(itemCode,    itemRelation   ))
            {

               lSize = false;
               nSize = 0;
               if ( _priceGroupId && _inventDimId )
               {
                   nSize = ConfigTable::find( itemRelation, InventDim::find( _inventDimId, false ).configId, false ).CIRFASSizeValue;
                   if ( nSize != 0 )
                   {
                      select firstonly priceTbl
                      index hint ItemDimIdx
                      where priceTbl.ItemRelation == itemRelation &&
                      priceTbl.AccountRelation    == _priceGroupId &&
                      priceTbl.UTSizeValue        != 0;
                      if ( priceTbl )
                         lSize = true;
                   }
               }

              // добавил немножко кода для обнаруживания размера и его величины ...
  
              while select priceDiscTable
                    index PriceDiscIdx  // equals order by QuantityAmount
                    where priceDiscTable.relation           == relation                                                 &&
                          priceDiscTable.itemCode           == itemCode                                                 &&
                          priceDiscTable.itemRelation       == itemRelation                                             &&
                          priceDiscTable.accountCode        == accountCode                                              &&
                          priceDiscTable.accountRelation    == accountRelation                                          &&
                          priceDiscTable.unitId             == unitID                                                   &&
                          priceDiscTable.currency           == currency                                                 && // priceDiscTable.InventDimId == _inventDimId &&
                         
   // все цены номенклатуры независит от конфигурации , только несколько номенклатур - от размера 
(discDate                          >= priceDiscTable.fromDate  || ! priceDiscTable.fromDate)   &&
                         (discDate                          <= priceDiscTable.toDate    || ! priceDiscTable.toDate)
                {
                    lSize2 = ( lSize ? false : true );
                    if ( _inventDimId != nullInvDim && _inventDimId &&
                       ( _inventDimId == priceDiscTable.InventDimId || priceDiscTable.InventDimId == "" || priceDiscTable.InventDimId == nullInvDim ) )
                    {
                    
                  // вот здесь поменял проверение конфигурации 

                  if (priceDiscTable.quantityAmount <= absQty)
                    {
                        if (priceDiscTable.price() >= 0 || priceDiscTable.markup())
                        {
                            if (priceDiscTable.calcPriceAmount(absQty) < this.calcPriceAmount(absQty) ||
                                ! priceExist)
                            {
                                if ( nSize != 0 && priceDiscTable.UTSizeValue &&
                                   ( ( priceDiscTable.UTSizeDirect == UTPriceDiff::UTLess && nSize <= priceDiscTable.UTSizeValue ) ||
                                     ( priceDiscTable.UTSizeDirect == UTPriceDiff::UTMore && nSize  > priceDiscTable.UTSizeValue ) ) )
                                   lSize2 = true;

                             // если есть размер - проверяем цену от размера ...
   
                             if ( lSize2 )
                                {
                                   priceUnit               = priceDiscTable.priceUnit();
                                   price                   = priceDiscTable.price();
                                   markup                  = priceDiscTable.markup();
                                   deliveryDays            = priceDiscTable.deliveryTime;
                                   actualPriceTable        = priceDiscTable.data();
                                   calendarDays            = priceDiscTable.CalendarDays;
                                   priceExist              = true;
                                }
                            }
                        }
                    }
                    }

                    if (! priceDiscTable.searchAgain)
                    {
                        idx = 9;
                        break;
                    }
                }
            }
        }

        idx += 1;
    }

    return priceExist;
}
Мои поправки - в красном
Больше я нигде не менял . В Maps'ах совсем ничего не менял . Когда смотрю через дебуг , то поменяв PriceGroupId в SalesTable , всё хорошо . Ну там одна формичка запроса вскачивает , обновлят ли цены и даты . Может такого нехватает , когда меняю конфигурацию в SalesLine ? ( когда написал , пришла в голову такая идея - проверю ... ) . Но вот когда меняю конфигурацию в SalesLine , то в дебуге вижу совсем не такие данные , как SalesLinе ... Я и сам етого непонимаю ...

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Условия в Query AXnovice DAX: Программирование 18 25.07.2007 11:48
Ошибка в формате числа. 36AC DAX: Программирование 7 19.10.2006 10:04
Виды Relations в Axapta rohlenko DAX: Программирование 9 01.09.2004 14:21
Как попороть автоматическое кэширование PriceDiscTable? NEO DAX: Функционал 2 27.01.2004 14:13
Как автоматически заполнить поле InventDimId в таблице PriceDiscTable при импорте? Mike12345 DAX: Функционал 6 06.08.2003 11:29

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

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

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