ЗаполнитьШаблон (БСП)

Автор: 1С
ОбщийМодуль.РассылкаОтчетовКлиентСервер
БСП

Заполнить шаблон. Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона.

// Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона.
//   Ограничение: должны присутствовать и левый и правый элементы обрамления.
//
// Параметры:
//   Шаблон - Строка - Исходный шаблон. Например "Добрый день, [ФИО]".
//   Параметры - Структура - Набор параметров, которые необходимо подставить в шаблон.
//      * Ключ - Имя параметра. Например "ФИО".
//      * Значение - Строка подстановки. Например "Иванов Иван Иванович".
//
// Возвращаемое значение: 
//   Строка - Шаблон с заполненными параметрами.
//
Функция ЗаполнитьШаблон(Шаблон, Параметры) Экспорт
	Левый = "["; // Начало обрамления параметра.
	Правый = "]"; // Конец обрамления параметра.
	ФорматЛевый = "("; // Начало обрамления формата.
	ФорматПравый = ")"; // Конец обрамления формата.
	ВырезатьОбрамление = Истина; // Истина означает, что обрамление параметра будет убрано из результата.
	
	Результат = Шаблон;
	Для Каждого КлючИЗначение Из Параметры Цикл
		// Замена "[ключ]" на "значение".
		Результат = СтрЗаменить(
			Результат,
			Левый + КлючИЗначение.Ключ + Правый, 
			?(ВырезатьОбрамление, "", Левый) + КлючИЗначение.Значение + ?(ВырезатьОбрамление, "", Правый));
		ДлинаФорматЛевый = СтрДлина(Левый + КлючИЗначение.Ключ + ФорматЛевый);
		// Замена "[ключ(формат)]" на "значение в формате".
		Поз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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ЗаполнитьДеревоШаблонаАнкеты (БСП)

ЗаполнитьРеквизитыПоСКД (БСП)

СоздатьШаблон (БСП)

ЕстьДоступныеШаблоны (БСП)

ШаблонПоВладельцу (БСП)

СведенияОШаблоне (БСП)

ВидыШаблонов (БСП)

ПредставленияЗаполнены (БСП)

TurboConf - расширение Конфигуратора 1С