Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Отправка рассылок из 1С проще, чем кажется

Власов Денис Посмотреть все статьи >> Специалист по внедрению 1С партнёрской сети "ИнфоСофт".
11.11.2022
15329
Время прочтения - 5 мин.
Заказать консультацию

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

Вне зависимости от поставленной задачи, для рассылки писем необходимо сначала настроить учетную запись, с которой будет осуществляться рассылка. Для этого перейдем в НСИ и администрирование > Администрирование > Органайзер > Почта > Настройка почты.

11.png

22.png

И по необходимости создадим новую учётную запись. Введем адрес электронный электронной почты, пароль и имя отправителя, которое будет отображаться у получателя. Здесь же можем выбрать, кому будет доступна учетная запись, и как она будет использоваться.

33.png

44.png

Если перейти к настройкам учетной записи, то можно уточнить настройки подключения. Но, как правило, хватает тех, что подставляются по умолчанию. А также можно проверить настройки. В нашем случае все заполнено корректно и проверка прошла успешно.

55.png

66.png

 

Теперь перейдем к первому механизму рассылки отчетов, доступному прямо в пользовательском интерфейсе. Этот вариант рассмотрен на конфигурации Управление торговлей 11.5.8.295.

Создать новую рассылку можно либо через сам отчет, который планируем отправлять.

77.png

Либо через НСИ и администрирование > Администрирование > Печатные формы, отчеты и обработки > Рассылки расчетов создадим новую рассылку.

88.png

99.png


1010.png

Заполним наименование рассылки. И если еще не добавлен необходимый отчет, добавим отчет Задолженность клиентов через подбор.

1111.png

В качестве типа отправки выберем вариант Свой отчет для каждого получателя и получателем выберем Партнеров, что позволит для каждого получателя формировать отчет с учетом отбора по клиенту. Вариант Отчеты указанным получателям формирует единый отчет и отправляет его всем выбранным получателям. Он подойдет, например, для отправки отчетов Прайс-лист и Остатки и доступность товаров.

1212.png

1313.png

 

На вкладке Доставка выберем необходимых получателей, в нашем случае это будет партнер Ассоль, и отправителя - учетную запись, которую мы создавали ранее. Тему и сам текст письма оставим по умолчанию. Но при их формировании можно воспользоваться параметрами, которые при запуске рассылки будут перезаполняться.

1414.png

Убедимся, что у партнера Ассоль заполнено поле Электронная почта, именно она будет использоваться для всех рассылок.

1515.png

Благодаря тому, что мы выбрали вариант отправки Свой отчет для каждого получателя, в настройках отчета в Отбор по клиенту можно подставить получателя рассылки, и при рассылке данный отчет будет формироваться для каждого получателя индивидуально.

1.png

На вкладке дополнительно можно выбрать формат сохранения отчетов. Выберем документ PDF.

2.png

3.png

На вкладке Расписание настроим расписание рассылки. Ежедневно в 7:30 с периодом повтора 7, тогда рассылка будет запускаться каждый седьмой день в заданное время.

4.png

Подпишитесь на дайджест!
Подпишитесь на дайджест, и получайте ежемесячно подборку полезных статей.

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Далее убедимся, что стоит флажок Подготовлена, иначе рассылка не будет работать, и запишем ее. И чтобы не ждать, когда рассылка запустится по расписанию, запустим ее вручную с помощью кнопки Выполнить сейчас.

5.png

Открывается окно с процессом отправки.

6.png

И когда окно закрылось, проверяем на почте получателе, что письмо успешно пришло.

7.png

 

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

Данный алгоритм построен на формировании документа Электронное письмо исходящее.

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

                                              
                                               //Подготовка макета присоединенного файла
                                               ТабличныйДокументПрисоединенный = Новый ТабличныйДокумент;
                                               МакетПрикрепленногоФайла = Обработка.ПолучитьМакет("МакетПрикрепляемыйФайл");
                                              

                                               ОбластьПрисоединенныйФайл = МакетПрикрепленногоФайла.ПолучитьОбласть("ОбластьМакет");
                                               КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудника(Истина,СтрСотрудник.Сотрудник,"Должность", ТекущаяДата());
                                               ФизическоеЛицо = СтрСотрудник.ФизическоеЛицо;
                                               Если ФизическоеЛицо.Пол = Перечисления.ПолФизическогоЛица.Женский Тогда
                                                               УвОбращение = "Уважаемая";
                                                               Пол = 2;

                                               Иначе
                                                               УвОбращение = "Уважаемый";
                                                               Пол = 1;
                                               КонецЕсли;
                                               ОбластьПрисоединенныйФайл.Параметры.Организация = Организация;
                                               ОбластьПрисоединенныйФайл.Параметры.ДатаПисьма = Формат(Дата(ТекущаяДата()),"ДЛФ=ДД");
                                               ОбластьПрисоединенныйФайл.Параметры.ДолжностьСотрудника = СклонениеПредставленийОбъектов.ПросклонятьПредставление
                                               (КадровыеДанные.Должность.Наименование, 3, КадровыеДанные.Должность);
                                               ОбластьПрисоединенныйФайл.Параметры.ФИОСотрудника = СклонениеПредставленийОбъектов.ПросклонятьФИО
                                               (ФизическоеЛицо.Наименование, 3, ФизическоеЛицо, Пол);
                                               ОбластьПрисоединенныйФайл.Параметры.ПредставлениеСотрудника = (УвОбращение + " " + ФизическоеЛицо.Имя + " " + ФизическоеЛицо.Отчество);
                                               ОбластьПрисоединенныйФайл.Параметры.ГодГрафика = Формат(Год(ГрафикОтпусков.Дата), "ЧГ=");
                                               ОбластьПрисоединенныйФайл.Параметры.ДатаГрафика = Формат(Дата(ГрафикОтпусков.Дата),"ДЛФ=Д");
                                               ОбластьПрисоединенныйФайл.Параметры.ДатаНачалаОтпуска = Формат(Дата(СтрСотрудник.НачалоОтпуска),"ДЛФ=Д");
                                               ОбластьПрисоединенныйФайл.Параметры.ДатаОкончанияОтпуска = Формат(Дата(СтрСотрудник.КонецОтпуска),"ДЛФ=Д");
                                               ОбластьПрисоединенныйФайл.Параметры.ДнейОтпуска = СтрСотрудник.Дней;
                                              
                                               ТабличныйДокументПрисоединенный.Вывести(ОбластьПрисоединенныйФайл);
                                              
                                               //Создание документа ЭлектронноеПисьмоИсходящее
                                               ДокументПисьмо = Документы.ЭлектронноеПисьмоИсходящее.СоздатьДокумент();
                                               ДокументПисьмо.УстановитьНовыйНомер();
                                               ДокументПисьмо.Дата = ТекущаяДата();
                                               ДокументПисьмо.ДатаОтправления = ТекущаяДата();
                                               ДокументПисьмо.Автор = ПараметрыСеанса.ТекущийПользователь;
                                               ДокументПисьмо.ОтправительПредставление = Объект.ПочтаОтправителя;
                                               ДокументПисьмо.УчетнаяЗапись = Объект.ПочтаОтправителя;
                                               СтрокаПолучатель = ДокументПисьмо.ПолучателиПисьма.Добавить();
                                               СтрокаПолучатель.Адрес = СтрСотрудник.ЭлектроннаяПочта;
                                               СтрокаПолучатель.Контакт = СтрСотрудник.ФизическоеЛицо;
                                               СтрокаПолучатель.Представление = СтрСотрудник.ФизическоеЛицо;
                                               ДокументПисьмо.Тема = ("Отпуск " + СтрСотрудник.ФизическоеЛицо + " " + Формат(Дата(СтрСотрудник.НачалоОтпуска),"ДЛФ=Д"));
                                               ДокументПисьмо.Текст = ТелоПисьма;
                                               ДокументПисьмо.Автор = Объект.ПочтаОтправителя;
                                               ДокументПисьмо.ЕстьВложения = Истина;
                                              
                                               ДокументПисьмо.Записать();
                                              
                                               //Присоединение файла к письму
                                               ИмяФайла = КаталогВременныхФайлов() + ДокументПисьмо.Тема + ".pdf";
                                               ТабличныйДокументПрисоединенный.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
                                              
                                               Данные = Новый ДвоичныеДанные(ИмяФайла);
                                               АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор);
                                              
                                               ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайла);
                                              
                                               ПараметрыФайла = Новый Структура;
                                               ПараметрыФайла.Вставить("Автор", Пользователи.ТекущийПользователь());
                                               ПараметрыФайла.Вставить("ВладелецФайлов", ДокументПисьмо.Ссылка);
                                               ПараметрыФайла.Вставить("ИмяБезРасширения", ПолноеИмяФайла.ИмяБезРасширения);
                                               ПараметрыФайла.Вставить("РасширениеБезТочки", ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(ПолноеИмяФайла.Расширение));
                                               ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", ТекущаяУниверсальнаяДата());
                                              
                                               ПрисоединенныйФайлСсылка = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресВоВременномХранилище);
                                              
                КонецЦикла;

В результате выполнения кода для каждого сотрудника будет сформирован документ Электронное письмо исходящего, в текст которого будет подставляться содержимое макета текстового документа «МакетСопроводительноеПисьмо» и к которому будет присоединен файл в формате PDF с содержимым макета табличного документа «МакетПрикрепляемыйФайл». Далее при очередном выполнении регламентного задания «Получение и отправка электронных писем» все сформированные письма будут отправлены.


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных и соглашаетесь с политикой конфиденциальности.

Рассказать друзьям
1С:УТ Для разработчиков 1С
Вам может быть интересно: