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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.10.2012, 15:12   #1  
iCloud is offline
iCloud
Enjoy!
Аватар для iCloud
MCP
Злыдни
 
195 / 112 (4) +++++
Регистрация: 06.03.2012
? Ошибка времени выполнения. Переполнение во внутреннем стеке исполнения кода.
Ошибка времени выполнения. Переполнение во внутреннем стеке исполнения кода.
Привет. помогите разобраться в чем может быть проблема. Не рекурсия(по-моему).

X++:
while(...)
{
    while select officialsTable_RUOrig
            {
                buf2buf(officialsTable_RUOrig, OfficialsTable_RU);
                OfficialsTable_RU.insert();
            }
}
В методе buf2buf валится при объявлении dictTable.
Заметил, что если комментирую вызов данного метода, то вываливается вообще в другом месте, при другой инициализации 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  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
попробуйте такое
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  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
а целиком метод скиньте?
Старый 26.10.2012, 15:46   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от iCloud Посмотреть сообщение
Не рекурсия(по-моему)
Вы перебираете в цикле таблицу, в которую эти же записи и вставляете?

Последний раз редактировалось S.Kuskov; 26.10.2012 в 15:53.
За это сообщение автора поблагодарили: Pustik (9).
Старый 26.10.2012, 15:57   #5  
iCloud is offline
iCloud
Enjoy!
Аватар для iCloud
MCP
Злыдни
 
195 / 112 (4) +++++
Регистрация: 06.03.2012
Цитата:
Сообщение от Sada Посмотреть сообщение
а целиком метод скиньте?
Спасибо за метод - добавил к себе . Нашел в чем ошибка. Все таки оказалось что рекурсия, правда намного раньше (выше по иерархии), 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  
iCloud is offline
iCloud
Enjoy!
Аватар для iCloud
MCP
Злыдни
 
195 / 112 (4) +++++
Регистрация: 06.03.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Вы перебираете в цикле таблицу, в которую эти же записи и вставляете?
Перебираю таблицу и ИЗ которой вставляю записи
Теги
внутреннем стеке, ошибка времени выполнения

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка времени выполнения в ComExcelDocument_RU.findRange() Toto DAX: Программирование 47 26.04.2018 10:45
Странная ошибка(Ошибка времени выполнения: Неправильный тип индекса массива.) raniel DAX: Программирование 7 21.01.2011 14:45
Ошибка времени выполнения: В NumberSeqReference_Empl_RU (Объект), не найден исполнимый код метода "loadModule" Ksju DAX: Функционал 14 21.10.2009 13:00
Ошибка времени выполнения Stas[SNRC] DAX: Программирование 6 12.03.2008 12:21
Ошибка времени выполнения. Pegiy DAX: Программирование 2 27.05.2004 16:26

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

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

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