Похвально. У меня тоже вчера было какое-то особое настроение, так что для того вертикального решения, над которым я работаю в настоящий момент, я написал след. код:
X++:
// to cope with the apples and bananas problem
UnitQty addUnitQtyError(SPPProdUnitQtyMap _that)
{
UnitQty qty;
if (! _that.UnitQtyError)
return 0;
if (! this.UnitIdError)
this.UnitIdError = _that.UnitIdError;
if (! this.LanesNo)
this.LanesNo = _that.LanesNo;
if (this.UnitIdError == _that.UnitIdError && this.LanesNo == _that.LanesNo) // ;-)
{
qty = _that.UnitQtyError;
}
else
{
qty = _that.UnitQtyError;
if (_that.LanesNo && Unit::SPPisLengthUnit(_that.UnitIdError))
qty = qty * _that.LanesNo; // ~ kg, m2, pcs
if (this.LanesNo && Unit::SPPisLengthUnit(this.UnitIdError))
qty = qty / this.LanesNo; // ~ m
// no conv. factor => throw error
qty = UnitConvert::qty(qty, _that.UnitIdError, this.UnitIdError, this.prodTable().ItemId);
}
this.UnitQtyError += qty;
return qty;
}