|  | 
|  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?
		 
				__________________ С уважением, Александр. | 
|  |