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