Получение сформированной внешней печатной формы из документа.

1. Intercititude 01.10.20 16:04 Сейчас в теме
Добрый день всем!
ОФ 8.1

Есть вн. печатная форма которая печатается из документа.

Появилась следующая задача:

Необходимо сформированный ТД(вн.печатная форма заполненная) получить внутри документа и отправить на почту.
Собственно возможно ли это сделать не добавляя макет к документу и не переписывая ТД а напрямую перехватить формирование ТД ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. impextr 89 01.10.20 16:45 Сейчас в теме
Возможно. Я делал похожу задачу, но там скорее всего печать через БСП - а это достаточно много вложенных процедур. Нужно либо хорошо понимать внутреннее устройство механизма печатных форм через БСП, либо будет тяжело.
Я поступил проще - докопался до места где ТД уже сформирован и просто сохранял его в настройку, а потом в модуле формы документа из настройки прочитал.
3. BackinSoda 01.10.20 21:59 Сейчас в теме
(1) На 8.1 могут быть заморочки с почтой в плане SSL-шифрования. Если этот аспект не беспокоит, то сделать довольно просто
Пример с некой табличной частью, в которой строки с эмейлами на который отправлять выбранную на форме "печатную форму" по имени п.ф. из предварительно сформированного списка пф.
Возможно некоторый синтаксис не подойдет для 8.1
ПрофильОтправки = Новый ИнтернетПочтовыйПрофиль;
	ПрофильОтправки.АдресСервераSMTP    = АдресСервераSMTP;
	ПрофильОтправки.ПортSMTP            = ПортSMTP;
	ПрофильОтправки.ПользовательSMTP    = ИмяОтправителя;
	ПрофильОтправки.ПарольSMTP          = ПарольОтправитель;
	
	ПрофильОтправки.АутентификацияSMTP  = СпособSMTPАутентификации.ПоУмолчанию;
	//ПрофильОтправки.ИспользоватьSSLSMTP = ИспользоватьSSLSMTP
	//ПрофильОтправки.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
	
	КаталогВФ = КаталогВременныхФайлов();
	
	//Почта = Новый Почта;
	Почта = Новый ИнтернетПочта;
	ПодключениеОткрыто = Ложь;
	
	МакетТекст = ПолучитьМакет("МакетТекст");
	ТекстМакета = МакетТекст.ПолучитьТекст();
	
	ТипФайла = ТипФайлаТабличногоДокумента.PDF;
	
	Для Каждого ВыбНомерСтроки из ТЧДанные Цикл 
		
		Если НЕ ВыбНомерСтроки.ФлагПосылки Тогда 
			Продолжить;	
		КонецЕсли;
		
		Если НЕ ЗначениеЗаполнено(ВыбНомерСтроки.ЭлАдрес) Тогда 
			Сообщить("Не заполнен email в строке №"+ВыбНомерСтроки.НомерСтроки);
			Продолжить;
		КонецЕсли;
		
		//Письмо = Новый ПочтовоеСообщение;
		Письмо = Новый ИнтернетПочтовоеСообщение;
		
		Письмо.ИмяОтправителя = ИмяОтправителя;
		Письмо.Отправитель    = ПочтаОтправитель;
		
		////////////////////////////////////////////////////////////­//////////////////////////////////////////////////
		
		ДокОбъект = ВыбНомерСтроки.ДокСчет.ПолучитьОбъект();
		
		ИмяФ = "Invoice №"+ДокОбъект.Номер;
		
		ТемаПисьма  = "";
		ТекстПисьма = "";
		
		ИмяФайла = КаталогВФ+ИмяФ+".pdf";
		
		Картинка = ПолучитьМакет("Лого");
		cid = Новый УникальныйИдентификатор;
		
		Попытка
			СтруктураВнутреннихПечатныхФорм = ДокОбъект.ПолучитьСтруктуруПечатныхФорм();
		Исключение
			СтруктураВнутреннихПечатныхФорм = Новый Структура;
		КонецПопытки;
		
		ДеревоМакетовПечати = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(ДокОбъект.Ссылка, СтруктураВнутреннихПечатныхФорм);
		СтрокаКнопки = ДеревоМакетовПечати.Строки.Найти(ИмяВнешнейПФ, "Текст");
		
		Если НЕ ЗначениеЗаполнено(СтрокаКнопки) Тогда 
			Сообщить("Не найдена внешняя печаная форма с именем "+ИмяВнешнейПФ);
			Прервать;
		КонецЕсли;
		
		ТабДок = Новый ТабличныйДокумент;
		Расшифровка = СтрокаКнопки.Расшифровка;
		Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
			ТабДок = УниверсальныеМеханизмы.НапечататьВнешнююФорму(ДокОбъект.Ссылка, Расшифровка);
		Иначе 
			Для Каждого ЭлемСтруктуры из СтруктураПФ Цикл
				Если ИмяВнешнейПФ = ЭлемСтруктуры.Значение Тогда 
					ИмяМакета = ЭлемСтруктуры.Ключ;
				КонецЕсли;
			КонецЦикла;
			ТабДок = ВернутьФункциюПечатиИнвойса(ИмяМакета, ДокОбъект); // внутри что-то вроде ТабДок =ДокОбъект.ПечатьСчетаЗаказа(ИмяМакета);

		КонецЕсли;
		
		ТабДок.Записать(ИмяФайла, ТипФайла);
		
		Письмо.Вложения.Добавить(ИмяФайла, ИмяФайла);
		ПочтовоеВложение = Письмо.Вложения.Добавить(Картинка);
		ПочтовоеВложение.Идентификатор = cid;
		
		ТемаПисьма = ИмяФ;
		Если ЗначениеЗаполнено(ВыбНомерСтроки.ПроизвольныйТекст) Тогда 
			ТекстПисьма = ВыбНомерСтроки.ПроизвольныйТекст+Символы.ПС+ТекстМакета; 
		Иначе
			ТекстПисьма = ТекстМакета;
		КонецЕсли;
		
		ТекстПисьма = СтрЗаменить(ТекстПисьма, "ImageID", cid);
		
		Письмо.Тема  = СокрЛП(ТемаПисьма);
		Письмо.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.HTML);
		
		Письмо.ОбработатьТексты();
		
		МасАдресов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ВыбНомерСтроки.ЭлАдрес, ";");
		Для Каждого ВыбАдрес из МасАдресов Цикл 
			Письмо.Получатели.Добавить(СокрЛП(ВыбАдрес));
		КонецЦикла;
		
		ЗапросПодтверждения = Ложь;
		
		Попытка
			
			Если НЕ ПодключениеОткрыто Тогда
				Почта.Подключиться(ПрофильОтправки);
				ПодключениеОткрыто = Истина;
			КонецЕсли;
			
			Почта.Послать(Письмо);
			Сообщить("Отправлено письмо на e-mail "+ВыбНомерСтроки.ЭлАдрес);
			
			//ДокОбъект.ОбменДанными.Загрузка = Истина;
			//ДокОбъект.Отослан = Истина;
			//ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
			
		Исключение
			Сообщить(ОписаниеОшибки());
		КонецПопытки;
		
	КонецЦикла;
	
	Если ПодключениеОткрыто Тогда
		Почта.Отключиться();
	КонецЕсли;
Показать
Оставьте свое сообщение

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