#Область ОписаниеПеременных
&НаКлиенте
Перем ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
РасчетЗарплатыРасширенныйФормы.ДокументыПриСозданииНаСервере(ЭтаФорма);
ПодписиДокументов.ПриСозданииНаСервере(ЭтаФорма);
Если Не ЗначениеЗаполнено(Параметры.Ключ) Тогда
ЗаполнитьПервоначальныеЗначения();
ПрочитатьВремяРегистрации();
Если Объект.ЭтоОтражениеИзмененияШтатногоРасписания Тогда
Если Параметры.ЗначенияЗаполнения.Свойство("ДолжностиПоШтатномуРасписанию") Тогда
ДолжностиПоШтатномуРасписанию = Новый ФиксированныйМассив(Параметры.ЗначенияЗаполнения.ДолжностиПоШтатномуРасписанию);
КонецЕсли;
ЗаполнитьНачисленияПоказателиСотрудников();
ИначеЕсли Параметры.ЗначенияЗаполнения.Свойство("ТарифнаяСетка") Тогда
ЗаполнитьНачисленияПоказателиСотрудниковПоТарифнойСетке(Параметры.ЗначенияЗаполнения.ТарифнаяСетка);
КонецЕсли;
ЗаполнитьДанныеФормыПоОрганизации();
ПриПолученииДанныхНаСервере();
КонецЕсли;
ЭтотОбъект.ПодробныйРасчетФОТ = Ложь;
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриСозданииНаСервере(ЭтотОбъект, Объект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
СрочноеИзменениеНачислений = ЕстьСрокИзмененияНачислений();
ПриПолученииДанныхНаСервере();
ФОТСотрудниковВРеквизитФормы();
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЕстьСрокИзмененияНачислений()
Если ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда
Возврат Истина;
КонецЕсли;
Для Каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
Если ЗначениеЗаполнено(СтрокаСотрудника.ДатаОкончания) Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки = ОценкаПроизводительностиКлиент.ЗамерВремени();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
РеквизитФормыВДанныеСотрудников(ТекущийОбъект);
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи, Отказ);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(
ЭтотОбъект,
ТекущийОбъект,
ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ПодписиДокументов.ПослеЗаписиНаСервере(ЭтаФорма);
ДанныеСотрудниковВРеквизитФормы();
ФОТСотрудниковВРеквизитФормы();
УстановитьОтображениеНадписей();
ПерерасчетЗарплаты.РегистрацияПерерасчетовПоПредварительнымДаннымВФоне(ТекущийОбъект.Ссылка);
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ПередЗакрытием(ЭтотОбъект, Объект, Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
ОценкаПроизводительностиКлиент.УстановитьКлючевуюОперациюЗамера(ИдентификаторЗамераПроведениеНеНужнаРегистрацияОшибки, "ПроведениеДокументаИзменениеПлановыхНачислений");
КонецЕсли;
Оповестить("Запись_ИзменениеПлановыхНачислений", ПараметрыЗаписи, Объект.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ИзмененыНачисления" И Источник = ЭтаФорма Тогда
ЗаполнитьДанныеСотрудникаИзВРеменногоХранилища(Параметр.АдресВХранилище);
КонецЕсли;
Если ИмяСобытия = "ИзмененыПоказателиДокумента" И Источник.ВладелецФормы = ЭтаФорма Тогда
Если Параметр.Показатели.Количество() > 0 Тогда
ОбработатьИзменениеПоказателейНаСервере(Параметр.Показатели);
КонецЕсли;
Если Параметр.Начисления.Количество() > 0 Тогда
ОбработатьИзменениеПоказателейНаСервере(Параметр.Начисления);
КонецЕсли;
КонецЕсли;
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если Элементы.Найти("ПоказателиСотрудников") <> Неопределено Тогда
ТекущийОбъект = РеквизитФормыВЗначение("Объект");
РеквизитФормыВДанныеСотрудников(ТекущийОбъект);
Отказ = Отказ Или Не ТекущийОбъект.ПроверитьЗаполнение();
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект"));
КонецЕсли;
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
ЗаполнитьДанныеФормыПоОрганизации();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
ЗаполнитьДанныеФормыПоОрганизации();
КонецПроцедуры
&НаКлиенте
Процедура НомерПриИзменении(Элемент)
УстановитьОтображениеНомераПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
ЗарплатаКадрыРасширенныйКлиент.КлючевыеРеквизитыЗаполненияФормыОчиститьТаблицы(ЭтаФорма);
ПодразделениеПриИзмененииНаСервере()
КонецПроцедуры
&НаКлиенте
Процедура ДатаИзмененияПриИзменении(Элемент)
ДатаИзмененияПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОкончанияПриИзменении(Элемент)
Если Не Объект.РазныеСрокиДляРазныхСотрудников Тогда
Для Каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
СтрокаСотрудника.ДатаОкончания = Объект.ДатаОкончания;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РазныеСрокиДляРазныхСотрудниковПриИзменении(Элемент)
РазныеСрокиДляРазныхСотрудниковПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОткрытьДокументыВведенныеПозже(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗарплатаКадрыРасширенныйКлиент.ОткрытьВведенныеНаДатуДокументы(ЭтотОбъект.ДокументыВведенныеПозже);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОткрытьРанееВведенныеДокументы(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗарплатаКадрыРасширенныйКлиент.ОткрытьВведенныеНаДатуДокументы(ЭтотОбъект.РанееВведенныеДокументы);
КонецПроцедуры
&НаКлиенте
Процедура УчитыватьКакИндексациюЗаработкаПриИзменении(Элемент)
ПризнакИндексацииСтароеЗначение = Не Объект.УчитыватьКакИндексациюЗаработка Или Объект.УчитыватьПриИндексацииЗаработка;
Если Объект.УчитыватьКакИндексациюЗаработка Тогда
Объект.УчитыватьПриИндексацииЗаработка = Ложь;
КонецЕсли;
ПризнакИндексацииЗаработкаПриИзменении(ПризнакИндексацииСтароеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура УчитыватьПриИндексацииЗаработкаПриИзменении(Элемент)
ПризнакИндексацииСтароеЗначение = Объект.УчитыватьКакИндексациюЗаработка Или Не Объект.УчитыватьПриИндексацииЗаработка;
Если Объект.УчитыватьПриИндексацииЗаработка Тогда
Объект.УчитыватьКакИндексациюЗаработка = Ложь;
КонецЕсли;
ПризнакИндексацииЗаработкаПриИзменении(ПризнакИндексацииСтароеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура СрочноеИзменениеНачисленийПриИзменении(Элемент)
СрочноеИзменениеНачисленийПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МесяцИндексацииПриИзменении(Элемент)
ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтаФорма, "Объект.ДатаИзменения", "МесяцИндексацииСтрокой", Модифицированность);
ДатаИзмененияПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МесяцИндексацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("МесяцИндексацииНачалоВыбораЗавершение", ЭтотОбъект);
ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, ЭтаФорма, "Объект.ДатаИзменения", "МесяцИндексацииСтрокой", , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура МесяцИндексацииНачалоВыбораЗавершение(ЗначениеВыбрано, ДополнительныеПараметры) Экспорт
ДатаИзмененияПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура МесяцИндексацииРегулирование(Элемент, Направление, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтаФорма, "Объект.ДатаИзменения", "МесяцИндексацииСтрокой", Направление, Модифицированность);
ПодключитьОбработчикОжидания("ОбработчикОжиданияМесяцИндексацииПриИзменении", 0.3, Истина);
КонецПроцедуры
&НаКлиенте
Процедура МесяцИндексацииАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаАвтоПодборТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура МесяцИндексацииОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка)
ЗарплатаКадрыКлиент.ВводМесяцаОкончаниеВводаТекста(Текст, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементПриИзменении(Элемент)
ПодписиДокументовКлиент.ПриИзмененииПодписывающегоЛица(ЭтаФорма, Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПодписиДокументовЭлементНажатие(Элемент)
ПодписиДокументовКлиент.РасширеннаяПодсказкаНажатие(ЭтаФорма, Элемент.Имя);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПоказателиСотрудников
&НаКлиенте
Процедура ПоказателиСотрудниковПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока Тогда
МаксимальныйИдентификаторСтрокиСотрудника = МаксимальныйИдентификаторСтрокиСотрудника + 1;
Элемент.ТекущиеДанные.ИдентификаторСтрокиСотрудника = МаксимальныйИдентификаторСтрокиСотрудника;
Если Не Копирование Тогда
Элемент.ТекущиеДанные.ДатаИзменения = Объект.ДатаИзменения;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказателиСотрудниковПередНачаломИзменения(Элемент, Отказ)
Строка = Объект.Сотрудники.НайтиПоИдентификатору(Элементы.ПоказателиСотрудников.ТекущаяСтрока);
Если НЕ Строка = Неопределено Тогда
МассивУдаляемыхСотрудников = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Строка.ИдентификаторСтрокиСотрудника);
ЗафиксироватьУдаляемыхСотрудников(МассивУдаляемыхСотрудников);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказателиСотрудниковСотрудникПриИзменении(Элемент)
ПоказателиСотрудниковСотрудникПриИзмененииНаСервере(Элементы.ПоказателиСотрудников.ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПоказателиСотрудниковДатаИзмененияПриИзменении(Элемент)
ПоказателиСотрудниковДатаИзмененияПриИзмененииНаСервере(Элементы.ПоказателиСотрудников.ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПоказателиСотрудниковВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "ПоказателиСотрудниковФОТ"
Или Поле.Имя = "ПоказателиСотрудниковПредставлениеНачислений" Тогда
РедактироватьСоставНачислений = Поле.Имя = "ПоказателиСотрудниковПредставлениеНачислений";
ОткрытьФормуРедактированияСоставаНачисленийИУдержаний(Элемент.ТекущиеДанные, Элемент.ТекущаяСтрока, РедактироватьСоставНачислений);
ИначеЕсли СтрНайти(Поле.Имя, ПрефиксЭлементаПоказателиСотрудников()) > 0 Тогда
ПутьКДанным = Прав(Поле.Имя, СтрДлина(Поле.Имя) - СтрДлина(ПрефиксЭлементаПоказателиСотрудников()));
Если Элемент.ТекущиеДанные[ИмяРеквизитаТабличноеПредставление(ПутьКДанным)] Тогда
СтандартнаяОбработка = Ложь;
ОткрытьФормуРедактированияПлановогоПоказателяПоДокументамОснованиям(Элемент.ТекущиеДанные, ПутьКДанным);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказателиСотрудниковПередУдалением(Элемент, Отказ)
МассивУдаляемыхСотрудников = Новый Массив;
Для каждого ИдентификаторУдаляемойСтроки Из Элемент.ВыделенныеСтроки Цикл
Строка = Объект.Сотрудники.НайтиПоИдентификатору(ИдентификаторУдаляемойСтроки);
Если НЕ Строка = Неопределено Тогда
МассивУдаляемыхСотрудников.Добавить(Строка.ИдентификаторСтрокиСотрудника);
КонецЕсли;
КонецЦикла;
ЗафиксироватьУдаляемыхСотрудников(МассивУдаляемыхСотрудников);
КонецПроцедуры
&НаКлиенте
Процедура ПоказателиСотрудниковПослеУдаления(Элемент)
ПоказателиСотрудниковПослеУдаленияНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ПоказателиСотрудниковПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ОценкаПроизводительностиКлиент.ЗамерВремени("ИзменениеЗначенийПоказателейВФормеДокументаИзменениеПлановыхНачислений");
ОчиститьУдаляемыхСотрудников();
Если ОтменаРедактирования Тогда
Возврат;
КонецЕсли;
Если Элемент.ТекущийЭлемент.Имя <> "ПоказателиСотрудниковСовокупнаяТарифнаяСтавка"
И Элемент.ТекущийЭлемент.Имя <> "ПоказателиСотрудниковСотрудник" Тогда
Строка = Элементы.ПоказателиСотрудников.ТекущиеДанные;
Если НЕ Строка = Неопределено
И ЗначениеЗаполнено(Строка.Сотрудник) Тогда
ПоказателиСотрудниковПриОкончанииРедактированияНаСервере(Элементы.ПоказателиСотрудников.ТекущаяСтрока);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказателиСотрудниковОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ПоказателиСотрудниковОбработкаВыбораНаСервере(ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПоказателиСотрудниковПоказательПриИзменении(Элемент)
ПутьКДанным = Прав(Элемент.Имя, СтрДлина(Элемент.Имя) - СтрДлина(ПрефиксЭлементаПоказателиСотрудников()));
ЗначениеПоказателя = Элементы.ПоказателиСотрудников.ТекущиеДанные[ПутьКДанным];
ТаблицаЗначенийПоказателя = Элементы.ПоказателиСотрудников.ТекущиеДанные[ИмяРеквизитаТаблицаПоказателя(ПутьКДанным)];
ТаблицаЗначенийПоказателя[0].Значение = ЗначениеПоказателя;;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Команда, Объект)
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначения.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплата");
МодульПроцессыОбработкиДокументовЗарплата.ВыполнитьЗадачу(ЭтотОбъект, Контекст, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ПроцессыОбработкиДокументовЗарплата") Тогда
МодульПроцессыОбработкиДокументовЗарплата = ОбщегоНазначенияКлиент.ОбщийМодуль("ПроцессыОбработкиДокументовЗарплатаКлиент");
МодульПроцессыОбработкиДокументовЗарплата.КомментарийСледующемуНачалоВыбора(ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Заполнить(Команда) Экспорт
ОценкаПроизводительностиКлиент.ЗамерВремени("ЗаполнениеДокументаИзменениеПлановыхНачислений");
ОчиститьСообщения();
ЗаполнитьНачисленияПоказателиСотрудников(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПодборСотрудников(Команда)
ОценкаПроизводительностиКлиент.ЗамерВремени("ПодборСотрудникаВФормеДокументаИзменениеПлановыхНачислений");
ПараметрыОткрытия = Неопределено;
КадровыйУчетРасширенныйКлиент.ДобавитьПараметрыОтбораПоФункциональнойОпцииВыполнятьРасчетЗарплатыПоПодразделениям(
ЭтаФорма, ПараметрыОткрытия);
КадровыйУчетКлиент.ВыбратьСотрудниковРаботающихВПериодеПоПараметрамОткрытияФормыСписка(
Элементы.ПоказателиСотрудников,
Объект.Организация,
Объект.Подразделение,
Объект.ДатаИзменения,
Объект.ДатаОкончания,
Истина,
АдресСпискаПодобранныхСотрудников(),
ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьНачислениеВсемСотрудникам(Команда)
МассивСпособовРасчета = Новый Массив;
МассивСпособовРасчета.Добавить(ПредопределенноеЗначение("Перечисление.СпособыВыполненияНачислений.ЕжемесячноПриОкончательномРасчете"));
МассивСпособовРасчета.Добавить(ПредопределенноеЗначение("Перечисление.СпособыВыполненияНачислений.ВЗаданныхМесяцахПриОкончательномРасчете"));
Отбор = Новый Массив;
Отбор.Добавить(Новый Структура("ЛевоеЗначение, ВидСравнения, ПравоеЗначение", "СпособВыполненияНачисления", ВидСравненияКомпоновкиДанных.ВСписке, МассивСпособовРасчета));
ВыбратьНачисление("ДобавитьНачислениеВсемСотрудникамЗавершение", Отбор);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьНачислениеУВсехСотрудников(Команда)
МассивВидовРасчета = Новый Массив;
Для каждого СтрокаКоллекции Из Объект.НачисленияСотрудников Цикл
МассивВидовРасчета.Добавить(СтрокаКоллекции.Начисление);
КонецЦикла;
Отбор = Новый Массив;
Отбор.Добавить(Новый Структура("ЛевоеЗначение, ВидСравнения, ПравоеЗначение", "Ссылка", ВидСравненияКомпоновкиДанных.ВСписке, МассивВидовРасчета));
ВыбратьНачисление("УдалитьНачислениеВсемСотрудникамЗавершение", Отбор);
КонецПроцедуры
&НаКлиенте
Процедура РасчетФОТПодробно(Команда)
РасчетФОТПодробноНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоказатели(Команда)
МассивПоказателей = Новый Массив;
МассивНачислений = Новый Массив;
Для каждого Показатель Из ОтображаемыеПоказатели Цикл
Если ТипЗнч(Показатель.Значение) = Тип("СправочникСсылка.ПоказателиРасчетаЗарплаты") Тогда
МассивПоказателей.Добавить(Показатель.Значение);
Иначе
МассивНачислений.Добавить(Показатель.Значение);
КонецЕсли;
КонецЦикла;
Если МассивПоказателей.Количество() = 0 И МассивНачислений.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru='Нет показателей к заполнению'"));
Иначе
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РасширенноеРедактирование", Истина);
ПараметрыФормы.Вставить("МассивПоказателей", МассивПоказателей);
Если МассивНачислений.Количество() > 0 Тогда
ПараметрыФормы.Вставить("МассивНачислений", МассивНачислений);
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.ГрупповоеЗаполнениеПоказателейДокументов", ПараметрыФормы, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль(
"ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент");
МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(
Команда,
ЭтотОбъект,
Объект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПервоначальныеЗначения()
ЗначенияДляЗаполнения = Новый Структура;
ЗначенияДляЗаполнения.Вставить("Ответственный", "Объект.Ответственный");
Если Параметры.ЗначенияЗаполнения.Свойство("Организация")
И ЗначениеЗаполнено(Параметры.ЗначенияЗаполнения.Организация) Тогда
Объект.Организация = Параметры.ЗначенияЗаполнения.Организация;
КонецЕсли;
Если Параметры.ЗначенияЗаполнения.Свойство("Подразделение")
И ЗначениеЗаполнено(Параметры.ЗначенияЗаполнения.Подразделение) Тогда
Объект.Подразделение = Параметры.ЗначенияЗаполнения.Подразделение;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
ЗначенияДляЗаполнения.Вставить("Организация", "Объект.Организация");
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ВыполнятьРасчетЗарплатыПоПодразделениям") Тогда
ЗначенияДляЗаполнения.Вставить("Подразделение", "Объект.Подразделение");
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ДатаИзменения) Тогда
ЗначенияДляЗаполнения.Вставить("ДатаСобытия", "Объект.ДатаИзменения");
КонецЕсли;
ЗарплатаКадры.ЗаполнитьПервоначальныеЗначенияВФорме(ЭтаФорма, ЗначенияДляЗаполнения);
ЗаполнитьОтображаемыеПоказатели();
КонецПроцедуры
#Область СервернаяЧастьОбработчиковСобытийЭлементовФормы
&НаСервере
Процедура ПоказателиСотрудниковПриОкончанииРедактированияНаСервере(ИдентификаторСтроки)
СтрокаСотрудника = Объект.Сотрудники.НайтиПоИдентификатору(ИдентификаторСтроки);
ФильтрСотрудников = Документы.ИзменениеПлановыхНачислений.ПустойФильтрСотрудников();
ЭлементФильтра = ФильтрСотрудников.Добавить();
ЭлементФильтра.Сотрудник = СтрокаСотрудника.Сотрудник;
ЭлементФильтра.ДатаИзменения = СтрокаСотрудника.ВремяРегистрации;
ЭлементФильтра.ИдентификаторСтрокиСотрудника = СтрокаСотрудника.ИдентификаторСтрокиСотрудника;
ПлановыеНачисленияПоказателиСотрудников = ПлановыеНачисленияПоказателиСотрудниковСИзменениямиДокумента(ФильтрСотрудников);
ФОТПлановыхНачисленийСотрудников = ФОТПлановыхНачисленийСотрудниковСИзменениямиДокумента(ПлановыеНачисленияПоказателиСотрудников);
ЗаполнитьФОТНачисленийСотрудников(ФОТПлановыхНачисленийСотрудников.ПлановыйФОТ);
ФОТСотрудников = ФОТСотрудниковПоОписаниюНачислений(ФОТПлановыхНачисленийСотрудников.ПлановыйФОТ);
СтрокаСотрудника.ФОТ = ФОТСотрудников.Получить(СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
НачисленияСотрудника = Объект.НачисленияСотрудников.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", СтрокаСотрудника.ИдентификаторСтрокиСотрудника));
Запрос = ЗапросИзменяемыхНачислений(НачисленияСотрудника);
НачисленияСотрудникаСОписанием = НачисленияСотрудниковСОписанием(Запрос);
НачисленияСотрудникаВСтроку(СтрокаСотрудника, НачисленияСотрудникаСОписанием, ПредставлениеПустойКоллекцииНачислений());
НачисленияСотрудников = ПлановыеНачисленияПоказателиСотрудников.НачисленияСотрудников.СкопироватьКолонки();
ПоказателиСотрудников = ПлановыеНачисленияПоказателиСотрудников.ПоказателиСотрудников.СкопироватьКолонки();
ЗаполнитьЗначенияСовокупныхТарифныхСтавокСотрудников(ФОТПлановыхНачисленийСотрудников.ТарифныеСтавки);
ЗаполнитьКоэффициентыИндексации(СтрокаСотрудника);
УстановитьОтображениеНадписей();
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
ОбновитьИтогиСтрок();
КонецПроцедуры
&НаСервере
Процедура ПоказателиСотрудниковСотрудникПриИзмененииНаСервере(ИдентификаторСтроки)
ЗавершитьУдалениеСотрудников();
ТекущаяСтрока = Объект.Сотрудники.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ПрочитатьВремяРегистрацииСтроки(Объект.Ссылка, ТекущаяСтрока);
ЗаполнитьНачисленияПоказателиСотрудника(ТекущаяСтрока);
УстановитьОтображениеНадписей();
КонецПроцедуры
&НаСервере
Процедура ПоказателиСотрудниковДатаИзмененияПриИзмененииНаСервере(ИдентификаторСтроки)
ТекущаяСтрока = Объект.Сотрудники.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ПрочитатьВремяРегистрацииСтроки(Объект.Ссылка, ТекущаяСтрока);
ЗаполнитьНачисленияПоказателиСотрудника(ТекущаяСтрока);
УстановитьОтображениеНадписей();
КонецПроцедуры
&НаСервере
Процедура ПоказателиСотрудниковОбработкаВыбораНаСервере(ВыбранноеЗначение)
ФильтрСотрудников = Документы.ИзменениеПлановыхНачислений.ПустойФильтрСотрудников();
ВремяРегистрацииСотрудников = ЗарплатаКадрыРасширенный.ВремяРегистрацииСотрудниковДокумента(Объект.Ссылка, ВыбранноеЗначение, Объект.ДатаИзменения);
Для Каждого Сотрудник Из ВыбранноеЗначение Цикл
МаксимальныйИдентификаторСтрокиСотрудника = МаксимальныйИдентификаторСтрокиСотрудника + 1;
ЭлементФильтра = ФильтрСотрудников.Добавить();
ЭлементФильтра.Сотрудник = Сотрудник;
ЭлементФильтра.ДатаИзменения = ВремяРегистрацииСотрудников.Получить(Сотрудник);
ЭлементФильтра.ИдентификаторСтрокиСотрудника = МаксимальныйИдентификаторСтрокиСотрудника;
КонецЦикла;
ЗаполнитьНачисленияПоказателиСотрудников(Ложь, ФильтрСотрудников);
КонецПроцедуры
&НаСервере
Процедура ПодразделениеПриИзмененииНаСервере()
УстановитьДоступностьЭлементовФормы();
КонецПроцедуры
&НаСервере
Процедура ПоказателиСотрудниковПослеУдаленияНаСервере()
Если НЕ ЕстьУдаляемыеСотрудники() Тогда
Возврат;
КонецЕсли;
ЗавершитьУдалениеСотрудников();
РеквизитФормыВДанныеСотрудников(Объект);
ДанныеСотрудниковВРеквизитФормы();
ФОТСотрудниковВРеквизитФормы();
УстановитьОтображениеНадписей();
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
ОбновитьИтогиСтрок();
КонецПроцедуры
&НаСервере
Процедура ДатаИзмененияПриИзмененииНаСервере()
Если Не Объект.РазныеСрокиДляРазныхСотрудников Тогда
ЗаполнитьПериодыИзмененийСотрудников();
ЗаполнитьТекущиеПоказатели();
ЗаполнитьТекущиеДанныеОплатыТруда();
КонецЕсли;
УстановитьОтображениеНадписей();
КонецПроцедуры
&НаСервере
Процедура РасчетФОТПодробноНаСервере()
Пометка = ОбщегоНазначенияКлиентСервер.ЗначениеСвойстваЭлементаФормы(ЭтотОбъект.Элементы, "ПоказателиСотрудниковРасчетФОТПодробно", "Пометка");
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(ЭтотОбъект.Элементы, "ПоказателиСотрудниковРасчетФОТПодробно", "Пометка", Не Пометка);
ЭтотОбъект.ПодробныйРасчетФОТ = Не Пометка;
УстановитьВидимостьКолонокПодробногоРасчета();
ЗаполнитьТекущиеПоказатели();
ЗаполнитьТекущиеДанныеОплатыТруда();
КонецПроцедуры
#КонецОбласти
#Область ПриПолученииДанныхНаСервере
&НаСервере
Процедура ПриПолученииДанныхНаСервере()
ДанныеСотрудниковВРеквизитФормы();
ЗарплатаКадрыРасширенный.ОформлениеНесколькихДокументовНаОднуДатуДополнитьФорму(ЭтотОбъект);
ЗарплатаКадры.КлючевыеРеквизитыЗаполненияФормыЗаполнитьПредупреждения(ЭтаФорма);
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
УстановитьВидимостьЭлементовФормы();
УстановитьДоступностьЭлементовФормы();
УстановитьОтображениеНадписей();
УстановитьДоступностьКомандыЗаполнитьПоказатели();
ЗаполнитьФОТСотрудниковВФорме();
КонецПроцедуры
#КонецОбласти
#Область ДанныеСотрудниковВРеквизитФормы
&НаСервере
Процедура ДанныеСотрудниковВРеквизитФормы(ФильтрСотрудников = Неопределено)
ПрочитатьВремяРегистрации();
СтрокиСотрудников = Неопределено;
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.ДатаИзменения", "МесяцИндексацииСтрокой");
МаксимальныйИдентификаторСтрокиСотрудника = ЗарплатаКадрыРасширенный.МаксимальныйИдентификаторСтроки(
Объект.Сотрудники, "ИдентификаторСтрокиСотрудника");
Если ФильтрСотрудников = Неопределено Тогда
Запрос = ЗапросИзменяемыхНачислений();
Иначе
СтрокиНачислений = Новый Массив;
Для каждого ОписаниеСотрудника Из ФильтрСотрудников Цикл
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(
СтрокиНачислений, Объект.НачисленияСотрудников.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", ОписаниеСотрудника.ИдентификаторСтрокиСотрудника)));
КонецЦикла;
Запрос = ЗапросИзменяемыхНачислений(СтрокиНачислений);
КонецЕсли;
НачисленияСотрудниковСОписанием = НачисленияСотрудниковСОписанием(Запрос);
ПоказателиСотрудников = ПоказателиСотрудников(Запрос);
Для Каждого СтрокаПоказателей Из ПоказателиСотрудников Цикл
Если ОтображаемыеПоказатели.НайтиПоЗначению(СтрокаПоказателей.Показатель) = Неопределено Тогда
ОтображаемыеПоказатели.Вставить(0,СтрокаПоказателей.Показатель);
КонецЕсли;
КонецЦикла;
СведенияОПоказателяхФормы = ПлановыеНачисленияСотрудников.СведенияОПоказателях(ОтображаемыеПоказатели);
ДополнитьФормуИзменяемымиПоказателями(СведенияОПоказателяхФормы);
ОписаниеПоказателейФормы = ОписаниеПоказателей(СведенияОПоказателяхФормы);
ДанныеСотрудниковВСтроки(НачисленияСотрудниковСОписанием, ПоказателиСотрудников, ОписаниеПоказателейФормы, ФильтрСотрудников);
Если ФильтрСотрудников <> Неопределено Тогда
СтрокиСотрудников = Новый Массив;
Для каждого ОписаниеСотрудника Из ФильтрСотрудников Цикл
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(
СтрокиСотрудников, Объект.Сотрудники.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", ОписаниеСотрудника.ИдентификаторСтрокиСотрудника)));
КонецЦикла;
КонецЕсли;
ЗаполнитьТекущиеПоказатели(СтрокиСотрудников);
ЗаполнитьТекущиеДанныеОплатыТруда(СтрокиСотрудников);
УстановитьОтображениеНомераПервичногоДокумента(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТекущиеДанныеОплатыТруда(СтрокиСотрудников = Неопределено, РасчетКоэффициентовИндексации = Ложь)
РасчетКоэффициентовИндексацииГС = Ложь;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыПриложения.ГосударственнаяСлужба") Тогда
РасчетКоэффициентовИндексацииГС = ПолучитьФункциональнуюОпцию("ИспользоватьГосударственнуюСлужбу") ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьМуниципальнуюСлужбу");
КонецЕсли;
Если Не ПодробныйРасчетФОТ
И Не РасчетКоэффициентовИндексации
И Не РасчетКоэффициентовИндексацииГС Тогда
Возврат;
КонецЕсли;
Если СтрокиСотрудников <> Неопределено Тогда
СотрудникиДаты = Объект.Сотрудники.Выгрузить(СтрокиСотрудников, "Сотрудник, ВремяРегистрации");
СотрудникиДаты.Колонки.ВремяРегистрации.Имя = "Период";
Иначе
СотрудникиДаты = Объект.Сотрудники.Выгрузить(,"Сотрудник, ВремяРегистрации");
СотрудникиДаты.Колонки.ВремяРегистрации.Имя = "Период";
КонецЕсли;
ТекущиеДанныеОплатыТруда = ПлановыеНачисленияСотрудников.ТекущиеДанныеОплатыТрудаСотрудников(Объект.Ссылка, СотрудникиДаты);
Если СтрокиСотрудников = Неопределено Тогда
Для Каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
ЗаполнитьТекущиеДанныеОплатыТрудаСотрудника(СтрокаСотрудника, ТекущиеДанныеОплатыТруда);
КонецЦикла;
Иначе
Для Каждого СтрокаСотрудника Из СтрокиСотрудников Цикл
ЗаполнитьТекущиеДанныеОплатыТрудаСотрудника(СтрокаСотрудника, ТекущиеДанныеОплатыТруда);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТекущиеДанныеОплатыТрудаСотрудника(СтрокаСотрудника, ТекущиеДанныеОплатыТруда)
СтруктураПоиска = Новый Структура("Сотрудник, Период");
СтруктураПоиска.Сотрудник = СтрокаСотрудника.Сотрудник;
СтруктураПоиска.Период = СтрокаСотрудника.ВремяРегистрации;
НайденныеСтроки = ТекущиеДанныеОплатыТруда.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаДанных Из НайденныеСтроки Цикл
СтрокаСотрудника.СовокупнаяТарифнаяСтавкаТекущееЗначение = СтрокаДанных.СовокупнаяТарифнаяСтавка;
СуммаПодстановки = Строка(Формат(СтрокаДанных.СовокупнаяТарифнаяСтавка, "ЧДЦ=5; ЧРГ="));
СуммаПодстановки = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(СуммаПодстановки, 10, " ");
ПредставлениеТекущего = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'было: %1'"), СуммаПодстановки);
СтрокаСотрудника.СовокупнаяТарифнаяСтавкаТекущееЗначениеПредставление = ПредставлениеТекущего;
СуммаПодстановки = Строка(Формат(СтрокаДанных.ФОТ, "ЧДЦ=2; ЧРГ="));
СуммаПодстановки = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(СуммаПодстановки, 10, " ");
ПредставлениеТекущего = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'было: %1'"), СуммаПодстановки);
СтрокаСотрудника.ФОТТекущееЗначение = ПредставлениеТекущего;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТекущиеПоказатели(СтрокиСотрудников = Неопределено)
Если Не ПодробныйРасчетФОТ Тогда
Возврат;
КонецЕсли;
Если СтрокиСотрудников <> Неопределено Тогда
СотрудникиДаты = Объект.Сотрудники.Выгрузить(СтрокиСотрудников, "Сотрудник, ВремяРегистрации");
СотрудникиДаты.Колонки.ВремяРегистрации.Имя = "Период";
Иначе
СотрудникиДаты = Объект.Сотрудники.Выгрузить(,"Сотрудник, ВремяРегистрации");
СотрудникиДаты.Колонки.ВремяРегистрации.Имя = "Период";
КонецЕсли;
МассивПоказателей = ОтображаемыеПоказатели.ВыгрузитьЗначения();
ЗначенияТекущихПоказателей = ПлановыеНачисленияСотрудников.ТекущиеПоказателиСотрудников(Объект.Ссылка, СотрудникиДаты, МассивПоказателей);
Если СтрокиСотрудников = Неопределено Тогда
Для Каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
ЗаполнитьТекущиеПоказателиСотрудника(СтрокаСотрудника, ЗначенияТекущихПоказателей);
КонецЦикла;
Иначе
Для Каждого СтрокаСотрудника Из СтрокиСотрудников Цикл
ЗаполнитьТекущиеПоказателиСотрудника(СтрокаСотрудника, ЗначенияТекущихПоказателей);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТекущиеПоказателиСотрудника(СтрокаСотрудника, ЗначенияТекущихПоказателей)
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("Сотрудник", СтрокаСотрудника.Сотрудник);
СтруктураПоиска.Вставить("Период", СтрокаСотрудника.ВремяРегистрации);
МассивПоказателей = ОтображаемыеПоказатели.ВыгрузитьЗначения();
СведенияОПоказателях = ПлановыеНачисленияСотрудников.СведенияОПоказателях(ОтображаемыеПоказатели);
Для Каждого Показатель Из МассивПоказателей Цикл
ИнфоОПоказателе = СведенияОПоказателях[Показатель];
ИдентификаторПоказателя = ИнфоОПоказателе.Идентификатор;
ИмяПоказателяТекущееЗначение = ИдентификаторПоказателя + "ТекущееЗначение";
СтрокаСотрудника[ИмяПоказателяТекущееЗначение] = "";
КонецЦикла;
НайденныеСтроки = ЗначенияТекущихПоказателей.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаПоказателей Из НайденныеСтроки Цикл
ИнфоОПоказателе = СведенияОПоказателях[СтрокаПоказателей.Показатель];
ИдентификаторПоказателя = ИнфоОПоказателе.Идентификатор;
ИмяПоказателяТекущееЗначение = ИдентификаторПоказателя + "ТекущееЗначение";
Если ТипЗнч(СтрокаПоказателей.Показатель) = Тип("СправочникСсылка.ПоказателиРасчетаЗарплаты") Тогда
ПоказательИнфо = ЗарплатаКадрыРасширенный.СведенияОПоказателеРасчетаЗарплаты(СтрокаПоказателей.Показатель);
ФорматПоказателя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЧДЦ=%1", ПоказательИнфо.Точность);
Иначе
ФорматПоказателя = "ЧДЦ=2";
КонецЕсли;
ЗначениеПоказателя = Формат(СтрокаПоказателей.Значение, ФорматПоказателя);
Если ЗначениеЗаполнено(СтрокаСотрудника[ИмяПоказателяТекущееЗначение]) Тогда
СтрокаСотрудника[ИмяПоказателяТекущееЗначение] = СтрокаСотрудника[ИмяПоказателяТекущееЗначение] + ";"
+ ЗначениеПоказателя;
Иначе
СуммаПодстановки = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(ЗначениеПоказателя, 10, " ");
СтрокаСотрудника[ИмяПоказателяТекущееЗначение] = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'было: %1'"), СуммаПодстановки);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ФОТСотрудниковВРеквизитФормы(ФОТСотрудников = Неопределено)
Если ФОТСотрудников = Неопределено Тогда
ФОТСотрудников = ФОТСотрудников();
КонецЕсли;
Для каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
ФОТСотрудника = ФОТСотрудников.Получить(СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
Если ФОТСотрудника <> Неопределено Тогда
СтрокаСотрудника.ФОТ = ФОТСотрудника;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЗапросИзменяемыхНачислений(НачисленияСотрудника = Неопределено)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияСотрудников.ИдентификаторСтрокиСотрудника,
| НачисленияСотрудников.Действие,
| НачисленияСотрудников.Начисление КАК Начисление,
| НачисленияСотрудников.ДокументОснование КАК ДокументОснование,
| НачисленияСотрудников.Размер
|ПОМЕСТИТЬ ВТНачисления
|ИЗ
| &НачисленияСотрудников КАК НачисленияСотрудников";
Если НачисленияСотрудника = Неопределено Тогда
НачисленияСотрудников = Объект.НачисленияСотрудников.Выгрузить();
Иначе
НачисленияСотрудников = Объект.НачисленияСотрудников.Выгрузить(НачисленияСотрудника);
КонецЕсли;
Запрос.УстановитьПараметр("НачисленияСотрудников", НачисленияСотрудников);
Запрос.Выполнить();
Возврат Запрос;
КонецФункции
&НаСервере
Функция НачисленияСотрудниковСОписанием(Запрос)
Запрос.Текст =
"ВЫБРАТЬ
| НачисленияДокумента.ИдентификаторСтрокиСотрудника КАК ИдентификаторСтрокиСотрудника,
| НачисленияДокумента.Начисление,
| НачисленияДокумента.ДокументОснование,
| НачисленияДокумента.Размер,
| НачисленияДокумента.Действие,
| Начисления.Представление,
| Начисления.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания,
| НЕ Начисления.Рассчитывается КАК НачислениеФиксированнойСуммой,
| Начисления.Код
|ИЗ
| ВТНачисления КАК НачисленияДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК Начисления
| ПО НачисленияДокумента.Начисление = Начисления.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| РеквизитДопУпорядочивания";
НачисленияСотрудниковСОписанием = Запрос.Выполнить().Выгрузить();
НачисленияСотрудниковСОписанием.Индексы.Добавить("ИдентификаторСтрокиСотрудника");
Возврат НачисленияСотрудниковСОписанием;
КонецФункции
&НаСервере
Функция ПоказателиСотрудников(Запрос)
ПоказателиСотрудников = Новый ТаблицаЗначений;
ПоказателиСотрудников.Колонки.Добавить("Показатель");
ПоказателиСотрудников.Колонки.Добавить("ДокументОснование");
ПоказателиСотрудников.Колонки.Добавить("Значение");
ПоказателиСотрудников.Колонки.Добавить("Действие");
ПоказателиСотрудников.Колонки.Добавить("ИдентификаторСтрокиСотрудника");
Запрос.УстановитьПараметр("ПоказателиСотрудников", Объект.ПоказателиСотрудников.Выгрузить());
Запрос.Текст =
"ВЫБРАТЬ
| ПоказателиСотрудников.ИдентификаторСтрокиСотрудника КАК ИдентификаторСтрокиСотрудника,
| ПоказателиСотрудников.Показатель КАК Показатель,
| ПоказателиСотрудников.ДокументОснование КАК ДокументОснование,
| ПоказателиСотрудников.Действие КАК Действие,
| ПоказателиСотрудников.Значение КАК Значение
|ПОМЕСТИТЬ ВТПоказателиСотрудников
|ИЗ
| &ПоказателиСотрудников КАК ПоказателиСотрудников
|;
|
|
|ВЫБРАТЬ
| НачисленияДокумента.ИдентификаторСтрокиСотрудника КАК ИдентификаторСтрокиСотрудника,
| НачисленияПоказатели.Показатель КАК Показатель,
| НачисленияДокумента.ДокументОснование КАК ДокументОснование,
| ПоказателиСотрудников.Действие КАК Действие,
| ЕСТЬNULL(ПоказателиСотрудников.Значение, 0) КАК Значение
|ИЗ
| ВТНачисления КАК НачисленияДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления.Показатели КАК НачисленияПоказатели
| ПО НачисленияДокумента.Начисление = НачисленияПоказатели.Ссылка
| И (НачисленияПоказатели.ЗапрашиватьПриВводе)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПоказателиСотрудников КАК ПоказателиСотрудников
| ПО НачисленияДокумента.ИдентификаторСтрокиСотрудника = ПоказателиСотрудников.ИдентификаторСтрокиСотрудника
| И НачисленияДокумента.ДокументОснование = ПоказателиСотрудников.ДокументОснование
| И (НачисленияПоказатели.Показатель = ПоказателиСотрудников.Показатель)
|ГДЕ
| НачисленияПоказатели.Ссылка.Рассчитывается
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| НачисленияДокумента.ИдентификаторСтрокиСотрудника,
| НачисленияДокумента.Начисление,
| НачисленияДокумента.ДокументОснование,
| НачисленияДокумента.Действие,
| НачисленияДокумента.Размер
|ИЗ
| ВТНачисления КАК НачисленияДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.Начисления КАК Начисления
| ПО НачисленияДокумента.Начисление = Начисления.Ссылка
|ГДЕ
| НЕ Начисления.Рассчитывается
| И НЕ НачисленияДокумента.Действие = ЗНАЧЕНИЕ(Перечисление.ДействияСНачислениямиИУдержаниями.Отменить)
|
|УПОРЯДОЧИТЬ ПО
| ИдентификаторСтрокиСотрудника,
| Показатель,
| Значение";
НачисленияФиксированнойСуммой = Запрос.Выполнить().Выгрузить();
Для каждого Строка Из НачисленияФиксированнойСуммой Цикл
ЗаполнитьЗначенияСвойств(ПоказателиСотрудников.Добавить(), Строка);
КонецЦикла;
ПоказателиСотрудников.Индексы.Добавить("ИдентификаторСтрокиСотрудника");
Возврат ПоказателиСотрудников;
КонецФункции
#Область ДополнитьФормуИзменяемымиПоказателями
&НаСервере
Процедура ДополнитьФормуИзменяемымиПоказателями(ИзменяемыеПоказатели)
ДобавитьРеквизитыПоказателей(ИзменяемыеПоказатели);
ДобавитьЭлементыПоказателей(ИзменяемыеПоказатели);
КонецПроцедуры
#Область ДобавитьРеквизитыПоказателей
&НаСервере
Процедура ДобавитьРеквизитыПоказателей(ИзменяемыеПоказатели)
ДобавляемыеРеквизиты = Новый Массив;
ДобавитьРеквизитыИзменяемыеПоказатели(ИзменяемыеПоказатели, ДобавляемыеРеквизиты);
СуществующиеРеквизиты = МассивИменРеквизитовФормы();
ЗарплатаКадры.ИзменитьРеквизитыФормы(ЭтаФорма, ДобавляемыеРеквизиты, СуществующиеРеквизиты);
ЗаполнитьСоответствиеРеквизитовИПоказателей(ИзменяемыеПоказатели);
КонецПроцедуры
&НаСервере
Процедура ДобавитьРеквизитыИзменяемыеПоказатели(Показатели, ДобавляемыеРеквизиты)
Для Каждого КлючИЗначение Из Показатели Цикл
ИнфоОПоказателе = КлючИЗначение.Значение;
ДобавитьРеквизитыПоказателя(ДобавляемыеРеквизиты, ИнфоОПоказателе.Идентификатор, ИнфоОПоказателе.КраткоеНаименование, ИнфоОПоказателе.ТипПоказателя);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСоответствиеРеквизитовИПоказателей(ТаблицаПоказателей)
СтруктураКолонкиПоказателей = Новый Структура;
Для Каждого СтрокаПоказателя Из ТаблицаПоказателей Цикл
ИнфоОПоказателе = СтрокаПоказателя.Значение;
СтруктураКолонкиПоказателей.Вставить(ИнфоОПоказателе.Идентификатор, Новый Структура("Показатель,ТипПоказателя", СтрокаПоказателя.Ключ, ИнфоОПоказателе.ТипПоказателя));
КонецЦикла;
ЭтотОбъект.КолонкиПоказателей = Новый ФиксированнаяСтруктура(СтруктураКолонкиПоказателей);
КонецПроцедуры
&НаСервере
Процедура ДобавитьРеквизитыПоказателя(ДобавляемыеРеквизиты, ИмяРеквизита, Заголовок, ТипПоказателя)
Путь = ИмяТаблицыПоказатели();
ИмяРеквизитаТекущееЗначение = ИмяРеквизита + "ТекущееЗначение";
ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, ИмяРеквизита, Справочники.ПоказателиРасчетаЗарплаты.ОписаниеТиповЗначенияПоказателяРасчетаЗарплаты(), Путь, Заголовок, ТипПоказателя);
ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, ИмяРеквизитаПоказательИспользуется(ИмяРеквизита), Новый ОписаниеТипов("Булево"), Путь);
ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, ИмяРеквизитаПредставлениеТаблицы(ИмяРеквизита), Новый ОписаниеТипов("Строка"), Путь);
ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, ИмяРеквизитаТекущееЗначение, Новый ОписаниеТипов("Строка"), Путь);
ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, ИмяРеквизитаТабличноеПредставление(ИмяРеквизита), Новый ОписаниеТипов("Булево"), Путь);
ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, ИмяРеквизитаТабличноеПредставление(ИмяРеквизитаТекущееЗначение), Новый ОписаниеТипов("Булево"), Путь);
ДобавитьРеквизитТаблицыЗначенийПоказателя(ДобавляемыеРеквизиты, ИмяРеквизита, Путь);
КонецПроцедуры
&НаСервере
Процедура ДобавитьРеквизитТаблицыЗначенийПоказателя(ДобавляемыеРеквизиты, ИмяРеквизита, Путь)
ТаблицаПоказателей = Новый РеквизитФормы(ИмяРеквизитаТаблицаПоказателя(ИмяРеквизита), Новый ОписаниеТипов("ТаблицаЗначений"), Путь);
ДобавляемыеРеквизиты.Добавить(ТаблицаПоказателей);
ПутьКТаблице = Путь + "." + ИмяРеквизитаТаблицаПоказателя(ИмяРеквизита);
ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, "ДокументОснование", Метаданные.ОпределяемыеТипы.ОснованиеНачисленияУдержания.Тип, ПутьКТаблице);
ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, "Значение", Справочники.ПоказателиРасчетаЗарплаты.ОписаниеТиповЗначенияПоказателяРасчетаЗарплаты(), ПутьКТаблице);
КонецПроцедуры
&НаСервере
Процедура ДобавитьРеквизитПоказателя(ДобавляемыеРеквизиты, ПутьКДанным, ТипЗначения, Путь, Заголовок = Неопределено, ТипПоказателя = Неопределено)
НовыйПоказатель = Новый РеквизитФормы(ПутьКДанным, ТипЗначения, Путь, Заголовок);
ДобавляемыеРеквизиты.Добавить(НовыйПоказатель);
Если ТипПоказателя = Перечисления.ТипыПоказателейРасчетаЗарплаты.Денежный Тогда
НовыйПоказатель = Новый РеквизитФормы("Итог" + ПутьКДанным, Новый ОписаниеТипов("Число"));
ДобавляемыеРеквизиты.Добавить(НовыйПоказатель);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция МассивИменРеквизитовФормы()
МассивИменРеквизитовФормы = Новый Массив;
ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтаФорма, МассивИменРеквизитовФормы);
ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтаФорма, МассивИменРеквизитовФормы, "Объект.Сотрудники");
Возврат МассивИменРеквизитовФормы;
КонецФункции
#КонецОбласти
#Область ДобавитьЭлементыПоказателей
&НаСервере
Процедура ДобавитьЭлементыПоказателей(ИзменяемыеПоказатели)
УдалитьЭлементыИзменяемыхПоказателей();
ДобавитьЭлементыИзменяемыеПоказатели(ИзменяемыеПоказатели);
КонецПроцедуры
&НаСервере
Процедура УдалитьЭлементыИзменяемыхПоказателей()
ГруппаПоказателиСотрудников = ГруппаПоказателиСотрудников();
УдалитьУсловноеОформлениеПоказателей(ГруппаПоказателиСотрудников);
ЗарплатаКадры.УдалитьПодчиненныеЭлементыГруппы(ЭтаФорма, ГруппаПоказателиСотрудников);
КонецПроцедуры
&НаСервере
Процедура УдалитьУсловноеОформлениеПоказателей(ГруппаПоказателиСотрудников)
УдаляемыеЭлементы = Новый Массив;
ПредставлениеУникальногоИдентификатора = Строка(ЭтотОбъект.УникальныйИдентификатор);
Для каждого ЭлементОформления Из ЭтотОбъект.УсловноеОформление.Элементы Цикл
Если ЭлементОформления.Представление = ПредставлениеУникальногоИдентификатора Тогда
УдаляемыеЭлементы.Добавить(ЭлементОформления);
КонецЕсли;
КонецЦикла;
Для каждого Элемент Из УдаляемыеЭлементы Цикл
ЭтотОбъект.УсловноеОформление.Элементы.Удалить(Элемент);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДобавитьЭлементыИзменяемыеПоказатели(СведенияОПоказателяхФормы)
ГруппаПоказатели = ГруппаПоказателиСотрудников();
ПоказыватьИтоги = Ложь;
Для Каждого СтрокаПоказателя Из ОтображаемыеПоказатели Цикл
Показатель = СтрокаПоказателя.Значение;
ИнфоОПоказателе = СведенияОПоказателяхФормы[Показатель];
ДобавитьЭлементыПоказателя(ИнфоОПоказателе.Идентификатор, ГруппаПоказатели, ИнфоОПоказателе.КраткоеНаименование);
НовыйЭлемент = Элементы[ПрефиксЭлементаПоказателиСотрудников() + ИнфоОПоказателе.Идентификатор];
УстановитьФорматИзменяемогоПоказателя(НовыйЭлемент, Показатель);
Если ИнфоОПоказателе.ТипПоказателя = Перечисления.ТипыПоказателейРасчетаЗарплаты.Денежный Тогда
ПоказыватьИтоги = Истина;
НовыйЭлемент.ОтображатьВПодвале = Истина;
НовыйЭлемент.ПутьКДаннымПодвала = "Итог" + ИнфоОПоказателе.Идентификатор;
КонецЕсли;
УстановитьУсловноеОформлениеПоказателя(ИнфоОПоказателе.Идентификатор);
КонецЦикла;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"ПоказателиСотрудников",
"Подвал",
ПоказыватьИтоги);
КонецПроцедуры
&НаСервере
Процедура ДобавитьЭлементыПоказателя(ПутьКДанным, Группа, Заголовок)
ГруппаЗначенияПоказателя = Элементы.Добавить("ГруппаПоказатель" + ПутьКДанным, Тип("ГруппаФормы"), Группа);
ГруппаЗначенияПоказателя.Заголовок = Заголовок;
ГруппаЗначенияПоказателя.ОтображатьВШапке = Истина;
ГруппаЗначенияПоказателя.ОтображатьЗаголовок = Истина;
ГруппаЗначенияПоказателя.Группировка = ГруппировкаКолонок.Горизонтальная;
ГруппаЗначенияПоказателя.РастягиватьПоГоризонтали = Ложь;
ДобавитьЭлементЗначенияПоказателя(ПутьКДанным, ГруппаЗначенияПоказателя, Заголовок);
ДобавитьЭлементЗначенияПоказателя(ПутьКДанным, ГруппаЗначенияПоказателя, Заголовок, Ложь);
КонецПроцедуры
&НаСервере
Процедура ДобавитьЭлементЗначенияПоказателя(ПутьКДанным, Группа, Заголовок, НовоеЗначение = Истина)
Если НовоеЗначение Тогда
ПутьПоказателя = ПутьКДанным;
Иначе
ПутьПоказателя = ПутьКДанным + "ТекущееЗначение";
КонецЕсли;
ЭлементПоказатель = Элементы.Добавить(ПрефиксЭлементаПоказателиСотрудников() + ПутьПоказателя, Тип("ПолеФормы"), Группа);
ЭлементПоказатель.ПутьКДанным = "Объект.Сотрудники." + ПутьПоказателя;
ЭлементПоказатель.Заголовок = Заголовок;
ЭлементПоказатель.Вид = ВидПоляФормы.ПолеВвода;
ЭлементПоказатель.ОтображатьВШапке = Ложь;
ЭлементПоказатель.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право;
ЭлементПоказатель.РастягиватьПоГоризонтали = Ложь;
ЭлементПоказатель.Ширина = 10;
Если НовоеЗначение Тогда
ЭлементПоказатель.УстановитьДействие("ПриИзменении", "Подключаемый_ПоказателиСотрудниковПоказательПриИзменении");
Иначе
ЭлементПоказатель.ТолькоПросмотр = Истина;
ЭлементПоказатель.Видимость = ПодробныйРасчетФОТ;
ЭлементПоказатель.ЦветТекста = ЦветаСтиля.ПоясняющийТекст;
ЭлементПоказатель.Шрифт = ШрифтыСтиля.ШрифтСоставнойНадписиМоноширинный;
ЭлементПоказатель.Ширина = 15;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьФорматИзменяемогоПоказателя(ЭлементПоказатель, Показатель)
Если ТипЗнч(Показатель) = Тип("СправочникСсылка.ПоказателиРасчетаЗарплаты") Тогда
ПоказательИнфо = ЗарплатаКадрыРасширенный.СведенияОПоказателеРасчетаЗарплаты(Показатель);
ЭлементПоказатель.ОграничениеТипа = ПоказательИнфо.ТипПоказателя;
ЭлементПоказатель.Формат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЧДЦ=%1", ПоказательИнфо["Точность"]);
Иначе
ЭлементПоказатель.ОграничениеТипа = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2));
ЭлементПоказатель.Формат = "ЧДЦ=2";
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеПоказателя(ПутьКДанным)
УстановитьУсловноеОформлениеПоказателяТолькоПросмотр(ПутьКДанным);
УстановитьУсловноеОформлениеПоказателяТекст(ПутьКДанным);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеПоказателяТолькоПросмотр(ПутьКДанным)
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ЭлементУсловногоОформления.Представление = Строка(ЭтотОбъект.УникальныйИдентификатор);
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Сотрудники." + ИмяРеквизитаПоказательИспользуется(ПутьКДанным));
ЭлементОтбора.ПравоеЗначение = Ложь;
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ПрефиксЭлементаПоказателиСотрудников() + ПутьКДанным);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеПоказателяТекст(ПутьКДанным)
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", Новый ПолеКомпоновкиДанных("Объект.Сотрудники." + ИмяРеквизитаПредставлениеТаблицы(ПутьКДанным)));
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,,,Истина));
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
ЭлементУсловногоОформления.Представление = Строка(ЭтотОбъект.УникальныйИдентификатор);
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Сотрудники." + ИмяРеквизитаТабличноеПредставление(ПутьКДанным));
ЭлементОтбора.ПравоеЗначение = Истина;
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ПрефиксЭлементаПоказателиСотрудников() + ПутьКДанным);
КонецПроцедуры
&НаСервере
Функция ГруппаПоказателиСотрудников()
Возврат Элементы.Найти("ГруппаПоказателиСотрудников");
КонецФункции
&НаСервере
Функция ИмяРеквизитаПоказательИспользуется(ИмяРеквизита)
Возврат ИмяРеквизита + "Используется";
КонецФункции
&НаСервере
Функция ИмяРеквизитаТаблицаПоказателя(ИмяРеквизита)
Возврат ИмяРеквизита + "Таблица";
КонецФункции
&НаСервере
Функция ИмяРеквизитаПредставлениеТаблицы(ИмяРеквизита)
Возврат ИмяРеквизита + "ПредставлениеТаблицы";
КонецФункции
&НаСервере
Функция ИмяРеквизитаТабличноеПредставление(ИмяРеквизита)
Возврат ИмяРеквизита + "ТабличноеПредставление";
КонецФункции
&НаСервере
Функция ИмяТаблицыПоказатели()
Возврат "Объект.Сотрудники";
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПрефиксЭлементаПоказателиСотрудников()
Возврат "ЗначенияПоказателейСотрудников";
КонецФункции
#КонецОбласти
#КонецОбласти
&НаСервере
Процедура ДанныеСотрудниковВСтроки(НачисленияСотрудниковСОписанием, ПоказателиСотрудников, ОписаниеИзменяемыхПоказателей, ФильтрСотрудников = Неопределено)
Отбор = Новый Структура("ИдентификаторСтрокиСотрудника");
ПредставлениеПустойКоллекцииНачислений = ПредставлениеПустойКоллекцииНачислений();
Если ФильтрСотрудников = Неопределено Тогда
СтрокиСотрудников = Объект.Сотрудники;
Иначе
СтрокиСотрудников = Новый Массив;
Для каждого ОписаниеСотрудника Из ФильтрСотрудников Цикл
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(
СтрокиСотрудников, Объект.Сотрудники.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", ОписаниеСотрудника.ИдентификаторСтрокиСотрудника)));
КонецЦикла;
КонецЕсли;
Для каждого СтрокаСотрудника Из СтрокиСотрудников Цикл
ЗаполнитьЗначенияСвойств(Отбор, СтрокаСотрудника);
ПоказателиСотрудника = ПоказателиСотрудников.НайтиСтроки(Отбор);
НачисленияСотрудника = НачисленияСотрудниковСОписанием.НайтиСтроки(Отбор);
ДанныеСотрудникаВСтроку(СтрокаСотрудника, ПоказателиСотрудника, НачисленияСотрудника, ОписаниеИзменяемыхПоказателей, ПредставлениеПустойКоллекцииНачислений);
КонецЦикла;
ОбновитьИтогиСтрок();
КонецПроцедуры
&НаСервере
Процедура ОбновитьИтогиСтрок()
Для каждого ОписаниеПоказателя Из КолонкиПоказателей Цикл
Если ОписаниеПоказателя.Значение.ТипПоказателя = Перечисления.ТипыПоказателейРасчетаЗарплаты.Денежный Тогда
ОбщегоНазначенияКлиентСервер.УстановитьРеквизитФормыПоПути(
ЭтаФорма, "Итог" + ОписаниеПоказателя.Ключ, Объект.Сотрудники.Итог(ОписаниеПоказателя.Ключ));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДанныеСотрудникаВСтроку(СтрокаСотрудника, ПоказателиСотрудника, НачисленияСотрудника, ОписаниеИзменяемыхПоказателей, ПредставлениеПустойКоллекцииНачислений)
НачисленияСотрудникаВСтроку(СтрокаСотрудника, НачисленияСотрудника, ПредставлениеПустойКоллекцииНачислений);
ПоказателиСотрудникаВСтроку(СтрокаСотрудника, ПоказателиСотрудника, ОписаниеИзменяемыхПоказателей);
КонецПроцедуры
&НаСервере
Процедура НачисленияСотрудникаВСтроку(СтрокаСотрудника, НачисленияСотрудника, ПредставлениеПустойКоллекцииНачислений)
Если НачисленияСотрудника.Количество() = 0 Тогда
СтрокаСотрудника.ПредставлениеНачислений = ПредставлениеПустойКоллекцииНачислений;
Возврат;
КонецЕсли;
ПредставлениеНачисленийСотрудника = "";
ПредставлениеОтмененныхНачисленийСотрудника = "";
ЕстьОтмененныеНачисления = Ложь;
Для каждого СтрокаНачисления Из НачисленияСотрудника Цикл
Если СтрокаНачисления.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Отменить Тогда
ПредставлениеОтмененныхНачисленийСотрудника = ПредставлениеОтмененныхНачисленийСотрудника + СтрокаНачисления.Представление+ ", ";
ЕстьОтмененныеНачисления = Истина;
Иначе
Если СтрокаНачисления.Размер = 0 Тогда
ПредставлениеНачисленийСотрудника = ПредставлениеНачисленийСотрудника + СтрокаНачисления.Представление+ ", ";
Иначе
ПредставлениеНачисленийСотрудника = ПредставлениеНачисленийСотрудника + СтрокаНачисления.Представление + "=" + СтрокаНачисления.Размер + ", ";
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПредставлениеНачисленийСотрудника = Лев(ПредставлениеНачисленийСотрудника, СтрДлина(ПредставлениеНачисленийСотрудника) - 2);
Если ЕстьОтмененныеНачисления Тогда
ПредставлениеОтмененныхНачисленийСотрудника = Лев(ПредставлениеОтмененныхНачисленийСотрудника, СтрДлина(ПредставлениеОтмененныхНачисленийСотрудника) - 2);
Если Не ПустаяСтрока(ПредставлениеНачисленийСотрудника) Тогда
ПредставлениеНачисленийСотрудника = ПредставлениеНачисленийСотрудника + "; ";
КонецЕсли;
ПредставлениеНачисленийСотрудника = ПредставлениеНачисленийСотрудника + СтрШаблон(НСтр("ru = 'Отменены: %1'"), ПредставлениеОтмененныхНачисленийСотрудника);
КонецЕсли;
СтрокаСотрудника.ПредставлениеНачислений = ПредставлениеНачисленийСотрудника;
КонецПроцедуры
&НаСервере
Процедура ПоказателиСотрудникаВСтроку(СтрокаСотрудника, ПоказателиСотрудника, ОписаниеИзменяемыхПоказателей)
Для каждого ОписаниеПоказателя Из ОписаниеИзменяемыхПоказателей Цикл
СтрокаСотрудника[ОписаниеПоказателя.Значение.ИмяРеквизитаТаблицаПоказателя].Очистить();
СтрокаСотрудника[ОписаниеПоказателя.Значение.ИмяРеквизитаПредставлениеТаблицы] = "";
СтрокаСотрудника[ОписаниеПоказателя.Значение.ИмяРеквизитаТабличноеПредставление] = Ложь;
КонецЦикла;
Для каждого ПоказательСотрудника Из ПоказателиСотрудника Цикл
ОписаниеПоказателя = ОписаниеИзменяемыхПоказателей[ПоказательСотрудника.Показатель];
Если Не ОписаниеПоказателя = Неопределено Тогда
УстановитьЗначениеПоказателяВСтроке(СтрокаСотрудника, ОписаниеПоказателя, ПоказательСотрудника);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ОписаниеПоказателей(ИзменяемыеПоказатели)
ИдентификаторыПоказателей = Новый Соответствие;
Для каждого Строка Из ИзменяемыеПоказатели Цикл
ИнфоОПоказателе = Строка.Значение;
ОписаниеПоказателя = Новый Структура;
ОписаниеПоказателя.Вставить("ИдентификаторПоказателя", ИнфоОПоказателе.Идентификатор);
ОписаниеПоказателя.Вставить("ИмяРеквизитаПоказательИспользуется", ИмяРеквизитаПоказательИспользуется(ИнфоОПоказателе.Идентификатор));
ОписаниеПоказателя.Вставить("ИмяРеквизитаПредставлениеТаблицы", ИмяРеквизитаПредставлениеТаблицы(ИнфоОПоказателе.Идентификатор));
ОписаниеПоказателя.Вставить("ИмяРеквизитаТаблицаПоказателя", ИмяРеквизитаТаблицаПоказателя(ИнфоОПоказателе.Идентификатор));
ОписаниеПоказателя.Вставить("ИмяРеквизитаТабличноеПредставление", ИмяРеквизитаТабличноеПредставление(ИнфоОПоказателе.Идентификатор));
ОписаниеПоказателя.Вставить("ТипПоказателя", ИнфоОПоказателе.ТипПоказателя);
ИдентификаторыПоказателей.Вставить(Строка.Ключ, ОписаниеПоказателя);
КонецЦикла;
Возврат ИдентификаторыПоказателей;
КонецФункции
&НаСервере
Процедура УстановитьЗначениеПоказателяВСтроке(СтрокаСотрудника, ОписаниеПоказателя, ДанныеПоказателя)
СтрокаСотрудника[ОписаниеПоказателя.ИдентификаторПоказателя] = ДанныеПоказателя.Значение;
СтрокаСотрудника[ОписаниеПоказателя.ИмяРеквизитаПоказательИспользуется] = Истина;
НоваяСтрокаПоказателя = СтрокаСотрудника[ОписаниеПоказателя.ИмяРеквизитаТаблицаПоказателя].Добавить();
НоваяСтрокаПоказателя.ДокументОснование = ДанныеПоказателя.ДокументОснование;
НоваяСтрокаПоказателя.Значение = ДанныеПоказателя.Значение;
СтрокаСотрудника[ОписаниеПоказателя.ИмяРеквизитаТабличноеПредставление] = СтрокаСотрудника[ОписаниеПоказателя.ИмяРеквизитаТаблицаПоказателя].Количество() > 1;
Если ЗначениеЗаполнено(СтрокаСотрудника[ОписаниеПоказателя.ИмяРеквизитаПредставлениеТаблицы]) Тогда
СтрокаСотрудника[ОписаниеПоказателя.ИмяРеквизитаПредставлениеТаблицы] = СтрокаСотрудника[ОписаниеПоказателя.ИмяРеквизитаПредставлениеТаблицы] + "; " + ДанныеПоказателя.Значение;
Иначе
СтрокаСотрудника[ОписаниеПоказателя.ИмяРеквизитаПредставлениеТаблицы] = Строка(ДанныеПоказателя.Значение);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПредставлениеПустойКоллекцииНачислений()
Возврат НСтр("ru='Ввести'");
КонецФункции
#КонецОбласти
#Область РеквизитФормыВДанныеСотрудников
&НаСервере
Процедура РеквизитФормыВДанныеСотрудников(ОбъектПолучатель)
Если ЕстьРедактируемыеПоказатели() Тогда
РеквизитФормыВПоказателиСотрудников(ОбъектПолучатель);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РеквизитФормыВПоказателиСотрудников(ОбъектПолучатель)
Для каждого ПоказателиСотрудника Из Объект.Сотрудники Цикл
РеквизитФормыВПоказателиСотрудника(ОбъектПолучатель.ПоказателиСотрудников, ПоказателиСотрудника);
РеквизитФормыВНачисленияСотрудника(ОбъектПолучатель.НачисленияСотрудников, ПоказателиСотрудника);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура РеквизитФормыВПоказателиСотрудника(ПоказателиСотрудников, ПоказателиСотрудника)
Для каждого КолонкаПоказатель Из КолонкиПоказателей Цикл
Если ПоказательИспользуется(ПоказателиСотрудника, КолонкаПоказатель.Ключ)
И ТипЗнч(КолонкаПоказатель.Значение.Показатель) = Тип("СправочникСсылка.ПоказателиРасчетаЗарплаты") Тогда
Для каждого СтрокаПоказателя Из ПоказателиСотрудника[ИмяРеквизитаТаблицаПоказателя(КолонкаПоказатель.Ключ)] Цикл
СтрокиПоказателя = ПоказателиСотрудников.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника,Показатель,ДокументОснование",
ПоказателиСотрудника.ИдентификаторСтрокиСотрудника, КолонкаПоказатель.Значение.Показатель, СтрокаПоказателя.ДокументОснование));
Если СтрокиПоказателя.Количество() > 0 Тогда
СтрокиПоказателя[0].Значение = СтрокаПоказателя.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура РеквизитФормыВНачисленияСотрудника(НачисленияСотрудников, ПоказателиСотрудника)
Для каждого КолонкаПоказатель Из КолонкиПоказателей Цикл
Если ПоказательИспользуется(ПоказателиСотрудника, КолонкаПоказатель.Ключ)
И ТипЗнч(КолонкаПоказатель.Значение.Показатель) = Тип("ПланВидовРасчетаСсылка.Начисления") Тогда
Для каждого СтрокаПоказателя Из ПоказателиСотрудника[ИмяРеквизитаТаблицаПоказателя(КолонкаПоказатель.Ключ)] Цикл
СтрокиНачисления = НачисленияСотрудников.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника,Начисление,ДокументОснование",
ПоказателиСотрудника.ИдентификаторСтрокиСотрудника, КолонкаПоказатель.Значение.Показатель, СтрокаПоказателя.ДокументОснование));
Если СтрокиНачисления.Количество() > 0 Тогда
СтрокиНачисления[0].Размер = СтрокаПоказателя.Значение;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЕстьРедактируемыеПоказатели()
Возврат НЕ КолонкиПоказателей = Неопределено И КолонкиПоказателей.Количество() > 0;
КонецФункции
&НаСервере
Функция ПоказательИспользуется(ПоказателиСотрудника, Показатель)
ИмяРеквизитаПоказательИспользуется = ИмяРеквизитаПоказательИспользуется(Показатель);
Возврат ПоказателиСотрудника[ИмяРеквизитаПоказательИспользуется];
КонецФункции
#КонецОбласти
#Область ЗаполнитьНачисленияПоказатели
&НаСервере
Процедура ЗаполнитьНачисленияПоказателиСотрудников(СообщатьПользователю = Ложь, ФильтрСотрудников = Неопределено)
Если НЕ ФормаДокументаГотоваДляЗаполнения(СообщатьПользователю) Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Основание) Тогда
Если Не Объект.ЭтоОтражениеИзмененияШтатногоРасписания Тогда
ТарифнаяСетка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Основание, "ТарифнаяСетка");
ЗаполнитьНачисленияПоказателиСотрудниковПоТарифнойСетке(ТарифнаяСетка);
Возврат;
ИначеЕсли Не ЗначениеЗаполнено(ДолжностиПоШтатномуРасписанию) Тогда
ЗаполнитьДолжностиПоШтатномуРасписаниюПоОснованию();
КонецЕсли;
КонецЕсли;
Если ФильтрСотрудников = Неопределено Тогда
РеквизитФормыВДанныеСотрудников(Объект);
НачисленияПоказателиСотрудников = Неопределено;
ЗаполнитьДокумент(ФильтрСотрудников, НачисленияПоказателиСотрудников);
Иначе
Для каждого ОписаниеСотрудника Из ФильтрСотрудников Цикл
СтрокиСотрудника = Объект.Сотрудники.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", ОписаниеСотрудника.ИдентификаторСтрокиСотрудника));
Если СтрокиСотрудника.Количество() > 0 Тогда
УдалитьНачисленияПоСотруднику(ОписаниеСотрудника.ИдентификаторСтрокиСотрудника);
УдалитьПоказателиПоСотруднику(ОписаниеСотрудника.ИдентификаторСтрокиСотрудника);
УдалитьБухучетНачисленийПоСотруднику(ОписаниеСотрудника.ИдентификаторСтрокиСотрудника);
КонецЕсли;
КонецЦикла;
НачисленияПоказателиСотрудников = Документы.ИзменениеПлановыхНачислений.НачисленияПоказателиСотрудниковПоОбъекту(
Объект, ФильтрСотрудников, , ДолжностиПоШтатномуРасписанию);
Документы.ИзменениеПлановыхНачислений.ЗаполнитьСотрудников(Объект, НачисленияПоказателиСотрудников);
Документы.ИзменениеПлановыхНачислений.ЗаполнитьНачисленияПоказатели(
Объект, НачисленияПоказателиСотрудников.НачисленияСотрудников, НачисленияПоказателиСотрудников.ПоказателиСотрудников);
КонецЕсли;
ДанныеСотрудниковВРеквизитФормы(ФильтрСотрудников);
ПлановыеНачисленияПоказателиСотрудников = ПлановыеНачисленияПоказателиСотрудниковСИзменениямиДокумента(ФильтрСотрудников, НачисленияПоказателиСотрудников);
ЗаполнитьБухучетНачислений(ПлановыеНачисленияПоказателиСотрудников);
ФОТСотрудников = Неопределено;
Если Объект.ЭтоОтражениеИзмененияШтатногоРасписания Тогда
ФОТПлановыхНачисленийСотрудников = ФОТПлановыхНачисленийСотрудниковСИзменениямиДокумента(ПлановыеНачисленияПоказателиСотрудников);
ЗаполнитьФОТНачисленийСотрудников(ФОТПлановыхНачисленийСотрудников.ПлановыйФОТ);
ФОТСотрудников = ФОТСотрудниковПоОписаниюНачислений(ФОТПлановыхНачисленийСотрудников.ПлановыйФОТ);
ТарифныеСтавки = ФОТПлановыхНачисленийСотрудников.ТарифныеСтавки;
Иначе
ТарифныеСтавки = ЗначенияСовокупныхТарифныхСтавокСотрудников(ПлановыеНачисленияПоказателиСотрудников);
КонецЕсли;
ЗаполнитьЗначенияСовокупныхТарифныхСтавокСотрудников(ТарифныеСтавки);
ЗаполнитьТекущиеДанныеОплатыТруда(, Истина);
ЗаполнитьКоэффициентыИндексации();
ФОТСотрудниковВРеквизитФормы(ФОТСотрудников);
УстановитьДоступностьКомандыЗаполнитьПоказатели();
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДолжностиПоШтатномуРасписаниюПоОснованию()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокументШтатногоРасписания.Позиция КАК Позиция
|ИЗ
| #ПозицииДокумента КАК ДокументШтатногоРасписания
|ГДЕ
| ДокументШтатногоРасписания.Ссылка = &Ссылка";
МетаданныеДокумента = Объект.Основание.Метаданные();
Запрос.Текст = СтрЗаменить(Запрос.Текст, "#ПозицииДокумента", СтрШаблон("Документ.%1.Позиции", МетаданныеДокумента.Имя));
Запрос.УстановитьПараметр("Ссылка", Объект.Основание);
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
ДолжностиПоШтатномуРасписанию = Новый ФиксированныйМассив(Результат.Выгрузить().ВыгрузитьКолонку("Позиция"));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНачисленияПоказателиСотрудниковПоТарифнойСетке(ТарифнаяСетка)
Если НЕ ФормаДокументаГотоваДляЗаполнения() Тогда
Возврат;
КонецЕсли;
Документ = РеквизитФормыВЗначение("Объект");
Документ.ЗаполнитьДокументПоТарифнойСетке(ТарифнаяСетка);
ЗначениеВРеквизитФормы(Документ, "Объект");
ДанныеСотрудниковВРеквизитФормы();
ЗаполнитьТекущиеДанныеОплатыТруда(, Истина);
ЗаполнитьКоэффициентыИндексации();
ФОТСотрудниковВРеквизитФормы();
УстановитьДоступностьКомандыЗаполнитьПоказатели();
ЗарплатаКадрыКлиентСервер.КлючевыеРеквизитыЗаполненияФормыУстановитьОтображениеПредупреждения(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНачисленияПоказателиСотрудника(Строка)
Если НЕ ЗначениеЗаполнено(Строка.Сотрудник) Тогда
Возврат;
КонецЕсли;
ФильтрСотрудников = Документы.ИзменениеПлановыхНачислений.ПустойФильтрСотрудников();
ЭлементФильтра = ФильтрСотрудников.Добавить();
ЭлементФильтра.Сотрудник = Строка.Сотрудник;
ЭлементФильтра.ДатаИзменения = Строка.ВремяРегистрации;
ЭлементФильтра.ИдентификаторСтрокиСотрудника = Строка.ИдентификаторСтрокиСотрудника;
ЗаполнитьНачисленияПоказателиСотрудников(Ложь, ФильтрСотрудников);
СтрокиСотрудников = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Строка);
ЗаполнитьТекущиеПоказатели(СтрокиСотрудников);
ЗаполнитьТекущиеДанныеОплатыТруда(СтрокиСотрудников);
КонецПроцедуры
&НаСервере
Функция ФормаДокументаГотоваДляЗаполнения(СообщатьПользователю = Ложь)
ФормаДокументаГотова = Истина;
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
ФормаДокументаГотова = Ложь;
Если СообщатьПользователю Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Необходимо указать организацию.'"), , "Организация");
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ДатаИзменения) Тогда
ФормаДокументаГотова = Ложь;
Если СообщатьПользователю Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Необходимо указать дату изменения.'"), , "ДатаИзменения");
КонецЕсли;
КонецЕсли;
Возврат ФормаДокументаГотова;
КонецФункции
&НаСервере
Процедура ЗаполнитьДокумент(ФильтрСотрудников = Неопределено, НачисленияПоказателиСотрудников = Неопределено)
Документ = РеквизитФормыВЗначение("Объект");
Документ.ЗаполнитьДокумент(ФильтрСотрудников, , НачисленияПоказателиСотрудников, ДолжностиПоШтатномуРасписанию);
ЗначениеВРеквизитФормы(Документ, "Объект");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьБухучетНачислений(ПлановыеНачисленияСотрудников)
СотрудникиПериоды = ПлановыеНачисленияСотрудников.Сотрудники.Скопировать(,"Сотрудник,ДатаИзменения,ИдентификаторСтрокиСотрудника");
СотрудникиПериоды.Колонки.ДатаИзменения.Имя = "Период";
ТаблицаСотрудников = СотрудникиПериоды.СкопироватьКолонки("Сотрудник,Период");
ТаблицаСотрудников.Колонки.Добавить("Начисление", Новый ОписаниеТипов("ПланВидовРасчетаСсылка.Начисления"));
ТаблицаСотрудников.Колонки.Добавить("ДокументОснование", Метаданные.ОпределяемыеТипы.РегистраторыБухучетаНачисленийСотрудников.Тип);
Отбор = Новый Структура("Сотрудник");
Для каждого СтрокаСотрудника Из СотрудникиПериоды Цикл
ЗаполнитьЗначенияСвойств(Отбор, СтрокаСотрудника);
НачисленияСотрудника = ПлановыеНачисленияСотрудников.НачисленияСотрудников.НайтиСтроки(Отбор);
Для каждого СтрокаНачислений Из НачисленияСотрудника Цикл
НоваяСтрока = ТаблицаСотрудников.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаСотрудника);
НоваяСтрока.Начисление = СтрокаНачислений.Начисление;
Если ЗначениеЗаполнено(СтрокаНачислений.ДокументОснование) Тогда
НоваяСтрока.ДокументОснование = СтрокаНачислений.ДокументОснование;
КонецЕсли;
КонецЦикла;
КонецЦикла;
БухучетНачислений = ОтражениеЗарплатыВБухучетеРасширенный.БухучетНачисленийСотрудников(ТаблицаСотрудников, Объект.Ссылка);
Отбор = Новый Структура("Сотрудник");
Для каждого СтрокаСотрудника Из СотрудникиПериоды Цикл
Отбор.Сотрудник = СтрокаСотрудника.Сотрудник;
НайденныеСтроки = БухучетНачислений.НайтиСтроки(Отбор);
Для каждого СтрокаБухучет Из НайденныеСтроки Цикл
НоваяСтрока = Объект.БухучетНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаБухучет);
НоваяСтрока.ИдентификаторСтрокиСотрудника = СтрокаСотрудника.ИдентификаторСтрокиСотрудника;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ФормаРедактированияСоставаНачисленийИУдержаний
&НаКлиенте
Процедура ОткрытьФормуРедактированияСоставаНачисленийИУдержаний(ТекущиеДанные, ТекущаяСтрока, РедактироватьСоставНачислений) Экспорт
Если ЗначениеЗаполнено(ТекущиеДанные.Сотрудник) Тогда
ПараметрыРедактирования = ПараметрыРедактированияСоставаНачисленийИУдержаний(ТекущаяСтрока, РедактироватьСоставНачислений);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВХранилище", ПоместитьВоВременноеХранилище(ПараметрыРедактирования, УникальныйИдентификатор));
ПараметрыОткрытия.Вставить("ТолькоПросмотр", ТолькоПросмотр);
ЗарплатаКадрыРасширенныйКлиент.ОткрытьФормуРедактированияСоставаНачисленийИУдержаний(ПараметрыОткрытия, ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПараметрыРедактированияСоставаНачисленийИУдержаний(ТекущаяСтрока, РедактироватьСоставНачислений)
СтрокаСотрудника = Объект.Сотрудники.НайтиПоИдентификатору(ТекущаяСтрока);
Сотрудник = СтрокаСотрудника.Сотрудник;
ПараметрыРедактирования = ЗарплатаКадрыРасширенныйКлиентСервер.ПараметрыРедактированияСоставаНачисленийИУдержаний();
ПараметрыРедактирования.ВладелецНачисленийИУдержаний = Сотрудник;
ПараметрыРедактирования.ДатаРедактирования = СтрокаСотрудника.ВремяРегистрации;
ПараметрыРедактирования.Организация = Объект.Организация;
ПараметрыРедактирования.РежимРаботы = 3;
ПараметрыРедактирования.РедактироватьБухучетНачислений = ПолучитьФункциональнуюОпцию("РегистрироватьБухучетПлановыхНачислений");
ФильтрСотрудников = Документы.ИзменениеПлановыхНачислений.ПустойФильтрСотрудников();
ЭлементФильтра = ФильтрСотрудников.Добавить();
ЭлементФильтра.Сотрудник = СтрокаСотрудника.Сотрудник;
ЭлементФильтра.ДатаИзменения = СтрокаСотрудника.ВремяРегистрации;
ЭлементФильтра.ИдентификаторСтрокиСотрудника = СтрокаСотрудника.ИдентификаторСтрокиСотрудника;
ПлановыеНачисленияПоказателиСотрудников = ПлановыеНачисленияПоказателиСотрудниковСИзменениямиДокумента(ФильтрСотрудников);
ФОТПлановыхНачисленийСотрудникаСИзменениямиДокумента = ФОТПлановыхНачисленийСотрудниковСИзменениямиДокумента(ПлановыеНачисленияПоказателиСотрудников, Ложь).ПлановыйФОТ;
ПриведенныеНачисленияПоказатели = НачисленияПоказателиСотрудникаПриведенныеДляФормыРедактирования(ПлановыеНачисленияПоказателиСотрудников, ФОТПлановыхНачисленийСотрудникаСИзменениямиДокумента);
ДобавитьБухучетНачислений(ФильтрСотрудников, ПриведенныеНачисленияПоказатели.Начисления);
ПараметрыРедактирования.ОписаниеТаблицыНачислений.Используется = Истина;
ПараметрыРедактирования.ОписаниеТаблицыНачислений.ИзменятьСоставВидовРасчета = РедактироватьСоставНачислений;
ПараметрыРедактирования.ОписаниеТаблицыНачислений.ИзменятьЗначенияПоказателей = РедактироватьСоставНачислений;
ПараметрыРедактирования.ОписаниеТаблицыНачислений.НомерТаблицы = 1;
ПараметрыРедактирования.ОписаниеТаблицыНачислений.ПоказатьФОТ = НЕ РедактироватьСоставНачислений;
ПараметрыРедактирования.ОписаниеТаблицыНачислений.Таблица = ПриведенныеНачисленияПоказатели.Начисления;
ПараметрыРедактирования.Показатели = ПриведенныеНачисленияПоказатели.Показатели;
Возврат ПараметрыРедактирования;
КонецФункции
&НаСервере
Процедура ЗаполнитьДанныеСотрудникаИзВРеменногоХранилища(АдресВХранилище)
ДанныеИзХранилища = ПолучитьИзВременногоХранилища(АдресВХранилище);
Если ДанныеИзХранилища <> Неопределено Тогда
РеквизитФормыВДанныеСотрудников(Объект);
ЗаполнитьНачисленияПоСотрудникуИзХранилища(ДанныеИзХранилища);
ЗаполнитьПоказателиПоСотрудникуИзХранилища(ДанныеИзХранилища);
ЗаполнитьБухучетНачисленийПоСотрудникуИзХранилища(ДанныеИзХранилища);
ДанныеСотрудниковВРеквизитФормы();
ФОТСотрудниковВРеквизитФормы();
ЗаполнитьЗначенияСовокупныхСтавокПоСотрудникуИзХранилища(ДанныеИзХранилища);
УстановитьДоступностьКомандыЗаполнитьПоказатели();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНачисленияПоСотрудникуИзХранилища(ДанныеИзХранилища)
СтрокаСотрудника = Объект.Сотрудники.НайтиПоИдентификатору(Элементы.ПоказателиСотрудников.ТекущаяСтрока);
УдалитьНачисленияПоСотруднику(СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
Для каждого НачислениеСотрудника Из ДанныеИзХранилища.Начисления Цикл
НоваяСтрока = Объект.НачисленияСотрудников.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НачислениеСотрудника);
НоваяСтрока.ИдентификаторСтрокиСотрудника = СтрокаСотрудника.ИдентификаторСтрокиСотрудника;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоказателиПоСотрудникуИзХранилища(ДанныеИзХранилища)
СтрокаСотрудника = Объект.Сотрудники.НайтиПоИдентификатору(Элементы.ПоказателиСотрудников.ТекущаяСтрока);
УдалитьПоказателиПоСотруднику(СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
Отбор = Новый Структура;
Отбор.Вставить("ИдентификаторСтрокиСотрудника", СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
Для каждого ОписаниеПоказателя Из ДанныеИзХранилища.Показатели Цикл
ОписаниеНачисления = НайтиПоЗначениюПоляВКоллекцииСтруктур(ДанныеИзХранилища.Начисления, "ИдентификаторСтрокиВидаРасчета", ОписаниеПоказателя.ИдентификаторСтрокиВидаРасчета);
Если Не ОписаниеНачисления = Неопределено
И ОписаниеНачисления.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Отменить
И Не ЗначениеЗаполнено(ОписаниеПоказателя.Действие) Тогда
Продолжить;
КонецЕсли;
Отбор.Вставить("Показатель", ОписаниеПоказателя.Показатель);
Отбор.Вставить("ДокументОснование", ОписаниеПоказателя.ДокументОснование);
СтрокиПоказателя = Объект.ПоказателиСотрудников.НайтиСтроки(Отбор);
Если СтрокиПоказателя.Количество() = 0 Тогда
СтрокаПоказателя = Объект.ПоказателиСотрудников.Добавить();
СтрокаПоказателя.ИдентификаторСтрокиСотрудника = СтрокаСотрудника.ИдентификаторСтрокиСотрудника;
Иначе
СтрокаПоказателя = СтрокиПоказателя[0];
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаПоказателя, ОписаниеПоказателя);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьЗначенияСовокупныхСтавокПоСотрудникуИзХранилища(ДанныеИзХранилища)
ДанныеСотрудника = Объект.Сотрудники.НайтиПоИдентификатору(Элементы.ПоказателиСотрудников.ТекущаяСтрока);
ДанныеСотрудника.ВидТарифнойСтавки = ДанныеИзХранилища.ВидТарифнойСтавки;
ДанныеСотрудника.СовокупнаяТарифнаяСтавка = ДанныеИзХранилища.СовокупнаяТарифнаяСтавка;
КонецПроцедуры
&НаСервере
Функция НайтиПоЗначениюПоляВКоллекцииСтруктур(Коллекция, Поле, Значение)
НайденнаяСтруктура = Неопределено;
Для каждого Структура Из Коллекция Цикл
Если Структура.Свойство(Поле)
И Структура[Поле] = Значение Тогда
НайденнаяСтруктура = Структура;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат НайденнаяСтруктура;
КонецФункции
&НаСервере
Процедура ДобавитьБухучетНачислений(ФильтрСотрудников, МассивНачислений)
Если Не ЗначениеЗаполнено(МассивНачислений) Тогда
Возврат;
КонецЕсли;
СотрудникиДаты = ФильтрСотрудников.Скопировать(,"Сотрудник,ДатаИзменения");
СотрудникиДаты.Колонки.ДатаИзменения.Имя = "Период";
ИдентификаторСтрокиСотрудника = ФильтрСотрудников[0].ИдентификаторСтрокиСотрудника;
ТаблицаБухучетНачислений = Объект.БухучетНачислений.Выгрузить(Новый Структура("ИдентификаторСтрокиСотрудника", ИдентификаторСтрокиСотрудника));
ОтражениеЗарплатыВБухучетеРасширенный.ДополнитьСтрокиНачисленийБухучетом(МассивНачислений, ТаблицаБухучетНачислений, СотрудникиДаты, Объект.Ссылка);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьБухучетНачисленийПоСотрудникуИзХранилища(ДанныеИзХранилища)
СтрокаСотрудника = Объект.Сотрудники.НайтиПоИдентификатору(Элементы.ПоказателиСотрудников.ТекущаяСтрока);
УдалитьБухучетНачисленийПоСотруднику(СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
Для каждого БухучетНачисленияСотрудника Из ДанныеИзХранилища.БухучетНачислений Цикл
Если ЗначениеЗаполнено(БухучетНачисленияСотрудника.БухучетНачисления) Тогда
Для каждого СтрокаБухучет Из БухучетНачисленияСотрудника.БухучетНачисления Цикл
НоваяСтрока = Объект.БухучетНачислений.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаБухучет);
ЗаполнитьЗначенияСвойств(НоваяСтрока, БухучетНачисленияСотрудника);
НоваяСтрока.ИдентификаторСтрокиСотрудника = СтрокаСотрудника.ИдентификаторСтрокиСотрудника;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ФормаРедактированияПлановогоПоказателяПоДокументамОснованиям
&НаКлиенте
Процедура ОткрытьФормуРедактированияПлановогоПоказателяПоДокументамОснованиям(Строка, ИмяПоказателя) Экспорт
ИмяРеквизитаТаблица = ИмяРеквизитаТаблицаПоказателя(ИмяПоказателя);
ЗначенияПоказателя = Новый Массив;
Для каждого ЗначениеПоказателя Из Строка[ИмяРеквизитаТаблица] Цикл
ЗначенияПоказателя.Добавить(Новый ФиксированнаяСтруктура(Новый Структура("ДокументОснование,Значение", ЗначениеПоказателя.ДокументОснование, ЗначениеПоказателя.Значение)))
КонецЦикла;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Сотрудник", Строка.Сотрудник);
ПараметрыОткрытия.Вставить("Показатель", КолонкиПоказателей[ИмяПоказателя].Показатель);
ПараметрыОткрытия.Вставить("ЗначенияПоказателя", Новый ФиксированныйМассив(ЗначенияПоказателя));
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеРедактированияПлановогоПоказателяПоДокументамОснованиям", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.РедактированиеПлановогоПоказателяРасчетаЗарплатыСотрудникаПоДокументамОснованиям", ПараметрыОткрытия, ЭтотОбъект,,,, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершениеРедактированияПлановогоПоказателяПоДокументамОснованиям(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокиСотрудника = Объект.Сотрудники.НайтиСтроки(Новый Структура("Сотрудник", Результат.Сотрудник));
Если СтрокиСотрудника = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаСотрудника = СтрокиСотрудника[0];
ИмяПоказателя = Неопределено;
Для каждого ОписаниеПоказателя Из КолонкиПоказателей Цикл
Если ОписаниеПоказателя.Значение.Показатель = Результат.Показатель Тогда
ИмяПоказателя = ОписаниеПоказателя.Ключ;
Прервать;
КонецЕсли;
КонецЦикла;
Если ИмяПоказателя = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяРеквизитаТаблица = ИмяРеквизитаТаблицаПоказателя(ИмяПоказателя);
ИмяРеквизитаПредставлениеТаблицы = ИмяРеквизитаПредставлениеТаблицы(ИмяПоказателя);
Отбор = Новый Структура("ДокументОснование");
Для каждого ЗначениеПоказателя Из Результат.ЗначенияПоказателя Цикл
Отбор.ДокументОснование = ЗначениеПоказателя.ДокументОснование;
СтрокиПоДокументуОснованию = СтрокаСотрудника[ИмяРеквизитаТаблица].НайтиСтроки(Отбор);
Если СтрокиПоДокументуОснованию.Количество() > 0 Тогда
СтрокиПоДокументуОснованию[0].Значение = ЗначениеПоказателя.Значение;
КонецЕсли;
КонецЦикла;
ПредставлениеТаблицы = "";
Для каждого ЗначениеПоказателя Из СтрокаСотрудника[ИмяРеквизитаТаблица] Цикл
ПредставлениеТаблицы = ПредставлениеТаблицы + ЗначениеПоказателя.Значение + "; ";
КонецЦикла;
СтрокаСотрудника[ИмяРеквизитаПредставлениеТаблицы] = Лев(ПредставлениеТаблицы, СтрДлина(ПредставлениеТаблицы) - 2);
ПоказателиСотрудниковПриОкончанииРедактированияНаСервере(СтрокаСотрудника.ПолучитьИдентификатор());
КонецПроцедуры
#КонецОбласти
#Область ПлановыеНачисленияПоказателиСотрудниковСИзменениямиДокумента
&НаСервере
Функция ПлановыеНачисленияПоказателиСотрудниковСИзменениямиДокумента(ФильтрСотрудников, НачисленияПоказателиСотрудников = Неопределено)
Если НачисленияПоказателиСотрудников = Неопределено Тогда
НачисленияПоказателиСотрудников = ПлановыеНачисленияПоказателиСотрудников(ФильтрСотрудников);
КонецЕсли;
ПрименитьИзмененияВДокументеКПлановымНачислениямСотрудников(НачисленияПоказателиСотрудников, ФильтрСотрудников);
ПрименитьИзмененияВДокументеКПлановымПоказателямСотрудников(НачисленияПоказателиСотрудников, ФильтрСотрудников);
Возврат НачисленияПоказателиСотрудников;
КонецФункции
&НаСервере
Функция ПлановыеНачисленияПоказателиСотрудников(ФильтрСотрудников = Неопределено)
ПараметрыПолучения = ПараметрыПолученияНачисленийПоказателейСотрудников();
Если Не ФильтрСотрудников = Неопределено Тогда
ПараметрыПолучения.Вставить("ИспользоватьФильтрСотрудников", Истина);
ПараметрыПолучения.Вставить("ФильтрСотрудников", ФильтрСотрудников);
КонецЕсли;
НачисленияПоказателиСотрудников = Документы.ИзменениеПлановыхНачислений.НачисленияПоказателиСотрудников(ПараметрыПолучения);
Возврат НачисленияПоказателиСотрудников;
КонецФункции
&НаСервере
Функция НачисленияПоказателиСотрудникаПриведенныеДляФормыРедактирования(ПлановыеНачисленияПоказателиСотрудника, ФОТПлановыхНачисленийСотрудника)
МассивНачислений = Новый Массив;
МассивПоказателей = Новый Массив;
ИдентификаторСтрокиВидаРасчета = 1;
ПостоянныеПоказателиНачислений = Новый Соответствие;
ОтборНачислений = Новый Структура("Начисление, ДокументОснование");
ОтборПоказателей = Новый Структура("Показатель, ДокументОснование, ИдентификаторСтрокиСотрудника");
Для Каждого СтрокаНачислений Из ПлановыеНачисленияПоказателиСотрудника.НачисленияСотрудников Цикл
СтруктураНачисления = Новый Структура("Начисление,ДокументОснование,ИдентификаторСтрокиВидаРасчета,Размер,Действие");
ЗаполнитьЗначенияСвойств(СтруктураНачисления, СтрокаНачислений);
СтруктураНачисления.ИдентификаторСтрокиВидаРасчета = ИдентификаторСтрокиВидаРасчета;
ОтборНачислений.Начисление = СтрокаНачислений.Начисление;
ОтборНачислений.ДокументОснование = СтрокаНачислений.ДокументОснование;
СтрокиПлановыхНачислений = ФОТПлановыхНачисленийСотрудника.НайтиСтроки(ОтборНачислений);
Если СтрокиПлановыхНачислений.Количество() > 0 Тогда
СтруктураНачисления.Размер = СтрокиПлановыхНачислений[0].ВкладВФОТ;
КонецЕсли;
МассивНачислений.Добавить(СтруктураНачисления);
ПостоянныеПоказателиНачисления = ПостоянныеПоказателиНачислений.Получить(СтрокаНачислений.Начисление);
Если ПостоянныеПоказателиНачисления = Неопределено Тогда
ПостоянныеПоказателиНачисления = ПостоянныеПоказателиНачисления(СтрокаНачислений.Начисление);
ПостоянныеПоказателиНачислений.Вставить(СтрокаНачислений.Начисление, ПостоянныеПоказателиНачисления);
КонецЕсли;
ОтборПоказателей.ДокументОснование = СтрокаНачислений.ДокументОснование;
ОтборПоказателей.ИдентификаторСтрокиСотрудника = СтрокаНачислений.ИдентификаторСтрокиСотрудника;
Для Каждого ПостоянныйПоказатель Из ПостоянныеПоказателиНачисления Цикл
ОтборПоказателей.Показатель = ПостоянныйПоказатель;
СтрокиПоказателей = ПлановыеНачисленияПоказателиСотрудника.ПоказателиСотрудников.НайтиСтроки(ОтборПоказателей);
Если СтрокиПоказателей.Количество() = 0 Тогда
ИдентификаторСтрокиВидаРасчета = ИдентификаторСтрокиВидаРасчета + 1;
Продолжить;
КонецЕсли;
СтруктураПоказателя = Новый Структура("Показатель,ДокументОснование,ИдентификаторСтрокиВидаРасчета,Значение,ТекущееЗначение,ОтменяемыйПоказатель");
ЗаполнитьЗначенияСвойств(СтруктураПоказателя, СтрокиПоказателей[0]);
СтруктураПоказателя.ИдентификаторСтрокиВидаРасчета = ИдентификаторСтрокиВидаРасчета;
СтруктураПоказателя.ТекущееЗначение = СтрокиПоказателей[0].Значение;
МассивПоказателей.Добавить(СтруктураПоказателя);
КонецЦикла;
ИдентификаторСтрокиВидаРасчета = ИдентификаторСтрокиВидаРасчета + 1;
КонецЦикла;
Возврат Новый Структура("Начисления,Показатели", МассивНачислений, МассивПоказателей);
КонецФункции
&НаСервере
Функция ПараметрыПолученияНачисленийПоказателейСотрудников()
ПараметрыПолучения = Документы.ИзменениеПлановыхНачислений.ПараметрыПолученияНачисленийПоказателейСотрудников();
ПараметрыПолучения.Вставить("Ссылка", Объект.Ссылка);
ПараметрыПолучения.Вставить("Организация", Объект.Организация);
ПараметрыПолучения.Вставить("Подразделение", Объект.Подразделение);
ПараметрыПолучения.Вставить("ДатаИзменения", Объект.ДатаИзменения);
ПараметрыПолучения.Вставить("ДатаОкончания", Объект.ДатаОкончания);
Если Объект.ЭтоОтражениеИзмененияШтатногоРасписания Тогда
ПараметрыПолучения.Вставить("ЭтоОтражениеИзмененияШтатногоРасписания", Истина);
ПараметрыПолучения.Вставить("Основание", Объект.Основание);
ПараметрыПолучения.Вставить("ПолеДолжность", "ДолжностьПоШтатномуРасписанию");
ПараметрыПолучения.Вставить("ДолжностьПоШтатномуРасписанию", ДолжностиПоШтатномуРасписанию);
КонецЕсли;
Возврат ПараметрыПолучения;
КонецФункции
&НаСервере
Процедура ПрименитьИзмененияВДокументеКПлановымНачислениямСотрудников(НачисленияПоказателиСотрудников, ФильтрСотрудников = Неопределено)
НачисленияПоказателиСотрудников.НачисленияСотрудников.Индексы.Добавить("ИдентификаторСтрокиСотрудника, Начисление, ДокументОснование");
Отбор = Новый Структура("ИдентификаторСтрокиСотрудника, Начисление, ДокументОснование");
Для каждого Строка Из Объект.НачисленияСотрудников Цикл
Если ФильтрСотрудников <> Неопределено Тогда
СтрокиФильтра = ФильтрСотрудников.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", Строка.ИдентификаторСтрокиСотрудника));
Если СтрокиФильтра.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Отбор.Начисление = Строка.Начисление;
Отбор.ДокументОснование = Строка.ДокументОснование;
Отбор.ИдентификаторСтрокиСотрудника = Строка.ИдентификаторСтрокиСотрудника;
СтрокиНачисления = НачисленияПоказателиСотрудников.НачисленияСотрудников.НайтиСтроки(Отбор);
Если СтрокиНачисления.Количество() > 0 Тогда
СтрокиНачисления[0].Размер = Строка.Размер;
СтрокиНачисления[0].Действие = Строка.Действие;
Иначе
СтрокаНачисления = НачисленияПоказателиСотрудников.НачисленияСотрудников.Добавить();
СтрокаНачисления.ИдентификаторСтрокиСотрудника = Строка.ИдентификаторСтрокиСотрудника;
СтрокаНачисления.Начисление = Строка.Начисление;
СтрокаНачисления.ДокументОснование = Строка.ДокументОснование;
СтрокаНачисления.Размер = Строка.Размер;
СтрокаНачисления.Действие = Строка.Действие;
КонецЕсли;
КонецЦикла;
Для каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
Если ФильтрСотрудников <> Неопределено Тогда
СтрокиФильтра = ФильтрСотрудников.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", СтрокаСотрудника.ИдентификаторСтрокиСотрудника));
Если СтрокиФильтра.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
РеквизитФормыВНачисленияСотрудника(НачисленияПоказателиСотрудников.НачисленияСотрудников, СтрокаСотрудника);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПрименитьИзмененияВДокументеКПлановымПоказателямСотрудников(НачисленияПоказателиСотрудников, ФильтрСотрудников = Неопределено)
ПоказателиСотрудниковВДокументе = Объект.ПоказателиСотрудников.Выгрузить();
Для каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
Если ФильтрСотрудников <> Неопределено Тогда
СтрокиФильтра = ФильтрСотрудников.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", СтрокаСотрудника.ИдентификаторСтрокиСотрудника));
Если СтрокиФильтра.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
РеквизитФормыВПоказателиСотрудника(ПоказателиСотрудниковВДокументе, СтрокаСотрудника);
КонецЦикла;
НачисленияПоказателиСотрудников.ПоказателиСотрудников.Индексы.Добавить("ИдентификаторСтрокиСотрудника, Показатель, ДокументОснование");
Отбор = Новый Структура("ИдентификаторСтрокиСотрудника, Показатель, ДокументОснование");
Для каждого Строка Из ПоказателиСотрудниковВДокументе Цикл
Если ФильтрСотрудников <> Неопределено Тогда
СтрокиФильтра = ФильтрСотрудников.НайтиСтроки(Новый Структура("ИдентификаторСтрокиСотрудника", Строка.ИдентификаторСтрокиСотрудника));
Если СтрокиФильтра.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Отбор.Показатель = Строка.Показатель;
Отбор.ДокументОснование = Строка.ДокументОснование;
Отбор.ИдентификаторСтрокиСотрудника = Строка.ИдентификаторСтрокиСотрудника;
СтрокиПоказателей = НачисленияПоказателиСотрудников.ПоказателиСотрудников.НайтиСтроки(Отбор);
Если СтрокиПоказателей.Количество() > 0 Тогда
СтрокиПоказателей[0].Значение = Строка.Значение;
Иначе
СтрокиПоказателей = НачисленияПоказателиСотрудников.ПоказателиСотрудников.Добавить();
СтрокиПоказателей.ИдентификаторСтрокиСотрудника = Строка.ИдентификаторСтрокиСотрудника;
СтрокиПоказателей.Показатель = Строка.Показатель;
СтрокиПоказателей.ДокументОснование = Строка.ДокументОснование;
СтрокиПоказателей.Значение = Строка.Значение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область ДобавитьУдалитьНачислениеВсемСотрудникам
#Область ДобавитьНачислениеВсемСотрудникам
&НаКлиенте
Процедура ДобавитьНачислениеВсемСотрудникамЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если НЕ ЗначениеЗаполнено(РезультатЗакрытия) Тогда
Возврат;
КонецЕсли;
ДобавитьНачислениеВсемСотрудникамНаСервере(РезультатЗакрытия);
КонецПроцедуры
&НаСервере
Процедура ДобавитьНачислениеВсемСотрудникамНаСервере(РезультатЗакрытия)
РеквизитФормыВДанныеСотрудников(Объект);
ПредставлениеНачислений = ПредставлениеНачислений(РезультатЗакрытия.ДобавленныеВидыРасчета);
СотрудникиЗаполнены = Объект.Сотрудники.Количество() > 0;
Для каждого Начисление Из РезультатЗакрытия.ДобавленныеВидыРасчета Цикл
Если СотрудникиЗаполнены Тогда
ДобавитьНачислениеСотрудникам(Начисление);
КонецЕсли;
КонецЦикла;
ДанныеСотрудниковВРеквизитФормы();
ФОТСотрудниковВРеквизитФормы();
УстановитьДоступностьКомандыЗаполнитьПоказатели();
КонецПроцедуры
&НаСервере
Процедура ДобавитьНачислениеСотрудникам(Начисление)
ОписаниеНачисления = ОписаниеНачисления(Начисление);
Для каждого Строка Из Объект.Сотрудники Цикл
ДобавитьНачислениеСотруднику(Строка.ИдентификаторСтрокиСотрудника, ОписаниеНачисления);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДобавитьНачислениеСотруднику(ИдентификаторСтрокиСотрудника, ОписаниеНачисления)
Если НачислениеНазначеноРанее(ИдентификаторСтрокиСотрудника, ОписаниеНачисления.Начисление) Тогда
Возврат;
КонецЕсли;
НовоеНачисление = Объект.НачисленияСотрудников.Добавить();
НовоеНачисление.ИдентификаторСтрокиСотрудника = ИдентификаторСтрокиСотрудника;
НовоеНачисление.Начисление = ОписаниеНачисления.Начисление;
НовоеНачисление.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Утвердить;
Для каждого Показатель Из ОписаниеНачисления.ПостоянныеПоказатели Цикл
НовыйПоказатель = Объект.ПоказателиСотрудников.Добавить();
НовыйПоказатель.ИдентификаторСтрокиСотрудника = ИдентификаторСтрокиСотрудника;
НовыйПоказатель.Показатель = Показатель;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция НачислениеНазначеноРанее(ИдентификаторСтрокиСотрудника, Начисление)
ОтборПоСотрудникуНачислению = Новый Структура;
ОтборПоСотрудникуНачислению.Вставить("Начисление", Начисление);
ОтборПоСотрудникуНачислению.Вставить("ИдентификаторСтрокиСотрудника", ИдентификаторСтрокиСотрудника);
Возврат НЕ Объект.НачисленияСотрудников.НайтиСтроки(ОтборПоСотрудникуНачислению).Количество() = 0;
КонецФункции
&НаСервере
Функция ОписаниеНачисления(Начисление)
ОписаниеНачисления = Новый Структура;
ОписаниеНачисления.Вставить("Начисление", Начисление);
ОписаниеНачисления.Вставить("ПостоянныеПоказатели", ПостоянныеПоказателиНачисления(Начисление));
Возврат ОписаниеНачисления;
КонецФункции
&НаСервере
Функция ПостоянныеПоказателиНачисления(Начисление)
ПостоянныеПоказатели = Новый Массив;
ИнфоОВидеРасчета = ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(Начисление);
Для Каждого СтрокаПоказателя Из ИнфоОВидеРасчета.Показатели Цикл
Если ЭтоПостоянныйПоказатель(СтрокаПоказателя) Тогда
ПостоянныеПоказатели.Добавить(СтрокаПоказателя.Показатель);
КонецЕсли;
КонецЦикла;
Возврат ПостоянныеПоказатели;
КонецФункции
&НаСервере
Функция ЭтоПостоянныйПоказатель(СтрокаПоказателя)
ЭтоПостоянныйПоказатель = Истина;
Если СтрокаПоказателя.ЗапрашиватьПриВводе Тогда
ПоказательИнфо = ЗарплатаКадрыРасширенныйПовтИсп.СведенияОПоказателеРасчетаЗарплаты(СтрокаПоказателя.Показатель);
Если ПоказательИнфо.СпособПримененияЗначений <> Перечисления.СпособыПримененияЗначенийПоказателейРасчетаЗарплаты.Постоянное
Или ПоказательИнфо.ЗначениеРассчитываетсяАвтоматически Тогда
ЭтоПостоянныйПоказатель = Ложь;
КонецЕсли;
Иначе
ЭтоПостоянныйПоказатель = Ложь;
КонецЕсли;
Возврат ЭтоПостоянныйПоказатель;
КонецФункции
#КонецОбласти
#Область УдалитьНачислениеВсемСотрудникам
&НаКлиенте
Процедура УдалитьНачислениеВсемСотрудникамЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если НЕ ЗначениеЗаполнено(РезультатЗакрытия) Тогда
Возврат;
КонецЕсли;
УдалитьНачислениеВсемСотрудникамНаСервере(РезультатЗакрытия);
КонецПроцедуры
&НаСервере
Процедура УдалитьНачислениеВсемСотрудникамНаСервере(РезультатЗакрытия)
РеквизитФормыВДанныеСотрудников(Объект);
УдаляемыеСтроки = Новый Массив;
ПредставлениеНачислений = ПредставлениеНачислений(РезультатЗакрытия.ДобавленныеВидыРасчета);
Отбор = Новый Структура("Начисление");
Для каждого Начисление Из РезультатЗакрытия.ДобавленныеВидыРасчета Цикл
Отбор.Начисление = Начисление;
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(УдаляемыеСтроки, Объект.НачисленияСотрудников.НайтиСтроки(Отбор));
КонецЦикла;
Для каждого УдаляемаяСтрока Из УдаляемыеСтроки Цикл
Если УдаляемаяСтрока.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Утвердить Тогда
Объект.НачисленияСотрудников.Удалить(УдаляемаяСтрока);
Иначе
УдаляемаяСтрока.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Отменить;
КонецЕсли;
КонецЦикла;
ДанныеСотрудниковВРеквизитФормы();
ФОТСотрудниковВРеквизитФормы();
УстановитьДоступностьКомандыЗаполнитьПоказатели();
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ВыбратьНачисление(ОбработчикВыбора, Отбор = Неопределено)
ОписаниеОповещения = Новый ОписаниеОповещения(ОбработчикВыбора, ЭтотОбъект);
ПараметрыФормы = Новый Структура("МассивВидовРасчета, УсловияОтбора", Новый Массив, Отбор);
ОткрытьФорму("ОбщаяФорма.ПодборВидовРасчета", ПараметрыФормы, , , , , ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
#Область ФОТ
&НаСервере
Функция ФОТПлановыхНачисленийСотрудниковСИзменениямиДокумента(ПлановыеНачисленияПоказателиСотрудников, РассчитатьФОТ = Истина)
СоответствиеСотрудниковПериодовИдентификаторам = Новый Соответствие;
ГоловнаяОрганизация = ЗарплатаКадры.ГоловнаяОрганизация(Объект.Организация);
ТаблицаНачислений = ПлановыеНачисленияСотрудников.ТаблицаНачисленийДляРасчетаВторичныхДанных();
ТаблицаПоказателей = ПлановыеНачисленияСотрудников.ТаблицаИзвестныеПоказатели();
РассчитываемыеОбъекты = Новый Соответствие;
Отбор = Новый Структура;
ВремяРегистрацииСотрудников = ВремяРегистрацииСотрудников();
Для Каждого СтрокаСотрудника Из ПлановыеНачисленияПоказателиСотрудников.Сотрудники Цикл
ВремяРегистрации = ВремяРегистрацииСотрудников[СтрокаСотрудника.ИдентификаторСтрокиСотрудника];
СоответствиеПериодаИдентификатору = СоответствиеСотрудниковПериодовИдентификаторам[СтрокаСотрудника.Сотрудник];
Если СоответствиеПериодаИдентификатору = Неопределено Тогда
СоответствиеПериодаИдентификатору = Новый Соответствие;
СоответствиеСотрудниковПериодовИдентификаторам.Вставить(СтрокаСотрудника.Сотрудник, СоответствиеПериодаИдентификатору);
КонецЕсли;
СоответствиеПериодаИдентификатору.Вставить(ВремяРегистрации, СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
Отбор.Вставить("ИдентификаторСтрокиСотрудника", СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
СтрокиПоСотруднику = ПлановыеНачисленияПоказателиСотрудников.НачисленияСотрудников.НайтиСтроки(Отбор);
Для Каждого СтрокаНачисления Из СтрокиПоСотруднику Цикл
Если СтрокаНачисления.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Отменить Тогда
Продолжить;
КонецЕсли;
ДанныеНачисления = ТаблицаНачислений.Добавить();
ДанныеНачисления.Сотрудник = СтрокаСотрудника.Сотрудник;
ДанныеНачисления.ГоловнаяОрганизация = ГоловнаяОрганизация;
ДанныеНачисления.Период = ВремяРегистрации;
ДанныеНачисления.Начисление = СтрокаНачисления.Начисление;
ДанныеНачисления.ДокументОснование = СтрокаНачисления.ДокументОснование;
ДанныеНачисления.Размер = СтрокаНачисления.Размер;
Если Не РассчитатьФОТ Тогда
ДанныеНачисления.ВкладВФОТ = ДанныеНачисления.Размер;
КонецЕсли;
КонецЦикла;
СтрокиПоСотруднику = ПлановыеНачисленияПоказателиСотрудников.ПоказателиСотрудников.НайтиСтроки(Отбор);
Для Каждого СтрокаПоказателя Из СтрокиПоСотруднику Цикл
ДанныеПоказателя = ТаблицаПоказателей.Добавить();
ДанныеПоказателя.Сотрудник = СтрокаСотрудника.Сотрудник;
ДанныеПоказателя.ГоловнаяОрганизация = ГоловнаяОрганизация;
ДанныеПоказателя.Период = ВремяРегистрации;
ДанныеПоказателя.Показатель = СтрокаПоказателя.Показатель;
ДанныеПоказателя.ДокументОснование = СтрокаПоказателя.ДокументОснование;
ДанныеПоказателя.Значение = СтрокаПоказателя.Значение;
КонецЦикла;
КонецЦикла;
Если РассчитатьФОТ Тогда
УстановитьПривилегированныйРежим(Истина);
РассчитанныеДанные = ПлановыеНачисленияСотрудников.РассчитатьВторичныеДанныеПлановыхНачислений(ТаблицаНачислений, ТаблицаПоказателей);
УстановитьПривилегированныйРежим(Ложь);
РассчитанныеДанные.ТарифныеСтавки.Колонки.Добавить("ИдентификаторСтрокиСотрудника");
Для Каждого СтрокаТарифнойСтавки Из РассчитанныеДанные.ТарифныеСтавки Цикл
СтрокаТарифнойСтавки.ИдентификаторСтрокиСотрудника = СоответствиеСотрудниковПериодовИдентификаторам[СтрокаТарифнойСтавки.Сотрудник][СтрокаТарифнойСтавки.Период];
КонецЦикла;
Иначе
РассчитанныеДанные = Новый Структура("ПлановыйФОТ", ТаблицаНачислений);
КонецЕсли;
РассчитанныеДанные.ПлановыйФОТ.Колонки.Добавить("ИдентификаторСтрокиСотрудника");
Для Каждого СтрокаНачисления Из РассчитанныеДанные.ПлановыйФОТ Цикл
СтрокаНачисления.ИдентификаторСтрокиСотрудника = СоответствиеСотрудниковПериодовИдентификаторам[СтрокаНачисления.Сотрудник][СтрокаНачисления.Период];
КонецЦикла;
Возврат РассчитанныеДанные;
КонецФункции
&НаСервере
Процедура ЗаполнитьФОТНачисленийСотрудников(ФОТПлановыхНачисленийСотрудников)
Начисления = ОбщегоНазначения.ВыгрузитьКолонку(ФОТПлановыхНачисленийСотрудников, "Начисление");
ИнформацияОВидахРасчета = ЗарплатаКадрыРасширенный.ИнформацияОВидахРасчета(Начисления);
Для Каждого ОписаниеНачисления Из ФОТПлановыхНачисленийСотрудников Цикл
Отбор = Новый Структура;
Отбор.Вставить("ИдентификаторСтрокиСотрудника", ОписаниеНачисления.ИдентификаторСтрокиСотрудника);
Отбор.Вставить("Начисление", ОписаниеНачисления.Начисление);
Отбор.Вставить("ДокументОснование", ОписаниеНачисления.ДокументОснование);
СтрокиНачисления = Объект.НачисленияСотрудников.НайтиСтроки(Отбор);
Если СтрокиНачисления.Количество() > 0 Тогда
Для Каждого СтрокаНачисления Из СтрокиНачисления Цикл
Если СтрокаНачисления.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Отменить
Или Не ИнформацияОВидахРасчета[ОписаниеНачисления.Начисление].Рассчитывается Тогда
Продолжить;
КонецЕсли;
СтрокаНачисления.Размер = ОписаниеНачисления.ВкладВФОТ;
КонецЦикла;
Иначе
СтрокаНачисления = Объект.НачисленияСотрудников.Добавить();
СтрокаНачисления.ИдентификаторСтрокиСотрудника = ОписаниеНачисления.ИдентификаторСтрокиСотрудника;
СтрокаНачисления.Начисление = ОписаниеНачисления.Начисление;
СтрокаНачисления.ДокументОснование = ОписаниеНачисления.ДокументОснование;
СтрокаНачисления.Размер = ОписаниеНачисления.Размер;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ФОТСотрудников(ФильтрСотрудников = Неопределено)
ФОТСотрудников = Новый Соответствие;
ФОТСотрудников = ФОТСотрудниковПоДаннымДокумента();
Возврат ФОТСотрудников;
КонецФункции
&НаСервере
Функция ФОТСотрудниковПоОписаниюНачислений(ФОТНачисленийСотрудников)
ФОТСотрудников = Новый Соответствие;
Для Каждого СтрокаНачисления Из ФОТНачисленийСотрудников Цикл
ФОТПоСотруднику = ФОТСотрудников[СтрокаНачисления.ИдентификаторСтрокиСотрудника];
Если ФОТПоСотруднику = Неопределено Тогда
ФОТПоСотруднику = 0;
КонецЕсли;
ФОТПоСотруднику = ФОТПоСотруднику + СтрокаНачисления.ВкладВФОТ;
ФОТСотрудников.Вставить(СтрокаНачисления.ИдентификаторСтрокиСотрудника, ФОТПоСотруднику);
КонецЦикла;
Возврат ФОТСотрудников;
КонецФункции
&НаСервере
Функция ФОТСотрудниковПоДаннымДокумента()
ФОТСотрудников = Новый Соответствие;
Для Каждого ОписаниеСотрудника Из Объект.Сотрудники Цикл
ФОТСотрудника = 0;
Отбор= Новый Структура("ИдентификаторСтрокиСотрудника", ОписаниеСотрудника.ИдентификаторСтрокиСотрудника);
НачисленияСотрудника = Объект.НачисленияСотрудников.НайтиСтроки(Отбор);
Для Каждого ОписаниеНачисления Из НачисленияСотрудника Цикл
Если ОписаниеНачисления.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Отменить Тогда
Продолжить;
КонецЕсли;
ФОТСотрудника = ФОТСотрудника + ОписаниеНачисления.Размер;
КонецЦикла;
ФОТСотрудников.Вставить(ОписаниеСотрудника.ИдентификаторСтрокиСотрудника, ФОТСотрудника);
КонецЦикла;
Возврат ФОТСотрудников;
КонецФункции
&НаСервере
Процедура ЗаполнитьФОТСотрудниковВФорме(ФильтрСотрудников = Неопределено)
Если ФильтрСотрудников = Неопределено Тогда
КоллекцияСтрокССотрудниками = Объект.Сотрудники;
Иначе
КоллекцияСтрокССотрудниками = ФильтрСотрудников;
КонецЕсли;
ФОТСотрудников = ФОТСотрудников(ФильтрСотрудников);
Для каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
СтрокаСотрудника.ФОТ = ФОТСотрудников.Получить(СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СовокупнаяТарифнаяСтавка
&НаСервере
Процедура ЗаполнитьЗначенияСовокупныхТарифныхСтавокСотрудников(ЗначенияСовокупныхТарифныхСтавок)
ЗначенияСовокупныхТарифныхСтавок.Индексы.Добавить("ИдентификаторСтрокиСотрудника");
Для Каждого СтрокаСотрудника Из ЗначенияСовокупныхТарифныхСтавок Цикл
Отбор = Новый Структура("ИдентификаторСтрокиСотрудника", СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
НайденныеСтроки = Объект.Сотрудники.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда
НайденныеСтроки[0].СовокупнаяТарифнаяСтавка = СтрокаСотрудника.СовокупнаяТарифнаяСтавка;
НайденныеСтроки[0].ВидТарифнойСтавки = СтрокаСотрудника.ВидТарифнойСтавки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ЗначенияСовокупныхТарифныхСтавокСотрудников(ПлановыеНачисленияПоказателиСотрудников)
СоответствиеСотрудниковПериодовИдентификаторам = Новый Соответствие;
ГоловнаяОрганизация = ЗарплатаКадры.ГоловнаяОрганизация(Объект.Организация);
ТаблицаНачислений = ПлановыеНачисленияСотрудников.ТаблицаНачисленийДляРасчетаВторичныхДанных();
ТаблицаПоказателей = ПлановыеНачисленияСотрудников.ТаблицаИзвестныеПоказатели();
РассчитываемыеОбъекты = Новый Соответствие;
Отбор = Новый Структура;
ВремяРегистрацииСотрудников = ВремяРегистрацииСотрудников();
Для Каждого СтрокаСотрудника Из ПлановыеНачисленияПоказателиСотрудников.Сотрудники Цикл
ВремяРегистрации = ВремяРегистрацииСотрудников[СтрокаСотрудника.ИдентификаторСтрокиСотрудника];
СоответствиеПериодаИдентификатору = СоответствиеСотрудниковПериодовИдентификаторам[СтрокаСотрудника.Сотрудник];
Если СоответствиеПериодаИдентификатору = Неопределено Тогда
СоответствиеПериодаИдентификатору = Новый Соответствие;
СоответствиеСотрудниковПериодовИдентификаторам.Вставить(СтрокаСотрудника.Сотрудник, СоответствиеПериодаИдентификатору);
КонецЕсли;
СоответствиеПериодаИдентификатору.Вставить(ВремяРегистрации, СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
Отбор.Вставить("ИдентификаторСтрокиСотрудника", СтрокаСотрудника.ИдентификаторСтрокиСотрудника);
СтрокиПоСотруднику = ПлановыеНачисленияПоказателиСотрудников.НачисленияСотрудников.НайтиСтроки(Отбор);
Для Каждого СтрокаНачисления Из СтрокиПоСотруднику Цикл
Если СтрокаНачисления.Действие = Перечисления.ДействияСНачислениямиИУдержаниями.Отменить Тогда
Продолжить;
КонецЕсли;
ДанныеНачисления = ТаблицаНачислений.Добавить();
ДанныеНачисления.Сотрудник = СтрокаСотрудника.Сотрудник;
ДанныеНачисления.ГоловнаяОрганизация = ГоловнаяОрганизация;
ДанныеНачисления.Период = ВремяРегистрации;
ДанныеНачисления.Начисление = СтрокаНачисления.Начисление;
ДанныеНачисления.ДокументОснование = СтрокаНачисления.ДокументОснование;
ДанныеНачисления.Размер = СтрокаНачисления.Размер;
КонецЦикла;
СтрокиПоСотруднику = ПлановыеНачисленияПоказателиСотрудников.ПоказателиСотрудников.НайтиСтроки(Отбор);
Для Каждого СтрокаПоказателя Из СтрокиПоСотруднику Цикл
ДанныеПоказателя = ТаблицаПоказателей.Добавить();
ДанныеПоказателя.Сотрудник = СтрокаСотрудника.Сотрудник;
ДанныеПоказателя.ГоловнаяОрганизация = ГоловнаяОрганизация;
ДанныеПоказателя.Период = ВремяРегистрации;
ДанныеПоказателя.Показатель = СтрокаПоказателя.Показатель;
ДанныеПоказателя.ДокументОснование = СтрокаПоказателя.ДокументОснование;
ДанныеПоказателя.Значение = СтрокаПоказателя.Значение;
КонецЦикла;
КонецЦикла;
УстановитьПривилегированныйРежим(Истина);
ТарифныеСтавки = ПлановыеНачисленияСотрудников.РассчитатьТарифныеСтавкиСотрудников(ТаблицаНачислений, ТаблицаПоказателей);
УстановитьПривилегированныйРежим(Ложь);
ТарифныеСтавки.Колонки.Добавить("ИдентификаторСтрокиСотрудника");
Для Каждого СтрокаТарифнойСтавки Из ТарифныеСтавки Цикл
СтрокаТарифнойСтавки.ИдентификаторСтрокиСотрудника = СоответствиеСотрудниковПериодовИдентификаторам[СтрокаТарифнойСтавки.Сотрудник][СтрокаТарифнойСтавки.Период];
КонецЦикла;
Возврат ТарифныеСтавки;
КонецФункции
#КонецОбласти
#Область УдалитьНачисленияПоказателиСотрудника
&НаСервере
Функция УдалитьНачисленияПоСотруднику(ИдентификаторСтрокиСотрудника)
ОтборПоСотруднику = Новый Структура("ИдентификаторСтрокиСотрудника", ИдентификаторСтрокиСотрудника);
СтрокиДляУдаления = Объект.НачисленияСотрудников.НайтиСтроки(ОтборПоСотруднику);
Для Каждого СтрокаДляУдаления Из СтрокиДляУдаления Цикл
Объект.НачисленияСотрудников.Удалить(СтрокаДляУдаления);
КонецЦикла;
КонецФункции
&НаСервере
Функция УдалитьПоказателиПоСотруднику(ИдентификаторСтрокиСотрудника)
ОтборПоСотруднику = Новый Структура("ИдентификаторСтрокиСотрудника", ИдентификаторСтрокиСотрудника);
СтрокиДляУдаления = Объект.ПоказателиСотрудников.НайтиСтроки(ОтборПоСотруднику);
Для Каждого СтрокаДляУдаления Из СтрокиДляУдаления Цикл
Объект.ПоказателиСотрудников.Удалить(СтрокаДляУдаления);
КонецЦикла;
КонецФункции
&НаСервере
Функция УдалитьБухучетПоСотруднику(ИдентификаторСтрокиСотрудника)
ОтборПоСотруднику = Новый Структура("ИдентификаторСтрокиСотрудника", ИдентификаторСтрокиСотрудника);
СтрокиДляУдаления = Объект.БухучетНачислений.НайтиСтроки(ОтборПоСотруднику);
Для Каждого СтрокаДляУдаления Из СтрокиДляУдаления Цикл
Объект.БухучетНачислений.Удалить(СтрокаДляУдаления);
КонецЦикла;
КонецФункции
&НаСервере
Функция ЕстьУдаляемыеСотрудники()
Возврат НЕ (УдаляемыеСотрудники = Неопределено Или УдаляемыеСотрудники.Количество() = 0);
КонецФункции
&НаСервере
Процедура ЗавершитьУдалениеСотрудников()
Если НЕ ЕстьУдаляемыеСотрудники() Тогда
Возврат;
КонецЕсли;
Для каждого ИдентификаторСтрокиСотрудника Из УдаляемыеСотрудники Цикл
УдалитьНачисленияПоСотруднику(ИдентификаторСтрокиСотрудника);
УдалитьПоказателиПоСотруднику(ИдентификаторСтрокиСотрудника);
УдалитьБухучетПоСотруднику(ИдентификаторСтрокиСотрудника);
КонецЦикла;
ОчиститьУдаляемыхСотрудников();
КонецПроцедуры
&НаСервере
Процедура ЗафиксироватьУдаляемыхСотрудников(МассивУдаляемыхСотрудников)
УдаляемыеСотрудники = Новый ФиксированныйМассив(МассивУдаляемыхСотрудников);
КонецПроцедуры
&НаСервере
Процедура ОчиститьУдаляемыхСотрудников()
УдаляемыеСотрудники = Неопределено;
КонецПроцедуры
&НаСервере
Процедура УдалитьБухучетНачисленийПоСотруднику(ИдентификаторСтрокиСотрудника)
ОтборПоСотруднику = Новый Структура("ИдентификаторСтрокиСотрудника", ИдентификаторСтрокиСотрудника);
СтрокиДляУдаления = Объект.БухучетНачислений.НайтиСтроки(ОтборПоСотруднику);
Для Каждого СтрокаДляУдаления Из СтрокиДляУдаления Цикл
Объект.БухучетНачислений.Удалить(СтрокаДляУдаления);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область КлючевыеРеквизитыЗаполненияФормы
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыТаблицыОчищаемыеПриИзменении() Экспорт
Массив = Новый Массив;
Массив.Добавить("Объект.Сотрудники");
Массив.Добавить("Объект.НачисленияСотрудников");
Массив.Добавить("Объект.ПоказателиСотрудников");
Возврат Массив
КонецФункции
&НаСервере
Функция КлючевыеРеквизитыЗаполненияФормыОписаниеКлючевыхРеквизитов() Экспорт
Массив = Новый Массив;
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Организация", НСтр("ru = 'организации'")));
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Подразделение", НСтр("ru = 'подразделения'")));
Массив.Добавить(Новый Структура("ЭлементФормы, Представление", "Подразделение", НСтр("ru = 'подразделения'")));
Возврат Массив
КонецФункции
#КонецОбласти
&НаСервере
Процедура ЗаполнитьДанныеФормыПоОрганизации()
Если НЕ ЗначениеЗаполнено(Объект.Организация) Тогда
Возврат;
КонецЕсли;
ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьКомандыЗаполнитьПоказатели()
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПоказателиСотрудниковЗаполнитьПоказатели", "Доступность", ЕстьРедактируемыеПоказатели());
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовФормы()
Если ПолучитьФункциональнуюОпциюФормы("ИспользоватьИсториюИзмененияШтатногоРасписания")
Или ПолучитьФункциональнуюОпциюФормы("ИспользоватьТарифныеСеткиПриРасчетеЗарплаты") Тогда
ОснованиеЗаполнено = ЗначениеЗаполнено(Объект.Основание);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Основание", "Видимость", ОснованиеЗаполнено);
КонецЕсли;
УстановитьВидимостьПериодовИзмененияНачислений();
УстановитьВидимостьКолонкиКоэффициентаИндексации();
УстановитьВидимостьКолонокПодробногоРасчета();
КонецПроцедуры
&НаСервере
Процедура СрочноеИзменениеНачисленийПриИзмененииНаСервере()
ОчиститьДатыОкончания();
УстановитьВидимостьПериодовИзмененияНачислений();
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьПериодовИзмененияНачислений()
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДатаОкончания", "Видимость", СрочноеИзменениеНачислений);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПериодИзменения", "Видимость", Объект.РазныеСрокиДляРазныхСотрудников);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПоказателиСотрудниковДатаОкончания", "Видимость", СрочноеИзменениеНачислений);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьКолонкиКоэффициентаИндексации()
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ПоказателиСотрудниковКоэффициентИндексации", "Видимость", ПризнакИндексацииЗаработка(ЭтаФорма));
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовФормы()
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"Организация",
"ТолькоПросмотр",
Объект.ЭтоОтражениеИзмененияШтатногоРасписания);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"Подразделение",
"ТолькоПросмотр",
Объект.ЭтоОтражениеИзмененияШтатногоРасписания);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"РазныеСрокиДляРазныхСотрудников",
"ТолькоПросмотр",
ПризнакИндексацииЗаработка(ЭтаФорма));
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"СрочноеИзменениеНачислений",
"ТолькоПросмотр",
ПризнакИндексацииЗаработка(ЭтаФорма));
Если Объект.УчитыватьКакИндексациюЗаработка Тогда
Элементы.ДатыСтраницы.ТекущаяСтраница = Элементы.ДатыИндексации;
Иначе
Элементы.ДатыСтраницы.ТекущаяСтраница = Элементы.Даты;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьКолонокПодробногоРасчета()
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(ЭтотОбъект.Элементы, "ГруппаСовокупнаяТарифнаяСтавка", "Видимость", ЭтотОбъект.ПодробныйРасчетФОТ);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(ЭтотОбъект.Элементы, "ПоказателиСотрудниковПредставлениеНачислений", "Видимость", ЭтотОбъект.ПодробныйРасчетФОТ);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(ЭтотОбъект.Элементы, "ПоказателиСотрудниковФОТТекущееЗначение", "Видимость", ЭтотОбъект.ПодробныйРасчетФОТ);
Для Каждого КлючИЗначение Из КолонкиПоказателей Цикл
ПутьКЭлементу = ПрефиксЭлементаПоказателиСотрудников() + КлючИЗначение.Ключ + "ТекущееЗначение";
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
ЭтотОбъект.Элементы,
ПутьКЭлементу,
"Видимость",
ЭтотОбъект.ПодробныйРасчетФОТ);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтображениеНадписей()
УстановитьПривилегированныйРежим(Истина);
СотрудникиДаты = Объект.Сотрудники.Выгрузить(, "ВремяРегистрации, Сотрудник");
ЗарплатаКадрыРасширенный.УстановитьТекстНадписиОКонкурирующихДокументахПлановыхНачислений(ЭтотОбъект, СотрудникиДаты, Объект.Ссылка);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПредставлениеНачислений(Начисления)
Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъектов(Начисления, "КраткоеНаименование,РеквизитДопУпорядочивания");
КонецФункции
&НаСервере
Процедура ПрочитатьВремяРегистрации()
СотрудникиДаты = Объект.Сотрудники.Выгрузить(, "ДатаИзменения, Сотрудник");
СотрудникиДаты.Колонки.ДатаИзменения.Имя = "ДатаСобытия";
ЗначенияВремениРегистрации = ЗарплатаКадрыРасширенный.ЗначенияВремениРегистрацииДокумента(Объект.Ссылка, СотрудникиДаты);
Для Каждого Строка Из Объект.Сотрудники Цикл
ВремяРегистрацииСотрудников = ЗначенияВремениРегистрации.Получить(Строка.ДатаИзменения);
Если ВремяРегистрацииСотрудников <> Неопределено Тогда
Строка.ВремяРегистрации = ВремяРегистрацииСотрудников.Получить(Строка.Сотрудник);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьВремяРегистрацииСтроки(Ссылка, Строка)
Строка.ВремяРегистрации = ЗарплатаКадрыРасширенный.ВремяРегистрацииСотрудникаДокумента(Ссылка, Строка.Сотрудник, Строка.ДатаИзменения);
КонецПроцедуры
&НаСервере
Функция ВремяРегистрацииСотрудников()
ВремяРегистрацииСотрудников = Новый Соответствие;
Для каждого Строка Из Объект.Сотрудники Цикл
ВремяРегистрацииСотрудников.Вставить(Строка.ИдентификаторСтрокиСотрудника, Строка.ВремяРегистрации);
КонецЦикла;
Возврат ВремяРегистрацииСотрудников;
КонецФункции
&НаСервере
Функция АдресСпискаПодобранныхСотрудников()
Возврат ПоместитьВоВременноеХранилище(Объект.Сотрудники.Выгрузить(,"Сотрудник").ВыгрузитьКолонку("Сотрудник"), УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура ОбработатьИзменениеПоказателейНаСервере(ЗначенияПоказателей)
ФильтрСотрудников = Документы.ИзменениеПлановыхНачислений.ПустойФильтрСотрудников();
Для Каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
СтрокаФильтраСотрудников = Неопределено;
Для каждого КолонкаПоказатель Из КолонкиПоказателей Цикл
Показатель = КолонкаПоказатель.Значение.Показатель;
ДействиеПоказателя = ЗначенияПоказателей[Показатель];
Если ДействиеПоказателя = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Не ПоказательИспользуется(СтрокаСотрудника, КолонкаПоказатель.Ключ) Тогда
Продолжить;
КонецЕсли;
ПлановыеНачисленияСотрудниковФормы.РассчитатьЗначениеПоказателяНачисления(СтрокаСотрудника[КолонкаПоказатель.Ключ], ДействиеПоказателя, Показатель);
Если СтрокаФильтраСотрудников = Неопределено Тогда
СтрокаФильтраСотрудников = ФильтрСотрудников.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаФильтраСотрудников, СтрокаСотрудника);
СтрокаФильтраСотрудников.ДатаИзменения = СтрокаСотрудника.ВремяРегистрации;
КонецЕсли;
КоличествоЗначенийПоказателя = СтрокаСотрудника[ИмяРеквизитаТаблицаПоказателя(КолонкаПоказатель.Ключ)].Количество();
Для каждого ПоказательСотрудника Из СтрокаСотрудника[ИмяРеквизитаТаблицаПоказателя(КолонкаПоказатель.Ключ)] Цикл
Если Не ЗначениеЗаполнено(ПоказательСотрудника.ДокументОснование)
Или КоличествоЗначенийПоказателя = 1 Тогда
ПлановыеНачисленияСотрудниковФормы.РассчитатьЗначениеПоказателяНачисления(ПоказательСотрудника.Значение, ДействиеПоказателя, Показатель);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
ПлановыеНачисленияПоказателиСотрудников = ПлановыеНачисленияПоказателиСотрудниковСИзменениямиДокумента(ФильтрСотрудников);
ФОТПлановыхНачисленийСотрудников = ФОТПлановыхНачисленийСотрудниковСИзменениямиДокумента(ПлановыеНачисленияПоказателиСотрудников);
ЗаполнитьФОТНачисленийСотрудников(ФОТПлановыхНачисленийСотрудников.ПлановыйФОТ);
ФОТСотрудников = ФОТСотрудниковПоОписаниюНачислений(ФОТПлановыхНачисленийСотрудников.ПлановыйФОТ);
ЗаполнитьЗначенияСовокупныхТарифныхСтавокСотрудников(ФОТПлановыхНачисленийСотрудников.ТарифныеСтавки);
ЗаполнитьТекущиеДанныеОплатыТруда(, Истина);
ЗаполнитьКоэффициентыИндексации();
РеквизитФормыВДанныеСотрудников(Объект);
ДанныеСотрудниковВРеквизитФормы();
ФОТСотрудниковВРеквизитФормы(ФОТСотрудников);
УстановитьДоступностьКомандыЗаполнитьПоказатели();
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура ОчиститьДатыОкончания()
Объект.ДатаОкончания = Дата(1, 1, 1);
Для Каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
СтрокаСотрудника.ДатаОкончания = Дата(1, 1, 1);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура РазныеСрокиДляРазныхСотрудниковПриИзмененииНаСервере()
ЗаполнитьПериодыИзмененийСотрудников();
ЗаполнитьТекущиеПоказатели();
ЗаполнитьТекущиеДанныеОплатыТруда();
УстановитьВидимостьПериодовИзмененияНачислений();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПериодыИзмененийСотрудников()
Для Каждого СтрокаСотрудников Из Объект.Сотрудники Цикл
СтрокаСотрудников.ДатаИзменения = Объект.ДатаИзменения;
СтрокаСотрудников.ДатаОкончания = Объект.ДатаОкончания;
КонецЦикла;
ПрочитатьВремяРегистрации();
КонецПроцедуры
&НаСервере
Процедура УчитыватьКакИндексациюЗаработкаПриИзмененииНаСервере()
Если Объект.УчитыватьКакИндексациюЗаработка Тогда
Объект.ДатаИзменения = НачалоМесяца(Объект.ДатаИзменения);
ДатаИзмененияПриИзмененииНаСервере();
КонецЕсли;
ЗаполнитьТекущиеДанныеОплатыТруда(, ПризнакИндексацииЗаработка(ЭтаФорма));
ЗаполнитьКоэффициентыИндексации();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКоэффициентыИндексации(СтрокаСотрудника = Неопределено)
Если Не ПолучитьФункциональнуюОпциюФормы("ИспользоватьИндексациюЗаработка") Тогда
Возврат;
КонецЕсли;
Если СтрокаСотрудника = Неопределено Тогда
Для Каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
РассчитатьКоэффициентИндексации(СтрокаСотрудника);
КонецЦикла;
Иначе
Если Не ЗначениеЗаполнено(СтрокаСотрудника.СовокупнаяТарифнаяСтавкаТекущееЗначение) Тогда
ТекущаяСтрока = Объект.Сотрудники.Индекс(СтрокаСотрудника);
НачальнаяПозиция = Макс(0, ТекущаяСтрока - КоличествоСотрудниковДляЗаполненияДоТекущейСтроки());
КонечнаяПозиция = Мин(Объект.Сотрудники.Количество()-1, ТекущаяСтрока + КоличествоСотрудниковДляЗаполненияПослеТекущейСтроки());
СтрокиСотрудников = Новый Массив;
Для Сч = НачальнаяПозиция По КонечнаяПозиция Цикл
СтрокиСотрудников.Добавить(Объект.Сотрудники[Сч]);
КонецЦикла;
ЗаполнитьТекущиеДанныеОплатыТруда(СтрокиСотрудников, Истина);
КонецЕсли;
РассчитатьКоэффициентИндексации(СтрокаСотрудника);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция КоличествоСотрудниковДляЗаполненияДоТекущейСтроки()
Возврат 10;
КонецФункции
&НаСервере
Функция КоличествоСотрудниковДляЗаполненияПослеТекущейСтроки()
Возврат 10;
КонецФункции
&НаСервере
Процедура РассчитатьКоэффициентИндексации(СтрокаСотрудника)
СтрокаСотрудника.КоэффициентИндексации = УчетСреднегоЗаработкаКлиентСервер.КоэффициентИндексацииЗаработка(
СтрокаСотрудника.СовокупнаяТарифнаяСтавка, СтрокаСотрудника.СовокупнаяТарифнаяСтавкаТекущееЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикОжиданияМесяцИндексацииПриИзменении()
ДатаИзмененияПриИзмененииНаСервере();
КонецПроцедуры
#Область ОтображаемыеПоказатели
&НаКлиенте
Процедура ОтображаемыеПоказатели(Команда)
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ВыбранныеПоказатели", ОтображаемыеПоказатели);
ПараметрыФормы.Вставить("ЗаголовокФормы", "Отображаемые показатели");
ОбработчикЗавершения = Новый ОписаниеОповещения("ФормаВыбораПоказателейПослеЗакрытия", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ФормаВыбораПоказателей", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор, , , ОбработчикЗавершения);
КонецПроцедуры
&НаКлиенте
Процедура ФормаВыбораПоказателейПослеЗакрытия(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия = Неопределено Тогда
Возврат;
КонецЕсли;
ФормаВыбораПоказателейПослеЗакрытияНаСервере(РезультатЗакрытия);
КонецПроцедуры
&НаСервере
Процедура ФормаВыбораПоказателейПослеЗакрытияНаСервере(РезультатЗакрытия) Экспорт
ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить(
"ОбщаяФорма.ФормаВыбораПоказателей",
"ОтображаемыеПоказатели",
РезультатЗакрытия,
,
ИмяПользователя());
ОтображаемыеПоказатели = РезультатЗакрытия;
ДанныеСотрудниковВРеквизитФормы();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОтображаемыеПоказатели()
ПоказателиСовокупнойТарифнойСтавки = ПлановыеНачисленияСотрудников.ПоказателиНачислений();
ОтображаемыеПоказателиПоУмолчанию = Новый СписокЗначений;
Для Каждого СтрокаПоказателя Из ПоказателиСовокупнойТарифнойСтавки Цикл
Если СтрокаПоказателя.ИспользуетсяВСовокупнойТарифнойСтавке = Истина Тогда
ОтображаемыеПоказателиПоУмолчанию.Добавить(СтрокаПоказателя.Показатель);
КонецЕсли;
КонецЦикла;
ОтображаемыеПоказатели = ОбщегоНазначения.ХранилищеНастроекДанныхФормЗагрузить(
"ОбщаяФорма.ФормаВыбораПоказателей",
"ОтображаемыеПоказатели",
ОтображаемыеПоказателиПоУмолчанию,
,
ИмяПользователя());
КонецПроцедуры
#КонецОбласти
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьОтображениеНомераПервичногоДокумента(УправляемаяФорма)
ЗарплатаКадрыКлиентСервер.УстановитьОтображениеНомеровДокумента(УправляемаяФорма);
КонецПроцедуры
&НаСервере
Процедура ПризнакИндексацииЗаработкаПриИзменении(ПризнакИндексацииСтароеЗначение)
УстановитьВидимостьКолонкиКоэффициентаИндексации();
УстановитьДоступностьЭлементовФормы();
ПризнакИндексации = ПризнакИндексацииЗаработка(ЭтаФорма);
Если ПризнакИндексации <> ПризнакИндексацииСтароеЗначение Тогда
Для Каждого СтрокаСотрудника Из Объект.Сотрудники Цикл
СтрокаСотрудника.КоэффициентИндексации = 1;
КонецЦикла;
Если ПризнакИндексации Тогда
Объект.РазныеСрокиДляРазныхСотрудников = Ложь;
СрочноеИзменениеНачислений = Ложь;
ОчиститьДатыОкончания();
РазныеСрокиДляРазныхСотрудниковПриИзмененииНаСервере();
КонецЕсли;
КонецЕсли;
УчитыватьКакИндексациюЗаработкаПриИзмененииНаСервере();
ЗарплатаКадрыКлиентСервер.ЗаполнитьМесяцПоДате(ЭтаФорма, "Объект.ДатаИзменения", "МесяцИндексацииСтрокой");
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПризнакИндексацииЗаработка(Форма)
Объект = Форма.Объект;
Возврат Объект.УчитыватьКакИндексациюЗаработка Или Объект.УчитыватьПриИндексацииЗаработка;
КонецФункции
#КонецОбласти