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