15.06.2022, 14:04 | #1 |
Участник
|
PurchTableWorkflow и немножко архитектуры + неочевидного
Смотрю метод submit
X++: public void submit() { WorkflowSubmitDialog workflowSubmitDialog; if (purchTable != null) { // Tax is needed to be calculated first or else the Accounting Distribution allocation factor will not be calculated correctly. if (Ledger::isLedgerBudgetControlEnabled()) { PurchTotals::newPurchTable(purchTable).calc(); } if (this.canSubmit(purchTable)) { workflowSubmitDialog = WorkflowSubmitDialog::construct(args.caller().getActiveWorkflowConfiguration()); if (this.submitDialog(workflowSubmitDialog)) { purchTable.submitToWorkflow(workFlowTypeStr(PurchTableTemplate), workflowSubmitDialog.parmWorkflowComment(), false); } } } } X++: // Tax is needed to be calculated first or else the Accounting Distribution allocation factor will not be calculated correctly. if (Ledger::isLedgerBudgetControlEnabled()) { PurchTotals::newPurchTable(purchTable).calc(); } Можно ли как то этого избежать или вынести куда то если цель сократить время до появления диалога X++: this.submitDialog Последний раз редактировалось axm2017; 15.06.2022 в 14:07. |
|
15.06.2022, 14:56 | #2 |
Участник
|
Мне кажется, что если в каких-нибудь проверках того "можно ли отправить в воркфлоу" и т.д. не используются итоги - то этот пересчет вполне можно перенести на после вызова диалога, куда-то в начало воркфлоу.
|
|
|
За это сообщение автора поблагодарили: axm2017 (5). |
15.06.2022, 15:00 | #3 |
Banned
|
Для контроля бюджета в закупках перед отправкой в workflow со времен AX2012 идет расстановка счетов ГК и расчет Accounting distribution. Самое позднее, когда это случается - это формирование Confirmation.
Чтобы ускорить, надо сделать так, чтобы Ledger::isLedgerBudgetControlEnabled() возвращал false? |
|
|
За это сообщение автора поблагодарили: axm2017 (5). |
16.06.2022, 08:36 | #4 |
Участник
|
Заметил что повторные запуски
PurchTotals::newPurchTable(purchTable).calc(); существенно ускоряются так как видимо в работе класса предположительно используется кэширование. Первый запуск традиционно идет небыстро. Можно ли как то запустить класс в стороне и потом как то расшарить кэш и на пользователя? |
|
16.06.2022, 09:39 | #5 |
Участник
|
Там не совсем кэш. В 2012 в модуле поставщиков реализовали кэширование в постоянной таблице TaxUncommitted. Если для связи HeaderTableId + HeaderRecId( напр. для PurchTable или VendInvoiceInfoTable) есть уже посчитанные налоги, то Tax (TaxPurch) возьмет от туда, иначе пойдет считать. Подробнее можете почитать здесь.
|
|
|
За это сообщение автора поблагодарили: axm2017 (5). |
17.06.2022, 16:43 | #6 |
Участник
|
решил в общем попытаться уже традиционно для себя через runAsync
runAsync и его использование Пример для любознательных чтобы не копаться как передать параметры из таска обратно в основной поток X++: validationTask.Wait();
AsyncTaskResult asyncTaskResult = AsyncTaskResult::getAsyncTaskResult(validationTask);
boolean valid;
container messageContainer;
[valid, messageContainer] = asyncTaskResult.getResult();
infolog.import(messageContainer); Последний раз редактировалось axm2017; 17.06.2022 в 16:47. |
|
|
|