![]() |
#1 |
Программер
|
Запрос выдает не все данные
Простой перебор строк while select myTable, без всяких условий. В таблице 8 записей, но выбираются только 4. Как такое может быть?
Такое поведение не на пустом месте. Такое поведение на стандартом функционале. И возможно что-то делается специально, чтобы был такой результат. Но что именно найти не могу. Поэтому нужно узнать, каким образом такое можно сделать. Последний раз редактировалось vasiliy; 09.09.2015 в 16:32. |
|
![]() |
#2 |
Гость
|
Компания одна?
|
|
![]() |
#3 |
Программер
|
Компания одна.
|
|
![]() |
#4 |
Участник
|
А внутри цикла данные случайно не апдейтятся? А кэширование таблицы какое?
|
|
![]() |
#5 |
Программер
|
Кэширование FoundAndEmpty.
Более детально, это таблица в управлении складом whsTmpWorkLine. В цикле никаких апдейтов. И даже условий where никаких. |
|
![]() |
#6 |
Участник
|
Цитата:
ax2009 и ниже: по этой таблице включен RLS и у табличной где то вызван метод myTable.recordLevelSecurity(true); |
|
![]() |
#7 |
Программер
|
Кэширование не влияет. Подставлял forupdate, менял у таблицы свойтво на none. Результат тот же.
|
|
![]() |
#8 |
Участник
|
судя по названию таблицы, у вас ax2012.
и похоже это временная таблица. для временной таблицы в каждом экземпляре табличной переменной находится свой набор записей. как проверяете, что в таблице 8 или 4 записи? проверяете одну и ту же табличную переменную или разные? |
|
![]() |
#9 |
Программер
|
да, у нас 2012
если в дебагере оборвать выполнение, в таблице остается 8 записей. у таблицы свойство tableType = Regular |
|
![]() |
#10 |
Программер
|
Нет, никаких наследований.
|
|
![]() |
#11 |
Гость
|
А можно привести полностью эксперимент?
Просто смотрю как создается для примера в классе WhsWorkCreate метод createTempLine там кроме insert есть и delete. В общем сложно как то без чистоты эксперимента. X++: WHSTmpWorkLine WHSTmpWorkLine; int i; while select WHSTmpWorkLine { info(strFmt("%1", WHSTmpWorkLine.recID)); } /* for (i =1; i <= 8; i++) { WHSTmpWorkLine.clear(); WHSTmpWorkLine.WorkCreateId = '1'; WHSTmpWorkLine.setLineNum(); WHSTmpWorkLine.doInsert(); } */ info("s"); Последний раз редактировалось axm2013; 09.09.2015 в 17:42. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#12 |
Программер
|
запрос в базу без условий также
X++: FROM WHSTMPWORKLINE T1 WHERE ((PARTITION=?) AND (DATAAREAID=?)) |
|
![]() |
#13 |
Программер
|
В этом то и дело. Через job я также создавал и все читалось нормально. А вот при работе функций читает не все.
Эксперимент, это функция Обработать, на форме Все волны (упр. складом) (обработка волны, создание работ и пополнения). В частности у нас два раза вызывается \Classes\WHSWorkCreateReplenishment. И там есть метод findReplenishmentPutLocation. Вот при втором проходе и не читаются записи созданные при первом проходе. |
|
![]() |
#14 |
Гость
|
А можете посмотреть чем у 8 записей заполнены DataAreaID и PARTITION?
Просто смущает что нет явного задания. Можете свойства SaveDataPerCompany и SaveDataPerPartition + прочее в No поставить? |
|
![]() |
#15 |
Программер
|
dataArea и Partition у всех записей одинаковые.
|
|
![]() |
#16 |
Участник
|
поставьте точки останова в методах aosValidateInsert и aosValidateDelete и попробуйте потрейсить ваш эксперимент
|
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
![]() |
#17 |
Участник
|
Цитата:
Что-то вроде: X++: select generateonly RecId from YourTable; // (можно добавить условия while, если есть) info(YourTable.getSQLStatement()); |
|
![]() |
#18 |
Мрачный тип
|
Системным хроноложеством не грешили на данной таблице ?
Нет ли в структуре таблицы полей ValidFrom, ValidTo ?
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#19 |
Участник
|
Цитата:
ax2012 - почему не находит по RecID УЖЕ существующую запись? |
|
![]() |
#20 |
Программер
|
validTimeStateFieldType = None
|
|
|
|