|
| 1 | +# Неверное использование "СтрШаблон" (IncorrectUseOfStrTemplate) |
| 2 | + |
| 3 | + Тип | Поддерживаются<br>языки | Важность | Включена<br>по умолчанию | Время на<br>исправление (мин) | Тэги |
| 4 | + :-: | :-: | :-: | :-: | :-: | :-: |
| 5 | + `Ошибка` | `BSL`<br>`OS` | `Блокирующий` | `Да` | `1` | `brainoverload`<br>`suspicious`<br>`unpredictable` |
| 6 | + |
| 7 | +<!-- Блоки выше заполняются автоматически, не трогать --> |
| 8 | +## Описание диагностики |
| 9 | +<!-- Описание диагностики заполняется вручную. Необходимо понятным языком описать смысл и схему работу --> |
| 10 | +При использовании метода `СтрШаблон` нужно внимательно составлять шаблонную строку и передавать правильное количество параметров. |
| 11 | +И можно довольно легко ошибиться при передаче значений для `СтрШаблон`. |
| 12 | + |
| 13 | +Важно помнить, что |
| 14 | +- `СтрШаблон` принимает только параметры от `%1` до `%10` |
| 15 | +- если требуется передать сразу после шаблона число, нужно добавить скобки - `"%(1)45"` |
| 16 | + |
| 17 | +## Примеры |
| 18 | +<!-- В данном разделе приводятся примеры, на которые диагностика срабатывает, а также можно привести пример, как можно исправить ситуацию --> |
| 19 | + |
| 20 | +1. Количество переданных после шаблонной строки значений не равно (меньше или больше) максимальному номеру из строки вида %N внутри шаблонной строки |
| 21 | + - `СтрШаблон("Наименование (версия %1)");` |
| 22 | + - `СтрШаблон("%1 (версия %2)", Наименование);` |
| 23 | + |
| 24 | +2. не передается вообще никаких значений, кроме форматированной строки |
| 25 | +из-за большого число скобок внутри несложного выражения с `НСтр` и `СтрШаблон` |
| 26 | +Пример: |
| 27 | +- `СтрШаблон(НСтр("ru='Наименование (версия %1)'", Версия()));` |
| 28 | + - здесь ошибочно не закрыта скобка для `НСтр` |
| 29 | + - в итоге выражение после вычисления `НСтр` становится пустым. |
| 30 | + |
| 31 | +Выявить подобную ошибку чтением кода довольно сложно из-за наличия скобок. |
| 32 | +И можно поймать только в рантайме, получив исключение. |
| 33 | + |
| 34 | +Правильный вариант: |
| 35 | + - `СтрШаблон(НСтр("ru='Наименование (версия %1)'"), Версия());` |
| 36 | + |
| 37 | +3. Пример передачи цифр сразу после шаблонного значения |
| 38 | + - `СтрШаблон("Наименование %(1)2"), Наименование);` |
| 39 | + |
| 40 | +## Источники |
| 41 | +<!-- Необходимо указывать ссылки на все источники, из которых почерпнута информация для создания диагностики --> |
| 42 | +<!-- Примеры источников |
| 43 | +
|
| 44 | +* Источник: [Стандарт: Тексты модулей](https://its.1c.ru/db/v8std#content:456:hdoc) |
| 45 | +* Полезная информация: [Отказ от использования модальных окон](https://its.1c.ru/db/metod8dev#content:5272:hdoc) |
| 46 | +* Источник: [Cognitive complexity, ver. 1.4](https://www.sonarsource.com/docs/CognitiveComplexity.pdf) --> |
| 47 | + |
| 48 | +- [Требования по локализации - Стандарт](https://its.1c.ru/db/v8std/content/763/hdoc) |
| 49 | + |
| 50 | +## Сниппеты |
| 51 | + |
| 52 | +<!-- Блоки ниже заполняются автоматически, не трогать --> |
| 53 | +### Экранирование кода |
| 54 | + |
| 55 | +```bsl |
| 56 | +// BSLLS:IncorrectUseOfStrTemplate-off |
| 57 | +// BSLLS:IncorrectUseOfStrTemplate-on |
| 58 | +``` |
| 59 | + |
| 60 | +### Параметр конфигурационного файла |
| 61 | + |
| 62 | +```json |
| 63 | +"IncorrectUseOfStrTemplate": false |
| 64 | +``` |
0 commit comments