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