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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2006, 19:21   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Разбор findSum
Метод findSum формирует запрос для получения суммарных остатков по заданной номенклатуре с фильтрацией по складским аналитикам.
Причем основной смысл метода - попытка оптимизации.
Предлагаю обсудить корректность данного кода и его подводные камни (с точки зрения производительности)
PHP код:
static InventSum findSum(
    
ItemId              _itemId,        // Код номенклатуры
    
InventDim           _inventDimCriteria,    // Список критериев отбора (фильтр по складским аналитикам)
    
InventDimParm       _inventDimParm,        // Флажки - какие из критериев использовать
    
InventSumFields     _sumFields  InventSumFields::All // Сумма каких величин нас интересует
    
)
{
    
InventSum   inventSum;
    
InventDim   inventDim;
    ;

    if (! 
_inventDimParm.isFlagSelective()) // (1) Не используются ли высокоселективные критерии (палета, партия, серийный номер)
    
{
    
// Запросы вида InventSum по индексу ClosedItemDimIdx - InventDim по индексу dimidIdx
    
...
    }
    else
    if (
_inventDimParm.inventSerialIdFlag && _inventDimCriteria.inventSerialId// (2) Фильтруем по серийному номеру
    
{
    
// Запросы вида InventDim по индексу serialIdIdx - InventSum ItemDimIdx
    
...
    }
    else
    {
    
// Запросы вида InventSum-InventDim без указания индекса
    
...
    }

    return 
inventSum;

(1) В общем случаи, я согласен с таким подходом (выборка всех остатков по номенклатуре будет меньше, чем выборка всех аналитик по складу). Однако, мне не понятно, почему здесь нет проверки на ГТД. И еще не разу не видел, чтобы кто-нибудь добавлял проверку по "своим" аналитикам.
(2) Тоже согласен с таким подходом. Только, чем так выделяется серийный номер, а не партия, палета или гтд?
Кроме того, если в системе есть "универсальный" номер, на который сваливается все непонятное, то система попадет в ступор.

P.S. Еще есть метод InventSum::newQuery, в котором формируется похожий запрос, но только через Query (точнее интересен queryAddHint). Там и (1) и (2) сделаны немного подругому, но с темеже проблемами.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Разбор строк Zoe DAX: Программирование 4 04.05.2008 09:08
Оптимизацизя запроса в findSum или ...? pdojn DAX: Программирование 14 24.11.2006 10:58

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

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

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