Впервые применил модуль с повторным использованием значений

Обнаружил, что мой код работает немного медленно. В цикле 50.000 раз вызывалась функция, которая обращалась к константе и это немного тормозило выполнение.

Функция ОтключенаРегистрацияИзмененийНаКассу() Экспорт
   
//Осипов КАССЫ 20200325 — если нужно отключить регистрацию изменений в плане обмена и прочие мелкие вещи
    //Вызывать так:
    //Осипов КАССЫ 20200325
    //Если оса_ПравилаРасчетаЦенКэшСеанса.ОтключенаРегистрацияИзмененийНаКассу() Тогда
    //    Возврат;
    //КонецЕсли;

    УстановитьПривилегированныйРежим(истина);
    Возврат
Константы.оса_ОтключенаРегистрацияИзмененийНаКассу.Получить();
КонецФункции

А константу я использовал, чтобы иметь возможность включать/выключать своё поведение для типовой конфигурации, не меняя конфигурацию.

Думал, что использовать — параметры сеанса или модуль с повторным использованием значений. В итоге выбрал модуль. На параметры сеанса еще права нужно назначать, а модуль работает просто так.

В 1С применение модуля с повторным использованием значений (кэшированием) описано тут: https://its.1c.ru/db/v8std#content:724:hdoc

Я открыл эти знания для себя еще в 2008, 12 лет назад, но на практике не применял. https://forum.mista.ru/topic.php?id=369307&page=1

И вот, наконец, пригодилось.

Завел новый модуль под это дело:

У модуля указал свойство повторного использования значений на время сеанса (если что, нужно перезайти в 1С):

Заменил вызовы процедур, обращавшихся к константе, через глобальную замену. Работает минут 5, довольно долго на УТ11, но зато гарантированно все вызовы заменяет:

Модуль оформил так:

//Внимание! Модуль с повторным использованием значений! Для ускорения работы!
//Значения кэшируются на время сеанса, нужно перезаходить в 1с.

#Область КонстантыВключенияВыключенияРежимов

//Вызывается из:

//ОбщийМодуль.МенеджерОфлайнОборудованияПереопределяемый.Модуль
//ОбщийМодуль.ОбменДаннымиПодключаемоеОборудованиеOfflineСобытия.Модуль
//ОбщийМодуль.ПодключаемоеОборудованиеOfflineВызовСервера.Модуль
//ОбщийМодуль.ПодключаемоеОборудованиеOfflineВызовСервера.Модуль
//ОбщийМодуль.ПодключаемоеОборудованиеOfflineВызовСервера.Модуль
//РегистрСведений.КодыТоваровПодключаемогоОборудованияOffline.Модуль набора записей
//ОфлайнОборудованиеАтолККМКлиент.ВыгрузкаТоваровЗавершение

Функция ОтключенаРегистрацияИзмененийНаКассу() Экспорт
   
//Осипов КАССЫ 20200325 — если нужно отключить регистрацию изменений в плане обмена и прочие мелкие вещи

    //Вызывать так:

    //Осипов КАССЫ 20200325
    //Если оса_ПравилаРасчетаЦенКэшСеанса.ОтключенаРегистрацияИзмененийНаКассу() Тогда
    //    Возврат;
    //КонецЕсли;

    УстановитьПривилегированныйРежим(истина);
    Возврат
Константы.оса_ОтключенаРегистрацияИзмененийНаКассу.Получить();
КонецФункции

Функция ВключенаДоработаннаяВыгрузкаИзмененийНаКассу() Экспорт
   
//Осипов КАССЫ 20200325 — включает ли режим доработанной выгрузки изменений на кассу
    //Вызывать так:

    //Осипов КАССЫ 20200325
    //Если оса_ПравилаРасчетаЦенКэшСеанса.ВключенаДоработаннаяВыгрузкаИзмененийНаКассу() Тогда
    //    Возврат;
    //КонецЕсли;

    УстановитьПривилегированныйРежим(истина);
    Возврат
Константы.оса_ВключенаДоработаннаяВыгрузкаИзмененийНаКассу.Получить();
КонецФункции

#КонецОбласти

Проверил отладчиком — действительно, вход в функцию осуществляется только в первый раз, потом возвращается рассчитанное значение. Удобно, быстро, эффективно.