Имя: Пароль:
1C
 
как в ЗУПе отслеживать событие увольнения/прием по работнику?
0 Dobriy
 
19.12.23
15:10
Коллеги, приветствую! Мне нужно по событию прием/увольнение/перемещение в ЗУПе отправлять информацию на почту. Куда лучше подвесить обработчик события? На регистр какой-нибудь или на документы? Заранее спасибо :)
1 Волшебник
 
19.12.23
15:11
лучше в подписку на проведение документа
2 Dobriy
 
19.12.23
15:15
(1) Спасибо!
3 SleepyHead
 
19.12.23
15:53
(0) А кто получатель письма?
4 Гений 1С
 
19.12.23
15:57
(1) (0) я бы сделал регистр оповещений, туда кидал бы запись при проведении увольнения. А регл.задание делало бы рассылку и помечало запись регистра как обработанную.
А то провести 100 раз могут документ
5 Гена
 
19.12.23
16:13
(3) Скорее всего сотрудник, которому фирма доверила отсылку СЗВ-ТД в СФР по данным событиям. ЗамГБ.
6 2S
 
19.12.23
16:23
поставить ДО и бесшовную интеграцию
7 d4rkmesa
 
19.12.23
16:45
(0) Там есть штатная рассылка отчетов, через которую можно отправлять отчет о кадровых изменениях (типовой либо самописный, где удобнее данные выбираются). Главное, чтобы оперативность была достаточная, а то могут оформить увольнение заранее, а провести только в последний час в пятницу, в итоге рассылка, к примеру, придет в субботу. Достаточно такое? Если нет, ну тогда действительно этот вариант  (6) .
8 spiller26
 
19.12.23
17:07
(4) Я так и сделал расширением.
9 spiller26
 
19.12.23
17:24
(8)
РС
+ рпу_УведомленияПриемУвольнение
Измерения:
  КадровыйДокумент
Реквизиты:
  ДатаЗаписи
  Отправлен
Подписки на события
+ рпу_ОповещениеПриПриемеУвольнении
Событие:
  ОбработкаПроведения
Процедура абтОповещениеПриПриемеУвольненииОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт

    Если Источник.ПометкаУдаления = Ложь И Отказ = Ложь Тогда
        Если Источник.абтУведомитьОтделы Тогда
            Запрос = Новый Запрос;
            Запрос.Текст =
            "ВЫБРАТЬ
            |    рпу_УведомленияПриемУвольнение.КадровыйДокумент КАК КадровыйДокумент
            |ИЗ
            |    РегистрСведений.рпу_УведомленияПриемУвольнение КАК рпу_УведомленияПриемУвольнение
            |ГДЕ
            |    рпу_УведомленияПриемУвольнение.КадровыйДокумент = &КадровыйДокумент";
            Запрос.УстановитьПараметр("КадровыйДокумент", Источник.Ссылка);
            РезультатЗапроса = Запрос.Выполнить();    
            
            Если РезультатЗапроса.Пустой() Тогда
                Попытка
                    ЗаписьРС = РегистрыСведений.рпу_УведомленияПриемУвольнение.СоздатьМенеджерЗаписи();
                    ЗаписьРС.КадровыйДокумент = Источник.Ссылка;
                    ЗаписьРС.ДатаЗаписи = ТекущаяДата();
                    ЗаписьРС.Отправлен = Ложь;
                    ЗаписьРС.Записать();
                Исключение
                    ЗаписьЖурналаРегистрации("ЗаписанныеУведомленияПриемаУвольнения", УровеньЖурналаРегистрации.Информация, , , "Не смог записать в РС.рпу_УведомленияПриемУвольнение");
                КонецПопытки;    
            КонецЕсли;    
        КонецЕсли;    
    КонецЕсли;    
    
КонецПроцедуры

=============================
Сама отправка

Процедура рпу_РассылкаУведомленийПриемУвольнение() Экспорт

    Если ОпределитьЭтаИнформационнаяБазаФайловая() Тогда
        Возврат;
    КонецЕсли;

    ДатаНачалаРассылкиКадровыхДокументов = Константы.рпу_ДатаНачалаРассылкиКадровыхДокументов.Получить();
    Если ДатаНачалаРассылкиКадровыхДокументов = Дата("00010101") Тогда
        Возврат;
    КонецЕсли;
    
    МассивКадровыхДокументов = Новый Массив;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    рпу_УведомленияПриемУвольнение.КадровыйДокумент КАК КадровыйДокумент
    |ИЗ
    |    РегистрСведений.рпу_УведомленияПриемУвольнение КАК абтУведомленияПриемУвольнение
    |ГДЕ
    |    рпу_УведомленияПриемУвольнение.ДатаЗаписи >= &ДатаНачалаРассылкиКадровыхДокументов
    |    И абтУведомленияПриемУвольнение.Отправлен = ЛОЖЬ";
    Запрос.УстановитьПараметр("ДатаНачалаРассылкиКадровыхДокументов", ДатаНачалаРассылкиКадровыхДокументов);
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Возврат;
    Иначе
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            МассивКадровыхДокументов.Добавить(ВыборкаДетальныеЗаписи.КадровыйДокумент);
        КонецЦикла;
    КонецЕсли;    
    
    ТекстТелаПисьма = "";
    ТекстТелаПисьмаДляСкрипта = "";
    
    #Region Запрос_Кадровых_документов
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВложенныйЗапрос.Организация КАК Организация,
    |    ВложенныйЗапрос.Сотрудник КАК Сотрудник,
    |    ВложенныйЗапрос.ДатаПриема КАК ДатаПриема,
    |    ВложенныйЗапрос.ДатаУвольнения КАК ДатаУвольнения
    |ИЗ
    |    (ВЫБРАТЬ
    |        ПриемНаРаботу.Организация КАК Организация,
    |        ПриемНаРаботу.Сотрудник КАК Сотрудник,
    |        ПриемНаРаботу.ДатаПриема КАК ДатаПриема,
    |        """" КАК ДатаУвольнения
    |    ИЗ
    |        Документ.ПриемНаРаботу КАК ПриемНаРаботу
    |    ГДЕ
    |        ПриемНаРаботу.Ссылка В(&СписокКадровыхДокументов)
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        Увольнение.Организация,
    |        Увольнение.Сотрудник,
    |        """",
    |        Увольнение.ДатаУвольнения
    |    ИЗ
    |        Документ.Увольнение КАК Увольнение
    |    ГДЕ
    |        Увольнение.Ссылка В(&СписокКадровыхДокументов)
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        ПриемНаРаботуСпискомСотрудники.Ссылка.Организация,
    |        ПриемНаРаботуСпискомСотрудники.Сотрудник,
    |        ПриемНаРаботуСпискомСотрудники.ДатаПриема,
    |        """"
    |    ИЗ
    |        Документ.ПриемНаРаботуСписком.Сотрудники КАК ПриемНаРаботуСпискомСотрудники
    |    ГДЕ
    |        ПриемНаРаботуСпискомСотрудники.Ссылка В(&СписокКадровыхДокументов)
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        УвольнениеСпискомСотрудники.Ссылка.Организация,
    |        УвольнениеСпискомСотрудники.Сотрудник,
    |        """",
    |        УвольнениеСпискомСотрудники.ДатаУвольнения
    |    ИЗ
    |        Документ.УвольнениеСписком.Сотрудники КАК УвольнениеСпискомСотрудники
    |    ГДЕ
    |        УвольнениеСпискомСотрудники.Ссылка В(&СписокКадровыхДокументов)) КАК ВложенныйЗапрос";
    #EndRegion
    Запрос.УстановитьПараметр("СписокКадровыхДокументов", МассивКадровыхДокументов);
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Возврат;
    Иначе    
        //формируем письмо
        ТекстТелаПисьма = "<p><strong>Рассылка на: "+Формат(ТекущаяДата(), "ДЛФ=DDT")+"</strong></p>";
        ТекстТелаПисьмаДляСкрипта = "Рассылка (прием/увольнение): "+Формат(ТекущаяДата(), "ДЛФ=DDT");
        //шапка таблицы
        ТекстТелаПисьма = ТекстТелаПисьма + Символы.ПС + "
        |<table border=""1"" cellpadding=""1"" cellspacing=""0"" style=""""width: 477px;"""">
        |<tbody>
        |<tr>
        |<td style=""""width: 95px; text-align: center;""""><strong>Организация</strong></td>
        |<td style=""""width: 169px; text-align: center;""""><strong>Сотрудник</strong></td>
        |<td style=""""width: 191px; text-align: center;""""><strong>Дата приема</strong></td>
        |<td style=""""width: 191px; text-align: center;""""><strong>Дата увольнения</strong></td>
        |</tr>";
        //
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ТекстОрганизация = Строка(ВыборкаДетальныеЗаписи.Организация);
            ТекстСотрудник = Строка(ВыборкаДетальныеЗаписи.Сотрудник);
            ТекстДатаПриема     = ?(ВыборкаДетальныеЗаписи.ДатаПриема = "", "", Формат(ВыборкаДетальныеЗаписи.ДатаПриема, "ДЛФ=DD"));
            ТекстДатаУвольнения = ?(ВыборкаДетальныеЗаписи.ДатаУвольнения  = "", "", Формат(ВыборкаДетальныеЗаписи.ДатаУвольнения, "ДЛФ=DD"));
            
            //строки таблицы
            ТекстТелаПисьма = ТекстТелаПисьма + Символы.ПС + "
            |<tr>
            |<td style=""""width: 95px; text-align: center;"""">" + ТекстОрганизация + "</td>
            |<td style=""""width: 169px; text-align: center;"""">" + ТекстСотрудник + "</td>
            |<td style=""""width: 191px; text-align: center;"""">&nbsp;" + ТекстДатаПриема + "</td>
            |<td style=""""width: 191px; text-align: center;"""">&nbsp;" + ТекстДатаУвольнения + "</td>
            |</tr>
            |</tbody>";
            
            ТекстСтатусСотрудника = "";
            Если НЕ ТекстДатаПриема = "" Тогда
                ТекстСтатусСотрудника = "прием " + ТекстДатаПриема;
            КонецЕсли;    
            Если НЕ ТекстДатаУвольнения = "" Тогда
                ТекстСтатусСотрудника = "увольнение " + ТекстДатаУвольнения;
            КонецЕсли;    
            
            //выходящий текст для телеграма
            ТекстТелаПисьмаДляСкрипта = ТекстТелаПисьмаДляСкрипта + Символы.ПС +
                ТекстСотрудник + " // " + ТекстСтатусСотрудника + " // " + ТекстОрганизация;
            КонецЦикла;    
            //закрываем таблицу
        ТекстТелаПисьма = ТекстТелаПисьма + Символы.ПС + "</table>";
    КонецЕсли;
    
    ПисьмоОтправлено = Ложь;
    
    #Region Отправка
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    рпу_СписокАдресовДляРассылки.АдресЭлектроннойПочты КАК АдресЭП,
    |    рпу_СписокАдресовДляРассылки.Скрипт КАК Скрипт,
    |    рпу_СписокАдресовДляРассылки.СкриптПараметры КАК СкриптПараметры
    |ИЗ
    |    РегистрСведений.рпу_СписокАдресовДляРассылки КАК рпу_СписокАдресовДляРассылки
    |ГДЕ
    |    рпу_СписокАдресовДляРассылки.Увольнение = ИСТИНА";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ПараметрыПисьма = Новый Структура;
        ПараметрыПисьма.Вставить("Кому", СокрЛП(ВыборкаДетальныеЗаписи.АдресЭП));
        ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма);
        ПараметрыПисьма.Вставить("ТипТекста", ТипТекстаПочтовогоСообщения.HTML);
        ПараметрыПисьма.Вставить("Тема", "Кадровые документы (прием/увольнение)");
        
        МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями");
        Попытка
            МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма);
            ПисьмоОтправлено = Истина;
        Исключение
            
        КонецПопытки;
        
        //Скрипт
        Если СокрЛП(ВыборкаДетальныеЗаписи.Скрипт) <> "" Тогда
            СтрокаКонсольнойКоманды = СокрЛП(ВыборкаДетальныеЗаписи.Скрипт)+ " " + СокрЛП(ВыборкаДетальныеЗаписи.СкриптПараметры) + " """ + ТекстТелаПисьмаДляСкрипта + """";
            ЗапуститьПриложение(СтрокаКонсольнойКоманды);        
        КонецЕсли;    
    КонецЦикла;
    #EndRegion
        
    //Обрабатываем РС
    Если ПисьмоОтправлено И МассивКадровыхДокументов.Количество() > 0 Тогда
        Для Каждого СтрКадровыйДокумент Из МассивКадровыхДокументов Цикл
            ТекЗаписьКД = РегистрыСведений.рпу_УведомленияПриемУвольнение.СоздатьМенеджерЗаписи();
            ТекЗаписьКД.КадровыйДокумент = СтрКадровыйДокумент;
            ТекЗаписьКД.Прочитать();
            ТекЗаписьКД.Отправлен = Истина;
            Попытка
                ТекЗаписьКД.Записать();
            Исключение
                ЗаписьЖурналаРегистрации("ЗаписанныеУведомленияПриемУвольнение", УровеньЖурналаРегистрации.Информация, , , "Не смог переписать в РС.рпу_УведомленияПриемУвольнение");
            КонецПопытки;    
        КонецЦикла;    
    КонецЕсли;    
    
КонецПроцедуры


Процедура рпу_РассылкаУведомленийПриемУвольнение() Экспорт

    Если ОпределитьЭтаИнформационнаяБазаФайловая() Тогда
        Возврат;
    КонецЕсли;

    ДатаНачалаРассылкиКадровыхДокументов = Константы.рпу_ДатаНачалаРассылкиКадровыхДокументов.Получить();
    Если ДатаНачалаРассылкиКадровыхДокументов = Дата("00010101") Тогда
        Возврат;
    КонецЕсли;
    
    МассивКадровыхДокументов = Новый Массив;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    рпу_УведомленияПриемУвольнение.КадровыйДокумент КАК КадровыйДокумент
    |ИЗ
    |    РегистрСведений.рпу_УведомленияПриемУвольнение КАК абтУведомленияПриемУвольнение
    |ГДЕ
    |    рпу_УведомленияПриемУвольнение.ДатаЗаписи >= &ДатаНачалаРассылкиКадровыхДокументов
    |    И абтУведомленияПриемУвольнение.Отправлен = ЛОЖЬ";
    Запрос.УстановитьПараметр("ДатаНачалаРассылкиКадровыхДокументов", ДатаНачалаРассылкиКадровыхДокументов);
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Возврат;
    Иначе
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            МассивКадровыхДокументов.Добавить(ВыборкаДетальныеЗаписи.КадровыйДокумент);
        КонецЦикла;
    КонецЕсли;    
    
    ТекстТелаПисьма = "";
    ТекстТелаПисьмаДляСкрипта = "";
    
    #Region Запрос_Кадровых_документов
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВложенныйЗапрос.Организация КАК Организация,
    |    ВложенныйЗапрос.Сотрудник КАК Сотрудник,
    |    ВложенныйЗапрос.ДатаПриема КАК ДатаПриема,
    |    ВложенныйЗапрос.ДатаУвольнения КАК ДатаУвольнения
    |ИЗ
    |    (ВЫБРАТЬ
    |        ПриемНаРаботу.Организация КАК Организация,
    |        ПриемНаРаботу.Сотрудник КАК Сотрудник,
    |        ПриемНаРаботу.ДатаПриема КАК ДатаПриема,
    |        """" КАК ДатаУвольнения
    |    ИЗ
    |        Документ.ПриемНаРаботу КАК ПриемНаРаботу
    |    ГДЕ
    |        ПриемНаРаботу.Ссылка В(&СписокКадровыхДокументов)
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        Увольнение.Организация,
    |        Увольнение.Сотрудник,
    |        """",
    |        Увольнение.ДатаУвольнения
    |    ИЗ
    |        Документ.Увольнение КАК Увольнение
    |    ГДЕ
    |        Увольнение.Ссылка В(&СписокКадровыхДокументов)
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        ПриемНаРаботуСпискомСотрудники.Ссылка.Организация,
    |        ПриемНаРаботуСпискомСотрудники.Сотрудник,
    |        ПриемНаРаботуСпискомСотрудники.ДатаПриема,
    |        """"
    |    ИЗ
    |        Документ.ПриемНаРаботуСписком.Сотрудники КАК ПриемНаРаботуСпискомСотрудники
    |    ГДЕ
    |        ПриемНаРаботуСпискомСотрудники.Ссылка В(&СписокКадровыхДокументов)
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        УвольнениеСпискомСотрудники.Ссылка.Организация,
    |        УвольнениеСпискомСотрудники.Сотрудник,
    |        """",
    |        УвольнениеСпискомСотрудники.ДатаУвольнения
    |    ИЗ
    |        Документ.УвольнениеСписком.Сотрудники КАК УвольнениеСпискомСотрудники
    |    ГДЕ
    |        УвольнениеСпискомСотрудники.Ссылка В(&СписокКадровыхДокументов)) КАК ВложенныйЗапрос";
    #EndRegion
    Запрос.УстановитьПараметр("СписокКадровыхДокументов", МассивКадровыхДокументов);
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Возврат;
    Иначе    
        //формируем письмо
        ТекстТелаПисьма = "<p><strong>Рассылка на: "+Формат(ТекущаяДата(), "ДЛФ=DDT")+"</strong></p>";
        ТекстТелаПисьмаДляСкрипта = "Рассылка (прием/увольнение): "+Формат(ТекущаяДата(), "ДЛФ=DDT");
        //шапка таблицы
        ТекстТелаПисьма = ТекстТелаПисьма + Символы.ПС + "
        |<table border=""1"" cellpadding=""1"" cellspacing=""0"" style=""""width: 477px;"""">
        |<tbody>
        |<tr>
        |<td style=""""width: 95px; text-align: center;""""><strong>Организация</strong></td>
        |<td style=""""width: 169px; text-align: center;""""><strong>Сотрудник</strong></td>
        |<td style=""""width: 191px; text-align: center;""""><strong>Дата приема</strong></td>
        |<td style=""""width: 191px; text-align: center;""""><strong>Дата увольнения</strong></td>
        |</tr>";
        //
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            ТекстОрганизация = Строка(ВыборкаДетальныеЗаписи.Организация);
            ТекстСотрудник = Строка(ВыборкаДетальныеЗаписи.Сотрудник);
            ТекстДатаПриема     = ?(ВыборкаДетальныеЗаписи.ДатаПриема = "", "", Формат(ВыборкаДетальныеЗаписи.ДатаПриема, "ДЛФ=DD"));
            ТекстДатаУвольнения = ?(ВыборкаДетальныеЗаписи.ДатаУвольнения  = "", "", Формат(ВыборкаДетальныеЗаписи.ДатаУвольнения, "ДЛФ=DD"));
            
            //строки таблицы
            ТекстТелаПисьма = ТекстТелаПисьма + Символы.ПС + "
            |<tr>
            |<td style=""""width: 95px; text-align: center;"""">" + ТекстОрганизация + "</td>
            |<td style=""""width: 169px; text-align: center;"""">" + ТекстСотрудник + "</td>
            |<td style=""""width: 191px; text-align: center;"""">&nbsp;" + ТекстДатаПриема + "</td>
            |<td style=""""width: 191px; text-align: center;"""">&nbsp;" + ТекстДатаУвольнения + "</td>
            |</tr>
            |</tbody>";
            
            ТекстСтатусСотрудника = "";
            Если НЕ ТекстДатаПриема = "" Тогда
                ТекстСтатусСотрудника = "прием " + ТекстДатаПриема;
            КонецЕсли;    
            Если НЕ ТекстДатаУвольнения = "" Тогда
                ТекстСтатусСотрудника = "увольнение " + ТекстДатаУвольнения;
            КонецЕсли;    
            
            //выходящий текст для телеграма
            ТекстТелаПисьмаДляСкрипта = ТекстТелаПисьмаДляСкрипта + Символы.ПС +
                ТекстСотрудник + " // " + ТекстСтатусСотрудника + " // " + ТекстОрганизация;
            КонецЦикла;    
            //закрываем таблицу
        ТекстТелаПисьма = ТекстТелаПисьма + Символы.ПС + "</table>";
    КонецЕсли;
    
    ПисьмоОтправлено = Ложь;
    
    #Region Отправка
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    рпу_СписокАдресовДляРассылки.АдресЭлектроннойПочты КАК АдресЭП,
    |    рпу_СписокАдресовДляРассылки.Скрипт КАК Скрипт,
    |    рпу_СписокАдресовДляРассылки.СкриптПараметры КАК СкриптПараметры
    |ИЗ
    |    РегистрСведений.рпу_СписокАдресовДляРассылки КАК рпу_СписокАдресовДляРассылки
    |ГДЕ
    |    рпу_СписокАдресовДляРассылки.Увольнение = ИСТИНА";
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ПараметрыПисьма = Новый Структура;
        ПараметрыПисьма.Вставить("Кому", СокрЛП(ВыборкаДетальныеЗаписи.АдресЭП));
        ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма);
        ПараметрыПисьма.Вставить("ТипТекста", ТипТекстаПочтовогоСообщения.HTML);
        ПараметрыПисьма.Вставить("Тема", "Кадровые документы (прием/увольнение)");
        
        МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями");
        Попытка
            МодульРаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(МодульРаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(), ПараметрыПисьма);
            ПисьмоОтправлено = Истина;
        Исключение
            
        КонецПопытки;
        
        //Скрипт
        Если СокрЛП(ВыборкаДетальныеЗаписи.Скрипт) <> "" Тогда
            СтрокаКонсольнойКоманды = СокрЛП(ВыборкаДетальныеЗаписи.Скрипт)+ " " + СокрЛП(ВыборкаДетальныеЗаписи.СкриптПараметры) + " """ + ТекстТелаПисьмаДляСкрипта + """";
            ЗапуститьПриложение(СтрокаКонсольнойКоманды);        
        КонецЕсли;    
    КонецЦикла;
    #EndRegion
        
    //Обрабатываем РС
    Если ПисьмоОтправлено И МассивКадровыхДокументов.Количество() > 0 Тогда
        Для Каждого СтрКадровыйДокумент Из МассивКадровыхДокументов Цикл
            ТекЗаписьКД = РегистрыСведений.рпу_УведомленияПриемУвольнение.СоздатьМенеджерЗаписи();
            ТекЗаписьКД.КадровыйДокумент = СтрКадровыйДокумент;
            ТекЗаписьКД.Прочитать();
            ТекЗаписьКД.Отправлен = Истина;
            Попытка
                ТекЗаписьКД.Записать();
            Исключение
                ЗаписьЖурналаРегистрации("ЗаписанныеУведомленияПриемУвольнение", УровеньЖурналаРегистрации.Информация, , , "Не смог переписать в РС.рпу_УведомленияПриемУвольнение");
            КонецПопытки;    
        КонецЦикла;    
    КонецЕсли;    
    
КонецПроцедуры
10 _Batoo
 
19.12.23
17:35
(9) оу, посмотрите справочник "Шаблоны сообщений"
11 Dobriy
 
20.12.23
12:07
(11) Спасибо!
12 Dobriy
 
20.12.23
12:08
(9) точнее тут спасибо)
13 pavlika
 
20.12.23
12:20
Задача вообще не понятна - для какой цели нужно "отправлять информацию на почту"? Документ можно провести, потом поменять даты, потом отменить, потом сделать из постоянного временным, потом поменять номер договора и тд и тп
14 DJ Anthon
 
20.12.23
12:34
(1) мне тут достался битрикс на ерп. 90 процентов работы сервера - это подписки битрикса на любой чих в базе. пришлось все подписки вырезать, это какой-то ужас. сейчас думаем об альтернативном способе работы битрикса, потому что их коробки он просто кладет базу, отладить ничего невозможно. в битриксе свой движок обменов, 1совские планы обмена ему не по нраву. как все это разгребать, вообще не знаю, некогда.
(4) да, мы так и сделали
15 Valdis2007
 
20.12.23
13:53
(9) лучьше работать в функциональном стиле...

твои выборки пока ...легко меняются на одну строку кода...

МассивКадровыхДокументов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("КадровыйДокумент")
16 Dobriy
 
20.12.23
15:36
(13) задача ознакомительная просто, крайне редко в базе удаляют или переделывают документы.
Я решил с регистром не заморачиваться и повесил обработчикПередЗаписью на нужные документы, и сравниваю потом объект в базе с модифицированным объектом:


//код взял отсюда https://its.1c.ru/db/v8std/content/464/hdoc
Процедура ОтправитьСообщение(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если Источник.ОбменДанными.Загрузка ИЛИ Отказ ИЛИ РежимЗаписи <> РежимЗаписиДокумента.Проведение Тогда
        Возврат;
    КонецЕсли;
    ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Источник);

    // Если это повторное проведение документа, который не модифицировался
    Если Источник.Проведен И РежимЗаписи = РежимЗаписиДокумента.Проведение И НЕ Источник.Модифицированность() Тогда
        Возврат;    
    КонецЕсли;
    
    //если док-т меняет интересующие значения, то отправляю оповещение
    Если Источник.Подразделение <> Источник.Ссылка.Подразделение ИЛИ Источник.Сотрудник <> Источник.Ссылка.Сотрудник Тогда
        //ОтправитьСообщение....
    КонецЕсли;
КонецПроцедуры
17 unenu
 
20.12.23
15:58
регистр
КадроваяИсторияСотрудников
подчинен регистратору

ПриЗаписи() в расширение

в коде этого модуля есть методы анализа что/где изменилось и голова не будет болеть что-то появилось новое/ушло старое.
18 Dobriy
 
20.12.23
16:58
(20) кайф, спасибо))
19 Dobriy
 
20.12.23
16:58
(17) сюда благодарность)
Независимо от того, куда вы едете — это в гору и против ветра!