Корректировка функции общего модуля "СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку()"

03.08.23

Разработка - Универсальные функции

Функция предназначена для заполнения шаблонов писем, sms-ок, договоров и т.п. текстовых документов из таблицы без ограничения параметров шаблона.

Добрый день. Надо было сделать рассылку смс-ок по шаблону из списка клиентов.

Нашел в БСП функцию "СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку()". "Смутило" ограничение количества параметров в функции (9, понятно, что можно переделать, добавив параметры) - решил написать более универсальную функцию. Не могу проверить более "свежие" версии БСП - это осталось?

Допустим, есть ТаблицаЗначений (ТЗ), заполненная запросом (варианты любые - выборка из справочника ФизическиеЛица или что-то подобное). Причем имена колонок должны быть наперед заданы определенными значениями - применяются потом в текстовом шаблоне (ТШ). Хотим заполнить ТШ строками ТЗ, причем содержание определенной колонки попадает в определенное место в ТШ - в моем варианте это "<...>". В принципе это могут быть любые удобные для Вас разделители. В функцию передаем ТШ и строку ТЗ, полученную стандартным методом перебора в цикле. Пример текстового шаблона:"<Фамилия> <Имя> <Отчество> ждем Вас в нашем магазине <ДеньРождения> за подарком". "Фамилия", "Имя", "Отчество", "ДеньРождения" - имена колонок и соответственно параметры ТШ. Естественно, параметров в ТШ может быть любое количество и они могут повторяться.

Код функции:

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

 

Вступайте в нашу телеграмм-группу Инфостарт

Шаблон текст SMS-ки письма

См. также

SALE! %

Мастера заполнения Поиск данных База данных Инструментарий разработчика Корректировка данных Универсальные функции Механизмы платформы 1С Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

5000 4000 руб.

25.02.2026    1665    9    1    

11

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4314    Abysswalker    11    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    7991    DeerCven    15    

62

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    54050    dimanich70    84    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7761    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    68500    atdonya    31    

72

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9725    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. 0ct0ber 03.08.23 09:09 Сейчас в теме
Что касается неограниченного количества параметров. Сразу ниже в том же модуле идет:
ПодставитьПараметрыВСтрокуИзМассива(Знач ШаблонСтроки, Знач Параметры)
ixijixi; kser87; +2 Ответить
2. kser87 2482 03.08.23 11:45 Сейчас в теме
(1) а что в Параметры передается?
3. 0ct0ber 03.08.23 11:59 Сейчас в теме
(2)Массив. Это уже давно в БСП имеется.

// Подставляет параметры в строку. Число параметров в строке не ограничено.
// Параметры в строке задаются как %<номер параметра>. Нумерация параметров
// начинается с единицы.
//
// Параметры:
//  ШаблонСтроки  - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>", 
//                           например "%1 пошел в %2");
//  Параметры     - Массив - значения параметров в строке ШаблонСтроки.
//
// Возвращаемое значение:
//   Строка - строка с подставленными значениями параметрами.
//
// Пример:
//  ЗначенияПараметров = Новый Массив;
//  ЗначенияПараметров.Добавить("Вася");
//  ЗначенияПараметров.Добавить("Зоопарк");
//  Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтрокуИзМассива(НСтр("ru='%1 пошел в %2'"), ЗначенияПараметров);
//  - вернет строку "Вася пошел в Зоопарк".
Показать
4. user654641_yaga_m 16 04.08.23 18:06 Сейчас в теме
(2)ДД, в параметры "ничего" не передаётся напрямую. Есть шаблон и табличная строка для заполнения шаблона, откуда берутся "ключи" (параметры) заданные в шаблоне - обрамление <> в моём примере.
5. kamisov 225 06.08.23 09:20 Сейчас в теме
Почему не воспользоваться СтрШаблон()?
6. svezr 5 10.08.23 09:45 Сейчас в теме
(5) Возможно, автор использует древнюю версию платформы. СтрШаблон() доступна с 8.3.6.
7. user654641_yaga_m 16 12.09.23 14:55 Сейчас в теме
СтрШаблон() ограничен 10 параметрами...
Для отправки сообщения требуется регистрация/авторизация