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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2005, 15:36   #1  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Кэширование в InventDimPhys
Добрый день!

Столкнулся с такой ситуацией : отчет Физ. наличие по складам (InventDimPhys) работает корректно через раз, т.е. допустим если первый раз по выбранным критериям он отработал корректно, то после этого, если поменять критерии, отчет формируется точно такой же как и предыдущий.
Возникает подозрение что запрос кэшируется! Только не пойму где?
Старый 19.09.2005, 17:00   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Нет запрос не кэшируется. Каждый раз заново отрабатывается на сервере.

О каких критериях идет речь?
__________________
Axapta v.3.0 sp5 kr2
Старый 19.09.2005, 17:17   #3  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Цитата:
Изначально опубликовано AndyD
Нет запрос не кэшируется. Каждый раз заново отрабатывается на сервере.
Возможно неправильно выразился! Извиняюсь!

В методе newQueryInventSum таблицы InventDim

PHP код:
    if (query.dataSourceTable(tableNum(InventDim)))
    {
        
qBSDim      query.dataSourceTable(tableNum(InventDim));
        
doFindRange true;
    } 
ко мне (при инициализации) идет запрос со старыми критериями (склад + поле из моей таблицы)

PHP код:
SELECT FROM InventDim WHERE ((InventLocationId 01ЗелКомс)) 

JOIN FROM InventSum GROUP BY InventSum.ItemId ASC 

EXISTS JOIN 
FROM InventTable WHERE InventSum.ItemId InventTable.ItemId AND ((NOT (ItemType Услуга))) 

EXISTS JOIN FROM InventItemRangeDenorm WHERE InventTable.ItemId InventItemRangeDenorm.ItemId AND ((ItemRangeId КАУ_042)) 
Далее после того как я нажал кнопку OK в диалоге отчета (допусти ничего не меняя)

PHP код:
SELECT FROM InventDim WHERE ((InventLocationId 01ЗелКомс)) 

JOIN FROM InventSum GROUP BY InventSum.ItemId ASC 

EXISTS JOIN 
FROM InventTable WHERE InventSum.ItemId InventTable.ItemId AND ((NOT (ItemType Услуга))) 

EXISTS JOIN FROM InventItemRangeDenorm WHERE InventTable.ItemId InventItemRangeDenorm.ItemId AND ((ItemRangeId КАУ_042)) 

EXISTS JOIN FROM InventItemRangeDenorm WHERE InventTable.ItemId InventItemRangeDenorm.ItemId AND ((ItemRangeId КАУ_042)) 
Вижу что последняя строчка написана дважды. Если вместо КАУ_042 в диалоге отчета выбрать другое значение, то оно отобразится вместо последнего КАУ_042.

Непойму как убрать дублирование..
Старый 19.09.2005, 17:31   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А можно узнать, что это за объект такой InventItemRangeDenorm?
__________________
Axapta v.3.0 sp5 kr2
Старый 19.09.2005, 17:35   #5  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
InventItemRangeDenorm -- это таблца соответствия между уровнями классификатора и кодом номенклатуры. (Одной записи из InventTable соответствует несколько из InventItemRangeDenorm)
Старый 19.09.2005, 17:41   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Как я понял - это ваша таблица. А как вы добавляете ее в запрос? В коде или ч/з AOT?
__________________
Axapta v.3.0 sp5 kr2
Старый 19.09.2005, 17:48   #7  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Да, таблица моя!

Добавляю в диалоге отчета, кнопка Выбор, далее на таблице Картотека номенклатуры правой клавишей и выбираю свою таблицу.

Далее внизу формочки с критериями запроса создаю строку для моей таблицы, выбираю таблицу, поле, присваиваю значение. OK.

И поле отображается в форме диалога отчета.
Старый 19.09.2005, 18:08   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Значения выбора сохраняются в SysLastValue для отчета InventDimPhys
__________________
Axapta v.3.0 sp5 kr2
Старый 19.09.2005, 18:13   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Кстати, в нормальном состоянии критерии выбора формируются заново, так что вы, скорее всего, добавляете новый вместо того, чтобы использовать существующий
__________________
Axapta v.3.0 sp5 kr2
Старый 20.09.2005, 09:53   #10  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Цитата:
Изначально опубликовано AndyD
Кстати, в нормальном состоянии критерии выбора формируются заново, так что вы, скорее всего, добавляете новый вместо того, чтобы использовать существующий
Спасибо Andy!

Вопрос как раз и сводится к тому -- почему когда я меняю значение критерия, оно не обновляется в запросе, а добавляется новое? (Со всеми вытекающими)

Причем я не создаю новую строчку с критерием, а просто меняю значение в существующей. Одним из решением этой проблемы я видел в отмене кэширования, другой -- в том чтобы разобраться почему критерий добавляется а не обновляется.
Старый 20.09.2005, 10:08   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Хм.. Странно. У меня при изменении критерия он не добавляется, а изменяет существующее значение в запросе.

Может быть какие-то модификации в SysQuery или SysQueryForm?
__________________
Axapta v.3.0 sp5 kr2
Старый 20.09.2005, 10:12   #12  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Модификаций в SysQuery или SysQueryForm нет!

Причем если смотреть как ведет себя поле 'склад', то видно что все корректно -- поменяли в критерии -- поменялся в запросе. И совсем другое дело с моей таблицей.
Старый 20.09.2005, 10:29   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Я бы предложил для начала в классе SysQuery метод unpackDataSource() посмотреть как формируется запрос после подтверждения изменения.

Если там все чисто, то надо искать, что происходит при закрытии диалога
__________________
Axapta v.3.0 sp5 kr2
Старый 20.09.2005, 10:32   #14  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Спасибо! О результатах напишу!
Старый 20.09.2005, 13:06   #15  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
SysQuery.unpackDataSource

PHP код:
childDataSourcePack mapIterator.value();

if (
conPeek(childDataSourcePack#packTableIdPos) == conPeek(pack, #packTableIdPos) 
&& conPeek(childDataSourcePack#packLinkPos)    == conPeek(pack, #packLinkPos))
{
    
childDataSource _query.dataSourceUniqueId(mapIterator.key());
    
childDataSource.enabled(true);
    break;
}
mapIterator.next(); 
Здесь-то и вспоминается старый критерий (вызов после нажатия кнопки OK в диалоге критериев отчета)
Старый 20.09.2005, 13:52   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Нет не здесь. Дальше идет такой вызов
PHP код:
                if (childDataSource)
                {
                    
SysQuery::unpackDataSource(_querypackchildDataSource_origRangeMap_childDataSourceMaptrue);
                } 
В этом методе происходит очистка и загрузка рэнджа выбранным вами новым значением.
__________________
Axapta v.3.0 sp5 kr2
Старый 20.09.2005, 14:53   #17  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Рекурсия однако!
Приятно от того что начал понимать как формируется запрос!
Старый 20.09.2005, 15:13   #18  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Особенно если учесть, что кроме рекурсии там пара прямых вызовов, то разбираться становится еще веселее
__________________
Axapta v.3.0 sp5 kr2
Старый 21.09.2005, 09:21   #19  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Как дела? Удалось выяснить причину?
__________________
Axapta v.3.0 sp5 kr2
Старый 21.09.2005, 09:34   #20  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Как с этим жить и бороться

1. Существующий запрос срабатывает корректно на второй раз (потому как получается два абсолютно одинаковых условия в запросе)

2. Подумываю о реализации запроса через InventItemRangeRef (связь с классификатором по RecId)

Предположения о причинах (восстановления старого значения в запросе):

3. два запроса (с закешированным значением и новым значением) образуются из-за того что между Картотекой номенклатуры (InventTable) и моей таблицей соответствия (InventItemRabgeDenorm) два поля для связи (ItemId и InventItemRangeId)

4. Фича такая

Спасибо за содействие!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Кэширование курсов валют Tony Green DAX: Программирование 8 09.02.2007 10:02
кэширование display метода macklakov DAX: Программирование 6 03.12.2005 14:58
Ширина поля в InventDimPhys DreamCreator DAX: Программирование 2 31.10.2005 12:48
Кэширование критериев отчетов DreamCreator DAX: Программирование 2 18.10.2005 16:26
Как попороть автоматическое кэширование PriceDiscTable? NEO DAX: Функционал 2 27.01.2004 14:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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