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