![]() |
#26 |
Участник
|
Попробовал сделать более универсальную защиту от переключения компаний.
Для этого делаем такие изменения : 1. Заводим где-нибудь статический метод X++: // pkoz 24.10.2009 static //client server boolean GRD_changeCompanyForbidden(boolean _parm = false, boolean _flush = false) { // SysGlobalCache SysGlobalCache = infolog.globalCache(); SysGlobalCache SysGlobalCache = appl.globalCache(); boolean ret; int retI; ; retI = SysGlobalCache.get(funcName(), 0, 0); if (!prmIsDefault(_parm)) // пишем { if (_parm) { retI++; } else { retI--; } SysGlobalCache.set(funcName(), 0, retI); } if (retI < 0 || _flush) { SysGlobalCache.set(funcName(), 0, 0); return false; } if(retI > 0) return true; return false; } 2. Создаем класс для сброса настроек состоящий из одного метода main X++: // GRD_changeCompanyFix_pkoz // pkoz 24.10.2009 static void main(args _args) { ; SysSetupFormRun::GRD_changeCompanyForbidden(false, true); } 3. Вносим изменение в метод \Classes\Application\setDefaultCompany X++: SysGlobalCache cache = appl.globalCache(); container GRD_stack = xSession::xppCallStack(); // pkoz 24.10.2009 if (//GRD_isPkoz() && ( conPeek(GRD_Stack, 3) == @"(C) \Classes\FormRun\activate" // в трехзвенке || conPeek(GRD_Stack, 3) == @"\Classes\FormRun\activate" // в двухзвенке ) && SysSetupFormRun::GRD_changeCompanyForbidden() ) { warning("Запрещено переключение между компаниями. Для исправления выберите Меню Сервис - Разрешить смену компаний"); return false; } ret = super(_selectableDataArea); X++: SysSetupFormRun::GRD_changeCompanyForbidden(true); X++: SysSetupFormRun::GRD_changeCompanyForbidden(false); Пункт 2 нужен если обработка прервалась и отмена запрета переключения не была вызвана (например по ошибке). |
|
Теги |
progress bar, sysoperationprogress, баг, бегунок, законченный пример, полезное, смена компании |
|
|