Имя: Пароль:
1C
 
Отправка письма определенным пользователям
0 Slaifer
 
09.10.22
20:18
Всем привет, помогите с решением задачи. Т.З. отправить письмо некоторым пользователям, если в базу добавили подразделение.
У нас есть регистр где записываются подразделения.  (администрация, ООО Ромашка) (Кухня, ООО У дома)
так же есть регистр где записываются пользователи у которых установлена огранизация (Вася Пупкин, ООО Ромашка) (Сережа Морозов, ООО У дома)
Я написал Запрос где соединил два регистра в одну таблицу.
помогите написать цикл чтобы Вася Пупкин получал подраздления в которых указан он, а Сережа Морозов получал свои подразделения.
Так же может один человек привязан к разным подразделениям
Соответвенно людей и подразделений у нас много.
Cкpин таблицы значений https://ibb.co/182vHxC
//////////////////////////////////////////////////
Процедура ФормированиеПисьмаФинансистуОНовомПодразделенииНаСегодня() Экспорт
    //ПолучитьОтветственныхБезУчетаОрганизацийНаСегодня - вызвать запрос
    //ТЗ_ОтветственныеИПодразделенияНаСегодня - получить таблицу значений
    ТЗ_ОтветственныеИПодразделенияНаСегодня = ПолучитьОтветственныхБезУчетаОрганизацийНаСегодня();
    //вызвать учетку в базе
    СистемнаяУчетнаяЗапись = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись();
    //Формируем параметры для отправки письма
    //получаем пользователей с должностью  "Контролер финансирования"
    ТЗ_ОтветственныеИПодразделенияНаСегодня = ПолучитьОтветственныхБезУчетаОрганизацийНаСегодня("Контролер финансирования");
    //письмо
    ПараметрыПисьма = Новый Структура;
    АдресаЭП="";
    //получатели    
    Для каждого СтрокаОтветственногоНаСегодня ИЗ ТЗ_ОтветственныеИПодразделенияНаСегодня цикл
        АдресаЭП=АдресаЭП+СтрокаОтветственногоНаСегодня.АдресЭП+";";    
    КонецЦикла;  
    //письмо
    Тема="";
    Если АдресаЭП="" Тогда
        АдресаЭП="[email protected]";
        Тема = "Назначь ответсвенного контролера финансирования! ";
    КонецЕсли;    
    ПараметрыПисьма.Вставить("Кому",АдресаЭП);
    
    Тема = Тема+"Оповещение: " + ТекущаяДата() + " На сегодня в 1С прилетели новые подразделения!";
    ПараметрыПисьма.Вставить("Тема",Тема);
    
    //Тело письма начало
    ТелоПисьма = "<html>
    |<head>
    |<style>
    |table, th, td {
    |border: 2px solid black;
    |border-collapse: collapse;
    |padding: 5px;
    |cellpadding: 5px;
    |font: 12.0pt;
    |font-family: 'Times New Roman';                }
    |</style>
    |</head>
    |<table>
    |<tr bgcolor='Orange'>
    |<th>№</th> <th>Дата</th> <th>Подразделение</th> <th>Организация</th>
    |</tr>";
    Номер = 1;
        
    Для каждого СтрокаНовоеПодразделениеНаСегодня ИЗ ТЗ_ОтветственныеИПодразделенияНаСегодня Цикл    
        ТелоПисьма=ТелоПисьма+"
        |    <tr>
        |        <td>"+Номер+"</td>
        |        <td align='center'>"+СтрокаНовоеПодразделениеНаСегодня.Дата+"</td>
        |        <td>"+СтрокаНовоеПодразделениеНаСегодня.Подразделение+"</td>
        |        <td>"+СтрокаНовоеПодразделениеНаСегодня.Подразделение.ГоловнаяОрганизация+"</td>
        |    </tr>";
        Номер=Номер+1;
    КонецЦикла;
    
    ТелоПисьма=ТелоПисьма+"</table></html>";
    //Тело письма конец
    
    ПараметрыПисьма.Вставить("Тело",ТелоПисьма);
    ПараметрыПисьма.Вставить("ТипТекста","HTML");
    
    ПодготовленноеПисьмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(СистемнаяУчетнаяЗапись, ПараметрыПисьма);
    
    Попытка
        РезультатОтправкиПисьма = РаботаСПочтовымиСообщениями.ОтправитьПисьмо(СистемнаяУчетнаяЗапись, ПодготовленноеПисьмо);        
    Исключение
        ЗаписьЖурналаРегистрации("ОтправкаПисьмаФинансовомуДиректору на почту "+ АдресаЭП, УровеньЖурналаРегистрации.Ошибка,,,
        "Ошибка при отправке электронного письма: " + РезультатОтправкиПисьма.ОшибочныеПолучатели);
    КонецПопытки;
КонецПроцедуры
//////////////////////////////////////////////////
1 Slaifer
 
09.10.22
20:18
В данном коде приходин письмо со всем подразделениями, а получатели как в таблице значения пишет по порядку через запятую.
Тестово выгружал по двум людям и обработка указала Васю и Сергея 182 раза
2 FIXXXL
 
09.10.22
20:38
уважай сообщество, почисти код, прежде чем выкладывать
глаза ломать на заккоментированном врядли будут
3 Slaifer
 
09.10.22
20:48
Я извиняюсь конечно, а комменты я специально щас дописывал. Думал так будет понятнее
4 alarm2020
 
10.10.22
09:28
(0) Если
5 Greeen
 
10.10.22
11:21
Доброго дня! Алгоритмически можно так
1)Вместо ТЗ делаете запрос с группировкой, соотв. первая группировка - Сотрудник.
2)Далее цикл по остальным группировкам (организация/подразделение) - тут уже формируете текст письма
3)Перед переходом на следующего сотрудника - пуляете ему письмо

Если с ТЗ(Как вариант):
1)Копируете таблицу, схлопываете по сотруднику (ТЗСОтрудники)
2)Цикл по этой таблице, внутри еще один цикл по основной таблице с отбором по Сотруднику(НайтиСтроки например), тут формируете письмо
3)Отправляете письмо

Ну и отбор по дате, чтобы только новые записи отправлялись (В цикле или запросе условие)