21.06.2011, 12:17 | #1 |
Участник
|
От перестановки условий меняется результат
На АХ4 и АХ2009 замечен интересный глюк. Результат запроса в цикле зависит от положения полей в условии.
PHP код:
1 11365 |
|
|
За это сообщение автора поблагодарили: mazzy (2), Maximin (2), lev (1). |
21.06.2011, 12:23 | #2 |
Участник
|
прикольно. подтверждаю.
|
|
21.06.2011, 12:27 | #3 |
Участник
|
Цитата:
У таблицы EmplTable стандартная установка CahceLookup = Found Первый select совпадает с PrimaryIndex, а второй нет. Поэтому кэширование на первый влияет, а на второй - нет. Поставьте CahceLookup = NotInTTS (примечание - это очень плохо подействует на расчет зарплаты в модуле RPay) Последний раз редактировалось mazzy; 21.06.2011 в 12:30. Причина: добавил примечание про RPay |
|
21.06.2011, 12:28 | #4 |
Ищущий знания...
|
на Ах3.0 SP3 то же самое
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.06.2011, 12:31 | #5 |
Ищущий знания...
|
Цитата:
Сообщение от mazzy
Это побочный эффект от кэширования.
У таблицы EmplTable стандартная установка CahceLookup = Found Первый select совпадает с PrimaryIndex, а второй нет. Поэтому кэширование на первый влияет, а на второй - нет. Поставьте CahceLookup = NotInTTS (примечание - это очень плохо подействует на расчет зарплаты в модуле RPay) попробовал установить CahceLookup = NotInTTS - тот же эффект
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.06.2011, 12:33 | #6 |
Боец
|
Поставьте между SELECT'ами:
X++: ...
emplTable = null;
... X++: ...
emplTable.EmplId = '';
... |
|
21.06.2011, 12:45 | #7 |
Участник
|
|
|
21.06.2011, 12:48 | #8 |
Участник
|
Цитата:
странно. |
|
21.06.2011, 12:48 | #9 |
Ищущий знания...
|
Цитата:
написал джоб через query нормально отрабатывает при любом положении условий: X++: static void Job47(Args _args) { Query query = new Query(); QueryBuildDataSource qbds = query.addDataSource(tableNum(EmplTable)); QueryRun queryRun; ; qbds.addRange(fieldNum(EmplTable, RecId)).value(strFmt('(%1 == %2)', fieldStr(EmplTable, EmplId), fieldStr(EmplTable, PayMainEmplId_Ru))); info(qbds.toString()); queryRun = new QueryRun(query); info(strFmt('%1', SysQuery::countLoop(query.pack()))); qbds.clearRange(fieldNum(EmplTable, RecId)); qbds.addRange(fieldNum(EmplTable, RecId)).value(strFmt('(%1 == %2)', fieldStr(EmplTable, PayMainEmplId_Ru), fieldStr(EmplTable, EmplId))); info(qbds.toString()); queryRun = new QueryRun(query); info(strFmt('%1', SysQuery::countLoop(query.pack()))); }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.06.2011, 12:50 | #10 |
Ищущий знания...
|
ага. Сейчас нет под рукой 2009 ахи чтоб попробовать.
но в Ax3.0 перепробовал все значения свойства CahceLookup результат всегда один
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
21.06.2011, 12:51 | #11 |
Участник
|
Нормально отработает при добавлении любого дополнительного условия
например "&& emplTable.EmplId" Но именно в таком виде - не правильно |
|
21.06.2011, 13:22 | #12 |
Участник
|
mazzy прав - дело в кэше.
Попробуйте вызвать emplTable.disableCache(true); перед проблемным запросом
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: lev (2). |
21.06.2011, 13:37 | #13 |
Ищущий знания...
|
в Ах 3.0 это помогло!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Меняется шрифт при печати отчетов на принтере | 4 | |||
непонятный результат str2date | 19 | |||
Результат обработки закупки на возврат | 6 | |||
Результат зароса в грид | 2 | |||
Передача условий в отчет | 4 |
|