1С 8.x : Подписка на событие, Проверка состояния работников при перемещении и увольнении
Необходимо при Увольнении или Перемещении работников проверять - работает ли сотрудник? или он в отпуске, болеет и т.д.?
Для решение этого создадим в разделе
Подписки на события , подписку "ПриПроведенииПроверкаСостоянияРаботников"
и укажем в её свойствах:
А это код обработки из Обработчика:
Код 1C v 8.х //Проверка Состояния Сотрудников // для обработчика Подписка на Событие
Процедура ПриПроведенииПроверкаСостоянияРаботниковОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт
ОчиститьСообщения();
Если ТипЗнч(Источник.Ссылка) = Тип("ДокументСсылка.УвольнениеИзОрганизаций") Тогда
Для Каждого Сотр из Источник.РаботникиОрганизации Цикл
Сост=РегистрыСведений.СостояниеРаботниковОрганизаций.ПолучитьПоследнее(Сотр.ДатаУвольнения, Новый Структура("Сотрудник",Сотр.Сотрудник));
Если НЕ Сост.Состояние = Перечисления.СостоянияРаботникаОрганизации.Работает Тогда
Если Сост.СостояниеЗавершения = Перечисления.СостоянияРаботникаОрганизации.Работает и Сотр.ДатаУвольнения < Сост.ПериодЗавершения Тогда
Сообщить("Сотрудник "+Строка(Сотр.Сотрудник)+" на "+Формат(Сотр.ДатаУвольнения, "ДЛФ=DD")+ " - "+Строка(Сост.Состояние)+"! Можно уволить после "+Формат(Сост.ПериодЗавершения, "ДЛФ=DD") , СтатусСообщения.ОченьВажное);
Отказ = Истина; // Запрет проведения
ИначеЕсли НЕ Сост.СостояниеЗавершения = Перечисления.СостоянияРаботникаОрганизации.Работает и Сотр.ДатаУвольнения < Сост.ПериодЗавершения Тогда
Сообщить("Сотрудник "+Строка(Сотр.Сотрудник)+" на "+Формат(Сотр.ДатаУвольнения, "ДЛФ=DD")+ " - "+Строка(Сост.Состояние)+"!", СтатусСообщения.ОченьВажное);
Отказ = Истина; // Запрет проведения
КонецЕсли;
КонецЕсли;
КонецЦикла;
ИначеЕсли ТипЗнч(Источник.Ссылка) = Тип("ДокументСсылка.КадровоеПеремещениеОрганизаций") Тогда
Для Каждого Сотр из Источник.РаботникиОрганизации Цикл
Сост=РегистрыСведений.СостояниеРаботниковОрганизаций.ПолучитьПоследнее(Сотр.ДатаНачала, Новый Структура("Сотрудник",Сотр.Сотрудник));
Если НЕ Сост.Состояние = Перечисления.СостоянияРаботникаОрганизации.Работает Тогда
Если Сост.СостояниеЗавершения = Перечисления.СостоянияРаботникаОрганизации.Работает и Сотр.ДатаНачала < Сост.ПериодЗавершения Тогда
Сообщить("Сотрудник "+Строка(Сотр.Сотрудник)+" на "+Формат(Сотр.ДатаНачала, "ДЛФ=DD")+ " - "+Строка(Сост.Состояние)+"! Можно переместить после "+Формат(Сост.ПериодЗавершения, "ДЛФ=DD") , СтатусСообщения.ОченьВажное);
Отказ = Истина; // Запрет проведения
ИначеЕсли НЕ Сост.СостояниеЗавершения = Перечисления.СостоянияРаботникаОрганизации.Работает и Сотр.ДатаНачала < Сост.ПериодЗавершения Тогда
Сообщить("Сотрудник "+Строка(Сотр.Сотрудник)+" на "+Формат(Сотр.ДатаНачала, "ДЛФ=DD")+ " - "+Строка(Сост.Состояние)+"!", СтатусСообщения.ОченьВажное);
Отказ = Истина; // Запрет проведения
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры