|
02.04.2012, 12:51 | #1 |
Участник
|
В форме по вьюхе показываются не все строки
Добрый день всем.
Столкнулись вот со следующей проблемой, причину которой не можем никак понять: Есть форма, она работает по вьюхе (вьюха переопределенная в sql). 1. При выполнении запроса по всей вьюхе - показывается 10 строк, если нажать итоги - считает нужное количество - около 20000. 2. Начинаем фильтровать запрос - отрабатывает корректно и показвыает правильное количество строк (в том числе, если использовать расширенный фильтр или фильтр по сетке), но как только пытаемся фильтровать по группе, которая в итоге должна показать всё - снова эти 10 строк. Можно нажать упорядочить по полю - и тоже запрос отрабатывает, но остаются только 10 строк. (Видно, что данные изменились по условиям сортировки, но строк мало) 3. Проверяли в sql - вьюха корректная, показывает верное количество строк. Форму компилировали. Аос перегрузили. Один раз такое было, но потом прошло само.. У кого-нибудь есть идеи, почему на форме отображаются не все строки? Может ли быть, что, начиная с какого-то объема данных, на форме не могут быть отражены все строки(в случае если это вьюха, например)? |
|
02.04.2012, 13:23 | #2 |
Участник
|
Хотела добавить, что раньше все работало, кроме одного раза, который, как я писала раньше, прошел сам.
|
|
02.04.2012, 13:43 | #3 |
Роман Долгополов (RDOL)
|
при просмотре через в обозреватель таблиц то же 10 строк?
каким образом заполняются RecId в переопределенном представлении? |
|
02.04.2012, 14:45 | #4 |
Участник
|
"при просмотре через в обозреватель таблиц то же 10 строк"
Вообще не удается дождаться выполнения запроса. Так как в форме при открытии еще фильтр накладывается, а тут нет. RecId заполняется значениями RecId основной таблицы вьюхи |
|
02.04.2012, 15:26 | #5 |
Участник
|
В памяти есть похожий случай, который встречался при связи LEFT JOIN: если значение поля в привязанной таблице равно NULL, тогда следует заменить его значение на 0 или символ пустой строки (не помню его код, но отображается как квадрат в кавычках) в зависимости от типа данных. Вот пример кода:
X++: "CASE WHEN ИМЯ_ТАБЛИЦЫ.ИМЯ_ПОЛЯ IS NULL THEN 0 ELSE ИМЯ_ТАБЛИЦЫ.ИМЯ_ПОЛЯ END AS АЛИАС, \n"+ P.S. СУБД Oracle.
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 02.04.2012 в 15:29. |
|
|
За это сообщение автора поблагодарили: db (2). |
02.04.2012, 15:50 | #6 |
Участник
|
Еще вариант:
Проверьте соответствие полей, по которым вы осуществляете связь. В случае, если в ваших расширенных типах данных стоит свойство Alignment, например, равное "Right", то не исключено, что в Аксапте отступ будет заполнен пробелами, что в свою очередь может привести к нарушению связи, поэтому в sql-запросе лучше всего использовать функцию SUBSTR, пример кода: X++: "(SUBSTR(NLS_LOWER(ТАБЛИЦА1.ПОЛЕ_СВЯЗИ),1,20) = SUBSTR(NLS_LOWER(ТАБЛИЦА2.ПОЛЕ_СВЯЗИ),1,20)) \n"+ Еще нужно отметить, что в Аксапте важна длина расширенных типов связываемых полей - если она будет разной, связь не сработает.
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 02.04.2012 в 15:53. |
|
02.04.2012, 16:27 | #7 |
Участник
|
К сожалению ли, к радости ли, заработало опять само...
Но я на всякий случай учла ваши рекомендации во вьюхе, надеюсь, ошибка повторяться не будет. Спасибо за советы. |
|
02.04.2012, 15:14 | #8 |
Роман Долгополов (RDOL)
|
ну всё таки дождитесь лучше
RecId уникального я так понимаю нет? Была похожая ситуация в 3.0 когда таблица (не вьюха) заполнялась средствами БД без уникального RecId. При этом был другой уникальный индекс был. Симптомы похожие - не видно некоторых записей в форме, после фильтрации и сортировки появлялись. Вылечилось шаманскими способами передвиганием столбцов в этом уникальном индексе, но вам это не подходит Если значения в RecId не уникальные, то попробуйте все таки сделать их таковымы. Можно попробовать использовать для этого ROW_NUMBER() OVER (ORDER BY ...) Последний раз редактировалось db; 02.04.2012 в 15:18. |
|
|
|