#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьКадровыйУчет") Тогда
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(
ПроверяемыеРеквизиты,
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("ГоловнаяОрганизация"));
КонецЕсли;
КонецПроцедуры
Процедура ПередЗаписью(Отказ)
Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
ЗаписьНовогоСотрудника = ЭтоНовый();
Если ЗаписьНовогоСотрудника Тогда
ДополнительныеСвойства.Вставить("ЗаписьНовогоСотрудника", Истина);
Если ДополнительныеСвойства.Свойство("ГруппаДоступа") Тогда
Если Не ОбщегоНазначения.СсылкаСуществует(ФизическоеЛицо) Тогда
ФизическоеЛицоОбъект = Справочники.ФизическиеЛица.СоздатьЭлемент();
ФизическоеЛицоОбъект.УстановитьСсылкуНового(ФизическоеЛицо);
ФизическоеЛицоОбъект.ГруппаДоступа = ДополнительныеСвойства.ГруппаДоступа;
ФизическоеЛицоОбъект.Записать();
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЗаписьНовогоСотрудника Или Не ЗначениеЗаполнено(ГоловнойСотрудник) Тогда
СсылкаОбъекта = Неопределено;
Если ДополнительныеСвойства.Свойство("СсылкаНового") Тогда
СсылкаОбъекта = ДополнительныеСвойства.СсылкаНового;
УстановитьСсылкуНового(СсылкаОбъекта);
ИначеЕсли ЗначениеЗаполнено(Ссылка) Тогда
СсылкаОбъекта = Ссылка;
Иначе
СсылкаОбъекта = Справочники.Сотрудники.ПолучитьСсылку();
УстановитьСсылкуНового(СсылкаОбъекта);
КонецЕсли;
Если Не ЗначениеЗаполнено(ГоловнойСотрудник) Тогда
ГоловнойСотрудник = СсылкаОбъекта;
КонецЕсли;
Иначе
СсылкаОбъекта = Ссылка;
КонецЕсли;
ПрежниеЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "ГоловнаяОрганизация,Код,ПометкаУдаления");
Если ЗаписьНовогоСотрудника
Или ГоловнаяОрганизация <> ПрежниеЗначенияРеквизитов.ГоловнаяОрганизация Тогда
РеквизитыГоловнойОрганизации = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ГоловнаяОрганизация, "ЮридическоеФизическоеЛицо,ИндивидуальныйПредприниматель");
Если РеквизитыГоловнойОрганизации.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо
И ФизическоеЛицо = РеквизитыГоловнойОрганизации.ИндивидуальныйПредприниматель Тогда
ЗарплатаКадры.СообщитьОНевозможностиИППриниматьНаРаботуСамогоСебя();
Возврат;
КонецЕсли;
КонецЕсли;
Если ЗаписьНовогоСотрудника Тогда
ОбновитьЗначенияДоступаПоГоловнойОрганизации(СсылкаОбъекта, ГоловнаяОрганизация, ПрежниеЗначенияРеквизитов.ГоловнаяОрганизация);
Иначе
ДополнительныеСвойства.Вставить("ГоловнаяОрганизацияПрежняя", ПрежниеЗначенияРеквизитов.ГоловнаяОрганизация);
КонецЕсли;
КодПредыдущий = ПрежниеЗначенияРеквизитов.Код;
Если КодПредыдущий <> Код Тогда
Если ГоловнойСотрудник = Ссылка
Или ЗаписьНовогоСотрудника И ГоловнойСотрудник = ПолучитьСсылкуНового() Тогда
КадровыйУчет.ПроверитьУникальностьТабельногоНомера(Код, Ссылка);
КонецЕсли;
Если Не ДополнительныеСвойства.Свойство("СинхронизацияТабельныхНомеров") Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Код", Код);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ГоловнойСотрудник", ГоловнойСотрудник);
Запрос.Текст =
"ВЫБРАТЬ
| Сотрудники.Ссылка
|ИЗ
| Справочник.Сотрудники КАК Сотрудники
|ГДЕ
| Сотрудники.ГоловнойСотрудник = &ГоловнойСотрудник
| И Сотрудники.Ссылка <> &Ссылка
| И Сотрудники.Код <> &Код";
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
СотрудникОбъект = Выборка.Ссылка.ПолучитьОбъект();
Попытка
СотрудникОбъект.Заблокировать();
Исключение
ТекстИсключенияЗаписи = СтрШаблон(
НСтр("ru = 'Не удалось изменить Таб. номер ""%1"".
|Возможно, данные редактируется другим пользователем'"),
СотрудникОбъект.Наименование);
ВызватьИсключение ТекстИсключенияЗаписи;
КонецПопытки;
СотрудникОбъект.Код = Код;
СотрудникОбъект.ДополнительныеСвойства.Вставить("СинхронизацияТабельныхНомеров");
СотрудникОбъект.Записать();
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ЗаписьНовогоСотрудника
И ПометкаУдаления
И Не ПрежниеЗначенияРеквизитов.ПометкаУдаления Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Сотрудник", Ссылка);
Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо);
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК ФизическоеЛицо,
| ФизическиеЛица.ПометкаУдаления КАК ФизическоеЛицоПометкаУдаления,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сотрудники.Ссылка) КАК КоличествоСотрудников
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
| ПО ФизическиеЛица.Ссылка = Сотрудники.ФизическоеЛицо
| И (Сотрудники.Ссылка <> &Сотрудник)
| И (НЕ Сотрудники.ПометкаУдаления)
|ГДЕ
| ФизическиеЛица.Ссылка = &ФизическоеЛицо
|
|СГРУППИРОВАТЬ ПО
| ФизическиеЛица.Ссылка,
| ФизическиеЛица.ПометкаУдаления";
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Если Выборка.Следующий()
И Не Выборка.ФизическоеЛицоПометкаУдаления
И Выборка.КоличествоСотрудников = 0 Тогда
Попытка
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Справочник.ФизическиеЛица");
ЭлементБлокировки.УстановитьЗначение("Ссылка", ФизическоеЛицо);
Блокировка.Заблокировать();
ФизическоеЛицо.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
Исключение
Ошибка = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Удаление сотрудников'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка, , ,
НСтр("ru='Не удалось пометить на удаление физическое лицо:'") + ПодробноеПредставлениеОшибки(Ошибка));
КонецПопытки;
КонецЕсли;
КонецЕсли;
Если ЗаписьНовогоСотрудника И ПустаяСтрока(Наименование) Тогда
ЗаполнитьНаименованиеНовогоСотрудника();
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Если ДополнительныеСвойства.Свойство("ГоловнаяОрганизацияПрежняя") Тогда
ОбновитьЗначенияДоступаПоГоловнойОрганизации(Ссылка, ГоловнаяОрганизация, ДополнительныеСвойства.ГоловнаяОрганизацияПрежняя);
КонецЕсли;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьКадровыйУчет")
Или ДополнительныеСвойства.Свойство("ЗаписьНовогоСотрудника")
Или ДополнительныеСвойства.Свойство("ГоловнаяОрганизацияПрежняя") И ДополнительныеСвойства.ГоловнаяОрганизацияПрежняя <> ГоловнаяОрганизация Тогда
КадровыйУчет.ОбновитьОсновныхСотрудниковФизическихЛицПоСотрудникам(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Ссылка));
КонецЕсли;
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
ГоловнойСотрудник = Ссылка;
Наименование = "";
ФизическоеЛицо = Справочники.ФизическиеЛица.ПустаяСсылка();
ТекущийПроцентСевернойНадбавки = 0;
УточнениеНаименования = "";
ВАрхиве = Ложь;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ОбновитьЗначенияДоступаПоГоловнойОрганизации(Сотрудник, ГоловнаяОрганизация, ГоловнаяОрганизацияПредыдущая)
ТаблицаАнализаИзменений = КадровыйУчет.ТаблицаАнализаИзменений();
Если ЗначениеЗаполнено(ГоловнаяОрганизацияПредыдущая) Тогда
СтрокаТаблицы = ТаблицаАнализаИзменений.Добавить();
СтрокаТаблицы.Сотрудник = Сотрудник;
СтрокаТаблицы.Организация = ГоловнаяОрганизацияПредыдущая;
СтрокаТаблицы.ФлагИзменений = -1;
КонецЕсли;
СтрокаТаблицы = ТаблицаАнализаИзменений.Добавить();
СтрокаТаблицы.Сотрудник = Сотрудник;
СтрокаТаблицы.Организация = ГоловнаяОрганизация;
СтрокаТаблицы.ФлагИзменений = 1;
КадровыйУчет.ОбработатьИзменениеОрганизацийВНабореПоТаблицеИзменений(ТаблицаАнализаИзменений);
КонецПроцедуры
Процедура ЗаполнитьНаименованиеНовогоСотрудника()
Если Не ЗначениеЗаполнено(ФизическоеЛицо) Тогда
Возврат;
КонецЕсли;
ДанныеФизическогоЛица = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина,
ФизическоеЛицо, "Фамилия, Имя, Отчество, УточнениеНаименования");
Наименование = КадровыйУчетКлиентСервер.ПолноеНаименованиеСотрудника(
ДанныеФизическогоЛица[0].Фамилия,
ДанныеФизическогоЛица[0].Имя,
ДанныеФизическогоЛица[0].Отчество,
ДанныеФизическогоЛица[0].УточнениеНаименования,
УточнениеНаименования);
КонецПроцедуры
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли