Получение сформированной внешней печатной формы из документа.
Добрый день всем!
ОФ 8.1
Есть вн. печатная форма которая печатается из документа.
Появилась следующая задача:
Необходимо сформированный ТД(вн.печатная форма заполненная) получить внутри документа и отправить на почту.
Собственно возможно ли это сделать не добавляя макет к документу и не переписывая ТД а напрямую перехватить формирование ТД ?
ОФ 8.1
Есть вн. печатная форма которая печатается из документа.
Появилась следующая задача:
Необходимо сформированный ТД(вн.печатная форма заполненная) получить внутри документа и отправить на почту.
Собственно возможно ли это сделать не добавляя макет к документу и не переписывая ТД а напрямую перехватить формирование ТД ?
По теме из базы знаний
- Печатная форма договора контрагента по шаблону Word с выгрузкой в MS Word для УПП, КА, УТ 10.3 и УНФ.
- Создание внешней печатной формы под УП с возможностью передачи параметров (для конфигураций на БСП)
- Формирование комплекта печатных форм в типовых конфигурациях для разнотипных документов
- Программное формирование существующих печатных форм
- Внешняя печатная форма в формате Word (.docx, .doc) с помощью средств БСП
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Возможно. Я делал похожу задачу, но там скорее всего печать через БСП - а это достаточно много вложенных процедур. Нужно либо хорошо понимать внутреннее устройство механизма печатных форм через БСП, либо будет тяжело.
Я поступил проще - докопался до места где ТД уже сформирован и просто сохранял его в настройку, а потом в модуле формы документа из настройки прочитал.
Я поступил проще - докопался до места где ТД уже сформирован и просто сохранял его в настройку, а потом в модуле формы документа из настройки прочитал.
(1) На 8.1 могут быть заморочки с почтой в плане SSL-шифрования. Если этот аспект не беспокоит, то сделать довольно просто
Пример с некой табличной частью, в которой строки с эмейлами на который отправлять выбранную на форме "печатную форму" по имени п.ф. из предварительно сформированного списка пф.
Возможно некоторый синтаксис не подойдет для 8.1
Пример с некой табличной частью, в которой строки с эмейлами на который отправлять выбранную на форме "печатную форму" по имени п.ф. из предварительно сформированного списка пф.
Возможно некоторый синтаксис не подойдет для 8.1
ПрофильОтправки = Новый ИнтернетПочтовыйПрофиль;
ПрофильОтправки.АдресСервераSMTP = АдресСервераSMTP;
ПрофильОтправки.ПортSMTP = ПортSMTP;
ПрофильОтправки.ПользовательSMTP = ИмяОтправителя;
ПрофильОтправки.ПарольSMTP = ПарольОтправитель;
ПрофильОтправки.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
//ПрофильОтправки.ИспользоватьSSLSMTP = ИспользоватьSSLSMTP
//ПрофильОтправки.ТолькоЗащищеннаяАутентификацияSMTP = Истина;
КаталогВФ = КаталогВременныхФайлов();
//Почта = Новый Почта;
Почта = Новый ИнтернетПочта;
ПодключениеОткрыто = Ложь;
МакетТекст = ПолучитьМакет("МакетТекст");
ТекстМакета = МакетТекст.ПолучитьТекст();
ТипФайла = ТипФайлаТабличногоДокумента.PDF;
Для Каждого ВыбНомерСтроки из ТЧДанные Цикл
Если НЕ ВыбНомерСтроки.ФлагПосылки Тогда
Продолжить;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ВыбНомерСтроки.ЭлАдрес) Тогда
Сообщить("Не заполнен email в строке №"+ВыбНомерСтроки.НомерСтроки);
Продолжить;
КонецЕсли;
//Письмо = Новый ПочтовоеСообщение;
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.ИмяОтправителя = ИмяОтправителя;
Письмо.Отправитель = ПочтаОтправитель;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
ДокОбъект = ВыбНомерСтроки.ДокСчет.ПолучитьОбъект();
ИмяФ = "Invoice №"+ДокОбъект.Номер;
ТемаПисьма = "";
ТекстПисьма = "";
ИмяФайла = КаталогВФ+ИмяФ+".pdf";
Картинка = ПолучитьМакет("Лого");
cid = Новый УникальныйИдентификатор;
Попытка
СтруктураВнутреннихПечатныхФорм = ДокОбъект.ПолучитьСтруктуруПечатныхФорм();
Исключение
СтруктураВнутреннихПечатныхФорм = Новый Структура;
КонецПопытки;
ДеревоМакетовПечати = УниверсальныеМеханизмы.ПолучитьДеревоМакетовПечати(ДокОбъект.Ссылка, СтруктураВнутреннихПечатныхФорм);
СтрокаКнопки = ДеревоМакетовПечати.Строки.Найти(ИмяВнешнейПФ, "Текст");
Если НЕ ЗначениеЗаполнено(СтрокаКнопки) Тогда
Сообщить("Не найдена внешняя печаная форма с именем "+ИмяВнешнейПФ);
Прервать;
КонецЕсли;
ТабДок = Новый ТабличныйДокумент;
Расшифровка = СтрокаКнопки.Расшифровка;
Если ТипЗнч(Расшифровка) = Тип("Структура") Тогда
ТабДок = УниверсальныеМеханизмы.НапечататьВнешнююФорму(ДокОбъект.Ссылка, Расшифровка);
Иначе
Для Каждого ЭлемСтруктуры из СтруктураПФ Цикл
Если ИмяВнешнейПФ = ЭлемСтруктуры.Значение Тогда
ИмяМакета = ЭлемСтруктуры.Ключ;
КонецЕсли;
КонецЦикла;
ТабДок = ВернутьФункциюПечатиИнвойса(ИмяМакета, ДокОбъект); // внутри что-то вроде ТабДок =ДокОбъект.ПечатьСчетаЗаказа(ИмяМакета);
КонецЕсли;
ТабДок.Записать(ИмяФайла, ТипФайла);
Письмо.Вложения.Добавить(ИмяФайла, ИмяФайла);
ПочтовоеВложение = Письмо.Вложения.Добавить(Картинка);
ПочтовоеВложение.Идентификатор = cid;
ТемаПисьма = ИмяФ;
Если ЗначениеЗаполнено(ВыбНомерСтроки.ПроизвольныйТекст) Тогда
ТекстПисьма = ВыбНомерСтроки.ПроизвольныйТекст+Символы.ПС+ТекстМакета;
Иначе
ТекстПисьма = ТекстМакета;
КонецЕсли;
ТекстПисьма = СтрЗаменить(ТекстПисьма, "ImageID", cid);
Письмо.Тема = СокрЛП(ТемаПисьма);
Письмо.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.HTML);
Письмо.ОбработатьТексты();
МасАдресов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ВыбНомерСтроки.ЭлАдрес, ";");
Для Каждого ВыбАдрес из МасАдресов Цикл
Письмо.Получатели.Добавить(СокрЛП(ВыбАдрес));
КонецЦикла;
ЗапросПодтверждения = Ложь;
Попытка
Если НЕ ПодключениеОткрыто Тогда
Почта.Подключиться(ПрофильОтправки);
ПодключениеОткрыто = Истина;
КонецЕсли;
Почта.Послать(Письмо);
Сообщить("Отправлено письмо на e-mail "+ВыбНомерСтроки.ЭлАдрес);
//ДокОбъект.ОбменДанными.Загрузка = Истина;
//ДокОбъект.Отослан = Истина;
//ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Если ПодключениеОткрыто Тогда
Почта.Отключиться();
КонецЕсли;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот