Количество рабочих дней между двумя датами #564796


#0 by swallow05
Доброй ночи всем. Возникла необходимость отсчитать от определенной даты назад 5 рабочих дней, т.е. с учетом праздников и выходных. Добавила в конфигурацию производственный календарь (конфа бухгалтерия 1.6), но чую им не получится это сделать. Никто не подскажет, каким образом можно реализовать такой подсчет? Т.е. если у нас 11 января, то 5 рабочих дней будет 26 декабря. Спасибо за ответы :).
#1 by vde69
делал через производственный календарь, делается не сложно но работает медлено. потом оптимизировал, сделал кеш таблицу и ее использовал, экономия примерно 4-5 секунд на запросе
#2 by МимохожийОднако
Поищи в общих модулях. Наверняка уже есть готовое в конфигурации.
#3 by swallow05
Я сейчас просто выборку делаю из производственного календаря первый 5 дней, по условию рабочих, которые меньше данной даты, вроде получилось, всем спасибо. Вопрос закрыт :)
#4 by CepeLLlka
о_О
#5 by swallow05
Изменила профиль))) при регистрации видимо немного промахнулась)))
#6 by Steel_Wheel
ник просто ппц
#7 by Sammo
Вообще-то задача в теме (рабочих дней между датами) и в сообщении (нужно отнять 5 дней от даты) несколько разные. Делаются разными запросами по производственному календарю
#8 by skunk
и в чем разница?
#9 by kosts
Это что за запрос такой по которому только экономия 4-5 секунд... Нужно учесть предпразднечные дни, они ведь тоже рабочие. По крайней мере в ЗУПе есть предпразднечные.
#10 by МимохожийОднако
УТ11. Общий модуль.Календарные графики. // Функция определяет количество дней, входящих в календарь, для указанного периода
#11 by vde69
вот это приведение долго работает...
#12 by vde69
кстати разность дат в SQL работает на порядок медленее чем разность чисел, по этому я и привожу весь календарь к числу дней от самого первого дня, ну а потом просто получаю ю два числа и результатом является простая разница целых чисел
#13 by Fragster
о_О занафига само с собой соединять? ГДЕ    ПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &Дата1 И &Дата2
#14 by vde69
по тому как я получаю таблицу для каждой даты, в том числе и для выходных. для единичного запроса годится, для запроса где нужно посчитать 100 000 периодов годится
#15 by Fragster
считай разность дат в секундах, потом дели на 86400
#16 by Axel2009
100 000 периодов - 273 года.
#17 by Axel2009
пруфлинк?
#18 by vde69
пример - определение просрочки в супермаркете, по остаткам партий товаров. Или расчет количества банковских дней просрочки по договору (от момента платежа) замерял
#19 by Axel2009
где?
#20 by vde69
в SQL
#21 by dmpl
Когда будет 100 тыс. периодов - сервак просто упадет по нехватке памяти. Левое соединение с условием, отличным от = завалит. Для того, чтобы завалить сервер хватит и 30-40 тыс. записей.
#22 by Axel2009
да я знаю где это применяется. определяю среднюю просрочку (суммарная просрочка на каждый день месяца, и средняя из этого) по каждому клиенту за весь месяц по всем просроченным долгам на 5 рабочих дней. весь запрос 3 секунды
#23 by Axel2009
как проверялось? в цикле или в запросе?
#24 by Axel2009
set nocount on declare table(i int, d datetime) declare int, @d datetime, @d2 datetime, 2 int set = 0 while < 10000 begin set = + 1 insert into values(, dateadd(dd, , '19500101')) end set = 0 set @d = getdate while < 10000 begin set = + 1 select @d2 = datediff(dd, d, getdate) from end print 'разница по дате ' + str(datediff(ss, @d, getdate)) set = 0 set @d = getdate while < 10000 begin set = + 1 select 2 = 11000 - i from end print 'разница по числу ' + str(datediff(ss, @d, getdate)) разница по дате         15 разница по числу         14 где порядки?
#25 by ptiz
Это в рабочих днях?
#26 by Axel2009
это разность дат, которая "работает на порядок медленнее"
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С