|
|
|
|
#1 |
|
Программер
|
Запрос выдает не все данные
Простой перебор строк while select myTable, без всяких условий. В таблице 8 записей, но выбираются только 4. Как такое может быть?
Такое поведение не на пустом месте. Такое поведение на стандартом функционале. И возможно что-то делается специально, чтобы был такой результат. Но что именно найти не могу. Поэтому нужно узнать, каким образом такое можно сделать. Последний раз редактировалось vasiliy; 09.09.2015 в 16:32. |
|
|
|
|
#2 |
|
Гость
|
Компания одна?
|
|
|
|
|
#3 |
|
Программер
|
Компания одна.
|
|
|
|
|
#4 |
|
Участник
|
А внутри цикла данные случайно не апдейтятся? А кэширование таблицы какое?
|
|
|
|
|
#5 |
|
Программер
|
Кэширование FoundAndEmpty.
Более детально, это таблица в управлении складом whsTmpWorkLine. В цикле никаких апдейтов. И даже условий where никаких. |
|
|
|
|
#6 |
|
Участник
|
судя по названию таблицы, у вас ax2012.
и похоже это временная таблица. для временной таблицы в каждом экземпляре табличной переменной находится свой набор записей. как проверяете, что в таблице 8 или 4 записи? проверяете одну и ту же табличную переменную или разные? |
|
|
|
|
#7 |
|
Участник
|
Цитата:
ax2009 и ниже: по этой таблице включен RLS и у табличной где то вызван метод myTable.recordLevelSecurity(true); |
|
|
|
|
#8 |
|
Программер
|
Кэширование не влияет. Подставлял forupdate, менял у таблицы свойтво на none. Результат тот же.
|
|
|
|
|
#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 |
|
Участник
|
Цитата:
Что-то вроде: X++: select generateonly RecId from YourTable; // (можно добавить условия while, если есть) info(YourTable.getSQLStatement()); |
|
|
|
|
#16 |
|
Программер
|
Цитата:
X++: SELECT T1.RECID FROM WHSTMPWORKLINE T1 WHERE ((PARTITION=?) AND (DATAAREAID=?)) |
|
|
|
|
#17 |
|
Программер
|
dataArea и Partition у всех записей одинаковые.
|
|
|
|
|
#18 |
|
Участник
|
поставьте точки останова в методах aosValidateInsert и aosValidateDelete и попробуйте потрейсить ваш эксперимент
|
|
|
|
| За это сообщение автора поблагодарили: gl00mie (2). | |
|
|
#19 |
|
Мрачный тип
|
Системным хроноложеством не грешили на данной таблице ?
Нет ли в структуре таблицы полей ValidFrom, ValidTo ?
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
|
| За это сообщение автора поблагодарили: mazzy (2). | |
|
|
#20 |
|
Участник
|
Цитата:
ax2012 - почему не находит по RecID УЖЕ существующую запись? |
|
|
|
|
|