Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
02 дек 2021, 06:30

Отправлять письмо на эл.почту

Автор Ивашка, 12 фев 2021, 11:16

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

Ивашка

Здравствуйте!!! Можете подсказать. Надо чтоб, под внешним пользователем, как он создал задачу, нажав провести и закрыть, надо чтоб пришло уведомление на почту основному получателю(может быть несколько), для этого я в справочник ФизическиеЛица добавил реквизит типа булево "АИ_ОсновнойПолучатель". Не отправляется письмо, пишет невозможно получить текущего пользователя, где-то какое-то условие надо применить?
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
         ПолучитьОсновногоПолучателя();
КонецПроцедуры

&НаСервере
Процедура ПолучитьОсновногоПолучателя()
   
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |   ФизическиеЛицаКонтактнаяИнформация.АдресЭП КАК АдресЭП
        |ИЗ
        |   Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
        |ГДЕ
        |   ФизическиеЛицаКонтактнаяИнформация.Ссылка.АИ_ОсновнойПолучатель
        |   И ФизическиеЛицаКонтактнаяИнформация.АдресЭП <> """"";

        Выборка = Запрос.Выполнить().Выбрать();
        Адреса = Новый Массив;
        Пока Выборка.Следующий() Цикл
            АдресПолучателя = Выборка.АдресЭП;
        Бэклог = ?(Объект.Ссылка.Пустая(), Неопределено, Объект.Ссылка);
            РегбиУниверсальныеФункцииСервер.СоздатьПисьмо(Бэклог,АдресПолучателя);
        КонецЦикла;
       
КонецПроцедуры

процедура создания письма
Процедура СоздатьПисьмо(Бэклог, АдресПолучателя) Экспорт
   
    Сообщение = Неопределено;
    УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
   
   
    НачатьТранзакцию();
    Попытка
       
        Письмо = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();
       
    //Если ВнешниеПользователи.ТекущийВнешнийПользователь() Тогда
        //Письмо.Автор                    = ВнешниеПользователи.ТекущийВнешнийПользователь();
    //Иначе
        Письмо.Автор                    = Пользователи.ТекущийПользователь();
    //КонецЕсли;
        Письмо.Ответственный            = Пользователи.ТекущийПользователь();
        Письмо.Дата                     = ТекущаяДатаСеанса();
        Письмо.Важность                 = Перечисления.ВариантыВажностиВзаимодействия.Обычная;
        Письмо.Кодировка                = КодировкаТекста.UTF8;
        Письмо.ОтправительПредставление = Строка(УчетнаяЗапись);
       
        ОписаниеЗадачи = Бэклог.КраткоеОписаниеЭлементаБэклога.Получить();
        ЗначениеТекста = ОписаниеЗадачи.ПолучитьТекст();
        Письмо.Текст = ЗначениеТекста;
       
        Письмо.Тема = Бэклог.Номер + " " + Бэклог.Наименование;
        Письмо.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст;
        Письмо.УчетнаяЗапись = УчетнаяЗапись;
        Письмо.ВзаимодействиеОснование = Неопределено;
       
        // Заполним реквизиты
ВключатьТелоИсходногоПисьма, ОтображатьТелоИсходногоПисьма, УведомитьОДоставке и УведомитьОПрочтении.
        НастройкиПользователя = ПолучитьПараметрыРаботыПользователяДляИсходящегоЭлектронногоПисьма(
                                   УчетнаяЗапись, Перечисления.СпособыРедактированияЭлектронныхПисем.ОбычныйТекст, Истина);
        ЗаполнитьЗначенияСвойств(Письмо, НастройкиПользователя);
       
        Письмо.УдалятьПослеОтправки = Ложь;
       
        //Бэклог.КонтактноеЛицо.КонтактнаяИнформация[0].Представление
       
        НоваяСтрока = Письмо["ПолучателиПисьма"].Добавить();
        //НоваяСтрока.Адрес         = Бэклог.КонтактноеЛицо.КонтактнаяИнформация[0].АдресЭП;
        НоваяСтрока.Представление = Бэклог.КонтактноеЛицо.КонтактнаяИнформация[0].Представление;
        НоваяСтрока.Адрес         = АдресПолучателя;
       
        Письмо.СписокПолучателейПисьма    = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Письмо.ПолучателиПисьма, Ложь);
        Письмо.СтатусПисьма = ?(ОбщегоНазначения.ИнформационнаяБазаФайловая(),
            Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик,
            Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее);
            Письмо.Записать();
    МодульУправлениеЭлектроннойПочтой.ЗаписатьВложениеЭлектронногоПисьмаИзВременногоХранилища(Письмо.Ссылка);
       
   
        Реквизиты = СтруктураРеквизитовВзаимодействияДляЗаписи(Предмет, Истина);
        ВзаимодействияВызовСервера.ЗаписьРегистрРеквизитыВзаимодействия(Письмо.Ссылка, Реквизиты);
       
        ЗафиксироватьТранзакцию();
       
    Исключение
       
        ОтменитьТранзакцию();
        ТекстСообщения = НСтр("ru = 'Не удалось создать письмо : %Письмо% по причине: %Причина%'");
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Письмо%",  Письмо);
        ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
            УровеньЖурналаРегистрации.Ошибка,, Письмо, ТекстСообщения);
        Возврат;
           
    КонецПопытки;
       
    Попытка
        ИдентификаторПисьма = ВыполнитьОтправкуПисьма(Письмо);
    Исключение
        ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Ошибка при отправке письма %1'"),КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        Возврат;
    КонецПопытки;
   
    Если НЕ Письмо.УдалятьПослеОтправки Тогда
       
        Попытка
            Письмо.ИдентификаторСообщения = ИдентификаторПисьма;
            Письмо.СтатусПисьма           = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено;
            Письмо.ДатаОтправления        = ТекущаяДатаСеанса();
            Письмо.Записать(РежимЗаписиДокумента.Запись);
           
            ВзаимодействияВызовСервера.УстановитьПапкуЭлектронногоПисьма(
                Письмо.Ссылка, ОпределитьПапкуДляПисьма(Письмо.Ссылка));
        Исключение
            ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                                НСтр("ru = 'Ошибка при записи письма после успешной отправки %1'"),
                                КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        КонецПопытки;
       
    Иначе
       
        Письмо.Прочитать();
        Письмо.Удалить();
       
    КонецЕсли;
   
КонецПроцедуры


LexaK

что за команда
Письмо.Автор = Пользователи.ТекущийПользователь();
вот и система не понимает, о чем и пишет
обычно используют такой код (НО, зависит от конфигурации)
Письмо.Автор = ПараметрыСеанса.ТекущийПользователь;
ответ Понравился? (в смысле пригодился?)

Ивашка

Цитата: LexaK от 12 фев 2021, 11:33
что за команда
Письмо.Автор = Пользователи.ТекущийПользователь();
вот и система не понимает, о чем и пишет
обычно используют такой код (НО, зависит от конфигурации)
Письмо.Автор = ПараметрыСеанса.ТекущийПользователь;
Автор это тот пользователь, кто создает задачу

LexaK

ЦитироватьАвтор это тот пользователь, кто создает задачу
при чем здесь Автор?
вот это что?
ЦитироватьПользователи.ТекущийПользователь();
вот это система не понимает :fdbsdfbsd:
ответ Понравился? (в смысле пригодился?)

Ивашка

Цитата: LexaK от 12 фев 2021, 12:16
ЦитироватьАвтор это тот пользователь, кто создает задачу
при чем здесь Автор?
вот это что?
ЦитироватьПользователи.ТекущийПользователь();
вот это система не понимает :fdbsdfbsd:
это внутренний пользователь, а не внешний
пишу так
ВнешниеПользователи.ТекущийВнешнийПользователь()
все равно ошибка

LexaK

вот похоже что при Внешнем соединении она и не срабатывает. если я правильно понял ... :(
ответ Понравился? (в смысле пригодился?)

Ивашка

Цитата: LexaK от 12 фев 2021, 12:39
вот похоже что при Внешнем соединении она и не срабатывает. если я правильно понял ... :(
и что в этом случае делать?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск