24.05.2022, 08:38 | #1 |
Участник
|
Быстрая форма
Доброго дня. Подскажите как сделать форму, у которой была бы хорошая производительность? Задача тривиальная, как мне показалась на первый взгляд.
Нужно создать форму с заказами на продажу, статус которых "Открытый заказ". Как добавлять range на источник данных я знаю. Проблема в том, что из-за большого количества дисплейных методов форма очень долго открывается. Пробовал кэшировать все методы, не помогает. Работаю в AX2012 X++: public void init() { super(); qbr_purchStatus = this.query().dataSourceTable(tableNum(PurchTable)).addRange(fieldNum(PurchTable, PurchStatus)); qbr_purchStatus.value(SysQuery::value((PurchStatus::Backorder))); // Открытый заказ this.cacheAddMethod(tablemethodstr(PurchTable, displayPaid_vsn)); this.cacheAddMethod(tablemethodstr(PurchTable, dislpaySumInvoice_vsn)); this.cacheAddMethod(tablemethodstr(PurchTable, displayNotPaid_vsn)); this.cacheAddMethod(tablemethodstr(PurchTable, displayRemainPurchPhysical_vns)); this.cacheAddMethod(tablemethodstr(PurchTable, displayPurchQty_vns)); this.cacheAddMethod(tablemethodstr(PurchTable, displayTotalAmount_vsn)); this.cacheAddMethod(tablemethodstr(PurchTable, displayToPay_vsn)); } Последний раз редактировалось DaniilT; 24.05.2022 в 08:50. |
|
24.05.2022, 09:11 | #2 |
Участник
|
Цитата:
Я вижу только один выход - снижать требования либо к полноте данных, либо к их актуальности. Например пересчитывать данные не в момент открытия формы а заранее. Можно идти по пути оптимизации расчётов, индексы добавить недостающие, почистить ненужные архивные данные. Также возможно у вас там для каждой строки по сто раз одно и тоже пересчитывается. Тогда можно думать над более глубоким кэшированием. Запоминать где-нибудь промежуточные значения, участвующие в вычислениях. Но чтобы об этом рассуждать нужно понять где происходят основные потери времени. |
|
24.05.2022, 09:24 | #3 |
Участник
|
На датасорсе указан индекс?
Также проверьте, сколько времени занимают вычисления в каждом дисплейном методе. Постарайтесь оптимизировать самые медленные. Извините, поправлю. PurchTable - заказы на покупку. SalesTable - заказы на продажу.
__________________
// no comments |
|
24.05.2022, 10:07 | #4 |
Участник
|
если у вас дисплейные методы на гриде, убрать самые тяжелые из них на другую закладку
|
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
24.05.2022, 13:02 | #5 |
Участник
|
Вопрос в итоге про закупки или продажи? Посмотрите как в закупках реализован fast-tab справа от лист-пейджа. Мы такой-же сделали для формы заказов. Данные хранятся в физической таблице аналогично таблице PurchTotalsSummary. Только в стандарте там надо жать кнопку "обновить", а мы сделали пакетник, кторый эти суммы по заказам актуализирует. В таблице сделали галку "актуально" и сбрасываем ее, когда в заказе добавляют строки или меняют суммы, либо происходит оплата и т.п..
Последний раз редактировалось imir; 24.05.2022 в 13:08. |
|
|
За это сообщение автора поблагодарили: EVGL (3), dim-gin (1), axm2017 (1). |
24.05.2022, 17:10 | #6 |
Участник
|
В старых аксаптах можно было бы ещё начать с совсем простого: если клиент достаточно "далеко" от AOS'а (например, раза в два дальше рекомендуемых 4 мс), то тяжёлые display-методы будут тратить время на перегонку данных туда-сюда, что может стать заметно на формах.
Но не знаю, актуально ли это для 2012й. |
|
25.05.2022, 16:08 | #7 |
Участник
|
сделай view или временную таблицу со всеми нужными полями из этих дисплей-методов и прикрути к PurchTable.
дополнительный профит: сможешь фильтровать и сортировать по этим полям. кстати, не факт, что форма медленно открывается именно из-за дисплей-методов. попробуй для эксперимента закомментить их и сравнить время открытия. если оно так же медленно это делает, то есть смысл потрейсить.
__________________
Felix nihil admirari |
|
|
За это сообщение автора поблагодарили: DaniilT (1). |
25.05.2022, 16:22 | #8 |
Участник
|
У нас форма заказов / закупок может тупить 20-40 секунд при первом открытии.
Прикол в том что время уходит не на выборку данных а на начитывание из БД модели определения формы, табличек датасорсов со всеми методами. Попробуйте перезайти в аксапту и переключиться в компанию dat. Или сделать тест на базе пустышке. Если открывается также медленно, то скорее всего у вас та же проблема. Но тормоза проявляются только на первом открытии формы. |
|
25.05.2022, 17:16 | #9 |
Участник
|
__________________
Felix nihil admirari |
|
26.05.2022, 21:28 | #10 |
Участник
|
А нет ли опций (аналогов опций) allowUseOfPreloadedForm / Form.AllowPreLoading в AX2009?
__________________
С уважением, Александр. |
|