Показать сообщение отдельно
Старый 03.10.2014, 10:59   #2  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
В джобе для удаляемого поставщика вызовите
X++:
DimensionAttributeValue::updateForEntityValueDelete(vendTable);
В 2012 с удалением клиентов / поставщиков штатными средствами всё достаточно плохо, помню там еще какие-то нелогичные ошибки всплывали для контрагентов, которые абсолютно точно нигде не использовались. В свое время писал джоб, который удаляет поставщика, его запись в ГАК, договора и данные о налоговой регистрации. Используйте на свой страх и риск, предварительно проверив в тестовой среде

X++:
//удаление поставщика и его записи в ГАК
static void peko_test(Args _args)
{
    VendAccount                 vendAccount = ''; // Код поставщика
    VendTable                   vendTable;
    DirPartyTable               dirPartyTable;
    DirPartyLocation            dirPartyLocation;
    TaxRegistration             taxRegistration;

    PurchAgreementHeader        purchAgreementHeader;
    AgreementHeaderExt_RU       agreementHeaderExt;

    setPrefix("Удаление поставщика");

    try
    {
        ttsBegin;

        vendTable = VendTable::find(vendAccount, true);

        if (! vendTable)
        {
            throw error("Поставщик не найден");
        }

        dirPartyTable = DirPartyTable::findRec(vendTable.Party, true);

        while select forUpdate dirPartyLocation
            where dirPartyLocation.Party == dirPartyTable.RecId
        {
            while select forUpdate taxRegistration
                where taxRegistration.DirPartyLocation == dirPartyLocation.RecId
            {
                if (! taxRegistration.validateDelete())
                {
                    throw Exception::Error;
                }

                taxRegistration.delete();
            }

            dirPartyLocation.IsLocationOwner = NoYes::No;
            dirPartyLocation.IsPrimary = NoYes::No;

            if (! dirPartyLocation.validateDelete())
            {
                throw Exception::Error;
            }

            dirPartyLocation.delete();
        }

        if (vendTable.InvoiceAccount)
        {
            vendTable.InvoiceAccount   = '';
            vendTable.doUpdate();
        }

        while select forUpdate purchAgreementHeader
            where purchAgreementHeader.VendorDataAreaId == vendTable.dataAreaId
            &&    purchAgreementHeader.VendAccount      == vendTable.AccountNum
        {
            if (! purchAgreementHeader.validateDelete())
            {
                throw Exception::Error;
            }

            select firstonly forupdate agreementHeaderExt
                where agreementHeaderExt.AgreementHeader == purchAgreementHeader.RecId;

            if (agreementHeaderExt)
            {
                DimensionAttributeValue::updateForEntityValueDelete(agreementHeaderExt);
                agreementHeaderExt.delete();
            }

            purchAgreementHeader.delete();
        }

        if (! vendTable.validateDelete())
        {
            throw Exception::Error;
        }
        
        DimensionAttributeValue::updateForEntityValueDelete(vendTable);
        vendTable.delete();

        if (! dirPartyTable.validateDelete())
        {
            throw Exception::Error;
        }

        dirPartyTable.delete();

        ttsCommit;

        info(strFmt("Поставщик %1 удален.", vendAccount));
    }
    catch
    {
        error("Произошла ошибка.");
    }
}
__________________
Кононов Пётр

Последний раз редактировалось pedrozzz; 03.10.2014 в 11:01.
За это сообщение автора поблагодарили: leva (2), bud (1), arhat (1).