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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.03.2008, 18:13   #1  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
:( Ошибка времени выполнения
Есть такая ошибка:
"Ошибка времени выполнения. : Неправильные типы аргументов в операции присвоения значения переменной."
Наверное каждый человек, программирующий на MorphX такое видел (я в принципе тоже встречал ). Но такого еще не было.
Есть отчет, состоящий из двух частей: серверной (занимающийся выборкой данных) и клиентской (выгрузка в Excel). Збоит на клиентской части при передачи контейнера с данными от сервера, верне когда идет возврат значения из него (контейнер передается, правда при просмотре под отладчиком вылетает ). Подскажите, что может быть.
Спасибо!
Старый 05.03.2008, 13:05   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,699 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Вообще-то, подобные сообщения об ошибках надо понимать буквально. Вот что написано, то и есть. Приведите пример кода передачи контейнера. Кстати, какая версия Axapta?
Старый 05.03.2008, 13:19   #3  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Цитата:
Сообщение от Didukh84 Посмотреть сообщение
Есть такая ошибка:
"Ошибка времени выполнения. : Неправильные типы аргументов в операции присвоения значения переменной."
Наверное каждый человек, программирующий на MorphX такое видел (я в принципе тоже встречал ). Но такого еще не было.
Есть отчет, состоящий из двух частей: серверной (занимающийся выборкой данных) и клиентской (выгрузка в Excel). Збоит на клиентской части при передачи контейнера с данными от сервера, верне когда идет возврат значения из него (контейнер передается, правда при просмотре под отладчиком вылетает ). Подскажите, что может быть.
Спасибо!
Возможно, у Вас подобная ошибка?
Значение по умолчанию параметра типа EDT c array elements либо просто массива
Старый 05.03.2008, 13:58   #4  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Версия Axapta 3.0 SP3. Ссылка не подходит в виду того, що из контейнера вытягивается значение типа NoYes. Самое интересное, что в методах, что работают после него все работает отлично!
Пример кода:
FileName getFileName()
{
FileName ret;
container con = salesReport_Enclosures.dlgParameters();
TransDate reportDate = conpeek(con, 11);
str tmpStr;
NoYes inclSales = conpeek(con, 16), inclExport = conpeek(con, 17), inclTHT = conpeek(con, 18);
Dimension dimension = conpeek(con, 12);
....
}
Ошибка вылетает при инициализации reportDate уже.
При работе отладчика видно что контейнер значение получил (размер стал равным 22). Но просмотреть их нельзя - выкидывает из Системы. Следующие методы, который выполняются за этим работают нормально. Кстати, тип возвращаемого значения аналогичных типу переменной (проверял).
Да, кстати, класс объекта salesReport_Enclosures (NMF_SalesReport_EnclosureSalesAnalysis) является наследником абастрактного класса NMF_SalesReport_Enclosures extends RunBase и выполняется на сервере
Старый 05.03.2008, 14:02   #5  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
:)
Ну проблему я решил (может кому пригодится!).
я в классах создал parm методы и работает вроде без ошибок. Правда хотелось бы знать в чем ошибка старого варианта....
Старый 05.03.2008, 14:03   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А попробуйте перед каким-либо присовением из контейнера сделать

print con2str(con, ' --- ');
pause;

и посмотрите, что будет на 11 месте. Возможно там совсем не дата?
Старый 05.03.2008, 15:38   #7  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
А попробуйте перед каким-либо присовением из контейнера сделать

print con2str(con, ' --- ');
pause;

и посмотрите, что будет на 11 месте. Возможно там совсем не дата?
да, попробовал. Действительно там не дата! Просто в контейнер заносятся пустые значение строковые , но при этом в объектах контейнер их нету!!!!. Получается, что если добавлять пустые значение строковые, а потом значения то при этом увеличивается размер контейнера, а значения фактически смещены... . Для проверки можно посмотреть результат выполнения кода
X++:
str StrTmp = "";

    container con = connull();
    ;
    //заполняем контейнер
    con = [strTmp, strTmp, 3, 4, strTmp, 5];
    // выводим размер контейнера
    info(strfmt("Длина контейнера - %1", conLen(con)));
    info(con2str(con, "++_"));
Скорее всего это баг...
Старый 05.03.2008, 15:52   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
это баг con2str
AxPath://AOT/Classes/Global/con2Str?line=12&pos=13
X++:
  if (retStr)
            retStr += sep;
Старый 05.03.2008, 16:09   #9  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
это баг con2str
AxPath://AOT/Classes/Global/con2Str?line=12&pos=13
Согласен.
Но тогда не понятно, почему у меня слетает функция conpeek()? У меня предположение, что когда происходит передача контейнера то выполняется его дефрагментация...
Старый 05.03.2008, 16:16   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Попробуй вместо con2str применить эту функцию:

X++:
/// returns the string representation of given argument
str toStr(AnyType _value)
{
    Object o;
    int i;
    str ret;
;
    if(typeOf(_value)==Types::AnyType && !_value)
        return '<NoResult>';
    if(typeOf(_value)==Types::Class)
    {
        o=_value;
        return strFmt('%1', o.toString());
    }
    if(typeOf(_value)==Types::Container)
    {
        for(i=1;i<=conLen(_value);i++)
        {
            if(ret)
                ret+=", ";
            ret += this.toStr(conPeek(_value, i));
        }
        return "["+ret+"]";
    }
    if(typeOf(_value)==Types::String || typeOf(_value)==Types::VarString)
    {
        return strFmt("'%1'", _value);
    }
    return strFmt('%1', _value);
}
Старый 05.03.2008, 16:44   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,699 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если подозрение падает на один конкретный элемент контейнер, зачем же весь контейнер разворачивать. Этот один элемент и надо посмотреть

X++:
print typeOf(conPeek(con,11));
print conPeek(con,11);
pause;
Старый 05.03.2008, 17:51   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Человек тут написал:
Цитата:
Кстати, тип возвращаемого значения аналогичных типу переменной (проверял).
Поэтому предполагается, что такой код уже выполнялся
Старый 05.03.2008, 18:12   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А вы не могли бы сделать такое:
X++:
    ContainerClass cc;
    ;
    ...
    cc = new ContainerClass(con);
    info(BinData::dataToString(cc.toBlob()));
и выложить сюда результат?
__________________
Axapta v.3.0 sp5 kr2
Старый 05.03.2008, 18:28   #14  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Сделал. Результат мне правда ни о чем не говорит
0700000000000005000000000024080027c40000000000000000250800040000
000000000000000000036b0000036c00002008000b00d3c3ca5f303100000000
0000000004001df0007275000055414800040033c404011df004011df004001d
f000473a5c4d79446f630004001df004001df0ff
Старый 05.03.2008, 18:30   #15  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
Человек тут написал:
Цитата:
Кстати, тип возвращаемого значения аналогичных типу переменной (проверял).
Поэтому предполагается, что такой код уже выполнялся
Ну вообще-то он перед здачей в эксплуатацию тестировался... Правда не мной
Старый 05.03.2008, 18:36   #16  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а toStr( что возвращает?
Старый 05.03.2008, 18:49   #17  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
а toStr( что возвращает?
Ошибку .
Еще момент: в контейнере присутствуют массивы EDT. Возможно, что они не хранят каких-то значений (я смотрел ссылку приведенную вначале топика ), но я то к ним не обращаюсь!. И еще нюанс:
Этот код выдает ошибку:
X++:
NoYes       inclExport  = conpeek(con, 17)
А это работает нормально:
X++:
    info(strfmt('№ елемента - %1, тип - %2', 17, typeOf(conPeek(con,17))));
    info(strfmt('№ елемента - %1, значение - %2', 17, conpeek(con, 17)));
мистика...
Старый 05.03.2008, 18:53   #18  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
а toStr( что возвращает?
возвращет ошибку, но это на массив...
Старый 05.03.2008, 22:42   #19  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
У меня с этим контейнером работает без ошибок (если не обращаться к массивам)
Можно попробовать удалить их из контейнера
X++:
con = condel(con, 7, 1);
con = condel(con, 7, 1);
dimension = conpeek(con, 10);
con = condel(con,10, 1);
conview(con);
обращаться к элементам надо будет, конечно, со сдвигом.
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 05.03.2008 в 22:46.
Старый 06.03.2008, 09:11   #20  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Да, согласен, можно пробовать удалять (если знать порядок ). Спасибо всем за советы ,проблему решил через parm_ методы. Пока работает.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка времени выполнения Фаткуллов Ренат DAX: Функционал 8 10.04.2009 10:56
Ошибка времени выполнения Stas[SNRC] DAX: Программирование 6 12.03.2008 12:21
Ошибка времени выполнения: Binary (Объект), метод string вызван с недопустимыми параметрами. mmm DAX: Программирование 4 15.05.2007 16:00
Ошибка времени выполнения при компиляции проекта nicko DAX: Администрирование 4 30.08.2006 11:38
Ошибка времени выполнения. Pegiy DAX: Программирование 2 27.05.2004 16:26

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

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

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