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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.01.2006, 14:56   #1  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Остатки на дату.
Как получить остаток по складу на опр дату, так чтобы при открытии формы не заснуть должидаясь пока она отработает.

Использую класс InventSumDateValueReportDim... очень медленно.
Старый 30.01.2006, 15:00   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
http://axapta.mazzy.ru/lib/inventsumdate/

InventSumDateValueReportDim считает очень много чего.
Какие именно остатки вам нужны?
__________________
полезное на axForum, github, vk, coub.
Старый 30.01.2006, 15:42   #3  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
нужен физ. остаток на дату по данномк складу , по данной номенклатуре.
Старый 30.01.2006, 15:45   #4  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
ОЛАП рассматриваете?
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 30.01.2006, 15:52   #5  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Цитата:
Сообщение от Recoilme
ОЛАП рассматриваете?
если к нему можно обратится программно , то да.

Не подскажете ?
Старый 30.01.2006, 16:06   #6  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,230 / 975 (37) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Bars
если к нему можно обратится программно , то да.

Не подскажете ?
Если у вас практикуются проводки задним числом, то остатки придется получать по проводкам. В этом случае, можно вылизать запрос вручную.
Если проводок задним числом не бывает, то можно просто сделать свою отчетную таблицу, с заранее рассчитанными остатками на все даты. Это проще, чем ОЛАП настраивать, а по сути, тоже самое.
__________________
Isn't it nice when things just work?
Старый 31.01.2006, 09:46   #7  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от Bars
если к нему можно обратится программно , то да.

Не подскажете ?
тогда ОЛАП. НАФИГА К ОБОРОТКЕ ОБРАЩАТЬСЯ ПРОГРАММНО????
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 30.01.2006, 16:16   #8  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
физ остаток на дату:

select sum(Qty) from inventTrans
where
inventTrans.ItemId == "MyItem" &&
inventTrans.DatePhysical <= dateTo &&
inventTrans.StatusIssue <= StatusIssue:educted &&
inventTrans.StatusReceipt<= StatusReceipt::Receipt
join inventDim
where inventDim.InventDimId == inventTrans.InventDimId &&
inventDim.InventLocationId == "MyLocation";
За это сообщение автора поблагодарили: belugin (3).
Старый 31.01.2006, 01:03   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от UNRW
физ остаток на дату:

select sum(Qty) from inventTrans
where
inventTrans.ItemId == "MyItem" &&
inventTrans.DatePhysical <= dateTo &&
inventTrans.StatusIssue <= StatusIssue:educted &&
inventTrans.StatusReceipt<= StatusReceipt::Receipt
join inventDim
where inventDim.InventDimId == inventTrans.InventDimId &&
inventDim.InventLocationId == "MyLocation";
НЕТ! НЕТ! НЕТ!!! И еще раз НЕТ!!!
НИКОГДА так не делайте.

Этот код работат боль-мень приемлимо только на игрушечных данных малого объема!
Стоит вам только приблизиться к нормальному рабочему объему - ваша база умрет.

Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2006, 07:45   #10  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
Цитата:
Сообщение от mazzy
НЕТ! НЕТ! НЕТ!!! И еще раз НЕТ!!!
НИКОГДА так не делайте.

Этот код работат боль-мень приемлимо только на игрушечных данных малого объема!
Стоит вам только приблизиться к нормальному рабочему объему - ваша база умрет.

Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/
Прочитал, понял, спасибо).

Все равно медленно.
Старый 31.01.2006, 09:32   #11  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от Bars
Прочитал, понял, спасибо).

Все равно медленно.
Может опишешь задачу полностью? Другими словами - на фига тебе остатки на дату в форме, да ещё и быстро ???
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 31.01.2006, 09:52   #12  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
Цитата:
Сообщение от mazzy
Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/
В этой статье рассмотрен механизм работы стандартных классов, что наверное тоже не бесполезно. Но эти классы ещё можно как-то использовать для расчета остатков на дату по одной номенклатуре. Но для 10000 позиций это уже не будет работает даже для "игрушечных" данных, созданных за несколько месяцев.
Наиболее правильным вариантом является создание отдельной OLAP-базы, в которую с ежедневной периодичностью переносятся нужные данные из axapta. По этой базе уже и строятся отчеты по остаткам на дату. При этом понятно, что будет запаздывание, поэтому текущие остатки нужно брать из Axapta.
Однако в качестве промежуточного решения я бы всё же использовал запрос "с начала времен". Его план выполнения по-крайней мере можно оптимизировать средствами СУБД (Oracle)...
За это сообщение автора поблагодарили: Recoilme (3).
Старый 31.01.2006, 13:20   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,689 / 1192 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy
НЕТ! НЕТ! НЕТ!!! И еще раз НЕТ!!!
НИКОГДА так не делайте.

Этот код работат боль-мень приемлимо только на игрушечных данных малого объема!
Стоит вам только приблизиться к нормальному рабочему объему - ваша база умрет.

Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/
Вообще-то, даже чисто логически, вывод будет прямо противополжным. Одна групповая команда по всякому быстрее работает чем куча одиночных команд в цикле. Но это все теория. Пару месяцев назад я делал практическую проверку

30 тысяч артикулов. Рассчитать остаток для каждого артикула на начало мая 2005 года по 2 фиксированным складам (InventLocationId). Это около 2 миллионов складских проводок

InventSumDatePhysicalDim:: onHandQty() - отработал примерно за 50 минут
Прямой запрос в Query Analyzer по схеме: InventSum - SUM(InventTrans) выполнился за 2 минуты (т.е. остаток на сегодня минус все складские проводки до интересующей даты)

Даже с учетом того, что при переносе запроса в синтаксис AXAPTA он слегка "притормозит", все равно ускорение получаю в разы

Конечно, это несколько не то, что предложил UNRW. Я иду не "с начала времен", а от текущей даты назад. Но, по большому счету, на вывод это не влияет.

Если речь идет о расчете остатка для нескольких артикулов, можно использовать классы семейства InventSumDate. Если же речь идет о массовом расчете остатков по большому количеству артикулов, то следует искать обходные пути. Классы для этого слишком медленные.
Старый 31.01.2006, 13:26   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Владимир Максимов
Вообще-то, даже чисто логически, вывод будет прямо противополжным. Одна групповая команда по всякому быстрее работает чем куча одиночных команд в цикле.
1. Вы почему то обсуждаете конкретную реализацию, а не принцип. Принцип - считаем проводки от конца, а не от начала времен.
2. Вы забываете об аналитике. Аналитика у каждой номенклатуры - разная. Вообще говоря, мало кто хочет получить остатки на произвольную дату. Запрос UNRW является неправильным, поскольку не учитывает параметры в группе аналитики. Но я это дело пропустил, поскольку посчитал неважным.

ОДНАКО: если вы говорите о групповой обработке, то расскажите как вы обработаете аналитике корректно в групповой обработке?

Еще раз: уважаемые, подумайте.
__________________
полезное на axForum, github, vk, coub.
Старый 31.01.2006, 14:40   #15  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,689 / 1192 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от mazzy
1. Вы почему то обсуждаете конкретную реализацию, а не принцип. Принцип - считаем проводки от конца, а не от начала времен.
Как минимум, спорный.

Если структура базы корректна, то, должно быть все-равно идем с начала в конец или с конца в начало. Результат должен быть одинаковый. По крайней мере в штуках.

Если же рассматривается вопрос, что "с начала времен" просто физически больше записей и, как следствие, уйдет больше времени на их обработку, то опять все зависит от конкретных условий.

В общем случае, от текущей даты будет быстрее. А в конкретном, надо смотреть на месте.

Цитата:
Сообщение от mazzy
2. Вы забываете об аналитике. Аналитика у каждой номенклатуры - разная. Вообще говоря, мало кто хочет получить остатки на произвольную дату.
...
ОДНАКО: если вы говорите о групповой обработке, то расскажите как вы обработаете аналитике корректно в групповой обработке?
Не знаю, у меня как раз пользователи хотят получить остатки не в разрезе складской аналитики, а по конкретному реквизиту аналитики. Т.е. "вообще все остатки вот по этому складу". Просто соответствующий фильтр на InventDim.

Или что Вы понимаете под термином "аналитика номенклатуры" применительно к расчету остатков?
Старый 30.01.2006, 16:19   #16  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
отчетная таблица не ваирант к сожалению.
Олап настроен, как к нему доступ получить программно понятия не имею.
По проводкам.. классы семейства InventSum работают долго, несмотря на то что стал использовать более "простой" класс InventSumDateDim
Старый 30.01.2006, 17:20   #17  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
Цитата:
Сообщение от Bars
отчетная таблица не ваирант к сожалению.
Олап настроен, как к нему доступ получить программно понятия не имею.
По проводкам.. классы семейства InventSum работают долго, несмотря на то что стал использовать более "простой" класс InventSumDateDim
тогда UNRW написал

+ здесь посмотрите: остатки на дату скопом
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/

Последний раз редактировалось Recoilme; 30.01.2006 в 17:30.
Старый 30.01.2006, 17:34   #18  
Recoilme is offline
Recoilme
злыдень
Аватар для Recoilme
Злыдни
 
895 / 192 (8) ++++++
Регистрация: 18.06.2003
ааа, есть ещё всё то что я там понаписал одним запросом на эскюэле через эмуляцию функции нарастающего итога, но писал не я так что.. Как сделать нарастающий итого - на эскюэль ру в ФАК написано
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/
Старый 31.01.2006, 09:38   #19  
Bars is offline
Bars
Участник
Аватар для Bars
 
312 / 14 (1) ++
Регистрация: 04.03.2005
Адрес: Москва
)) нужно сформировать оборотку по товару, по данному складу...

за основу взял форму проводок. .. немного изменяю.. чтобы периоды указывать можно было и т.п. + надо добавить колонку с остатком...
Старый 31.01.2006, 11:59   #20  
UNRW is offline
UNRW
Участник
 
383 / 67 (3) ++++
Регистрация: 16.09.2004
Адрес: Москва
Mazzy, вы "шутите"...

мы строим отчеты с остатками на начало периода, на конец периода + обороты за период рассчитывем по нескольким десяткам тысяч позиций за год - обрабатывает до полумиллиона проводок... данные в отчет готовятся за 3-4 минуты + выгрузка в Excel около минуты (до 60-ти тысяч строк в отчете)...

представь что Косяпта у тебя стала работать с 01.01.2004 отработала уже 2 года...
и отчет надо построить именно на 01.01.2004
расчитывая назад от InventSum ты будешь ждать завершения раз в 10 дольше чем прямым вычилением...

Например, некоторые отчеты разработанные Коламбусом работают именно так (не от InventSum), и даже включены в dis слой какой-то нерусской косяпты... стандартные отчеты у них работали сутками... а эти минуты...

и все из-за того, что если в стандартном функционале поставить 3-4 складских аналитики, стандарный механизм будет работать как 3-4 вложенных while select

Последний раз редактировалось UNRW; 31.01.2006 в 12:43.
Теги
остатки, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Остатки на дату InventSumDatePhysical Raven Melancholic DAX: Программирование 6 10.05.2007 15:29
Остатки товара на определенную дату Lucky13 DAX: Программирование 7 27.03.2007 14:27
Скачут остатки Def DAX: Программирование 3 03.05.2006 14:27
Цена на дату создания заказа/закупки George Nordic DAX: Функционал 2 29.06.2005 15:56
Остатки dog37 DAX: Программирование 6 02.06.2005 11:25

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:56.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.