Строковые функции используются для вычисления константных выражений
Нет смысла выполнять строковые операции для строковых констант. Подобный код может приводить к повторным вычислениям и уменьшению производительности 1С. Вместо этого проще на этапе написания кода самостоятельно вычислить нужное константное значение и подставить его вместо вычисления.
Такая оптимизация позволит ускорить работу системы и устранит лишние затраты интерпретатора 1С.
Пример 1.
Подозрительный код
ЗаглавнаяСтрока = ВРег("Исходная строка");
Позиция = СтрНайти("Исходный текст", "текст");
Исправленный код
ЗаглавнаяСтрока = "ИСХОДНАЯ СТРОКА";
Позиция = 9; //СтрНайти("Исходный текст", "текст");
Пример 2. Часто разработчики используют подобный код:
Если СостояниеДокумента = "Черновик" Тогда
ДействиеДляЧерновик();
ИначеЕсли СостояниеДокумента = "на утверждении" Тогда // опечатка
ДействиеДляУтверждён1();
КонецЕсли;
Если СостояниеДокумента = "На утверждении" Тогда
ДействиеДляУтверждён2();
ИначеЕсли СостояниеДокумента = "Отклонён" Тогда
ДействиеДляОтклонён();
КонецЕсли;
В примере выше присутствует ошибка (тексты одинаковых состояний не равны). Чтобы избежать подобной ситуации, удобно было бы создать программное перечисление в виде фиксированной структуры:
СтатусыДокумента = Новый Структура;
СтатусыДокумента.Вставить("Черновик", "Черновик");
СтатусыДокумента.Вставить("НаУтверждении", "На утверждении");
СтатусыДокумента.Вставить("Отклонён", "Отклонён");
СтатусыДокумента = Новый ФиксированнаяСтруктура(СтатусыДокумента);
Если СостояниеДокумента = СтатусыДокумента.Черновик Тогда
ДействиеДляЧерновик();
ИначеЕсли СостояниеДокумента = СтатусыДокумента.НаУтверждении Тогда
ДействиеДляУтверждён1();
КонецЕсли;
Если СостояниеДокумента = СтатусыДокумента.НаУтверждении Тогда
ДействиеДляУтверждён2();
ИначеЕсли СостояниеДокумента = СтатусыДокумента.Отклонён Тогда
ДействиеДляОтклонён();
КонецЕсли;
Экранирование кода
// sonar:StringMethodsWithConstantParameters:off
// sonar:StringMethodsWithConstantParameters:on