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