Приходят одинаковые письма в формате HTML
Здравствуйте! Работаю во внешней обработке, отправляю письма по просроченным заявкам, нужно сделать так, чтобы в письме "Номер" просроченной заявки добавлялся в зависимости от того сколько заявок просрочено, то есть если одна заявка просрочена тогда берется её номер и вставляется в текст письма, если две то первый номер заявки и второй и так далее. Сейчас же в теме письма и в тексте письма приходит только по первой заявке номер. Приложу скриншот и код чтобы было понятно. Возможно это реализовать в одном письме или придется создавать несколько писем и если можно в одном письме это реализовать то как?
Функция ЗаполнитьТабличнуюЧасть() Экспорт
ЭтотОбъект.Документы.Очистить();
КоличествоПозиций = 0;
Если ЭтотОбъект.ДатаРассылки = Дата(1,1,1) Тогда
ТекущаяДата = ТекущаяДата();
ДатаРассылки = НачалоДня(ТекущаяДата);
Иначе
ДатаРассылки = ЭтотОбъект.ДатаРассылки;
КонецЕсли;
//СемьДнейВСекундах = 604800;
//ДатаОповещения = ДатаРассылки - СемьДнейВСекундах;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыЗаявокКлиентов.ВРаботе);
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкиКлиентов.Ссылка КАК Документ,
| ЗаявкиКлиентов.Сотрудник КАК СотрудникТЧ,
| СотрудникиКИ.АдресЭП КАК АдресСотрудника,
| ЗаявкиКлиентов.Статус КАК Статус,
| иЗаявкиКлиентов.СрокВыполнения КАК СрокВыполнения
|ИЗ
| Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники.КонтактнаяИнформация КАК СотрудникиКИ
| ПО ЗаявкиКлиентов.Сотрудник = СотрудникиКИ.Ссылка
| ГДЕ
| ЗаявкиКлиентов.Статус = &Статус
| И ЗаявкиКлиентов.СрокВыполнения < &ТекущаяДата";
Рез = Запрос.Выполнить();
ТЗ = Рез.Выгрузить();
Если НЕ Рез.Пустой() Тогда
Выборка = Рез.Выбрать();
Пока Выборка.Следующий() Цикл
СтрТЧ = ЭтотОбъект.Документы.Добавить();
СтрТч.ОК = Истина;
СтрТЧ.ДокСсылка = Выборка.Документ;
СтрТЧ.Сотрудник = Выборка.СотрудникТЧ;
СтрТЧ.АдресСотрудника = Выборка.АдресСотрудника;
СтрТЧ.Статус = Выборка.Статус;
СтрТЧ.СрокВыполнения = Выборка.СрокВыполнения;
КонецЦикла;
КоличествоПозиций = Выборка.Количество();
КонецЕсли;
Возврат КоличествоПозиций;
КонецФункции // ЗаполнитьНаОсновеПриобретений() Экспорт
ПоказатьФункция ВыполнитьРассылку(ДатаРассылки) Экспорт
СписокПолучивших = "";
Если ЭтотОбъект.Документы.Количество() = 0 Тогда
Возврат СписокПолучивших;
КонецЕсли;
МассивМенеджеров = Новый Массив();
Для каждого Стр Из ЭтотОбъект.Документы Цикл
Если Стр.ОК = Истина Тогда
МассивМенеджеров.Добавить(Стр.Сотрудник);
КонецЕсли;
КонецЦикла;
// Избавляемся от возможных дублей:
МассивМенеджеров = МассивБезДублейДляМенеджера(МассивМенеджеров);
ЗаголовокПрограммы = "";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗС.Значение КАК Значение
|ИЗ
| Константа.ЗаголовокСистемы КАК ЗС";
Рез = Запрос.Выполнить();
Если НЕ Рез.Пустой() Тогда
Выборка = Рез.Выбрать();
Выборка.Следующий();
ЗаголовокПрограммы = Выборка.Значение;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкиКлиентов.Номер КАК Номер
|ИЗ
| Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов";
Рез = Запрос.Выполнить();
Если НЕ Рез.Пустой() Тогда
Выборка = Рез.Выбрать();
Выборка.Следующий();
НомерЗаявки = Выборка.Номер;
КонецЕсли;
// Через эту директиву значение не получить:
//ЗаголовокПрограммы = Метаданные.Константы.ЗаголовокСистемы;
Если ЗаголовокПрограммы <> "" Тогда
ЗаголовокПрограммы = "ЗаголовокПрограммы " + ЗаголовокПрограммы;
Иначе
ЗаголовокПрограммы = "ЗаголовокПрограммы ";
КонецЕсли;
Для каждого Сотрудник Из МассивМенеджеров Цикл
Если Сотрудник <> Справочники.Сотрудники.ПустаяСсылка() Тогда
ТекстСписка = "";
ТекстПисьма = "";
Адрес = "";
Счетчик = 1;
Для каждого СтрТЧ Из ЭтотОбъект.Документы Цикл
Если СтрТЧ.ОК И СтрТЧ.Сотрудник = Сотрудник Тогда
СчетчикСтрока = "" + Строка(Счетчик) + ". ";
ТекстСписка = ТекстСписка + СчетчикСтрока + СтрТЧ.НомерСтроки + СтрТЧ.Сотрудник + " Начало отпуска: " + Формат(СтрТЧ.СрокВыполнения,"ДФ=dd.MM.yyyy") + "" + Символы.ПС;
Адрес = СтрТЧ.АдресСотрудника;
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
ТекстПисьмаДляМенеджера = ТекстПисьмаДляОтветственногоВФорматеHTML(Сотрудник, ДатаРассылки, ТекстСписка, ЗаголовокПрограммы, НомерЗаявки);
Если ТекстПисьмаДляМенеджера = Истина Тогда
СписокПолучивших = СписокПолучивших + Сотрудник + Символы.ПС;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат СписокПолучивших;
КонецФункции // ВыполнитьРассылку(ДатаРассылки) Экспорт
ПоказатьФункция ТекстПисьмаДляОтветственногоВФорматеHTML(СотрудникТЧ, ДатаРассылки, ТекстСписка, ЗаголовокПрограммы, НомерЗаявки)
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
Тема = "Уведомление о просроченных заявках №" + НомерБезЛидирующихНулей(НомерЗаявки) + " на " + ЭтотОбъект.ДатаРассылки;
ТекстПисьма =
"<HT ML>
|<ST YLE TYPE = ""text/css"">
|#s1 {color: #000000; font-family: Arial; font-size: 14px}
|</STYLE>
|<BODY ID=s1>
|На " + Формат(ДатаРассылки, "ДФ=dd.MM.yyyy") + " г." + " следующие заявки просрочены " + "№" + НомерБезЛидирующихНулей(НомерЗаявки) + "
|
|Автоматическая электронная рассылка" + "
|(отвечать на это письмо не требуется)
|</BODY>
|</HTML>";
АдресаКоторымОтправляемПисьма = "";
Для каждого Строка из ЭтотОбъект.Документы Цикл
АдресаКоторымОтправляемПисьма = АдресаКоторымОтправляемПисьма + Строка.АдресСотрудника + ",";
КонецЦикла;
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", АдресаКоторымОтправляемПисьма);
ПараметрыПисьма.Вставить("УчетнаяЗапись", Строка.АдресСотрудника);
ПараметрыПисьма.Вставить("АдресОтвета", АдресаКоторымОтправляемПисьма);
ПараметрыПисьма.Вставить("Тема", Тема);
ПараметрыПисьма.Вставить("Тело", ТекстПисьма);
ПараметрыПисьма.Вставить("ТипТекста", ТипТекстаПочтовогоСообщения.HTML);
Попытка
РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);
Результат = Истина;
Исключение
Сообщить("Не удалось отправить письма по причине " + ОписаниеОшибки());
КонецПопытки;
Возврат Результат;
КонецФункции // ТекстПисьмаВФорматеHTML()
ПоказатьПрикрепленные файлы:
По теме из базы знаний
Найденные решения
Запрос = Новый Запрос(
//Запрос.Текст = // зачем это?
"ВЫБРАТЬ
| ЗаявкиКлиентов.Номер КАК Номер
|ИЗ
| Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов");
// Я так даже в детском садике не писал
// Рез = Запрос.Выполнить();
// Если НЕ Рез.Пустой() Тогда
// Выборка = Рез.Выбрать();
// Выборка.Следующий();
// НомерЗаявки = Выборка.Номер;
// КонецЕсли;
НомераЗаявок = СтрСоединить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер"),",");
Показать
(4)
Самое простое - создать функцию. 1С не умеет прилично с этим работать, так что приходится писать какие-то такие костыли:
а как теперь всей колонке "НомерБезЛидирующихНулей" присвоить
П - программирование!
Самое простое - создать функцию. 1С не умеет прилично с этим работать, так что приходится писать какие-то такие костыли:
Функция МассивНомеровБезЛидируюихНулей(МассивНомеров)
Результат = Новый Массив;
Для Каждого Номер ИЗ МассивНомеров Цикл
Результат.Добавить(НомерБезЛидирующихНулей(Номер))
КонецЦикла;
Возврат Результат
КонецФункции
...
НомераЗаявок = СтрСоединить(
МассивНомеровБезЛидируюихНулей(
Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер") ),",");
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Запрос = Новый Запрос(
//Запрос.Текст = // зачем это?
"ВЫБРАТЬ
| ЗаявкиКлиентов.Номер КАК Номер
|ИЗ
| Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов");
// Я так даже в детском садике не писал
// Рез = Запрос.Выполнить();
// Если НЕ Рез.Пустой() Тогда
// Выборка = Рез.Выбрать();
// Выборка.Следующий();
// НомерЗаявки = Выборка.Номер;
// КонецЕсли;
НомераЗаявок = СтрСоединить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер"),",");
Показать
(4)
....
НомераЗаявокМассив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер");
Для Каждого НомерЗаявки ИЗ НомераЗаявокМассив Цикл
НомерЗаявки = НомерБезЛидирующихНулей(НомерЗаявки);
КонецЦикла;
НомераЗаявокСтрока = СтрСоединить(НомераЗаявокМассив, ",");
(7)Хорошо
....
НомераЗаявок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер");
НомераЗаявокМассив = Новый Массив;
Для Каждого НомерЗаявки ИЗ НомераЗаявок Цикл
НомераЗаявокМассив.Добавить(НомерБезЛидирующихНулей(НомерЗаявки));
КонецЦикла;
НомераЗаявокСтрока = СтрСоединить(НомераЗаявокМассив, ",");
(10) А еще можно вопрос не по теме, у меня сколько заявок находит столько и писем отправляет, эта строчка по нескольку раз отрабатывает
Как сделать чтобы одно письмо отправляло?
Если ТекстПисьмаДляМенеджера = Истина Тогда
СписокПолучивших = СписокПолучивших + Сотрудник + Символы.ПС;
КонецЕсли;
Как сделать чтобы одно письмо отправляло?
(11)
Как сделать чтобы одно письмо отправляло?
Элементарно! Для начала вынести из функции "ТекстПисьмаДляОтветственногоВФорматеHTML" отправку письма в функцию рассылки. Изменить подход к формированию текста письма. Просто напиши "математическую модель" задачи - простой пронумерованный список действий, которые должна сделать программа. 1 - получить список заявок. 2 - получить список сотрудников. 3 - получить текст письма с заявками и сотрудниками. 4 - отправить почту. Для каждого пункта свои 1/2/3/4/... - работа!
(4)
Самое простое - создать функцию. 1С не умеет прилично с этим работать, так что приходится писать какие-то такие костыли:
а как теперь всей колонке "НомерБезЛидирующихНулей" присвоить
П - программирование!
Самое простое - создать функцию. 1С не умеет прилично с этим работать, так что приходится писать какие-то такие костыли:
Функция МассивНомеровБезЛидируюихНулей(МассивНомеров)
Результат = Новый Массив;
Для Каждого Номер ИЗ МассивНомеров Цикл
Результат.Добавить(НомерБезЛидирующихНулей(Номер))
КонецЦикла;
Возврат Результат
КонецФункции
...
НомераЗаявок = СтрСоединить(
МассивНомеровБезЛидируюихНулей(
Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер") ),",");
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот