Если такие ошибки часто появляются, то:
X++:
void merge(RecId mainRecordId,RecId secondRecordId)
{
CustTable _tableMain;
CustTable _tableLine;
SalesJournalAutoSummary journalSummary;
SalesPrintCopies printCopies;
CustBankAccount custBankAccount;
RContractTable contractTable;
RContractTable contractTableNew;
LedgerBalancesDimTrans dimTrans;
Dimensions dim, dimNew;
;
startLengthyOperation();
ttsbegin;
select forUpdate _tableMain
where _tableMain.RecId == mainRecordId;
if (_tableMain.RecId == 0)
{
ttsabort;
throw error('??? ??????? ??????!');
}
select forUpdate _tableLine
where _tableLine.RecId == secondRecordId;
if (_tableLine.RecId != 0)
{
delete_from journalSummary where journalSummary.CustAccount == _tableLine.AccountNum;
delete_from printCopies where printCopies.CustAccount == _tableLine.AccountNum;
delete_from custBankAccount where custBankAccount.CustAccount == _tableLine.AccountNum;
while select forUpdate contractTable
where contractTable.RContractPartnerType == RContractPartnerType::Cust &&
contractTable.RContractPartnerCode == _tableLine.AccountNum
exists join contractTableNew
where contractTableNew.RContractPartnerType == RContractPartnerType::Cust &&
contractTableNew.RContractPartnerCode == _tableMain.AccountNum &&
contractTableNew.RContractAccount == contractTable.RContractAccount &&
contractTableNew.RContractCode == contractTable.RContractCode
{
contractTable.delete();
}
select forUpdate dimNew
where dimNew.DimensionCode == SysDimension::Partner &&
dimNew.Num == _tableMain.AccountNum;
if (dim.RecId == 0 || dimNew.RecId == 0)
{
ttsabort;
throw error('?? ??????? ?????????, ??????????????? ????????????!');
}
_tableLine.merge(_tableMain);
dim.merge(dimNew);
}
ttscommit;
endLengthyOperation();
}
В коде чуток мусора может - это под конкретную базу, нет времени править.