![]() |
|
УПП. Как получить рабочие дни из двух дат? | ☑ | ||
---|---|---|---|---|
0
мистер игрек
18.06.09
✎
08:38
|
Есть ли штатные средства УПП для получения рабочие дни из ДатаНач и ДатаКон ?
|
|||
1
Ненавижу 1С
гуру
18.06.09
✎
08:41
|
Да
|
|||
2
Ненавижу 1С
гуру
18.06.09
✎
08:42
|
Хотя твоей фразы я не совсем понял ))
|
|||
3
мистер игрек
18.06.09
✎
08:42
|
(1) Я имею ввиду готовые функции в общих модулях
|
|||
4
quazare
18.06.09
✎
08:42
|
Процедура РазобратьРазностьДат(ДатаОкончания, ДатаНачала, Лет, Месяцев, Дней) Экспорт
Если Дата1 > Дата2 Тогда ВременнаяДата = Дата1; Если День(ВременнаяДата) < День(Дата2) Тогда Дней = (ВременнаяДата - ДобавитьМесяц(ВременнаяДата,-1))/86400; ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1); КонецЕсли; Если Месяц(ВременнаяДата) < Месяц(Дата2) Тогда ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12); Месяцев = 12; КонецЕсли; Лет = Макс( Год(ВременнаяДата) - Год(Дата2), 0); Месяцев = Макс(Месяцев + Месяц(ВременнаяДата) - Месяц(Дата2), 0); Дней = Макс(Дней + День(ВременнаяДата) - День(Дата2), 0); Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) Тогда Дней = Дней + (День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1)))); КонецЕсли; КонецЕсли; КонецПроцедуры вот с этим поиграйся |
|||
5
Ненавижу 1С
гуру
18.06.09
✎
08:44
|
покури
ЗаполнениеДокументов.ЧислоРабочихДней(ДатаНач, ДатаКон) |
|||
6
kn
18.06.09
✎
08:44
|
а какие по календарю или по графику работы?
|
|||
7
мистер игрек
18.06.09
✎
08:44
|
(4) Не тот, мне нужны именно рабочие дни производственного календаря
|
|||
8
мистер игрек
18.06.09
✎
08:46
|
(5) Скинешь? У меня нету такой функции :(
|
|||
9
Ненавижу 1С
гуру
18.06.09
✎
08:46
|
+(5) там как раз берет данные из РегистрСведений.РегламентированныйПроизводственныйКалендарь
|
|||
10
Ненавижу 1С
гуру
18.06.09
✎
08:47
|
(8) а ты где ищешь эту функцию?
|
|||
11
мистер игрек
18.06.09
✎
08:48
|
(10) Общий модуль "Заполнение документов"
|
|||
12
Ненавижу 1С
гуру
18.06.09
✎
08:48
|
(11) странно, ну лови:
// Функция возвращает число рабочих дней между заданными датами по регламентированному производственному календарю // //Параметры: // ДатаНач - начальная дата // ДатаКон - конечная дата // Функция ЧислоРабочихДней(ДатаНач, ДатаКон) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНач", ДатаНач); Запрос.УстановитьПараметр("ДатаКон", ДатаКон); Запрос.УстановитьПараметр("РабочийДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий); Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); Запрос.Текст = " |ВЫБРАТЬ | ЕстьNull(СУММА(ВЫБОР | КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень | ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ),0) КАК ЧислоРабочихДней |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь |ГДЕ | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон | //РегламентированныйПроизводственныйКалендарь.Год = &Год"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.ЧислоРабочихДней; КонецЕсли; Возврат 0; КонецФункции // Функция возвращает дату отстоящую на заданное количество рабочих дней от начальной в соответствии с //регламентированным производственным календарем // //Параметры: // ДатаНач - начальная дата // ЧислоДней - количество рабочих дней, на которое искомая дата должна отстоять от начальной // Функция ОпределитьДату(ДатаНач, ЧислоДней) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаНач", ДатаНач); Запрос.УстановитьПараметр("ЧислоДней", ЧислоДней); Запрос.УстановитьПараметр("РабочийДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий); Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); Если ЧислоДней > 0 Тогда Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + ЧислоДней + " | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь |ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря > &ДатаНач | И (РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень | ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень) |"; Иначе ЧислоДней = -ЧислоДней; Запрос.Текст = " |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ " + ЧислоДней + " | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря |ИЗ | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь |ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря < &ДатаНач | И (РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень | ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень) |УПОРЯДОЧИТЬ ПО | ДатаКалендаря УБЫВ |"; КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Количество() = ЧислоДней Тогда Пока Выборка.Следующий() Цикл ТекДата = Выборка.ДатаКалендаря; КонецЦикла; Возврат ТекДата; КонецЕсли; Возврат Неопределено; КонецФункции |
|||
13
мистер игрек
18.06.09
✎
08:52
|
(12) спасибо
|
|||
14
Stagor
18.06.09
✎
09:44
|
круто!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |