Имя: Пароль:
1C
1С v8
Работа с производственным календарем
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 Тогда
       Пока Выборка.Следующий() Цикл
           ТекДата = Выборка.ДатаКалендаря;
       КонецЦикла;
       Возврат ТекДата;
   КонецЕсли;
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой