Работа с производственным календарем
☑
0
shock3r
27.12.12
✎
11:46
Добрый день, в отчет требуется реализовать надпись С x по y, где x=датадок, y = датадок + 3 (исключая выходные и праздники)...
Подскажите как функцию, которая возвращает является ли дата - выходным по производственному календарю
1
Дядя Вова
27.12.12
✎
11:52
// Функция возвращает дату отстоящую на заданное количество рабочих дней от начальной в соответствии с
//регламентированным производственным календарем
//
//Параметры:
// ДатаНач - начальная дата
// ЧислоДней - количество рабочих дней, на которое искомая дата должна отстоять от начальной
//
Функция ОпределитьДату(ДатаНач, ЧислоДней) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
Запрос.УстановитьПараметр("ЧислоДней", ЧислоДней);
Запрос.УстановитьПараметр("РабочийДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
Если ЧислоДней > 0 Тогда
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + ЧислоДней + "
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря > &ДатаНач
| И (РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
| ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень)
|";
Иначе
ЧислоДней = -ЧислоДней;
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + ЧислоДней + "
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря < &ДатаНач
| И (РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
| ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень)
|УПОРЯДОЧИТЬ ПО
| ДатаКалендаря УБЫВ
|";
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() = ЧислоДней Тогда
Пока Выборка.Следующий() Цикл
ТекДата = Выборка.ДатаКалендаря;
КонецЦикла;
Возврат ТекДата;
КонецЕсли;
Возврат Неопределено;
КонецФункции
2
shock3r
27.12.12
✎
12:05
(1) Спасибо Дядя Вова))
3
shock3r
27.12.12
✎
17:39
Если Выборка.Количество() > 0 Тогда
Пока Выборка.Следующий() Цикл
ТекДата = Выборка.ДатаКалендаря;
КонецЦикла;
Возврат ТекДата;
КонецЕсли;
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший