Доброго дня, коллеги.
Сразу извиняюсь за возможный оффтоп, но очень срочно нужен совет гуру. При импорте первичных данных в систему (DAX 4.0 SP2 - 3-х звенка) был допущен один промах, а именно - в кодах поставщиков присутствуют и латинская и русская буква С. Задача - перекодировать все первичные ключи и заменить (где присутствует) латинскую С на русскую С.
Формат кода - XXСПYYYYYYY, где XX-код подразделения за которым числится поставщик, а YYYYYYY - порядковый номер формата 0000021
Я имею очень скромный опыт программирования в DAX, вот попытался написать, который все это дело исправляет:
X++:
static void Base1000_RenameVendPrKey(Args _args)
{
vendTable vendTable,
findVendTable;
str strToUpdate;
;
while select recid from vendTable
where vendTable.AccountNum like "*C*"
{
try
{
ttsbegin;
findVendTable = VendTable::findRecId(vendTable.RecId, true);
if(findVendTable)
{
strToUpdate = strpoke(vendtable.AccountNum, "С", strfind(vendtable.AccountNum,"C", 1, strlen(vendtable.AccountNum)));
CCPrimaryKey::renamePrimaryKey(VendTable, strToUpdate, fieldNum(VendTable, AccountNum)); // переименование во всех связанных таблицах
VendTable.AccountNum = strToUpdate ;
VendTable.renamePrimaryKey(); // переименование в основной таблице
//VendTable.update();
}
ttscommit;
}
Catch (exception::error)
{
exceptionTextFallThrough(); // вывод ошибки
ttsabort;
retry; // повтор блока try
}
}
}
Джоб почему-то не работает, или вылетает с ошибкой, которую я перехватить не могу. Ошибка я так понимаю идет из-за блокировки таблицы.
По идее я хочу перехватывать ошибку блокировки и пытаться апдейтить следующую запись, и таким образом - путем нескольких итераций привести справочник к "употребляемому" руководством виду.
Ваше мнение господа? Помогите провести аудит кода и подскажите, ЧТО именно я не так делаю.