Заполнить программно параметры шаблонов сообщений

1. Gendelf 01.08.18 12:16 Сейчас в теме
1С 8.3 КА 2.4
Добрый день, столкнулся с проблемой программного заполнения шаблонов писем. Добавил в шаблон параметр "НомерЗаказа".
На скриншоте видно, что параметр через отладку я вижу, но как заполнить - не пойму...
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 299 01.08.18 12:21 Сейчас в теме
(1) ну так хранилище же.
А в нем черный ящик.
Извлеки из какого нибудь письма, посмотри что в нем.
Скорее всего структура там хранится. Ну и обратно также
3. Gendelf 01.08.18 12:24 Сейчас в теме
(2) А куда эту структуру присвоить? Это же табличная часть, я получаю строку и по идее должен внести куда то значение.
5. Boneman 299 01.08.18 12:37 Сейчас в теме
(3)
получаю строку и по идее

Получаешь строку,
из колонки ТиПараметра - извлекаешь содержимое.
Содержимое = Строка.ТипПараметра.Получить();

и смотришь, что там в потрохах
6. Gendelf 01.08.18 12:41 Сейчас в теме
(5) там только типы...
Прикрепленные файлы:
Легаева Анастасия; +1 Ответить
7. Boneman 299 01.08.18 12:43 Сейчас в теме
(6)
в теле формы есть строка, как формируется этот параметр
ТекущийОбъект.Параметры.Очистить();
Для каждого ПараметрШаблона Из Объект.Параметры Цикл
НоваяСтрока = ТекущийОбъект.Параметры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ПараметрШаблона);
НоваяСтрока.ТипПараметра = Новый ХранилищеЗначения(ПараметрШаблона.ОписаниеТипа);
КонецЦикла;

что там в описании типа, тоже можешь отследить, как формируется.
Мне просто времени жалко сейчас шерстить конфу, но по анализу кода данного справочника вполне можно понять, что должно быть внутри этого хранилища
4. Gendelf 01.08.18 12:31 Сейчас в теме
(2)
Извлеки из какого нибудь письма, посмотри что в нем.


Примера я не нашел, а стандартные параметры не попадают в эту ТЧ
kompas-dm; +1 Ответить
8. Gendelf 01.08.18 13:10 Сейчас в теме
Нашел процедуру, но не могу её применить у себя. Параметр у меня уже создан, нужно лишь его заполнить и получить готовый текст из шаблона.

&НаСервере
Процедура ЗаполнитьПроизвольныеПараметрыИзОбъекта(Знач ТекущийОбъект)
	Перем НайденныеСтроки, Отбор, ПараметрШаблонаТекущийОбъект;
	Для каждого ПараметрШаблонаТекущийОбъект Из ТекущийОбъект.Параметры Цикл
		Отбор = Новый Структура("ИмяПараметра", ПараметрШаблонаТекущийОбъект.ИмяПараметра);
		НайденныеСтроки = Объект.Параметры.НайтиСтроки(Отбор);
		Если НайденныеСтроки.Количество() > 0 Тогда
			НайденныеСтроки[0].ОписаниеТипа = ПараметрШаблонаТекущийОбъект.ТипПараметра.Получить();
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры
Показать


Но по первому скрину видно, что у меня никакого "ОписаниеТипа" нет.

Вопрос актуальный, пока так и не нашёл решение.
9. Gendelf 01.08.18 15:09 Сейчас в теме
10. Boneman 299 01.08.18 15:23 Сейчас в теме
(9) посмотри в конфигурации ОбщийМодуль.ШаблоныСообщений.

думаю тебе не нужно на физическом уровне ковырять справочник шаблонов и пытаться воссоздавать вручную сообщение. Для этого и придумали общие модули.
Там например есть такая функция
// Создает сообщение на основании предмета по шаблону сообщения.
//
// Параметры:
//  Шаблон                   - СправочникСсылка.ШаблоныСообщений - ссылка на шаблон сообщения.
//  Предмет                  - Произвольный - Объект основания для шаблона сообщений, типы объектов перечислены в
//                                            определяемом типе ПредметШаблонаСообщения.
//  УникальныйИдентификатор  - УникальныйИдентификатор - Идентификатор формы, необходим для размещения вложений во
//                                                       временном хранилище при клиент-серверном вызове. Если вызов
//                                                       происходит только на сервере, то можно использовать любой идентификатор.
//  ДополнительныеПараметры  - Структура - Необязательный, список дополнительных параметров, который будет передан в
//                                         параметр Сообщение в процедурах ПриФормированииСообщения при создании сообщения.
//     * ПреобразовыватьHTMLДляФорматированногоДокумента - Булево - необязательный, по умолчанию Ложь, определяет
//                      необходимо ли преобразование HTML текста сообщения содержащего картинки в тексте письма из-за
//                      особенностей вывода изображений в форматированном документе.
// 
// Возвращаемое значение:
//  Структура - подготовленное сообщение на основание шаблона для отправки.
//    * Тема - Строка - тема письма
//    * Текст - Строка - текст письма
//    * Получатель - СписокЗначений - список получателей письма
//    * ДополнительныеПараметры - Структура - параметры шаблона сообщения.
//    * Вложения - ТаблицаЗначений - список вложений 
//       ** Представление - Строка - имя файла вложения.
//       ** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище.
//       ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма).
//       ** Идентификатор - Строка - необязательный,  идентификатор вложения, используется для хранения 
//                                   картинок, отображаемых в теле письма.
//
Функция СформироватьСообщение(Шаблон, Предмет, УникальныйИдентификатор, ДополнительныеПараметры = Неопределено) Экспорт
	
	ПараметрыОтправки = СформироватьПараметрыОтправки(Шаблон, Предмет, УникальныйИдентификатор, ДополнительныеПараметры);
	Возврат ШаблоныСообщенийСлужебный.СформироватьСообщение(ПараметрыОтправки);
	
КонецФункции
Показать


ну и еще ряд функций для работы с ними. Вот выбери подходящую функцию, подготовь параметры для нее - и просто вызови.

На более низком уровне ОбщийМодуль.ШаблоныСообщенийСлужебный. Там тоже куча функций и процедур низкого уровня
Pistolierro; +1 Ответить
11. Gendelf 01.08.18 22:10 Сейчас в теме
(10)
ну и еще ряд функций для работы с ними. Вот выбери подходящую функцию, подготовь параметры для нее - и просто вызови.


Постарался сделать именно так, но не работает...

ПроизвольныеПараметры = Новый Структура;
ПроизвольныеПараметры.Вставить("Номер", Объект.Номер); 
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПроизвольныеПараметры", ПроизвольныеПараметры);
СообщениеСПараметром = ШаблоныСообщений.СформироватьСообщение(Шаблон, Объект.Ссылка, ЭтотОбъект.УникальныйИдентификатор, ДополнительныеПараметры);
15. aistec 29.11.18 13:23 Сейчас в теме
(11) если еще актуально,то:


ДополнительныеПараметры= Новый Структура;
Произвольные = Новый Соответствие;
Произвольные.Вставить("Номер",Объект.Номер);
ДополнительныеПараметры.Вставить("ПроизвольныеПараметры",Произвольные);

СообщениеСПараметром = ШаблоныСообщений.СформироватьСообщение(Шаблон, Объект.Ссылка, ЭтотОбъект.УникальныйИдентификатор, ДополнительныеПараметры);
 
Hogyoku; alexey.kutya; litonchik; +3 Ответить
19. alexey.kutya 305 10.08.21 14:29 Сейчас в теме
12. Gendelf 02.08.18 08:32 Сейчас в теме
Правильно ли я понимаю, что если получится таким способом заполнить параметры шаблона, то он будет работать если имя параметры = реквизиту документа? Хотелось бы в коде подставить одну фразу вместо другой, в зависимости от ситуации.
13. Gendelf 02.08.18 10:48 Сейчас в теме
проблема всё ещё актуальна
14. Gendelf 02.08.18 14:09 Сейчас в теме
Скиньте кто нибудь подобный пример, уверен кто-то заполнял параметры.
16. kirjust 21.02.19 13:02 Сейчас в теме
У кого нибудь получилось передать параметры в функцию? У меня тоже актуально. Аж до красных глаз.
17. mailb107 03.06.19 20:27 Сейчас в теме
Добавил в структуру "ДополнительныеПараметры" Соответствие "ПроизвольныеПараметры"
Сообщение = ШаблоныСообщений.СформироватьСообщениеИОтправить(ШаблонСобытия, ОбъектОповещения, УИД, ДополнительныеПараметры)

В соответствии "ПроизвольныеПараметры" ключ - имя параметра из Шаблона письма, Значение = (в моем случае) вставляемая в письмо строка.
Прикрепленные файлы:
18. begemot 269 20.01.21 17:11 Сейчас в теме
в модуле ШаблоныСообщенийПереопределяемый,
в процедуре ПриПодготовкеШаблонаСообщения() добавить код:
Для каждого Параметр Из ДополнительныеПараметры.Параметры Цикл
	Если ДополнительныеПараметры.ПараметрыСообщения.Свойство(Параметр.Ключ) Тогда
		ДополнительныеПараметры.ПараметрыСообщения.ПроизвольныеПараметры.Вставить(Параметр.Ключ, ДополнительныеПараметры.ПараметрыСообщения[Параметр.Ключ]);
	КонецЕсли;
КонецЦикла;


Подразумевается, что в ПараметрыСообщения у вас будут лежать значения дополнительных параметров
20. gonnahard 06.09.22 00:56 Сейчас в теме
Добрый день,
В общем случае использую следующий подход:
ШаблоныСообщенийПереопределяемый
В процедуре ПриФормированииСообщения(Сообщение, НазначениеШаблона, ПредметСообщения, ПараметрыШаблона)

Использую функцию следующего вида:

Процедура ДозаполнитьПроизвольныеПараметры(Сообщение, НазначениеШаблона, ПредметСообщения, ПараметрыШаблона)
	
	ДополнительныеЗначенияРеквизитов = Новый Соответствие;
	Для каждого КлючИЗначение Из ПараметрыШаблона.Параметры Цикл
		ДополнительныеЗначенияРеквизитов.Вставить(КлючИЗначение.Ключ,"БЛАБЛАБЛАБАЛ");
		ВставитьПараметрыВСтрокуСогласноТаблицеПараметров(ПараметрыШаблона.Текст,ДополнительныеЗначенияРеквизитов,"Произвольные.");
	КонецЦикла;
		
КонецПроцедуры

Процедура ВставитьПараметрыВСтрокуСогласноТаблицеПараметров(ШаблонСтроки, ВставляемыеЗначения, Знач Префикс = "")
	
	ШаблонСтроки = ШаблоныСообщенийСлужебный.ВставитьПараметрыВСтрокуСогласноТаблицеПараметров(ШаблонСтроки,ВставляемыеЗначения,Префикс);
	
КонецПроцедуры

Показать


Может кому поможет, Такой подход позволяет пропихивать в сообщение любые параметры с любым значением из шаблона.
Если правильно определить Соответствие - ДополнительныеЗначенияРеквизитов , Можно регулировать значения произвольных параметров не заходя в конфигуратор.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот