Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Отправка почты, помогите с текстом письма

Отправка почты, помогите с текстом письма
Я
   Айвонттубифри
 
12.03.20 - 15:51
Добрый день!

В таблице значений ТЗ1 собрала информацию о графике отпусков сотрудников всех подразделений. Теперь надо, чтобы каждый руководитель получал единое письмо с перечнем графиком отпусков сотрудников только своего подразделения. Причем, чтобы текст письма выводился так (можно:
- Иванов: запланирован отпуск с 01.01.2020 по 10.01.2020
- Петров: запланирован ...
- Сидоров: запланирован ...


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


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


Процедура ОтправитьПисьмоРуководителю(мОтобранныеСтроки, ТекПодразделение);
    
    ПараметрыПисьма = Новый Структура;
    ПараметрыПисьма.Вставить("Кому",  ПочтовыйАдресРуководителя);
    ПараметрыПисьма.Вставить("Тема", "Рассылка по графику отпусков");    
    
    Для Каждого Строка ИЗ мОтобранныеСтроки Цикл;
        ТелоТекста = Строка.Сотрудник + " - запланирован отпуск с " + Формат(Строка.ДатаНачала, "ДФ=dd.MM.yyyy") +"г. по "+ Формат(Строка.ДатаОкончания, "ДФ=dd.MM.yyyy") + "г." + Символы.ВК;
        //вот здесь мне надо, чтобы текст письма выводился так:
        //Иванов - запланирован отпуск с 01.01.2020 по 10.01.2020
        //Петров - запланирован ...
        //Сидоров - запланирован ...
    КонецЦикла;
    
    ПараметрыПисьма.Вставить("Тело", ТелоТекста);
    
    ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);
    
КонецПроцедуры
   Айвонттубифри
 
1 - 12.03.20 - 15:52
+(0) Код некрасиво вставился, дублирую:

Процедура ПодготовитьПисьмоРуководителю(ТЗ1, ТЗ2)
    
    мОтобранныеСтроки = Новый Массив;
    ТекПодразделение = "";
    
    //ТЗ1 и ТЗ2 - идентичные таблицы значений, в которой хранится информация об отпусках сотрудников всех подразделений

    //ниже, я делаю отбор по подразделению, чтобы руководитель получил график отпусков только своего подразделения

    
    Для каждого СтрокаТЗ ИЗ ТЗ1 Цикл
        
        ТекПодразделение = СтрокаТЗ.ТекущееПодразделение;
        СтруктураОтбора = Новый Структура;
        СтруктураОтбора.Вставить("ТекущееПодразделение", ТекПодразделение);
        СтруктураОтбора.Вставить("ДатаНачала", СтрокаТЗ.ДатаНачала);
        мОтобранныеСтроки = ТЗ2.НайтиСтроки(СтруктураОтбора);
        
        ОтправитьПисьмоРуководителю(мОтобранныеСтроки, ТекПодразделение);//руководитель получает в одном письме информацию о графике отпусков своего подразделения

        мОтобранныеСтроки.Очистить();
        
    КонецЦикла;
    
КонецПроцедуры

Процедура ОтправитьПисьмоРуководителю(мОтобранныеСтроки, ТекПодразделение);
    
    ПараметрыПисьма = Новый Структура;
    ПараметрыПисьма.Вставить("Кому",  ПочтовыйАдресРуководителя);
    ПараметрыПисьма.Вставить("Тема", "Рассылка по графику отпусков");    
    
    Для Каждого Строка ИЗ мОтобранныеСтроки Цикл;
        ТелоТекста = Строка.Сотрудник + " - запланирован отпуск с " + Формат(Строка.ДатаНачала, "ДФ=dd.MM.yyyy") +"г. по "+ Формат(Строка.ДатаОкончания, "ДФ=dd.MM.yyyy") + "г." + Символы.ВК;
        //вот здесь мне надо, чтобы текст письма выводился так:

        //Иванов - запланирован отпуск с 01.01.2020 по 10.01.2020

        //Петров - запланирован ...

        //Сидоров - запланирован ...

    КонецЦикла;
    
    ПараметрыПисьма.Вставить("Тело", ТелоТекста);
    
    ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);
    
КонецПроцедуры
   8 bit
 
2 - 12.03.20 - 16:04
> Для Каждого Строка ИЗ мОтобранныеСтроки Цикл;
        ТелоТекста = Строка.Сотрудник + " - запланирован


ТелоТекста = "";

Для Каждого Строка ИЗ мОтобранныеСтроки Цикл;
        ТелоТекста = ТелоТекста + Строка.Сотрудник + " - запланирован...........

тут условие еще неплохо бы:
Если не последняя строка таблицы мОтобранныеСтроки тогда
ТелоТекста = ТелоТекста + символпереводастроки;
КонецЕсли;
   dka80
 
3 - 12.03.20 - 17:42
О! У меня прям есть такая штука один в один, которая формирует текст письма в виде HTML
Только я вам ее на дам ))
   dka80
 
4 - 12.03.20 - 17:44
Но идея такая: отбираются предстоящие отпуска, добавляются руководители. Далее это все выгружается в дерево для анализа, а затем дерево обходится по строкам первого уровня, где руководители, а затем по строкам второго уровня, где сотрудники
   8 bit
 
5 - 12.03.20 - 17:50
(3)(4) умничка, возьми с полочки пирожочек вкусненький.
Только в (0) у чувака одна маленькая проблема - он перезатирает в цикле единственную строку, следовательно, в тело письма попадает последняя строка из той ТЗ, которую он передает в процедуру ОтправитьПисьмоРуководителю. И твой опыт ему ну никак не поможет.
   pechkin
 
6 - 12.03.20 - 17:57
юзай типовой механизм рассылки отчетов. зачем свое изобретать?
   Айвонттубифри
 
7 - 12.03.20 - 19:56
(0) Вобщем сделала так, вроде выводит все как мне надо,:

ТекстПисьма = "  Здравствуйте, " + ДанныеСтруктуры.Руководитель + "!" + "
    |<br />
    |<br />
    |<br />  Скоро начинается отпуск у сотрудника(ов) департамента: " + " 
    |";

ТекстПисьма = ТекстПисьма + "<table border='1px'><th>ФИО</th><th>Дата начала</th><th>Дата окончания</th>";

Для каждого Строка Из мОтобранныеСтроки Цикл
    ТекстПисьма = ТекстПисьма + "<tr>";
    ТекстПисьма = ТекстПисьма + "<td>" + Строка.Сотрудник + "</td>";
    ТекстПисьма = ТекстПисьма + "<td>" + Формат(Строка.ДатаНачала, "ДФ=dd.MM.yyyy") + "г.</td>";
    ТекстПисьма = ТекстПисьма + "<td>" + Формат(Строка.ДатаОкончания, "ДФ=dd.MM.yyyy") + "г.</td>";
    ТекстПисьма = ТекстПисьма + "</tr>";
КонецЦикла;
ТекстПисьма = ТекстПисьма + "</table>";

ТекстПисьма = ТекстПисьма + "
    |<br />
    |<br />
    |<br />  Просим проконтролировать передачу заявления на отпуск (не позднее, чем за 2 недели до начала отпуска). " + " 
    |<br />  Если даты отпуска поменяются, оповестите нас, пожалуйста. " + " 
    |";

Текст = Письмо.Тексты.Добавить(ТекстПисьма);
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.HTML;

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.