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) сделаны немного подругому, но с темеже проблемами.
Старый 08.12.2006, 19:42   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Проверки на ГТД нет потому, что никто не задумывался.

По своему смыслу серийный номер - самая дробная складская аналитика. При активизации известных параметров система выделет по одному сер. номеру на штуку товара, т.е. серийный номер становится "неделимым". На нашем проекте серийный номер позволяет однозначно определить все остальные аналитики.
 

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

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

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

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