Вот такой чудесный метод есть в DAX 2012 R2, перед разноской документов по заказу на продажу SalesFormletterProvider\checkJournal.
X++:
/// <summary>
/// Determines whether the journal is valid.
/// </summary>
/// <returns>
/// true if the journal is valid; otherwise, false.
/// </returns>
public boolean checkJournal()
{
boolean ok = true;
salesTotals = this.parmTotals();
ttsbegin; // In transactions in order to get enforce selection of eg. CustTable
if (! this.checkHeading() ||
! this.checkBlockedLevel() ||
! this.checkLines())
{
ok = false;
}
setPrefix(strFmt("@SYS76767", salesTable.SalesId));
if (! this.creditMaxOk(salesTotals))
{
// <GEERU>
if (isCountryRegionRU)
{
if (CustParameters::find().CreditLineError == CreditLineErrorType::Error)
{
return false;
}
else
{
ok = true; // needs to reach the commit below
}
}
else
{
// </GEERU>
if (ok && CustParameters::find().CreditLineError == CreditLineErrorType::Error)
{
ok = false;
}
// <GEERU>
}
// </GEERU>
}
// <GIN>
if (TaxParameters::checkTaxParameters_IN()
&& this.parmDocumentStatus() == DocumentStatus::ShippingBill_IN)
{
ok = this.checkFormLetterId_IN();
}
// </GIN>
ttscommit;
return ok;
}
Что то аналогичное есть и в более младших версиях, там код насколько я помню зашит в SalesFormLetter\checkJournal, причем код по проверке кредитного лимита тянется чуть ли не из тройки.
И во всех версиях одно и тоже, в самом начале метода не проходит проверка по стандартным параметрам и ok = false, а затем есть замечательные строки вида
X++:
ok = true; // needs to reach the commit below
X++:
ok = this.checkFormLetterId_IN();
К ошибкам это "сложно" отнести, ведь код жив начиная с 3.0, а в 2012 дополнительно появляются аналогичные проверки, видимо я что то упускаю, может кто то пояснить для чего сбрасывается результат предыдущих проверок ?