// Процедура выполняет действие:
// Расчитать График Работ На Год
//
// Параметры:
// График - Произвольный
// ДатаНачала - Произвольный
// ДополненияГрафикаРаботы - Произвольный
//
// Возвращаемое значение:
// Произвольный
Функция РасчитатьГрафикРаботНаГод(График, ДатаНачала, ДополненияГрафикаРаботы) Экспорт
Если График <> Null И График.ВидГрафика = Перечисления.ВидыРабочихГрафиков.ВСмену тогда
ДатаНачалаОтсчета = НачалоДня(ДатаНачала);
ДатаОтсчета = График.ДатаОтсчета;
Если ДатаОтсчета>ДатаНачалаОтсчета тогда
ДатаНачалаОтсчета = ДатаОтсчета;
КонецЕсли;
КоличествоДней = (ДатаНачалаОтсчета + 86400 - ДатаОтсчета)/86400;
КоличесвтоСтрок = График.РаботаПоСменам.Количество();
КоличествоДнейВСмене = График.РаботаПоСменам[КоличесвтоСтрок - 1].НомерДня;
Если КоличествоДней = 0 тогда
ТекущийДеньИТ_Смены = 1;
Иначе
ТекущийДеньИТ_Смены = КоличествоДней%КоличествоДнейВСмене;
Если ТекущийДеньИТ_Смены = 0 Тогда
ТекущийДеньИТ_Смены = КоличествоДнейВСмене;
КонецЕсли;
КонецЕсли;
ОднаСмена = Новый ТаблицаЗначений;
ОднаСмена.Колонки.Добавить("ДеньИТ_Смены");
ОднаСмена.Колонки.Добавить("НачалоРаботы");
ОднаСмена.Колонки.Добавить("КонецРаботы");
ОднаСмена.Колонки.Добавить("Выходной");
Для Каждого Смена Из График.РаботаПоСменам Цикл
ДеньИТ_Смены = Смена.НомерДня;
РазборИТ_Смены(Смена.Смена, ОднаСмена, ДеньИТ_Смены);
КонецЦикла;
Таблица = ПосменныйГрафик(ОднаСмена, ТекущийДеньИТ_Смены, ДатаНачалаОтсчета, ДополненияГрафикаРаботы);
Иначе
Если График <> Null И График.ВидГрафика = Перечисления.ВидыРабочихГрафиков.ПоДнямНедели тогда
Неделя = График.РабочиеДниЧасы;
// РабочийДень = Новый Структура;
РабочаяНеделя = Новый ТаблицаЗначений;
РабочаяНеделя.Колонки.Добавить("ДеньНедели");
РабочаяНеделя.Колонки.Добавить("НачалоРаботы");
РабочаяНеделя.Колонки.Добавить("КонецРаботы");
Для каждого ДеньНедели Из Неделя Цикл
Если ДеньНедели.РабочийДень тогда
Если ДеньНедели.Обед тогда
РабочийДень = РабочаяНеделя.Добавить();
РабочийДень.ДеньНедели = ДеньНедели.ДеньНедели;
РабочийДень.НачалоРаботы = ДеньНедели.НачалоРаботы;
РабочийДень.КонецРаботы = ДеньНедели.НачалоОбеда;
РабочийДень = РабочаяНеделя.Добавить();
РабочийДень.ДеньНедели = ДеньНедели.ДеньНедели;
РабочийДень.НачалоРаботы = ДеньНедели.КонецОбеда;
РабочийДень.КонецРаботы = ДеньНедели.КонецРаботы;
Иначе
РабочийДень = РабочаяНеделя.Добавить();
РабочийДень.ДеньНедели = ДеньНедели.ДеньНедели;
РабочийДень.НачалоРаботы = ДеньНедели.НачалоРаботы;
РабочийДень.КонецРаботы = ДеньНедели.КонецРаботы;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Таблица = ПоНедельныйГрафик(РабочаяНеделя, График.Календарь, ДатаНачала, ДополненияГрафикаРаботы);
КонецЕсли;
КонецЕсли;
Возврат Таблица;
КонецФункции