ОбъектМетаданных: ОбщийМодуль.ПовторноеИспользованиеВозвращаемыхЗначений

Свойства · ReturnValuesReuse

Тип: ПовторноеИспользованиеВозвращаемыхЗначений. Если для общего модуля установлено значение "На время вызова" или "На время сеанса", то возвращаемые значения экспортных функций повторно используются в разрезе входных значений их параметров.

Полное описание, параметры и ограничения

ОбъектМетаданных: ОбщийМодуль.ПовторноеИспользованиеВозвращаемыхЗначений (MetadataObject: CommonModule.ReturnValuesReuse)

ОбъектМетаданных: ОбщийМодуль (MetadataObject: CommonModule)

ПовторноеИспользованиеВозвращаемыхЗначений (ReturnValuesReuse)

Доступен, начиная с версии 8.2.

Использование:
Только чтение.
Описание:
Тип: ПовторноеИспользованиеВозвращаемыхЗначений.
Если для общего модуля установлено значение "На время вызова" или "На время сеанса", то возвращаемые значения экспортных функций повторно используются в разрезе входных значений их параметров.
Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Использование в версии:

Доступен, начиная с версии 8.2.

Методическая информация

Практические примеры

Проверить политику повторного использования перед поиском устаревшего результата

Печатаем настройку модуля и выделяем модули с включённым повторным использованием. Кэш функций не очищаем и функции не вызываем.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.

  2. Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.

  3. Имена объектов взяты из XML КА2 Progress: C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS. Исходные XML не изменяйте. Выполняйте код только в своей учебной копии соответствующей конфигурации.

  4. В другой конфигурации предварительно найдите аналогичный объект в Конфигураторе и замените только строку имени в поиске. Отсутствие имени обрабатывается до чтения свойств; оно не доказывает отсутствие аналогичной возможности.

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

Описание = Метаданные.ОбщиеМодули.Найти("АвтономнаяРаботаСлужебный");
Если Описание = Неопределено Тогда
    ВызватьИсключение "В учебной конфигурации отсутствует ОбщиеМодули.АвтономнаяРаботаСлужебный";
КонецЕсли;
Сообщить(Описание.ПовторноеИспользованиеВозвращаемыхЗначений);
Найдено = 0;
Для Каждого Модуль Из Метаданные.ОбщиеМодули Цикл
    Если Модуль.ПовторноеИспользованиеВозвращаемыхЗначений
        <> Метаданные.СвойстваОбъектов.ПовторноеИспользованиеВозвращаемыхЗначений.НеИспользовать Тогда
        Найдено = Найдено + 1;
        Сообщить(СтрШаблон("%1: %2", Модуль.Имя, Модуль.ПовторноеИспользованиеВозвращаемыхЗначений));
    КонецЕсли;
КонецЦикла;
Сообщить("Модулей с политикой повторного использования: " + Строка(Найдено));

Разбор по шагам

  1. Читаем именно метаданную политику, а не значение результата функции.

  2. Отбираем политики, отличные от НеИспользовать.

  3. Время вызова и время сеанса нужно различать при последующем изучении конкретной функции.

  4. Не меняем настройку ради диагностики: сначала изучаем аргументы, зависимости и правила актуальности результата.

Как проверить результат

  1. В данном XML выбранный модуль имеет DontUse, то есть НеИспользовать.

  2. Счётчик совпадает с количеством выведенных модулей; результат не говорит о количестве записей в кэше.

Ожидаемый результат

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

На что обратить внимание

  1. Отсутствие повторного использования не доказывает отсутствие других кэшей в коде или сервисах.

  2. Свойство не позволяет получить содержимое кэша.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Найти общие модули с повторным использованием результатов

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

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Запускайте в учебной копии конфигурации. Примеры читают структуру метаданных, но не создают объекты, не записывают регистры и не проводят документы.

  2. Сверяйте вывод с деревом конфигурации в Конфигураторе. Имена, длины и настройки в УНФ, КА2, БП, УТ 11 и УТ 10.3 могут различаться.

  3. Имена объектов взяты из XML КА2 Progress: C:\claude\KA2\Progress\XML_CF_KA2_PROGRESS. Исходные XML не изменяйте. Выполняйте код только в своей учебной копии соответствующей конфигурации.

  4. В другой конфигурации предварительно найдите аналогичный объект в Конфигураторе и замените только строку имени в поиске. Отсутствие имени обрабатывается до чтения свойств; оно не доказывает отсутствие аналогичной возможности.

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

Варианты = Метаданные.СвойстваОбъектов;
Описание = Метаданные.ОбщиеМодули.Найти("ОбщегоНазначения");
Если Описание = Неопределено Тогда
    ВызватьИсключение "В учебной конфигурации отсутствует ОбщиеМодули.ОбщегоНазначения";
КонецЕсли;
Сообщить(Описание.ПовторноеИспользованиеВозвращаемыхЗначений = Варианты.ПовторноеИспользованиеВозвращаемыхЗначений.НеИспользовать);
КоличествоКэшируемыхМодулей = 0;
Для Каждого Модуль Из Метаданные.ОбщиеМодули Цикл
    Режим = Модуль.ПовторноеИспользованиеВозвращаемыхЗначений;
    Если Режим = Варианты.ПовторноеИспользованиеВозвращаемыхЗначений.НаВремяВызова Тогда
        КоличествоКэшируемыхМодулей = КоличествоКэшируемыхМодулей + 1;
        Сообщить(Модуль.Имя + ": результаты повторно используются на время вызова");
    ИначеЕсли Режим = Варианты.ПовторноеИспользованиеВозвращаемыхЗначений.НаВремяСеанса Тогда
        КоличествоКэшируемыхМодулей = КоличествоКэшируемыхМодулей + 1;
        Сообщить(Модуль.Имя + ": результаты повторно используются на время сеанса");
    КонецЕсли;
КонецЦикла;
Сообщить("Модулей с повторным использованием: " + Строка(КоличествоКэшируемыхМодулей));

Разбор по шагам

  1. Проверяем контрольный ОбщегоНазначения и затем обходим описания всех общих модулей.

  2. НаВремяВызова и НаВремяСеанса выводятся отдельно: область повторного использования разная.

  3. Считаем модули с настройкой, не число сохранённых результатов и не объём памяти.

  4. Ни одной функции общего модуля не вызываем: бизнес-операции не запускаются.

Как проверить результат

  1. Для исходного XML первая проверка Истина. Перечень и итог сравните с настройками общих модулей учебной копии.

  2. При нулевом количестве вывод 0 корректен; не добавляйте фиктивную кэшируемую функцию ради демонстрации.

Ожидаемый результат

Получен список кандидатов для дальнейшего разбора кэширования результатов.

На что обратить внимание

  1. Настройка повторного использования не доказывает, что любой конкретный вызов уже закэширован.

  2. Это не SQL-кэш, не файловый кэш 1С и не совет очищать рабочий сеанс.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.