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