26.10.2012, 15:12 | #1 |
Enjoy!
|
Ошибка времени выполнения. Переполнение во внутреннем стеке исполнения кода.
Ошибка времени выполнения. Переполнение во внутреннем стеке исполнения кода.
Привет. помогите разобраться в чем может быть проблема. Не рекурсия(по-моему). X++: while(...) { while select officialsTable_RUOrig { buf2buf(officialsTable_RUOrig, OfficialsTable_RU); OfficialsTable_RU.insert(); } } Заметил, что если комментирую вызов данного метода, то вываливается вообще в другом месте, при другой инициализации DictTable класса. X++: static void buf2Buf( Common _from, Common _to ) { DictTable dictTable = new DictTable(_from.TableId); fieldId fieldId = dictTable.fieldNext(0); while (fieldId && ! isSysId(fieldId)) { _to.(fieldId) = _from.(fieldId); fieldId = dictTable.fieldNext(fieldId); } } Делал: глобальную компиляцию, чистил SysLastValue. Последний раз редактировалось iCloud; 26.10.2012 в 15:16. |
|
26.10.2012, 15:19 | #2 |
Программатор
|
попробуйте такое
X++: static Common copyRecord(Common _fromRecord, Common _toRecord) { DictTable dt = new DictTable(_fromRecord.tableId); DictField df; int i; int j; ; dt.makeRecord(); for (i=1; i <= dt.fieldCnt(); i++) { df = new DictField(_fromRecord.tableId, dt.fieldCnt2Id(i)); if (!df.isSystem()) { if (df.arraySize() == 1) { _toRecord.(df.id()) = _fromRecord.(df.id()); } else { for (j=1;j<=df.arraySize();j++) { _toRecord.(fieldId2Ext(df.id(), j)) = _fromRecord.(fieldId2Ext(df.id(), j)); } } } } return _toRecord; } Последний раз редактировалось Sada; 26.10.2012 в 15:23. |
|
|
За это сообщение автора поблагодарили: Pustik (9). |
26.10.2012, 15:21 | #3 |
Программатор
|
а целиком метод скиньте?
|
|
26.10.2012, 15:46 | #4 |
Участник
|
Вы перебираете в цикле таблицу, в которую эти же записи и вставляете?
Последний раз редактировалось S.Kuskov; 26.10.2012 в 15:53. |
|
|
За это сообщение автора поблагодарили: Pustik (9). |
26.10.2012, 15:57 | #5 |
Enjoy!
|
Спасибо за метод - добавил к себе . Нашел в чем ошибка. Все таки оказалось что рекурсия, правда намного раньше (выше по иерархии), buf2buf не причем.
А вот метод полностью: X++: // Поиск подходящей записи в истории, если не находим, то возвращаем текущую public static OfficialsTable_RU find(TransDate _transDate) { OfficialsTableHistory officialsTableHistory; TransDate transDate; OfficialsTable_RU officialsTable_RU; OfficialsTable_RU officialsTable_RUOrig; ; if (_transDate) { select firstonly officialsTableHistory order by TransDate asc where officialsTableHistory.TransDate >= _transDate; if (officialsTableHistory) transDate = officialsTableHistory.TransDate; } OfficialsTable_RU.setTmp(); if (!TransDate) { while select officialsTable_RUOrig { buf2buf(officialsTable_RUOrig, OfficialsTable_RU); OfficialsTable_RU.insert(); } } else { while select officialsTableHistory where officialsTableHistory.TransDate == TransDate { buf2buf(officialsTableHistory.officialsTable_RU(), OfficialsTable_RU); OfficialsTable_RU.insert(); } } return OfficialsTable_RU; } |
|
26.10.2012, 15:59 | #6 |
Enjoy!
|
|
|
Теги |
внутреннем стеке, ошибка времени выполнения |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|