Нельзя возвращать изменяемые значения из методов модулей с повторным использованием возвращаемых значений
Не следует изменять данные, полученные из кэша модулей с повторным использованием. В противном случае, возможны скрытые ошибки в работе программы, а также бесполезное расходование памяти (ресурсов кэша).
Поэтому в качестве возвращаемых значений для методов общих модулей с повторным использованием рекомендуется использовать значения, состояние которых изменить нельзя, например: ФиксированныйМассив, ФиксированнаяСтруктура.
Это ограничение вызвано тем, что кэш возвращает каждый раз не копию объекта, а ссылку на один и тот же объект в памяти. Например, если в массив, который возвращает функция с повторным использованием, при каждом вызове при проведении документов дописывать новое значение, то в результате кэш очень быстро «распухнет». Кроме того, при очередном сбросе кэша, добавленные значения будут потеряны и код, который на них опирался, будет работать некорректно.
Подозрительный код
Функция МетодОбщегоМодуляПовтИсп(Знач Парам1) Экспорт
Массив = Новый Массив;
Массив.Добавить(Парам1);
Возврат Массив;
КонецФункции
Исправленный код
Функция МетодОбщегоМодуляПовтИсп(Знач Парам1) Экспорт
Массив = Новый Массив;
Массив.Добавить(Парам1);
Возврат ФиксированныйМассив(Массив);
КонецФункции
См. также
Экранирование кода
// sonar:ReturnChangingValueInReuseModule:off
// sonar:ReturnChangingValueInReuseModule:on