Поехали дальше....
2 на мой взгляд бага на 4-ке сп2 с нашей локализацией (восточная европа), слои GLS & GLP.
(На 2009 локализации пока не видел, так что не знаю как там... Может ещё не поздно предупредить

)
Таблицы PurchLine & SalesLine.
Для начала метод
PurchLine.delete()
(та же картина, только вид сбоку, наблюдается и в SalesLine.insert() и в SalesLine.update() - но там касается только братьев-поляков
)
X++:
public void delete(boolean _showInfoDelReserv = true, boolean deletePBA = true)
{
PurchLineType purchLineType;
;
purchLineType = this.type();
purchLineType.delete(_showInfoDelReserv, deletePBA);
TaxWorkRegulation::deleteRegulation_W(this);
}
В
purchLineType.delete() одна транзакция, в
TaxWorkRegulation::deleteRegulation_W() - другая. А как же понятие
атомарности действия? Одна транзакция прошла, вторая свалилась, ну и ладно? Нехорошо, как-то...
Теперь перейдём к методу
SalesLine.delete():
X++:
void delete(Common childBuffer = null, boolean deletePBA = true)
{
SalesLineType salesLineType;
;
ttsbegin;
if (this.AssetId_RU && this.SalesStatus != SalesStatus::Invoiced && ! this.creditNoteLine())
{
RAssetTable::updateStatus(this.AssetId_RU, RAssetStatus::Open);
RAssetTable::updateCustInfo(this.AssetId_RU, '', '');
}
salesLineType = this.type();
salesLineType.delete(childBuffer, deletePBA);
TaxWorkRegulation::deleteRegulation_W(this);
ttscommit;
}
Оппачки, тут уже внесли всё в одну транзакцию! Казалось бы, круто, молодцы!
НО! Что мы видим в
salesLineType.delete()?
Видим внутреннюю транзакцию и перехват ошибок типа Deadlock, UpdateConflict и т.п.
И что происходит из-за появления "внешней" транзакции на
SalesLine.delete()?
Правильно, весь эти тщательно пИсаный старшими товарищами код по перехвату ошибок дружно встаёт и уходит сами знаете куда...
Нехорошо, как-то...
Я всё-таки в подобных случаях предпочитаю вносить все свои доработки в единую транзакцию в класс Sales/PurchSalesLine. И, на мой взгляд, так должны были поступить и "локализаторы"...
Или я пропустил какую-то глубокую мысль, которую всё это преследовало?