21.01.2011, 11:35 | #1 |
Участник
|
Странная ошибка(Ошибка времени выполнения: Неправильный тип индекса массива.)
Работал с методом обновления групп заработной платы. Всё хорошо...но при обновлении групп зп через карточку сотрудника меня выкидывает в дебагер и выдаёт вот такую ошибку:
Цитата:
Ошибка времени выполнения: Неправильный тип индекса массива.
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)); } |
|
21.01.2011, 11:39 | #2 |
Гость
|
Рефреш АОД еще попробуйте.
потом глобально компильнуть, рестартуть АОС, Ударить в бубен |
|
21.01.2011, 11:49 | #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 |
Участник
|
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)); } } } |
|
21.01.2011, 13:57 | #5 |
Участник
|
Структура таблицы rPayGroupTable в данном случае никакой роли не играет.
Когда Вы создаете группу зарплат, то в этой форме есть кнопочка "Запрос". Если ее нажать, то есть возможность сформировать Query, который впоследствии будет использоваться для получения списка сотрудников, относящихся к этой группе. А где сохраняется структура этого запроса? А оно как раз и записывается в поле rPayGroupTable.Query. Вот я и говрою, попробуйте повторить сохранение этого запроса. Очевидно, какая-то нестыковка между тем, что сохранено в поле rPayGroupTable.Query и структурой таблиц RHRMVirtualNetworkTable и emplTable |
|
21.01.2011, 14:15 | #6 |
Участник
|
Владимир Максимов я просмотрел формируемые запросы, там вроде всё ок. Попытался перекинуть проект на другое приложение и запустил обновление групп... всё отработало на ура. Попробую перекомпилить приложение и перестартануть AOS. о результате отпишусь
|
|
21.01.2011, 14:23 | #7 |
Участник
|
Надо не "смотреть" запрос, а "тупо" пересохранить! Делов-то, нажать кнопку "Запрос", потом "Ok".
|
|
|
За это сообщение автора поблагодарили: raniel (1). |
21.01.2011, 14:45 | #8 |
Участник
|
Владимир Максимов спасибо! Я правда уже всё приложение перекомпилировал, но именно ваш совет пересоздать запрос помог. Спасибо!
|
|