![]() |
#10 |
Боец
|
Цитата:
Попробовал.
Выполнил пп. 1-4. Получил следующие симптомы: 1. Класс НЕ остался наследником RunBase. Об этом свидетельствует: а) пустое поле Extends в свойствах класса (хотя я допускаю, что оно просто смотрит на ClassDeclaration) б) невозможность выбрать метод из списка. в) невозможность принудительно указать другой метод (например this.getLast()) Цитата:
При попытке удаления и создания метода - вызов saveLast() все равно "разрешается" в любом методе - что приводит к выводу - что этот метод в откомпилированном коде сохраняется при самом объекте (метод saveLast и только он был скопирован с родителя, но не был удален при отвязке родителя).
Цитата:
Делов том, что аксапта при компиляции записывает откомпилированный код в отдельное поле таблички UtilElements. Т.е. каждый метод имеет свое "откомпилированное" значение. Эта табличка лежит в *.aod-шнике.
Соответственно - зачем нужна инкрементная компиляция? Чтобы пробежаться по всем наследникам и заново "пересобрать" ИХ откомпилированный ранее код (во время компиляции - код родителя как бы "копируется" в код наследника, т.е. конечный класс собирается "по чертежам" всех своих родителей). Я таки залез в \Classes\xRefUpdate. Оказывается, не в перекрёстных ссылках дело, а в банальном X++: Dictionary::aodFlush(); sukhanchik, не знаю, как это решение ложится на описанный Вами механизм хранения откомпилированного кода. По большому счету, это всё не так уж важно: как оно там хранится, и как это всё можно объяснить - это более низкий уровень. Главное, что есть проблема (будем надеяться, что её пофиксят) и найдено простое решение. Глобальная компиляция - это пушкой по воробьям. |
|
Теги |
aod, compilation, cross-reference, flush, incorrect, refresh, update, интерпретатор, интерпретируемый, компилятор, компиляция, обновление, ошибка, перекрестные ссылки, наследование, macros |
|
|