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

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

    ЭтотОбъект.Документы.Очистить();

    КоличествоПозиций = 0;

    Если ЭтотОбъект.ДатаРассылки = Дата(1,1,1) Тогда

    ТекущаяДата = ТекущаяДата();
    ДатаРассылки = НачалоДня(ТекущаяДата);

    Иначе

    ДатаРассылки = ЭтотОбъект.ДатаРассылки;

    КонецЕсли;

    //СемьДнейВСекундах = 604800;
    //ДатаОповещения = ДатаРассылки - СемьДнейВСекундах;

    Запрос = Новый Запрос;

    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыЗаявокКлиентов.ВРаботе);

    Запрос.Текст =

    "ВЫБРАТЬ
    | ЗаявкиКлиентов.Ссылка КАК Документ,
    | ЗаявкиКлиентов.Сотрудник КАК СотрудникТЧ,
    | СотрудникиКИ.АдресЭП КАК АдресСотрудника,
    | ЗаявкиКлиентов.Статус КАК Статус,
    | иЗаявкиКлиентов.СрокВыполнения КАК СрокВыполнения
    |ИЗ
    | Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов
    | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники.КонтактнаяИнформация КАК СотрудникиКИ
    | ПО ЗаявкиКлиентов.Сотрудник = СотрудникиКИ.Ссылка
    | ГДЕ
    | ЗаявкиКлиентов.Статус = &Статус
    | И ЗаявкиКлиентов.СрокВыполнения < &ТекущаяДата";

    Рез = Запрос.Выполнить();

    ТЗ = Рез.Выгрузить();

    Если НЕ Рез.Пустой() Тогда

    Выборка = Рез.Выбрать();

    Пока Выборка.Следующий() Цикл

    СтрТЧ = ЭтотОбъект.Документы.Добавить();

    СтрТч.ОК = Истина;
    СтрТЧ.ДокСсылка = Выборка.Документ;
    СтрТЧ.Сотрудник = Выборка.СотрудникТЧ;
    СтрТЧ.АдресСотрудника = Выборка.АдресСотрудника;
    СтрТЧ.Статус = Выборка.Статус;
    СтрТЧ.СрокВыполнения = Выборка.СрокВыполнения;

    КонецЦикла;

    КоличествоПозиций = Выборка.Количество();

    КонецЕсли;

    Возврат КоличествоПозиций;

    КонецФункции // ЗаполнитьНаОсновеПриобретений() Экспорт
```

```1c
    Функция ВыполнитьРассылку(ДатаРассылки) Экспорт

    СписокПолучивших = ";

    Если ЭтотОбъект.Документы.Количество() = 0 Тогда

    Возврат СписокПолучивших;

    КонецЕсли;

    МассивМенеджеров = Новый Массив();

    Для каждого Стр Из ЭтотОбъект.Документы Цикл

    Если Стр.ОК = Истина Тогда

    МассивМенеджеров.Добавить(Стр.Сотрудник);

    КонецЕсли;

    КонецЦикла;

    // Избавляемся от возможных дублей:
    МассивМенеджеров = МассивБезДублейДляМенеджера(МассивМенеджеров);

    ЗаголовокПрограммы = ";

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ
    | ЗС.Значение КАК Значение
    |ИЗ
    | Константа.ЗаголовокСистемы КАК ЗС";

    Рез = Запрос.Выполнить();

    Если НЕ Рез.Пустой() Тогда

    Выборка = Рез.Выбрать();
    Выборка.Следующий();
    ЗаголовокПрограммы = Выборка.Значение;

    КонецЕсли;

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ
    | ЗаявкиКлиентов.Номер КАК Номер
    |ИЗ
    | Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов";

    Рез = Запрос.Выполнить();

    Если НЕ Рез.Пустой() Тогда

    Выборка = Рез.Выбрать();
    Выборка.Следующий();
    НомерЗаявки = Выборка.Номер;

    КонецЕсли;

    // Через эту директиву значение не получить:
    //ЗаголовокПрограммы = Метаданные.Константы.ЗаголовокСистемы;

    Если ЗаголовокПрограммы <> " Тогда

    ЗаголовокПрограммы = "ЗаголовокПрограммы " + ЗаголовокПрограммы;

    Иначе

    ЗаголовокПрограммы = "ЗаголовокПрограммы ";

    КонецЕсли;

    Для каждого Сотрудник Из МассивМенеджеров Цикл

    Если Сотрудник <> Справочники.Сотрудники.ПустаяСсылка() Тогда

    ТекстСписка = ";
    ТекстПисьма = ";
    Адрес = ";

    Счетчик = 1;

    Для каждого СтрТЧ Из ЭтотОбъект.Документы Цикл

    Если СтрТЧ.ОК И СтрТЧ.Сотрудник = Сотрудник Тогда

    СчетчикСтрока = " + Строка(Счетчик) + ". ";

    ТекстСписка = ТекстСписка + СчетчикСтрока + СтрТЧ.НомерСтроки + СтрТЧ.Сотрудник + " Начало отпуска: " + Формат(СтрТЧ.СрокВыполнения,"ДФ=dd.MM.yyyy") + " + Символы.ПС;

    Адрес = СтрТЧ.АдресСотрудника;
    Счетчик = Счетчик + 1;

    КонецЕсли;
    КонецЦикла;

    ТекстПисьмаДляМенеджера = ТекстПисьмаДляОтветственногоВФорматеHTML(Сотрудник, ДатаРассылки, ТекстСписка, ЗаголовокПрограммы, НомерЗаявки);

    Если ТекстПисьмаДляМенеджера = Истина Тогда

    СписокПолучивших = СписокПолучивших + Сотрудник + Символы.ПС;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;

    Возврат СписокПолучивших;
    КонецФункции // ВыполнитьРассылку(ДатаРассылки) Экспорт
```

```1c
    Функция ТекстПисьмаДляОтветственногоВФормате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()
```
---
```1c
    Запрос = Новый Запрос(

    //Запрос.Текст = // зачем это?

    "ВЫБРАТЬ
    | ЗаявкиКлиентов.Номер КАК Номер
    |ИЗ
    | Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов");

    // Я так даже в детском садике не писал

    // Рез = Запрос.Выполнить();

    // Если НЕ Рез.Пустой() Тогда

    // Выборка = Рез.Выбрать();
    // Выборка.Следующий();
    // НомерЗаявки = Выборка.Номер;

    // КонецЕсли;

    НомераЗаявок = СтрСоединить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер"),",");
```
---
а как теперь всей колонке "НомерБезЛидирующихНулей" присвоитьП - программирование!
Самое простое - создать функцию. 1С не умеет прилично с этим работать, так что приходится писать какие-то такие костыли:
```1c
    Функция МассивНомеровБезЛидируюихНулей(МассивНомеров)
    Результат = Новый Массив;
    Для Каждого Номер ИЗ МассивНомеров Цикл
    Результат.Добавить(НомерБезЛидирующихНулей(Номер))
    КонецЦикла;
    Возврат Результат
    КонецФункции
    ...
    НомераЗаявок = СтрСоединить(
    МассивНомеровБезЛидируюихНулей(
    Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер") ),",");
```
---
НомераБезЛидирующихНулей(СписокИлиМассивНомеровЗаявки)
---
```1c
    Запрос = Новый Запрос(

    //Запрос.Текст = // зачем это?

    "ВЫБРАТЬ
    | ЗаявкиКлиентов.Номер КАК Номер
    |ИЗ
    | Документ.ЗаявкиКлиентов КАК ЗаявкиКлиентов");

    // Я так даже в детском садике не писал

    // Рез = Запрос.Выполнить();

    // Если НЕ Рез.Пустой() Тогда

    // Выборка = Рез.Выбрать();
    // Выборка.Следующий();
    // НомерЗаявки = Выборка.Номер;

    // КонецЕсли;

    НомераЗаявок = СтрСоединить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер"),",");
```
---
НомераЗаявок = СтрСоединить(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер"),",");

Получилось, а как теперь всей колонке "НомерБезЛидирующихНулей" присвоить?
---
```1c
    ....
    НомераЗаявокМассив = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер");
    Для Каждого НомерЗаявки ИЗ НомераЗаявокМассив Цикл
    НомерЗаявки = НомерБезЛидирующихНулей(НомерЗаявки);
    КонецЦикла;
    НомераЗаявокСтрока = СтрСоединить(НомераЗаявокМассив, ",");
```
---
НомерЗаявки = НомерБезЛидирующихНулей(НомерЗаявки);
Что я делаю не так?
---
Хорошо

```1c
    ....
    НомераЗаявок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер");
    НомераЗаявокМассив = Новый Массив;
    Для Каждого НомерЗаявки ИЗ НомераЗаявок Цикл
    НомераЗаявокМассив.Добавить(НомерБезЛидирующихНулей(НомерЗаявки));
    КонецЦикла;
    НомераЗаявокСтрока = СтрСоединить(НомераЗаявокМассив, ",");
```
---
Для Каждого НомерЗаявки ИЗ НомераЗаявок ЦиклА зачем лишняя переменная-то?
```1c
    Для Каждого НомерЗаявки ИЗ Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Номер") Цикл
```
---
А еще можно вопрос не по теме, у меня сколько заявок находит столько и писем отправляет, эта строчка по нескольку раз отрабатывает

```1c
    Если ТекстПисьмаДляМенеджера = Истина Тогда
    СписокПолучивших = СписокПолучивших + Сотрудник + Символы.ПС;
    КонецЕсли;
```

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