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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.02.2010, 11:06   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Складские остатки на дату
К вопросу о складских остатках на дату.
Недавно перечитывал статьи
http://axapta.mazzy.ru/lib/inventsumdate/

обратил внимание на то, что скомплектованное количество в данных классах считается и при этом учитывается дата InventTrans.DateExpected

а зарезервированное количество не рассчитывается, так что нет метода который бы, скажем, вернул на дату аналог значения InventSum.AvailPhysical, но есть метод для значения на дату InventSum.PhysicalInvent

Интересно, почему так ?
Старый 03.02.2010, 11:24   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Вы имеете в виду на дату в будущем? Если так, то для этого нужно использовать функционал сводного планирования. Например на форме "Чистые потребности" есть поле "Накоплено".

А если в прошлом, то какой от этого прок?
Старый 03.02.2010, 12:44   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
По банальной причине. Это бессмысленно. Не имеет "физического" смысл

"Физ.наличие" - это то, сколько товара физически вообще есть на складе.
"Физ.доступно" - это то, сколько товара из того, что физически есть, можно использовать при создании новых заказов. Сколько товара "свободно". Никем не зарезервировано под свои нужды.

Как рассчитать эти параметры на заданную дату?

Очевидно, что для "Физ.наличия" все просто. Достаточно просто сложить количества складских проводок, вне зависимости от того, какой статус прихода/расхода они имеют в настоящее время. История изменения статусов роли не играет. Досточно знать их статус на текущий момент и когда произошел физический приход/расход товара. Дата прихода/расхода зафиксирована в полях DatePhysical/DateFinancial/DateInvent

А вот для "Физ.доступно" просто сложить проводки - невозможно! Ведь надо знать не просто статус проводки, который она имеет сейчас, а тот статус проводки, который у нее был на интересующую дату! И даже дату установить не возможно, ведь установка/снятие с резерва не порождает новых проводок.

Ну, например, если 1 штука была зарезервирована вчера, а сегодня уже снята с резерва, то, очевидно, чтобы определить тот факт, что вчера "Физ.доступно" было 0, а сегодня - 1 надо хранить историю. Недостаточно знать, что есть сейчас. Необходимо знать, что было вчера

А для расчета "Физ.наличие" история не нужна. Что вчера товар был на складе, что сегодня он есть. Ну и что, что в другом статусе. Но ведь есть же! Есть физическое наличие товара.

Вот и получается, что "Физ.доступно" на дату рассчитать просто невозможно. Нет необходимой информации (истории изменения статусов проводок). Так зачем вычислять бесполезную информацию?

Последний раз редактировалось Владимир Максимов; 03.02.2010 в 12:53.
За это сообщение автора поблагодарили: Evgeniy2020 (1).
Старый 03.02.2010, 13:20   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Хм.
Один в один ваши рассуждения можно применить к комплектации. А она учитывается при расчете на дату. И также товар можно раскомплектовать так что в истории нигде не останется что он был скомплектован.

В общем непонятка как раз в том, что если считаем скомплектованное количество на дату то и зарезервированное тоже надо. Либо ни то ни другое не считать.
Старый 03.02.2010, 13:56   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цель работы этих классов получить значение "Физ.наличие". Все остальное - это промежуточные результаты. Рассматривать отдельные слагаемые как реальное количество на дату следует с осторожностью.

Комплектация и регистрация - оказывает влияние на "Физ.наличие", поэтому учитывать их необходимо. А тот факт, что невозможно получить "комплектацию (регистрацию) на дату" по причине отсутствия истории не отменяет необходимости их как-то учесть.

В общем, можно сказать, что "физ.наличие" на дату содержит некоторую не определенность за счет принципиальной невозможности рассчитать комплектацию и регистрацию на дату.

Физ.зарезервировано также невозможно получить на дату. Но это значение не участвую в расчете "Физ.наличие", поэтому и никак не фигурирует даже в виде слагаемых.

PS: Кстати, добавлю, что и отфактурованное/отгруженное количество на дату тоже величина достаточно условная. Ведь анализ выполняется по дате документа, а не по дате создания. А пользователи очень любят ставить эту дату раньше/позже текущей даты...

Последний раз редактировалось Владимир Максимов; 03.02.2010 в 15:01.
Старый 03.02.2010, 21:50   #6  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Logger Посмотреть сообщение
...
если считаем скомплектованное количество на дату то и зарезервированное тоже надо
...
Что значит "Надо"?

Скомплектованное количество, равно как и зарегистрированное, влияет на остатки. Резерв — это некая блокировка. В системе нет отчетности по истории резервов. По остаткам есть + инвентаризация.

Если нужно персонально вам... это другое совсем дело. Резерв сам по себе умирает при смене статуса на более поздний. По регистрации-комплектации хоть след остается.

По регистрации-комплектации возможен сценарий: одной датой зарегистрировали, другой сняли регистрацию, третьей опять поставили. В отчет по остаткам попадет только последний факт. Вас "Тоже" в вашем отчете с учетом резервов устроит?
__________________
С уважением,
glibs®
Старый 03.02.2010, 22:02   #7  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Logger
...
учитывается дата InventTrans.DateExpected
...
По-моему, InventTrans.DatePhysical
Цитата:
Сообщение от Logger
...
нет метода который бы, скажем, вернул на дату аналог значения InventSum.AvailPhysical, но есть метод для значения на дату InventSum.PhysicalInvent
...
Б-р-р-р... Не понял. InventSum возвращает на дату? Ваша фраза очень непонятна.
__________________
С уважением,
glibs®
Старый 03.02.2010, 22:08   #8  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от glibs Посмотреть сообщение
По-моему, InventTrans.DatePhysical
А разве для скомплектованных проводок DatePhysical заполнено? Ведь разноски ещё не было...
За это сообщение автора поблагодарили: glibs (1).
Старый 03.02.2010, 22:27   #9  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Виноват, DateInvent. По памяти писал.
__________________
С уважением,
glibs®
Старый 04.02.2010, 12:11   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от glibs Посмотреть сообщение
По-моему, InventTrans.DatePhysical

Б-р-р-р... Не понял. InventSum возвращает на дату? Ваша фраза очень непонятна.
Неточно выразился. Речь идет о семействе классом описанных в ссылке у Маззи. Некоторые методы в этих классах возвращают на дату +бесконечность то же значение которое лежит в в определенных полях в InventSum.

Именно в таком смысле было сказано "InventSum на дату"
Старый 06.10.2010, 14:56   #11  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Подниму тему, ибо обнаружилось любопытное исключение из правил расчёта.
Если InventSum и InventTrans различаются на порядки (т.е. по каждому остатку много проводок), то схема mazzy однозначно оптимальна. А вот если разница менее порядка (т.е. по каждому разрезу было лишь несколько движений) - то оказывается выгоднее именно считать сумму количества в проводках с начала времён. Как я понимаю, это результат специфики работы SQL, который занимается черновой работой по схлопыванию записей - когда складских проводок по разрезу мало, то перебор свёрнутых по аналитике InventTrans идёт быстрее, чем перебор InventSum с расчётом остатка по каждому из них.

Вот пример такой ситуации. В InventSum 1,5 млн. строк, в InventTrans - 8 млн. Стоит задача определить отрицательный остаток во всех разрезах за определённый период (т.е. номенклатура-дата из периода-разрез-отрицательное количество). По схеме mazzy аксапта работала 13,5 часов. Суммированием InventTrans - полчаса. Результаты совпали
__________________
С уважением,
Вячеслав
Старый 06.10.2010, 15:34   #12  
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/
Цитата:
Такой подход работает быстро и хорошо, если часто запрашиваются последние остатки – остатки на прошлую неделю, остатки на прошлый месяц, остатки на прошлый год. Такой подход работает плохо, если вы часто запрашиваете очень давние остатки.
поэтому вполне возможно, что анализ старых периодов лучше вести от начала времен.
===============

Цитата:
Сообщение от pitersky Посмотреть сообщение
А вот если разница менее порядка (т.е. по каждому разрезу было лишь несколько движений) - то оказывается выгоднее именно считать сумму количества в проводках с начала времён. Как я понимаю, это результат специфики работы SQL, который занимается черновой работой по схлопыванию записей - когда складских проводок по разрезу мало, то перебор свёрнутых по аналитике InventTrans идёт быстрее, чем перебор InventSum с расчётом остатка по каждому из них.
Да, и это условие тоже есть.

Но соотношение между таблицами - это не все.
Дело в том, что InventSum содержит как закрытые, так и открытые записи.

закрытая запись - это запись по какой-то комбинации аналитик, с полностью нулевыми количествами-суммами. (см. метод InventSum.isAllFieldsZero(), а также поле InventSum.Closed и перекрестные ссылки по нему, где это поле записывается)

Нажмите на изображение для увеличения
Название: 1.PNG
Просмотров: 499
Размер:	79.7 Кб
ID:	6229

поле Closed используется в индексах

Название: 2.PNG
Просмотров: 1994

Размер: 31.6 Кб

предполагается, что:
= при большом количестве комбинаций складских аналитик (серийные номера, партии, ячейки) большинство записей в InventSum будет закрыто
= следовательно в выборку попадет относительно небольшое число активных (ненулевых) записей.

Поэтому: надо анализировать не общий объем таблицы InventSum, а число открытых записей в InventSum.

ЕСЛИ же у вас комбинаций аналитик так много И большинство записей в InventSum незакрыты, то у вас где-то нарушена логика работы Аксапты.

в общем, о большом количестве комбинаций аналитик разработчики думали.
и предполагали некоторые условия использования, когда подход от конечных остатков оптимален.
__________________
полезное на axForum, github, vk, coub.
Старый 06.10.2010, 15:41   #13  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Я в курсе про закрытые записи.
Но задача формулируется так "вывести отрицательные остатки на дату". Если мы будем обрабатывать только открытый InventSum, то из расчёта сразу выпадут разрезы, которые были закрыты из минуса после требуемой даты. А эта информация тоже (точнее - в первую очередь) нужна.
Кстати, в приведённом мной примере целевая дата была 01.07.2010. Это не так уж и давно.
__________________
С уважением,
Вячеслав

Последний раз редактировалось pitersky; 06.10.2010 в 15:46.
За это сообщение автора поблагодарили: mazzy (2).
Старый 06.10.2010, 16:20   #14  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,909 / 5730 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
Я бы еще добавил, что при использовании inventSumDate() возникает некоторый накладняк (и довольно заметный) в связи с тем что на SQL Server отсылается много мелких запросов, каждый из которых отдельно разбирается и исполняется. Кроме того - по каждому из этих запросов случается трафик между SQL и AOS. В то же время если у тебя тупой запрос по inventTrans, то у тебя на сервер уходит один могучий запрос, потом сервер думает и сразу присылает данные на клиента крупным оптом, так сказать. Так что если у тебя сервер БД мощный, то тупое чтение с начала времен может запросто выиграть у хитроумных подходов со сбором данных из inventSum/inventTrans/inventSettlement/InventTransPosting. В сущности - 6 миллионов записей - это ведь порядка полутора гигабайт данных. Даже если у нас в кэше ничего нету - сколько времени с приличного дискового массива будут данные читаться ? Около минуты наверное... А если у тебя дисковые подсистемы на разных каналах висят и данные по этим каналам размазаны, то за счет параллельного чтения запросто можно и в секунд 15-20 уложиться...
К слову сказать - если в системе номера партий используются (а это правильное и вполне поддерживаемое создателями системы ее использование), то размерность inventSum и inventTrans может быть вполне сопоставимой...
За это сообщение автора поблагодарили: Logger (2).
Теги
остатки, остатки на дату

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Остатки на дату InventSumDatePhysical Raven Melancholic DAX: Программирование 6 10.05.2007 15:29
Остатки товара на определенную дату Lucky13 DAX: Программирование 7 27.03.2007 14:27
Остатки на дату. Bars DAX: База знаний и проекты 119 15.02.2006 20:35
Остатки dog37 DAX: Программирование 6 02.06.2005 11:25
Сверка остатков по счетам учета материалов и складские остатки tolstjak DAX: Функционал 5 05.04.2005 13:51

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

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

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