|
30.01.2006, 14:56 | #1 |
Участник
|
Остатки на дату.
Как получить остаток по складу на опр дату, так чтобы при открытии формы не заснуть должидаясь пока она отработает.
Использую класс InventSumDateValueReportDim... очень медленно. |
|
30.01.2006, 15:00 | #2 |
Участник
|
http://axapta.mazzy.ru/lib/inventsumdate/
InventSumDateValueReportDim считает очень много чего. Какие именно остатки вам нужны? |
|
30.01.2006, 15:42 | #3 |
Участник
|
нужен физ. остаток на дату по данномк складу , по данной номенклатуре.
|
|
30.01.2006, 15:45 | #4 |
злыдень
|
ОЛАП рассматриваете?
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
30.01.2006, 15:52 | #5 |
Участник
|
Цитата:
Сообщение от Recoilme
ОЛАП рассматриваете?
Не подскажете ? |
|
30.01.2006, 16:06 | #6 |
NavAx
|
Цитата:
Сообщение от Bars
если к нему можно обратится программно , то да.
Не подскажете ? Если проводок задним числом не бывает, то можно просто сделать свою отчетную таблицу, с заранее рассчитанными остатками на все даты. Это проще, чем ОЛАП настраивать, а по сути, тоже самое.
__________________
Isn't it nice when things just work? |
|
31.01.2006, 09:46 | #7 |
злыдень
|
Цитата:
Сообщение от Bars
если к нему можно обратится программно , то да.
Не подскажете ?
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
30.01.2006, 16:16 | #8 |
Участник
|
физ остаток на дату:
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 |
Участник
|
Цитата:
Сообщение от 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/ |
|
31.01.2006, 07:45 | #10 |
Участник
|
Цитата:
Сообщение от mazzy
НЕТ! НЕТ! НЕТ!!! И еще раз НЕТ!!!
НИКОГДА так не делайте. Этот код работат боль-мень приемлимо только на игрушечных данных малого объема! Стоит вам только приблизиться к нормальному рабочему объему - ваша база умрет. Здесь написано как Аксапта получает остатки на произвольную дату http://axapta.mazzy.ru/lib/inventsumdate/ Все равно медленно. |
|
31.01.2006, 09:32 | #11 |
злыдень
|
Цитата:
Сообщение от Bars
Прочитал, понял, спасибо).
Все равно медленно.
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
31.01.2006, 09:52 | #12 |
Участник
|
Цитата:
Сообщение от mazzy
Здесь написано как Аксапта получает остатки на произвольную дату
http://axapta.mazzy.ru/lib/inventsumdate/ Наиболее правильным вариантом является создание отдельной OLAP-базы, в которую с ежедневной периодичностью переносятся нужные данные из axapta. По этой базе уже и строятся отчеты по остаткам на дату. При этом понятно, что будет запаздывание, поэтому текущие остатки нужно брать из Axapta. Однако в качестве промежуточного решения я бы всё же использовал запрос "с начала времен". Его план выполнения по-крайней мере можно оптимизировать средствами СУБД (Oracle)... |
|
|
За это сообщение автора поблагодарили: Recoilme (3). |
31.01.2006, 13:20 | #13 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
Вообще-то, даже чисто логически, вывод будет прямо противополжным. Одна групповая команда по всякому быстрее работает чем куча одиночных команд в цикле.
2. Вы забываете об аналитике. Аналитика у каждой номенклатуры - разная. Вообще говоря, мало кто хочет получить остатки на произвольную дату. Запрос UNRW является неправильным, поскольку не учитывает параметры в группе аналитики. Но я это дело пропустил, поскольку посчитал неважным. ОДНАКО: если вы говорите о групповой обработке, то расскажите как вы обработаете аналитике корректно в групповой обработке? Еще раз: уважаемые, подумайте. |
|
31.01.2006, 14:40 | #15 |
Участник
|
Цитата:
Сообщение от mazzy
1. Вы почему то обсуждаете конкретную реализацию, а не принцип. Принцип - считаем проводки от конца, а не от начала времен.
Если структура базы корректна, то, должно быть все-равно идем с начала в конец или с конца в начало. Результат должен быть одинаковый. По крайней мере в штуках. Если же рассматривается вопрос, что "с начала времен" просто физически больше записей и, как следствие, уйдет больше времени на их обработку, то опять все зависит от конкретных условий. В общем случае, от текущей даты будет быстрее. А в конкретном, надо смотреть на месте. Цитата:
Сообщение от mazzy
2. Вы забываете об аналитике. Аналитика у каждой номенклатуры - разная. Вообще говоря, мало кто хочет получить остатки на произвольную дату.
... ОДНАКО: если вы говорите о групповой обработке, то расскажите как вы обработаете аналитике корректно в групповой обработке? Или что Вы понимаете под термином "аналитика номенклатуры" применительно к расчету остатков? |
|
30.01.2006, 16:19 | #16 |
Участник
|
отчетная таблица не ваирант к сожалению.
Олап настроен, как к нему доступ получить программно понятия не имею. По проводкам.. классы семейства InventSum работают долго, несмотря на то что стал использовать более "простой" класс InventSumDateDim |
|
30.01.2006, 17:20 | #17 |
злыдень
|
Цитата:
Сообщение от Bars
отчетная таблица не ваирант к сожалению.
Олап настроен, как к нему доступ получить программно понятия не имею. По проводкам.. классы семейства InventSum работают долго, несмотря на то что стал использовать более "простой" класс InventSumDateDim + здесь посмотрите: остатки на дату скопом
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ Последний раз редактировалось Recoilme; 30.01.2006 в 17:30. |
|
30.01.2006, 17:34 | #18 |
злыдень
|
ааа, есть ещё всё то что я там понаписал одним запросом на эскюэле через эмуляцию функции нарастающего итога, но писал не я так что.. Как сделать нарастающий итого - на эскюэль ру в ФАК написано
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
31.01.2006, 09:38 | #19 |
Участник
|
)) нужно сформировать оборотку по товару, по данному складу...
за основу взял форму проводок. .. немного изменяю.. чтобы периоды указывать можно было и т.п. + надо добавить колонку с остатком... |
|
31.01.2006, 11:59 | #20 |
Участник
|
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 | 6 | |||
Остатки товара на определенную дату | 7 | |||
Скачут остатки | 3 | |||
Цена на дату создания заказа/закупки | 2 | |||
Остатки | 6 |
|