16.03.2009, 17:34 | #1 |
Участник
|
Смена первичного ключа таблицы VendTable
Доброго дня, коллеги.
Сразу извиняюсь за возможный оффтоп, но очень срочно нужен совет гуру. При импорте первичных данных в систему (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 } } } По идее я хочу перехватывать ошибку блокировки и пытаться апдейтить следующую запись, и таким образом - путем нескольких итераций привести справочник к "употребляемому" руководством виду. Ваше мнение господа? Помогите провести аудит кода и подскажите, ЧТО именно я не так делаю. |
|