Основные объекты
1. Подчиненная подсистема «Рассылка увольнение/прием» для подсистемы «Кадры».
2. Справочник «Электронные почты»
Содержит список email-адресов получателей уведомлений. Достаточно добавить адреса в этот справочник — все уведомления будут приходить указанным получателям.
3. Константы управления уведомлениями
-
Уведомлять только при полном увольнении — если установлено в «Истина», уведомления об увольнении отправляются только когда сотрудник полностью увольняется из организации (нет других действующих трудоустройств)
-
Уведомлять только при новом сотруднике — если установлено в «Истина», уведомления о приеме отправляются только для новых сотрудников, которые ранее не работали в организации или были уволены.
Поддерживаемые документы
Расширение работает сразу с четырьмя типами кадровых документов:
-
Прием на работу
-
Прием на работу списком
-
Увольнение
-
Увольнение списком
Как это работает
Автоматическая отправка
При проведении любого из поддерживаемых документов система:
-
Автоматически определяет тип документа.
-
Проверяет актуальность события (только для новых документов).
-
Формирует список затронутых сотрудников с учетом настроек фильтрации (константы).
-
Создает и отправляет email всем адресатам из справочника «УПС_ЭлектронныеПочты».
Содержание уведомления
Каждое email-сообщение содержит:
-
Тему документа (например, «Прием на работу» или «Увольнение»)
-
Список сотрудников с данными:
-
ФИО
-
Организация
-
Подразделение
-
Должность
-
Дата приема/увольнения
-
Настройка и использование
1. Добавить расширение в вашу конфигурацию

2. Установить адреса получателей
Добавьте email-адреса в справочник «УПС_ЭлектронныеПочты». Можно указать несколько адресов через запятую.

3. Настройка фильтров (опционально)
При необходимости настройте константы фильтрации в соответствии с требованиями вашей организации.

4. Установка ролей
Установите роль «УПС_ОсновнаяРоль» для ваших кадровиков.
5. Работа с документами
Продолжайте работать с кадровыми документами как обычно. Уведомления будут отправляться автоматически при проведении документов.
Преимущества использования
-
Автоматизация — исключает ручную отправку уведомлений.
-
Гибкость — настраиваемые фильтры позволяют получать только релевантные уведомления.
-
Надежность — уведомления отправляются только после успешного проведения документов.
-
Масштабируемость — работает как с единичными документами, так и со списками.
-
Простота — минимальные настройки, не требует изменений в основной конфигурации.
Основная логика
Данный код представляет собой ядро системы автоматических email-уведомлений. Основная процедура УПС_УвольнениеПриемПриЗаписи запускается при записи кадровых документов и выполняет четкий алгоритм: сначала проверяет, что документ проведен и является новым (не содержит записей в кадровой истории), затем определяет тему сообщения в зависимости от типа документа. Далее система анализирует каждого сотрудника через функцию УПС_ПолучитьДанныеПоСотрудникам, которая применяет интеллектуальную фильтрацию — проверяет статус сотрудника и учитывает настройки констант, чтобы отправлять уведомления только при полных увольнениях или приеме новых сотрудников, если это задано в конфигурации. После формирования списка сотрудников создается текстовое тело письма с их данными, получается список email-адресов из справочника, и уведомление отправляется через системную почтовую учетную запись. Весь процесс полностью автоматизирован и требует от пользователя только первоначальной настройки адресов получателей и опциональных фильтров.
Процедура УПС_УвольнениеПриемПриЗаписи(Ссылка) Экспорт //Основные проверки
Если Ссылка.Проведен Тогда
Если не РегистрыСведений.КадроваяИсторияСотрудников.ВыбратьПоРегистратору(Ссылка).Следующий() Тогда
Тема = УПС_УстановитьТемуСообщения(Ссылка);
Сотрудники = УПС_ПолучитьДанныеПоСотрудникам(Ссылка, Тема);
Если Сотрудники.Количество() Тогда
Тело = УПС_СформироватьТелоСообщения(Сотрудники);
Кому = УПС_ПолучитьСписокЭлектронныхПочт();
УПС_СформироватьОтправитьСообщениеНаПочту(Тема, Тело, Кому);
КонецЕсли;
КонецЕсли;
КонецЕсли
КонецПроцедуры
Функция УПС_ПолучитьДанныеПоСотрудникам(Ссылка, Тема) //Определяет отправлять ли сообщение и получает основные данные (организация, подразделение, должность, дата приема/увольнения)
Сотрудники = Новый Массив;
Добавить = Истина;
Если Тема = "Прием на работу" ИЛИ Тема = "Увольнение" Тогда
Статус = УПС_ПроверитьПолноеУвольнениеСотрудника(Ссылка.Сотрудник.ФизическоеЛицо);
Если СтрНайти(Тема, "Прием") Тогда
Если Константы.УПС_УведомлятьТолькоПриНовомСотруднике.Получить() Тогда
Если Статус <> "СотрудникНеЗаведен" И Статус <> "Уволен" Тогда
Добавить = Ложь;
КонецЕсли;
КонецЕсли;
Если Добавить Тогда
Сотрудники.Добавить(Новый Структура("ФИО, ФизическоеЛицо, Организация, Подразделение, Должность, Дата",
Ссылка.Сотрудник.ФизическоеЛицо.ФИО, Ссылка.Сотрудник.ФизическоеЛицо, Ссылка.Организация, Ссылка.Подразделение, Ссылка.Должность, Ссылка.ДатаПриема));
КонецЕсли;
Иначе
Если Константы.УПС_УведомлятьТолькоПриПолномУвольнении.Получить() Тогда
Если Статус <> "Работает" Тогда
Добавить = Ложь;
КонецЕсли;
КонецЕсли;
Если Добавить Тогда
СтруктураДанных = УПС_ПолучитьКадровуюИнформациюФизическогоЛицаВСтруктуру(Ссылка.Сотрудник);
СтруктураДанных.Дата = Ссылка.ДатаУвольнения;
Сотрудники.Добавить(СтруктураДанных);
КонецЕсли;
КонецЕсли;
ИначеЕсли Тема = "Прием на работу (список)" ИЛИ Тема = "Увольнение (список)" Тогда
Для каждого Стр Из Ссылка.Сотрудники Цикл
Статус = УПС_ПроверитьПолноеУвольнениеСотрудника(Стр.Сотрудник.ФизическоеЛицо);
Если СтрНайти(Тема, "Прием") Тогда
Если Константы.УПС_УведомлятьТолькоПриНовомСотруднике.Получить() Тогда
Если Статус <> "СотрудникНеЗаведен" И Статус <> "Уволен" Тогда
Добавить = Ложь;
КонецЕсли;
КонецЕсли;
Если Добавить Тогда
Сотрудники.Добавить(Новый Структура("ФИО, ФизическоеЛицо, Организация, Подразделение, Должность, Дата",
Стр.Сотрудник.ФизическоеЛицо.ФИО, Стр.Сотрудник.ФизическоеЛицо, Ссылка.Организация, Стр.Подразделение, Стр.Должность, Стр.ДатаПриема));
КонецЕсли;
Иначе
Если Константы.УПС_УведомлятьТолькоПриПолномУвольнении.Получить() Тогда
Если Статус <> "Работает" Тогда
Добавить = Ложь;
КонецЕсли;
КонецЕсли;
Если Добавить Тогда
СтруктураДанных = УПС_ПолучитьКадровуюИнформациюФизическогоЛицаВСтруктуру(Стр.Сотрудник);
СтруктураДанных.Дата = Стр.ДатаУвольнения;
Сотрудники.Добавить(СтруктураДанных);
КонецЕсли;
КонецЕсли;
Добавить = Истина;
КонецЦикла;
КонецЕсли;
Возврат Сотрудники;
КонецФункции
Функция УПС_УстановитьТемуСообщения(Ссылка)
Если ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПриемНаРаботу") Тогда
Тема = "Прием на работу";
ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.ПриемНаРаботуСписком") Тогда
Тема = "Прием на работу (список)";
ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.Увольнение") Тогда
Тема = "Увольнение";
ИначеЕсли ТипЗнч(Ссылка) = Тип("ДокументСсылка.УвольнениеСписком") Тогда
Тема = "Увольнение (список)";
КонецЕсли;
Возврат Тема;
КонецФункции
Функция УПС_СформироватьТелоСообщения(Сотрудники)
Тело = "";
Для каждого ДанныеСотрудника Из Сотрудники Цикл
Тело = Тело + "
| "+" | ФИО: " + ДанныеСотрудника.ФизическоеЛицо + " | Организация: " + ДанныеСотрудника.Организация + " | Подразделение: " + ДанныеСотрудника.Подразделение + " | Должность: " + ДанныеСотрудника.Должность + " | Дата: " + ДанныеСотрудника.Дата;
КонецЦикла;
Возврат Тело;
КонецФункции
Процедура УПС_СформироватьОтправитьСообщениеНаПочту(Тема, Тело, Кому)
ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Тема", Тема);
ПараметрыПисьма.Вставить("Тело", Тело);
ПараметрыПисьма.Вставить("Кому", Кому);
УчетнаяЗапись = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма);
КонецПроцедуры
Также хотелось бы отдельно выделить две важные функции, которые отвечают за точную установку статуса сотрудника (работает, уволен, отсутствует в ИБ ...) и получение основных данных по нему.
-
Функция УПС_ПроверитьПолноеУвольнениеСотрудника(ФизическоеЛицо)
Данная функция выполняет сложный анализ кадровой истории физического лица, используя многоступенчатый запрос к регистру сведений "КадроваяИсторияСотрудников". Алгоритм определяет текущий статус сотрудника путем сравнения количества документов приема и увольнения за всю историю. Сначала запрос подсчитывает общее количество приемов на работу для данного физического лица, затем — общее количество увольнений. На заключительном этапе система анализирует соотношение этих количеств: если приемов не было вообще — статус "СотрудникНеЗаведен"; если количество приемов равно количеству увольнений — "Уволен"; если приемов на один больше — "Работает"; а если разница больше единицы — "РаботаетВНесколькихОрганизациях". Этот механизм позволяет точно определить, является ли увольнение полным (когда сотрудник прекращает все трудовые отношения) или частичным (когда остается хотя бы одно действующее трудоустройство).
Функция УПС_ПроверитьПолноеУвольнениеСотрудника(ФизическоеЛицо) Запрос = Новый Запрос; Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо); Запрос.Текст = "ВЫБРАТЬ | ВЫБОР | КОГДА КОЛИЧЕСТВО(КадроваяИсторияСотрудников.Регистратор) <> 0 | ТОГДА КОЛИЧЕСТВО(КадроваяИсторияСотрудников.Регистратор) | ИНАЧЕ 0 | КОНЕЦ КАК КоличествоПриемов |ПОМЕСТИТЬ ПриемНаРаботу |ИЗ | РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников |ГДЕ | КадроваяИсторияСотрудников.ФизическоеЛицо = &ФизическоеЛицо | И КадроваяИсторияСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Прием) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЫБОР | КОГДА КОЛИЧЕСТВО(КадроваяИсторияСотрудников.Регистратор) <> 0 | ТОГДА КОЛИЧЕСТВО(КадроваяИсторияСотрудников.Регистратор) | ИНАЧЕ 0 | КОНЕЦ КАК КоличествоУвольнений |ПОМЕСТИТЬ Увольнения |ИЗ | РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников |ГДЕ | КадроваяИсторияСотрудников.ФизическоеЛицо = &ФизическоеЛицо | И КадроваяИсторияСотрудников.ВидСобытия = ЗНАЧЕНИЕ(Перечисление.ВидыКадровыхСобытий.Увольнение) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВЫБОР | КОГДА ПриемНаРаботу.КоличествоПриемов = 0 | ТОГДА ""СотрудникНеЗаведен"" | ИНАЧЕ ВЫБОР | КОГДА ПриемНаРаботу.КоличествоПриемов - Увольнения.КоличествоУвольнений = 0 | ТОГДА ""Уволен"" | ИНАЧЕ ВЫБОР | КОГДА ПриемНаРаботу.КоличествоПриемов - Увольнения.КоличествоУвольнений = 1 | ТОГДА ""Работает"" | ИНАЧЕ ""РаботаетВНесколькихОрганизациях"" | КОНЕЦ | КОНЕЦ | КОНЕЦ КАК ТекущийСтатус |ИЗ | ПриемНаРаботу КАК ПриемНаРаботу, | Увольнения КАК Увольнения"; Возврат Запрос.Выполнить().Выгрузить()[0].ТекущийСтатус; КонецФункции -
Функция УПС_ПолучитьКадровуюИнформациюФизическогоЛицаВСтруктуру(Сотрудник)
Эта функция формирует полную кадровую информацию о сотруднике, выбирая его актуальное основное место работы или, при его отсутствии, текущее совместительство или подработку. Запрос использует срезы последних записей регистров сведений для получения актуальных данных на текущий момент. Особенностью алгоритма является приоритизация видов занятости: сначала система ищет основное место работы, затем — совместительство, и только потом — подработку. После определения актуального сотрудника функция выполняет соединение с регистром кадровой истории, чтобы получить полные реквизиты: организацию, подразделение и должность. Это обеспечивает корректное формирование уведомлений даже для сотрудников с несколькими трудоустройствами, гарантируя, что в сообщении будет указана информация по их основному или текущему месту работы.
Функция УПС_ПолучитьКадровуюИнформациюФизическогоЛицаВСтруктуру(Сотрудник) Экспорт СтруктураДанных = Новый Структура("ФИО, ФизическоеЛицо, Организация, Подразделение, Должность, Дата"); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизическоеЛицо); Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ВЫБОР | КОГДА ВидыЗанятостиСотрудниковСрезПоследних.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы) | ТОГДА ВидыЗанятостиСотрудниковСрезПоследних.Сотрудник | ИНАЧЕ ВЫБОР | КОГДА ВидыЗанятостиСотрудниковСрезПоследних.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.Совместительство) | ТОГДА ВидыЗанятостиСотрудниковСрезПоследних.Сотрудник | ИНАЧЕ ВЫБОР | КОГДА ВидыЗанятостиСотрудниковСрезПоследних.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.Подработка) | ТОГДА ВидыЗанятостиСотрудниковСрезПоследних.Сотрудник | КОНЕЦ | КОНЕЦ | КОНЕЦ КАК Сотрудник |ПОМЕСТИТЬ Сотрудники |ИЗ | РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних(, ФизическоеЛицо = &ФизическоеЛицо) КАК ВидыЗанятостиСотрудниковСрезПоследних |ГДЕ | ВидыЗанятостиСотрудниковСрезПоследних.ФизическоеЛицо = &ФизическоеЛицо |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | КадроваяИсторияСотрудниковСрезПоследних.ФизическоеЛицо КАК ФизическоеЛицо, | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник, | КадроваяИсторияСотрудниковСрезПоследних.Организация КАК Организация, | КадроваяИсторияСотрудниковСрезПоследних.Подразделение КАК Подразделение, | КадроваяИсторияСотрудниковСрезПоследних.Должность КАК Должность |ИЗ | Сотрудники КАК Сотрудники | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних КАК КадроваяИсторияСотрудниковСрезПоследних | ПО Сотрудники.Сотрудник = КадроваяИсторияСотрудниковСрезПоследних.Сотрудник"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СтруктураДанных.Вставить("Сотрудник",Выборка.Сотрудник); СтруктураДанных.Вставить("ФизическоеЛицо",Выборка.ФизическоеЛицо); СтруктураДанных.Вставить("Организация",Выборка.Организация); СтруктураДанных.Вставить("Подразделение",Выборка.Подразделение); СтруктураДанных.Вставить("Должность",Выборка.Должность); КонецЦикла; Возврат СтруктураДанных; КонецФункции
Технические особенности
-
Расширение использует системную учетную запись электронной почты для отправки сообщений.
-
Все операции выполняются на сервере для обеспечения безопасности и производительности.
-
Совместимо со стандартными механизмами платформы 1С:Предприятие 8.3.
Расширение идеально подходит для организаций, где важно оперативное информирование руководства и смежных отделов о кадровых изменениях.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.22.124
Вступайте в нашу телеграмм-группу Инфостарт