Отпускной период в явном виде не хранится в системе. Встал вопрос: как его узнать?
Первое, что пришло на ум просто выдернуть запрос из типового отчета "Остатки отпусков" - как оказалось, он состоит из 18 запросов и работает ну крайне медленно.
Попытки высчитать его самостоятельно по дате приема, не привело ни к чему хорошему. Тут нужно учитывать документ "ввод остатков отпусков" плюс смещение периода при декретном отпуске у женщин.
Решил отбросить костыли и воспользоватся типовыми функциями подсистемы "Остатки отпусков"
Была написана короткая функция которая возвращала остатки отпусков по основному отпуску и желанный отпускной период.
Функция ПолучитьРабочийГод (Сотрудник)
СтруктураПараметров = ОстаткиОтпусков.ПараметрыПолученияРабочегоПериодаОтпуска();
СтруктураПараметров.Сотрудник = Сотрудник;
СтруктураПараметров.ВидОтпуска =Справочники.ВидыОтпусков.НайтиПоНаименованию("Основной");
СтруктураПараметров.ДатаНачала = Объект.Дата;
СтруктураПараметров.ДатаОкончания = Объект.Дата;
СтруктураПараметров.ДатаКомпенсации = Объект.Дата;
СтруктураПараметров.КоличествоДнейКомпенсации = 0;
ПериодОсновногоОтпуска = ОстаткиОтпусков.РабочийПериодОтпуска(СтруктураПараметров);
НачалоПериода = ПериодОсновногоОтпуска.РабочийГодС;
КонецПериода = ПериодОсновногоОтпуска.РабочийГодПо;
ДанныеРабочийгод = Строка(Формат(НачалоПериода,"ДФ=dd.MM.yy")) + " - " + Строка(Формат(КонецПериода,"ДФ=dd.MM.yy"));
Возврат ДанныеРабочийгод;
КонецФункции
1. Получаем структуру.
2. Заполняем
3. Отправляем структуру в ОстаткиОтпусков.РабочийПериодОтпуска()
4. Складываю две даты с форматом в одну строковую переменную (вы можете иначе использовать)
5. Возврат
Работает функция достаточно быстро, данные достоверные. По этой причине дальше не стал ничего придумывать.
Буду рад адекватной критике.