AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.08.2008, 11:33   #1  
Ameli is offline
Ameli
Участник
Аватар для Ameli
 
9 / 11 (1) +
Регистрация: 07.06.2006
Адрес: Киев
2 CustTable_ds на форме
На форме 3 датасурса - CustInvoiceJour и 2 CustTable - присоединенные по InvoiceAccount и OrderAccount (по InnerJoin). Накладываются фильтры и по кнопке вызываем ExecuteQuery(). Вот такой запрос строится:

SELECT * FROM CustInvoiceJour WHERE ((InvoiceDate>={ts '2008-05-01 00:00:00.000'} AND InvoiceDate<={ts '2008-05-31 00:00:00.000'}))
JOIN * FROM CustTable WHERE CustInvoiceJour.OrderAccount = CustTable.AccountNum
JOIN * FROM CustTable WHERE CustInvoiceJour.InvoiceAccount = CustTable.AccountNum

В итоге вылетает ошибка :

Суммарный внутренний размер записей в вашем объединенном операторе SELECT равен 26684 байтам, но система Microsoft Dynamics по умолчанию настроена так, что он не должен превосходить 24576 байтов.

С одним CustTable работает нормально.

Можно ли как-то решить проблему не изменняя настроек AOS?
За это сообщение автора поблагодарили: mazzy (1).
Старый 08.08.2008, 11:38   #2  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Попробуйте поставить OnlyFetchActive на датасорсе

Еще один вариант (на init обоих датасорсов выбираем только нужные поля):
X++:
public void init()
{
    QueryBuildDataSource qbds;
    ;

    super();

    qbds = CustTable_DS.query().dataSourceTable(tablenum(CustTable));

    qbds.addSelectionField(fieldnum(CustTable, RecId));
    qbds.addSelectionField(fieldnum(CustTable, AccountNum));
    qbds.addSelectionField(fieldnum(CustTable, CellularPhone));
    qbds.addSelectionField(fieldnum(CustTable, Phone));
}
только qbds получать надо через dataSourceName

Последний раз редактировалось Eldar9x; 08.08.2008 в 12:11.
Старый 08.08.2008, 12:30   #3  
Ameli is offline
Ameli
Участник
Аватар для Ameli
 
9 / 11 (1) +
Регистрация: 07.06.2006
Адрес: Киев
Поставила OnlyFetchActive - в запросе появился перечень полей. НО летит та же ошибка...В грид выбрались какието строки, но в каждом поле проставились значения RecId из СustTable.

SELECT SalesId, InvoiceId, InvoiceDate, OrderAccount, InvoiceAccount, inventLocationId, Qty, SalesBalanceMST, SumTaxMST, DocReestrInvoice_UAI, DocReestrAttorney_UAI, InvoiceAmountMST, RContractCode, DlvMode, CashCheck_UAI, AttorneyId_RU, AttorneyDate_RU, AttorneyIssuedName_RU, Description_UAI, SalesAdministrator, DeliveryAddress
FROM CustInvoiceJour WHERE ((InvoiceDate>={ts '2008-05-01 00:00:00.000'} AND InvoiceDate<={ts '2008-05-31 00:00:00.000'}))
JOIN Name FROM CustTable WHERE CustInvoiceJour.OrderAccount = CustTable.AccountNum
JOIN Name, CodeOKPO_RU FROM CustTable WHERE CustInvoiceJour.InvoiceAccount = CustTable.AccountNum
Старый 08.08.2008, 12:47   #4  
Ameli is offline
Ameli
Участник
Аватар для Ameli
 
9 / 11 (1) +
Регистрация: 07.06.2006
Адрес: Киев
с addSelectionField - то же самое что из с FetchActive - ошибка и некорректные данные в строках..

Перекрывала иниты на всех трех датасурсах.

Последний раз редактировалось Ameli; 08.08.2008 в 12:49.
Старый 08.08.2008, 13:42   #5  
Ameli is offline
Ameli
Участник
Аватар для Ameli
 
9 / 11 (1) +
Регистрация: 07.06.2006
Адрес: Киев
размер данных после указания перечня полей остался все тот же - 26684
Старый 08.08.2008, 12:46   #6  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Мне первый вариант тоже не помог, поэтому лучше четко указывать, какие поля нужно получить. Судя по запросу, придется еще и CustInvoiceJour_DS.init() также переписать.
X++:
public void init()
{
    QueryBuildDataSource qbds;
    ;

    super();

    qbds = CustInvoiceJour_DS.query().dataSourceTable(tablenum(CustInvoiceJour));

    qbds.addSelectionField(fieldnum(CustInvoiceJour, RecId));
    ....
}
Кстати, вопрос. Размер данных теперь стал хотя бы меньше (чем 26684)?
Старый 08.08.2008, 13:43   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Форму можно?
Старый 08.08.2008, 14:08   #8  
Ameli is offline
Ameli
Участник
Аватар для Ameli
 
9 / 11 (1) +
Регистрация: 07.06.2006
Адрес: Киев
Выкладываю форму
Вложения
Тип файла: xpo Form_DocReestr_UAI.xpo (75.1 Кб, 454 просмотров)
Старый 08.08.2008, 15:41   #9  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Забыли в inite() CustInvoiceJour_DS выбрать SalesId
X++:
     qbds = this.query().dataSourceName('CustInvoiceJour');
     
     qbds.addSelectionField(fieldnum(CustInvoiceJour, RecId));
     qbds.addSelectionField(fieldnum(CustInvoiceJour, SalesId));
При ограничении буфера, у меня отлично отрабатывает при отсутствии полей
Для CustInvoiceJour
X++:
     // !!!  qbds.addSelectionField(fieldnum(CustInvoiceJour, DocReestrInvoice_UAI));
     // !!!  qbds.addSelectionField(fieldnum(CustInvoiceJour, DocReestrAttorney_UAI));
     // !!!  qbds.addSelectionField(fieldnum(CustInvoiceJour, RContractCode));
     // !!!  qbds.addSelectionField(fieldnum(CustInvoiceJour, CashCheck_UAI));
     // !!!  qbds.addSelectionField(fieldnum(CustInvoiceJour, AttorneyId_RU));
     // !!!  qbds.addSelectionField(fieldnum(CustInvoiceJour, AttorneyIssuedName_RU));
     // !!!  qbds.addSelectionField(fieldnum(CustInvoiceJour, Description_UAI));
Для CustTable1
X++:
// !!!  qb.addSelectionField(fieldNum(CustTable,CodeOKPO_RU));
И еще в ShowLines надо
CustInvoiceJour_ds.executeQuery();
вместо
CustInvoiceJour_ds.research();

Последовательно отключайте поля, пока не добъетесь результата. Начать лучше с полей типа:
CustInvoiceJour.Description_UAI
CustInvoiceJour.DeliveryAddress
Вложения
Тип файла: xpo Form_DocReestr_UAI_DEL.xpo (71.0 Кб, 352 просмотров)

Последний раз редактировалось Eldar9x; 08.08.2008 в 16:29.
За это сообщение автора поблагодарили: Ameli (1).
Старый 08.08.2008, 16:38   #10  
Ameli is offline
Ameli
Участник
Аватар для Ameli
 
9 / 11 (1) +
Регистрация: 07.06.2006
Адрес: Киев
Eldar9x, спасибо за участие! Но к сожалению, не помогло. Втянула вашу хро-шку - та же картина... Теперь наверняка можно сказать что дело в настройках системы.

До недавнего времени эта форма работала. Потом стала эта ошибка валиться. А увеличивать Maximum Buffer size не разрешили... (хотя пробовали - помогает). Я подумала что надо оптимизировать както запрос - но похоже не запросе дело. Выходить, что надо увеличивать - других вариантов нет?
Старый 08.08.2008, 17:21   #11  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Цитата:
Сообщение от Ameli Посмотреть сообщение
До недавнего времени эта форма работала. Потом стала эта ошибка валиться. А увеличивать Maximum Buffer size не разрешили... (хотя пробовали - помогает). Я подумала что надо оптимизировать както запрос - но похоже не запросе дело. Выходить, что надо увеличивать - других вариантов нет?
никогда с таким не сталкивался (у нас все на Oracle крутиться) может вам вообще выгребать только RecId а остальные поля сделать edit/display методами?
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy

Последний раз редактировалось ivas; 08.08.2008 в 17:38. Причина: орфография))
Старый 08.08.2008, 16:49   #12  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Почему же не в запросе. Точно такую же проблему решил именно так, отключая не нужные поля, причем свойство OnlyFetchActive так и не помогло - только программно. Попробуйте выбирать вначале только несколько полей из CustInvoiceJour. То есть RecId и поля связки. Пусть на форме данные и неправильно отображаются, но добейтесь вначале, что бы это сообщение исчезло. А потом уже будете выбирать, что целесообразней - обойтись без какого либо дополнительного поля или увеличить буфер.


Кстати, оказывается, свойство OnlyFetchActive выставленное в Yes перекрывает программную настройку выбираемых полей.

Последний раз редактировалось Eldar9x; 08.08.2008 в 17:25.
Старый 08.08.2008, 17:34   #13  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Не уверен, что это верно, но вроде можно обойтись одним датасорсом CustTable, в init которого
X++:
public void init()
{
   QueryBuildDataSource qb;

    super();

    qb =  CustTable_ds.query().dataSourceName('CustTable');

    qb.clearLinks();
    qb.fetchMode(QueryFetchMode::One2One);

    qb.addLink(fieldNum(CustInvoiceJour,InvoiceAccount),fieldNum(CustTable,AccountNum));
    qb.addLink(fieldNum(CustInvoiceJour,OrderAccount ),fieldNum(CustTable,AccountNum));

    qb.addSelectionField(fieldNum(CustTable,RecId));
    qb.addSelectionField(fieldNum(CustTable,Name));
}
При этом полученный запрос выглядит следующим образом:
Цитата:
Информация:
SELECT RecId, SalesId
FROM CustInvoiceJour
WHERE ((InvoiceDate>={ts '2008-08-08 00:00:00.000'} AND InvoiceDate<={ts '2008-08-08 00:00:00.000'}))
JOIN RecId FROM CustTable
WHERE
CustInvoiceJour.InvoiceAccount = CustTable.AccountNum AND
CustInvoiceJour.OrderAccount = CustTable.AccountNum
Вопрос в том равносильно ли это предыдущему запросу (в плане джойнов)
Цитата:
SELECT * FROM CustInvoiceJour WHERE ((InvoiceDate>={ts '2008-05-01 00:00:00.000'} AND InvoiceDate<={ts '2008-05-31 00:00:00.000'}))
JOIN * FROM CustTable WHERE CustInvoiceJour.OrderAccount = CustTable.AccountNum
JOIN * FROM CustTable WHERE CustInvoiceJour.InvoiceAccount = CustTable.AccountNum
upd
судя по данным - равносильно и можно обойтись без addSelectionField, выбирая сразу все поля.

Последний раз редактировалось Eldar9x; 08.08.2008 в 17:57.
Старый 10.08.2008, 01:47   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Попробуйте это:
Цитата:
1. Open the Microsoft Dynamics AX Server Configuration Utility.
2. Select a configuration that can be modified from the menu or create a new configuration (Manage > Create Configuration).
3. Click the Database Tuning tab.
4. In the Maximum Buffer Size field, enter a value higher than 24 (kilobytes).
5. Save the configuration.
6. Restart the AOS.
Старый 10.08.2008, 11:43   #15  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
2kashperuk:
Цитата:
А увеличивать Maximum Buffer size не разрешили... (хотя пробовали - помогает)
2Ameli: Я бы посоветовал попросить того кто не разрешил предложить варианты решения проблемы. Такая проблема иногда возникает, и нет гарантии что при дальнейшей разработке вы наткнетесь на те же грабли в другой задаче. И выворачивать на изнанку каждый раз запросы это не решение. Не просто так значение "Maximum Buffer" разработчики DAX сделали модифицируемымэ.
IMHO ничего криминального в увеличении Maximum Buffer нет, хотя нужно учесть Параметр Maximum buffer size в настройках AOS
Старый 11.08.2008, 09:40   #16  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
IMHO ничего криминального в увеличении Maximum Buffer нет
не согласен - излишнее потребление памяти, например.
Старый 11.08.2008, 11:34   #17  
Ameli is offline
Ameli
Участник
Аватар для Ameli
 
9 / 11 (1) +
Регистрация: 07.06.2006
Адрес: Киев
Попробовала заново создать форму, выбрала через AddSelectionField из каждого датасурса только RecId - ошибка не исчезла.

а запрос

SELECT RecId, SalesId FROM CustInvoiceJour
WHERE ((InvoiceDate>={ts '2008-08-08 00:00:00.000'} AND InvoiceDate<={ts '2008-08-08 00:00:00.000'}))
JOIN RecId FROM CustTable
WHERE
CustInvoiceJour.InvoiceAccount = CustTable.AccountNum AND
CustInvoiceJour.OrderAccount = CustTable.AccountNum

- задвоит накладные.

Попробуем все-таки пока что увеличить Maximum Buffer, надеюсь, AOS не свалится.

И все-таки не понятно, почему возникла такая проблема с этой формой, есть же куча подобных - и с двумя EmplTable, InventDim и т.д. и т.п.
Старый 11.08.2008, 11:41   #18  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
а запрос

- задвоит накладные.
пробовал оба варианта - с двумя (при увеличенном буфере, конечно) и с одним датасорсом. Сравнил выводимые на форме данные - строки полностью совпадают, ничего не задваивается. Надо не забыть только последний датасорс из формы выкинуть.
Старый 11.08.2008, 12:15   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от DSPIC Посмотреть сообщение
IMHO ничего криминального в увеличении Maximum Buffer нет
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
не согласен - излишнее потребление памяти, например.
Ну, думаю, до 40-60 КБ значение этого параметра можно увеличить довольно безболезненно. Чтобы были и волки сыты, и овцы целы.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как мне обновить Grid расположенный на другой форме? Yuri Safronov DAX: Программирование 17 22.01.2013 14:18
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15
Как не выводить заголовки в форме, если нет строк? DreamCreator DAX: Программирование 9 29.05.2008 15:10
Отличия в строках ReqPO, почему одна строка появляется в форме а другая нет (Master Planning, Planned Orders) rkorchagin DAX: Программирование 8 21.02.2007 16:27
BugFix: В форме складских журналов нельзя перемещаться с помощью клавиш курсора Maxim Gorbunov DAX: Программирование 5 21.01.2005 01:20

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:32.