27.04.2021, 09:21 | #1 |
Участник
|
DFO365 зависает при смене склада в закупке
Привет!
DFO365 зависает при смене склада в закупке, в которой более 500 строк. Вот такой код работает несколько часов для 500 строк. X++: purchTable.InventLocationId = 'XXXXXX'; //purchTable.modifiedField(fieldNum(PurchTable, InventLocationId)); purchTable.InventSiteId = InventLocation::find(purchTable.InventLocationId).InventSiteId; //purchTable.modifiedField(fieldNum(PurchTable, InventSiteId)); PurchTable2LineUpdatePrompt purchTable2LineUpdatePrompt = PurchTable2LineUpdatePrompt::newFromPurchTable(purchTable); purchTable.update(); PurchTable2LineUpdate purchTable2LineUpdate; purchTable2LineUpdate = PurchTable2LineUpdate::construct(purchTable2LineUpdatePrompt); purchTable2LineUpdate.parmUpdatePricedisc(NoYes::Yes); //пробовал ставить NoYes::No, но эффекта не дало purchTable2LineUpdate.parmUpdatePriceDiscMode(PriceDiscUpdatePriceDisc::KeepManualSystem); purchTable2LineUpdate.parmCopyTaxGroupToMarkupTrans(DialogButton::No); purchTable2LineUpdate.update(); Есть ли какой-то красивый способ поменять склад в шапке и строках закупки ?
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ Последний раз редактировалось Ace of Database; 27.04.2021 в 09:24. |
|
27.04.2021, 10:01 | #2 |
Участник
|
Заработало
Удалось сделать вот так: X++: purchTable.InventLocationId = 'XXXXXX'; //purchTable.modifiedField(fieldNum(PurchTable, InventLocationId)); purchTable.InventSiteId = InventLocation::find(purchTable.InventLocationId).InventSiteId; //purchTable.modifiedField(fieldNum(PurchTable, InventSiteId)); purchTable.update(); while select forupdate purchLine where purchLine.PurchId == purchTable.PurchId exists join existInventDim where existInventDim.inventDimId == purchLine.InventDimId && existInventDim.InventLocationId != purchTable.InventLocationId { inventDim = purchLine.inventDim(); inventDim.InventLocationId = purchTable.InventLocationId; inventDim.InventSiteId = inventDim.inventLocation().InventSiteId; inventDim = InventDim::findOrCreate(inventDim); purchLine.InventDimId = inventDim.inventDimId; //purchLine.setInventDimId(inventDim.inventDimId); purchLine.update(); } Теперь все отрабатывает за 10 минут, включая разноску накладной.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
27.04.2021, 10:12 | #3 |
Участник
|
А в чём отличие от способа по старинке - что вы отключили связывание складской и фин аналитики сайт? В нём была проблема?
|
|
27.04.2021, 10:15 | #4 |
Участник
|
Цитата:
В этой моей задаче не надо пересчитывать цены. Только поменять склад. Я там в отладчике смотрел, какой-то ужас творится с налоговыми проводками по закупке, которая еще даже не утверждена. Возможно, она считает PurchTotals.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ |
|
27.04.2021, 14:23 | #5 |
Участник
|
В D365 тоже долго считается сумма закупки\заказа, в котором несколько сотен строк ?
__________________
Дмитрий |
|
27.04.2021, 16:04 | #6 |
Участник
|
Цитата:
Через связку PurchTable2LineUpdate - AXPurchLine реально одна строка по 10 секунд обрабатывалась. Но не каждая, некоторые строки быстро проскакивают.
__________________
Мои утилиты для Аксапты версий 3.0-2012: http://aceofdatabase.blogspot.com/ Последний раз редактировалось Ace of Database; 27.04.2021 в 16:08. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|