Корректное использование функции СтрШаблон

Используя метод СтрШаблон в 1С легко ошибиться, и последствия данных ошибок могут быть как незначительными, так и критическими...

Корректное использование функции СтрШаблон

Функция СтрШаблон крайне полезная функция, которая появилась в платформе 1С: Предприятие начиная с версии 8.3.6.  Она позволяет удобно сформировать строку подставляя переменное количество параметров.

Например:

СтрШаблон("Ошибка в данных в строке %1 (требуется тип %2)", 2, "Дата");

В данном примере результирующей строкой будет Ошибка в данных в строке 2 (требуется тип Дата).

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

Одной из самых распространенных ошибок является некорректное использование функции НСтр внутри СтрШаблон:

ТекстОшибки = СтрШаблон(НСтр("ru = 'Не заполнен %1'", ИмяПартнера));

В примере выше, разработчик "промахнулся" при указании параметров метода. Вместо того чтобы указать параметр ИмяПартнера как параметр СтрШаблон, он указал его как параметр НСтр. В результате данный вызов отработает и вернет пустую строку, что не то, что ожидает увидеть пользователь при выяснении причины ошибки. Однако данная ошибка является информационной, так как не нарушает работу программы.

Куда хуже, когда разработчик некорректно описывает сам шаблон, как например:

ТекстОшибки = СтрШаблон(    
	НСтр("ru = 'Отсканирован штрихкод партионной алкогольной продукции %, при этом в документе-распоряжении                
    			|нет такой алкогольной продукции.'"), ТипШтрихкода);

Что же тут произошло? Разработчик неправильно указал параметр шаблона, указав просто знак процента, тогда как корректно было бы %1. В результате исполнения данного кода возникнет исключение времени выполнения Ошибка синтаксиса шаблона, что уже является блокирующей ошибкой, которая помешает полноценной работе пользователя.

Или например:

СтрШаблон(НСтр("ru = 'Не заполнено поле ""ИНН"" для организации'"), Шапка.Организация));

Здесь разработчик либо забыл добавить необходимый параметр в шаблон, либо забыл убрать само значение параметра. В результате 1С отреагирует исключением времени выполнения "Слишком много фактических параметров", что также заблокирует нормальную работу пользователя.

Как этого можно было избежать:

  • внимательно читать документацию к методу СтрШаблон, в которой подробно описаны ситуации при которых 1С будет генерировать исключения;
  • тщательно тестировать свои доработки/исправления. Даже если у вас нет автотестов или QA, разработчик не должен лениться самостоятельно запустить и проверить свою доработку;
  • использование статических анализаторов/линтеров, которые могут в автоматическом режиме проверить корректность шаблона и предупредить разработчика о возможных последствиях.