![]() |
#6 |
Участник
|
В 2012-й аксапте обнаружился неприятный баг.
Если клиент запущен с параметром -noauto или при старте клиента произошла ошибка в new() методе какого-либо системного класса (т.е. он не создался) например (Application, Info, ClassFactory) то дальше происходит очень неприятная вещь. Если в коде идет проверка на существование системного класса, например X++: if (classFactory)
{
...
} А для серверного происходит ошибка времени выполнения, как будто мы не просто проверяем глобальный экземпляр на существование, но и сразу вызываем на нем метод. Причем try catch это хоть и ловит но выскакивает Message Box, который невозможно подавить параметром командной строки -INTERNAL=NOMODALBOXES Как следствие в случае проблем с приложением нельзя спокойно запустить клиент с параметром -NOAUTO и сделать глобальную компиляцию. (При компиляции Query идут вызовы методов \Classes\SysQueryRangeUtil\currentWorker \Classes\SysQueryRangeUtil\currentRoleHasAccessToPrivate и.т.п. которые порождают проверку на classFatory и компиляция выдает ошибку с messagebox-ом и компиляция останаливается. Стек вызовов такой (S)\Classes\Global\currentWorker - line 15 (S)\Data Dictionary\Tables\DirPersonUser\Methods\currentWorker - line 9 (S)\Classes\SysQueryRangeUtil\currentWorker - line 9 (S)<runtime compiled code>\anytype wrapper(){ return SysQueryRangeUtil::currentWorker(); } ) Кто-нибудь встречался с подобным поведением ? Как можно в серверном коде безопасно проверить classFactory на существование ? X++: if (classFactory) Последний раз редактировалось Logger; 07.11.2020 в 21:50. |
|