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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.01.2011, 11:35   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Angry Странная ошибка(Ошибка времени выполнения: Неправильный тип индекса массива.)
Работал с методом обновления групп заработной платы. Всё хорошо...но при обновлении групп зп через карточку сотрудника меня выкидывает в дебагер и выдаёт вот такую ошибку:
Цитата:
Ошибка времени выполнения: Неправильный тип индекса массива.
а главное где она вылазит! В методе updateEmplGroup класса RPayGroupMemberEngine в операторе "if (queryRun.next())" Какой там массив!!??
X++:
       try
        {
            if (queryRun.next())
            {
                if (! RPayGroupMember::memberByGroup(emplId,_rPayGroupTable.PayGroup))
                {
                    RPayGroupMember::addMember(_rPayGroupTable.PayGroup,emplId);
                }
            }
            else
            {
                if (RPayGroupMember::memberByGroup(emplId,_rPayGroupTable.PayGroup))
                {
                    RPayGroupMember::deleteMember(_rPayGroupTable.PayGroup,emplId);
                }
            }
        }
        catch(Exception::Error)
        {
            infolog.clear(line);
            warning(strfmt("@HRP2195", _rPayGroupTable.PayGroup));
        }
И что самое интересно ведь должно сработать исключение. и как я понимаю оно потом отрабатывает после нажатия F5 и вот так нажимаешь несколько раз и процедура нормально отрабатывает. Как мне сделать так чтоб дибагер не вываливался? Кеш чистил, сброс данных делал, таблицу компильнул, синхронизировал, тоже с формой и классами которые задействованы.
Старый 21.01.2011, 11:39   #2  
AX2009
Гость
 
n/a
Рефреш АОД еще попробуйте.
потом глобально компильнуть, рестартуть АОС, Ударить в бубен
Старый 21.01.2011, 11:49   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ну, ошибки ядра могут и не перехватываться try..catch. А в данном случае надо посмотреть на пару строк выше. В смысле, на строку

queryRun = New QueryRun(new query(_rPayGroupTable.Query));

Другими словами, проверить тот запрос, который связан с данной группой зарплат. Ведь именно он пытается загрузится. А есть ли у него источники данных, которые пытаются установить далее?

queryRun.setRecord(virtualNetworkTable);
queryRun.setCursor(emplTable);

PS: Я бы еще посмотрел, а какой запрос пытается выполнится непосредственно перед queryRun.next() примерно так

info(queryRun.query().DataSourceNo(1).toString());

Последний раз редактировалось Владимир Максимов; 21.01.2011 в 11:54.
Старый 21.01.2011, 12:12   #4  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Query-ик я проверил через инфолог всё там нормально.
а код полностью это
X++:
private static void updateEmplGroup(RPayGroupTable _rPayGroupTable,
                                    Common         _common)

{
    EmplTable               emplTable;
    RHRMVirtualNetworkTable virtualNetworkTable;
    QueryRun                queryRun;
    EmplId                  emplId;
    int                     line;
    ;
    //BP Deviation Documented
    emplTable.setTmp();
    //BP Deviation Documented
    virtualNetworkTable.setTmp();

    ttsbegin;

    switch (_common.TableId)
    {
        case tablenum(EmplTable):
            emplTable.data(_common);
            emplTable.doInsert();
            virtualNetworkTable.data(RHRMVirtualNetworkTable::findEmplId(emplTable.EmplId));
            virtualNetworkTable.doInsert();
            break;
        case tablenum(RHRMVirtualNetworkTable):
            virtualNetworkTable.data(_common);
            virtualNetworkTable.doInsert();
            emplTable.data(EmplTable::find(virtualNetworkTable.EmplId));
            emplTable.doInsert();
            break;
    }

    ttscommit;

    emplId = emplTable.EmplId;
    if (emplId && _rPayGroupTable.hasQuery())
    {
        queryRun = new QueryRun(new Query(_rPayGroupTable.Query));
        queryRun.setRecord(virtualNetworkTable);
        queryRun.setCursor(emplTable);
        line = infolog.line();
        try
        {
            
//            info(queryRun.query().DataSourceNo(1).toString());
            if (queryRun.next())
            {
                if (! RPayGroupMember::memberByGroup(emplId,_rPayGroupTable.PayGroup))
                {
                    RPayGroupMember::addMember(_rPayGroupTable.PayGroup,emplId);
                }
            }
            else
            {
                if (RPayGroupMember::memberByGroup(emplId,_rPayGroupTable.PayGroup))
                {
                    RPayGroupMember::deleteMember(_rPayGroupTable.PayGroup,emplId);
                }
            }
        }
        catch(Exception::Error)
        {
            infolog.clear(line);
            warning(strfmt("@HRP2195", _rPayGroupTable.PayGroup));
        }

    }
}
этот класс я не модифицировал он стандартный. Клиент 4-ка. Единственное что я сделал это добавил в таблицу rPayGroupTable 3 поля, 2 даты и одно поле содержащий мой запрос, но он тут не отрабатывает даже, а отрабатывает в другом месте и причём хорошо...
Старый 21.01.2011, 13:57   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Структура таблицы rPayGroupTable в данном случае никакой роли не играет.

Когда Вы создаете группу зарплат, то в этой форме есть кнопочка "Запрос". Если ее нажать, то есть возможность сформировать Query, который впоследствии будет использоваться для получения списка сотрудников, относящихся к этой группе.

А где сохраняется структура этого запроса? А оно как раз и записывается в поле rPayGroupTable.Query.

Вот я и говрою, попробуйте повторить сохранение этого запроса. Очевидно, какая-то нестыковка между тем, что сохранено в поле rPayGroupTable.Query и структурой таблиц RHRMVirtualNetworkTable и emplTable
Старый 21.01.2011, 14:15   #6  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Владимир Максимов я просмотрел формируемые запросы, там вроде всё ок. Попытался перекинуть проект на другое приложение и запустил обновление групп... всё отработало на ура. Попробую перекомпилить приложение и перестартануть AOS. о результате отпишусь
Старый 21.01.2011, 14:23   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Надо не "смотреть" запрос, а "тупо" пересохранить! Делов-то, нажать кнопку "Запрос", потом "Ok".
За это сообщение автора поблагодарили: raniel (1).
Старый 21.01.2011, 14:45   #8  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Владимир Максимов спасибо! Я правда уже всё приложение перекомпилировал, но именно ваш совет пересоздать запрос помог. Спасибо!
Теги
query, queryrun, ошибка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Странная ошибка "компания не существует" andriy_s DAX: Функционал 4 06.04.2010 18:38
Странная ошибка при работе в трехзвенке. malex DAX: Администрирование 8 02.05.2008 03:33
странная ошибка AX 3.0 SP4 Evgeniy2020 DAX: Программирование 1 03.03.2008 08:36
Странная ошибка выскакивает при поиске? Hidden DAX: Программирование 10 13.10.2006 11:32
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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