Приходят одинаковые письма в формате HTML

1. Geophysic 24.05.23 15:44 Сейчас в теме
Здравствуйте! Работаю во внешней обработке, отправляю письма по просроченным заявкам, нужно сделать так, чтобы в письме "Номер" просроченной заявки добавлялся в зависимости от того сколько заявок просрочено, то есть если одна заявка просрочена тогда берется её номер и вставляется в текст письма, если две то первый номер заявки и второй и так далее. Сейчас же в теме письма и в тексте письма приходит только по первой заявке номер. Приложу скриншот и код чтобы было понятно. Возможно это реализовать в одном письме или придется создавать несколько писем и если можно в одном письме это реализовать то как?

Функция ЗаполнитьТабличнуюЧасть() Экспорт

	ЭтотОбъект.Документы.Очистить();
	
    КоличествоПозиций = 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()
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
3. starik-2005 3038 24.05.23 20:50 Сейчас в теме
    Запрос = Новый Запрос(
    
    //Запрос.Текст = // зачем это?
    
    "ВЫБРАТЬ
    |    ЗаявкиКлиентов.Номер КАК Номер
    |ИЗ
    |    Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов");
    
//    Я так даже в детском садике не писал

//    Рез = Запрос.Выполнить();
    
//    Если НЕ Рез.Пустой() Тогда
    
//        Выборка = Рез.Выбрать();
//        Выборка.Следующий();
//        НомерЗаявки = Выборка.Номер;
                                           
//    КонецЕсли;

    НомераЗаявок = СтрСоединить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер"),",");
Показать
Geophysic; +1 Ответить
6. starik-2005 3038 25.05.23 08:35 Сейчас в теме
(4)
а как теперь всей колонке "НомерБезЛидирующихНулей" присвоить
П - программирование!
Самое простое - создать функцию. 1С не умеет прилично с этим работать, так что приходится писать какие-то такие костыли:
Функция МассивНомеровБезЛидируюихНулей(МассивНомеров)
  Результат = Новый Массив;
  Для Каждого Номер ИЗ МассивНомеров Цикл
    Результат.Добавить(НомерБезЛидирующихНулей(Номер))
  КонецЦикла;
  Возврат Результат
КонецФункции
...
 НомераЗаявок = СтрСоединить(
       МассивНомеровБезЛидируюихНулей(
              Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер") ),",");
Показать
Geophysic; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 24.05.23 16:13 Сейчас в теме
(1)
НомераБезЛидирующихНулей(СписокИлиМассивНомеровЗаявки)
3. starik-2005 3038 24.05.23 20:50 Сейчас в теме
    Запрос = Новый Запрос(
    
    //Запрос.Текст = // зачем это?
    
    "ВЫБРАТЬ
    |    ЗаявкиКлиентов.Номер КАК Номер
    |ИЗ
    |    Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов");
    
//    Я так даже в детском садике не писал

//    Рез = Запрос.Выполнить();
    
//    Если НЕ Рез.Пустой() Тогда
    
//        Выборка = Рез.Выбрать();
//        Выборка.Следующий();
//        НомерЗаявки = Выборка.Номер;
                                           
//    КонецЕсли;

    НомераЗаявок = СтрСоединить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер"),",");
Показать
Geophysic; +1 Ответить
4. Geophysic 25.05.23 08:11 Сейчас в теме
(3)
НомераЗаявок = СтрСоединить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер"),",");


Получилось, а как теперь всей колонке "НомерБезЛидирующихНулей" присвоить?
5. nomad_irk 72 25.05.23 08:26 Сейчас в теме
(4)
....
НомераЗаявокМассив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер");
Для Каждого НомерЗаявки ИЗ НомераЗаявокМассив Цикл
     НомерЗаявки = НомерБезЛидирующихНулей(НомерЗаявки);
КонецЦикла;
НомераЗаявокСтрока = СтрСоединить(НомераЗаявокМассив, ",");
7. starik-2005 3038 25.05.23 08:40 Сейчас в теме
(5)
НомерЗаявки = НомерБезЛидирующихНулей(НомерЗаявки);

Что я делаю не так?
Прикрепленные файлы:
9. nomad_irk 72 25.05.23 08:44 Сейчас в теме
(7)Хорошо
....
НомераЗаявок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер");
НомераЗаявокМассив = Новый Массив;
Для Каждого НомерЗаявки ИЗ НомераЗаявок Цикл
     НомераЗаявокМассив.Добавить(НомерБезЛидирующихНулей(НомерЗаявки));
КонецЦикла;
НомераЗаявокСтрока = СтрСоединить(НомераЗаявокМассив, ",");
10. starik-2005 3038 25.05.23 08:46 Сейчас в теме
(9)
Для Каждого НомерЗаявки ИЗ НомераЗаявок Цикл
А зачем лишняя переменная-то?
Для Каждого НомерЗаявки ИЗ Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер") Цикл
11. Geophysic 25.05.23 08:51 Сейчас в теме
(10) А еще можно вопрос не по теме, у меня сколько заявок находит столько и писем отправляет, эта строчка по нескольку раз отрабатывает
Если ТекстПисьмаДляМенеджера = Истина Тогда			
СписокПолучивших = СписокПолучивших + Сотрудник + Символы.ПС;
КонецЕсли;

Как сделать чтобы одно письмо отправляло?
12. starik-2005 3038 25.05.23 09:08 Сейчас в теме
(11)
Как сделать чтобы одно письмо отправляло?
Элементарно! Для начала вынести из функции "ТекстПисьмаДляОтветственногоВФорматеHTML" отправку письма в функцию рассылки. Изменить подход к формированию текста письма. Просто напиши "математическую модель" задачи - простой пронумерованный список действий, которые должна сделать программа. 1 - получить список заявок. 2 - получить список сотрудников. 3 - получить текст письма с заявками и сотрудниками. 4 - отправить почту. Для каждого пункта свои 1/2/3/4/... - работа!
6. starik-2005 3038 25.05.23 08:35 Сейчас в теме
(4)
а как теперь всей колонке "НомерБезЛидирующихНулей" присвоить
П - программирование!
Самое простое - создать функцию. 1С не умеет прилично с этим работать, так что приходится писать какие-то такие костыли:
Функция МассивНомеровБезЛидируюихНулей(МассивНомеров)
  Результат = Новый Массив;
  Для Каждого Номер ИЗ МассивНомеров Цикл
    Результат.Добавить(НомерБезЛидирующихНулей(Номер))
  КонецЦикла;
  Возврат Результат
КонецФункции
...
 НомераЗаявок = СтрСоединить(
       МассивНомеровБезЛидируюихНулей(
              Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер") ),",");
Показать
Geophysic; +1 Ответить
8. Geophysic 25.05.23 08:42 Сейчас в теме
(6) Спасибо большое, ваш вариант сработал
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот