Добрый день. Надо было сделать рассылку смс-ок по шаблону из списка клиентов.
Нашел в БСП функцию "СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку()". "Смутило" ограничение количества параметров в функции (9, понятно, что можно переделать, добавив параметры) - решил написать более универсальную функцию. Не могу проверить более "свежие" версии БСП - это осталось?
Допустим, есть ТаблицаЗначений (ТЗ), заполненная запросом (варианты любые - выборка из справочника ФизическиеЛица или что-то подобное). Причем имена колонок должны быть наперед заданы определенными значениями - применяются потом в текстовом шаблоне (ТШ). Хотим заполнить ТШ строками ТЗ, причем содержание определенной колонки попадает в определенное место в ТШ - в моем варианте это "<...>". В принципе это могут быть любые удобные для Вас разделители. В функцию передаем ТШ и строку ТЗ, полученную стандартным методом перебора в цикле. Пример текстового шаблона:"<Фамилия> <Имя> <Отчество> ждем Вас в нашем магазине <ДеньРождения> за подарком". "Фамилия", "Имя", "Отчество", "ДеньРождения" - имена колонок и соответственно параметры ТШ. Естественно, параметров в ТШ может быть любое количество и они могут повторяться.
Код функции:
Функция РассшифровкаШаблона(ШаблонСМС, СтрокаТабл)
Ошибка = Ложь; //Признак корректного шаблона
КолНачал = СтрЧислоВхождений(ШаблонСМС, "<"); //Признак параметра шаблона <Параметр>. Определяем равное количество разделителей
КолОкончаний = СтрЧислоВхождений(ШаблонСМС, ">");
Если КолНачал <> КолОкончаний Тогда
Ошибка = Истина;
Иначе
МассивСтрок = СтрРазделить(ШаблонСМС, "<>"); //Раскладываем шаблон в массив, причем параметры шаблона попадают в нечетные строки
Счет = 1;
Пока Счет <= МассивСтрок.ВГраница() Цикл
ИскомоеЗначение = "";
Попытка
//Находим в строке таблицы значений СтрокаТабл значение нужного поля
Выполнить("ИскомоеЗначение = СтрокаТабл." + МассивСтрок[Счет]);
//Подменяем в массиве найденное значение
МассивСтрок[Счет] = ИскомоеЗначение;
Исключение
Ошибка = Истина;
Сообщить("Нет в строке такого поля" + МассивСтрок[Счет]);
КонецПопытки;
Счет = Счет+2;
КонецЦикла;
Массив = Новый Массив;
Массив.Вставить(0, Ошибка);
Массив.Вставить(1, СтрСоединить(МассивСтрок));
//Возвращаем модифицированную строку плюс состояние ошибки: Истина, если что-то с шаблоном или некорректна строка ТЗ
Возврат Массив
КонецЕсли;
КонецФункции