Если уж начали перечислять баги закрытия, то добавлю свои 5 копеек.
В методах
\Classes\ClassFactory\inventLastClosingDate
\Classes\ClassFactory\inventLastClosingDateSecCur_RU
некорректно сделано кеширование даты последнего закрытия склада.
Оно не учитывает тот факт, что закрытие склада выполняется в конкретной компании. Поэтому если мы поработали в одной компании, в которой период закрыт, а потом переключаемся в другую, в которой период не закрыт, и пытаемся в этом периоде разносить что-то - то получаем ошибку.
Лечится например так :
X++:
TransDate inventLastClosingDate(boolean reSelect = false)
{
// GRD_FixLastClosingDateCalc_pkoz // pkoz 16.01.2011 -->
// проект GRD_FixLastClosingDateCalc_pkoz сделан для того чтбы исправить кеширование даты последнего закрытия склада
// это кеширование не учитывало компанию, так что если, например, у нас в одной компании
// склад закрыт по одоной число, а в другой по другое, то аксапта могла для обоих компаний считать дату одинаковой -
// в случае если сперва метод вызвали в одной компании, а потом в другой
#define.GRD_date("_date")
#define.GRD_integer("_integer")
sysglobalCache GRD_globalCache = this.globalCache(); // получаем через метод так как может оказаться неинициализированным
// GRD_FixLastClosingDateCalc_pkoz // pkoz 16.01.2011 <--
;
// GRD_FixLastClosingDateCalc_pkoz // pkoz 16.01.2011 -->
inventLastClosingDate = GRD_globalCache.get(funcname() + #GRD_date, curExt(), dateNull());
inventClosingTtsVersion = GRD_globalCache.get(funcname() + #GRD_integer, curExt(), 0);
// GRD_FixLastClosingDateCalc_pkoz // pkoz 16.01.2011 <--
if (inventClosingTtsVersion != appl.ttsVersion() || reSelect || (!inventClosingTtsVersion && !inventLastClosingDate))
{
// pkoz 02.01.2009 -->
// слишком много коррекций накопилось - так будет быстрее
// inventLastClosingDate = (select maxOf(transDate) from inventClosing
inventLastClosingDate = (select forceliterals maxOf(transDate) from inventClosing
// pkoz 02.01.2009 <--
index hint TypeActiveIdx
where inventClosing.active == NoYes::Yes &&
// <GEEU>
inventClosing.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur &&
// </GEEU>
inventClosing.adjustmentType == InventAdjustmentType::Closing).transDate;
inventClosingTtsVersion = appl.ttsVersion();
// GRD_FixLastClosingDateCalc_pkoz // pkoz 16.01.2011 -->
GRD_globalCache.set(funcname() + #GRD_date, curExt(), inventLastClosingDate);
GRD_globalCache.set(funcname() + #GRD_integer, curExt(), inventClosingTtsVersion);
// GRD_FixLastClosingDateCalc_pkoz // pkoz 16.01.2011 <--
}
return inventLastClosingDate;
}