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

Обнаружил, что мой код работает немного медленно. В цикле 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
    //Если оса_ПравилаРасчетаЦенКэшСеанса.ВключенаДоработаннаяВыгрузкаИзмененийНаКассу() Тогда
    //    Возврат;
    //КонецЕсли;

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


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

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

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 4

  1. Huhtel:

    Не перестаёшь меня удивлять, Гений. Два десятка лет в «программировании» — а кэш только сейчас начал использовать? Это объясняет многие вещи.

    • Кэш я использовал очень давно. Речь идет о встроенном в 1С кэше на уровне функций модуля.
      Так то без кэширования никуда.

  2. v8:

    Например, не стоит кэшировать константы (объект метаданных) примитивных типов, поскольку часто они привносят лишь незначительную долю от общего времени выполнения ресурсоемкой операции.

    • Там еще установка и сброс привелигированного режима, не знаю, насколько быстро это отрабатывает,но все же.

Добавить комментарий для Huhtel Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *