Показать сообщение отдельно
Старый 07.03.2008, 12:11   #7  
Ned is offline
Ned
Lean Six Sigma
 
680 / 99 (5) ++++
Регистрация: 29.12.2002
Адрес: самолёт
Если такие ошибки часто появляются, то:
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();
}
В коде чуток мусора может - это под конкретную базу, нет времени править.
__________________
Viacheslav Nefedov, http://www.nefedov.net, http://restock.guru/