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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 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, время: 03:31.