Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
18 Дек 2017, 00:38
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Отправка писем при смене статусов  (Прочитано 1023 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vitalik54

  • *
  • Сообщений: 15
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-08-29
  • Сайт: 
  • Профессия: Ученик 1С
Всем доброго времени суток. Ситуация следующая: есть задача дописать отправку писем с информации о смене статуса заказа клиента при сохранении самого заказа.
Возник вопрос, достаточно ли на для отправки вставить следующий код из стандартных механизмов 1С?

&НаСервере
Процедура ОтправитьПисьмо()

ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая();

Попытка
НачатьТранзакцию();
Письмо = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();

Письмо.Автор                    = Пользователи.ТекущийПользователь();
Письмо.Ответственный            = Пользователи.ТекущийПользователь();
Письмо.Дата                     = ТекущаяДатаСеанса();
Письмо.Важность                 = Перечисления.ВариантыВажностиВзаимодействия.Обычная;
Письмо.Кодировка                = КодировкаТекста.UTF8;
Письмо.ОтправительПредставление = Объект.ОтправительПредставление;

Если Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст Тогда

Письмо.Текст = Объект.ТекстСообщенияПисьма;

Иначе

ТаблицаСоответствийИменВложенийИдентификаторам.Очистить();

СтруктураВложений = Новый Структура;
ТекстСообщенияПисьмоФорматированныйДокумент.ПолучитьHTML(Письмо.ТекстHTML, СтруктураВложений);
Для каждого Вложение Из СтруктураВложений Цикл

НоваяСтрока = ТаблицаСоответствийИменВложенийИдентификаторам.Добавить();
НоваяСтрока.ИмяФайла                  = Вложение.Ключ;
НоваяСтрока.ИдентификаторФайлаДляHTML = Новый УникальныйИдентификатор;
НоваяСтрока.Картинка                  = Вложение.Значение;

КонецЦикла;

Если ТаблицаСоответствийИменВложенийИдентификаторам.Количество() > 0 Тогда

ДокументHTML = Взаимодействия.ПолучитьОбъектДокументHTMLИзТекстаHTML(Письмо.ТекстHTML);
Взаимодействия.ЗаменитьИменаКартинокНаИдентификаторыПочтовыхВложенийВHTML(
ДокументHTML, ТаблицаСоответствийИменВложенийИдентификаторам.Выгрузить());

Письмо.ТекстHTML = Взаимодействия.ПолучитьТекстHTMLИзОбъектаДокументHTML(ДокументHTML);
Письмо.Текст     = Взаимодействия.ПолучитьОбычныйТекстИзHTML(Письмо.ТекстHTML);

КонецЕсли;

КонецЕсли;

Письмо.Тема = Объект.ТемаПисьма;
Письмо.ТипТекста = ?(Объект.ТипТекстаПисьма  = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML,
Перечисления.ТипыТекстовЭлектронныхПисем.HTMLСКартинками,
Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст);
Письмо.УчетнаяЗапись = Объект.УчетнаяЗапись;
Письмо.ВзаимодействиеОснование = Неопределено;

//Заполним реквизиты ВключатьТелоИсходногоПисьма, ОтображатьТелоИсходногоПисьма, УведомитьОДоставке и УведомитьОПрочтении
НастройкиПользователя = Взаимодействия.ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма(
                           Объект.УчетнаяЗапись,
                           Объект.ТипТекстаПисьма,
                           Истина);
ЗаполнитьЗначенияСвойств(Письмо, НастройкиПользователя);

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

Письмо.Комментарий = КомментарийПоНаименованиюШаблона();

Для Каждого ПолучательПисьма Из Объект.АдресатыПочта Цикл

Если Не ПолучательПисьма.ПолучательВыбран Тогда
Продолжить;
КонецЕсли;

Если ПолучательПисьма.Группа = "Кому" Тогда
ИмяТаблицы = "ПолучателиПисьма";
ИначеЕсли ПолучательПисьма.Группа = "Скрытые" Тогда
ИмяТаблицы = "ПолучателиСкрытыхКопий";
ИначеЕсли ПолучательПисьма.Группа = "Копии" Тогда
ИмяТаблицы = "ПолучателиКопий";
ИначеЕсли ПолучательПисьма.Группа = "Получатели" Тогда
ИмяТаблицы = "ПолучателиОтвета";
Иначе
Продолжить;
КонецЕсли;

НоваяСтрока = Письмо[ИмяТаблицы].Добавить();
НоваяСтрока.Адрес         = ПолучательПисьма.Адрес;
НоваяСтрока.Представление = ПолучательПисьма.Представление;
НоваяСтрока.Контакт       = ПолучательПисьма.Контакт;

КонецЦикла;

Письмо.СписокПолучателейПисьма        = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(
                                                                      Письмо.ПолучателиПисьма, Ложь);
Письмо.СписокПолучателейКопий         = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(
                                                                      Письмо.ПолучателиКопий, Ложь);
Письмо.СписокПолучателейСкрытыхКопий  = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(
                                                                      Письмо.ПолучателиСкрытыхКопий, Ложь);
Если ИнформационнаяБазаФайловая Тогда
Письмо.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик;
Иначе
Письмо.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее;
КонецЕсли;

Если Вложения.Количество() > 0 ИЛИ ТаблицаСоответствийИменВложенийИдентификаторам.Количество() > 0 Тогда
Письмо.ЕстьВложения = Истина;
КонецЕсли;

Письмо.Размер = ОценитьРазмерПисьма(Письмо);

Письмо.Записать();

//Добавим вложения
Для Каждого СтрокаТаблицыВложений Из Вложения Цикл

Размер = 0;
ИмяФайла = СтрокаТаблицыВложений.ИмяФайла;

УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(
Письмо.Ссылка, СтрокаТаблицыВложений.ИмяФайлаНаКомпьютере, ИмяФайла, Размер);

КонецЦикла;

Если Объект.ТипТекстаПисьма = Перечисления.СпособыРедактированияЭлектронныхПисем.HTML Тогда

Для каждого Вложение Из ТаблицаСоответствийИменВложенийИдентификаторам Цикл

ДвоичныеДанныеКартинки = Вложение.Картинка.ПолучитьДвоичныеДанные();
АдресКартинкиВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеКартинки, УникальныйИдентификатор);
ПрисоединенныйФайл = УправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(
Письмо.Ссылка,
АдресКартинкиВоВременномХранилище,
"_" + СтрЗаменить(Вложение.ИдентификаторФайлаДляHTML, "-", "_"),
ДвоичныеДанныеКартинки.Размер());

Если ПрисоединенныйФайл <> Неопределено Тогда
ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект();
ПрисоединенныйФайлОбъект.ИДФайлаЭлектронногоПисьма = Вложение.ИдентификаторФайлаДляHTML;
ПрисоединенныйФайлОбъект.Записать();
КонецЕсли;

КонецЦикла;

КонецЕсли;

Предмет = ?(ЗначениеЗаполнено(Объект.Предмет), Объект.Предмет, Письмо.Ссылка);
Реквизиты = ВзаимодействияКлиентСервер.СтруктураРеквизитовВзаимодействияДляЗаписи(,Предмет,Истина,);
ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Письмо.Ссылка, Реквизиты);
ЗафиксироватьТранзакцию();

Исключение
ОтменитьТранзакцию();
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при создании письма %1'"),КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат;
КонецПопытки;

Попытка
ИдентификаторПисьма = Взаимодействия.ВыполнитьОтправкуПисьма(Письмо);
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке письма %1'"),КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат;
КонецПопытки;

Если НЕ Письмо.УдалятьПослеОтправки Тогда

Попытка
Письмо.ИдентификаторСообщения = ИдентификаторПисьма;
Письмо.СтатусПисьма          = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено;
Письмо.ДатаОтправления       = ТекущаяДатаСеанса();
Письмо.Записать(РежимЗаписиДокумента.Запись);

ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(
Письмо.Ссылка, Взаимодействия.ОпределитьПапкуДляПисьма(Письмо.Ссылка));
Исключение
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                    НСтр("ru = 'Ошибка при записи письма после успешной отправки %1'"),
                    КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;

Иначе

Письмо.Прочитать();
Письмо.Удалить();

КонецЕсли;

КонецПроцедуры

Если так, то в каком виде указывать получателя(Имею в виду вопрос с типом данных. Я вытаскиваю адрес из карточки конрагента, а в Письмо.ПолучателиПисьма через отладчик показывается некая таблица значений. Как в итоге указывать получателя не совсем понимаю.)?

Если это все по другому делается, то в каком направлении мне нужно идти?


Теги:
 

Как понять почему перестало работать регламентное задание - "отправка отчетов"?

Автор virtusРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2182
Последний ответ 26 Июл 2014, 16:00
от virtus
Кнопка "Отправка по почте" во внешней печатной форме

Автор SergSSРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 2441
Последний ответ 22 Сен 2014, 14:32
от SergSS
Отправка сканов из папки привязанных к кодам серий номенклатуры из Реализауия товаров и услуг

Автор ГайдарРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 13
Просмотров: 2581
Последний ответ 12 Май 2016, 18:07
от Rasty
Нужна помощь про "Отчет о смене без гашение" и "Z отчет"

Автор Serg85Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 3767
Последний ответ 23 Ноя 2014, 12:36
от дфтын
1с 8.2. Отправка письма через системную учетную запись электронной почты

Автор illionaРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 770
Последний ответ 14 Дек 2016, 13:21
от illiona

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
133 Сообщений
ilyay ilyay
63 Сообщений
AIFrame
61 Сообщений
alex0402
50 Сообщений
andron81_81
44 Сообщений
oleg-x
41 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
27 Сообщений
alexandr_ll
23 Сообщений

* Кто онлайн

  • Точка Гостей: 190
  • Точка Скрытых: 0
  • Точка Пользователей: 6
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal