#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныйПрограммныйИнтерфейс
#Область ОбработчикиПравилРегистрации
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляРегламентированныхДанных(Настройки);
КонецПроцедуры
#КонецОбласти
Функция ТекстовоеОписаниеГрафиковРаботы(МассивСсылок) Экспорт
ПредставлениеГрафиков = Новый Соответствие;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("МассивСсылок", МассивСсылок);
Запрос.Текст =
"ВЫБРАТЬ
| ГрафикиРаботыСотрудников.Наименование,
| ГрафикиРаботыСотрудников.СуммированныйУчетРабочегоВремени,
| ГрафикиРаботыСотрудников.ДлительностьРабочейНедели,
| ГрафикиРаботыСотрудников.НеполноеРабочееВремя,
| ГрафикиРаботыСотрудников.СокращеннаяРабочаяНеделя,
| ГрафикиРаботыСотрудников.НеполныйРабочийДень,
| ГрафикиРаботыСотрудников.РабочихДнейВНеделе,
| ГрафикиРаботыСотрудников.СпособЗаполнения,
| ГрафикиРаботыСотрудников.Ссылка
|ИЗ
| Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
|ГДЕ
| ГрафикиРаботыСотрудников.Ссылка В(&МассивСсылок)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.СпособЗаполнения = Перечисления.СпособыЗаполненияГрафиковРаботыСотрудников.ПоНеделям Тогда
ШаблонОписания = НСтр("ru = '%1 ч., %2 - дневная рабочая неделя'");
ОписаниеГрафика = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписания,
Строка(Выборка.ДлительностьРабочейНедели),
Строка(Выборка.РабочихДнейВНеделе));
Иначе
ШаблонОписания = НСтр("ru = '%1 ч., сменный'");
ОписаниеГрафика = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонОписания,
Строка(Выборка.ДлительностьРабочейНедели),
Строка(Выборка.ДлительностьРабочейНедели));
КонецЕсли;
ПредставлениеГрафиков.Вставить(Выборка.Ссылка, ОписаниеГрафика);
КонецЦикла;
Возврат ПредставлениеГрафиков;
КонецФункции
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "ФормаГрафикаРаботы";
КомандаПечати.СписокФорм = "ФормаГрафика";
КомандаПечати.Обработчик = "Форма.Печать";
КомандаПечати.Представление = НСтр("ru = 'График работы'");
КонецПроцедуры
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Год = 0;
Если ПараметрыПечати <> Неопределено Тогда
ПараметрыПечати.Свойство("Год", Год);
Иначе
Год = Год(ТекущаяДатаСеанса());
КонецЕсли;
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ФормаГрафикаРаботы") Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ФормаГрафикаРаботы", НСтр("ru = 'График работы'"),
ПечатнаяФормаГрафиковРаботы(МассивОбъектов, Год));
КонецЕсли;
КонецПроцедуры
Функция ПечатнаяФормаГрафиковРаботы(МассивОбъектов, Год)
РезультатыЗапроса = ЗапросДляПечатиГрафиков(МассивОбъектов, Год).ВыполнитьПакет();
КоличествоРезультатов = РезультатыЗапроса.Количество();
ВыборкаДанныхОВремени = РезультатыЗапроса[КоличествоРезультатов - 2].Выбрать();
ВыборкаДанныхГрафиков = РезультатыЗапроса[КоличествоРезультатов - 1].Выбрать();
Макет = УправлениеПечатью.МакетПечатнойФормы("Справочник.ГрафикиРаботыСотрудников.ПФ_MXL_ФормаГрафикаРаботы");
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = "ГрафикиРаботыСотрудников_ФормаГрафикаРаботы";
ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабличныйДокумент.Автомасштаб = Истина;
ОбластиМакета = Новый Массив;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластиМакета.Добавить(ОбластьШапка);
ОбластьЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ОбластиМакета.Добавить(ОбластьЗаголовокТаблицы);
ОбластьИтогоЗаМесяц = Макет.ПолучитьОбласть("ИтогоЗаМесяц");
ОбластиМакета.Добавить(ОбластьИтогоЗаМесяц);
ОбластьИтогоПоВидамВремениЗаМесяц = Макет.ПолучитьОбласть("ИтогоПоВидамВремениЗаМесяц");
ОбластиМакета.Добавить(ОбластьИтогоПоВидамВремениЗаМесяц);
ОбластьИтогоЗаКвартал = Макет.ПолучитьОбласть("ИтогоЗаКвартал");
ОбластиМакета.Добавить(ОбластьИтогоЗаКвартал);
ОбластьИтогоЗаКварталПоВидуВремени = Макет.ПолучитьОбласть("ИтогоЗаКварталПоВидамВремени");
ОбластиМакета.Добавить(ОбластьИтогоЗаКварталПоВидуВремени);
ОбластьИтогоЗаГод = Макет.ПолучитьОбласть("ИтогоЗаГод");
ОбластиМакета.Добавить(ОбластьИтогоЗаГод);
ОбластьИтогоЗаГодПоВидамВремени = Макет.ПолучитьОбласть("ИтогоЗаГодПоВидамВремени");
ОбластиМакета.Добавить(ОбластьИтогоЗаГодПоВидамВремени);
ОбластьПодпись = Макет.ПолучитьОбласть("Подпись");
ОбластиМакета.Добавить(ОбластьПодпись);
Пока ВыборкаДанныхОВремени.СледующийПоЗначениюПоля("ГрафикРаботы") Цикл
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
ОписаниеГрафика = ОписаниеГрафикаРаботы(ВыборкаДанныхГрафиков, ВыборкаДанныхОВремени.ГрафикРаботы);
УстановитьШиринуКолонокТабличногоДокумента(ОбластиМакета, ОписаниеГрафика.КоличествоВидовВремени);
ОбластьШапка.Параметры.Наименование = ОписаниеГрафика.Наименование;
ОбластьШапка.Параметры.Год = Формат(Год, "ЧГ=");
ОбластьШапка.Параметры.ОписаниеГрафика = ТекстОписанияГрафикаРаботы(ОписаниеГрафика);
ТабличныйДокумент.Вывести(ОбластьШапка);
Если ОписаниеГрафика.КоличествоВидовВремени > 1 Тогда
ОбластьЗаголовокТаблицы.Параметры.ОбластьДнейЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Часы по видам времени %1, выведены в формате %2'"),
ОписаниеГрафика.ВидыВремениСтрока,
ОписаниеГрафика.ОбозначениеВидовВремени);
Иначе
ОбластьЗаголовокТаблицы.Параметры.ОбластьДнейЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Часов за день (%1)'"),
ОписаниеГрафика.ВидыВремениСтрока);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
ДнейЗаГод = 0;
ЧасовЗаГод = 0;
ИтогиЗаГодПоВидамВремени = ИтогиПоВидамВремениЗаПериод(ОписаниеГрафика);
РабочихДнейЗаГодПоКалендарю = 0;
РабочихЧасовЗаГодПоКалендарю = 0;
ВыходныхДнейЗаГодПоКалендарю = 0;
Пока ВыборкаДанныхОВремени.СледующийПоЗначениюПоля("Квартал") Цикл
ДнейЗаКвартал = 0;
ЧасовЗаКвартал = 0;
ИтогиЗаКварталПоВидамВремени = ИтогиПоВидамВремениЗаПериод(ОписаниеГрафика);
РабочихДнейЗаКварталПоКалендарю = 0;
РабочихЧасовЗаКварталПоКалендарю = 0;
ВыходныхДнейЗаКварталПоКалендарю = 0;
Пока ВыборкаДанныхОВремени.СледующийПоЗначениюПоля("Месяц") Цикл
ИтогиЗаМесяцПоВидамВремени = ИтогиПоВидамВремениЗаПериод(ОписаниеГрафика);
ДнейЗаМесяц = 0;
ЧасовЗаМесяц = 0;
ОчиститьОбластьЯчеек(ОбластьИтогоЗаМесяц);
ОчиститьОбластьЯчеек(ОбластьИтогоПоВидамВремениЗаМесяц);
ОбластьИтогоЗаМесяц.Параметры.Месяц = Формат(ВыборкаДанныхОВремени.Месяц, "ДФ=ММММ");
Пока ВыборкаДанныхОВремени.СледующийПоЗначениюПоля("Дата") Цикл
ЧасовЗаДень = 0;
ЧасовПоВидамВремениТекст = "";
Пока ВыборкаДанныхОВремени.Следующий() Цикл
НомерДня = День(ВыборкаДанныхОВремени.Дата);
ДнейПоВидуВремени = ?(ВыборкаДанныхОВремени.Часов > 0, 1, 0);
ИтогиЗаГодПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Дни =
ИтогиЗаГодПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Дни + ДнейПоВидуВремени;
ИтогиЗаГодПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Часы =
ИтогиЗаГодПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Часы + ВыборкаДанныхОВремени.Часов;
ИтогиЗаКварталПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Дни =
ИтогиЗаКварталПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Дни + ДнейПоВидуВремени;
ИтогиЗаКварталПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Часы =
ИтогиЗаКварталПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Часы + ВыборкаДанныхОВремени.Часов;
ИтогиЗаМесяцПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Дни =
ИтогиЗаМесяцПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Дни + ДнейПоВидуВремени;
ИтогиЗаМесяцПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Часы =
ИтогиЗаМесяцПоВидамВремени[ВыборкаДанныхОВремени.ВидУчетаВремени].Часы + ВыборкаДанныхОВремени.Часов;
ЧасовЗаДень = ЧасовЗаДень + ВыборкаДанныхОВремени.Часов;
ЧасовПоВидамВремениТекст = ЧасовПоВидамВремениТекст + "/" + Формат(ВыборкаДанныхОВремени.Часов, "ЧН=0; ЧГ=");
КонецЦикла;
ЧасовЗаМесяц = ЧасовЗаМесяц + ЧасовЗаДень;
ДнейЗаМесяц = ДнейЗаМесяц + ?(ЧасовЗаДень > 0, 1, 0);
ОбластьИтогоЗаМесяц.Параметры["ИтогоЗаДень" + НомерДня] = ЧасовЗаДень;
Если ЧасовЗаДень > 0 Тогда
ОбластьИтогоПоВидамВремениЗаМесяц.Параметры["ПоВидамВремениЗаДень" + НомерДня] = Сред(ЧасовПоВидамВремениТекст, 2);
Иначе
ОбластьИтогоПоВидамВремениЗаМесяц.Параметры["ПоВидамВремениЗаДень" + НомерДня] = "";
КонецЕсли;
КонецЦикла;
ИтогоЧасовПоВидамВремениТекст = "";
ИтогоДнейПоВидамВремениТекст = "";
Для Каждого ВидВремени Из ОписаниеГрафика.ВидыВремени Цикл
ИтогоЧасовПоВидамВремениТекст = ИтогоЧасовПоВидамВремениТекст + "/"
+ Формат(ИтогиЗаМесяцПоВидамВремени[ВидВремени].Часы, "ЧН=0; ЧГ=");
ИтогоДнейПоВидамВремениТекст = ИтогоДнейПоВидамВремениТекст + "/"
+ Формат(ИтогиЗаМесяцПоВидамВремени[ВидВремени].Дни, "ЧН=0; ЧГ=");
КонецЦикла;
ОбластьИтогоПоВидамВремениЗаМесяц.Параметры.ДнейПоВидуВремениЗаМесяц = Сред(ИтогоДнейПоВидамВремениТекст, 2);
ОбластьИтогоПоВидамВремениЗаМесяц.Параметры.ЧасовПоВидуВремениЗаМесяц = Сред(ИтогоЧасовПоВидамВремениТекст, 2);
ОбластьИтогоЗаМесяц.Параметры.ДнейЗаМесяц = ДнейЗаМесяц;
ОбластьИтогоЗаМесяц.Параметры.ЧасовЗаМесяц = ЧасовЗаМесяц;
ОбластьИтогоЗаМесяц.Параметры.ДнейПоКалендарю = ВыборкаДанныхОВремени.РабочихДней;
ОбластьИтогоЗаМесяц.Параметры.ЧасовПоКалендарю = ВыборкаДанныхОВремени.РабочихЧасов;
ОбластьИтогоЗаМесяц.Параметры.ВыходныхПоКалендарю = ВыборкаДанныхОВремени.ВыходныхДней;
ДнейЗаКвартал = ДнейЗаКвартал + ДнейЗаМесяц;
ЧасовЗаКвартал = ЧасовЗаКвартал + ЧасовЗаМесяц;
РабочихДнейЗаКварталПоКалендарю = РабочихДнейЗаКварталПоКалендарю + ВыборкаДанныхОВремени.РабочихДней;
РабочихЧасовЗаКварталПоКалендарю = РабочихЧасовЗаКварталПоКалендарю + ВыборкаДанныхОВремени.РабочихЧасов;
ВыходныхДнейЗаКварталПоКалендарю = ВыходныхДнейЗаКварталПоКалендарю + ВыборкаДанныхОВремени.ВыходныхДней;
ДнейЗаГод = ДнейЗаГод + ДнейЗаМесяц;
ЧасовЗаГод = ЧасовЗаГод + ЧасовЗаМесяц;
РабочихДнейЗаГодПоКалендарю = РабочихДнейЗаГодПоКалендарю + ВыборкаДанныхОВремени.РабочихДней;
РабочихЧасовЗаГодПоКалендарю = РабочихЧасовЗаГодПоКалендарю + ВыборкаДанныхОВремени.РабочихЧасов;
ВыходныхДнейЗаГодПоКалендарю = ВыходныхДнейЗаГодПоКалендарю + ВыборкаДанныхОВремени.ВыходныхДней;
ОбластиПроверкиВывода = Новый Массив;
ОбластиПроверкиВывода.Добавить(ОбластьИтогоЗаМесяц);
Если ОписаниеГрафика.КоличествоВидовВремени > 1 Тогда
ОбластиПроверкиВывода.Добавить(ОбластьИтогоПоВидамВремениЗаМесяц);
КонецЕсли;
Если Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ОбластиПроверкиВывода) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ТабличныйДокумент.Вывести(ОбластьЗаголовокТаблицы);
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьИтогоЗаМесяц);
НомерПервойСтрокиМесяц = ТабличныйДокумент.ВысотаТаблицы;
НомерПоследнейСтрокиМесяц = НомерПервойСтрокиМесяц;
Если ОписаниеГрафика.КоличествоВидовВремени > 1 Тогда
ТабличныйДокумент.Вывести(ОбластьИтогоПоВидамВремениЗаМесяц);
НомерПоследнейСтрокиМесяц = НомерПоследнейСтрокиМесяц + 1;
КонецЕсли;
Для НомерДня = День(КонецМесяца(ВыборкаДанныхОВремени.Месяц)) + 1 По 31 Цикл
Область = ТабличныйДокумент.Область(НомерПервойСтрокиМесяц, НомерДня + 1, НомерПоследнейСтрокиМесяц, НомерДня + 1);
Область.Объединить();
Область.Текст = "Х";
Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
Область.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
КонецЦикла;
КонецЦикла;
ОбластьИтогоЗаКвартал.Параметры.Квартал = Формат(ВыборкаДанныхОВремени.Квартал, "ДФ='к ""квартал""'");
ОбластьИтогоЗаКвартал.Параметры.ДнейЗаКвартал = ДнейЗаКвартал;
ОбластьИтогоЗаКвартал.Параметры.ЧасовЗаКвартал = ЧасовЗаКвартал;
ОбластьИтогоЗаКвартал.Параметры.ДнейЗаКварталПоКалендарю = РабочихДнейЗаКварталПоКалендарю;
ОбластьИтогоЗаКвартал.Параметры.ЧасовЗаКварталПоКалендарю = РабочихЧасовЗаКварталПоКалендарю;
ОбластьИтогоЗаКвартал.Параметры.ВыходныхЗаКварталПоКалендарю = ВыходныхДнейЗаКварталПоКалендарю;
ИтогоЧасовПоВидамВремениТекст = "";
ИтогоДнейПоВидамВремениТекст = "";
Для Каждого ВидВремени Из ОписаниеГрафика.ВидыВремени Цикл
ИтогоЧасовПоВидамВремениТекст = ИтогоЧасовПоВидамВремениТекст + "/"
+ Формат(ИтогиЗаКварталПоВидамВремени[ВидВремени].Часы, "ЧН=0; ЧГ=");
ИтогоДнейПоВидамВремениТекст = ИтогоДнейПоВидамВремениТекст + "/"
+ Формат(ИтогиЗаКварталПоВидамВремени[ВидВремени].Дни, "ЧН=0; ЧГ=");
КонецЦикла;
ОбластьИтогоЗаКварталПоВидуВремени.Параметры.ДнейЗаКварталПоВидуВремени = Сред(ИтогоДнейПоВидамВремениТекст, 2);
ОбластьИтогоЗаКварталПоВидуВремени.Параметры.ЧасовЗаКварталПоВидуВремени = Сред(ИтогоЧасовПоВидамВремениТекст, 2);
Области = Новый Массив;
Области.Добавить(ОбластьИтогоЗаКвартал);
Если ОписаниеГрафика.КоличествоВидовВремени > 1 Тогда
Области.Добавить(ОбластьИтогоЗаКварталПоВидуВремени);
КонецЕсли;
Если Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, Области) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьИтогоЗаКвартал);
Если ОписаниеГрафика.КоличествоВидовВремени > 1 Тогда
ТабличныйДокумент.Вывести(ОбластьИтогоЗаКварталПоВидуВремени);
КонецЕсли;
КонецЦикла;
ОбластьИтогоЗаГод.Параметры.ДнейЗаГод = ДнейЗаГод;
ОбластьИтогоЗаГод.Параметры.ЧасовЗаГод = ЧасовЗаГод;
ОбластьИтогоЗаГод.Параметры.ДнейЗаГодПоКалендарю = РабочихДнейЗаГодПоКалендарю;
ОбластьИтогоЗаГод.Параметры.ЧасовЗаГодПоКалендарю = РабочихЧасовЗаГодПоКалендарю;
ОбластьИтогоЗаГод.Параметры.ВыходныхЗаГодПоКалендарю = ВыходныхДнейЗаГодПоКалендарю;
ИтогоЧасовПоВидамВремениТекст = "";
ИтогоДнейПоВидамВремениТекст = "";
Для Каждого ВидВремени Из ОписаниеГрафика.ВидыВремени Цикл
ИтогоЧасовПоВидамВремениТекст = ИтогоЧасовПоВидамВремениТекст + "/"
+ Формат(ИтогиЗаГодПоВидамВремени[ВидВремени].Часы, "ЧН=0; ЧГ=");
ИтогоДнейПоВидамВремениТекст = ИтогоДнейПоВидамВремениТекст + "/"
+ Формат(ИтогиЗаГодПоВидамВремени[ВидВремени].Дни, "ЧН=0; ЧГ=");
КонецЦикла;
ОбластьИтогоЗаГодПоВидамВремени.Параметры.ДнейЗаГод = Сред(ИтогоДнейПоВидамВремениТекст, 2);
ОбластьИтогоЗаГодПоВидамВремени.Параметры.ЧасовЗаГод = Сред(ИтогоЧасовПоВидамВремениТекст, 2);
Области = Новый Массив;
Области.Добавить(ОбластьИтогоЗаГод);
Если ОписаниеГрафика.КоличествоВидовВремени > 1 Тогда
Области.Добавить(ОбластьИтогоЗаГодПоВидамВремени);
КонецЕсли;
Если Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, Области) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьИтогоЗаГод);
Если ОписаниеГрафика.КоличествоВидовВремени > 1 Тогда
ТабличныйДокумент.Вывести(ОбластьИтогоЗаГодПоВидамВремени);
Иначе
Область = ТабличныйДокумент.Область(ТабличныйДокумент.ВысотаТаблицы, 1, ТабличныйДокумент.ВысотаТаблицы, ТабличныйДокумент.ШиринаТаблицы);
Область.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);
КонецЕсли;
Если Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ОбластьПодпись) Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьПодпись);
КонецЦикла;
Возврат ТабличныйДокумент;
КонецФункции
Процедура УстановитьШиринуКолонокТабличногоДокумента(ОбластиМакета, КоличествоВидовВремени)
Для Каждого ТабличныйДокумент Из ОбластиМакета Цикл
ТабличныйДокумент.Область(1, 2, ТабличныйДокумент.ВысотаТаблицы, 32).ШиринаКолонки = КоличествоВидовВремени * ?(КоличествоВидовВремени > 1, 2, 3.63);
ТабличныйДокумент.Область(1, 33, ТабличныйДокумент.ВысотаТаблицы, 33).ШиринаКолонки = КоличествоВидовВремени * ?(КоличествоВидовВремени > 1, 6, 3.63);
ТабличныйДокумент.Область(1, 34, ТабличныйДокумент.ВысотаТаблицы, 34).ШиринаКолонки = КоличествоВидовВремени * ?(КоличествоВидовВремени > 1, 6, 7.13);
КонецЦикла;
КонецПроцедуры
Функция ОписаниеГрафикаРаботы(ВыборкаПоГрафикам, ГрафикРаботы)
ВыборкаПоГрафикам.Сбросить();
ОписаниеГрафика = Новый Структура();
ОписаниеГрафика.Вставить("Наименование", "");
ОписаниеГрафика.Вставить("ОбозначениеВидовВремени", "");
ОписаниеГрафика.Вставить("КоличествоВидовВремени", 0);
ОписаниеГрафика.Вставить("ВидыВремениСтрока", "");
ОписаниеГрафика.Вставить("СуммированныйУчетРабочегоВремени", Ложь);
ОписаниеГрафика.Вставить("СпособЗаполнения");
ОписаниеГрафика.Вставить("ВидыВремени", Новый Массив);
ОписаниеГрафика.Вставить("ШаблонЗаполнения", Новый ТаблицаЗначений);
ОписаниеГрафика.Вставить("ДлительностьРабочейНедели", 0);
ОписаниеГрафика.Вставить("НеполноеРабочееВремя", Ложь);
ОписаниеГрафика.Вставить("НеполныйРабочийДень", Ложь);
ОписаниеГрафика.Вставить("СокращеннаяРабочаяНеделя", Ложь);
ОписаниеГрафика.Вставить("УчитыватьПраздники", Ложь);
Если ВыборкаПоГрафикам.НайтиСледующий(Новый Структура("ГрафикРаботы", ГрафикРаботы)) Тогда
ВыборкаПоГрафикам.СледующийПоЗначениюПоля("ГрафикРаботы");
ОписаниеГрафика.Наименование = ВыборкаПоГрафикам.Наименование;
ОписаниеГрафика.СуммированныйУчетРабочегоВремени = ВыборкаПоГрафикам.СуммированныйУчетРабочегоВремени;
ОписаниеГрафика.СпособЗаполнения = ВыборкаПоГрафикам.СпособЗаполнения;
ОписаниеГрафика.ШаблонЗаполнения = ВыборкаПоГрафикам.ШаблонЗаполнения.Выгрузить();
ОписаниеГрафика.ДлительностьРабочейНедели = ВыборкаПоГрафикам.ДлительностьРабочейНедели;
ОписаниеГрафика.НеполноеРабочееВремя = ВыборкаПоГрафикам.НеполноеРабочееВремя;
ОписаниеГрафика.НеполныйРабочийДень = ВыборкаПоГрафикам.НеполныйРабочийДень;
ОписаниеГрафика.СокращеннаяРабочаяНеделя = ВыборкаПоГрафикам.СокращеннаяРабочаяНеделя;
ОписаниеГрафика.УчитыватьПраздники = ВыборкаПоГрафикам.УчитыватьПраздники;
Пока ВыборкаПоГрафикам.СледующийПоЗначениюПоля("ВидУчетаВремени") Цикл
Если ЗначениеЗаполнено(ВыборкаПоГрафикам.ВидУчетаВремени) Тогда
ОписаниеГрафика.ОбозначениеВидовВремени = ОписаниеГрафика.ОбозначениеВидовВремени +
?(ОписаниеГрафика.КоличествоВидовВремени = 0, "", "/") + ВыборкаПоГрафикам.ВидУчетаВремениБуквенныйКод;
ОписаниеГрафика.ВидыВремениСтрока = ОписаниеГрафика.ВидыВремениСтрока +
?(ОписаниеГрафика.КоличествоВидовВремени = 0, "", ", ") + """" + ВыборкаПоГрафикам.ВидУчетаВремениНаименование + """";
ОписаниеГрафика.КоличествоВидовВремени = ОписаниеГрафика.КоличествоВидовВремени + 1;
ОписаниеГрафика.ВидыВремени.Добавить(ВыборкаПоГрафикам.ВидУчетаВремени);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат ОписаниеГрафика;
КонецФункции
Функция ИтогиПоВидамВремениЗаПериод(ОписаниеГрафика)
ИтогиПоВидамВремени = Новый Соответствие;
Для Каждого ВидВремени Из ОписаниеГрафика.ВидыВремени Цикл
ИтогиПоВидамВремени.Вставить(ВидВремени, Новый Структура("Дни, Часы", 0, 0));
КонецЦикла;
Возврат ИтогиПоВидамВремени;
КонецФункции
Процедура ОчиститьОбластьЯчеек(ОбластьЯчеек)
КоличествоПараметров = ОбластьЯчеек.Параметры.Количество();
Для ИндексПараметра = 0 По КоличествоПараметров - 1 Цикл
ОбластьЯчеек.Параметры.Установить(ИндексПараметра, Неопределено);
КонецЦикла;
КонецПроцедуры
Функция ЗапросДляПечатиГрафиков(МассивОбъектов, Год)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(Запрос.МенеджерВременныхТаблиц, Дата(Год, 1, 1), Дата(Год, 12, 31), "День");
Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.УстановитьПараметр("Год", Год);
Запрос.УстановитьПараметр("КонецГода", Дата(Год, 12, 31));
Запрос.УстановитьПараметр("РабочееВремя", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя"));
Запрос.УстановитьПараметр("ВыходныеДни", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни"));
Запрос.УстановитьПараметр("Выходной", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни"));
Запрос.УстановитьПараметр("Явка", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка"));
Запрос.УстановитьПараметр("ВечерниеЧасы", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РаботаВечерниеЧасы"));
Запрос.УстановитьПараметр("НочныеЧасы", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.РаботаНочныеЧасы"));
Запрос.УстановитьПараметр("Сверхурочно", ОбщегоНазначения.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Сверхурочные"));
Запрос.Текст =
"ВЫБРАТЬ
| ГрафикиРаботыСотрудниковВидыВремени.ВидВремени КАК ВидУчетаВремени,
| ГрафикиРаботыСотрудниковВидыВремени.Ссылка КАК ГрафикРаботы
|ПОМЕСТИТЬ ВТВидыВремени
|ИЗ
| Справочник.ГрафикиРаботыСотрудников.ВидыВремени КАК ГрафикиРаботыСотрудниковВидыВремени
|ГДЕ
| ГрафикиРаботыСотрудниковВидыВремени.Ссылка В(&МассивОбъектов)
|;
|
|
|ВЫБРАТЬ
| ГрафикиРаботыСотрудников.Ссылка КАК ГрафикРаботы,
| Периоды.Период КАК Дата,
| ГрафикиРаботыСотрудников.Наименование КАК Наименование,
| НАЧАЛОПЕРИОДА(Периоды.Период, МЕСЯЦ) КАК Месяц
|ПОМЕСТИТЬ ВТГрафикиПериоды
|ИЗ
| ВТПериоды КАК Периоды
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
| ПО (ГрафикиРаботыСотрудников.Ссылка В (&МассивОбъектов))
|;
|
|
|ВЫБРАТЬ
| СУММА(ВЫБОР
| КОГДА ГрафикиРаботыСотрудников.УчитыватьНерабочиеДни
| И (ДанныеПроизводственногоКалендаря.Дата МЕЖДУ ПериодыНерабочихДнейКалендаря.ДатаНачала И ПериодыНерабочихДнейКалендаря.ДатаОкончания)
| ТОГДА 0
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
| ИЛИ ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК РабочихДней,
| СУММА(ВЫБОР
| КОГДА ГрафикиРаботыСотрудников.УчитыватьНерабочиеДни
| И (ДанныеПроизводственногоКалендаря.Дата МЕЖДУ ПериодыНерабочихДнейКалендаря.ДатаНачала И ПериодыНерабочихДнейКалендаря.ДатаОкончания)
| ТОГДА 0
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
| ТОГДА ГрафикиРаботыСотрудников.ДлительностьРабочейНедели / 5
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
| ТОГДА ГрафикиРаботыСотрудников.ДлительностьРабочейНедели / 5 - 1
| ИНАЧЕ 0
| КОНЕЦ) КАК РабочихЧасов,
| СУММА(ВЫБОР
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Воскресенье)
| ИЛИ ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Нерабочий)
| ИЛИ ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Суббота)
| ИЛИ ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
| ИЛИ ГрафикиРаботыСотрудников.УчитыватьНерабочиеДни
| И (ДанныеПроизводственногоКалендаря.Дата МЕЖДУ ПериодыНерабочихДнейКалендаря.ДатаНачала И ПериодыНерабочихДнейКалендаря.ДатаОкончания)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК ВыходныхДней,
| ГрафикиРаботыСотрудников.Ссылка КАК ГрафикРаботы,
| НАЧАЛОПЕРИОДА(ДанныеПроизводственногоКалендаря.Дата, МЕСЯЦ) КАК Месяц
|ПОМЕСТИТЬ ВТДанныеПроизводственныхКалендарейЗаМесяц
|ИЗ
| Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
| ПО ГрафикиРаботыСотрудников.ПроизводственныйКалендарь = ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь
| И (ГрафикиРаботыСотрудников.Ссылка В (&МассивОбъектов))
| И (ДанныеПроизводственногоКалендаря.Год = &Год)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПериодыНерабочихДнейКалендаря КАК ПериодыНерабочихДнейКалендаря
| ПО ГрафикиРаботыСотрудников.ПроизводственныйКалендарь = ПериодыНерабочихДнейКалендаря.ПроизводственныйКалендарь
| И (ДанныеПроизводственногоКалендаря.Дата МЕЖДУ ПериодыНерабочихДнейКалендаря.ДатаНачала И ПериодыНерабочихДнейКалендаря.ДатаОкончания)
|
|СГРУППИРОВАТЬ ПО
| ГрафикиРаботыСотрудников.Ссылка,
| НАЧАЛОПЕРИОДА(ДанныеПроизводственногоКалендаря.Дата, МЕСЯЦ)
|;
|
|
|ВЫБРАТЬ
| ГрафикиПериоды.ГрафикРаботы КАК ГрафикРаботы,
| НАЧАЛОПЕРИОДА(ГрафикиПериоды.Дата, МЕСЯЦ) КАК Месяц,
| ГрафикиПериоды.Дата КАК Дата,
| ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ОсновноеЗначение, 0) КАК Дней,
| ЕСТЬNULL(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение, 0) КАК Часов,
| ЕСТЬNULL(ДанныеПроизводственныхКалендарейЗаМесяц.РабочихДней, 0) КАК РабочихДней,
| ЕСТЬNULL(ДанныеПроизводственныхКалендарейЗаМесяц.РабочихЧасов, 0) КАК РабочихЧасов,
| ЕСТЬNULL(ДанныеПроизводственныхКалендарейЗаМесяц.ВыходныхДней, 0) КАК ВыходныхДней,
| НАЧАЛОПЕРИОДА(ГрафикиПериоды.Дата, КВАРТАЛ) КАК Квартал,
| ВидыВремени.ВидУчетаВремени КАК ВидУчетаВремени,
| ВЫБОР
| КОГДА ВидыВремени.ВидУчетаВремени = &Явка
| ТОГДА 1
| КОГДА ВидыВремени.ВидУчетаВремени.ОсновноеВремя = &Явка
| ТОГДА 2
| КОГДА ВидыВремени.ВидУчетаВремени = &ВечерниеЧасы
| ТОГДА 3
| КОГДА ВидыВремени.ВидУчетаВремени.ОсновноеВремя = &ВечерниеЧасы
| ТОГДА 3
| КОГДА ВидыВремени.ВидУчетаВремени = &НочныеЧасы
| ТОГДА 5
| КОГДА ВидыВремени.ВидУчетаВремени.ОсновноеВремя = &НочныеЧасы
| ТОГДА 6
| КОГДА ВидыВремени.ВидУчетаВремени = &Сверхурочно
| ТОГДА 7
| КОГДА ВидыВремени.ВидУчетаВремени.ОсновноеВремя = &Сверхурочно
| ТОГДА 8
| ИНАЧЕ 9
| КОНЕЦ КАК Приоритет
|ИЗ
| ВТГрафикиПериоды КАК ГрафикиПериоды
| ЛЕВОЕ СОЕДИНЕНИЕ ВТВидыВремени КАК ВидыВремени
| ПО ГрафикиПериоды.ГрафикРаботы = ВидыВремени.ГрафикРаботы
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
| ПО ГрафикиПериоды.ГрафикРаботы = ГрафикиРаботыПоВидамВремени.ГрафикРаботы
| И ГрафикиПериоды.Дата = ГрафикиРаботыПоВидамВремени.Дата
| И ГрафикиПериоды.Месяц = ГрафикиРаботыПоВидамВремени.Месяц
| И (НЕ ГрафикиРаботыПоВидамВремени.ВремяВЧасах)
| И (ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = ВидыВремени.ВидУчетаВремени)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеПроизводственныхКалендарейЗаМесяц КАК ДанныеПроизводственныхКалендарейЗаМесяц
| ПО ГрафикиПериоды.Месяц = ДанныеПроизводственныхКалендарейЗаМесяц.Месяц
| И ГрафикиПериоды.ГрафикРаботы = ДанныеПроизводственныхКалендарейЗаМесяц.ГрафикРаботы
|
|УПОРЯДОЧИТЬ ПО
| ГрафикРаботы,
| Квартал,
| НАЧАЛОПЕРИОДА(ГрафикиПериоды.Дата, МЕСЯЦ),
| Дата,
| Приоритет,
| ВидыВремени.ВидУчетаВремени.БуквенныйКод,
| ВидыВремени.ВидУчетаВремени
|;
|
|
|ВЫБРАТЬ
| ГрафикиРаботыСотрудников.Наименование КАК Наименование,
| ГрафикиРаботыСотрудников.СуммированныйУчетРабочегоВремени КАК СуммированныйУчетРабочегоВремени,
| ГрафикиРаботыСотрудников.ДлительностьРабочейНедели КАК ДлительностьРабочейНедели,
| ГрафикиРаботыСотрудников.СокращеннаяРабочаяНеделя КАК СокращеннаяРабочаяНеделя,
| ГрафикиРаботыСотрудников.НеполныйРабочийДень КАК НеполныйРабочийДень,
| ГрафикиРаботыСотрудников.УчитыватьПраздники КАК УчитыватьПраздники,
| ГрафикиРаботыСотрудников.НеполноеРабочееВремя КАК НеполноеРабочееВремя,
| ГрафикиРаботыСотрудников.Ссылка КАК ГрафикРаботы,
| ВЫБОР
| КОГДА ВидыУчетаВремени.ВидУчетаВремени = &Явка
| ТОГДА 1
| КОГДА ВидыУчетаВремени.ВидУчетаВремени.ОсновноеВремя = &Явка
| ТОГДА 2
| КОГДА ВидыУчетаВремени.ВидУчетаВремени = &ВечерниеЧасы
| ТОГДА 3
| КОГДА ВидыУчетаВремени.ВидУчетаВремени.ОсновноеВремя = &ВечерниеЧасы
| ТОГДА 3
| КОГДА ВидыУчетаВремени.ВидУчетаВремени = &НочныеЧасы
| ТОГДА 5
| КОГДА ВидыУчетаВремени.ВидУчетаВремени.ОсновноеВремя = &НочныеЧасы
| ТОГДА 6
| КОГДА ВидыУчетаВремени.ВидУчетаВремени = &Сверхурочно
| ТОГДА 7
| КОГДА ВидыУчетаВремени.ВидУчетаВремени.ОсновноеВремя = &Сверхурочно
| ТОГДА 8
| ИНАЧЕ 9
| КОНЕЦ КАК Приоритет,
| ВидыУчетаВремени.ВидУчетаВремени КАК ВидУчетаВремени,
| ВидыУчетаВремени.ВидУчетаВремени.БуквенныйКод КАК ВидУчетаВремениБуквенныйКод,
| ВидыУчетаВремени.ВидУчетаВремени.Наименование КАК ВидУчетаВремениНаименование,
| ГрафикиРаботыСотрудников.СпособЗаполнения КАК СпособЗаполнения,
| ГрафикиРаботыСотрудников.ШаблонЗаполнения.(
| Ссылка КАК Ссылка,
| НомерСтроки КАК НомерСтроки,
| ДеньВключенВГрафик КАК ДеньВключенВГрафик
| ) КАК ШаблонЗаполнения
|ИЗ
| Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
| ЛЕВОЕ СОЕДИНЕНИЕ ВТВидыВремени КАК ВидыУчетаВремени
| ПО (ВидыУчетаВремени.ГрафикРаботы = ГрафикиРаботыСотрудников.Ссылка)
|ГДЕ
| ГрафикиРаботыСотрудников.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| ГрафикиРаботыСотрудников.Ссылка,
| Приоритет,
| ВидУчетаВремениБуквенныйКод,
| ВидУчетаВремени";
Возврат Запрос;
КонецФункции
Функция ТекстОписанияГрафикаРаботы(ОписаниеГрафикаРаботы) Экспорт
Понедельник = '20120514';
РабочееВремяТекст = "";
Если Не ОписаниеГрафикаРаботы.НеполноеРабочееВремя Тогда
РабочееВремяТекст = НСтр("ru = 'Полная занятость'");
ИначеЕсли ОписаниеГрафикаРаботы.НеполныйРабочийДень Тогда
РабочееВремяТекст = НСтр("ru = 'Неполный рабочий день'");
Иначе
РабочееВремяТекст = НСтр("ru = 'Неполная рабочая неделя'");
КонецЕсли;
Если ОписаниеГрафикаРаботы.СпособЗаполнения = Перечисления.СпособыЗаполненияГрафиковРаботыСотрудников.ПоНеделям Тогда
НомерДняНачалаИнтервала = 0;
НомерДняОкончанияИнтервала = 0;
РабочиеДниИдутПодряд = Истина;
НомераРабочихДней = Новый Массив;
НомераВыходныхДней = Новый Массив;
Для Каждого СтрокаШаблонаЗаполнения Из ОписаниеГрафикаРаботы.ШаблонЗаполнения Цикл
Если СтрокаШаблонаЗаполнения.ДеньВключенВГрафик И
НомерДняНачалаИнтервала <> 0 И
СтрокаШаблонаЗаполнения.НомерСтроки - НомерДняОкончанияИнтервала <> 1 Тогда
РабочиеДниИдутПодряд = Ложь;
КонецЕсли;
Если СтрокаШаблонаЗаполнения.ДеньВключенВГрафик Тогда
Если НомерДняНачалаИнтервала = 0 Тогда
НомерДняНачалаИнтервала = СтрокаШаблонаЗаполнения.НомерСтроки;
КонецЕсли;
НомерДняОкончанияИнтервала = СтрокаШаблонаЗаполнения.НомерСтроки;
НомераРабочихДней.Добавить(СтрокаШаблонаЗаполнения.НомерСтроки);
Иначе
НомераВыходныхДней.Добавить(СтрокаШаблонаЗаполнения.НомерСтроки);
КонецЕсли;
КонецЦикла;
КоличествоРабочихДней = НомераРабочихДней.Количество();
Если КоличествоРабочихДней = 5 Тогда
ВидГрафикаСтрока = НСтр("ru = 'Пятидневка'");
ИначеЕсли КоличествоРабочихДней = 6 Тогда
ВидГрафикаСтрока = НСтр("ru = 'Шестидневка'");
Иначе
ВидГрафикаСтрока = НСтр("ru = 'Недельный график'");
КонецЕсли;
Если КоличествоРабочихДней = 0 Тогда
РабочиеДниТекст = "";
Иначе
Если РабочиеДниИдутПодряд Тогда
РабочиеДниТекст = Формат(Понедельник + (НомерДняНачалаИнтервала - 1) * 86400, "ДФ=ддд") + "-" +
Формат(Понедельник + (НомерДняОкончанияИнтервала - 1) * 86400, "ДФ=ддд");
Иначе
ПеречислениеДнейТекст = "";
Для Каждого НомерРабочегоДня Из НомераРабочихДней Цикл
ПеречислениеДнейТекст = ПеречислениеДнейТекст + ?(ПустаяСтрока(ПеречислениеДнейТекст), "", ", ") +
Формат(Понедельник + (НомерРабочегоДня - 1) * 86400, "ДФ=ддд");
КонецЦикла;
РабочиеДниТекст = ПеречислениеДнейТекст;
КонецЕсли;
КонецЕсли;
Если НомераВыходныхДней.Количество() = 0 Тогда
ВыходныеДниТекст = НСтр("ru = 'без выходных'");
Иначе
ПеречислениеДнейТекст = "";
Для Каждого НомерВыходногоДня Из НомераВыходныхДней Цикл
ПеречислениеДнейТекст = ПеречислениеДнейТекст + ?(ПустаяСтрока(ПеречислениеДнейТекст), "", ", ") +
Формат(Понедельник + (НомерВыходногоДня - 1) * 86400, "ДФ=ддд");
КонецЦикла;
ВыходныеДниТекст = ПеречислениеДнейТекст;
КонецЕсли;
Иначе
ВидГрафикаСтрока = НСтр("ru = 'Скользящий график'");
КонецЕсли;
СтрокаНастройкиЗаполнения = НСтр("ru = '%1, раб. дни: %2, выходн. дни: %3
|%4. Длительность рабочей недели: %5 чс.'");
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаНастройкиЗаполнения,
ВидГрафикаСтрока,
РабочиеДниТекст,
ВыходныеДниТекст,
РабочееВремяТекст,
ОписаниеГрафикаРаботы.ДлительностьРабочейНедели);
КонецФункции
Функция СреднемесячныеНормыВремениПоУмолчанию(ГрафикРаботыСотрудников) Экспорт
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("Год", 1);
СтруктураЗаписи.Вставить("ГрафикРаботыСотрудников", ГрафикРаботыСотрудников);
СтруктураЗаписи.Вставить("СреднемесячноеЧислоЧасов", 0);
СтруктураЗаписи.Вставить("СреднемесячноеЧислоДней", 0);
СтруктураЗаписи.Вставить("УстановленыВРучную", Ложь);
Возврат СтруктураЗаписи;
КонецФункции
Функция СреднемесячныеНормыВремени(ГрафикРаботыСотрудников, ДатаЗначений) Экспорт
СтруктураЗаписи = СреднемесячныеНормыВремениПоУмолчанию(ГрафикРаботыСотрудников);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СреднемесячныеНормыВремениГрафиковРаботыСотрудников.Год,
| СреднемесячныеНормыВремениГрафиковРаботыСотрудников.ГрафикРаботыСотрудников,
| СреднемесячныеНормыВремениГрафиковРаботыСотрудников.СреднемесячноеЧислоЧасов,
| СреднемесячныеНормыВремениГрафиковРаботыСотрудников.СреднемесячноеЧислоДней,
| СреднемесячныеНормыВремениГрафиковРаботыСотрудников.УстановленыВРучную
|ИЗ
| РегистрСведений.СреднемесячныеНормыВремениГрафиковРаботыСотрудников КАК СреднемесячныеНормыВремениГрафиковРаботыСотрудников
|ГДЕ
| СреднемесячныеНормыВремениГрафиковРаботыСотрудников.Год = &Год
| И СреднемесячныеНормыВремениГрафиковРаботыСотрудников.ГрафикРаботыСотрудников = &ГрафикРаботыСотрудников";
Запрос.УстановитьПараметр("ГрафикРаботыСотрудников", ГрафикРаботыСотрудников);
Запрос.УстановитьПараметр("Год", Год(ДатаЗначений));
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(СтруктураЗаписи, Выборка);
КонецЕсли;
Возврат СтруктураЗаписи;
КонецФункции
Процедура УстановитьПризнакУчитыватьНерабочиеДни(ПараметрыОбновления = Неопределено) Экспорт
Если Не УчетРабочегоВремениРасширенный.ВыделятьНерабочиеДниОтдельнымВидомВремени() Тогда
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Истина);
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ГрафикиРаботыСотрудников.Ссылка КАК Ссылка
|ИЗ
| Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
|ГДЕ
| ГрафикиРаботыСотрудников.УчитыватьНерабочиеДни";
Если Не Запрос.Выполнить().Пустой() Тогда
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Истина);
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГрафикиРаботыСотрудников.Ссылка КАК Ссылка
|ИЗ
| Справочник.ГрафикиРаботыСотрудников КАК ГрафикиРаботыСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АвтоматическиОбновляемыеГрафикиРаботыСотрудников КАК АвтоматическиОбновляемыеГрафикиРаботыСотрудников
| ПО (АвтоматическиОбновляемыеГрафикиРаботыСотрудников.ГрафикРаботы = ГрафикиРаботыСотрудников.Ссылка)
| И (АвтоматическиОбновляемыеГрафикиРаботыСотрудников.Год = &Год)
|ГДЕ
| НЕ ГрафикиРаботыСотрудников.УчитыватьНерабочиеДни";
Запрос.УстановитьПараметр("Год", 2020);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Истина);
Возврат;
Иначе
ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.УстановитьПараметрОбновления(ПараметрыОбновления, "ОбработкаЗавершена", Ложь);
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ГрафикОбъект = Выборка.Ссылка.ПолучитьОбъект();
ГрафикОбъект.УчитыватьНерабочиеДни = Истина;
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ГрафикОбъект);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецЕсли