Заполнить шаблон. Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона.
// Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона.
// Ограничение: должны присутствовать и левый и правый элементы обрамления.
//
// Параметры:
// Шаблон - Строка - Исходный шаблон. Например "Добрый день, [ФИО]".
// Параметры - Структура - Набор параметров, которые необходимо подставить в шаблон.
// * Ключ - Имя параметра. Например "ФИО".
// * Значение - Строка подстановки. Например "Иванов Иван Иванович".
//
// Возвращаемое значение:
// Строка - Шаблон с заполненными параметрами.
//
Функция ЗаполнитьШаблон(Шаблон, Параметры) Экспорт
Левый = "["; // Начало обрамления параметра.
Правый = "]"; // Конец обрамления параметра.
ФорматЛевый = "("; // Начало обрамления формата.
ФорматПравый = ")"; // Конец обрамления формата.
ВырезатьОбрамление = Истина; // Истина означает, что обрамление параметра будет убрано из результата.
Результат = Шаблон;
Для Каждого КлючИЗначение Из Параметры Цикл
// Замена "[ключ]" на "значение".
Результат = СтрЗаменить(
Результат,
Левый + КлючИЗначение.Ключ + Правый,
?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый));
ДлинаФорматЛевый = СтрДлина(Левый + КлючИЗначение.Ключ + ФорматЛевый);
// Замена "[ключ(формат)]" на "значение в формате".
Поз1 = СтрНайти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый);
Пока Поз1 > 0 Цикл
Поз2 = СтрНайти(Результат, ФорматПравый + Правый);
Если Поз2 = 0 Тогда
Прервать;
КонецЕсли;
ФорматнаяСтрока = Сред(Результат, Поз1 + ДлинаФорматЛевый, Поз2 - Поз1 - ДлинаФорматЛевый);
Попытка
НаЧтоЗаменить = ?(ВырезатьОбрамление, "", Левый) + Формат(КлючИЗначение.Значение, ФорматнаяСтрока) + ?(ВырезатьОбрамление, "", Правый);
Исключение
НаЧтоЗаменить = ?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый);
КонецПопытки;
Результат = СтрЗаменить(
Результат,
Левый + КлючИЗначение.Ключ + ФорматЛевый + ФорматнаяСтрока + ФорматПравый + Правый,
НаЧтоЗаменить);
Поз1 = СтрНайти(Результат, Левый + КлючИЗначение.Ключ + ФорматЛевый);
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)