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