fed: Обновление чистых потребностей в модуле MRP и Working Set* в MRP
*термин "Working Set" я не перевожу, данный термин ввел fed непосредственно в статья, и в ней же объясняется его значение.
О таблице inventSumLogTTS слышало большинство специалистов Dynamics AX (особенно работающих на поддержке). И все знают, что данная таблица как-то связана с MRP и что если не запускать MRP, то таблица inventSumLogTTS будет становиться все больше и больше, так что, в конце концов, ее каким-либо образом придется чистить. Но из-за того, что для алгоритмов обновления статических и динамических планов подробной документации нет, очень немногие специалисты действительно понимают то, как на самом деле используется данная таблица при обновлении планов, каковы преимущества и какие есть нюансы использования динамических и статических планов, чем развертывание заказов отличается от планирования с пересозданием и пр.
Я написал данный текст в основном по своей работе с Dynamics AX 2009, но в новой версии (DAX2012) подход остался с функциональной точки зрения таким же, изменились только технические детали, поэтому текст может быть полезен и для специалистов, использующих DAX2012.
Исторический экскурс
Как я уже писал в своем блоге, таблица inventSumLogTTS появилась где-то в последних релизах Axapta 2.5 исключительно для отслеживания изменений в таблице inventSum в отдельной транзакции на уровне БД. И в случае если основная транзакция откатывалась, система должна была пробежаться по соответствующим записям в таблице inventSumLogTTS и программно откатить изменения в inventSum. Начиная с версии Axapta 3.0 таблица inventSumLogTTS стала использоваться и для обновления динамических MRP планов. Однако в версии Dynamics AX 4.0 система множественных складских транзакций из Аксапты была удалена и вместо нее стал и спользоваться иной подход. Несмотря на это, таблица inventSumLogTTS в системе все еще существует, но в настоящее время используется только при обновлении динамических планов. И поэтому ее название может вводить в заблуждение, ведь она больше не используется для журналирования записей InventSum.
Каким образом в таблицу inventSumLogTTS попадают данные
Механизм создания новых записей в inventSumLogTTS в последних версиях Аксапты (4.0/2009/2012) похож на механизм обновления InventSum, который я уже подробно описывал в статье, упомянутой в предыдущем разделе. При вставке/обновлении/удалении записей в таблице inventSum система вызывает метод inventUpdateOnHand.addInventSumLogTTS(), который и регистрирует вставку или удаление записи в InventSum (обновление отражается как удаление и затем вставка). Записи в таблице InventSumLogTTS сохраняются в кэше до конца транзакции и вставляются в базу данных только тогда, когда система непосредственно обновляет записи в таблице InventSum, связанных со складским обновлением в транзакции.
Для связи двух относящихся к одному и тому же обновлению в складской транзакции записей таблицы inventSumLogTTS система использует поле sequenceNumber. Система фиксирует изменений в записях InventTrans только до тех пор, пока они не будут обновлены физически или финансово (статусы Отпущено/Продано или Получено/Закуплено). При этом в таблице inventSumLogTTS фиксируется только самое первое изменение в транзакции, приводящее к физическому или финансовому статусу. Последующие изменения в той же складской транзакции уже не записываются, поскольку они больше для MRP не нужны, так как теперь эта транзакция является частью запасов в наличии, которые представлены в чистых потребностях как одна чистая потребность на каждые товар и аналитику покрытия.
...