В джобе для удаляемого поставщика вызовите
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("Произошла ошибка.");
}
}