Впервые применил модуль с повторным использованием значений
Обнаружил, что мой код работает немного медленно. В цикле 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
//Если оса_ПравилаРасчетаЦенКэшСеанса.ВключенаДоработаннаяВыгрузкаИзмененийНаКассу() Тогда
// Возврат;
//КонецЕсли;
УстановитьПривилегированныйРежим(истина);
Возврат Константы.оса_ВключенаДоработаннаяВыгрузкаИзмененийНаКассу.Получить();
КонецФункции
#КонецОбласти
Проверил отладчиком — действительно, вход в функцию осуществляется только в первый раз, потом возвращается рассчитанное значение. Удобно, быстро, эффективно.
Не перестаёшь меня удивлять, Гений. Два десятка лет в «программировании» — а кэш только сейчас начал использовать? Это объясняет многие вещи.
Кэш я использовал очень давно. Речь идет о встроенном в 1С кэше на уровне функций модуля.
Так то без кэширования никуда.
Например, не стоит кэшировать константы (объект метаданных) примитивных типов, поскольку часто они привносят лишь незначительную долю от общего времени выполнения ресурсоемкой операции.
Там еще установка и сброс привелигированного режима, не знаю, насколько быстро это отрабатывает,но все же.