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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.08.2006, 11:21   #1  
laxer is offline
laxer
Участник
 
41 / 10 (1) +
Регистрация: 23.06.2005
Проблема с количеством в QueryBuildRange.Value()
Доброго времени суток! Подскажите пож-та в такой ситуации:
У меня на методе active() одного датасорса происходит вызов QueryBuildRange.Value(x1, x2,.., xn) для фильтрации другого датасорса. И если в метод value() передается много знач. (для 3х все работает норм.) то после нескольких срабатываний active() Аксапта вылетает... Помогите выбраться из сложившейся ситуации
Старый 29.08.2006, 11:33   #2  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
а как она "вылетает" ? Может выдается ошибка SQL-инструкции?
Старый 29.08.2006, 11:37   #3  
laxer is offline
laxer
Участник
 
41 / 10 (1) +
Регистрация: 23.06.2005
Microsoft Business Solutions-Axapta - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.
Просит отправить отчет в Microsoft и т.д...
Старый 29.08.2006, 12:01   #4  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Возможно нужно каждый раз делать qbds.clearRanges?
Старый 29.08.2006, 12:03   #5  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Опишите что за источники, по какому полю идет фильтрация, что за переменные x1, x2,.., xn
Старый 29.08.2006, 12:11   #6  
Hezl is offline
Hezl
Участник
Аватар для Hezl
 
138 / 16 (1) ++
Регистрация: 21.04.2004
Адрес: Moscow, Russia
И за одно скажите, много - это сколько?
__________________
Безвыходным мы называем положение, выход из которого нам не нравится.
Старый 29.08.2006, 12:15   #7  
laxer is offline
laxer
Участник
 
41 / 10 (1) +
Регистрация: 23.06.2005
Источники простые - табл. шапка и табл. строки, переменные - это просто значения itemId по которому связаны таблицы.
Смысл такой: когда я передвигаюсь по строкам шапки фильтруется табл. строк, но только теми значениями которыми я передаю в QueryBuildRange.Value()...
Например для одной записи табл. шапки это будет QueryBuildRange.Value(1, 2, 3) а для другой QueryBuildRange.Value(5, 6, 7, 8).
Кстати Аксапта вылетает не только когда несколько раз вызовется active(), достаточно просто закрыть эту форму
Может другой способ есть как это реализовать?
Старый 29.08.2006, 12:46   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
1. Попробуйте таки перед присвоением новых значений делать
QBDS.clearRange(fieldNum(YourTable, ItemId));
2. Вы так числа и передаете? или это вы описались?
Добавьте еще queryValue вызов
То есть QBR.value(queryValue("'Н1', 'Н2', 'Н3'"));
3. Показывайте код метода active();
(а почему бы не делать это на executeQuery подчиненного датасорса?)
Старый 29.08.2006, 12:48   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А QueryBuildRange вы где и как получаете?
__________________
Axapta v.3.0 sp5 kr2
Старый 29.08.2006, 13:04   #10  
laxer is offline
laxer
Участник
 
41 / 10 (1) +
Регистрация: 23.06.2005
Подчиненный датасорс:
PHP код:
public void init()
{
    
super();

    
qbr_ItemId this.query().dataSourceTable(tablenum(DVS_InventZvkLines)).
        
addRange(fieldnum(DVS_InventZvkLinesItemId));
    
qbr_ItemId.status(RangeStatus::Hidden);


Главный датасорс:
PHP код:
public active()
{

    
qbr_ItemId.value(element.selectItems(DVS_InventZvkTable.ZwkId));


метод element.selectItems() возвращает строку значений itemId
Вот и все что есть.
Старый 29.08.2006, 13:13   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
У вас датасоурсы связаны друг с другом?

И еще.
Почему метод Active() не возвращает значения и нет вызова super() или это вы сокращенно опубликовали?
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 29.08.2006 в 13:21.
Старый 29.08.2006, 13:21   #12  
laxer is offline
laxer
Участник
 
41 / 10 (1) +
Регистрация: 23.06.2005
Цитата:
Сообщение от AndyD
У вас датасоурсы связаны друг с другом?
связаны, сократил

Последний раз редактировалось laxer; 29.08.2006 в 13:23.
Старый 30.08.2006, 08:07   #13  
ntr is offline
ntr
Участник
 
31 / 16 (1) ++
Регистрация: 26.05.2006
Может в строке, полученной в selectItemd() - слишком много значений? 472 - максимальное количество
Старый 30.08.2006, 10:17   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
откуда такие сведения про 472?
То что строка ограничена понятно, но думаю что по длине, а не по количеству значений.
Поправьте если неправ
Старый 30.08.2006, 10:54   #15  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Хм... Ради интереса проверил...
Вот это - вылетает.
А если поменять 475 на 474 - работает.
При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется...
X++:
static void Job666(Args _args)
{
    query   q;
    QueryBuildDataSource qbds;
    QueryBuildRange qbr;
    QueryRun qr;
    LedgerJournalTable l;
    str a;
    int i;

    #define.MaxLength(475)
;
    for (i=1;i<#MaxLength;i++)
    {
        a+=int2str(i)+',';
    }
    a+=int2str(#MaxLength);
    q =new Query();
    qbds = q.addDataSource(tablenum(LedgerJournalTable));
    qbr = qbds.addRange(fieldNum(LedgerJournalTable, journalNum));
    qbr.value(a);
    qr = new queryRun(q);
    while (qr.next())
    {
        l = qr.getNo(1);
        print l.JournalNum;
    }
 }

Последний раз редактировалось oip; 30.08.2006 в 15:51.
За это сообщение автора поблагодарили: slava (1).
Старый 30.08.2006, 11:03   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
у меня работает и при MaxLength(1000)
10000 уже не потянул.

и я имел ввиду, что если, к примеру, вместо чисел 1.. были бы более длинные числа, типа

a+= '00000'+int2str(i) + ',';

то вылетало бы уже меньше чем при 474
Может и нет, конечно
Старый 30.08.2006, 11:05   #17  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от kashperuk
у меня работает и при MaxLength(1000)
10000 уже не потянул.
А версия аксапты какая? У меня СП4 + MS SQL 2000.

Цитата:
Сообщение от kashperuk
и я имел ввиду, что если, к примеру, вместо чисел 1.. были бы более длинные числа, типа
a+= '00000'+int2str(i) + ',';
то вылетало бы уже меньше чем при 474
Может и нет, конечно
В том-то и дело, что нет!
Я же написал:
"При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... "

Последний раз редактировалось oip; 30.08.2006 в 11:10.
Старый 30.08.2006, 11:10   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ага. я тоже проверил только что.
Аксапта: 3.0 SP3 трехзвенка, Oracle 10g

2000 слагаемых уже тоже не тянет.
За это сообщение автора поблагодарили: oip (1).
Старый 30.08.2006, 11:11   #19  
ntr is offline
ntr
Участник
 
31 / 16 (1) ++
Регистрация: 26.05.2006
474 это не длина ренджа, а количество элементов в нем
Старый 30.08.2006, 11:13   #20  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от kashperuk
Ага. я тоже проверил только что.
Аксапта: 3.0 SP3 трехзвенка, Oracle 10g
2000 слагаемых уже тоже не тянет.
Думаю ключевое слово - Oracle.
Проверил у себя на сп3 - тоже 474.
Оракла нет, поэтому проверить не могу.

Цитата:
Сообщение от ntr
474 это не длина ренджа, а количество элементов в нем
Спасибо, но мы это понимаем.
"При этом если увеличивать длину ренджа, а не кол-во элементов - ничего не меняется... "

Последний раз редактировалось oip; 30.08.2006 в 11:15.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с единицей измерения longson DAX: Программирование 4 16.07.2007 14:35
lookup - проблема. Помогите! kashperuk DAX: Программирование 14 10.12.2004 15:28
проблема отрицаний в QueryBuildRange kgksoft DAX: Программирование 2 21.06.2004 17:02
Проблема: русские шрифты в отчетах, формируемых на сервере. Anais DAX: Администрирование 3 17.11.2003 13:20
Появление фактур в Закупках с неправильным количеством AndrY DAX: Функционал 3 03.11.2003 16:27

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

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

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