#Область ОписаниеПеременных
&НаКлиенте
Перем СотрудникУдаляемойСтроки;
&НаКлиенте
Перем СтарыеЗначенияКонтролируемыхПолей Экспорт;
&НаКлиенте
Перем ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
РасчетЗарплатыРасширенныйФормы.ИнициализироватьМеханизмПересчетаДокументаПриРедактировании(ЭтаФорма);
НовыйДокумент = Параметры.Ключ.Пустая();
Параметры.Свойство("СсылкаНового", СсылкаНового);
Если НовыйДокумент Тогда
ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура("ЧтениеБезОграничений, ИзменениеБезОграничений, ИзменениеКадровыхДанных", Ложь, Ложь, Ложь);
КонецЕсли;
ДоступенВводНового = Пользователи.РолиДоступны("ДобавлениеИзменениеОтпусков");
УстановитьПривилегированныйРежим(Истина);
РасчетЗарплатыРасширенныйФормы.ДокументыПриСозданииНаСервере(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
УстановитьПривилегированныйРежим(Ложь);
ПодписиДокументов.ПриСозданииНаСервере(ЭтаФорма);
Если НовыйДокумент Тогда
ЭтоИсправление = ЗначениеЗаполнено(Объект.ИсправленныйДокумент);
Если Не ЭтоИсправление И Не Параметры.ЗначенияЗаполнения.Свойство("ДокументЗаполнения") Тогда
Объект.ПредоставитьОсновнойОтпуск = Истина;
КонецЕсли;
Если Параметры.Свойство("ОсновнойОтпуск") Тогда
Объект.ПредоставитьОсновнойОтпуск = Параметры.ОсновнойОтпуск;
КонецЕсли;
Если Параметры.Свойство("Сотрудник") И ЗначениеЗаполнено(Параметры.Сотрудник) Тогда
Объект.Сотрудник = Параметры.Сотрудник;
КонецЕсли;
Если ЭтоИсправление Тогда
ЗначенияДляЗаполнения = Новый Структура("Месяц",
"Объект.ПериодРегистрации");
Иначе
ЗначенияДляЗаполнения = Новый Структура("Организация, Ответственный, Месяц",
"Объект.Организация",
"Объект.Ответственный",
"Объект.ПериодРегистрации");
КонецЕсли;
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
ЗаполнитьДанныеФормыПоОрганизации();
ЗарплатаКадрыРасширенный.УстановитьНаименованиеПервичногоДокумента(Объект);
ПриПолученииДанныхНаСервере();
Если Не ЭтоИсправление Тогда
ОбновитьРабочийГодОсновногоОтпуска();
ЗаполнитьСсылкиНачислений(Истина);
ОбновитьИнформациюОПересеченииОтпускаСБольничным();
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.Основание) И ТипЗнч(Параметры.Основание) = Тип("Структура")
И Параметры.Основание.Свойство("ОснованиеПриостановки") Тогда
ОснованиеПриостановки = Параметры.Основание.ОснованиеПриостановки;
ЗаполнитьДанныеФормыПриИсправленииИзБольничного();
Объект.ДоначислитьЗарплатуПриНеобходимости = Ложь;
КонецЕсли;
УстановитьДатуНачалаСобытия();
УстановитьПланируемуюДатыВыплаты();
Если ЗначениеЗаполнено(Объект.Сотрудник) И Не ЭтоИсправление Тогда
УстановитьКоличествоДнейОсновногоОтпуска();
УстановитьКоличествоДнейОтпускаАвансом();
ОбновитьВариантРасчета();
КонецЕсли;
Если Не ЭтоИсправление Тогда
Если Параметры.ЗначенияЗаполнения.Свойство("ДокументЗаполнения") Тогда
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
КонецЕсли;
Если РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Ложь)
И (ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений Или ВыполнятьПредварительныйРасчетДокумента) Тогда
ВремяНачалаЗамера = ОценкаПроизводительности.НачатьЗамерВремени();
РассчитатьНачисленияНаСервере(Ложь, Истина);
ОценкаПроизводительности.ЗакончитьЗамерВремени("РасчетДокументаОтпуск", ВремяНачалаЗамера);
Иначе
ОчиститьРассчитанныеДанные();
ОбновитьДанныеДляРасчетаСреднего = Истина;
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
КонецЕсли;
КонецЕсли;
Если Параметры.Свойство("НачалоОтпуска") И Параметры.Свойство("ОкончаниеОтпуска") Тогда
Объект.НачалоОтпуска = Параметры.НачалоОтпуска;
Объект.ОкончаниеОтпуска = Параметры.ОкончаниеОтпуска;
ЗаполнитьПоложенныеВидыОтпусков();
КонецЕсли;
КонецЕсли;
ЗагрузитьНастройки();
ПоказатьНадписьДней();
УстановитьДоступностьЭлементовФормы(ЭтаФорма, Объект);
УстановитьОтметкуНезаполненогоПериодаЗаКоторыйПредоставляетсяОсновнойОтпуск();
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
Если ИспользуетсяРасчетЗарплаты И Не ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений И Объект.ДокументРассчитан Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.УстановитьДоступныеХарактерыВыплаты(Элементы);
УстановитьЗаголовокФлажкаРассчитатьЗарплату();
УстановитьЗаголовокСтраницыДополнительныеОтпуска();
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйФормы.УстановитьПризнакНеобходимостиРасчета(ЭтотОбъект);
НеобходимоПерезаполнитьНачисления = РасчетНеобходимоВыполнить;
Если Не Параметры.Ключ.Пустая() Тогда
Если Параметры.Свойство("ВыполнитьПерезаполнениеСведенийОСреднемЗаработке") Тогда
ОбновитьДанныеДляРасчетаСреднего = Истина;
Если РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Ложь) Тогда
ВремяНачалаЗамера = ОценкаПроизводительности.НачатьЗамерВремени();
РассчитатьНачисленияНаСервере(Ложь, Истина);
ОценкаПроизводительности.ЗакончитьЗамерВремени("РасчетДокументаОтпуск", ВремяНачалаЗамера);
Иначе
ОчиститьРассчитанныеДанные();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
КонецЕсли;
КонецЕсли;
Если (Параметры.ПерезаполнитьНачисления И ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений)
Или ВыполнятьПредварительныйРасчетДокумента И РасчетНеобходимоВыполнить Тогда
Если РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Ложь) Тогда
ОчиститьРассчитанныеДанные();
Модифицированность = Истина;
ВремяНачалаЗамера = ОценкаПроизводительности.НачатьЗамерВремени();
РассчитатьНачисленияНаСервере(Ложь, Истина);
ЗарплатаКадрыРасширенныйКлиентСервер.СброситьФлагНеобходимостиВыполненияРасчета(ЭтотОбъект);
ОценкаПроизводительности.ЗакончитьЗамерВремени("РасчетДокументаОтпуск", ВремяНачалаЗамера);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЗарплатаКадрыРасширенный.УстановитьВидимостьКомандПечатиМногофункциональногоДокумента(ЭтаФорма);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужбаФормы");
Модуль.УстановитьПараметрыВыбораСотрудников(ЭтаФорма, "Сотрудник");
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ЭДОБЗК.ПриСозданииНаСервереФормыОбъекта(ЭтотОбъект, Отказ, СтандартнаяОбработка, Объект);
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументов = ОбщегоНазначения.ОбщийМодуль("УчетОригиналовПервичныхДокументов");
МодульУчетОригиналовПервичныхДокументов.ПриСозданииНаСервере_ФормаДокумента(ЭтотОбъект, Элементы.Шапка);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивом = ОбщегоНазначения.ОбщийМодуль("ОбменСАрхивом");
МодульОбменСАрхивом.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
Если ЗначениеЗаполнено(Объект.ИсправленныйДокумент)
И Параметры.Ключ.Пустая()
И Объект.ПериодыПриостановкиОтпуска.Количество() >0
И ЗначениеЗаполнено(ДатаНачалаБольничного)Тогда
СпроситьПользователяОПродленииОтпуска();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ЗаполнениеВыполнено = Ложь;
ИспользуетсяРасчетЗарплаты = ПолучитьФункциональнуюОпцию("ИспользоватьРасчетЗарплатыРасширенная");
ПриПолученииДанныхНаСервере();
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонтрольВеденияУчетаБЗК.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если Не ТолькоПросмотр И Не ТекущийОбъект.Проведен Тогда
РасчетНеобходимоВыполнить = ТекущийОбъект.Начисления.Количество() = 0;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект,
ПравоДоступа("Изменение", Метаданные.Документы.Отпуск));
ЭДОБЗК.ПриЧтенииНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки = ОценкаПроизводительностиКлиент.ЗамерВремени();
КонецЕсли;
Если ПараметрыЗаписи.РежимЗаписи <> РежимЗаписиДокумента.ОтменаПроведения И Не ПараметрыЗаписи.Свойство("ПроверкаПередЗаписьюВыполнена") Тогда
Отказ = Истина;
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
РеквизитыВДанные(ТекущийОбъект);
Если ЗаполнениеВыполнено Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("УдалитьПерерасчетыСреднегоЗаработка", Истина);
ТекущийОбъект.ДополнительныеСвойства.Вставить("УдалитьПерерасчетыЗарплаты", Истина);
КонецЕсли;
Если ЗначениеЗаполнено(СсылкаНового) Тогда
ТекущийОбъект.УстановитьСсылкуНового(СсылкаНового);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(
ЭтотОбъект,
ТекущийОбъект,
ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ПодписиДокументов.ПослеЗаписиНаСервере(ЭтаФорма);
ДанныеВРеквизиты();
ЗаполнитьПредставлениеРаспределенияБухучета();
КонтрольВеденияУчетаБЗК.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
БлокировкаИзмененияОбъектов.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ЭДОБЗК.ПослеЗаписиНаСервереФормыОбъекта(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Если Объект.ДокументРассчитан Тогда
ИмяОперации = "ПроведениеДокументаОтпуск";
Иначе
ИмяОперации = "ПроведениеДокументаОтпускКадры";
КонецЕсли;
ОценкаПроизводительностиКлиент.УстановитьКлючевуюОперациюЗамера(ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки, ИмяОперации);
КонецЕсли;
Если Объект.ПериодыПриостановкиОтпуска.Количество() > 0 И ЗначениеЗаполнено(ОснованиеПриостановки) Тогда
Оповестить("ПроведеноИсправлениеОтпуска", ОснованиеПриостановки);
КонецЕсли;
ИсправлениеДокументовЗарплатаКадрыКлиент.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
Оповестить("ЗаписанДокументОтпуск", Объект.Ссылка, ЭтаФорма);
Оповестить("ЗаявкиСотрудниковЗаписанДокумент", Объект.Ссылка, ВладелецФормы);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если ИспользуетсяРасчетЗарплаты Тогда
Если ИмяСобытия = "ИзмененыРезультатыРасчетаНДФЛ" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеНДФЛНаСервере(Параметр);
ОбновитьНачисленоУдержаноИтог();
ИначеЕсли ИмяСобытия = "ИзмененыРезультатыРасчетаУдержаний" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеУдержанийНаСервере(Параметр);
ОбновитьНачисленоУдержаноИтог();
ИначеЕсли ИмяСобытия = "ИзмененоРаспределениеИсточниковФинансирования" Тогда
ЗарплатаКадрыРасширенныйКлиент.ОбработкаОповещенияИзмененияРаспределенияИсточниковФинансирования(ЭтаФорма, ИмяСобытия, Параметр, Источник);
ИначеЕсли ИмяСобытия = "ИзмененыКорректировкиВыплаты" И Источник.ВладелецФормы = ЭтаФорма Тогда
ОбновитьДанныеКорректировокВыплатыНаСервере(Параметр);
ИначеЕсли ИмяСобытия = "Запись_Начисление" И Источник = Объект.ВидРасчетаОсновногоОтпуска Тогда
ВидРасчетаОсновногоОтпускаПриИзмененииНаСервере();
КонецЕсли;
ИсправлениеДокументовЗарплатаКадрыКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
КонецЕсли;
Если (ИмяСобытия = "ЗаписанДокументОтпуск"
Или ИмяСобытия = "ЗаписанДокументОтпускБезСохраненияОплаты")
И Источник.ВладелецФормы = ЭтаФорма Тогда
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьВидимостьОтсутствияПоДругимМестамРаботы();
ИначеЕсли ИмяСобытия = "ЗаписьДокументаКомандировка"
И Источник = ЭтаФорма Тогда
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьВидимостьОтсутствияПоДругимМестамРаботы();
ИначеЕсли ИмяСобытия = "ЗаписанПодчиненныйДокумент" И Источник = Объект.Ссылка Тогда
УстановитьИнфоНадписьЗамещения();
ИначеЕсли ИмяСобытия = "Запись_СведенияДляОплатыОтпускаСФР" И Параметр = Объект.Ссылка Тогда
СведенияДляОплатыОтпускаСФР = Источник;
КонецЕсли;
ЭДОБЗККлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент");
МодульУчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия, ЭтотОбъект, Источник);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ТекущийОбъект);
ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверкаПересеченияПериодовВыполнена", Истина);
Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда
Отказ = Истина;
КонецЕсли;
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ЗаписатьИЗакрытьНаКлиенте", ЭтотОбъект);
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ, ЗавершениеРаботы);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СпроситьПользователяОПродленииОтпуска()
КоличествоДнейПересеченияОсновногоОтпуска = КоличествоДнейПересеченияОсновногоОтпуска(ДатаНачалаБольничного, ДатаОкончанияБольничного);
ПересечениеДопОтпуска = Неопределено;
Если КоличествоДнейПересеченияОсновногоОтпуска = 0 Или Объект.ДатаНачалаОсновногоОтпуска > Объект.ДатаНачалаПериодаОтсутствия Тогда
ПересечениеДопОтпуска = ПересечениеДопОтпуска(ДатаНачалаБольничного, ДатаОкончанияБольничного);
КонецЕсли;
Если ПересечениеДопОтпуска <> Неопределено И ПересечениеДопОтпуска.КоличествоДнейПересечения <> 0 Тогда
ТекстВопроса = НСтр("ru = 'Продлить дополнительный отпуск?'");
Оповещение = Новый ОписаниеОповещения("ПродлениеДопОтпускаЗавершение", ЭтотОбъект, ПересечениеДопОтпуска);
ИначеЕсли КоличествоДнейПересеченияОсновногоОтпуска <> 0 Тогда
ТекстВопроса = НСтр("ru = 'Продлить основной отпуск?'");
Оповещение = Новый ОписаниеОповещения("ПродлениеОсновногоОтпускаЗавершение", ЭтотОбъект,
КоличествоДнейПересеченияОсновногоОтпуска);
Иначе
Возврат;
КонецЕсли;
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 0, КодВозвратаДиалога.Да,
НСтр("ru = 'Продление отпуска'"));
КонецПроцедуры
&НаКлиенте
Процедура ПродлениеОсновногоОтпускаЗавершение(Результат, КоличествоДнейПродления) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ДатаОкончанияОтпускаДоПродления = Объект.ДатаОкончанияОсновногоОтпуска;
ПродлитьОсновнойОтпускНаСервере(КоличествоДнейПродления);
Если ЗначениеЗаполнено(КоличествоДнейПродленияОсновногоОтпуска) Тогда
ВыполнитьДействияПриИзмененииКоличестваДнейОсновногоОтпускаИРассчитать();
ТекстСообщения = СтрШаблон(Нстр("ru = 'Дата окончания перенесена на %1 дн. с %2 на %3.'"),
КоличествоДнейПродленияОсновногоОтпуска,
Формат(ДатаОкончанияОтпускаДоПродления, "ДЛФ=D"),
Формат(Объект.ДатаОкончанияОсновногоОтпуска, "ДЛФ=D"));
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НадписьПродлитьОтпуск",
"Заголовок",
СтрШаблон(НСтр("ru='Отменить перенос даты окончания основного отпуска на %1 дн...'"),
КоличествоДнейПродления));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"Страницы",
"ТекущаяСтраница",
Элементы.ПредоставлениеОтпускаСтраница);
КонецЕсли;
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НадписьПродлитьОтпуск",
"Заголовок",
СтрШаблон(НСтр("ru='Перенести дату окнчания основного отпуска на %1 дн...'"), КоличествоДнейПродления));
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецЕсли;
ПерезаполнитьПериодыПересечения();
КонецПроцедуры
&НаКлиенте
Процедура ПродлениеДопОтпускаЗавершение(Результат, ПродлениеДопОтпуска) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ДопОтпуск = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(ПродлениеДопОтпуска.ИдентификаторСтроки);
ДатаОкончанияДопОтпускаДоПродления = ДопОтпуск.ДатаОкончания;
ПродлитьДополнительныйОтпускНаСервере(ПродлениеДопОтпуска);
Если Объект.ДатаНачалаОсновногоОтпуска > Объект.ДатаНачалаПериодаОтсутствия Тогда
КоличествоДополнительныхОтпусков = Объект.ДополнительныеОтпуска.Количество() - 1;
ДатаОкончанияДопОтпуска = Объект.ДополнительныеОтпуска[КоличествоДополнительныхОтпусков].ДатаОкончания;
Объект.ДатаНачалаОсновногоОтпуска = КонецДня(ДатаОкончанияДопОтпуска) + 1;
КоличествоДнейОсновногоОтпускаПриИзмененииНаСервере();
ДатаНачалаПриИзмененииНаСервере();
КонецЕсли;
Если ЗначениеЗаполнено(КоличествоДнейПродленияДопОтпуска) Тогда
ТекстСообщения = СтрШаблон(Нстр("ru = 'Дата окончания %1 перенесена на %2 дн. с %3 на %4.'"),
ДопОтпуск.ВидРасчета,
КоличествоДнейПродленияДопОтпуска,
Формат(ДатаОкончанияДопОтпускаДоПродления, "ДЛФ=D"),
Формат(ДопОтпуск.ДатаОкончания, "ДЛФ=D"));
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НадписьПродлитьОтпуск",
"Заголовок",
СтрШаблон(НСтр("ru='Отменить перенос даты окнчания дополнительного отпуска на %1 дн...'"),
ПродлениеДопОтпуска.КоличествоДнейПересечения));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"Страницы",
"ТекущаяСтраница",
Элементы.ПредоставлениеОтпускаСтраница);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НадписьПродлитьОтпуск",
"Заголовок",
СтрШаблон(НСтр("ru='Перенсти дату окончания дополнительного отпуска на %1 дн...'"), ПродлениеДопОтпуска.КоличествоДнейПересечения));
КонецЕсли;
ПерезаполнитьПериодыПересечения();
КонецПроцедуры
&НаКлиенте
Процедура СпроситьПользователяОбОтменеПродленияОтпуска()
Если ЗначениеЗаполнено(КоличествоДнейПродленияОсновногоОтпуска) Тогда
Оповещение = Новый ОписаниеОповещения("ОтменаПродленияОсновногоОтпускаЗавершение", ЭтотОбъект);
ТекстЗаголовка = НСтр("ru = 'Отменить продление основного отпуска?'");
ПоказатьВопрос(Оповещение, ТекстЗаголовка, РежимДиалогаВопрос.ДаНет, 0, КодВозвратаДиалога.Да,
НСтр("ru = 'Отмена продления отпуска'"))
ИначеЕсли ЗначениеЗаполнено(КоличествоДнейПродленияДопОтпуска) Тогда
Оповещение = Новый ОписаниеОповещения("ОтменаПродленияДопОтпускаЗавершение", ЭтотОбъект);
ТекстЗаголовка = НСтр("ru = 'Отменить продление дополнительного отпуска?'");
ПоказатьВопрос(Оповещение, ТекстЗаголовка, РежимДиалогаВопрос.ДаНет, 0, КодВозвратаДиалога.Да,
НСтр("ru = 'Отмена продления отпуска'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменаПродленияОсновногоОтпускаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ДатаОкончанияДоОтмены = Объект.ДатаОкончанияОсновногоОтпуска;
КоличествоДнейПродления = КоличествоДнейПродленияОсновногоОтпуска;
ОтменитьПродлениеОсновногоОтпускаНаСервере();
ВыполнитьДействияПриИзмененииКоличестваДнейОсновногоОтпускаИРассчитать();
ТекстСообщения = СтрШаблон(Нстр("ru = 'Продление основного отпуска на %1 дн. отменено.
|Дата окончания перенесена с %2 на %3.'"),
КоличествоДнейПродления,
Формат(ДатаОкончанияДоОтмены, "ДЛФ=D"),
Формат(Объект.ДатаОкончанияОсновногоОтпуска, "ДЛФ=D"));
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НадписьПродлитьОтпуск",
"Заголовок",
СтрШаблон(НСтр("ru='Продлить основной отпуск на %1 дн...'"),
КоличествоДнейПересеченияОсновногоОтпуска(ДатаНачалаБольничного, ДатаОкончанияБольничного)));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"Страницы",
"ТекущаяСтраница",
Элементы.ПредоставлениеОтпускаСтраница);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменаПродленияДопОтпускаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
ДопОтпуск = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(ИдентификаторПродленногоДопОтпуска);
Если ДопОтпуск = Неопределено Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(Нстр("ru = 'Отсутствует строка дополнительного отпуска'"));
Возврат;
КонецЕсли;
ДатаОкончанияДоОтмены = ДопОтпуск.ДатаОкончания;
КоличествоДнейПродления = КоличествоДнейПродленияДопОтпуска;
ОтменитьПродлениеДополнительногоОтпускаНаСервере();
ДополнительныеОтпускаКоличествоДнейПриИзмененииНаСервере(ИдентификаторПродленногоДопОтпуска, Истина);
ТекстСообщения = СтрШаблон(Нстр("ru = 'Отменено продление %1 на %2 дн. Дата окончания перенесена с %3 на %4.'"),
ДопОтпуск.ВидРасчета,
КоличествоДнейПродления,
Формат(ДатаОкончанияДоОтмены, "ДЛФ=D"),
Формат(ДопОтпуск.ДатаОкончания, "ДЛФ=D"));
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НадписьПродлитьОтпуск",
"Заголовок",
СтрШаблон(НСтр("ru='Продлить дополнительный отпуск на %1 дн...'"),
ПересечениеДопОтпуска(ДатаНачалаБольничного, ДатаОкончанияБольничного).КоличествоДнейПересечения));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"Страницы",
"ТекущаяСтраница",
Элементы.ПредоставлениеОтпускаСтраница);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборОтработанныхДнейОтгулов") Тогда
Модифицированность = Истина;
ПриИзмененииОтработанныхДнейНаСервере(ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
#Область РеквизитыПервичногоДокумента
&НаКлиенте
Процедура НаименованиеПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ОткрытьФормуСпискаЗначенийСтроковогоРеквизита(Элемент,
СтандартнаяОбработка, "ПервичныйДокумент", НСтр("ru = 'Первичные документы'"), НСтр("ru = 'Первичный документ'"));
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда
Объект.НаименованиеПервичногоДокумента = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НаименованиеПервичногоДокументаАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ПодборЗначенияСтроковогоРеквизита(Текст, ДанныеВыбора, СтандартнаяОбработка, "ПервичныйДокумент");
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ДатаПервичногоДокументаНачалоВыбораЗавершение", ЭтотОбъект);
ПоказатьВводДаты(Оповещение, ?(ЗначениеЗаполнено(Объект.ДатаПервичногоДокумента), Объект.ДатаПервичногоДокумента, Объект.Дата), НСтр("ru='Дата первичного документа'"), ЧастиДаты.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаНачалоВыбораЗавершение(Дата, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(Дата) Тогда
Объект.ДатаПервичногоДокумента = Дата;
ДатаПервичногоДокументаПредставление = Формат(Дата,"ДФ=dd.MM.yyyy");
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаПервичногоДокументаОчистка(Элемент, СтандартнаяОбработка)
Объект.ДатаПервичногоДокумента = Дата(1,1,1);
Модифицированность = Истина;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(
Элемент.ТекстРедактирования,
ЭтотОбъект,
"Объект.Комментарий"
);
КонецПроцедуры
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ОрганизацияПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
ЗаполнитьДанныеФормыПоОрганизации();
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НомерПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СотрудникПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.ЗамерВремени("ИзменениеСотрудникаВФормеДокументаОтпуск");
ОбновитьРасчетДенежногоСодержания = Истина;
СотрудникПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ДатаНачалаПриИзменении(Элемент)
ОбновитьРасчетДенежногоСодержания = Истина;
ДатаНачалаПриИзмененииНаСервере();
ПерезаполнитьПериодыПересечения();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияОсновногоОтпускаПриИзменении(Элемент)
ДатаОкончанияОсновногоОтпускаПриИзмененииНаСервере();
ПерезаполнитьПериодыПересечения();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура КоличествоДнейОсновногоОтпускаПриИзменении(Элемент)
ВыполнитьДействияПриИзмененииКоличестваДнейОсновногоОтпускаИРассчитать();
КонецПроцедуры
&НаКлиенте
Процедура ОсновнойОтпускПриИзменении(Элемент)
ОсновнойИлиДополнительныйОтпускПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ПредоставитьКомпенсациюОсновногоОтпускаПриИзменении(Элемент)
ПредоставитьКомпенсациюОсновногоОтпускаПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ДнейЧасовКомпенсацииОтпускаПриИзменении(Элемент)
ДнейЧасовКомпенсацииОтпускаПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ПредоставитьМатериальнуюПомощьПриОтпускеПриИзменении(Элемент)
ПредоставитьМатериальнуюПомощьПриОтпускеПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ПредоставитьЕдиновременнуюВыплатуКОтпускуПриИзменении(Элемент)
ПредоставитьЕдиновременнуюВыплатуКОтпускуПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ВидРасчетаЕдиновременнойВыплатыКОтпускуПриИзменении(Элемент)
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныйОтпускПриИзменении(Элемент)
ОсновнойИлиДополнительныйОтпускПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ВидРасчетаОсновногоОтпускаПриИзменении(Элемент)
ВидРасчетаОсновногоОтпускаПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ВидРасчетаКомпенсацииОсновногоОтпускаПриИзменении(Элемент)
ВидРасчетаКомпенсацииОсновногоОтпускаПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", Модифицированность);
ПриИзмененииМесяцаНачисления();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("МесяцНачисленияСтрокойНачалоВыбораЗавершение", ЭтотОбъект);
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
ПриИзмененииМесяцаНачисления();
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой", Направление, Модифицированность);
ПодключитьОбработчикОжидания("ОбработчикОжиданияМесяцНачисленияПриИзменении", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура МесяцНачисленияСтрокойОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура РасчетДенежногоСодержанияПриИзменении(Элемент)
ОбновитьРасчетДенежногоСодержания = Истина;
РасчетДенежногоСодержанияПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура УчитыватьМРОТПриОплатеПоСреднемуЗаработкуПриИзменении(Элемент)
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ДоначислитьЗарплатуПриНеобходимостиПриИзменении(Элемент)
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьЗарплатуПриИзменении(Элемент)
ОбновитьДанныеДляРасчетаСреднего = Истина;
Если Не Объект.РассчитатьЗарплату И Не Объект.РасчетДенежногоСодержания Тогда
ОчиститьДанныеСреднегоПриОтменеРасчетаЗарплаты();
КонецЕсли;
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьВидимостьПолейНормыВремени(
ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Объект.РассчитатьЗарплату);
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура НачалоОтпускаПриИзменении(Элемент)
ЗаполнитьПоложенныеВидыОтпусков();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ОкончаниеОтпускаПриИзменении(Элемент)
ЗаполнитьПоложенныеВидыОтпусков();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ОснованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ОткрытьФормуСпискаЗначенийСтроковогоРеквизита(Элемент,
СтандартнаяОбработка, "ОснованиеОтпуска", НСтр("ru = 'Основания отпуска'"), НСтр("ru = 'Основание отпуска'"));
КонецПроцедуры
&НаКлиенте
Процедура ОснованиеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч(ВыбранноеЗначение) = Тип("Строка") Тогда
Объект.Основание = ВыбранноеЗначение;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОснованиеАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ПодборЗначенияСтроковогоРеквизита(Текст, ДанныеВыбора, СтандартнаяОбработка, "ОснованиеОтпуска");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПорядокВыплатыПриИзменении(Элемент)
ПерезаполнитьНачисления = Неопределено;
ПорядокВыплатыПриИзмененииНаСервере(ПерезаполнитьНачисления);
Если ПерезаполнитьНачисления = Истина Тогда
ВыполнитьРасчетИПерезаполнениеНачислений();
ИначеЕсли ПерезаполнитьНачисления = Ложь Тогда
ВыполнитьРасчетИПерезаполнениеНачислений(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПланируемаяДатаВыплатыПриИзменении(Элемент)
УстановитьДатуНачалаСобытия();
ВыполнитьРасчетИПерезаполнениеНачислений(Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДокументРассчитанПриИзменении(Элемент)
ДокументРассчитанПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЗамещениеИнфоНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ЦепочкиДокументов") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("ЦепочкиДокументовКлиент");
Модуль.ОткрытьФормуЗамещенияПоСсылке(ЭтаФорма, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДокументРассчитанПриИзмененииНаСервере()
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
&НаКлиенте
Процедура ПредоставитьОтгулПриИзменении(Элемент)
ОтгулПриИзмененииНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура КоличествоДнейОтгулаПриИзменении(Элемент)
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура РасходДнейОтгулаПриИзменении(Элемент)
РасходДнейОтгулаПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура РасходЧасовОтгулаПриИзменении(Элемент)
РасходЧасовОтгулаПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполненностьДанныхИнформационныйТекстОбработкаНавигационнойСсылки(Элемент,
НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
УчетСреднегоЗаработкаКлиент.ПоказатьПричиныПерерасчетаСреднегоЗаработка(Объект.Ссылка,
СтандартнаяОбработка, НавигационнаяСсылкаФорматированнойСтроки);
КонецПроцедуры
&НаКлиенте
Процедура СтатьяФинансированияПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура СтатьяРасходовПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура СпособОтраженияЗарплатыВБухучетеПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура ОтношениеКЕНВДПриИзменении(Элемент)
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура ДоходПолученНаТерриторииРФПриИзменении(Элемент)
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура НадписьПродлитьОтпускНажатие(Элемент)
Если Не ЗначениеЗаполнено(КоличествоДнейПродленияОсновногоОтпуска)
И Не ЗначениеЗаполнено(КоличествоДнейПродленияДопОтпуска) Тогда
СпроситьПользователяОПродленииОтпуска();
Иначе
СпроситьПользователяОбОтменеПродленияОтпуска();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементПриИзменении(Элемент)
ПодписиДокументовКлиент.ПриИзмененииПодписывающегоЛица(ЭтаФорма, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементНажатие(Элемент)
ПодписиДокументовКлиент.РасширеннаяПодсказкаНажатие(ЭтаФорма, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УчетОригиналовПервичныхДокументов") Тогда
МодульУчетОригиналовПервичныхДокументовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УчетОригиналовПервичныхДокументовКлиент");
МодульУчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтотОбъект,Элементы["ДекорацияСостояниеОригинала"]);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВариантУказанияБухучетаПриИзменении(Элемент)
Объект.БухучетУказываетсяРаспределением = ?(ВариантУказанияБухучета = 1, Истина, Ложь);
УстановитьВидимостьНастроекБухучета(ЭтаФорма);
ОбновитьБухучетРезультатовРасчета();
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеРаспределенияБухучетаНажатие(Элемент)
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияРаспределенияБухучетаДокумента(ЭтаФорма);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыДополнительныеОтпуска
&НаКлиенте
Процедура ДополнительныеОтпускаВидОтпускаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДополнитьПараметрыВыбораВидаОтпускаВидомОтпускаТекущейСтроки();
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Элементы.ДополнительныеОтпуска.ТекущиеДанные.ДатаНачала = ПодобратьСледующуюДатуНачалаОтпуска();
КонецЕсли;
ПерезаполнитьПриОкончанииРедактирования = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования
И Не НоваяСтрока Тогда
УдалитьВидОтпускаТекущейСтрокиИзПараметровВыбораВидаОтпуска();
Возврат;
КонецЕсли;
ДополнительныеОтпускаПриОкончанииРедактированияНаСервере();
Если ПерезаполнитьПриОкончанииРедактирования Тогда
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаПослеУдаления(Элемент)
ДополнительныеОтпускаПослеУдаленияНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаВидОтпускаПриИзменении(Элемент)
ДополнительныеОтпускаВидОтпускаПриИзмененииНаСервере(Элементы.ДополнительныеОтпуска.ТекущаяСтрока);
ПерезаполнитьПриОкончанииРедактирования = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаДатаНачалаПриИзменении(Элемент)
ДополнительныеОтпускаДатаНачалаПриИзмененииНаСервере(Элементы.ДополнительныеОтпуска.ТекущаяСтрока);
ПерезаполнитьПриОкончанииРедактирования = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаДатаОкончанияПриИзменении(Элемент)
ДополнительныеОтпускаДатаОкончанияПриИзмененииНаСервере(Элементы.ДополнительныеОтпуска.ТекущаяСтрока);
ПерезаполнитьПриОкончанииРедактирования = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаКоличествоДнейПриИзменении(Элемент)
ДополнительныеОтпускаКоличествоДнейПриИзмененииНаСервере(Элементы.ДополнительныеОтпуска.ТекущаяСтрока);
ПерезаполнитьПриОкончанииРедактирования = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаВидРасчетаПриИзменении(Элемент)
ПерезаполнитьПриОкончанииРедактирования = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаКоличествоДнейКомпенсацииПриИзменении(Элемент)
ДополнительныеОтпускаКоличествоДнейКомпенсацииПриИзмененииНаСервере(Элементы.ДополнительныеОтпуска.ТекущаяСтрока);
ПерезаполнитьПриОкончанииРедактирования = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеОтпускаВидРасчетаКомпенсацииПриИзменении(Элемент)
ПерезаполнитьПриОкончанииРедактирования = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисления
&НаКлиенте
Процедура НачисленияПриИзменении(Элемент)
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "Начисления", Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Элементы.Начисления.ТекущиеДанные.Сотрудник = Объект.Сотрудник;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "Начисления", Элементы.Начисления.ТекущиеДанные, НоваяСтрока, Копирование);
ПерезаполнитьПриОкончанииРедактирования = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
Если ПерезаполнитьПриОкончанииРедактирования Тогда
НеПерезаполнятьПриРасчете = Истина;
ВыполнитьРасчетИПерезаполнениеНачислений(Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПередУдалением(Элемент, Отказ)
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПослеУдаления(Элемент)
РассчитатьДанныеФормы(Объект.Сотрудник, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура НачисленияНачислениеПриИзменении(Элемент)
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицыВидовРасчета, 2);
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыВидовРасчета, Ложь, Ложь);
ОбновитьНачисленоУдержаноИтог();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияРезультатПриИзменении(Элемент)
ПерезаполнитьПриОкончанииРедактирования = Истина;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДатаНачалаПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Истина, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияДатаОкончанияПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Истина, Ложь);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНачисленияПерерасчет
&НаКлиенте
Процедура НачисленияПерерасчетПриИзменении(Элемент)
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка);
Если Не СтандартнаяОбработка Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Элемент", Элемент);
ДополнительныеПараметры.Вставить("ВыбраннаяСтрока", ВыбраннаяСтрока);
ДополнительныеПараметры.Вставить("Поле", Поле);
Оповещение = Новый ОписаниеОповещения("НачисленияПерерасчетВыборЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьКомандуРасшифровкиЗначенияПоказателя(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, Оповещение);
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") <> 0 Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетВыборЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элемент = ДополнительныеПараметры.Элемент;
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Элемент, ВыбраннаяСтрока, Поле);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "НачисленияПерерасчет", Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
РасчетЗарплатыРасширенныйКлиент.ПередНачаломДобавленияСтрокиПерерасчета(Элемент, Отказ, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередУдалением(Элемент, Отказ)
РасчетЗарплатыРасширенныйКлиент.ПередУдалениемСтрокиПерерасчета(ЭтотОбъект, "НачисленияПерерасчет", Элемент, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ДобавитьИзмененныеДанныеПерерасчета(Элемент.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
Элементы.НачисленияПерерасчет.ТекущиеДанные.Сотрудник = Объект.Сотрудник;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "НачисленияПерерасчет", Элементы.НачисленияПерерасчет.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
ДобавитьИзмененныеДанныеПерерасчета(Элемент.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
РасчетЗарплатыКлиент.СтрокаРасчетаПриОкончанииРедактирования(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПослеУдаления(Элемент)
ПослеУдаленияПерерасчета();
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетНачислениеПриИзменении(Элемент)
ОписаниеТаблицыВидовРасчета = ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенныйКлиент.ВводНачисленийНачислениеПриИзменении(ЭтаФорма, ОписаниеТаблицыВидовРасчета, 2);
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыВидовРасчета, Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетРезультатПриИзменении(Элемент)
ОбновитьПерерасчетИтог(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетДатаНачалаПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетДатаОкончанияПриИзменении(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), Ложь, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОтсутствияПоДругимМестамРаботы
&НаКлиенте
Процедура ОтсутствияПоДругимМестамРаботыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "ОтсутствияПоДругимМестамРаботыСсылка" Тогда
СтандартнаяОбработка = Ложь;
Строка = ЭтотОбъект.ОтсутствияПоДругимМестамРаботы.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если ЗначениеЗаполнено(Строка.Ссылка) Тогда
ПоказатьЗначение(, Строка.Ссылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыУправленческиеНачисления
&НаКлиенте
Процедура УправленческиеНачисленияПриАктивизацииСтроки(Элемент)
РасчетЗарплатыРасширенныйКлиент.ДокументыВыполненияНачисленийПриАктивацииСтроки(ЭтаФорма, "УправленческиеНачисления", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РасчетЗарплатыКлиент.СтрокаРасчетаПриНачалеРедактирования(ЭтаФорма, "УправленческиеНачисления", Элементы.УправленческиеНачисления.ТекущиеДанные, НоваяСтрока, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриОкончанииРедактированияСтрокиНачисленияЗарплаты(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПередУдалением(Элемент, Отказ)
ТекущиеДанные = Элемент.ТекущиеДанные;
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПослеУдаления(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПослеУдаленияСтрокиНачисленияЗарплаты(ЭтаФорма, СотрудникУдаляемойСтроки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияНачислениеПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриИзмененииНачисленияСтрокиНачисленияЗарплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияДатаНачалаПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриИзмененииДатыНачалаСтрокиНачисленияЗарплаты(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияДатаОкончанияПриИзменении(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриИзмененииДатыОкончанияСтрокиНачисленияЗарплаты(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.УправленческиеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы.УправленческиеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.УправленческиеНачисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура УправленческиеНачисленияПодробно(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриНажатииКнопкиПоказатьПодробностиРасчета(ЭтаФорма, Элементы.УправленческиеНачисленияПодробно);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УправленческиеНачисленияОтменитьИсправление(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("УправленческаяЗарплатаКлиент");
Модуль.ПриОтменеИсправленияНачисленияЗарплаты(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьИнфоНадписьЗамещения()
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ЦепочкиДокументов") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ЦепочкиДокументовФормы");
Модуль.УстановитьИнфоНадписьЗамещения(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РасчетДенежногоСодержанияПриИзмененииНаСервере()
РасчетЗарплатыРасширенныйФормы.ОбновитьФормуПоВариантуРасчетаСреднегоЗаработка(ЭтотОбъект);
ЗаполнитьСсылкиНачислений(Ложь);
ОбновитьИнформациюОПересеченииОтпускаСБольничным();
ОчиститьСреднийЗаработок();
ОчиститьРассчитанныеДанные();
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ(УстановитьЗначение = Истина)
ВидыРасчета = Новый Массив;
Если Объект.ПредоставитьОсновнойОтпуск И ЗначениеЗаполнено(Объект.ВидРасчетаОсновногоОтпуска) Тогда
ВидыРасчета.Добавить(Объект.ВидРасчетаОсновногоОтпуска);
КонецЕсли;
Если Объект.ПредоставитьКомпенсациюОсновногоОтпуска И ЗначениеЗаполнено(Объект.ВидРасчетаКомпенсацииОсновногоОтпуска) Тогда
ВидыРасчета.Добавить(Объект.ВидРасчетаКомпенсацииОсновногоОтпуска);
КонецЕсли;
Если Объект.ПредоставитьДополнительныйОтпуск Тогда
Для Каждого СтрокаОтпуска Из Объект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(СтрокаОтпуска.ВидРасчета) Тогда
ВидыРасчета.Добавить(СтрокаОтпуска.ВидРасчета);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаОтпуска.ВидРасчетаКомпенсации) Тогда
ВидыРасчета.Добавить(СтрокаОтпуска.ВидРасчетаКомпенсации);
КонецЕсли;
КонецЦикла;
КонецЕсли;
УчетСреднегоЗаработка.УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ(
ЭтаФорма,
Объект.Сотрудник,
Объект.ДатаНачалаСобытия,
ВидыРасчета,
УстановитьЗначение);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПериодыПриостановкиОтпуска
&НаКлиенте
Процедура ИзменениеПериодаПриостановки(Элемент)
ИзменениеПериодаПриостановкиОтпускаНаСервере(Элемент = Элементы.ПериодыПриостановкиОтпускаДатаНачалаПериода,
Элементы.ПериодыПриостановкиОтпуска.ТекущаяСтрока);
ВыполнитьРасчетИПерезаполнениеНачислений();
ОбновитьРабочиеГодыОтпусков();
КонецПроцедуры
&НаКлиенте
Процедура ПериодыПриостановкиОтпускаДатаНачалаПериодаПриИзменении(Элемент)
ИзменениеПериодаПриостановки(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПериодыПриостановкиОтпускаДатаОкончанияПериодаПриИзменении(Элемент)
ИзменениеПериодаПриостановки(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ПериодыПриостановкиОтпускаПослеУдаления(Элемент)
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура ПериодыПриостановкиОтпускаПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграцииС1САрхивом(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
МодульОбменСАрхивомКлиент.ВыполнитьПодключаемуюКоманду(Команда, ЭтотОбъект, Объект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуИнтеграцииС1САрхивомНаСервере(Знач Параметры) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивом = ОбщегоНазначения.ОбщийМодуль("ОбменСАрхивом");
МодульОбменСАрхивом.ВыполнитьПодключаемуюКоманду(ЭтотОбъект, Параметры);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ИнтеграцияС1САрхивом_Нажатие(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1САрхивом") Тогда
МодульОбменСАрхивомКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбменСАрхивомКлиент");
МодульОбменСАрхивомКлиент.Нажатие(Элемент, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ОбновитьПодключаемыеКоманды(ЭтотОбъект);
КонецПроцедуры
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_Исправить(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.Исправить(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Сторнировать(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.Сторнировать(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправлению(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправлению(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправленному(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправленному(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПерейтиКСторно(Команда)
ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКСторно(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетОтменитьИсправление(Команда)
РасчетЗарплатыКлиент.ОтменитьИсправление(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачисленияПерерасчетРазрешеноРедактироватьСторно(Команда)
РасчетЗарплатыРасширенныйКлиент.НастроитьРедактированиеСторно(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьНачисления(Команда) Экспорт
ОчиститьСообщения();
ОбновитьРасчетДенежногоСодержания = ОбновитьРасчетДенежногоСодержания Или Не РасчетДенежногоСодержанияРедактировался;
Если РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма)) Тогда
ОценкаПроизводительностиКлиент.ЗамерВремени("РасчетДокументаОтпуск");
Если НеПерезаполнятьПриРасчете Тогда
РассчитатьНачисленияНаСервере(Истина, Ложь);
Иначе
РассчитатьНачисленияНаСервере(Истина);
КонецЕсли;
ЗарплатаКадрыРасширенныйКлиентСервер.СброситьФлагНеобходимостиВыполненияРасчета(ЭтаФорма);
НеобходимоПерезаполнитьНачисления = Ложь;
Иначе
ОчиститьРассчитанныеДанные();
ОбновитьДанныеДляРасчетаСреднего = Истина;
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСреднийЗаработок(Команда)
Оповещение = Новый ОписаниеОповещения("ОткрытьСреднийЗаработокЗавершение", ЭтотОбъект);
УчетСреднегоЗаработкаКлиент.ОткрытьФормуВводаСреднегоЗаработкаОбщий(ПараметрыРедактированияСреднегоЗаработка(), ЭтаФорма, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьДенежноеСодержание(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Оповещение = Новый ОписаниеОповещения("ОткрытьОткрытьДенежноеСодержаниеЗавершение", ЭтотОбъект);
СтруктураОбъекта = ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания();
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("РасчетДенежногоСодержанияКлиент");
Модуль.ОткрытьФормуВводаСохраняемогоДенежногоСодержания(СтруктураОбъекта, "Отпуск","ЕжегодныйОтпуск", ЭтаФорма, Оповещение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьМесячноеДенежноеСодержание(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Оповещение = Новый ОписаниеОповещения("ОткрытьОткрытьДенежноеСодержаниеЗавершение", ЭтотОбъект);
СтруктураОбъекта = ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания();
Модуль = ОбщегоНазначенияКлиент.ОбщийМодуль("РасчетДенежногоСодержанияКлиент");
Модуль.ОткрытьФормуВводаСохраняемогоДенежногоСодержания(СтруктураОбъекта, "Отпуск","ВыходноеПособие", ЭтаФорма, Оповещение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСреднийЗаработокЗавершение(РезультатРедактирования, ДополнительныеПараметры) Экспорт
Если РезультатРедактирования <> Неопределено Тогда
ОбновитьДанныеДляРасчетаСреднего = Ложь;
СкорректированСреднийЗаработок = Истина;
ПеренестиДанныеУчетаСреднегоЗаработкаВДокумент(РезультатРедактирования);
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОткрытьДенежноеСодержаниеЗавершение(РезультатРедактирования, ДополнительныеПараметры) Экспорт
Если РезультатРедактирования <> Неопределено Тогда
ОбновитьРасчетДенежногоСодержания = Ложь;
РасчетДенежногоСодержанияРедактировался = РасчетДенежногоСодержанияРедактировался(Объект.ДенежноеСодержание);
ЗаполнитьИнформациюЗаполненностиДанныхРасчетаДенежногоСодержания(ЭтаФорма);
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция РасчетДенежногоСодержанияРедактировался(ДенежноеСодержание)
Для каждого СтрокаТЧ Из ДенежноеСодержание Цикл
Если СтрокаТЧ.ФиксРасчет Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаКлиенте
Процедура ПодробнееОРасчетеУдержаний(Команда)
РасчетЗарплатыРасширенныйКлиент.ОткрытьФормуПодробнееОРасчетеУдержаний(Объект, "Отпуск", ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
КонецПроцедуры
&НаКлиенте
Процедура ПодробнееОРасчетеНДФЛ(Команда)
УчетНДФЛКлиент.ОткрытьФормуПодробнееОРасчетеНДФЛ(Объект.Организация, ЭтаФорма, Объект.ПериодРегистрации, Объект.Сотрудник,
Объект.ПланируемаяДатаВыплаты);
КонецПроцедуры
&НаСервере
Функция НДФЛПодробнееНаСервере(ФизическиеЛица) Экспорт
Если ТипЗнч(ФизическиеЛица) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
СписокФизическихЛиц = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ФизическиеЛица);
Иначе
СписокФизическихЛиц = ФизическиеЛица;
КонецЕсли;
ДокументОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ДокументОбъект);
Возврат УчетНДФЛФормы.РегистрНалоговогоУчетаПоНДФЛ(ДокументОбъект, Модифицированность, СписокФизическихЛиц, Объект.ПериодРегистрации);
КонецФункции
&НаКлиенте
Процедура ПерерасчетПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка, Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПодробно(Команда)
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйВызовСервера.СохранитьНастройкуРежимаОтображенияПодробно(Объект.Ссылка, Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОткрытьЗаявкуСотрудника(Команда)
ПоказатьЗначение(, Объект.ЗаявкаСотрудника);
КонецПроцедуры
&НаКлиенте
Процедура ОформитьОтпускСовместителю(Команда)
Совместитель = Неопределено;
ОрганизацияСовместителя = Неопределено;
Если ЭтотОбъект.ДругиеСотрудникиФизическогоЛица <> Неопределено И ЭтотОбъект.ДругиеСотрудникиФизическогоЛица.Количество() = 1 Тогда
ОрганизацияСовместителя = ЭтотОбъект.ДругиеСотрудникиФизическогоЛица[0].Организация;
Совместитель = ЭтотОбъект.ДругиеСотрудникиФизическогоЛица[0].Сотрудник;
КонецЕсли;
ОткрытьФормуНовогоОтпускаСовместителя(Совместитель, ОрганизацияСовместителя);
КонецПроцедуры
&НаКлиенте
Процедура ОформитьОтпускБезОплатыСовместителю(Команда)
ПериодОтсутствия = ПериодОтсутствия(Объект);
Если Не ЗначениеЗаполнено(ПериодОтсутствия.НачалоПериода)
Или Не ЗначениеЗаполнено(ПериодОтсутствия.ОкончаниеПериода) Тогда
Возврат;
КонецЕсли;
Совместитель = Неопределено;
ОрганизацияСовместителя = Неопределено;
Если ЭтотОбъект.ДругиеСотрудникиФизическогоЛица.Количество() = 1 Тогда
ОрганизацияСовместителя = ЭтотОбъект.ДругиеСотрудникиФизическогоЛица[0].Организация;
Совместитель = ЭтотОбъект.ДругиеСотрудникиФизическогоЛица[0].Сотрудник;
КонецЕсли;
ОткрытьФормуНовогоОтпускаБезОплатыСовместителя(ПериодОтсутствия.НачалоПериода, ПериодОтсутствия.ОкончаниеПериода, Совместитель, ОрганизацияСовместителя);
КонецПроцедуры
&НаКлиенте
Процедура КорректировкаВыплатыПодробно(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);
ПараметрыФормы.Вставить("МесяцНачисления", Объект.ПериодРегистрации);
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("ДанныеКорректировокВыплаты", ДанныеКорректировокВыплаты());
ПараметрыФормы.Вставить("СотрудникФизическоеЛицо", Объект.Сотрудник);
ОткрытьФорму("ОбщаяФорма.РедактированиеКорректировокВыплаты", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура КомандаПровестиИЗакрыть(Команда) Экспорт
ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
ЗаписатьНаКлиенте(Истина, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура КомандаПровести(Команда)
ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура КомандаЗаписать(Команда)
ПараметрыЗаписи = Новый Структура("РежимЗаписи", ?(Объект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
ЗаписатьНаКлиенте(Ложь, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Функция ПодготовитьСтруктуруОбъектаДляРасчетаДенежногоСодержания()
ОписаниеДокумента = ОписаниеДокумента(ЭтаФорма);
ОбъектСтруктура = Новый Структура;
ОбъектСтруктура.Вставить("Ссылка", Объект.Ссылка);
ОбъектСтруктура.Вставить("Сотрудник", Объект.Сотрудник);
ОбъектСтруктура.Вставить("Организация", Объект.Организация);
ОбъектСтруктура.Вставить("ПериодРегистрации", Объект.ПериодРегистрации);
ОбъектСтруктура.Вставить("ДатаНачалаСобытия", Объект.ДатаНачалаСобытия);
ОбъектСтруктура.Вставить("ДенежноеСодержание", ОбщегоНазначения.ТаблицаЗначенийВМассив(Объект.ДенежноеСодержание.Выгрузить()));
ОбъектСтруктура.Вставить("ДенежноеСодержаниеФактическиеНачисления", ОбщегоНазначения.ТаблицаЗначенийВМассив(Объект.ДенежноеСодержаниеФактическиеНачисления.Выгрузить()));
ОбъектСтруктура.Вставить("КоэффициентыРаспределенияДенежногоСодержания", ОбщегоНазначения.ТаблицаЗначенийВМассив(Объект.КоэффициентыРаспределенияДенежногоСодержания.Выгрузить()));
ОбъектСтруктура.Вставить("ПериодРасчетаСохраняемогоСодержанияНачало", Объект.ПериодРасчетаСреднегоЗаработкаНачало);
ОбъектСтруктура.Вставить("ПериодРасчетаСохраняемогоСодержанияОкончание", Объект.ПериодРасчетаСреднегоЗаработкаОкончание);
ОбъектСтруктура.Вставить("ФиксПериодРасчетаСохраняемогоСодержания", Объект.ФиксПериодРасчетаСреднегоЗаработка);
ОбъектСтруктура.Вставить("СохраняемоеДенежноеСодержаниеНеИндексируемое", Объект.СохраняемоеДенежноеСодержаниеНеИндексируемое);
ОбъектСтруктура.Вставить("СохраняемоеДенежноеСодержание", Объект.СохраняемоеДенежноеСодержание);
ОбъектСтруктура.Вставить("МесячноеДенежноеСодержание", Объект.МесячноеДенежноеСодержание);
ОбъектСтруктура.Вставить("НазначенияРасчетаДенежногоСодержания", ЭтаФорма.НазначенияРасчетаДенежногоСодержания);
ОбъектСтруктура.Вставить("УникальныйИдентификатор", ЭтаФорма.УникальныйИдентификатор);
ОбъектСтруктура.Вставить("ПериодРасчета", Объект[ОписаниеДокумента.МесяцНачисленияИмя]);
ОбъектСтруктура.Вставить("ДатаРасчетаДенежногоСодержания", Объект.ДатаРасчетаДенежногоСодержания);
ОбъектСтруктура.Вставить("ДолжностьЗамещаласьМенее12Месяцев", Ложь);
Возврат ОбъектСтруктура;
КонецФункции
&НаКлиенте
Процедура ВыборОтработанныхДней(Команда)
ВыбранныеДни = Новый Массив;
Для Каждого ОтработанныйДень Из Объект.ОтработанныеДни Цикл
Если ОтработанныйДень.Часы = 0 Тогда
ВыбранныеДни.Добавить(ОтработанныйДень.Дата);
КонецЕсли;
КонецЦикла;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ВыбранныеДни", ВыбранныеДни);
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("ИсправленныйДокумент", Объект.ИсправленныйДокумент);
ПараметрыФормы.Вставить("КоличествоДней", Объект.РасходДнейОтгула);
ПараметрыФормы.Вставить("НачалоОтгула", НачалоОтгула(ЭтаФорма));
ПараметрыФормы.Вставить("Сотрудник", Объект.Сотрудник);
ОткрытьФорму("ОбщаяФорма.ВыборОтработанныхДнейОтгулов", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ВыборОтработанныхЧасов(Команда)
ВыбранныеДни = Новый Массив;
Для Каждого ОтработанныйДень Из Объект.ОтработанныеДни Цикл
Если ОтработанныйДень.Часы <> 0 Тогда
ВыбранныеДни.Добавить(ОтработанныйДень.Дата);
КонецЕсли;
КонецЦикла;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ВыбранныеДни", ВыбранныеДни);
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("ИсправленныйДокумент", Объект.ИсправленныйДокумент);
ПараметрыФормы.Вставить("КоличествоЧасов", Объект.РасходЧасовОтгула);
ПараметрыФормы.Вставить("НачалоОтгула", НачалоОтгула(ЭтаФорма));
ПараметрыФормы.Вставить("Сотрудник", Объект.Сотрудник);
ПараметрыФормы.Вставить("ВыборОтработанныхЧасов", Истина);
ОткрытьФорму("ОбщаяФорма.ВыборОтработанныхДнейОтгулов", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_РазблокироватьФормуОбъекта(Команда)
БлокировкаИзмененияОбъектовКлиент.РазблокироватьФормуОбъекта(ЭтотОбъект, Объект.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(
Команда,
ЭтотОбъект,
Объект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОткрытьОтчетПоПроблемам(ЭлементИлиКоманда, НавигационнаяСсылка, СтандартнаяОбработка)
КонтрольВеденияУчетаКлиентБЗК.ОткрытьОтчетПоПроблемамОбъекта(ЭтотОбъект, Объект.Ссылка, СтандартнаяОбработка);
КонецПроцедуры
#Область ИсправлениеДокументов
&НаКлиенте
Процедура УстановитьПоляИсправленияНаКлиенте() Экспорт
УстановитьПоляИсправления(ЭтаФорма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПоляИсправления(Форма)
ИсправлениеДокументовЗарплатаКадрыКлиентСервер.УстановитьПоляИсправления(Форма);
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура РаспределитьЗависимыеРезультаты(ПараметрыДляРаспределения) Экспорт
Если ПараметрыДляРаспределения.РаспределятьЗависимыеТаблицы Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере(ПараметрыДляРаспределения);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция СтруктураОписанияТаблицДляРаспределенияРезультата(Форма)
ОписанияТаблиц = Новый Структура;
ОписанияТаблиц.Вставить("Начисления", ОписаниеТаблицыНачислений(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(Форма.РегистрацияНачисленийДоступна));
ОписанияТаблиц.Вставить("Удержания", ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Вставить("НДФЛ", ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Вставить("КорректировкиВыплаты", ОписаниеТаблицыКорректировкиВыплаты());
ОписанияТаблиц.Вставить("ПогашениеЗаймов", ОписаниеТаблицыПогашениеЗаймов());
Возврат ОписанияТаблиц;
КонецФункции
&НаСервере
Процедура ОтменитьПродлениеОсновногоОтпускаНаСервере()
Объект.КоличествоДнейОсновногоОтпуска = Объект.КоличествоДнейОсновногоОтпуска - КоличествоДнейПродленияОсновногоОтпуска;
КоличествоДнейПродленияОсновногоОтпуска = Неопределено;
КонецПроцедуры
&НаСервере
Процедура ОтменитьПродлениеДополнительногоОтпускаНаСервере()
ДопОтпуск = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(ИдентификаторПродленногоДопОтпуска);
ДопОтпуск.КоличествоДней = ДопОтпуск.КоличествоДней - КоличествоДнейПродленияДопОтпуска;
КоличествоДнейПродленияДопОтпуска = Неопределено;
КонецПроцедуры
&НаСервере
Процедура ПродлитьОсновнойОтпускНаСервере(КоличествоДнейПродления);
Объект.КоличествоДнейОсновногоОтпуска = Объект.КоличествоДнейОсновногоОтпуска + КоличествоДнейПродления;
КоличествоДнейПродленияОсновногоОтпуска = КоличествоДнейПродления;
ДатаОкончанияОтпускаДоПродления = Объект.ДатаОкончанияОсновногоОтпуска;
КонецПроцедуры
&НаСервере
Процедура ПродлитьДополнительныйОтпускНаСервере(ПродлениеДопОтпуска);
СтрокаДополнительногоОтпуска = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(
ПродлениеДопОтпуска.ИдентификаторСтроки);
СтрокаДополнительногоОтпуска.КоличествоДней = СтрокаДополнительногоОтпуска.КоличествоДней
+ ПродлениеДопОтпуска.КоличествоДнейПересечения;
КоличествоДнейПродленияДопОтпуска = ПродлениеДопОтпуска.КоличествоДнейПересечения;
ДатаОкончанияДопОтпускаДоПродления = СтрокаДополнительногоОтпуска.ДатаОкончания;
ДополнительныеОтпускаКоличествоДнейПриИзмененииНаСервере(ПродлениеДопОтпуска.ИдентификаторСтроки, Истина);
ДатаДопОтпускаПослеПродления = СтрокаДополнительногоОтпуска.ДатаОкончания;
ИдентификаторПродленногоДопОтпуска = ПродлениеДопОтпуска.ИдентификаторСтроки;
КонецПроцедуры
&НаСервере
Функция КоличествоДнейПересеченияОсновногоОтпуска(ДатаНачалаПриостановки, ДатаОкончанияПриостановки)
КоличествоДнейПересеченияОсновногоОтпуска = 0;
Если ОбщегоНазначенияБЗК.ИнтервалыПересекаются(ДатаНачалаПриостановки, ДатаОкончанияПриостановки,
Объект.ДатаНачалаОсновногоОтпуска, Объект.ДатаОкончанияОсновногоОтпуска) Тогда
ДатаОкончанияОтпуска = Макс(ДатаОкончанияПриостановки, Объект.ДатаОкончанияОсновногоОтпуска);
КоличествоДнейПересеченияОсновногоОтпуска = ПолучитьКоличествоДнейПересеченияСОтпуском(
Объект.ДатаНачалаОсновногоОтпуска, ДатаОкончанияОтпуска, ДатаНачалаПриостановки, ДатаОкончанияПриостановки);
КонецЕсли;
Возврат КоличествоДнейПересеченияОсновногоОтпуска;
КонецФункции
&НаСервере
Функция ПересечениеДопОтпуска(ДатаНачалаПриостановки, ДатаОкончанияПриостановки)
ПересечениеДопОтпуска = Новый Структура;
ПересечениеДопОтпуска.Вставить("КоличествоДнейПересечения", 0);
ВидыПродлеваемыхОтпусков = Справочники.ВидыОтпусков.ВидыПродлеваемыхОтпусков();
Для Каждого СтрокаДополнительногоОтпуска Из Объект.ДополнительныеОтпуска Цикл
Если ВидыПродлеваемыхОтпусков.Найти(СтрокаДополнительногоОтпуска.ВидОтпуска) = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ОбщегоНазначенияБЗК.ИнтервалыПересекаются(ДатаНачалаПриостановки, ДатаОкончанияПриостановки,
СтрокаДополнительногоОтпуска.ДатаНачала, СтрокаДополнительногоОтпуска.ДатаОкончания) Тогда
ДатаОкончанияДопОтпуска = Макс(ДатаОкончанияПриостановки, СтрокаДополнительногоОтпуска.ДатаОкончания);
ПересечениеДопОтпуска.Вставить("КоличествоДнейПересечения", ПолучитьКоличествоДнейПересеченияСОтпуском(
СтрокаДополнительногоОтпуска.ДатаНачала, ДатаОкончанияДопОтпуска,
ДатаНачалаПриостановки, ДатаОкончанияПриостановки, СтрокаДополнительногоОтпуска.ВидОтпуска));
ПересечениеДопОтпуска.Вставить("ИдентификаторСтроки", СтрокаДополнительногоОтпуска.ПолучитьИдентификатор());
Возврат ПересечениеДопОтпуска;
КонецЕсли;
КонецЦикла;
Возврат ПересечениеДопОтпуска;
КонецФункции
&НаСервере
Функция КоличествоДнейПриостановкиОтпуска(ОсновнойОтпуск = Истина)
Если Объект.ПериодыПриостановкиОтпуска.Количество() = 0 Тогда
Возврат 0;
КонецЕсли;
ДнейПриостановки = 0;
Если ОсновнойОтпуск Тогда
Для Каждого ПериодПриостановки Из Объект.ПериодыПриостановкиОтпуска Цикл
ДнейПриостановки = ДнейПриостановки + КоличествоДнейПересеченияОсновногоОтпуска(
ПериодПриостановки.ДатаНачалаПериода,
ПериодПриостановки.ДатаОкончанияПериода);
КонецЦикла;
Возврат ДнейПриостановки;
КонецЕсли;
Для Каждого ПериодПриостановки Из Объект.ПериодыПриостановкиОтпуска Цикл
КоличествоДнейПересеченияСДопОтпусками = 0;
ПересечениеДопОтпуска = ПересечениеДопОтпуска(
ПериодПриостановки.ДатаНачалаПериода,
ПериодПриостановки.ДатаОкончанияПериода);
Для Каждого Пересечение Из ПересечениеДопОтпуска Цикл
Если Пересечение.Ключ = "КоличествоДнейПересечения" Тогда
КоличествоДнейПересеченияСДопОтпусками = КоличествоДнейПересеченияСДопОтпусками + Пересечение.Значение;
КонецЕсли;
КонецЦикла;
ДнейПриостановки = ДнейПриостановки + КоличествоДнейПересеченияСДопОтпусками;
КонецЦикла;
Возврат ДнейПриостановки;
КонецФункции
&НаСервере
Функция ИсключаемыеРегистраторы()
Результат = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.Ссылка);
ПараметрыИсправленного = Неопределено;
Если ИсправлениеДокументовЗарплатаКадрыКлиентСервер.ЭтоИсправление(ЭтотОбъект, ПараметрыИсправленного) Тогда
Результат.Добавить(ПараметрыИсправленного.Ссылка);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат,
ИсправлениеДокументовЗарплатаКадры.ПолучитьДокументыЦепочкиИсправлений(ПараметрыИсправленного.Ссылка));
КонецЕсли;
Возврат Результат;
КонецФункции
#Область ИнициализацияФормы
&НаСервере
Процедура ПриПолученииДанныхНаСервере()
ИспользоватьСтатьиФинансирования = ПолучитьФункциональнуюОпцию("ИспользоватьСтатьиФинансированияЗарплата");
РасчетДенежногоСодержанияРедактировался = РасчетДенежногоСодержанияРедактировался(Объект.ДенежноеСодержание);
НовыйДокумент = Параметры.Ключ.Пустая();
НачатьИнициализациюФормы(НовыйДокумент);
ЗарплатаКадрыРасширенный.ИзменитьРеквизитыФормы(ЭтаФорма);
ЗавершитьИнициализациюФормы(НовыйДокумент);
ВариантУказанияБухучета = ?(Объект.БухучетУказываетсяРаспределением, 1, 0);
УстановитьВидимостьНастроекБухучета(ЭтаФорма);
ЗаполнитьПредставлениеРаспределенияБухучета();
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьСписокВыборкаВариантУказанияБухучета(Элементы.ВариантУказанияБухучета.СписокВыбора);
ОтражениеЗарплатыВБухучетеРасширенный.УстановитьВидимостьВариантУказанияБухучета(ЭтаФорма);
РеквизитыКДобавлению.Очистить();
РеквизитыКУдалению.Очистить();
УстановитьПредставлениеОтработанныхДней();
УстановитьПредставлениеСведенияДляОплатыОтпускаСФР();
КонецПроцедуры
&НаСервере
Процедура НачатьИнициализациюФормы(НовыйДокумент)
РасчетЗарплатыРасширенныйФормы.ПодготовитьФормуДляПредварительногоРасчетаНачислений(ЭтотОбъект);
РаботаВБюджетномУчреждении = ПолучитьФункциональнуюОпцию("РаботаВБюджетномУчреждении");
УстановитьДоступностьРегистрацииНачислений();
УстановитьПривилегированныйРежим(Истина);
ПрочитатьПостоянныеКадровыеДанныеСотрудника();
ОбновитьНадписьРасшифровкаОстаткаОтпуска(ЭтаФорма);
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьВидимостьОтсутствияПоДругимМестамРаботы();
ДополнитьФорму(Истина);
КонецПроцедуры
&НаСервере
Процедура ЗавершитьИнициализациюФормы(НовыйДокумент)
УстановитьПривилегированныйРежим(Истина);
ДополнитьФорму(Ложь);
ДополнитьФорму();
УчетРабочегоВремениРасширенныйФормы.ДобавитьУточнениеВидаВремени(ЭтаФорма, ВариантыСелектора(),
СостояниеПоВидуОтпуска(),
Объект.ВидРасчетаОсновногоОтпуска);
ЗаполнитьСсылкиНачислений(Истина);
ОбновитьИнформациюОПересеченииОтпускаСБольничным();
ДанныеВРеквизиты();
ОбновитьНачисленоУдержаноИтог();
ОбновитьПерерасчетИтог(ЭтаФорма);
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.Начисления, "ПериодДействия", "ПериодДействияСтрокой");
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДатеВТабличнойЧасти(Объект.НачисленияПерерасчет, "ПериодДействия", "ПериодДействияСтрокой");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриЗавершенииИнициализацииФормыДокументаОплатыТруда(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Объект.РассчитатьЗарплату);
КонецЕсли;
УстановитьСтраницуСреднегоЗаработка();
УстановитьВидимостьПерерасчетов();
УстановитьПараметрыВыбораВидаОтпуска(ЭтотОбъект);
УстановитьВидимостьОтпускаПострадавшимНаЧАЭС();
ЗаполнитьИнформациюЗаполненностиДанныхСреднего();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ(Ложь);
УстановитьВидимостьРасчетныхПолей();
РасчетЗарплатыРасширенныйФормы.ОбновитьФормуПоВариантуРасчетаСреднегоЗаработка(ЭтотОбъект);
УстановитьФункциональныеОпцииФормы();
УстановитьУсловноеОформлениеДополнительныхОтпусков();
ОбновитьДанныеДляРасчетаСреднего = Истина;
ОбновитьРасчетДенежногоСодержания = Истина;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура ДополнитьФорму(ОтложенноеИзменение = Неопределено)
Если ОтложенноеИзменение = Неопределено Тогда
РасчетЗарплатыРасширенныйФормы.ДокументыНачисленийДополнитьФормуРезультатыРаспределения(ЭтаФорма, ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна));
ЗаполнитьСтруктуруРеквизитовИСпособовРасчетаОтпуска();
ЗарплатаКадрыРасширенный.МногофункциональныеДокументыДобавитьЭлементыФормы(ЭтаФорма, НСтр("ru='Расчет утвердил'"), "РасчетчикГруппа", "ДокументРассчитан", "Рассчитал");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.СамообслуживаниеСотрудников") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("СамообслуживаниеСотрудников");
Модуль.ГруппаЗаявкаСотрудникаДополнитьФорму(ЭтаФорма);
КонецЕсли;
УстановитьВидимостьУдержаний();
Иначе
Если ОтложенноеИзменение Тогда
ДобавлятьЭлементыФормы = Ложь;
ДобавлятьРеквизитыФормы = Истина;
Иначе
ДобавлятьЭлементыФормы = Истина;
ДобавлятьРеквизитыФормы = Ложь;
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), "Начисления", , РегистрацияНачисленийДоступна,, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение, Объект.Ссылка);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна), "Начисления", , РегистрацияНачисленийДоступна,, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение, Объект.Ссылка);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтаФорма, ОписаниеТаблицыПерерасчетовНулевыеСторно(), "Начисления", , РегистрацияНачисленийДоступна,, Ложь, ДобавлятьРеквизитыФормы, ОтложенноеИзменение, Объект.Ссылка);
РасчетЗарплатыРасширенныйФормы.ДокументыВыполненияНачисленийДополнитьФорму(
ЭтаФорма, ОписаниеТаблицыУдержаний(), "Удержания", , Ложь,, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение, Объект.Ссылка);
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДополнитьФорму(
ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(), ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение);
ДополнительныеПараметры = Новый Структура(
"КонтролируемыеПоля,
|ДобавлятьЭлементыФормы,
|ДобавлятьРеквизитыФормы,
|ОтложенноеИзменение");
ДополнительныеПараметры.ДобавлятьЭлементыФормы = ДобавлятьЭлементыФормы;
ДополнительныеПараметры.ДобавлятьРеквизитыФормы = ДобавлятьРеквизитыФормы;
ДополнительныеПараметры.ОтложенноеИзменение = ОтложенноеИзменение;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриДополненииФормыДокументаОтпуск(ЭтаФорма, ДополнительныеПараметры);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Модуль.ДокументыВыполненияНачисленийДополнитьФорму(ЭтаФорма, ОписаниеТаблицыСохраняемоеДенежноеСодержание(), "Начисления", , Ложь,, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение, Объект.Ссылка);
КонецЕсли;
ИсправлениеДокументовЗарплатаКадры.ГруппаИсправлениеДополнитьФорму(
ЭтаФорма, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение);
РасчетЗарплатыРасширенныйФормы.ПорядокВыплатыЗарплатыДополнитьФорму(
ЭтаФорма,, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ЦепочкиДокументов") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ЦепочкиДокументовФормы");
Модуль.ДополнитьФормуДокументаЭлементамиЗамещения(ЭтаФорма, ДобавлятьЭлементыФормы, ДобавлятьРеквизитыФормы, ОтложенноеИзменение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаСервере
Функция ПараметрыРедактированияСреднегоЗаработка()
ПараметрыРедактирования = УчетСреднегоЗаработкаКлиентСервер.ПараметрыРедактированияОбщегоСреднегоЗаработкаПоДокументу();
ПараметрыРедактирования.ДокументСсылка = Объект.Ссылка;
ПараметрыРедактирования.Сотрудник = Объект.Сотрудник;
ПараметрыРедактирования.Организация = Объект.Организация;
ПараметрыРедактирования.ДатаНачалаСобытия = Объект.ДатаНачалаСобытия;
ПараметрыРедактирования.Начисление = Объект.ВидРасчетаОсновногоОтпуска;
ПараметрыРедактирования.НачалоПериодаРасчета = Объект.ПериодРасчетаСреднегоЗаработкаНачало;
ПараметрыРедактирования.ОкончаниеПериодаРасчета = Объект.ПериодРасчетаСреднегоЗаработкаОкончание;
ПараметрыРедактирования.ФиксПериодРасчета = Объект.ФиксПериодРасчетаСреднегоЗаработка;
УчетСреднегоЗаработка.ЗаполнитьТаблицыДанныхСреднегоЗаработкаПоДокументу(Объект, ПараметрыРедактирования);
СпособыРасчета = Новый Массив;
Для Каждого СпособРасчета Из СпособыРасчетаСреднегоЗаработка Цикл
СпособыРасчета.Добавить(СпособРасчета.Значение);
КонецЦикла;
ПараметрыРедактирования.СпособыРасчета = СпособыРасчета;
Если ОтпускНачинаетсяВСледующемМесяце(НачальныйПериодРасчетаЗарплаты().ДатаНачала) Тогда
ДанныеДляПроведения = ДанныеДокументаДляПроведения();
ДанныеДляПроведения.МенеджерВременныхТаблиц = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПослеПодготовкиДанныхДляПроведенияДокументаРасчетаЗарплаты(ДанныеДляПроведения);
КонецЕсли;
ПараметрыРедактирования.ДокументВладелецДанныеАдрес = ПоместитьВоВременноеХранилище(ДанныеДляПроведения, Новый УникальныйИдентификатор);
КонецЕсли;
Возврат ПараметрыРедактирования;
КонецФункции
&НаСервере
Процедура УстановитьФункциональныеОпцииФормы()
ПараметрыФО = Новый Структура("Организация, Период", Объект.Организация, НачалоДня(Объект.ПериодРегистрации));
УстановитьПараметрыФункциональныхОпцийФормы(ПараметрыФО);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьРасчетИПерезаполнениеНачислений(ПерезаполнитьНачисления = Истина)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Если РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Ложь) Тогда
Если ПерезаполнитьНачисления Тогда
ПодключитьОбработчикОжиданияАвтоматическогоРасчета("ПерезаполнитьИРассчитатьНачисленияНаКлиенте");
НеобходимоПерезаполнитьНачисления = Истина;
ИначеЕсли Не НеобходимоПерезаполнитьНачисления Тогда
ПодключитьОбработчикОжиданияАвтоматическогоРасчета("РассчитатьНачисленияНаКлиенте");
КонецЕсли;
Иначе
ОчиститьРассчитанныеДанные();
ПерезаполнятьСреднийЗаработок = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьОбработчикОжиданияАвтоматическогоРасчета(ИмяОбработчика)
ЗарплатаКадрыРасширенныйКлиент.ПодключитьОбработчикОжиданияАвтоматическогоРасчета(ЭтотОбъект, РегистрацияНачисленийДоступна, ИмяОбработчика, , "ОчиститьРассчитанныеДанныеНаКлиенте");
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьНачисленияНаКлиенте()
ВыполнитьРасчетНачисленийНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьРасчетНачисленийНаСервере()
Если РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Ложь) Тогда
ВремяНачалаЗамера = ОценкаПроизводительности.НачатьЗамерВремени();
РассчитатьНачисленияНаСервере(,Ложь);
ЗарплатаКадрыРасширенныйКлиентСервер.СброситьФлагНеобходимостиВыполненияРасчета(ЭтаФорма);
ОбновитьНачисленоУдержаноИтог();
ОценкаПроизводительности.ЗакончитьЗамерВремени("РасчетДокументаОтпуск", ВремяНачалаЗамера);
Иначе
ОчиститьРассчитанныеДанные();
ОбновитьДанныеДляРасчетаСреднего = Истина;
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
КонецЕсли;
РассчитатьЗарплатуПриИзмененииНаСервере();
СкорректированСреднийЗаработок = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьИРассчитатьНачисленияНаКлиенте()
ВыполнитьПерезаполнениеИРасчетНачисленийНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьПерезаполнениеИРасчетНачисленийНаСервере()
Если РасчетЗарплатыРасширенныйКлиентСервер.ФормаДокументаГотоваДляРасчетаЗарплаты(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Ложь) Тогда
ВремяНачалаЗамера = ОценкаПроизводительности.НачатьЗамерВремени();
РассчитатьНачисленияНаСервере();
ЗарплатаКадрыРасширенныйКлиентСервер.СброситьФлагНеобходимостиВыполненияРасчета(ЭтаФорма);
НеобходимоПерезаполнитьНачисления = Ложь;
ОценкаПроизводительности.ЗакончитьЗамерВремени("РасчетДокументаОтпуск", ВремяНачалаЗамера);
Иначе
ОчиститьРассчитанныеДанные();
ОбновитьДанныеДляРасчетаСреднего = Истина;
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
КонецЕсли;
РассчитатьЗарплатуПриИзмененииНаСервере();
СкорректированСреднийЗаработок = Ложь;
ЗаполнитьИнформациюЗаполненностиДанныхСреднего();
КонецПроцедуры
&НаСервере
Процедура РассчитатьНачисленияНаСервере(ВыводитьСообщения = Ложь, ПерезаполнитьНачисления = Истина)
НеПерезаполнятьПриРасчете = Ложь;
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если ПерезаполнитьНачисления Тогда
ЗаполнитьСсылкиНачислений(Ложь);
ОбновитьИнформациюОПересеченииОтпускаСБольничным();
КонецЕсли;
Документ = РеквизитФормыВЗначение("Объект");
Если Не Документ.ДокументГотовКРасчету(ВыводитьСообщения) Тогда
ОчиститьРассчитанныеДанные();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
Возврат;
КонецЕсли;
ПерезаполнитьНачисленияСотрудника(, , ПерезаполнитьНачисления);
УстановитьСвойствоДокументРассчитан();
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
УстановитьСтраницуСреднегоЗаработка();
КонецПроцедуры
#Область ЗаполнитьВидыРасчетовПоВидамОтпусков
&НаСервере
Процедура ЗаполнитьСсылкиНачислений(ПервичнаяИнициализацияФормы)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
ЗаполнитьВидыРасчетовОсновногоОтпуска(ПервичнаяИнициализацияФормы);
ЗаполнитьВидыРасчетовДополнительныхОтпусков(ПервичнаяИнициализацияФормы);
ЗаполнитьВидыРасчетовОтгула();
ЗаполнитьВидыРасчетовЕдиновременнойВыплаты(ПервичнаяИнициализацияФормы);
ЗаполнитьВидыРасчетовМатериальнойПомощи(ПервичнаяИнициализацияФормы);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВидыРасчетовОсновногоОтпуска(ПервичнаяИнициализацияФормы = Ложь)
ДопПараметры = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(Объект, "ВидРасчетаОсновногоОтпуска");
УчетРабочегоВремениРасширенныйФормы.ДобавитьУточнениеВремениВОтборНачислений(ДопПараметры, ЭтаФорма);
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(ЭтотОбъект, "ВидРасчетаОсновногоОтпуска", ДопПараметры, ПервичнаяИнициализацияФормы);
УчетРабочегоВремениРасширенныйФормы.НастроитьУточнениеВидаВремени(ЭтаФорма, Объект.ВидРасчетаОсновногоОтпуска);
ДопПараметры = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(Объект, "ВидРасчетаКомпенсацииОсновногоОтпуска");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(ЭтотОбъект, "ВидРасчетаКомпенсацииОсновногоОтпуска", ДопПараметры, ПервичнаяИнициализацияФормы);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВидыРасчетовДополнительныхОтпусков(ПервичнаяИнициализацияФормы)
Если Не Объект.ПредоставитьДополнительныйОтпуск Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметрыВыбора = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(Объект, "ДополнительныеОтпуска.ВидРасчета");
ОбщегоНазначенияБЗК.УстановитьПараметрыВыбора(Элементы.ДополнительныеОтпускаВидРасчета, ДополнительныеПараметрыВыбора);
ДополнительныеПараметрыВыбора = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(Объект, "ДополнительныеОтпуска.ВидРасчетаКомпенсации");
Если ДополнительныеПараметрыВыбора["ОтборНачисленийГосслужбы"] <> Неопределено Тогда
ОтборНачисленийГосслужбы = ДополнительныеПараметрыВыбора["ОтборНачисленийГосслужбы"];
ДополнительныеПараметрыВыбора.Удалить("ОтборНачисленийГосслужбы");
КонецЕсли;
ОбщегоНазначенияБЗК.УстановитьПараметрыВыбора(Элементы.ДополнительныеОтпускаВидРасчетаКомпенсации, ДополнительныеПараметрыВыбора);
Если Не ПервичнаяИнициализацияФормы Тогда
КатегорияОтпуск = Документы.Отпуск.КатегорияНачисленияОтпуск(Объект);
КатегорияКомпенсация = Документы.Отпуск.КатегорияНачисленияКомпенсацияОтпуска(Объект);
КатегорияОтпускБезОплаты = Документы.Отпуск.КатегорияНачисленияОтпускБезОплаты();
ПараметрыВыбораОтпуск = ОбщегоНазначенияБЗК.ПараметрыВыбораВСтруктуру(ЭтотОбъект, Элементы.ДополнительныеОтпускаВидРасчета);
ШаблонОтбораОтпуск = Новый ФиксированнаяСтруктура(ПараметрыВыбораОтпуск.Отбор);
ПараметрыВыбораКомпенсация = ОбщегоНазначенияБЗК.ПараметрыВыбораВСтруктуру(ЭтотОбъект, Элементы.ДополнительныеОтпускаВидРасчетаКомпенсации);
ШаблонОтбораКомпенсация = Новый ФиксированнаяСтруктура(ПараметрыВыбораКомпенсация.Отбор);
ВидыОтпусковБезОплаты = Справочники.ВидыОтпусков.ВидыОтпусковБезОплаты();
Для Каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
Если ВидыОтпусковБезОплаты.Найти(ДополнительныйОтпуск.ВидОтпуска) <> Неопределено Тогда
КатегорияВидаОтпуска = КатегорияОтпускБезОплаты;
ИначеЕсли ДополнительныйОтпуск.ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускНаСанаторноКурортноеЛечение") Тогда
Если Объект.РасчетДенежногоСодержания Тогда
КатегорияВидаОтпуска = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ДенежноеСодержаниеНаПериодОтпускаНаСанаторноКурортноеЛечение;
Иначе
КатегорияВидаОтпуска = Перечисления.КатегорииНачисленийИНеоплаченногоВремени.ОтпускНаСанаторноКурортноеЛечение;
КонецЕсли;
Иначе
КатегорияВидаОтпуска = КатегорияОтпуск;
КонецЕсли;
Если НеобходимоЗаполнитьВидРасчета(ДополнительныйОтпуск.ВидРасчета, КатегорияВидаОтпуска, ДополнительныйОтпуск.КоличествоДней) Тогда
ОтборОтпуск = Новый Структура(ШаблонОтбораОтпуск);
ОтборОтпуск.Вставить("КатегорияНачисленияИлиНеоплаченногоВремени", КатегорияВидаОтпуска);
ОтборОтпуск.Вставить("ВидОтпуска", ДополнительныйОтпуск.ВидОтпуска);
ДополнительныйОтпуск.ВидРасчета = ПланыВидовРасчета.Начисления.НачислениеПоУмолчанию(ОтборОтпуск, "СообщатьОбОшибке");
КонецЕсли;
Если НеобходимоЗаполнитьВидРасчета(ДополнительныйОтпуск.ВидРасчетаКомпенсации, КатегорияКомпенсация, ДополнительныйОтпуск.КоличествоДнейКомпенсации) Тогда
ОтборКомпенсация = Новый Структура(ШаблонОтбораКомпенсация);
ОтборКомпенсация.Вставить("КатегорияНачисленияИлиНеоплаченногоВремени", КатегорияКомпенсация);
ОтборКомпенсация.Вставить("ВидОтпуска", ДополнительныйОтпуск.ВидОтпуска);
Если ЗначениеЗаполнено(ОтборНачисленийГосслужбы) Тогда
ОтборКомпенсация.Вставить("Ссылка",ОтборНачисленийГосслужбы);
КонецЕсли;
ДополнительныйОтпуск.ВидРасчетаКомпенсации = ПланыВидовРасчета.Начисления.НачислениеПоУмолчанию(ОтборКомпенсация, "СообщатьОбОшибке");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВидыРасчетовОтгула()
Если Не Объект.ПредоставитьОтгул Или ЗначениеЗаполнено(Объект.ВидРасчетаОтгул) Тогда
Возврат;
КонецЕсли;
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(ЭтотОбъект, "ВидРасчетаОтгул", , , , Истина);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВидыРасчетовЕдиновременнойВыплаты(ПервичнаяИнициализацияФормы)
Если Не Объект.ПредоставитьЕдиновременнуюВыплатуКОтпуску Тогда
Возврат;
КонецЕсли;
ДопПараметры = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(Объект, "ВидРасчетаЕдиновременнойВыплатыКОтпуску");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(ЭтотОбъект, "ВидРасчетаЕдиновременнойВыплатыКОтпуску", ДопПараметры, ПервичнаяИнициализацияФормы);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВидыРасчетовМатериальнойПомощи(ПервичнаяИнициализацияФормы)
Если Не Объект.ПредоставитьМатериальнуюПомощьПриОтпуске Тогда
Возврат;
КонецЕсли;
ДопПараметры = Документы.Отпуск.ДополнительныеПараметрыВыбораНачислений(Объект, "ВидРасчетаМатериальнойПомощиПриОтпуске");
ПланыВидовРасчета.Начисления.УстановитьНачислениеПоУмолчаниюВФорме(ЭтотОбъект, "ВидРасчетаМатериальнойПомощиПриОтпуске", ДопПараметры, ПервичнаяИнициализацияФормы);
КонецПроцедуры
&НаСервере
Функция НеобходимоЗаполнитьВидРасчета(ТекущийВидРасчета, ЗаполняемаяКатегория, КоличествоОплачиваемыхДней = Неопределено)
ТекущаяКатегория = ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(ТекущийВидРасчета).КатегорияНачисленияИлиНеоплаченногоВремени;
КатегорияИзменилась = ТекущаяКатегория <> ЗаполняемаяКатегория;
Возврат ?(КоличествоОплачиваемыхДней = Неопределено, Истина, КоличествоОплачиваемыхДней > 0) И (Не ЗначениеЗаполнено(ТекущийВидРасчета) Или КатегорияИзменилась);
КонецФункции
&НаСервере
Функция ПолучитьКоличествоДнейПересеченияСОтпуском(ДатаНачалаОтпуска, ДатаОкончанияОтпуска,
ДатаНачалаПериода, ДатаОкончанияПериода, ВидОтпуска = Неопределено);
Если ВидОтпуска = Неопределено Тогда
ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
КонецЕсли;
ПериодПересечения = ОбщегоНазначенияБЗК.ПериодПересеченияДвухИнтервалов(ДатаНачалаПериода, ДатаОкончанияПериода,
ДатаНачалаОтпуска, ДатаОкончанияОтпуска);
Если ПериодПересечения = Неопределено Тогда
Возврат 0;
КонецЕсли;
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
КоличествоДнейПересечения = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(Объект.Сотрудник,
ПериодПересечения.ДатаНачала, ПериодПересечения.ДатаОкончания,
ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
Возврат КоличествоДнейПересечения;
КонецФункции
#КонецОбласти
&НаКлиенте
Процедура РассчитатьСотрудника(Сотрудник, ОписаниеТаблицы) Экспорт
РассчитатьДанныеФормы(Сотрудник, ОписаниеТаблицы);
КонецПроцедуры
&НаСервере
Процедура РассчитатьДанныеФормы(Сотрудники, ОписаниеТаблицы = Неопределено)
ПериодРасчетаЗарплаты = ПериодРасчетаЗарплатыДоНачалаОтпуска();
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьИсточникиИзмененийМенеджераРасчета(МенеджерРасчета, ИзмененныеДанные);
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
МенеджерРасчета.РассчитатьЗарплату();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьНачисленияСотрудника(Сотрудник = Неопределено, СохранятьИсправления = Истина, ПерезаполнитьНачисления = Истина) Экспорт
Документ = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(Документ);
ПараметрыРасчета = Документ.ПараметрыРасчета();
ПараметрыРасчета.ПерезаполнитьНачисления = ПерезаполнитьНачисления;
ПараметрыРасчета.СохранятьИсправления = Истина;
ПараметрыРасчета.СкорректированСреднийЗаработок = СкорректированСреднийЗаработок;
ПараметрыРасчета.ОбновитьДанныеДляРасчетаСреднего = ОбновитьДанныеДляРасчетаСреднего;
ПараметрыРасчета.ОбновитьРасчетДенежногоСодержания = ОбновитьРасчетДенежногоСодержания;
Документ.Рассчитать(ПараметрыРасчета);
ЗначениеВРеквизитФормы(Документ, "Объект");
ДанныеВРеквизиты();
ОбновитьДанныеФормыПослеРасчета();
Если ОбновитьДанныеДляРасчетаСреднего Или ОбновитьРасчетДенежногоСодержания Тогда
ЗаполнениеВыполнено = Истина;
ОбновитьИнформациюОЗаполненностиСохраняемогоЗаработка();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты, СохранятьИсправления = Истина)
МенеджерРасчета.ИсключаемыйРегистратор = Объект.Ссылка;
ИсправлениеДокументовРасчетЗарплаты.НастроитьМенеджерРасчета(МенеджерРасчета, ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриИнициализацииМенеджераРасчетаДляЗаполненияДокументаРасчетаЗарплаты(МенеджерРасчета);
КонецЕсли;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьКорректировкиВыплаты = Истина;
МенеджерРасчета.НастройкиРасчета.РассчитыватьЗаймы = ПериодРасчетаЗарплаты <> Неопределено;
МенеджерРасчета.НастройкиРасчета.РассчитыватьУдержания = ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты);
МенеджерРасчета.НастройкиРасчета.СохранятьИсправления = СохранятьИсправления;
МенеджерРасчета.НастройкиРасчета.РасчетЗарплаты = ПериодРасчетаЗарплаты <> Неопределено;
МенеджерРасчета.НастройкиНДФЛ.Сотрудники = Объект.Сотрудник;
МенеджерРасчета.НастройкиНДФЛ.ДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
МенеджерРасчета.НастройкиНДФЛ.ОкончательныйРасчет = Ложь;
МенеджерРасчета.НастройкиНДФЛ.ДоходПолученНаТерриторииРФ = Объект.ДоходПолученНаТерриторииРФ;
ЗасчитыватьДанныеАвансов = Объект.РассчитатьЗарплату;
Если ЗасчитыватьДанныеАвансов
И ИсправлениеДокументовРасчетЗарплатыКлиентСервер.ИсправлениеВТекущемПериоде(ЭтаФорма)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ИсправленныйДокумент, "РассчитатьЗарплату") Тогда
ЗасчитыватьДанныеАвансов = Ложь
КонецЕсли;
МенеджерРасчета.НастройкиНДФЛ.ЗасчитыватьДанныеАвансов = ЗасчитыватьДанныеАвансов;
МенеджерРасчета.НастройкиУдержаний.РассчитыватьТолькоПоТекущемуДокументу = Истина;
Если ПериодРасчетаЗарплаты <> Неопределено Тогда
МенеджерРасчета.НастройкиЗаймов.Сотрудники = Объект.Сотрудник;
МенеджерРасчета.НастройкиЗаймов.ДатаПогашения = ПериодРасчетаЗарплаты.ДатаОкончания;
КонецЕсли;
МенеджерРасчета.НастройкиБухучета.НастройкиБухучетаДокумента = Документы.Отпуск.ДанныеДляБухучетаЗарплатыПервичныхДокументов(Объект)["ТаблицаБухучетЗарплаты"];
МенеджерРасчета.ДобавитьДатуНачалаСобытия(Объект.Сотрудник, Объект.ДатаНачалаСобытия);
КонецПроцедуры
&НаСервере
Процедура РасчетЗарплатыВДанныеФормы(ДанныеМенеджераРасчета)
РезультатРасчетаНачисленийВДанныеФормы(ДанныеМенеджераРасчета);
ТаблицыУдержаний = РасчетЗарплатыРасширенныйФормы.ТаблицыУдержанийФормы();
ТаблицыУдержаний.Удержания = Объект.Удержания;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыУдержанияВДанныеФормы(ТаблицыУдержаний, ДанныеМенеджераРасчета.Удержания);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНДФЛВДанныеФормы(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, ДанныеМенеджераРасчета.НДФЛ);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыПогашениеЗаймовВДанныеФормы(Объект.ПогашениеЗаймов, ДанныеМенеджераРасчета.ПогашениеЗаймов);
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыКорректировкиВыплатыВДанныеФормы(Объект.КорректировкиВыплаты, ДанныеМенеджераРасчета.КорректировкиВыплаты);
ОбновитьНачисленоУдержаноИтог();
ОбновитьПерерасчетИтог(ЭтаФорма);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
УстановитьВидимостьПерерасчетов();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
УстановитьСвойствоДокументРассчитан();
КонецПроцедуры
&НаСервере
Процедура РезультатРасчетаНачисленийВДанныеФормы(ДанныеМенеджераРасчета)
ТаблицыНачислений = РасчетЗарплатыРасширенныйФормы.ТаблицыНачисленийФормы();
ТаблицыНачислений.Начисления = Объект.Начисления;
ТаблицыНачислений.НачисленияПерерасчет = Объект.НачисленияПерерасчет;
ТаблицыНачислений.УправленческиеНачисления = Объект.УправленческиеНачисления;
ТаблицыНачислений.НачисленияПерерасчетНулевыеСторно = Объект.НачисленияПерерасчетНулевыеСторно;
РасчетЗарплатыРасширенныйФормы.РасчетЗарплатыНачисленияВДанныеФормы(ТаблицыНачислений, ДанныеМенеджераРасчета.Начисления, Объект.Организация);
РасчетЗарплатыРасширенныйФормы.СортироватьПерерасчеты(Объект.НачисленияПерерасчет);
КонецПроцедуры
&НаСервере
Процедура ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета)
ДокументыРазовыхНачисленийФормы.ПередПомещениемДанныхФормыВМенеджерРасчета(Объект);
РасчетЗарплатыРасширенныйФормы.НачисленияВДанныеМенеджераРасчета(Объект.Начисления, МенеджерРасчета, Объект.Организация);
РасчетЗарплатыРасширенныйФормы.НачисленияПерерасчетСНулевымиСторноВДанныеМенеджераРасчета(Объект.НачисленияПерерасчет, Объект.НачисленияПерерасчетНулевыеСторно, МенеджерРасчета, Объект.Организация);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.УправленческиеНачисленияВДанныеМенеджераРасчета(Объект.УправленческиеНачисления, МенеджерРасчета);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.УдержанияВДанныеМенеджераРасчета(Объект.Удержания, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.КорректировкиВыплатыВДанныеМенеджераРасчета(Объект.КорректировкиВыплаты, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.ПогашениеЗаймовВДанныеМенеджераРасчета(Объект.ПогашениеЗаймов, МенеджерРасчета);
РасчетЗарплатыРасширенныйФормы.НДФЛВДанныеМенеджераРасчета(Объект.НДФЛ, Объект.ПримененныеВычетыНаДетейИИмущественные, МенеджерРасчета);
МенеджерРасчета.НастройкиБухучета.КоэффициентыСреднегоЗаработкаДокумента = УчетСреднегоЗаработка.КоэффициентыРаспределенияСреднегоЗаработкаДокумента(
Объект, ОписаниеДокумента(ЭтаФорма), ЭтоСреднеЧасовойЗаработок());
МенеджерРасчета.НастройкиБухучета.КоэффициентыРаспределенияДенежногоСодержания = Объект.КоэффициентыРаспределенияДенежногоСодержания.Выгрузить();
КонецПроцедуры
&НаСервере
Функция ПериодРасчетаЗарплатыДоНачалаОтпуска(НачалоПериода = Неопределено)
Возврат Документы.Отпуск.ПериодРасчетаЗарплатыДоНачалаОтпуска(Объект, НачалоПериода);
КонецФункции
&НаСервере
Процедура ПеренестиДанныеУчетаСреднегоЗаработкаВДокумент(РезультатРедактирования)
Объект.СреднийЗаработокОбщий.Очистить();
Объект.ОтработанноеВремяДляСреднегоОбщий.Очистить();
Объект.ДанныеОбИндексации.Очистить();
УчетСреднегоЗаработка.ЗаполнитьДанныеУчетаОбщегоСреднегоЗаработка(
Объект.СреднийЗаработокОбщий,
Объект.ОтработанноеВремяДляСреднегоОбщий,
Объект.ДанныеОбИндексации,
РезультатРедактирования,
Модифицированность);
Объект.ПериодРасчетаСреднегоЗаработкаНачало = РезультатРедактирования.НачалоПериодаРасчета;
Объект.ПериодРасчетаСреднегоЗаработкаОкончание = РезультатРедактирования.ОкончаниеПериодаРасчета;
Объект.ФиксПериодРасчетаСреднегоЗаработка = РезультатРедактирования.ФиксПериодРасчета;
ЗаполнитьИнформациюЗаполненностиДанныхСреднего();
Для Каждого КлючИЗначение Из СпособыРасчетаСреднегоЗаработка Цикл
ИмяРеквизита = КлючИЗначение.Ключ;
СпособРасчета = КлючИЗначение.Значение;
Объект[ИмяРеквизита] = РезультатРедактирования.СреднийЗаработок[СпособРасчета];
Если РезультатРедактирования.Свойство("ЧастичнаяИндексация") Тогда
ЗначенияПоказателей = РезультатРедактирования.ЧастичнаяИндексация.Получить(СпособРасчета);
ИмяРеквизитаИндексируемый = СтрЗаменить(ИмяРеквизита, "СреднийЗаработок", "СреднийЗаработокИндексируемый");
ИмяРеквизитаНеиндексируемый = СтрЗаменить(ИмяРеквизита, "СреднийЗаработок", "СреднийЗаработокНеиндексируемый");
Объект[ИмяРеквизитаИндексируемый] = ЗначенияПоказателей.ИндексируемыйЗаработок;
Объект[ИмяРеквизитаНеиндексируемый] = ЗначенияПоказателей.НеиндексируемыйЗаработок;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОчиститьДанныеСреднегоПриОтменеРасчетаЗарплаты()
Если Объект.РасчетДенежногоСодержания
Или Объект.РассчитатьЗарплату
Или Не ОбновитьДанныеДляРасчетаСреднего Тогда
Возврат;
КонецЕсли;
НачалоПериодаРасчета = НачальныйПериодРасчетаЗарплаты().ДатаНачала;
ТаблицыСреднего = Новый Массив;
ТаблицыСреднего.Добавить(Объект.СреднийЗаработокОбщий);
ТаблицыСреднего.Добавить(Объект.ОтработанноеВремяДляСреднегоОбщий);
Для Каждого ТаблицаСреднего Из ТаблицыСреднего Цикл
НайденныеСтроки = ТаблицаСреднего.НайтиСтроки(Новый Структура("Период", НачалоПериодаРасчета));
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ТаблицаСреднего.Удалить(НайденнаяСтрока);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьДатуНачалаСобытия()
Документы.Отпуск.УстановитьДатуНачалаСобытия(Объект);
ОбновитьВариантРасчета();
РасчетЗарплатыРасширенныйФормы.ОбновитьФормуПоВариантуРасчетаСреднегоЗаработка(ЭтотОбъект);
ЗаполнитьСсылкиНачислений(Ложь);
ОбновитьИнформациюОПересеченииОтпускаСБольничным();
УстановитьОтпускВРабочихДняхПоДоговору();
РассчитатьОстаткиОтпусков();
УстановитьПривилегированныйРежим(Истина);
ЗаполнитьПериодРасчетаСреднегоЗаработка();
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОчиститьРассчитанныеДанные();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Функция РасчетнаяПланируемаяДатаВыплаты()
ПланируемаяДатаВыплатыОтпуска = Неопределено;
Если Объект.ПорядокВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Межрасчет Тогда
Если ЗначениеЗаполнено(Объект.ИсправленныйДокумент) Тогда
ПланируемаяДатаВыплатыОтпуска = НачалоДня(ТекущаяДатаСеанса() + 86400);
Иначе
ПланируемаяДатаВыплатыОтпуска = РасчетЗарплатыРасширенный.ДатаСобытияСУчетомНерабочихДней(
Документы.Отпуск.ПредварительнаяДатаОплатыОтпуска(Объект),
Объект.Организация, Объект.Сотрудник);
КонецЕсли;
Если ПланируемаяДатаВыплатыОтпуска <> Неопределено Тогда
Если ПланируемаяДатаВыплатыОтпуска < НачалоДня(Объект.Дата) Тогда
ПланируемаяДатаВыплатыОтпуска = НачалоДня(Объект.Дата);
КонецЕсли;
КонецЕсли;
Иначе
ПараметрыПолученияДатыВыплаты = РасчетЗарплатыРасширенный.ПараметрыПолученияПланируемойДатыВыплатыЗарплаты();
ПараметрыПолученияДатыВыплаты.МесяцНачисления = Объект.ПериодРегистрации;
ПараметрыПолученияДатыВыплаты.Настройки = ЭтотОбъект.НастройкиДатВыплаты;
ПараметрыПолученияДатыВыплаты.ПорядокВыплаты = Объект.ПорядокВыплаты;
ПараметрыПолученияДатыВыплаты.ХарактерыВыплаты = Новый Структура("Аванс,Зарплата", ЭтотОбъект.ХарактерВыплатыАванс, ЭтотОбъект.ХарактерВыплатыЗарплата);
ПараметрыПолученияДатыВыплаты.Организация = Объект.Организация;
ПараметрыПолученияДатывыплаты.Сотрудник = Объект.Сотрудник;
ПланируемаяДатаВыплатыОтпуска = РасчетЗарплатыРасширенный.ПланируемаяДатаВыплатыЗарплатыПоНастройкамПоПорядкуВыплаты(
ПараметрыПолученияДатыВыплаты);
КонецЕсли;
Возврат ПланируемаяДатаВыплатыОтпуска;
КонецФункции
&НаСервере
Процедура УстановитьПланируемуюДатыВыплаты()
ПланируемаяДатаВыплатыОтпуска = РасчетнаяПланируемаяДатаВыплаты();
Если ПланируемаяДатаВыплатыОтпуска <> Неопределено Тогда
Объект.ПланируемаяДатаВыплаты = ПланируемаяДатаВыплатыОтпуска;
КонецЕсли;
Если ТолькоКомпенсация() Тогда
УстановитьДатуНачалаСобытия();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ТолькоКомпенсация()
Возврат Документы.Отпуск.ТолькоКомпенсация(Объект);
КонецФункции
&НаКлиенте
Функция ПодобратьСледующуюДатуНачалаОтпуска()
ПодобраннаяДата = '00010101';
КоличествоДополнительныхОтпусков = Объект.ДополнительныеОтпуска.Количество() - 1;
Если ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска) Тогда
Если ЗначениеЗаполнено(Объект.ДатаОкончанияОсновногоОтпуска) Тогда
Если КоличествоДополнительныхОтпусков > 0 Тогда
ПодобраннаяДата = ПодобратьСледующуюДатуНачалаДополнительногоОтпуска();
Иначе
ПодобраннаяДата = КонецДня(Объект.ДатаОкончанияОсновногоОтпуска) + 1;
КонецЕсли;
КонецЕсли;
Иначе
Если КоличествоДополнительныхОтпусков > 0 Тогда
ПодобраннаяДата = ПодобратьСледующуюДатуНачалаДополнительногоОтпуска();
КонецЕсли;
КонецЕсли;
Возврат ПодобраннаяДата
КонецФункции
&НаКлиенте
Функция ПодобратьСледующуюДатуНачалаДополнительногоОтпуска()
ПодобраннаяДата = '00010101';
Для каждого Строка Из Объект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(Строка.ДатаОкончания) Тогда
ПодобраннаяДата = Макс(ПодобраннаяДата, Строка.ДатаОкончания);
КонецЕсли;
КонецЦикла;
Возврат КонецДня(ПодобраннаяДата) + 1;
КонецФункции
&НаСервере
Процедура СдвинутьПериодыПоследующихОтпусков(Знач НомерСтроки, НоваяДатаНачала, КоличествоДополнительныхОтпусков)
Если Не КоличествоДополнительныхОтпусков > НомерСтроки Тогда
Возврат
КонецЕсли;
Строка = Объект.ДополнительныеОтпуска[НомерСтроки];
Если ЗначениеЗаполнено(Строка.КоличествоДней) Тогда
Строка.ДатаНачала = НоваяДатаНачала;
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(Строка.ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
Строка.ДатаОкончания = ОстаткиОтпусковКлиентСервер.ДатаОкончанияОтпуска(Объект.Сотрудник, Строка.ДатаНачала, Строка.КоличествоДней, ОписаниеВидаОтпуска);
НомерСтроки = НомерСтроки + 1;
НоваяДатаНачала = КонецДня(Строка.ДатаОкончания) + 1 ;
СдвинутьПериодыПоследующихОтпусков(НомерСтроки, НоваяДатаНачала, КоличествоДополнительныхОтпусков);
Иначе
СдвинутьПериодыПоследующихОтпусков(НомерСтроки+1, НоваяДатаНачала, КоличествоДополнительныхОтпусков);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РассчитатьОстаткиОтпусков()
ОстаткиВРазрезеВидовОтпусков = Документы.Отпуск.РассчитатьОстаткиОтпусков(Объект);
Если ОстаткиВРазрезеВидовОтпусков = Неопределено Тогда
ОстатокОтпускаСотрудника = Неопределено;
Иначе
ОстатокОтпускаСотрудника = Новый ФиксированноеСоответствие(ОстаткиВРазрезеВидовОтпусков);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьКоличествоДнейОтпускаАвансом()
Если ОстатокОтпускаСотрудника = Неопределено Тогда
РассчитатьОстаткиОтпусков();
КонецЕсли;
Документы.Отпуск.УстановитьКоличествоДнейОтпускаАвансом(Объект, ОстатокОтпускаСотрудника);
КонецПроцедуры
&НаСервере
Процедура УстановитьКоличествоДнейОсновногоОтпускаАвансом()
Если ОстатокОтпускаСотрудника = Неопределено Тогда
РассчитатьОстаткиОтпусков();
КонецЕсли;
Документы.Отпуск.УстановитьКоличествоДнейОсновногоОтпускаАвансом(Объект, ОстатокОтпускаСотрудника)
КонецПроцедуры
&НаСервере
Процедура УстановитьКоличествоДнейДополнительногоОтпускаАвансом(СтрокаОтпуска)
Если ОстатокОтпускаСотрудника = Неопределено Тогда
РассчитатьОстаткиОтпусков();
КонецЕсли;
Документы.Отпуск.УстановитьКоличествоДнейДополнительногоОтпускаАвансом(СтрокаОтпуска, ОстатокОтпускаСотрудника, СтрокаОтпуска.ЭтоЕжегодныйОтпуск);
КонецПроцедуры
&НаСервере
Процедура ДанныеВРеквизиты()
Если ИспользуетсяРасчетЗарплаты Тогда
УстановитьПривилегированныйРежим(Истина);
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ЗарплатаКадрыРасширенный.ВводНачисленийДанныеВРеквизит(ЭтаФорма, ОписанияТаблиц, 2);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаДанныеВРеквизит(ЭтаФорма, ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна));
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Модуль.ВводНачисленийДанныеВРеквизит(ЭтаФорма, ОписаниеТаблицыСохраняемоеДенежноеСодержание(), 2);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриПолученииДанныхДокументаОплатыТруда(ЭтаФорма);
КонецЕсли;
ОтражениеЗарплатыВБухучетеРасширенный.ОбъектПриЧтенииНаСервереПредставлениеРаспределения(ЭтаФорма, ОписаниеДокумента(ЭтаФорма));
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаДанныеВРеквизит(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
ЗаполнитьЗначениеКорректировкиВыплаты();
КонецЕсли;
ОбновитьПризнакЕжегодногоОтпускаДополнительныхОтпусков();
ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтотОбъект);
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтотОбъект);
ИсправлениеДокументовЗарплатаКадры.ПрочитатьРеквизитыИсправления(ЭтотОбъект);
УстановитьПоляИсправления(ЭтотОбъект);
ЗарплатаКадрыРасширенныйКлиентСервер.УстановитьОтображениеРеквизитовПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура РеквизитыВДанные(ТекущийОбъект)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ТекущийОбъект.Показатели.Очистить();
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("ГосударственнаяСлужба");
Модуль.ДополнитьМассивОписанийТаблицФормыНачисленияЗарплаты(ОписанияТаблиц, ОписаниеТаблицыСохраняемоеДенежноеСодержание());
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплатаКлиентСервер");
Модуль.ПриЗаполненииМассиваОписанийТаблицНачисленияЗарплаты(ОписанияТаблиц);
КонецЕсли;
ОписанияТаблицДляРаспределенияРезультата = ОписанияТаблицДляРаспределенияРезультата(РегистрацияНачисленийДоступна);
ОписанияТаблицДляРаспределенияРезультата.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда = ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда();
ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда.Добавить(ОписаниеТаблицыПерерасчетовНулевыеСторно());
ЗарплатаКадрыРасширенный.ВводНачисленийРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблиц, 2);
ЗарплатаКадрыРасширенный.ВводРаспределенияРезультатовРасчетаРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблицДляРаспределенияРезультата);
РасчетЗарплатыРасширенныйФормы.РаспределениеПоТерриториямУсловиямТрудаРеквизитВДанные(ЭтаФорма, ТекущийОбъект, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда);
КорректировкиВыплатыВДанные(ТекущийОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыСохраняемоеДенежноеСодержание()
Возврат КадровыйУчетРасширенныйКлиентСервер.ОписаниеТаблицыСохраняемоеДенежноеСодержание();
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений)
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "Начисления";
ОписаниеТаблицы.ПутьКДанным = "Объект.Начисления";
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "ДатыНачисления";
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "Сотрудник";
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "Начисления,ПогашениеЗаймов,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
ОписаниеТаблицы.СодержитПолеКодВычета = Истина;
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
ОписаниеТаблицы.СкрыватьПодразделениеВПростомРежиме = Истина;
ОписаниеТаблицы.СодержитПолеИсходныйДокумент = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений)
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчет";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияПерерасчет";
ОписаниеТаблицы.ИмяПоляДляВставкиПоказателей = "ДатыНачисленияПерерасчет";
ОписаниеТаблицы.НомерТаблицы = 1;
ОписаниеТаблицы.ОтображатьПоляОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.УправлятьОтображениемПолейОписанияВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ОтображатьПоляНормыВремени = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.ЭтоПерерасчеты = Истина;
ОписаниеТаблицы.ИмяРеквизитаФиксСторно = "ФиксСторно";
ОписаниеТаблицы.ИмяПоляДляВставкиРаспределенияРезультатов = "НачисленияПерерасчетРезультат";
ОписаниеТаблицы.ВставлятьПослеПоля = Истина;
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = ПравоНаЧтениеДокументаБезОграничений;
ОписаниеТаблицы.РаспределениеРезультатовЗависимыеТаблицы = "НачисленияПерерасчет,ПогашениеЗаймов,Удержания,НДФЛ,КорректировкиВыплаты";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
ОписаниеТаблицы.СодержитПолеМестоПолученияДохода = Истина;
ОписаниеТаблицы.СкрыватьПодразделениеВПростомРежиме = Истина;
ОписаниеТаблицы.СодержитРегистраторРазовогоНачисления = Истина;
ОписаниеТаблицы.СодержитПолеИсходныйДокумент = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыПерерасчетовНулевыеСторно()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НачисленияПерерасчетНулевыеСторно";
ОписаниеТаблицы.ПутьКДанным = "Объект.НачисленияПерерасчетНулевыеСторно";
ОписаниеТаблицы.НомерТаблицы = 1.1;
ОписаниеТаблицы.ЭтоПерерасчеты = Истина;
ОписаниеТаблицы.ИмяРеквизитаФиксСторно = "ФиксСторно";
ОписаниеТаблицы.ИмяРеквизитаПериод = "ПериодРегистрации";
ОписаниеТаблицы.ИмяРеквизитаДокументОснование = "ДокументОснование";
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыУдержаний()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "Удержания";
ОписаниеТаблицы.ПутьКДанным = "Объект.Удержания";
ОписаниеТаблицы.ИмяРеквизитаВидРасчета = "Удержание";
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.НомерТаблицы = 2;
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыНДФЛ()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "НДФЛ";
ОписаниеТаблицы.ПутьКДанным = "Объект.НДФЛ";
ОписаниеТаблицы.ИмяПоляРезультат = "Налог";
ОписаниеТаблицы.НомерТаблицы = 3;
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.СодержитПолеСотрудник = Истина;
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтрокиНДФЛ";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыКорректировкиВыплаты()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыКорректировкиВыплаты();
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеТаблицыПогашениеЗаймов()
ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыРасчета();
ОписаниеТаблицы.ИмяТаблицы = "ПогашениеЗаймов";
ОписаниеТаблицы.ПутьКДанным = "Объект.ПогашениеЗаймов";
ОписаниеТаблицы.СодержитПолеВидРасчета = Ложь;
ОписаниеТаблицы.НомерТаблицы = 5;
ОписаниеТаблицы.ПутьКДаннымРаспределениеРезультатов = "Объект.РаспределениеРезультатовУдержаний";
ОписаниеТаблицы.ИмяРеквизитаСотрудник = "ФизическоеЛицо";
ОписаниеТаблицы.ИмяРеквизитаИдентификаторСтроки = "ИдентификаторСтроки";
ОписаниеТаблицы.ОтображатьПоляРаспределенияРезультатов = Ложь;
ОписаниеТаблицы.УстанавливатьИдентификаторСтрокиРаспределенияРезультата = Истина;
ОписаниеТаблицы.ОтменятьВсеИсправления = Истина;
Возврат ОписаниеТаблицы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОписанияТаблицДляРаспределенияРезультата(ПравоНаЧтениеДокументаБезОграничений)
ОписанияТаблиц = Новый Массив;
ОписанияТаблиц.Добавить(ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
ОписанияТаблиц.Добавить(ОписаниеТаблицыУдержаний());
ОписанияТаблиц.Добавить(ОписаниеТаблицыНДФЛ());
ОписанияТаблиц.Добавить(ОписаниеТаблицыКорректировкиВыплаты());
ОписанияТаблиц.Добавить(ОписаниеТаблицыПогашениеЗаймов());
Возврат ОписанияТаблиц;
КонецФункции
&НаКлиенте
Процедура ВыполнитьКомандуРедактированияРезультатовРаспределенияНачисленийИУдержаний(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле)
Если СтрНайти(Поле.Имя, "КомандаРедактированияРаспределения") = 0 Тогда
Возврат;
КонецЕсли;
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияРезультатовРаспределенияПоИсточникамФинансирования(ЭтаФорма, ОписаниеТаблицы, ВыбраннаяСтрока, Объект.ПериодРегистрации);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ОписаниеДокумента(Форма)
Описание = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеРасчетногоДокумента();
Описание.НачисленияИмя = "Начисления";
Описание.НачисленияПерерасчетИмя = "НачисленияПерерасчет";
Описание.УдержанияИмя = "Удержания";
Описание.НДФЛИмя = "НДФЛ";
Описание.КорректировкиВыплатыИмя = "КорректировкиВыплаты";
Описание.ПримененныеВычетыИмя = "ПримененныеВычетыНаДетейИИмущественные";
Описание.ПогашениеЗаймовИмя = "ПогашениеЗаймов";
Описание.МесяцНачисленияИмя = "ПериодРегистрации";
Описание.ИменаПолейНачисления = "ВидРасчетаОсновногоОтпуска,ВидРасчетаКомпенсацииОсновногоОтпуска,НачисленияВидРасчета";
Описание.РегистрацияНачисленийДоступна = Форма.ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Описание.ЕстьОплатаПоСреднему = Истина;
Описание.СпособыРасчетаСреднегоЗаработка = Форма.СпособыРасчетаСреднегоЗаработка;
Описание.ЭтоСреднеЧасовойЗаработок = ЭтоСреднеЧасовойЗаработок();
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Месяц", "МесяцНачисленияСтрокой"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Сотрудник", "Объект.Сотрудник"));
Если Форма.Объект.ПредоставитьОсновнойОтпуск Тогда
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Период основного отпуска с", "Объект.ДатаНачалаОсновногоОтпуска"));
Описание.ОбязательныеПоля.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеОбязательногоПоляДокумента("Период основного отпуска по", "Объект.ДатаОкончанияОсновногоОтпуска"));
Описание.ПроверяемыеПериоды.Добавить(РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеПроверяемогоПериода("Период основного отпуска с", "Объект.ДатаНачалаОсновногоОтпуска", "Период основного отпуска по", "Объект.ДатаОкончанияОсновногоОтпуска"));
КонецЕсли;
Описание.ОписанияТаблицДляРаспределенияРезультата = СтруктураОписанияТаблицДляРаспределенияРезультата(Форма);
Если ОбщегоНазначенияБЗККлиентСервер.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияБЗККлиентСервер.ОбщийМодуль("УправленческаяЗарплатаКлиентСервер");
Модуль.ДополнитьОписаниеРасчетногоДокумента(Описание);
КонецЕсли;
Возврат Описание;
КонецФункции
&НаСервере
Функция ПолучитьКонтролируемыеПоля() Экспорт
КонтролируемыеПоля = Новый Структура;
НачисленияФиксРасчет = Новый Массив;
НачисленияФиксРасчет.Добавить("Результат");
НачисленияФиксРасчетВремени = Новый Массив;
НачисленияФиксРасчетВремени.Добавить("ОплаченоДней");
НачисленияФиксРасчетВремени.Добавить("ОплаченоЧасов");
НачисленияФиксРасчетВремени.Добавить("НормаДней");
НачисленияФиксРасчетВремени.Добавить("НормаЧасов");
НачисленияФиксСтрока = Новый Массив;
НачисленияФиксСтрока.Добавить("Сотрудник");
НачисленияФиксСтрока.Добавить("Подразделение");
НачисленияФиксСтрока.Добавить("Начисление");
НачисленияФиксСтрока.Добавить("ДатаНачала");
НачисленияФиксСтрока.Добавить("ДатаОкончания");
НачисленияФиксЗаполнение = Новый Массив;
НачисленияФиксЗаполнение.Добавить("МестоПолученияДохода");
НачисленияПоля = Новый Структура;
НачисленияПоля.Вставить("ФиксРасчет", НачисленияФиксРасчет);
НачисленияПоля.Вставить("ФиксЗаполнение", НачисленияФиксЗаполнение);
НачисленияПоля.Вставить("ФиксСтрока", НачисленияФиксСтрока);
НачисленияПоля.Вставить("ФиксРасчетВремени", НачисленияФиксРасчетВремени);
КонтролируемыеПоля.Вставить("Начисления", НачисленияПоля);
КонтролируемыеПоля.Вставить("НачисленияПерерасчет", НачисленияПоля);
КонтролируемыеПоля.Вставить("НДФЛ", УчетНДФЛРасширенный.КонтролируемыеПоляДляФиксацииРезультатов());
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ДополнитьСоставКонтролируемыхПолейНачисленияЗарплаты(КонтролируемыеПоля);
КонецЕсли;
Возврат КонтролируемыеПоля;
КонецФункции
&НаКлиенте
Функция ПолучитьСтарыеЗначенияКонтролируемыхПолей() Экспорт
Возврат СтарыеЗначенияКонтролируемыхПолей;
КонецФункции
&НаКлиенте
Процедура ДополнитьСтроку(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей) Экспорт
ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаСервере
Процедура ДополнитьСтрокуНаСервере(ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей)
РасчетЗарплатыРасширенныйФормы.ДополнитьСтрокуРасчета(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), ИдентификаторСтроки, ОписаниеТаблицы, ЗаполнятьСведенияСотрудников, ЗаполнятьЗначенияПоказателей);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПериодРасчетаСреднегоЗаработка()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Документы.Отпуск.ЗаполнитьПериодРасчетаСреднегоЗаработка(Объект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоСреднеЧасовойЗаработок()
Возврат Ложь;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция МассивОписанийТаблицФормы(ПравоНаЧтениеДокументаБезОграничений)
МассивОписанийТаблицФормы = Новый Структура;
МассивОписанийТаблицФормы.Вставить("Начисления", ОписаниеТаблицыНачислений(ПравоНаЧтениеДокументаБезОграничений));
МассивОписанийТаблицФормы.Вставить("НачисленияПерерасчет", ОписаниеТаблицыПерерасчетов(ПравоНаЧтениеДокументаБезОграничений));
Если ОбщегоНазначенияБЗККлиентСервер.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначенияБЗККлиентСервер.ОбщийМодуль("УправленческаяЗарплатаКлиентСервер");
Модуль.ПриЗаполненииСтруктурыОписанийТаблицНачисленияЗарплаты(МассивОписанийТаблицФормы);
КонецЕсли;
Возврат МассивОписанийТаблицФормы;
КонецФункции
&НаСервере
Процедура ОбновитьПризнакЕжегодногоОтпускаДополнительныхОтпусков()
ДополнительныеОтпускаСотрудника = Объект.ДополнительныеОтпуска.Выгрузить( , "ВидОтпуска").ВыгрузитьКолонку("ВидОтпуска");
МассивДополнительныхОтпусков = ОбщегоНазначенияКлиентСервер.СвернутьМассив(ДополнительныеОтпускаСотрудника);
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивДополнительныхОтпусков, Справочники.ВидыОтпусков.ПустаяСсылка());
ЕжегодностьОтпусков = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивДополнительныхОтпусков, "ОтпускЯвляетсяЕжегодным");
Для каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ВидОтпуска) Тогда
ДополнительныйОтпуск.ЭтоЕжегодныйОтпуск = ЕжегодностьОтпусков.Получить(ДополнительныйОтпуск.ВидОтпуска);
Иначе
ДополнительныйОтпуск.ЭтоЕжегодныйОтпуск = Ложь;
ДополнительныйОтпуск.КоличествоДнейКомпенсации = 0;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДополнительныеОтпускаВидОтпускаПриИзмененииНаСервере(ИдентификаторСтроки)
ОбновитьПризнакЕжегодногоОтпускаДополнительныхОтпусков();
Строка = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(ИдентификаторСтроки);
Строка.ВидРасчета = Неопределено;
Строка.ВидРасчетаКомпенсации = Неопределено;
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(Строка.ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
Строка.КоличествоДней = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(Объект.Сотрудник, Строка.ДатаНачала, Строка.ДатаОкончания, ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
ОбновитьРабочийГодДополнительногоОтпуска(Строка);
УстановитьВидимостьОтпускаПострадавшимНаЧАЭС();
ЗаполнитьСсылкиНачислений(Ложь);
ОбновитьИнформациюОПересеченииОтпускаСБольничным();
ПроверитьНазначениеДополнительныхОтпусков(Строка);
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииМесяцаНачисления()
ОбработатьИзменениеМесяцНачисленияНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеМесяцНачисленияНаСервере()
ОбновитьРасчетДенежногоСодержания = Истина;
РасчетЗарплатыРасширенный.УстановитьПланируемуюДатуВыплаты(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
УстановитьДатуНачалаСобытия();
УстановитьПланируемуюДатыВыплаты();
УточнитьВозможностьРасчетаЗарплаты();
УстановитьВидимостьПерерасчетов();
УстановитьФункциональныеОпцииФормы();
УстановитьЗаголовокФлажкаРассчитатьЗарплату();
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПриИзмененииНаСервере()
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
ЗаполнитьДанныеФормыПоОрганизации();
УстановитьФункциональныеОпцииФормы();
ОчиститьСреднийЗаработок();
ОчиститьРассчитанныеДанные();
РасчетЗарплатыРасширенныйФормы.ОбновитьПлановыеДатыВыплатыПоОрганизации(ЭтотОбъект);
РасчетЗарплатыРасширенный.УстановитьПланируемуюДатуВыплаты(ЭтотОбъект, ОписаниеДокумента(ЭтотОбъект));
РасчетЗарплатыРасширенныйФормы.ДополнитьДанныеФормыРаспределенияПоТерриториямУсловиямТруда(ЭтотОбъект, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда(), РегистрацияНачисленийДоступна);
КонецПроцедуры
&НаСервере
Процедура ОбновитьВариантРасчета()
УстановитьПривилегированныйРежим(Истина);
Объект.РасчетДенежногоСодержания = Ложь;
ЗарплатаКадрыРасширенный.УстановитьВариантРасчетаДокументаПоСреднемуЗаработку(Объект);
КонецПроцедуры
&НаСервере
Процедура СотрудникПриИзмененииНаСервере()
ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей();
ОбновитьВариантРасчета();
РасчетЗарплатыРасширенныйФормы.ОбновитьФормуПоВариантуРасчетаСреднегоЗаработка(ЭтотОбъект);
ЗаполнитьСсылкиНачислений(Ложь);
ОбновитьИнформациюОПересеченииОтпускаСБольничным();
ОчиститьСреднийЗаработок();
ЗаполнитьПериодРасчетаСреднегоЗаработка();
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОчиститьРассчитанныеДанные();
ПрочитатьПостоянныеКадровыеДанныеСотрудника();
ОбновитьДлительностьИнтервалов();
ОбновитьРабочиеГодыОтпусков();
ОбновитьНадписьРасшифровкаОстаткаОтпуска(ЭтотОбъект);
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьВидимостьОтсутствияПоДругимМестамРаботы();
УстановитьПланируемуюДатыВыплаты();
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
РассчитатьОстаткиОтпусков();
УстановитьКоличествоДнейОтпускаАвансом();
ПроверитьНазначениеДополнительныхОтпусков();
ЗаполнитьОтработанныеДни();
ЗаполнитьОтработанныеЧасы();
УстановитьПредставлениеОтработанныхДней();
КонецПроцедуры
&НаСервере
Процедура ДатаНачалаПриИзмененииНаСервере()
УстановитьДатуНачалаСобытия();
УточнитьВозможностьРасчетаЗарплаты();
УстановитьКоличествоДнейОсновногоОтпуска();
УстановитьКоличествоДнейОсновногоОтпускаАвансом();
УстановитьПланируемуюДатыВыплаты();
ОбновитьРабочийГодОсновногоОтпуска();
УстановитьВидимостьПерерасчетов();
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьВидимостьОтсутствияПоДругимМестамРаботы();
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
УстановитьОбщийПериодОтпуска();
ЗаполнитьОтработанныеДни();
ЗаполнитьОтработанныеЧасы();
УстановитьПредставлениеОтработанныхДней();
Если ПолучитьФункциональнуюОпцию("ВыбиратьВидНачисленияКомпенсацииОсновногоОтпуска")
И Объект.РасчетДенежногоСодержания Тогда
Объект.ВидРасчетаКомпенсацииОсновногоОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("ПланВидовРасчета.Начисления.ПустаяСсылка");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьКоличествоДнейОсновногоОтпуска()
Документы.Отпуск.УстановитьКоличествоДнейОсновногоОтпуска(Объект, ОтпускВРабочихДняхПоДоговору);
КонецПроцедуры
&НаСервере
Процедура ДатаОкончанияОсновногоОтпускаПриИзмененииНаСервере()
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОчиститьРассчитанныеДанные();
Если ЗначениеЗаполнено(Объект.ДатаОкончанияОсновногоОтпуска) И ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска)
И Объект.ДатаНачалаОсновногоОтпуска <= Объект.ДатаОкончанияОсновногоОтпуска Тогда
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"), ОтпускВРабочихДняхПоДоговору);
Объект.КоличествоДнейОсновногоОтпуска = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(Объект.Сотрудник, Объект.ДатаНачалаОсновногоОтпуска, Объект.ДатаОкончанияОсновногоОтпуска, ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
СдвинутьПериодыПоследующихОтпусков(0, КонецДня(Объект.ДатаОкончанияОсновногоОтпуска) + 1, Объект.ДополнительныеОтпуска.Количество());
Иначе
Объект.КоличествоДнейОсновногоОтпуска = 0;
КонецЕсли;
УстановитьКоличествоДнейОсновногоОтпускаАвансом();
ОбновитьРабочийГодОсновногоОтпуска();
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьВидимостьОтсутствияПоДругимМестамРаботы();
УстановитьОбщийПериодОтпуска();
ЗаполнитьОтработанныеДни();
ЗаполнитьОтработанныеЧасы();
УстановитьПредставлениеОтработанныхДней();
КонецПроцедуры
&НаСервере
Процедура КоличествоДнейОсновногоОтпускаПриИзмененииНаСервере()
Если Не ЗначениеЗаполнено(Объект.КоличествоДнейОсновногоОтпуска) Тогда
Объект.ДатаОкончанияОсновногоОтпуска = '00010101';
КонецЕсли;
Если ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска)
И ЗначениеЗаполнено(Объект.КоличествоДнейОсновногоОтпуска) Тогда
ИндексДополнительногоОтпуска = ИндексДополнительногоОтпускаПослеОсновного(Объект.ДатаОкончанияОсновногоОтпуска);
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(
ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"),
ОтпускВРабочихДняхПоДоговору);
Объект.ДатаОкончанияОсновногоОтпуска = ОстаткиОтпусковКлиентСервер.ДатаОкончанияОтпуска(Объект.Сотрудник,
Объект.ДатаНачалаОсновногоОтпуска, Объект.КоличествоДнейОсновногоОтпуска, ОписаниеВидаОтпуска);
СдвинутьПериодыПоследующихОтпусков(ИндексДополнительногоОтпуска, КонецДня(Объект.ДатаОкончанияОсновногоОтпуска) + 1,
Объект.ДополнительныеОтпуска.Количество());
КонецЕсли;
УстановитьКоличествоДнейОсновногоОтпускаАвансом();
ПерезаполнитьПериодыПересеченияНаСервере();
ОбновитьРабочийГодОсновногоОтпуска();
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьВидимостьОтсутствияПоДругимМестамРаботы();
УстановитьОбщийПериодОтпуска();
КонецПроцедуры
&НаСервере
Процедура ПредоставитьКомпенсациюОсновногоОтпускаПриИзмененииНаСервере()
УстановитьДатуНачалаСобытия();
УстановитьПланируемуюДатыВыплаты();
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОчиститьРассчитанныеДанные();
УстановитьДоступностьЭлементовФормы(ЭтаФорма, Объект);
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
КонецПроцедуры
&НаСервере
Процедура ДнейЧасовКомпенсацииОтпускаПриИзмененииНаСервере()
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОбновитьРабочийГодОсновногоОтпуска();
ОчиститьРассчитанныеДанные();
КонецПроцедуры
&НаСервере
Процедура ПредоставитьМатериальнуюПомощьПриОтпускеПриИзмененииНаСервере()
УстановитьДоступностьЭлементовФормы(ЭтаФорма, Объект);
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОчиститьРассчитанныеДанные();
КонецПроцедуры
&НаСервере
Процедура ПредоставитьЕдиновременнуюВыплатуКОтпускуПриИзмененииНаСервере()
УстановитьДоступностьЭлементовФормы(ЭтаФорма, Объект);
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОчиститьРассчитанныеДанные();
КонецПроцедуры
&НаСервере
Процедура РассчитатьЗарплатуПриИзмененииНаСервере()
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриИзмененииПризнакаРассчитыватьЗарплатуДокументаОплатыТруда(ЭтаФорма, ОписаниеДокумента(ЭтаФорма), Объект.РассчитатьЗарплату);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДополнительныеОтпускаДатаНачалаПриИзмененииНаСервере(Идентификатор, ЗаполнитьСтроку = Истина)
Строка = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(Идентификатор);
Если ЗаполнитьСтроку Тогда
Если ЗначениеЗаполнено(Строка.ДатаОкончания) И ЗначениеЗаполнено(Строка.ДатаНачала)
И Строка.ДатаНачала <= Строка.ДатаОкончания Тогда
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(Строка.ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
Строка.КоличествоДней = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(Объект.Сотрудник, Строка.ДатаНачала, Строка.ДатаОкончания, ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
СдвинутьПериодыПоследующихОтпусков(Строка.НомерСтроки, КонецДня(Строка.ДатаОкончания) + 1, Объект.ДополнительныеОтпуска.Количество());
Иначе
Строка.КоличествоДней = 0;
КонецЕсли;
КонецЕсли;
УстановитьДатуНачалаСобытия();
УстановитьПланируемуюДатыВыплаты();
ОбновитьРабочийГодДополнительногоОтпуска(Строка);
УточнитьВозможностьРасчетаЗарплаты();
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьКоличествоДнейДополнительногоОтпускаАвансом(Строка);
УстановитьОбщийПериодОтпуска();
ЗаполнитьОтработанныеДни();
ЗаполнитьОтработанныеЧасы();
УстановитьПредставлениеОтработанныхДней();
КонецПроцедуры
&НаСервере
Процедура ДополнительныеОтпускаДатаОкончанияПриИзмененииНаСервере(Идентификатор)
Строка = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(Идентификатор);
Если ЗначениеЗаполнено(Строка.ДатаОкончания) И ЗначениеЗаполнено(Строка.ДатаНачала)
И Строка.ДатаНачала <= Строка.ДатаОкончания Тогда
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(Строка.ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
Строка.КоличествоДней = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(Объект.Сотрудник, Строка.ДатаНачала, Строка.ДатаОкончания, ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням, ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
СдвинутьПериодыПоследующихОтпусков(Строка.НомерСтроки, КонецДня(Строка.ДатаОкончания) + 1, Объект.ДополнительныеОтпуска.Количество());
Иначе
Строка.КоличествоДней = 0;
КонецЕсли;
ОбновитьРабочийГодДополнительногоОтпуска(Строка);
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьКоличествоДнейДополнительногоОтпускаАвансом(Строка);
УстановитьОбщийПериодОтпуска();
ЗаполнитьОтработанныеДни();
ЗаполнитьОтработанныеЧасы();
УстановитьПредставлениеОтработанныхДней();
КонецПроцедуры
&НаСервере
Процедура ДополнительныеОтпускаКоличествоДнейПриИзмененииНаСервере(Идентификатор, ИзменениеПродленияОтпуска = Ложь)
Строка = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(Идентификатор);
Если ЗначениеЗаполнено(Строка.ДатаНачала)
И ЗначениеЗаполнено(Строка.КоличествоДней) Тогда
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(Строка.ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
Строка.ДатаОкончания = ОстаткиОтпусковКлиентСервер.ДатаОкончанияОтпуска(Объект.Сотрудник, Строка.ДатаНачала, Строка.КоличествоДней, ОписаниеВидаОтпуска);
СдвинутьПериодыПоследующихОтпусков(Строка.НомерСтроки, КонецДня(Строка.ДатаОкончания) + 1, Объект.ДополнительныеОтпуска.Количество());
КонецЕсли;
Если ИзменениеПродленияОтпуска Тогда
ПерезаполнитьПериодыПересеченияНаСервере();
КонецЕсли;
ОбновитьРабочийГодДополнительногоОтпуска(Строка);
ЗаполнитьОтсутствияПоДругимМестамРаботы();
УстановитьКоличествоДнейДополнительногоОтпускаАвансом(Строка);
КонецПроцедуры
&НаСервере
Процедура ДополнительныеОтпускаКоличествоДнейКомпенсацииПриИзмененииНаСервере(Идентификатор)
Строка = Объект.ДополнительныеОтпуска.НайтиПоИдентификатору(Идентификатор);
УстановитьДатуНачалаСобытия();
УстановитьПланируемуюДатыВыплаты();
ОбновитьРабочийГодДополнительногоОтпуска(Строка);
КонецПроцедуры
&НаСервере
Процедура ИзменениеПериодаПриостановкиОтпускаНаСервере(ИзмененоНачалоПериода, Идентификатор)
Строка = Объект.ПериодыПриостановкиОтпуска.НайтиПоИдентификатору(Идентификатор);
Если ИзмененоНачалоПериода Тогда
Если ЗначениеЗаполнено(Строка.ДатаОкончанияПериода) И Строка.ДатаНачалаПериода > Строка.ДатаОкончанияПериода Тогда
Строка.ДатаОкончанияПериода = Строка.ДатаНачалаПериода;
КонецЕсли;
Иначе
Если ЗначениеЗаполнено(Строка.ДатаНачалаПериода) И Строка.ДатаНачалаПериода > Строка.ДатаОкончанияПериода Тогда
Строка.ДатаНачалаПериода = Строка.ДатаОкончанияПериода;
КонецЕсли;
КонецЕсли;
Документы.Отпуск.ЗаполнитьКоличествоДнейПриостановки(Объект, Строка);
КонецПроцедуры
&НаКлиенте
Процедура ПериодыПриостановкиОтпускаПричинаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ЗначениеЗаполнено(ВыбранноеЗначение) И ТипЗнч(ВыбранноеЗначение) = Тип("ДокументСсылка.БольничныйЛист") Тогда
ЗаполнитьПериодПриостановки(ВыбранноеЗначение, Элементы.ПериодыПриостановкиОтпуска.ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьРабочийГодОсновногоОтпуска()
Если (Объект.ПредоставитьОсновнойОтпуск И ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(Объект.ДатаОкончанияОсновногоОтпуска))
Или (Объект.ПредоставитьКомпенсациюОсновногоОтпуска И ЗначениеЗаполнено(Объект.КоличествоДнейКомпенсацииОсновногоОтпуска)) Тогда
УстановитьПривилегированныйРежим(Истина);
ДниПриостановкиОтпуска = КоличествоДнейПриостановкиОтпуска();
СтруктураПараметров = ОстаткиОтпусков.ПараметрыПолученияРабочегоПериодаОтпуска();
СтруктураПараметров.Сотрудник = Объект.Сотрудник;
СтруктураПараметров.ТекущийРегистратор = ИсключаемыеРегистраторы();
СтруктураПараметров.ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
Если Объект.ПредоставитьОсновнойОтпуск Тогда
СтруктураПараметров.ДатаНачала = Объект.ДатаНачалаОсновногоОтпуска;
СтруктураПараметров.ДатаОкончания = Объект.ДатаОкончанияОсновногоОтпуска
Иначе
СтруктураПараметров.ДатаНачала = Дата(1,1,1);
СтруктураПараметров.ДатаОкончания = Дата(1,1,1);
КонецЕсли;
Если Объект.ПредоставитьКомпенсациюОсновногоОтпуска Тогда
СтруктураПараметров.ДатаКомпенсации = Объект.ПериодРегистрации;
СтруктураПараметров.КоличествоДнейКомпенсации = - ДниПриостановкиОтпуска + Объект.КоличествоДнейКомпенсацииОсновногоОтпуска;
Иначе
СтруктураПараметров.ДатаКомпенсации = Дата(1,1,1);
СтруктураПараметров.КоличествоДнейКомпенсации = - ДниПриостановкиОтпуска;
КонецЕсли;
ПериодОсновногоОтпуска = ОстаткиОтпусков.РабочийПериодОтпуска(СтруктураПараметров);
Объект.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = ПериодОсновногоОтпуска.РабочийГодС;
Объект.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = ПериодОсновногоОтпуска.РабочийГодПо;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьРабочийГодДополнительногоОтпуска(Строка)
Если (ЗначениеЗаполнено(Строка.ВидОтпуска) И ЗначениеЗаполнено(Строка.ДатаНачала) И ЗначениеЗаполнено(Строка.ДатаОкончания))
Или (ЗначениеЗаполнено(Строка.КоличествоДнейКомпенсации)) Тогда
УстановитьПривилегированныйРежим(Истина);
ДниПриостановкиОтпуска = КоличествоДнейПриостановкиОтпуска(Ложь);
Если Не ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Строка.ВидОтпуска, "ОтпускЯвляетсяЕжегодным") Тогда
Строка.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = Неопределено;
Строка.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = Неопределено;
Возврат
КонецЕсли;
СтруктураПараметров = ОстаткиОтпусков.ПараметрыПолученияРабочегоПериодаОтпуска();
СтруктураПараметров.Сотрудник = Объект.Сотрудник;
СтруктураПараметров.ТекущийРегистратор = ИсключаемыеРегистраторы();
СтруктураПараметров.ВидОтпуска = Строка.ВидОтпуска;
СтруктураПараметров.ДатаНачала = Строка.ДатаНачала;
СтруктураПараметров.ДатаОкончания = Строка.ДатаОкончания;
СтруктураПараметров.ДатаКомпенсации = Объект.ПериодРегистрации;
СтруктураПараметров.КоличествоДнейКомпенсации = - ДниПриостановкиОтпуска + Строка.КоличествоДнейКомпенсации;
ПериодДополнительногоОтпуска = ОстаткиОтпусков.РабочийПериодОтпуска(СтруктураПараметров);
Строка.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = ПериодДополнительногоОтпуска.РабочийГодС;
Строка.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = ПериодДополнительногоОтпуска.РабочийГодПо;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьРабочиеГодыОтпусков()
СписокОтпусков = Новый ТаблицаЗначений;
СписокОтпусков.Колонки.Добавить("ДатаНачала");
СписокОтпусков.Колонки.Добавить("ДатаОкончания");
СписокОтпусков.Колонки.Добавить("ВидОтпуска");
СписокОтпусков.Колонки.Добавить("КоличествоДней");
СписокКомпенсаций = Новый ТаблицаЗначений;
СписокКомпенсаций.Колонки.Добавить("ДатаКомпенсации");
СписокКомпенсаций.Колонки.Добавить("КоличествоДней");
СписокКомпенсаций.Колонки.Добавить("ВидОтпуска");
Если Объект.ПредоставитьОсновнойОтпуск И ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска) И ЗначениеЗаполнено(Объект.ДатаОкончанияОсновногоОтпуска) Тогда
НовыйОтпуск = СписокОтпусков.Добавить();
НовыйОтпуск.ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
НовыйОтпуск.ДатаНачала = Объект.ДатаНачалаОсновногоОтпуска;
НовыйОтпуск.ДатаОкончания = Объект.ДатаОкончанияОсновногоОтпуска;
НовыйОтпуск.КоличествоДней = Объект.КоличествоДнейОсновногоОтпуска;
КонецЕсли;
Если Объект.ПредоставитьКомпенсациюОсновногоОтпуска Тогда
НоваяКомпенсация = СписокКомпенсаций.Добавить();
НоваяКомпенсация.ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
НоваяКомпенсация.ДатаКомпенсации = Объект.ПериодРегистрации;
НоваяКомпенсация.КоличествоДней = Объект.КоличествоДнейКомпенсацииОсновногоОтпуска;
КонецЕсли;
Если Объект.ПериодыПриостановкиОтпуска.Количество() > 0 Тогда
ДниПриостановкиОсновногоОтпуска = КоличествоДнейПриостановкиОтпуска();
Если ДниПриостановкиОсновногоОтпуска > 0 Тогда
НоваяКомпенсация = СписокКомпенсаций.Добавить();
НоваяКомпенсация.ВидОтпуска = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
НоваяКомпенсация.ДатаКомпенсации = Объект.ПериодРегистрации;
НоваяКомпенсация.КоличествоДней = - ДниПриостановкиОсновногоОтпуска;
КонецЕсли;
КонецЕсли;
Для каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ВидОтпуска) И ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала) И ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания) Тогда
НовыйОтпуск = СписокОтпусков.Добавить();
НовыйОтпуск.ВидОтпуска = ДополнительныйОтпуск.ВидОтпуска;
НовыйОтпуск.ДатаНачала = ДополнительныйОтпуск.ДатаНачала;
НовыйОтпуск.ДатаОкончания = ДополнительныйОтпуск.ДатаОкончания;
НовыйОтпуск.КоличествоДней = ДополнительныйОтпуск.КоличествоДней;
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ВидОтпуска) И ЗначениеЗаполнено(ДополнительныйОтпуск.КоличествоДнейКомпенсации) Тогда
НоваяКомпенсация = СписокКомпенсаций.Добавить();
НоваяКомпенсация.ВидОтпуска = ДополнительныйОтпуск.ВидОтпуска;
НоваяКомпенсация.ДатаКомпенсации = Объект.ПериодРегистрации;
НоваяКомпенсация.КоличествоДней = ДополнительныйОтпуск.КоличествоДнейКомпенсации;
КонецЕсли;
Если ЗначениеЗаполнено(ДополнительныйОтпуск.ВидОтпуска) Тогда
ДниПриостановкиДополнительногоОтпуска = КоличествоДнейПриостановкиОтпуска(Ложь);
Если ДниПриостановкиДополнительногоОтпуска = 0 Тогда
Продолжить;
КонецЕсли;
НоваяКомпенсация = СписокКомпенсаций.Добавить();
НоваяКомпенсация.ВидОтпуска = ДополнительныйОтпуск.ВидОтпуска;
НоваяКомпенсация.ДатаКомпенсации = Объект.ПериодРегистрации;
НоваяКомпенсация.КоличествоДней = - ДниПриостановкиДополнительногоОтпуска;
КонецЕсли;
КонецЦикла;
УстановитьПривилегированныйРежим(Истина);
РабочиеПериодыСпискаОтпусков = ОстаткиОтпусков.РабочиеПериодыСпискаОтпусков(Объект.Сотрудник, ИсключаемыеРегистраторы(), СписокОтпусков, СписокКомпенсаций);
ПериодОсновногоОтпуска = РабочиеПериодыСпискаОтпусков.Получить(ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной"));
Если ПериодОсновногоОтпуска = Неопределено Тогда
Объект.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = Неопределено;
Объект.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = Неопределено;
Иначе
Объект.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = ПериодОсновногоОтпуска.РабочийГодС;
Объект.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = ПериодОсновногоОтпуска.РабочийГодПо;
КонецЕсли;
Для каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
ПериодДополнительногоОтпуска = РабочиеПериодыСпискаОтпусков.Получить(ДополнительныйОтпуск.ВидОтпуска);
Если ПериодДополнительногоОтпуска = Неопределено Тогда
ДополнительныйОтпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = Неопределено;
ДополнительныйОтпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = Неопределено;
Иначе
ДополнительныйОтпуск.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск = ПериодДополнительногоОтпуска.РабочийГодС;
ДополнительныйОтпуск.КонецПериодаЗаКоторыйПредоставляетсяОтпуск = ПериодДополнительногоОтпуска.РабочийГодПо;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПорядокВыплатыПриИзмененииНаСервере(ПерезаполнитьНачисления)
УстановитьВидимостьУдержаний();
УстановитьПланируемуюДатыВыплаты();
УстановитьСвойствоДокументРассчитан();
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
БылоРассчитатьЗарплату = Объект.РассчитатьЗарплату;
УточнитьВозможностьРасчетаЗарплаты();
Если Объект.РассчитатьЗарплату И БылоРассчитатьЗарплату <> Объект.РассчитатьЗарплату Тогда
ПерезаполнитьНачисления = Истина;
Иначе
ПерезаполнитьНачисления = Ложь;
КонецЕсли;
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьПерерасчетов()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПерерасчетыДоступны = ИсправлениеДокументовРасчетЗарплатыКлиентСервер.ПерерасчетыДоступны(ЭтаФорма, , "ДатаНачалаСобытия");
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияПерерасчет", "Видимость", ПерерасчетыДоступны);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПерерасчетГруппа", "Видимость", ПерерасчетыДоступны);
ИсправлениеДокументовРасчетЗарплатыКлиентСервер.УстановитьДоначислениеПриИсправлении(ЭтаФорма, ПерерасчетыДоступны);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьОтпускаПострадавшимНаЧАЭС()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ЕстьОплатаОтпускаПострадавшимНаЧАЭС = ЕстьОплатаВидаОтпуска(ЭтотОбъект.Объект, ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускПострадавшимВАварииЧАЭС"));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОтпускПострадавшимЧАЭС", "Видимость", ЕстьОплатаОтпускаПострадавшимНаЧАЭС);
КонецПроцедуры
&НаСервере
Процедура УстановитьСтраницуСреднегоЗаработка()
Если ОтпускВРабочихДняхПоДоговору Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СреднийЗаработок", "Видимость", Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СреднийЗаработокПоРабочимДням", "Видимость", Истина);
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СреднийЗаработок", "Видимость", Истина);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СреднийЗаработокПоРабочимДням", "Видимость", Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьУдержаний()
УдержанияДоступны = УдержанияДоступны();
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Удержано", "Видимость", УдержанияДоступны);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УдержанияИзменить", "Видимость", УдержанияДоступны);
КонецПроцедуры
&НаСервере
Функция УдержанияДоступны()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат Ложь;
Иначе
Возврат ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты);
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция ЭтоМежрасчетнаяВыплата(ПорядокВыплаты)
Возврат РасчетЗарплатыРасширенный.ЭтоМежрасчетнаяВыплата(ПорядокВыплаты);
КонецФункции
&НаСервере
Процедура ПоказатьНадписьДней()
ТекстНадписи = НСтр("ru='дн.'");
Элементы.КоличествоДнейОсновногоОтпуска.Подсказка = ТекстНадписи;
Элементы.ДнейЧасовКомпенсацииОтпуска.Подсказка = ТекстНадписи;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьИнформациюЗаполненностиДанныхРасчетаДенежногоСодержания(Форма)
Если Не Форма.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
СтруктураИнфонадписи = Новый Структура("Текст, Картинка");
Если ОбщегоНазначенияБЗККлиентСервер.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначенияБЗККлиентСервер.ОбщийМодуль("РасчетДенежногоСодержанияКлиентСервер");
Модуль.ЗаполнитьИнформациюЗаполненностиДанныхСохраняемоеДенежноеСодержаниеДокумента(Форма, ОписаниеДокумента(Форма), СтруктураИнфонадписи);
КонецЕсли;
Форма.ЗаполненностьДанныхИнформационныйТекст = СтруктураИнфонадписи.Текст;
Форма.ЗаполненностьДанныхКартинка = СтруктураИнфонадписи.Картинка;
Форма.ОбновитьИнформациюЗаполненностиДанных = Ложь;
КонецПроцедуры
&НаСервере
Процедура ОбновитьНачисленоУдержаноИтог()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
НачисленоИтог = Объект.Начисления.Итог("Результат");
НДФЛ = УчетНДФЛ.ИтоговаяСуммаНДФЛпоДокументу(Объект, "Налог");
ПрочиеУдержания = Объект.Удержания.Итог("Результат")
+ Объект.ПогашениеЗаймов.Итог("ПогашениеЗайма")
+ Объект.ПогашениеЗаймов.Итог("ПогашениеПроцентов")
+ Объект.ПогашениеЗаймов.Итог("НалогНаМатериальнуюВыгоду");
УдержаноИтог = НДФЛ + ПрочиеУдержания;
КорректировкаВыплаты = Объект.КорректировкиВыплаты.Итог("КорректировкаВыплаты");
ЗаполнитьСсылкиПредопределенныхВидовОтпусков();
Если ЕстьОплатаВидаОтпуска(Объект, ВидОтпускаЧАЭС) Тогда
ОплачиваемыеДниОтпускаЧАЭС = Документы.Отпуск.КоличествоОплачиваемыхДнейПоВидуОтпуска(
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект), ВидОтпускаЧАЭС);
КоличествоДнейОтпуска = ОплачиваемыеДниОтпускаЧАЭС[0].КоличествоДней;
Если Объект.РасчетДенежногоСодержания Тогда
Если ОбщегоНазначенияБЗККлиентСервер.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначенияБЗККлиентСервер.ОбщийМодуль("РасчетДенежногоСодержания");
НормаДней = Модуль.КоличествоДнейВМесяцеДляОплатыОтпусков(Объект.ДатаНачалаСобытия);
Если НормаДней <> 0 Тогда
РассчитаноОтпускЧАЭС = КоличествоДнейОтпуска * Объект.СохраняемоеДенежноеСодержание / НормаДней;
КонецЕсли;
КонецЕсли;
Иначе
РассчитаноОтпускЧАЭС = УчетСреднегоЗаработка.ДанныеОплатыОтпускаЧАЭС(Объект.Сотрудник, Объект.СреднийЗаработок, КоличествоДнейОтпуска, ОплачиваемыеДниОтпускаЧАЭС[0].ПериодыОтпуска).Сумма;
КонецЕсли;
Иначе
РассчитаноОтпускЧАЭС = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПерерасчетИтог(Форма)
Если Не Форма.ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
Форма.ПерерасчетИтог = Форма.Объект.НачисленияПерерасчет.Итог("Результат");
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьРассчитанныеДанныеНаКлиенте()
ОчиститьРассчитанныеДанные();
КонецПроцедуры
&НаСервере
Процедура ОчиститьРассчитанныеДанные(ПерезаполнитьНачисления = Истина)
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Документы.Отпуск.ОчиститьРассчитанныеДанные(Объект, ПерезаполнитьНачисления);
ОбновитьНачисленоУдержаноИтог();
ОбновитьПерерасчетИтог(ЭтотОбъект);
КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура ОчиститьСреднийЗаработок()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Объект.СреднийЗаработокОбщий.Очистить();
Объект.ОтработанноеВремяДляСреднегоОбщий.Очистить();
Объект.ДанныеОбИндексации.Очистить();
Объект.СреднийЗаработок = Неопределено;
Объект.СреднийЗаработокПоРабочимДням = Неопределено;
Объект.ДенежноеСодержание.Очистить();
Объект.ДенежноеСодержаниеФактическиеНачисления.Очистить();
ОбновитьДанныеДляРасчетаСреднего = Истина;
УстановитьПредупреждениеДокументНеРассчитан(ЭтаФорма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПредупреждениеДокументНеРассчитан(Форма)
Форма.ЗаполненностьДанныхИнформационныйТекст = УчетСреднегоЗаработкаКлиентСервер.ТекстПредупрежденияДокументНеРассчитан();
Форма.ЗаполненностьДанныхКартинка = БиблиотекаКартинок.Предупреждение;
Форма.ОбновитьИнформациюЗаполненностиДанных = Истина;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтруктуруРеквизитовИСпособовРасчетаОтпуска()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
СтруктураРеквизитовИСпособовРасчетаОтпуска = Новый Структура;
СтруктураРеквизитовИСпособовРасчетаОтпуска.Вставить("СреднийЗаработок", Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоКалендарнымДням);
СтруктураРеквизитовИСпособовРасчетаОтпуска.Вставить("СреднийЗаработокПоРабочимДням", Перечисления.СпособыРасчетаНачислений.ОплатаОтпускаПоШестидневке);
СпособыРасчетаСреднегоЗаработка = Новый ФиксированнаяСтруктура(СтруктураРеквизитовИСпособовРасчетаОтпуска);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба.РасчетДенежногоСодержания") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("РасчетДенежногоСодержания");
Модуль.ЗаполнитьРеквизитФормыНазначенияРасчетаДенежногоСодержания(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьЭлементовФормы(Форма, Объект)
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ОсновнойОтпуск",
"Доступность",
Объект.ПредоставитьОсновнойОтпуск);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"Компенсация",
"Доступность",
Объект.ПредоставитьКомпенсациюОсновногоОтпуска);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ВидРасчетаМатериальнойПомощиПриОтпуске",
"Доступность",
Объект.ПредоставитьМатериальнуюПомощьПриОтпуске);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ВидРасчетаЕдиновременнойВыплатыКОтпуску",
"Доступность",
Объект.ПредоставитьЕдиновременнуюВыплатуКОтпуску);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ПериодЗаКоторыйПредоставляетсяОтпуск",
"Доступность",
Объект.ПредоставитьОсновнойОтпуск Или Объект.ПредоставитьКомпенсациюОсновногоОтпуска);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ДополнительныеОтпуска",
"ТолькоПросмотр",
Не Объект.ПредоставитьДополнительныйОтпуск);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ДополнительныеОтпуска",
"ИзменятьСоставСтрок",
Форма.ДоступенВводНового);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ДополнительныеОтпуска",
"ИзменятьПорядокСтрок",
Форма.ДоступенВводНового);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ПредоставитьОтгул",
"Доступность",
Объект.ПредоставитьОсновнойОтпуск ИЛИ Объект.ПредоставитьДополнительныйОтпуск);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"КоличествоДнейОтгула",
"Доступность",
Объект.ПредоставитьОтгул);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ГруппаРасходОтгула",
"Доступность",
Объект.ПредоставитьОтгул);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"Основание",
"Доступность",
Объект.ПредоставитьОсновнойОтпуск);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ПродленияПереносыОтзывыСтраница",
"Видимость",
ЗначениеЗаполнено(Форма.Объект.ИсправленныйДокумент));
Если ЗначениеЗаполнено(Форма.Объект.ДокументЗаполнения) Тогда
ИменаБлокируемыхЭлементов = Новый Массив;
ИменаБлокируемыхЭлементов.Добавить("Организация");
ИменаБлокируемыхЭлементов.Добавить("Сотрудник");
ИменаБлокируемыхЭлементов.Добавить("ПредоставитьОсновнойОтпуск");
ИменаБлокируемыхЭлементов.Добавить("ДатаНачалаОсновногоОтпуска");
ИменаБлокируемыхЭлементов.Добавить("ДатаОкончанияОсновногоОтпуска");
ИменаБлокируемыхЭлементов.Добавить("КоличествоДнейОсновногоОтпуска");
ИменаБлокируемыхЭлементов.Добавить("ПредоставитьКомпенсациюОсновногоОтпуска");
ИменаБлокируемыхЭлементов.Добавить("ДнейЧасовКомпенсацииОтпуска");
ИменаБлокируемыхЭлементов.Добавить("ПредоставитьДополнительныйОтпуск");
ИменаБлокируемыхЭлементов.Добавить("ДополнительныеОтпускаВидОтпуска");
ИменаБлокируемыхЭлементов.Добавить("ДополнительныеОтпускаДатаНачала");
ИменаБлокируемыхЭлементов.Добавить("ДополнительныеОтпускаДатаОкончания");
ИменаБлокируемыхЭлементов.Добавить("ДополнительныеОтпускаКоличествоДней");
ИменаБлокируемыхЭлементов.Добавить("ДополнительныеОтпускаКоличествоДнейКомпенсации");
ИменаБлокируемыхЭлементов.Добавить("ДополнительныеОтпускаОснование");
ИменаБлокируемыхЭлементов.Добавить("ПродленияПереносыОтпускаГруппа");
ИменаБлокируемыхЭлементов.Добавить("ПредоставитьМатериальнуюПомощьПриОтпуске");
ИменаБлокируемыхЭлементов.Добавить("ПредоставитьЕдиновременнуюВыплатуКОтпуску");
ИменаБлокируемыхЭлементов.Добавить("ОсвобождатьСтавку");
Для каждого ИмяЭлемента Из ИменаБлокируемыхЭлементов Цикл
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
ИмяЭлемента,
"ТолькоПросмотр",
Истина);
КонецЦикла;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ДополнительныеОтпуска",
"ИзменятьСоставСтрок",
Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Форма.Элементы,
"ДополнительныеОтпуска",
"ИзменятьПорядокСтрок",
Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеНДФЛНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
Объект.НДФЛ.Загрузить(Параметр.НДФЛ);
Объект.ПримененныеВычетыНаДетейИИмущественные.Загрузить(Параметр.ПримененныеВычетыНаДетейИИмущественные);
ИзмененныеДанные.Загрузить(Параметр.ИзмененныеДанные);
Для Каждого СтрокаНачислений Из Параметр.Начисления Цикл
СтрокиНачисления = Объект.Начисления.НайтиСтроки(Новый Структура("Сотрудник, Начисление", СтрокаНачислений.Сотрудник, СтрокаНачислений.Начисление));
Если СтрокиНачисления.Количество() > 0 Тогда
СтрокиНачисления[0].СуммаВычета = СтрокаНачислений.СуммаВычета;
СтрокиНачисления[0].КодВычета = СтрокаНачислений.КодВычета;
КонецЕсли;
КонецЦикла;
Если ИзмененныеДанные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
РассчитатьДанныеФормы(Объект.Сотрудник, ОписаниеТаблицыНДФЛ());
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеУдержанийНаСервере(АдресВременногоХранилища)
Параметр = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
Объект.Удержания.Загрузить(Параметр.Удержания.Выгрузить());
Объект.ПогашениеЗаймов.Загрузить(Параметр.ПогашениеЗаймов.Выгрузить());
ИзмененныеДанные.Загрузить(Параметр.ИзмененныеДанные.Выгрузить());
Если ИзмененныеДанные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
РассчитатьДанныеФормы(Объект.Сотрудник, ОписаниеТаблицыУдержаний());
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойствоДокументРассчитан()
Если ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений Тогда
Объект.ДокументРассчитан = Истина;
КонецЕсли;
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(Форма)
Если Не Форма.ИспользуетсяРасчетЗарплаты
Или Не Форма.ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений Тогда
Возврат;
КонецЕсли;
ПроверяемыеТаблицы = Новый Массив;
ПроверяемыеТаблицы.Добавить("Начисления");
ПроверяемыеТаблицы.Добавить("НачисленияПерерасчет");
ПроверяемыеНачисления = Новый Массив;
Для каждого ПроверяемаяТаблица Из ПроверяемыеТаблицы Цикл
НачисленияДокумента = Новый Массив;
Для каждого Начисление Из Форма.Объект[ПроверяемаяТаблица] Цикл
НачисленияДокумента.Добавить(Начисление.Начисление);
КонецЦикла;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ПроверяемыеНачисления, НачисленияДокумента, Истина);
КонецЦикла;
АвтоОтметкаНезаполненного = ДатаВыплатыОбязательнаКЗаполнению(Форма.Объект.ПорядокВыплаты, ПроверяемыеНачисления);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, "ПланируемаяДатаВыплаты", "АвтоОтметкаНезаполненного", АвтоОтметкаНезаполненного);
Если Не АвтоОтметкаНезаполненного Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, "ПланируемаяДатаВыплаты", "ОтметкаНезаполненного", Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДатаВыплатыОбязательнаКЗаполнению(Знач ПорядокВыплаты, Знач ПроверяемыеНачисления)
УстановитьПривилегированныйРежим(Истина);
Возврат УчетНДФЛРасширенный.ДатаВыплатыОбязательнаКЗаполнению(ПорядокВыплаты, ПроверяемыеНачисления);
КонецФункции
&НаСервере
Процедура УстановитьВидимостьРасчетныхПолей()
ИменаЭлементов = Новый Массив;
ИменаЭлементов.Добавить("РезультатыСреднийЗаработок");
ИменаЭлементов.Добавить("НадписьДнейЧасов");
ИменаЭлементов.Добавить("ВидРасчетаОсновногоОтпуска");
ИменаЭлементов.Добавить("ВидРасчетаКомпенсацииОсновногоОтпуска");
ИменаЭлементов.Добавить("ВидРасчетаМатериальнойПомощиПриОтпуске");
ИменаЭлементов.Добавить("НачисленияСтраница");
ИменаЭлементов.Добавить("НачисленияПерерасчетСтраница");
ИменаЭлементов.Добавить("РассчитатьЗарплату");
ИменаЭлементов.Добавить("КорректировкаВыплатыГруппа");
ИменаЭлементов.Добавить("ГруппаРасчетДенежногоСодержания");
ИменаЭлементов.Добавить("УчитыватьМРОТПриОплатеПоСреднемуЗаработку");
ИменаЭлементов.Добавить("Сторнировать");
ИменаЭлементов.Добавить("ДоначислитьЗарплатуПриНеобходимости");
ЗарплатаКадрыРасширенный.УстановитьОтображениеПолейМногофункциональныхДокументов(ЭтаФорма, ИменаЭлементов);
Если ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений Тогда
УстановитьВидимостьПерерасчетов();
УстановитьВидимостьУдержаний();
УстановитьВидимостьОтпускаПострадавшимНаЧАЭС();
УстановитьСтраницуСреднегоЗаработка();
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПодробно.Пометка, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьВидимостьПолейНормыВремени(
ЭтотОбъект, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна), Объект.РассчитатьЗарплату);
РасчетЗарплатыРасширенныйКлиентСервер.ДокументыВыполненияНачисленийУстановитьРежимОтображенияПодробно(ЭтаФорма, Не Элементы.НачисленияПерерасчетПодробно.Пометка, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
ЗарплатаКадрыРасширенный.УстановитьОтображениеГруппыФормы(Элементы, "Результаты", "ТолькоПросмотр", Истина);
ЗарплатаКадрыРасширенный.УстановитьОтображениеГруппыФормы(Элементы, "ЗаполненностьДанныхИнфо", "ТолькоПросмотр", Истина);
ЗарплатаКадрыРасширенный.УстановитьОтображениеГруппыФормы(Элементы, "ГруппаПересчитать", "ТолькоПросмотр", Истина);
ЗарплатаКадрыРасширенный.УстановитьОтображениеГруппыФормы(Элементы, "СреднийЗаработокСтраницы", "ТолькоПросмотр", Истина);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НачисленияВидРасчета", "ТолькоПросмотр", Истина);
УстановитьПоляИсправления(ЭтаФорма);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.УправленческаяЗарплата") Тогда
Модуль = ОбщегоНазначения.ОбщийМодуль("УправленческаяЗарплата");
Модуль.ПриУстановкеВидимостиРасчетныхПолейДокументаОплатыТруда(ЭтаФорма);
КонецЕсли;
РасчетЗарплатыРасширенныйФормы.УстановитьДоступностьКорректировкиВыплаты(
ЭтаФорма, ИспользуетсяРасчетЗарплаты, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьРегистрацииНачислений()
ПраваНаДокумент = ЗарплатаКадрыРасширенный.ПраваНаМногофункциональныйДокумент(Объект);
РегистрацияНачисленийДоступна = ПраваНаДокумент.ПолныеПраваПоРолям;
ОграниченияНаУровнеЗаписей = Новый ФиксированнаяСтруктура(ПраваНаДокумент.ОграниченияНаУровнеЗаписей);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииРеквизитовОпределяющихОграниченияНаУровнеЗаписей()
БылиОграничения = ОграниченияНаУровнеЗаписей;
УстановитьДоступностьРегистрацииНачислений();
Если БылиОграничения.ЧтениеБезОграничений <> ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений
Или БылиОграничения.ИзменениеБезОграничений <> ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений
Или БылиОграничения.ИзменениеКадровыхДанных <> ОграниченияНаУровнеЗаписей.ИзменениеКадровыхДанных Тогда
Объект.ДокументРассчитан = ОграниченияНаУровнеЗаписей.ИзменениеБезОграничений;
Объект.Рассчитал = Неопределено;
ЗарплатаКадрыРасширенный.УстановитьВторогоОтветственногоВМногофункциональныхДокументах(ЭтаФорма, ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений);
УстановитьВидимостьРасчетныхПолей();
Если БылиОграничения.ЧтениеБезОграничений <> ОграниченияНаУровнеЗаписей.ЧтениеБезОграничений Тогда
ЗарплатаКадрыРасширенный.УстановитьВидимостьКомандПечатиМногофункциональногоДокумента(ЭтаФорма);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОжиданияМесяцНачисленияПриИзменении()
ОбработатьИзменениеМесяцНачисленияНаСервере();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаСервере
Процедура ОсновнойИлиДополнительныйОтпускПриИзмененииНаСервере()
ЗаполнитьСсылкиНачислений(Ложь);
ОбновитьИнформациюОПересеченииОтпускаСБольничным();
УстановитьДатуНачалаСобытия();
УстановитьПланируемуюДатыВыплаты();
УстановитьДоступностьЭлементовФормы(ЭтаФорма, Объект);
УстановитьОтметкуНезаполненогоПериодаЗаКоторыйПредоставляетсяОсновнойОтпуск();
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
КонецПроцедуры
&НаСервере
Процедура ВидРасчетаОсновногоОтпускаПриИзмененииНаСервере()
УчетРабочегоВремениРасширенныйФормы.УстановитьПозициюСелектора(ЭтаФорма, СостояниеПоВидуОтпуска());
ЗаполнитьПериодРасчетаСреднегоЗаработка();
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОчиститьРассчитанныеДанные();
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
УчетРабочегоВремениРасширенныйФормы.НастроитьУточнениеВидаВремени(ЭтаФорма, Объект.ВидРасчетаОсновногоОтпуска);
КонецПроцедуры
&НаСервере
Процедура ВидРасчетаКомпенсацииОсновногоОтпускаПриИзмененииНаСервере()
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
КонецПроцедуры
&НаСервере
Процедура УстановитьОтметкуНезаполненогоПериодаЗаКоторыйПредоставляетсяОсновнойОтпуск()
Отметка = Объект.ПредоставитьОсновнойОтпуск;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НачалоПериодаЗаКоторыйПредоставляетсяОтпуск",
"АвтоОтметкаНезаполненного",
Отметка);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"КонецПериодаЗаКоторыйПредоставляетсяОтпуск",
"АвтоОтметкаНезаполненного",
Отметка);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НачалоПериодаЗаКоторыйПредоставляетсяОтпуск",
"ОтметкаНезаполненного",
Отметка И Не ЗначениеЗаполнено(Объект.НачалоПериодаЗаКоторыйПредоставляетсяОтпуск));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"КонецПериодаЗаКоторыйПредоставляетсяОтпуск",
"ОтметкаНезаполненного",
Отметка И Не ЗначениеЗаполнено(Объект.КонецПериодаЗаКоторыйПредоставляетсяОтпуск));
КонецПроцедуры
&НаСервере
Процедура ПрочитатьПостоянныеКадровыеДанныеСотрудника()
УстановитьОтпускВРабочихДняхПоДоговору();
ДатаНачала = ?(Объект.ПредоставитьОсновнойОтпуск, Объект.ДатаНачалаОсновногоОтпуска, '00010101');
ДатаОкончания = ?(Объект.ПредоставитьОсновнойОтпуск, Объект.ДатаОкончанияОсновногоОтпуска, '00010101');
Если Объект.ПредоставитьДополнительныйОтпуск Тогда
Для каждого СтрокаДополнительногоОтпуска Из Объект.ДополнительныеОтпуска Цикл
Если ЗначениеЗаполнено(СтрокаДополнительногоОтпуска.ДатаНачала) Тогда
Если ЗначениеЗаполнено(ДатаНачала) Тогда
ДатаНачала = Мин(ДатаНачала, СтрокаДополнительногоОтпуска.ДатаНачала);
Иначе
ДатаНачала = СтрокаДополнительногоОтпуска.ДатаНачала;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаДополнительногоОтпуска.ДатаОкончания) Тогда
Если ЗначениеЗаполнено(ДатаОкончания) Тогда
ДатаОкончания = Макс(ДатаОкончания, СтрокаДополнительногоОтпуска.ДатаОкончания);
Иначе
ДатаОкончания = СтрокаДополнительногоОтпуска.ДатаОкончания;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьДругихСотрудниковФизическогоЛица(ДатаНачала, ДатаОкончания)
ЭтотОбъект.ДругиеСотрудникиФизическогоЛица = Новый ФиксированныйМассив(Новый Массив);
Если ЗначениеЗаполнено(Объект.Сотрудник) Тогда
КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.Сотрудник), "ФизическоеЛицо, ГоловнаяОрганизация");
Если КадровыеДанныеСотрудников.Количество() > 0 Тогда
КадровыеДанныеСотрудника = КадровыеДанныеСотрудников[0];
Объект.ФизическоеЛицо = КадровыеДанныеСотрудника.ФизическоеЛицо;
ГоловнаяОрганизация = КадровыеДанныеСотрудника.ГоловнаяОрганизация;
КонецЕсли;
ЭтотОбъект.ДругиеСотрудникиФизическогоЛица = КадровыйУчетФормыРасширенный.ДругиеСотрудникиФизическогоЛица(
Объект.ФизическоеЛицо, ГоловнаяОрганизация, Объект.Сотрудник, ДатаНачала, ДатаОкончания);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтпускВРабочихДняхПоДоговору()
ОтпускВРабочихДняхПоДоговору = ОстаткиОтпусков.ОтпускСотрудникаВРабочихДняхПоДоговору(Объект.Сотрудник, Объект.ДатаНачалаСобытия);
КонецПроцедуры
&НаСервере
Процедура ОбновитьДлительностьИнтервалов()
Документы.Отпуск.ОбновитьДлительностьИнтервалов(Объект, ОтпускВРабочихДняхПоДоговору);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьНадписьРасшифровкаОстаткаОтпуска(Форма)
Если ЗначениеЗаполнено(Форма.Объект.Сотрудник) Тогда
Форма.РасшифровкаОстаткаОтпуска = НСтр("ru='Как сотрудник использовал отпуск?'");
Иначе
Форма.РасшифровкаОстаткаОтпуска = "";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РасшифровкаОстаткаОтпускаНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
УправлениеПечатьюКлиент.ВыполнитьКомандуПечати("Справочник.Сотрудники", "СправкаПоОтпускамСотрудника",
ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Объект.Сотрудник), ЭтаФорма,
Новый Структура("ДатаОстатков, ЭтоРасчетПриУвольнении", Объект.ДатаНачалаСобытия, Ложь));
КонецПроцедуры
&НаСервере
Процедура ДополнительныеОтпускаПриОкончанииРедактированияНаСервере()
УстановитьВидимостьОтсутствияПоДругимМестамРаботы();
Если ПерезаполнитьПриОкончанииРедактирования Тогда
УстановитьПредупреждениеДокументНеРассчитан(ЭтотОбъект);
ОчиститьРассчитанныеДанные();
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
КонецЕсли;
ОбновитьФлажкиНаличияВидовОтпусков();
УстановитьПараметрыВыбораВидаОтпуска(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ДополнительныеОтпускаПослеУдаленияНаСервере()
ОбновитьФлажкиНаличияВидовОтпусков();
УстановитьПараметрыВыбораВидаОтпуска(ЭтотОбъект);
УстановитьВидимостьОтпускаПострадавшимНаЧАЭС();
УстановитьДатуНачалаСобытия();
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокФлажкаРассчитатьЗарплату()
ПредставлениеМесяца = ЗарплатаКадрыКлиентСервер.ПолучитьПредставлениеМесяца(НачальныйПериодРасчетаЗарплаты().ДатаНачала);
ТекстЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Рассчитать зарплату за %1'"), ПредставлениеМесяца);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "РассчитатьЗарплату", "Заголовок", ТекстЗаголовка);
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокСтраницыДополнительныеОтпуска()
ИспользуютсяОтгулы = ПолучитьФункциональнуюОпцию("ИспользоватьОтгулы");
Если ИспользуютсяОтгулы Тогда
ТекстЗаголовка = НСтр("ru = 'Дополнительные отпуска, отгулы'");
Иначе
ТекстЗаголовка = НСтр("ru = 'Дополнительные отпуска'");
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ГруппаДополнительныеОтпуска", "Заголовок", ТекстЗаголовка);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ГруппаОтгулы", "Видимость", ИспользуютсяОтгулы);
КонецПроцедуры
&НаСервере
Процедура УточнитьВозможностьРасчетаЗарплаты()
НачальныйПериод = НачальныйПериодРасчетаЗарплаты();
Если НачальныйПериод.ЭтоПериодИсправленногоДокумента Тогда
Объект.РассчитатьЗарплату = НачальныйПериод.ВыполнялсяРасчетЗарплаты;
ИначеЕсли ОтпускНачинаетсяВСледующемМесяце(НачальныйПериод.ДатаНачала) Тогда
Объект.РассчитатьЗарплату = Истина;
ИначеЕсли Не ДоступенРасчетЗарплаты(НачальныйПериод.ДатаНачала) Тогда
Объект.РассчитатьЗарплату = Ложь;
КонецЕсли;
РассчитатьЗарплатуПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Функция ОтпускНачинаетсяВСледующемМесяце(НачалоПериода)
Возврат Документы.Отпуск.ОтпускНачинаетсяВСледующемМесяце(Объект, НачалоПериода);
КонецФункции
&НаСервере
Функция ДоступенРасчетЗарплаты(НачалоПериода)
Возврат Объект.ДатаНачалаСобытия > НачалоПериода
И Объект.ДатаНачалаСобытия <= КонецМесяца(НачалоПериода)
И ЭтоМежрасчетнаяВыплата(Объект.ПорядокВыплаты);
КонецФункции
&НаСервере
Функция НачальныйПериодРасчетаЗарплаты()
Возврат Документы.Отпуск.НачальныйПериодРасчетаЗарплаты(Объект);
КонецФункции
&НаСервере
Функция ДанныеДокументаДляПроведения()
ДокументОбъект = РеквизитФормыВЗначение("Объект");
РеквизитыВДанные(ДокументОбъект);
Возврат ДокументОбъект.ДанныеДляВременнойРегистрацииНачислений();
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЕстьОплатаВидаОтпуска(Объект, ВидОтпуска)
ЕстьОплатаВидаОтпуска = Ложь;
Если Не ВидОтпуска = Неопределено
И Объект.ПредоставитьДополнительныйОтпуск Тогда
Отбор = Новый Структура("ВидОтпуска", ВидОтпуска);
ЕстьОплатаВидаОтпуска = Объект.ДополнительныеОтпуска.НайтиСтроки(Отбор).Количество() > 0;
КонецЕсли;
Возврат ЕстьОплатаВидаОтпуска;
КонецФункции
&НаСервере
Процедура УстановитьУсловноеОформлениеДополнительныхОтпусков()
Если ПолучитьФункциональнуюОпциюФормы("ИспользоватьОтпускаДляПострадавшихВАварииЧАЭС") Тогда
ЭлементУсловногоОформления = ЭтотОбъект.УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", "<не предусмотрена>");
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ГоризонтальноеПоложение", ГоризонтальноеПоложение.Центр);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ДополнительныеОтпуска.ВидОтпуска");
ЭлементОтбора.ПравоеЗначение = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускПострадавшимВАварииЧАЭС");
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДополнительныеОтпускаКоличествоДнейКомпенсации");
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДополнительныеОтпускаВидРасчетаКомпенсации");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФормыПриИсправленииИзБольничного()
ДанныеБольничного = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ОснованиеПриостановки,
"ДатаНачала, ДатаОкончания, ПериодРегистрации");
ДатаНачалаБольничного = ДанныеБольничного.ДатаНачала;
ДатаОкончанияБольничного = ДанныеБольничного.ДатаОкончания;
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.ПериодРегистрации", "МесяцНачисленияСтрокой");
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"Страницы",
"ТекущаяСтраница",
Элементы.ПродленияПереносыОтзывыСтраница);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы,
"НадписьПродлитьОтпуск",
"Видимость",
Истина);
КонецПроцедуры
&НаСервере
Функция СведенияОбНДФЛ(ФизическоеЛицо = Неопределено) Экспорт
ДополнительныеСведения = УчетНДФЛФормыРасширенный.ДополнительныеДанныеДляПолученияСведенийОДоходахНДФЛДокумента();
ДополнительныеСведения.МесяцНачисления = Объект.ПериодРегистрации;
ДополнительныеСведения.ПорядокВыплаты = Объект.ПорядокВыплаты;
ДополнительныеСведения.ПланируемаяДатаВыплаты = Объект.ПланируемаяДатаВыплаты;
СведенияОДоходахНДФЛ = УчетНДФЛФормыРасширенный.СведенияОДоходахНДФЛДокумента(Объект, "Начисления,НачисленияПерерасчет", ДополнительныеСведения);
АдресСведенийОбНДФЛ = УчетНДФЛФормыРасширенный.СведенияОбНДФЛ(ЭтотОбъект);
ДанныеОбНДФЛ = ПолучитьИзВременногоХранилища(АдресСведенийОбНДФЛ);
ДанныеОбНДФЛ.Вставить("СведенияОДоходах", СведенияОДоходахНДФЛ.СведенияОДоходах);
ДанныеОбНДФЛ.Вставить("ВычетыКДоходам", СведенияОДоходахНДФЛ.ВычетыКДоходам);
Возврат ПоместитьВоВременноеХранилище(ДанныеОбНДФЛ, ЭтаФорма.УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция СведенияОбУдержаниях() Экспорт
Возврат РасчетЗарплатыРасширенный.СведенияОбУдержаниях(ЭтаФорма);
КонецФункции
&НаСервере
Функция ДанныеКорректировокВыплаты()
Возврат РасчетЗарплатыРасширенныйФормы.ДанныеКорректировокВыплаты(ЭтаФорма);
КонецФункции
&НаСервере
Процедура ОбновитьДанныеКорректировокВыплатыНаСервере(АдресВременногоХранилища)
РасчетЗарплатыРасширенныйФормы.ОбновитьДанныеКорректировокВыплаты(ЭтаФорма, АдресВременногоХранилища);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьЗначениеКорректировкиВыплаты()
КорректировкаВыплаты = Объект.КорректировкиВыплаты.Итог("КорректировкаВыплаты");
КонецПроцедуры
&НаСервере
Процедура КорректировкиВыплатыВДанные(ТекущийОбъект)
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьСтатьиФинансированияЗарплатаРасширенный") Тогда
ТекущийОбъект.КорректировкиВыплаты.Очистить();
Если КорректировкаВыплаты <> 0 Тогда
НоваяСтрока = ТекущийОбъект.КорректировкиВыплаты.Добавить();
НоваяСтрока.КорректировкаВыплаты = КорректировкаВыплаты;
Если ЗначениеЗаполнено(ТекущийОбъект.Сотрудник) Тогда
НоваяСтрока.ФизическоеЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийОбъект.Сотрудник, "ФизическоеЛицо");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПериодПриостановки(СсылкаНаБольничный, Идентификатор)
Строка = Объект.ПериодыПриостановкиОтпуска.НайтиПоИдентификатору(Идентификатор);
ПериодыОтсутствий = Документы.Отпуск.ПериодыОтсутствий(Объект);
ПериодОтсутствия = Документы.Отпуск.ПериодОтсутствия(ПериодыОтсутствий);
Если ЗначениеЗаполнено(СсылкаНаБольничный) Тогда
ДанныеПриостановки = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СсылкаНаБольничный, "ДатаНачала, ДатаОкончания");
Причина = СсылкаНаБольничный;
Иначе
ДанныеПриостановки = Новый Структура("ДатаНачала, ДатаОкончания");
ДанныеПриостановки.ДатаНачала = Строка.ДатаНачалаПериода;
ДанныеПриостановки.ДатаОкончания = Строка.ДатаОкончанияПериода;
Причина = СтрШаблон(НСтр("ru='Период приостановки %1-%2'"),
Формат(Строка.ДатаНачалаПериода, "ДФ=dd.MM.yyyy"),
Формат(Строка.ДатаОкончанияПериода, "ДФ=dd.MM.yyyy"));
КонецЕсли;
Если Не (ОбщегоНазначенияБЗК.ИнтервалыПересекаются(
ДанныеПриостановки.ДатаНачала, ДанныеПриостановки.ДатаОкончания,
ПериодОтсутствия.НачалоПериода, ПериодОтсутствия.ОкончаниеПериода)) Тогда
СообщениеПользователю = СтрШаблон(НСтр("ru='%1 не пересекается с данным отпуском'"), Причина);
ОбщегоНазначения.СообщитьПользователю(СообщениеПользователю);
СсылкаНаБольничный = Документы.БольничныйЛист.ПустаяСсылка();
Возврат;
КонецЕсли;
ПериодПересечения = ОбщегоНазначенияБЗК.ПериодПересеченияДвухИнтервалов(ДанныеПриостановки.ДатаНачала,
ДанныеПриостановки.ДатаОкончания,ПериодОтсутствия.НачалоПериода, ПериодОтсутствия.ОкончаниеПериода);
Строка.ДатаНачалаПериода = ПериодПересечения.ДатаНачала;
Строка.ДатаОкончанияПериода = ПериодПересечения.ДатаОкончания;
Документы.Отпуск.ЗаполнитьКоличествоДнейПриостановки(Объект, Строка);
КонецПроцедуры
&НаКлиенте
Процедура ПерезаполнитьПериодыПересечения()
Если Объект.ПериодыПриостановкиОтпуска.Количество() > 0 Тогда
ПерезаполнитьПериодыПересеченияНаСервере();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьДействияПриИзмененииКоличестваДнейОсновногоОтпускаИРассчитать()
КоличествоДнейОсновногоОтпускаПриИзмененииНаСервере();
ПерезаполнитьПериодыПересечения();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоложенныеВидыОтпусков()
Если Не ЗначениеЗаполнено(Объект.Сотрудник)
Или Не ЗначениеЗаполнено(Объект.НачалоОтпуска)
Или Не ЗначениеЗаполнено(Объект.ОкончаниеОтпуска) Тогда
Возврат;
КонецЕсли;
ОсновнойОтпуск = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(ОсновнойОтпуск, ОтпускВРабочихДняхПоДоговору);
КоличествоДнейОтпуска = УчетРабочегоВремениРасширенный.ДлительностьИнтервала(
Объект.Сотрудник,
Объект.НачалоОтпуска,
Объект.ОкончаниеОтпуска,
ОписаниеВидаОтпуска.СпособРасчетаПоКалендарнымДням,
ОписаниеВидаОтпуска.ЕжегодныйОтпуск);
ПараметрыОстатков = ОстаткиОтпусков.ОписаниеПараметровДляОстаткиОтпусков();
ПараметрыОстатков.Сотрудники = Объект.Сотрудник;
ПараметрыОстатков.ДатаОстатков = Объект.НачалоОтпуска;
ПараметрыОстатков.ИсключаемыеРегистраторы = Объект.Ссылка;
ОстаткиОтпусковСотрудника = ОстаткиОтпусков.ОстаткиОтпусков(ПараметрыОстатков);
ОстаткиОтпусковСотрудника.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число"));
НайденныеСтроки = ОстаткиОтпусковСотрудника.НайтиСтроки(Новый Структура("ВидОтпуска", ОсновнойОтпуск));
Для Каждого СтрокаОстатка Из НайденныеСтроки Цикл
СтрокаОстатка.Приоритет = 1;
КонецЦикла;
ОстаткиОтпусковСотрудника.Сортировать("РабочийГодДатаНачала, Приоритет Убыв, ВидОтпуска");
ВидыОтпусков = ОстаткиОтпусков.РаспределениеОбщегоПериодаОтпускаПоВидамОтпусков(ОстаткиОтпусковСотрудника, КоличествоДнейОтпуска);
ОбновитьРасчетДенежногоСодержания = Истина;
ПродолжительностьОтпуска = ВидыОтпусков[ОсновнойОтпуск];
Если ПродолжительностьОтпуска = Неопределено Тогда
Объект.ПредоставитьОсновнойОтпуск = Ложь;
ОсновнойИлиДополнительныйОтпускПриИзмененииНаСервере();
Иначе
Объект.ПредоставитьОсновнойОтпуск = Истина;
Объект.ДатаНачалаОсновногоОтпуска = Объект.НачалоОтпуска;
Объект.КоличествоДнейОсновногоОтпуска = ПродолжительностьОтпуска;
Объект.ДатаОкончанияОсновногоОтпуска = ОстаткиОтпусковКлиентСервер.ДатаОкончанияОтпуска(Объект.Сотрудник, Объект.ДатаНачалаОсновногоОтпуска, Объект.КоличествоДнейОсновногоОтпуска, ОписаниеВидаОтпуска);
ДатаНачалаПриИзмененииНаСервере();
КонецЕсли;
Объект.ПредоставитьДополнительныйОтпуск = Ложь;
Объект.ДополнительныеОтпуска.Очистить();
НачалоОтпуска = ?(Объект.ПредоставитьОсновнойОтпуск, Объект.ДатаОкончанияОсновногоОтпуска + 86400, Объект.НачалоОтпуска);
Для Каждого КлючИЗначение Из ВидыОтпусков Цикл
ВидОтпуска = КлючИЗначение.Ключ;
ПродолжительностьОтпуска = КлючИЗначение.Значение;
Если ВидОтпуска = ОсновнойОтпуск Тогда
Продолжить;
КонецЕсли;
Объект.ПредоставитьДополнительныйОтпуск = Истина;
ОписаниеВидаОтпуска = ОстаткиОтпусков.ОписаниеВидаОтпуска(ВидОтпуска, ОтпускВРабочихДняхПоДоговору);
НоваяСтрока = Объект.ДополнительныеОтпуска.Добавить();
НоваяСтрока.ВидОтпуска = ВидОтпуска;
НоваяСтрока.ДатаНачала = НачалоОтпуска;
НоваяСтрока.КоличествоДней = ПродолжительностьОтпуска;
НоваяСтрока.ДатаОкончания = ОстаткиОтпусковКлиентСервер.ДатаОкончанияОтпуска(Объект.Сотрудник, НоваяСтрока.ДатаНачала, НоваяСтрока.КоличествоДней, ОписаниеВидаОтпуска);
НоваяСтрока.ЭтоЕжегодныйОтпуск = ОписаниеВидаОтпуска.ЕжегодныйОтпуск;
ДополнительныеОтпускаДатаНачалаПриИзмененииНаСервере(НоваяСтрока.ПолучитьИдентификатор(), Ложь);
НачалоОтпуска = НоваяСтрока.ДатаОкончания + 86400;
КонецЦикла;
УстановитьДоступностьЭлементовФормы(ЭтаФорма, Объект);
УстановитьДоступностьИЗначениеПоУмолчаниюСвойстваУчитыватьМРОТ();
КонецПроцедуры
&НаСервере
Процедура УстановитьОбщийПериодОтпуска()
Документы.Отпуск.УстановитьОбщийПериодОтпуска(Объект);
КонецПроцедуры
#Область ПараметрыВыбораВидаОтпуска
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьПараметрыВыбораВидаОтпуска(Форма)
МассивПараметровВыбора = ПараметрыВыбораВидаДополнительногоОтпуска(Форма);
МассивДоступныхВидовОтпусков = ВидыОтпусковНеВыбранныеВДокументе(Форма.Объект);
НовыеПараметрыВыбора = ПараметрыВыбораБезОтбораПоСсылке(МассивПараметровВыбора);
НовыеПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.Ссылка", Новый ФиксированныйМассив(МассивДоступныхВидовОтпусков)));
НовыеПараметрыВыбора = Новый ФиксированныйМассив(НовыеПараметрыВыбора);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, "ДополнительныеОтпускаВидОтпуска", "ПараметрыВыбора", НовыеПараметрыВыбора);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВидыОтпусковНеВыбранныеВДокументе(Объект)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ВыбранныеВидыОтпусков", Объект.ДополнительныеОтпуска.Выгрузить(, "ВидОтпуска").ВыгрузитьКолонку("ВидОтпуска"));
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВидыОтпусков.Ссылка
|ИЗ
| Справочник.ВидыОтпусков КАК ВидыОтпусков
|ГДЕ
| НЕ ВидыОтпусков.Ссылка В (&ВыбранныеВидыОтпусков)";
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
КонецФункции
&НаКлиенте
Процедура ДополнитьПараметрыВыбораВидаОтпускаВидомОтпускаТекущейСтроки()
ТекущийВидОтпуска = Элементы.ДополнительныеОтпуска.ТекущиеДанные.ВидОтпуска;
Если НЕ ЗначениеЗаполнено(ТекущийВидОтпуска) Тогда
Возврат;
КонецЕсли;
МассивПараметровВыбора = ПараметрыВыбораВидаДополнительногоОтпуска(ЭтотОбъект);
НовыеПараметрыВыбора = ПараметрыВыбораБезОтбораПоСсылке(МассивПараметровВыбора);
МассивДоступныхВидовОтпусков = ЗначениеПараметраВыбораОтборПоСсылке(МассивПараметровВыбора);
МассивДоступныхВидовОтпусков.Добавить(ТекущийВидОтпуска);
НовыеПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.Ссылка", Новый ФиксированныйМассив(МассивДоступныхВидовОтпусков)));
НовыеПараметрыВыбора = Новый ФиксированныйМассив(НовыеПараметрыВыбора);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДополнительныеОтпускаВидОтпуска", "ПараметрыВыбора", НовыеПараметрыВыбора);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьВидОтпускаТекущейСтрокиИзПараметровВыбораВидаОтпуска()
ТекущийВидОтпуска = Элементы.ДополнительныеОтпуска.ТекущиеДанные.ВидОтпуска;
Если НЕ ЗначениеЗаполнено(ТекущийВидОтпуска) Тогда
Возврат;
КонецЕсли;
МассивПараметровВыбора = ПараметрыВыбораВидаДополнительногоОтпуска(ЭтотОбъект);
МассивДоступныхВидовОтпусков = ЗначениеПараметраВыбораОтборПоСсылке(МассивПараметровВыбора);
ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(МассивДоступныхВидовОтпусков, ТекущийВидОтпуска);
НовыеПараметрыВыбора = ПараметрыВыбораБезОтбораПоСсылке(МассивПараметровВыбора);
НовыеПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.Ссылка", Новый ФиксированныйМассив(МассивДоступныхВидовОтпусков)));
НовыеПараметрыВыбора = Новый ФиксированныйМассив(НовыеПараметрыВыбора);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДополнительныеОтпускаВидОтпуска", "ПараметрыВыбора", НовыеПараметрыВыбора);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыВыбораВидаДополнительногоОтпуска(Форма)
МассивПараметровВыбора = ОбщегоНазначенияКлиентСервер.ЗначениеСвойстваЭлементаФормы(Форма.Элементы, "ДополнительныеОтпускаВидОтпуска", "ПараметрыВыбора");
Если МассивПараметровВыбора = Неопределено Тогда
МассивПараметровВыбора = Новый ФиксированныйМассив(Новый Массив);
КонецЕсли;
Возврат МассивПараметровВыбора;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыВыбораБезОтбораПоСсылке(МассивПараметровВыбора)
НовыеПараметрыВыбора = Новый Массив;
Для каждого Параметр Из МассивПараметровВыбора Цикл
Если Параметр.Имя <> "Отбор.Ссылка" Тогда
НовыеПараметрыВыбора.Добавить(Параметр);
КонецЕсли;
КонецЦикла;
Возврат НовыеПараметрыВыбора;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЗначениеПараметраВыбораОтборПоСсылке(МассивПараметровВыбора)
ЗначениеПараметраВыбораОтборПоСсылке = Новый Массив;
Для каждого Параметр Из МассивПараметровВыбора Цикл
Если Параметр.Имя = "Отбор.Ссылка" Тогда
Для каждого ДоступныйВидОтпуска Из Параметр.Значение Цикл
ЗначениеПараметраВыбораОтборПоСсылке.Добавить(ДоступныйВидОтпуска);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат ЗначениеПараметраВыбораОтборПоСсылке;
КонецФункции
&НаКлиенте
Процедура ПроверитьПересечениеПериодовОтсутствияНаКлиенте(Отказ, ПараметрыЗаписи, ЗакрытьПослеЗаписи, РезультатПроверки)
ДанныеСотрудника = РезультатПроверки.ДанныеСотрудников.Получить(Объект.Сотрудник);
Если ДанныеСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
Если РезультатПроверки.Отказ Тогда
ТекстСообщения = НСтр("ru = 'На период %1 сотруднику уже зарегистрирован отпуск документом %2.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДанныеСотрудника.ПредставлениеПериода, ДанныеСотрудника.Регистратор);
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения, , , , Отказ);
Возврат;
КонецЕсли;
Отказ = Истина;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
ДополнительныеПараметры.Вставить("ЗакрытьПослеЗаписи", ЗакрытьПослеЗаписи);
ТекстВопроса = ?(ДанныеСотрудника.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияСотрудника.Увольнение"),
НСтр("ru = 'Сотрудник был уволен %1 (%2). Провести документ?'"),
НСтр("ru = 'На период %1 сотруднику уже зарегистрировано отсутствие документом %2. Провести документ?'"));
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ДанныеСотрудника.ПредставлениеПериода, ДанныеСотрудника.Регистратор);
Оповещение = Новый ОписаниеОповещения("ПроверитьПересечениеПериодовОтсутствияНаКлиентеЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ОКОтмена);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьПересечениеПериодовОтсутствияНаКлиентеЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> КодВозвратаДиалога.ОК Тогда
Возврат;
КонецЕсли;
ПараметрыЗаписи = ДополнительныеПараметры.ПараметрыЗаписи;
ПараметрыЗаписи.Вставить("ПроверкаПередЗаписьюВыполнена", Истина);
Если Записать(ПараметрыЗаписи) И ДополнительныеПараметры.ЗакрытьПослеЗаписи Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьПересечениеПериодовОтсутствияНаСервере()
ДокументОбъект = РеквизитФормыВЗначение("Объект");
Возврат ДокументОбъект.РезультатПроверкиПересеченийПериодовОтсутствия();
КонецФункции
&НаКлиенте
Процедура ЗаписатьИЗакрытьНаКлиенте(Результат, ДополнительныеПараметры) Экспорт
ПараметрыЗаписи = Новый Структура("РежимЗаписи", ?(Объект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
ЗаписатьНаКлиенте(Истина, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьНаКлиенте(ЗакрытьПослеЗаписи, ПараметрыЗаписи)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ЗакрытьПослеЗаписи", ЗакрытьПослеЗаписи);
ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
РасчетЗарплатыРасширенныйКлиент.ВыполнитьРасчетСотрудникаПередЗаписьюДокумента(
ЭтаФорма, "ЗаписатьНаКлиентеЗавершение", ДополнительныеПараметры, РегистрацияНачисленийДоступна, ВыполнятьПредварительныйРасчетДокумента);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьНаКлиентеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
Если РасчетНеобходимоВыполнить Тогда
Если НеобходимоПерезаполнитьНачисления Тогда
ВыполнитьПерезаполнениеИРасчетНачисленийНаСервере();
Иначе
ВыполнитьРасчетНачисленийНаСервере();
КонецЕсли;
КонецЕсли;
ПараметрыЗаписи = ДополнительныеПараметры.ПараметрыЗаписи;
ЗакрытьПослеЗаписи = ДополнительныеПараметры.ЗакрытьПослеЗаписи;
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Отказ = Ложь;
РасчетЗарплатыРасширенныйКлиент.ПроверитьПовторениеКонтролируемыхНачислений(ЭтаФорма, Отказ, ПараметрыЗаписи, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
Если Отказ Тогда
Возврат;
КонецЕсли;
РезультатыПроверки = ПроверитьДанныеДокументаПриПроведении();
ПроверитьПересечениеПериодовОтсутствияНаКлиенте(Отказ, ПараметрыЗаписи, ЗакрытьПослеЗаписи, РезультатыПроверки.ПересечениеПериодовОтсутствия);
Если Отказ Тогда
Возврат;
КонецЕсли;
КонецЕсли;
ПараметрыЗаписи.Вставить("ПроверкаПередЗаписьюВыполнена", Истина);
Если Записать(ПараметрыЗаписи) И ЗакрытьПослеЗаписи Тогда
Закрыть();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьДанныеДокументаПриПроведении()
РезультатПроверки = Новый Структура;
РезультатПроверки.Вставить("ПересечениеПериодовОтсутствия", ПроверитьПересечениеПериодовОтсутствияНаСервере());
Возврат РезультатПроверки;
КонецФункции
#КонецОбласти
#Область РаспределениеПоТерриториямУсловиямТруда
&НаКлиенте
Процедура ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(ОписаниеТаблицы, Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ПараметрыДляВыбора = РасчетЗарплатыРасширенныйКлиент.ПараметрыДляВыбораПолеРаспределениеПоТерриториямУсловиямТруда();
ПараметрыДляВыбора.Форма = ЭтаФорма;
ПараметрыДляВыбора.ОписаниеДокумента = ОписаниеДокумента(ЭтаФорма);
ПараметрыДляВыбора.ОписаниеТаблицы = ОписаниеТаблицы;
РасчетЗарплатыРасширенныйКлиент.ПриНажатииПолеРаспределениеПоТерриториямУсловиямТруда(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка, ПараметрыДляВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТрудаНаСервере(ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПараметрыФормыРаспределениеПоТерриториямУсловиямТруда(ЭтаФорма, ПараметрыФормы, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока) Экспорт
ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТрудаНаСервере(РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока)
РасчетЗарплатыРасширенныйФормы.ПеренестиРезультатыРедактированияРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, РезультатРедактирования, ОписаниеТаблицы, ВыбраннаяСтрока);
КонецПроцедуры
&НаСервере
Функция ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда()
Описания = Новый Массив;
Описания.Добавить(ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
Описания.Добавить(ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
Возврат Описания;
КонецФункции
#КонецОбласти
#Область КлючевыеРеквизитыЗаполненияФормы
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
Возврат Новый Массив;
КонецФункции
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов() Экспорт
Массив = Новый Массив;
Если ИспользуетсяРасчетЗарплаты Тогда
Массив.Добавить(Новый Структура("ЭлементФормы", "ПериодРегистрации"));
Массив.Добавить(Новый Структура("ЭлементФормы", "Организация"));
Массив.Добавить(Новый Структура("ЭлементФормы", "Сотрудник"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПредоставитьОсновнойОтпуск"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаНачалаОсновногоОтпуска"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДатаОкончанияОсновногоОтпуска"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПредоставитьМатериальнуюПомощьПриОтпуске"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПредоставитьЕдиновременнуюВыплатуКОтпуску"));
Массив.Добавить(Новый Структура("ЭлементФормы", "РассчитатьЗарплату"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПредоставитьКомпенсациюОсновногоОтпуска"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДнейЧасовКомпенсацииОтпуска"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ВидРасчетаОсновногоОтпуска"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ВидРасчетаКомпенсацииОсновногоОтпуска"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ВидРасчетаМатериальнойПомощиПриОтпуске"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ВидРасчетаЕдиновременнойВыплатыКОтпуску"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ПредоставитьДополнительныйОтпуск"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДополнительныеОтпускаВидОтпуска"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДополнительныеОтпускаВидРасчета"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДополнительныеОтпускаДатаНачала"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДополнительныеОтпускаДатаОкончания"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДополнительныеОтпускаКоличествоДнейКомпенсации"));
Массив.Добавить(Новый Структура("ЭлементФормы", "ДополнительныеОтпускаВидРасчетаКомпенсации"));
КонецЕсли;
Для каждого ОписаниеЭлемента Из Массив Цикл
ОписаниеЭлемента.Вставить("ПредупреждениеПриРедактировании", ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыТекстПредупрежденияДокументовСАвтоматическимРасчетом());
КонецЦикла;
Возврат Массив
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(Форма)
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(Форма, ?(ЕстьФиксированныеДанные(Форма), ОтображениеПредупрежденияПриРедактировании.Отображать, ОтображениеПредупрежденияПриРедактировании.Авто));
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЕстьФиксированныеДанные(Форма)
Если Не Форма.РегистрацияНачисленийДоступна Тогда
Возврат Ложь;
КонецЕсли;
ИсправленныйДокументЗаполнен = ЗначениеЗаполнено(Форма.Объект.ИсправленныйДокумент);
Возврат РасчетЗарплатыРасширенныйКлиентСервер.ЕстьФиксированныеДанныеВТаблице(Форма, ОписаниеТаблицыНачислений(Форма.РегистрацияНачисленийДоступна), ИсправленныйДокументЗаполнен)
Или РасчетЗарплатыРасширенныйКлиентСервер.ЕстьФиксированныеДанныеВТаблице(Форма, ОписаниеТаблицыПерерасчетов(Форма.РегистрацияНачисленийДоступна), ИсправленныйДокументЗаполнен);
КонецФункции
#КонецОбласти
&НаСервере
Процедура ОтгулПриИзмененииНаСервере()
Если Объект.ПредоставитьОтгул Тогда
ЗаполнитьНакопленнымиОтгуламиНаСервере();
КонецЕсли;
УстановитьДоступностьЭлементовФормы(ЭтаФорма, Объект);
ЗаполнитьОтработанныеДни();
ЗаполнитьОтработанныеЧасы();
УстановитьПредставлениеОтработанныхДней();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНакопленнымиОтгуламиНаСервере()
ДниЧасыНакопленныхОтгулов = УчетРабочегоВремениРасширенный.ДниЧасыНакопленныхОтгулов(Объект.Организация, Объект.Сотрудник, Объект.Дата, Объект.Ссылка, Объект.ИсправленныйДокумент);
ЗаполнитьЗначенияСвойств(Объект, ДниЧасыНакопленныхОтгулов);
НачалоОтгула = НачалоОтгула(ЭтаФорма);
ДанныеСотрудников = УчетОтгулов.СведенияОбОтработанныхЧасах(Объект.Сотрудник, НачалоОтгула, Объект.Ссылка, Объект.ИсправленныйДокумент);
ДанныеСотрудника = ДанныеСотрудников.Получить(Объект.Сотрудник);
Если ДанныеСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
ИсключаемыеЧасы = 0;
ОтработанныеДниВсего = 0;
ОтработанныеЧасыВсего = 0;
Для Каждого ОтработанныйДень Из ДанныеСотрудника.НеиспользованныеОтработанныеДни Цикл
ОтработанныеЧасы = ДанныеСотрудника.ОтработанныеЧасы[ОтработанныйДень];
Если ОтработанныеЧасы = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ОтработанныйДень >= НачалоОтгула Тогда
Прервать;
КонецЕсли;
Если ДобавитьМесяц(ОтработанныйДень, 12) < НачалоОтгула Тогда
ИсключаемыеЧасы = ИсключаемыеЧасы + ОтработанныеЧасы;
Продолжить;
КонецЕсли;
ОтработанныеДниВсего = ОтработанныеДниВсего + 1;
ОтработанныеЧасыВсего = ОтработанныеЧасыВсего + ОтработанныеЧасы;
КонецЦикла;
Объект.РасходЧасовОтгула = Макс(Объект.РасходЧасовОтгула - ИсключаемыеЧасы, 0);
Объект.КоличествоДнейОтгула = Объект.РасходДнейОтгула + ОтработанныеДниВсего
+ Окр(Макс(Объект.РасходЧасовОтгула - ОтработанныеЧасыВсего, 0) / 8, 0);
КонецПроцедуры
#Область ОтсутствияПоДругимМестамРаботы
&НаСервере
Процедура ЗаполнитьОтсутствияПоДругимМестамРаботы()
ПериодыОтсутствий = Документы.Отпуск.ПериодыОтсутствий(Объект);
ПериодОтсутствия = Документы.Отпуск.ПериодОтсутствия(ПериодыОтсутствий);
Если Не ЗначениеЗаполнено(ПериодОтсутствия.НачалоПериода)
Или Не ЗначениеЗаполнено(ПериодОтсутствия.ОкончаниеПериода) Тогда
ОтсутствияПоДругимМестамРаботы.Очистить();
Возврат;
КонецЕсли;
УстановитьДругихСотрудниковФизическогоЛица(ПериодОтсутствия.НачалоПериода, ПериодОтсутствия.ОкончаниеПериода);
КадровыйУчетФормыРасширенный.ЗаполнитьОтсутствияПоДругимМестамРаботы(
ЭтаФорма, ПериодОтсутствия.НачалоПериода, ПериодОтсутствия.ОкончаниеПериода);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьОтсутствияПоДругимМестамРаботы()
Если ДругиеСотрудникиФизическогоЛица = Неопределено Тогда
Возврат;
КонецЕсли;
ЕстьДругиеСотрудникиФизическогоЛица = ДругиеСотрудникиФизическогоЛица.Количество() > 0;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОтсутствияПоДругимМестамРаботы", "Видимость", ЕстьДругиеСотрудникиФизическогоЛица);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаОтсутствияПоДругимМестамРаботы", "Видимость", ЕстьДругиеСотрудникиФизическогоЛица);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуНовогоОтпускаСовместителя(Совместитель = Неопределено, ОрганизацияСовместителя = Неопределено)
ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("Ссылка", Неопределено);
ДанныеЗаполнения.Вставить("Действие", "Заполнить");
ДанныеЗаполнения.Вставить("Организация", ОрганизацияСовместителя);
ДанныеЗаполнения.Вставить("Сотрудник", Совместитель);
ДанныеОтпусков = Новый Массив();
Если Объект.ПредоставитьОсновнойОтпуск Тогда
НоваяСтрокаОтпуска = ДанныеЗаполненияСтроки();
НоваяСтрокаОтпуска.ВидОтпуска = ОбщегоНазначенияКлиент.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.Основной");
НоваяСтрокаОтпуска.ДатаНачала = Объект.ДатаНачалаОсновногоОтпуска;
НоваяСтрокаОтпуска.ДатаОкончания = Объект.ДатаОкончанияОсновногоОтпуска;
НоваяСтрокаОтпуска.КоличествоДней = Объект.КоличествоДнейОсновногоОтпуска;
НоваяСтрокаОтпуска.КоличествоДнейКомпенсации = Объект.КоличествоДнейКомпенсацииОсновногоОтпуска;
ДанныеОтпусков.Добавить(НоваяСтрокаОтпуска);
КонецЕсли;
Если Объект.ПредоставитьДополнительныйОтпуск Тогда
Для каждого Строка Из Объект.ДополнительныеОтпуска Цикл
НоваяСтрокаОтпуска = ДанныеЗаполненияСтроки();
НоваяСтрокаОтпуска.ВидОтпуска = Строка.ВидОтпуска;
НоваяСтрокаОтпуска.ДатаНачала = Строка.ДатаНачала;
НоваяСтрокаОтпуска.ДатаОкончания = Строка.ДатаОкончания;
НоваяСтрокаОтпуска.КоличествоДней = Строка.КоличествоДней;
НоваяСтрокаОтпуска.КоличествоДнейКомпенсации = Строка.КоличествоДнейКомпенсации;
ДанныеОтпусков.Добавить(НоваяСтрокаОтпуска);
КонецЦикла;
КонецЕсли;
ДанныеЗаполнения.Вставить("ДанныеОтпусков", ДанныеОтпусков);
ПараметрыФормы = Новый Структура("Основание", ДанныеЗаполнения);
ОткрытьФорму("Документ.Отпуск.ФормаОбъекта", ПараметрыФормы, ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ДанныеЗаполненияСтроки()
СтруктураОтпуска = Новый Структура;
СтруктураОтпуска.Вставить("ВидОтпуска");
СтруктураОтпуска.Вставить("ДатаНачала");
СтруктураОтпуска.Вставить("ДатаОкончания");
СтруктураОтпуска.Вставить("КоличествоДней");
СтруктураОтпуска.Вставить("КоличествоДнейКомпенсации");
СтруктураОтпуска.Вставить("НачалоПериодаЗаКоторыйПредоставляетсяОтпуск", '00010101');
СтруктураОтпуска.Вставить("КонецПериодаЗаКоторыйПредоставляетсяОтпуск", '00010101');
СтруктураОтпуска.Вставить("Основание", "");
СтруктураОтпуска.Вставить("ВидОтпускаПрежний", Неопределено);
СтруктураОтпуска.Вставить("ИндексСтрокиДокумента", Неопределено);
Возврат СтруктураОтпуска;
КонецФункции
&НаКлиенте
Процедура ОткрытьФормуНовогоОтпускаБезОплатыСовместителя(ДатаНачала, ДатаОкончания, Совместитель = Неопределено, ОрганизацияСовместителя = Неопределено)
ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("Действие", "Заполнить");
ДанныеЗаполнения.Вставить("Организация", ОрганизацияСовместителя);
ДанныеЗаполнения.Вставить("Сотрудник", Совместитель);
ДанныеЗаполнения.Вставить("ДатаНачала", ДатаНачала);
ДанныеЗаполнения.Вставить("ДатаОкончания", ДатаОкончания);
ПараметрыФормы = Новый Структура("Основание", ДанныеЗаполнения);
ОткрытьФорму("Документ.ОтпускБезСохраненияОплаты.ФормаОбъекта", ПараметрыФормы, ЭтаФорма, Истина);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПериодОтсутствия(Знач Объект)
ПериодыОтсутствий = Документы.Отпуск.ПериодыОтсутствий(Объект);
Возврат Документы.Отпуск.ПериодОтсутствия(ПериодыОтсутствий);
КонецФункции
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.НачисленияПерерасчет.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПерерасчетПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой");
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(Элементы.Начисления.ТекущиеДанные, "ПериодДействия", "ПериодДействияСтрокой", Направление, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НачисленияПериодДействияОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
&НаСервере
Процедура ЗагрузитьНастройки()
Если РегистрацияНачисленийДоступна Тогда
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтаФорма, ОписаниеТаблицыНачислений(РегистрацияНачисленийДоступна));
РасчетЗарплатыРасширенныйФормы.УстановитьРежимОтображенияПодробноИзНастройки(ЭтаФорма, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьБухучетРезультатовРасчетаНаСервере(ИсходныеДанные = Неопределено)
ПериодРасчетаЗарплаты = ПериодРасчетаЗарплатыДоНачалаОтпуска();
МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
ДанныеФормыВДанныеМенеджераРасчета(МенеджерРасчета);
ЗаполнитьНастройкиМенеджераРасчета(МенеджерРасчета, ПериодРасчетаЗарплаты);
МенеджерРасчета.НастройкиБухучета.ПроверятьНеобходимостьПересчетаНДФЛ = МенеджерРасчета.НастройкиРасчета.РассчитыватьНДФЛ;
МенеджерРасчета.ЗаполнитьНастройкиОбновленияБухучета(ИсходныеДанные);
МенеджерРасчета.ОбновитьБухучетРезультатовРасчета();
РасчетЗарплатыВДанныеФормы(МенеджерРасчета.Зарплата);
Если ИсходныеДанные <> Неопределено Тогда
РасчетЗарплатыРасширенныйФормы.УстановитьТекущуюСтрокуТаблицыФормы(ЭтаФорма, ИсходныеДанные.ИмяИсходнойТаблицы, ИсходныеДанные.НомерСтрокиИсходнойТаблицы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьБухучетРезультатовРасчета()
Если ИспользоватьСтатьиФинансирования И Объект.Начисления.Количество() > 0 Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере();
КонецЕсли;
КонецПроцедуры
#Область УточнениеВидаВремени
&НаСервере
Процедура ДобавитьВариант(Варианты, Состояние, ВидВремениПереопределенный = Неопределено)
УчетРабочегоВремениРасширенныйФормы.ДобавитьВариантСелектора(Варианты, Состояние, ВидВремениПереопределенный);
КонецПроцедуры
&НаСервере
Функция ВариантыСелектора()
Результат = УчетРабочегоВремениРасширенныйФормы.ТаблицаВариантовОбстоятельств();
ДобавитьВариант(Результат, "ОтпускОсновной");
ДобавитьВариант(Результат, "ОтпускУчебныйОплачиваемый");
ДобавитьВариант(Результат, "ДополнительныйОтпуск");
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция СостояниеПоВидуОтпуска()
Возврат СостоянияСотрудников.СостояниеПоВидуОтпуска(Справочники.ВидыОтпусков.Основной);
КонецФункции
&НаКлиенте
Процедура Подключаемый_УточняющийВидВремениПриИзменении(Элемент)
Если ЗначениеЗаполнено(Объект.ВидВремени) Тогда
УчетРабочегоВремениРасширенныйКлиент.УточнитьВидВремени(ЭтаФорма, Объект.ВидВремени);
Иначе
УчетРабочегоВремениРасширенныйКлиент.ОтменитьУточнениеВидаВремени(ЭтаФорма);
Объект.ВидРасчетаОсновногоОтпуска = Неопределено;
КонецЕсли;
ЗаполнитьВидыРасчетовОсновногоОтпуска();
ВыполнитьРасчетИПерезаполнениеНачислений();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УточняющийВидВремениОткрытие(Элемент, СтандартнаяОбработка)
УчетРабочегоВремениРасширенныйКлиент.ПоказатьУточняющийВидВремени(ЭтаФорма);
КонецПроцедуры
#КонецОбласти
#Область Больничные
&НаСервере
Процедура ОбновитьИнформациюОПересеченииОтпускаСБольничным()
ПериодыБольничных = ПериодыБольничных();
Если ПериодыБольничных.Количество() = 0 Тогда
Элементы.ОтпускПересекаетсяСБольничнымГруппа.Видимость = Ложь;
Иначе
Элементы.ОтпускПересекаетсяСБольничнымГруппа.Видимость = Истина;
ПредставленияПричин = Новый Массив;
ПредставленияБольничных = Новый Массив;
Для Каждого ПериодБольничного Из ПериодыБольничных Цикл
ПредставлениеПричины = Перечисления.ПричиныНетрудоспособности.ПредставлениеБезКода(
ПериодБольничного.ПричинаНетрудоспособности);
ПредставленияБольничных.Добавить(СтрШаблон(
"<a href=""%1"">%2 %3</a>",
ПолучитьНавигационнуюСсылку(ПериодБольничного.Регистратор),
ПредставлениеПричины,
ОбщегоНазначенияБЗК.НаименованиеПериода(ПериодБольничного.ДатаНачала, ПериодБольничного.ДатаОкончания)));
ОбщегоНазначенияБЗК.ДобавитьЗначениеВМассив(ПредставленияПричин, ПредставлениеПричины);
КонецЦикла;
Если ПредставленияБольничных.Количество() = 1 Тогда
Шаблон = НСтр("ru = 'Отпуск пересекается с больничным: %1'");
Иначе
Шаблон = НСтр("ru = 'Отпуск пересекается с больничными: %1'");
КонецЕсли;
СтрокаHTML = СтрШаблон(Шаблон, СтрСоединить(ПредставленияБольничных, ", "));
Элементы.ОтпускПересекаетсяСБольничным.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(СтрокаHTML);
СтрокаHTML = СтрШаблон(
НСтр("ru = '%1 не дает права на продление отпуска и в случае пересечения с отпуском <a href=""%2"">должен оплачиваться отпуск</a>.
|Рекомендуется проинформировать работника.
|Если решено изменить отпуск, то больничный потребуется исправить и пересчитать.'"),
СтрСоединить(ПредставленияПричин, ", "),
"https://its.1c.ru/db/newsclar#content:468901:hdoc");
ЗаголовокПодсказки = СтроковыеФункции.ФорматированнаяСтрока(СтрокаHTML);
Элементы.ОтпускПересекаетсяСБольничным.РасширеннаяПодсказка.Заголовок = ЗаголовокПодсказки;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПериодыБольничных()
Если Не ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска)
Или Не ЗначениеЗаполнено(Объект.ДатаОкончанияОсновногоОтпуска)
Или Объект.ДатаНачалаОсновногоОтпуска > Объект.ДатаОкончанияОсновногоОтпуска Тогда
ПустаяТаблица = Новый ТаблицаЗначений;
ПустаяТаблица.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата"));
ПустаяТаблица.Колонки.Добавить("ДатаОкончания", Новый ОписаниеТипов("Дата"));
ПустаяТаблица.Колонки.Добавить("Регистратор");
ПустаяТаблица.Колонки.Добавить("ПричинаНетрудоспособности");
Возврат ПустаяТаблица;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| БольничныйЛист.ДатаНачала КАК ДатаНачала,
| БольничныйЛист.ДатаОкончания КАК ДатаОкончания,
| ВложенныйЗапрос.Регистратор КАК Регистратор,
| БольничныйЛист.ПричинаНетрудоспособности КАК ПричинаНетрудоспособности
|ИЗ
| (ВЫБРАТЬ
| ДанныеСостоянийСотрудников.Начало КАК ДатаНачала,
| ДанныеСостоянийСотрудников.Окончание КАК ДатаОкончания,
| ДанныеСостоянийСотрудников.Регистратор КАК Регистратор
| ИЗ
| РегистрСведений.ДанныеСостоянийСотрудников КАК ДанныеСостоянийСотрудников
| ГДЕ
| ДанныеСостоянийСотрудников.Сотрудник = &Сотрудник
| И ДанныеСостоянийСотрудников.Окончание >= &ДатаНачала
| И ДанныеСостоянийСотрудников.Начало <= &ДатаОкончания
| И ДанныеСостоянийСотрудников.Регистратор ССЫЛКА Документ.БольничныйЛист) КАК ВложенныйЗапрос
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.БольничныйЛист КАК БольничныйЛист
| ПО ВложенныйЗапрос.Регистратор = БольничныйЛист.Ссылка
|ГДЕ
| БольничныйЛист.ПричинаНетрудоспособности В(&ПричинаНетрудоспособности)";
Причины = Перечисления.ПричиныНетрудоспособности.ПричиныВытесняемыеОтпуском();
Запрос.УстановитьПараметр("Сотрудник", Объект.Сотрудник);
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачалаОсновногоОтпуска);
Запрос.УстановитьПараметр("ДатаОкончания", Объект.ДатаОкончанияОсновногоОтпуска);
Запрос.УстановитьПараметр("ПричинаНетрудоспособности", Причины);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
#КонецОбласти
&НаСервере
Функция ИндексДополнительногоОтпускаПослеОсновного(ДатаОкончанияОсновногоОтпуска)
Для Каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
Если ДополнительныйОтпуск.ДатаНачала > ДатаОкончанияОсновногоОтпуска Тогда
Возврат Объект.ДополнительныеОтпуска.Индекс(ДополнительныйОтпуск);
КонецЕсли;
КонецЦикла;
Возврат Объект.ДополнительныеОтпуска.Количество()+ 1;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьПодключаемыеКоманды(УправляемаяФорма)
ЭДОБЗККлиентСервер.ОбновитьКоманды(УправляемаяФорма, УправляемаяФорма.Объект, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьИзмененныеДанныеПерерасчета(ТекущиеДанные) Экспорт
РасчетЗарплатыРасширенныйКлиент.ДобавитьИзмененныеДанные(
ИзмененныеДанные,
"Начисления",
Объект.ФизическоеЛицо,
ТекущиеДанные.Сотрудник,
ТекущиеДанные.Начисление);
КонецПроцедуры
&НаКлиенте
Процедура ПослеУдаленияПерерасчета() Экспорт
РассчитатьДанныеФормы(Объект.Сотрудник, ОписаниеТаблицыПерерасчетов(РегистрацияНачисленийДоступна));
КонецПроцедуры
&НаСервере
Процедура ПерезаполнитьПериодыПересеченияНаСервере()
Для Каждого СтрокаПриостановки Из Объект.ПериодыПриостановкиОтпуска Цикл
ЗаполнитьПериодПриостановки(СтрокаПриостановки.Причина, СтрокаПриостановки.ПолучитьИдентификатор());
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьНастроекБухучета(Форма)
Если Форма.Объект.БухучетУказываетсяРаспределением Тогда
Форма.Элементы.СтраницыБухучет.ТекущаяСтраница = Форма.Элементы.СтраницаБухучетРаспределение;
Иначе
Форма.Элементы.СтраницыБухучет.ТекущаяСтраница = Форма.Элементы.СтраницаБухучет;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьБухучетРаспределениеЗавершение(Результат, Параметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ИзменитьБухучетРаспределениеЗавершениеНаСервере(Результат);
КонецПроцедуры
&НаСервере
Процедура ИзменитьБухучетРаспределениеЗавершениеНаСервере(Результат)
ПрежнееРаспределение = Объект.НастройкиБухучета.Выгрузить();
Объект.НастройкиБухучета.Очистить();
Для каждого СтрокаРаспределения Из Результат.НастройкиБухучета Цикл
ЗаполнитьЗначенияСвойств(Объект.НастройкиБухучета.Добавить(), СтрокаРаспределения);
КонецЦикла;
НастройкаИзменилась = Не ОбщегоНазначения.КоллекцииИдентичны(ПрежнееРаспределение, Объект.НастройкиБухучета.Выгрузить(),"СтатьяФинансирования,СтатьяРасходов,СпособОтраженияЗарплатыВБухучете,ДоляРаспределения");
Если НастройкаИзменилась Тогда
Модифицированность = Истина;
КонецЕсли;
ЗаполнитьПредставлениеРаспределенияБухучета();
Если ИспользоватьСтатьиФинансирования И Объект.Начисления.Количество() > 0 И НастройкаИзменилась Тогда
ОбновитьБухучетРезультатовРасчетаНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПредставлениеРаспределенияБухучета()
Элементы.ПредставлениеРаспределенияБухучета.Заголовок = ОтражениеЗарплатыВБухучетеРасширенный.ПредставлениеРаспределенияБухучетаДокумента(Объект.НастройкиБухучета);
КонецПроцедуры
&НаСервере
Процедура ОбновитьДанныеФормыПослеРасчета()
ОбновитьНачисленоУдержаноИтог();
ОбновитьПерерасчетИтог(ЭтаФорма);
МассивОписанийТаблицФормы = МассивОписанийТаблицФормы(РегистрацияНачисленийДоступна);
ЗарплатаКадрыРасширенный.ПериодНачисленияЗаполнитьИспользованиеПериода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ЗаполнитьДоступностьМестаПолученияДохода(ЭтаФорма, МассивОписанийТаблицФормы);
ЗарплатаКадрыРасширенный.ВводНачисленийЗаполнитьВторичныеДанныеПоказателей(ЭтаФорма, МассивОписанийТаблицФормы);
РасчетЗарплатыРасширенныйФормы.ЗаполнитьПредставлениеРаспределенияПоТерриториямУсловиямТруда(ЭтаФорма, Объект.Организация, ОписанияТаблицСРаспределениемПоТерриториямУсловиямТруда());
УстановитьВидимостьПерерасчетов();
УстановитьОтметкуНезаполненногоПланируемойДатыВыплаты(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ОбновитьИнформациюОЗаполненностиСохраняемогоЗаработка()
Если Объект.РасчетДенежногоСодержания Тогда
ЗаполнитьИнформациюЗаполненностиДанныхРасчетаДенежногоСодержания(ЭтаФорма);
Иначе
ЗаполнитьИнформациюЗаполненностиДанныхСреднего();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьИнформациюЗаполненностиДанныхСреднего()
Если Не ИспользуетсяРасчетЗарплаты Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Если Объект.РасчетДенежногоСодержания Тогда
ЗаполнитьИнформациюЗаполненностиДанныхРасчетаДенежногоСодержания(ЭтаФорма);
Иначе
СтруктураИнфонадписи = УчетСреднегоЗаработка.ИнформацияОЗаполненностиДанныхСреднегоЗаработка(
Объект.Ссылка,
ЗаполнениеВыполнено,
Объект.Сотрудник,
Объект.ДатаНачалаСобытия,
Объект.ПериодРасчетаСреднегоЗаработкаНачало,
Объект.ПериодРасчетаСреднегоЗаработкаОкончание,
Объект.СреднийЗаработокОбщий,
Объект.ОтработанноеВремяДляСреднегоОбщий);
ЗаполненностьДанныхИнформационныйТекст = СтруктураИнфонадписи.Текст;
ЗаполненностьДанныхКартинка = СтруктураИнфонадписи.Картинка;
ОбновитьИнформациюЗаполненностиДанных = Ложь;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура ПроверитьНазначениеДополнительныхОтпусков(Строка = Неопределено)
Если Не ЗначениеЗаполнено(Объект.Сотрудник) Тогда
Возврат;
КонецЕсли;
Если Строка <> Неопределено И Не Строка.ЭтоЕжегодныйОтпуск Тогда
Возврат;
КонецЕсли;
Если Объект.ДополнительныеОтпуска.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ВидыОтпусковСотрудника = Новый Массив;
Если Строка <> Неопределено Тогда
ВидыОтпусковСотрудника.Добавить(Строка.ВидОтпуска);
Иначе
ВидыОтпусковСотрудника = Объект.ДополнительныеОтпуска.Выгрузить(, "ВидОтпуска").ВыгрузитьКолонку("ВидОтпуска");
КонецЕсли;
РезультатЗапроса = ОстаткиОтпусков.ЗапросНазначениеДополнительныхОтпусков(Объект.Сотрудник, ВидыОтпусковСотрудника);
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ТекстСообщения = НСтр("ru = 'Вид отпуска %1 не назначен сотруднику.'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, Выборка.ВидОтпуска);
СтрокиВидаОтпуска = Объект.ДополнительныеОтпуска.НайтиСтроки(Новый Структура("ВидОтпуска", Выборка.ВидОтпуска));
Если СтрокиВидаОтпуска.Количество() > 0 Тогда
ИндексСтроки = Объект.ДополнительныеОтпуска.Индекс(СтрокиВидаОтпуска[0]);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.ДополнительныеОтпуска[" + Формат(ИндексСтроки, "ЧН=0; ЧГ=0") + "].ВидОтпуска");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСсылкиПредопределенныхВидовОтпусков()
Если Не ЗначениеЗаполнено(ВидОтпускаЧАЭС) Тогда
ВидОтпускаЧАЭС = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускПострадавшимВАварииЧАЭС");
КонецЕсли;
Если Не ЗначениеЗаполнено(ВидОтпускаСКЛ) Тогда
ВидОтпускаСКЛ = ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыОтпусков.ОтпускНаСанаторноКурортноеЛечение");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьФлажкиНаличияВидовОтпусков()
ЗаполнитьСсылкиПредопределенныхВидовОтпусков();
ЕстьОтпускЧАЭС = ЕстьОплатаВидаОтпуска(Объект, ВидОтпускаЧАЭС);
ЕстьОтпускНаПериодЛечения = ЕстьОплатаВидаОтпуска(Объект, ВидОтпускаСКЛ);
Если Объект.ЕстьОтпускЧАЭС <> ЕстьОтпускЧАЭС
Или Объект.ЕстьОтпускНаПериодЛечения <> ЕстьОтпускНаПериодЛечения Тогда
Объект.ЕстьОтпускЧАЭС = ЕстьОтпускЧАЭС;
Объект.ЕстьОтпускНаПериодЛечения = ЕстьОтпускНаПериодЛечения;
Модифицированность = Истина;
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
УстановитьПредставлениеСведенияДляОплатыОтпускаСФР();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииОтработанныхДнейНаСервере(ДанныеСотрудника)
УдалитьОтработанныеДниЧасы(ДанныеСотрудника.ВыборОтработанныхЧасов);
Для Каждого ОтработанныйДень Из ДанныеСотрудника.ВыбранныеДни Цикл
НоваяСтрока = Объект.ОтработанныеДни.Добавить();
НоваяСтрока.Дата = ОтработанныйДень;
Если ДанныеСотрудника.ВыборОтработанныхЧасов Тогда
НоваяСтрока.Часы = ДанныеСотрудника.ОтработанныеЧасы[ОтработанныйДень];
КонецЕсли;
КонецЦикла;
УстановитьПредставлениеОтработанныхДней();
КонецПроцедуры
&НаСервере
Процедура РасходДнейОтгулаПриИзмененииНаСервере()
ЗаполнитьОтработанныеДни();
УстановитьПредставлениеОтработанныхДней();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОтработанныеДни()
УдалитьОтработанныеДниЧасы();
НачалоОтгула = НачалоОтгула(ЭтаФорма);
Если Не Объект.ПредоставитьОтгул
Или Объект.РасходДнейОтгула = 0
Или НачалоОтгула < УчетОтгулов.НачалоУчетаОтработанныхДней() Тогда
Возврат;
КонецЕсли;
ДанныеСотрудников = УчетОтгулов.СведенияОбОтработанныхДнях(Объект.Сотрудник, НачалоОтгула, Объект.Ссылка, Объект.ИсправленныйДокумент);
ДанныеСотрудника = ДанныеСотрудников.Получить(Объект.Сотрудник);
Если ДанныеСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
КоличествоОтработанныхДней = Объект.РасходДнейОтгула - ДанныеСотрудника.ОстатокДоНачалаУчетаОтгулов;
Если КоличествоОтработанныхДней <= 0 Тогда
Возврат;
КонецЕсли;
ОтработанныеДниВсего = 0;
Для Каждого ОтработанныйДень Из ДанныеСотрудника.НеиспользованныеОтработанныеДни Цикл
Если ОтработанныйДень >= НачалоОтгула
Или ОтработанныеДниВсего = КоличествоОтработанныхДней Тогда
Прервать;
КонецЕсли;
Если ДобавитьМесяц(ОтработанныйДень, 12) < НачалоОтгула Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = Объект.ОтработанныеДни.Добавить();
НоваяСтрока.Дата = ОтработанныйДень;
ОтработанныеДниВсего = ОтработанныеДниВсего + 1;
КонецЦикла;
Если ОтработанныеДниВсего < КоличествоОтработанныхДней Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'У сотрудника недостаточно отработанных дней для отгула'"), , "РасходДнейОтгула", "Объект");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РасходЧасовОтгулаПриИзмененииНаСервере()
ЗаполнитьОтработанныеЧасы();
УстановитьПредставлениеОтработанныхДней();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОтработанныеЧасы()
УдалитьОтработанныеДниЧасы(Истина);
НачалоОтгула = НачалоОтгула(ЭтаФорма);
Если Не Объект.ПредоставитьОтгул
Или Объект.РасходЧасовОтгула = 0
Или НачалоОтгула < УчетОтгулов.НачалоУчетаОтработанныхДней() Тогда
Возврат;
КонецЕсли;
ДанныеСотрудников = УчетОтгулов.СведенияОбОтработанныхЧасах(Объект.Сотрудник, НачалоОтгула, Объект.Ссылка, Объект.ИсправленныйДокумент);
ДанныеСотрудника = ДанныеСотрудников.Получить(Объект.Сотрудник);
Если ДанныеСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
ОтработанныеЧасыВсего = 0;
Для Каждого ОтработанныйДень Из ДанныеСотрудника.НеиспользованныеОтработанныеДни Цикл
ОтработанныеЧасы = ДанныеСотрудника.ОтработанныеЧасы[ОтработанныйДень];
Если ОтработанныеЧасы = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ДобавитьМесяц(ОтработанныйДень, 12) < НачалоОтгула Тогда
Продолжить;
КонецЕсли;
Если ОтработанныйДень >= НачалоОтгула
Или ОтработанныеЧасыВсего + ОтработанныеЧасы > Объект.РасходЧасовОтгула Тогда
Прервать;
КонецЕсли;
НоваяСтрока = Объект.ОтработанныеДни.Добавить();
НоваяСтрока.Дата = ОтработанныйДень;
НоваяСтрока.Часы = ОтработанныеЧасы;
ОтработанныеЧасыВсего = ОтработанныеЧасыВсего + ОтработанныеЧасы;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьПредставлениеОтработанныхДней()
ОтработанныеДни = Объект.ОтработанныеДни.Выгрузить(Новый Структура("Часы", 0));
ОтработанныеЧасы = ОтработанныеДни.СкопироватьКолонки();
Для Каждого ОтработанныйДень Из Объект.ОтработанныеДни Цикл
Если ОтработанныйДень.Часы <> 0 Тогда
ЗаполнитьЗначенияСвойств(ОтработанныеЧасы.Добавить(), ОтработанныйДень);
КонецЕсли;
КонецЦикла;
ЗаголовокКомандыВыборДней = НСтр("ru = 'Выбрать дни'");
Если ОтработанныеДни.Количество() > 0 Тогда
ЗаголовокКомандыВыборДней = УчетОтгулов.ПредставлениеОтработанныхДней(ОтработанныеДни);
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ВыборОтработанныхДней", "Заголовок", ЗаголовокКомандыВыборДней);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ВыборОтработанныхДней", "Доступность", Объект.РасходДнейОтгула > 0);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ВыборОтработанныхДней", "Видимость", Объект.ПредоставитьОтгул И НачалоОтгула(ЭтаФорма) >= УчетОтгулов.НачалоУчетаОтработанныхДней());
ЗаголовокКомандыВыборЧасов = НСтр("ru = 'Выбрать дни'");
Если ОтработанныеЧасы.Количество() > 0 Тогда
ЗаголовокКомандыВыборЧасов = УчетОтгулов.ПредставлениеОтработанныхДней(ОтработанныеЧасы);
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ВыборОтработанныхЧасов", "Заголовок", ЗаголовокКомандыВыборЧасов);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ВыборОтработанныхЧасов", "Доступность", Объект.РасходЧасовОтгула > 0);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы, "ВыборОтработанныхЧасов", "Видимость", Объект.ПредоставитьОтгул И НачалоОтгула(ЭтаФорма) >= УчетОтгулов.НачалоУчетаОтработанныхДней());
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция НачалоОтгула(Форма)
Объект = Форма.Объект;
НачалоОтгула = Объект.Дата;
ОкончаниеОтпуска = Неопределено;
Если Объект.ПредоставитьОсновнойОтпуск
И ЗначениеЗаполнено(Объект.ДатаНачалаОсновногоОтпуска)
И ЗначениеЗаполнено(Объект.ДатаОкончанияОсновногоОтпуска) Тогда
ОкончаниеОтпуска = Объект.ДатаОкончанияОсновногоОтпуска;
КонецЕсли;
Если Объект.ПредоставитьДополнительныйОтпуск Тогда
Для Каждого ДополнительныйОтпуск Из Объект.ДополнительныеОтпуска Цикл
Если Не ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаНачала)
Или Не ЗначениеЗаполнено(ДополнительныйОтпуск.ДатаОкончания) Тогда
Продолжить;
КонецЕсли;
ОкончаниеОтпуска = ?(ЗначениеЗаполнено(ОкончаниеОтпуска), Макс(ОкончаниеОтпуска, ДополнительныйОтпуск.ДатаОкончания), ДополнительныйОтпуск.ДатаОкончания);
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(ОкончаниеОтпуска) Тогда
НачалоОтгула = НачалоДня(ОкончаниеОтпуска) + 86400;
КонецЕсли;
Возврат НачалоОтгула;
КонецФункции
&НаСервере
Процедура УдалитьОтработанныеДниЧасы(УдалитьЧасы = Ложь)
УдалитьДни = Не УдалитьЧасы;
СтрокиКУдалению = Новый Массив;
Для Каждого ОтработанныйДень Из Объект.ОтработанныеДни Цикл
Если УдалитьЧасы И ОтработанныйДень.Часы <> 0 Тогда
СтрокиКУдалению.Добавить(ОтработанныйДень);
ИначеЕсли УдалитьДни И ОтработанныйДень.Часы = 0 Тогда
СтрокиКУдалению.Добавить(ОтработанныйДень);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаКУдалению Из СтрокиКУдалению Цикл
Объект.ОтработанныеДни.Удалить(СтрокаКУдалению);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьПредставлениеСведенияДляОплатыОтпускаСФР()
Элементы.СведенияДляОплатыОтпускаСФР.Видимость = Объект.ЕстьОтпускНаПериодЛечения;
Если Не Объект.ЕстьОтпускНаПериодЛечения Тогда
Возврат;
КонецЕсли;
СведенияДляОплатыОтпускаСФР = Неопределено;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| СведенияДляОплатыОтпускаСФР.Ссылка КАК Ссылка
|ИЗ
| Документ.СведенияДляОплатыОтпускаСФР КАК СведенияДляОплатыОтпускаСФР
|ГДЕ
| СведенияДляОплатыОтпускаСФР.ДокументОснование = &Отпуск
| И СведенияДляОплатыОтпускаСФР.Проведен
|
|УПОРЯДОЧИТЬ ПО
| СведенияДляОплатыОтпускаСФР.Дата УБЫВ";
Запрос.УстановитьПараметр("Отпуск", Объект.Ссылка);
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
СведенияДляОплатыОтпускаСФР = Выборка.Ссылка;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Инициализация
СтарыеЗначенияКонтролируемыхПолей = Новый Соответствие;
#КонецОбласти