|
30.12.2008, 14:32 | #1 |
Участник
|
Запись уже существует????
Такой вопрос. Встала необходимость автоматического создания закупок через код.
Код такой importPurchTable.clear(); importPurchTable.initValue(); importPurchTable.initFromVendTable(vendtable::find(orderAccount)); numberSeq = NumberSeq::newGetNumFromCode(PurchParameters::numRefPurchId().NumberSequence,true); importPurchTable.PurchId = numberSeq.num(); numberSeq.used(); importPurchTable.PurchPlacer = empltable::userId2EmplId(curuserid()); importPurchTable.DeliveryDate = todate; importPurchTable.insert(); Закупка создается примерно через раз. В половине случаев пишет Невозможно создать запись в 'Складские проводки' ('InventTrans') Ссылка: Закупка, ЗП_00130. Ошибка происходит на методе insert() табл. InventTrans. Причем это происходит в базе, в которой я работаю один (тестовая), флаг в номерной серии НЕПРЕРЫВНАЯ снят. AX 3.0 SP 3 Если зайти в номерную серию и увеличить следующий номер, результат такой же: то создается закупка, то генерируется ошибка В чем может быть проблема??? |
|
30.12.2008, 14:42 | #2 |
----------------
|
Очень похоже, что данные залиты из другой базы средствами SQL. Счетчик recId отстал от даных.
Найдите максимальный recId в InventTrans и с некоторым смещением укажите его в SystemSequences |
|
30.12.2008, 14:42 | #3 |
Участник
|
..ну и где тут в Вашем коде создается Inventtrans? может быть, какой-то еще код исполняется, про который Вы забыли упомянуть?
|
|
30.12.2008, 14:46 | #4 |
Участник
|
Да забыл добавить код для создания строк, т.к. ошибка генерируется при создании строк, причем при создании одних и тех же номенклатур, ошибка возникает то на одной, то на другой номенклатуре
PurchLine purchLine; InventDim inventDim; ; purchLine.clear(); purchLine.initValue(); purchLine.initFromPurchTable(importPurchTable); purchLine.ItemId = ItemId; purchLine.initFromInventTable(InventTable::find(purchLine.ItemId)); purchLine.PurchPrice = PurchPrice; purchLine.PurchUnit = PurchUnit; purchLine.PriceUnit = 1; purchLine.PurchQty = PurchQty; purchLine.LineAmount = purchLine.calcLineAmount(purchLine.PurchQty); inventDim = purchLine.inventDim(); purchLine.InventDimId = InventDim::findOrCreate(inventDim).inventDimId; purchLine.createLine(true, false, False, true, true, False); |
|
30.12.2008, 14:59 | #5 |
Участник
|
строки закупок создаются из постоянной таблицы аксапты, а не внешней табл. sql и искать максимальный recid, я думаю, не выход.
|
|
30.12.2008, 15:13 | #6 |
Участник
|
Но проблема скорее всего действительно в recid. У нас этот проект запущен на рабочей базе и действительно периодически возникает ситуация, когда аксапта пишет, что запись уже существует причем при создании строк совершенно разных таблиц: Заказов, Складских проводок и др.
|
|
30.12.2008, 15:18 | #7 |
Участник
|
у Вас бы тогда проблемы возникали не через раз, а сразу и навсегда.
Попробуйте для начала сделать глобальную реиндексацию базы. Последний раз редактировалось Bober; 30.12.2008 в 15:22. |
|
30.12.2008, 17:04 | #8 |
Участник
|
Можно ещё посмотреть отличаются ли индексы стандартного inventTrans-а и вашего.
Вдруг их как то некорректно изменили или какой-нибудь свой добавили.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|