Показать сообщение отдельно
Старый 26.06.2015, 12:04   #2  
Sergey Petrov is offline
Sergey Petrov
Участник
 
80 / 19 (1) ++
Регистрация: 03.04.2007
Адрес: Saint-Petersburg, Russia
Поговорю сам с собой немного.
Как вариант, не вносящий изменения в проводки, но слегка поправляющий логику: можно вместо чистки маркировок слегка допилить условие, которое вызывает расщепление странно промаркированных проводок. А именно: в методы \Classes\InventCostItemDim\updateSettleRefItem и \Classes\InventCostItemDimSecCur_RU\updateSettleRefItem вместе с проверкой на ненулевое значение сопоставленного количества (inventTrans.QtySettled и inventTrans.QtySettledSecCur_RU соответственно) добавить проверку на непревышение сопоставленного в другой валюте количества того, которое сопоставляется в текущей валюте.
То есть:
a) в методе \Classes\InventCostItemDim\updateSettleRefItem вместо
X++:
if (inventTrans.QtySettled)
    inventTrans.updateSplit(this.financialOpenQty(inventTrans));
использовать
X++:
if (inventTrans.QtySettled && abs(inventTrans.QtySettledSecCur_RU) <= abs(this.financialOpenQty(inventTrans)))
    inventTrans.updateSplit(this.financialOpenQty(inventTrans));
b) в методе \Classes\InventCostItemDimSecCur_RU\updateSettleRefItem вместо
X++:
if (inventTrans.QtySettledSecCur_RU)
    inventTrans.updateSplitSecCur_RU(this.financialOpenQty(inventTrans));
использовать
X++:
if (inventTrans.QtySettledSecCur_RU && abs(inventTrans.QtySettled) <= abs(this.financialOpenQty(inventTrans)))
    inventTrans.updateSplitSecCur_RU(this.financialOpenQty(inventTrans));
Результаты закрытия склада для проблемной номенклатуры вроде как вполне удобоваримы (за исключением того, что порядок сопоставлений для основной и вторичной валюты изменился в соответствии с обработанной при закрытии во вторичной валюте маркировкой).
__________________
MS Dynamics AX 2009

Kernel 5.0.1600.4110
Application 5.0.1500.6491
За это сообщение автора поблагодарили: Logger (3).