Страницы: 1
RSS
Разница между "дата/время" без учета определнного интервала
 
Доброго времени суток!  
Второй день не могу решить "банальную" задачку, и решил обратиться к спецам за помощью.  
Условия:График работы компании 24-часа за исключением выходного интервала с субооты 9-00 по воскресенье 21-00. Если дата окончания выпадает на выходной- это была переработка, расчет по фактической разнице. Не хотелось бы создавать базу данных выходного интервала за месяц/год.  
Решение:Необходимо расчитать разницу между данными в формате "дата/время" без учета выходного интервала. Итог вывести в формате [ч]:мм.
Пример:Разница между данными 14.08.09 16:00 и 17.08.09 12:00 должна быть 32:00, а не 68:00.  
Прикрепляю пример для расчета с данными и что необходимо получить после расчета.
 
Полный вынос мозга :)
 
{quote}{login=}{date=04.08.2009 08:34}{thema=}{post}Полный вынос мозга :){/post}{/quote}+1  
Особенно 3, 4 и 5-я строки. Время окончания одинаковое, но если начали 15-го, в субботу в 9-00 или в 12-00, то за это 18 часов. А если в 8-00, то 19.  
Люди еще не бастуют за такой учет времени?
Bite my shiny metal ass!      
 
Так, всё, я завязываю с этим возиться :) мозг умер. Надо срочно идти пить кофе.  
В файле расчёт, в I надбавки за полные недели, в M за "неполную".  
Всё сделано, кроме столбца L. В столбце L не хватает "второго если" по аналогии со столбцом K и, возможно, в этом же столбце L возможно неправильно задано условие первого аргумента первого если.
 
{quote}{login=Лузер™}{date=04.08.2009 09:49}{thema=Re: }{post}{quote}{login=}{date=04.08.2009 08:34}{thema=}{post}Полный вынос мозга :){/post}{/quote}+1  
Особенно 3, 4 и 5-я строки. Время окончания одинаковое, но если начали 15-го, в субботу в 9-00 или в 12-00, то за это 18 часов. А если в 8-00, то 19.  
Люди еще не бастуют за такой учет времени?{/post}{/quote}  
 
Парни, большое спасибо что ответили!!! Сейчас посмотрю файл- а пока отвечу на коммент по "бастовке"- народ работает в четыре смены, а расчет необходим для показателей простоя. Я за два дня весь недельный запас кофе выпил тз-за этой задачи!
 
Если в 4-е смены, то время начала и конца не четко определено? Обычно смены бывают 8, 12 и 24 часа. И бывают с 8 до 8 или с 8 до 16, с 16 до 24, с 24 до 8.  
И какая тогда переработка в выходные? Обычно переработка считается по итогам месяца/квартала. К примеру, персонал работающий с 9 до 6 по раб дням в месяц должен был отработать 176 часов, а тот кто ходил в смену отработал 192 часа. Вот 16 часов переработки и набежало.
Bite my shiny metal ass!      
 
{quote}{login=Лузер™}{date=04.08.2009 11:50}{thema=}{post}Если в 4-е смены, то время начала и конца не четко определено? Обычно смены бывают 8, 12 и 24 часа. И бывают с 8 до 8 или с 8 до 16, с 16 до 24, с 24 до 8.  
И какая тогда переработка в выходные? Обычно переработка считается по итогам месяца/квартала. К примеру, персонал работающий с 9 до 6 по раб дням в месяц должен был отработать 176 часов, а тот кто ходил в смену отработал 192 часа. Вот 16 часов переработки и набежало.{/post}{/quote}  
 
Поясняю- начало рабочей недели в воскресенье с 21-00 и заканчивается в субботу в 9-00. Смена по 12 часов. Это то что входит в стоимость работ для Клиента. Если работа в выходной интервал- это отдельные деньги. По определению что не выходит за рамки стоимости работ- это переработка (в том контексте что я указал). Эта схема сократила затраты клиенту.
 
Вынос мозга продолжается.  
Про переработку понял - относительно клиента учет, но непонятно сколько.  
Если начало в пятницу, а конец в среду, была переработка в выходные?  
И еще раз про 3, 4, 5 строки: почему так?
Bite my shiny metal ass!      
 
Напомнило: "И минула ночь с понедельника на среду..."
 
{quote}{login=Лузер™}{date=05.08.2009 12:22}{thema=}{post}Вынос мозга продолжается.  
Про переработку понял - относительно клиента учет, но непонятно сколько.  
Если начало в пятницу, а конец в среду, была переработка в выходные?  
И еще раз про 3, 4, 5 строки: почему так?{/post}{/quote}  
 
Как я понял необходимо более подробней объяснить обстоятельства задачи- "дата/время начала" это время прибытия машины в магазин, "дата/время окончания" это убытие машины из магазина. Так вот 3 строка- машина прибыла в субботу (15.08.09) в 9-00, когда персонал ушел со смены, значит выгружать машину будут только в воскресенье (16.08.09) с 21-00 часа. Убыла машина 17.08.09 в 15-00, получается что время нахождения машины когда ее могли разгрузить- с 16.08.09 21-00 до 17.08.09 15-00 что составляет 18 часов. 4 строка расчитывается по такому же принципу. 5 строка "захватывает" 1 час рабочего времени в субботу, поэтому в итоге 19 часов. А во 2 строке получается "переработка", потому что машина убыла в субботу, значит персонал оставался разгружать.
 
Вот.  
Можно сказать, что доделал.  
Если быть точнее, там столбец L расчитан криво, но я в нынешнем состоянии вижу лишь два возможных бага, проверка которых производится далее в столбце M.  
 
Основная идея в чём:  
Вначале мы расчитываем в столбце I переработки за "целые недели".  
Потом, во всех остальных столбцах, мы пытаемся расчитать переботку за оставшууся одну неделю, где я начал сильно мудрить и всё делать не так как нужно, т к у меня почему то нормально не округлилось. В чём ошибся-не знаю.  
 
В J мы прибавляем целые, уже расчитанные, недели к начальной дате, т е получаем начало оставшейся недели.  
В K мы округляем это значение до начала "выходного времени" или, если оно превышает конечную дату, до конечной даты.  
В L я хотел окрулгить конечную дату до конца "выходного времени", но не получилось. А в кривой формуле есть 2 случая некорректных расчётов. Судя по всему, тут всего может быть только два случая, в связи с чем вместо исправления формулы я лишь сделал проверку на наличие оных.  
 
Вроде бы, считает правильно. Во второй строке ручных расчётов у вас ошибка-должно было получиться 22 часа, а не 33.  
 
PS: А вообще, у меня ощущение, что со мной сегодня что то не то. Давненько у меня не получалось таких больших формул. Скорее всего, всё намного проще и надо лишь подождать человека, который более или менее в адеквате в данный момент.
 
{quote}{login=}{date=05.08.2009 01:21}{thema=}{post}Вот.  
Можно сказать, что доделал.  
Если быть точнее, там столбец L расчитан криво, но я в нынешнем состоянии вижу лишь два возможных бага, проверка которых производится далее в столбце M.  
 
Основная идея в чём:  
Вначале мы расчитываем в столбце I переработки за "целые недели".  
Потом, во всех остальных столбцах, мы пытаемся расчитать переботку за оставшууся одну неделю, где я начал сильно мудрить и всё делать не так как нужно, т к у меня почему то нормально не округлилось. В чём ошибся-не знаю.  
 
В J мы прибавляем целые, уже расчитанные, недели к начальной дате, т е получаем начало оставшейся недели.  
В K мы округляем это значение до начала "выходного времени" или, если оно превышает конечную дату, до конечной даты.  
В L я хотел окрулгить конечную дату до конца "выходного времени", но не получилось. А в кривой формуле есть 2 случая некорректных расчётов. Судя по всему, тут всего может быть только два случая, в связи с чем вместо исправления формулы я лишь сделал проверку на наличие оных.  
 
Вроде бы, считает правильно. Во второй строке ручных расчётов у вас ошибка-должно было получиться 22 часа, а не 33.  
 
PS: А вообще, у меня ощущение, что со мной сегодня что то не то. Давненько у меня не получалось таких больших формул. Скорее всего, всё намного проще и надо лишь подождать человека, который более или менее в адеквате в данный момент.{/post}{/quote}  
 
Большое тебе человеческое спасибо, добрый человек!  
Я в течение 2 дней пытался найти "простое решение", но засада была в том что "захватываются" суббота и воскресенье как рабочий пероиод. Ранее я производил расчет с вычетом выходных и праздников по функции РАБДЕНЬ, но в данном случае она не срабатывает!  
Еще раз спасибо тебе за помощь и всем кто был неравнодушен к этой "простой" задаче!
 
Ну слава Богу! Я думал, я один заметил проблему во второй строке. Ну раз пошла такая пьянка, то вот мой вариант слегка покороче, а главное считает почти вполовину быстрее.
KL
 
Подчистил пару багов :-)
KL
 
{quote}{login=KL}{date=05.08.2009 04:15}{thema=}{post}Подчистил пару багов :-){/post}{/quote}  
 
Парни! ВЫ ЛУЧШИЕ!!!!!    
СПАСИБО за помощь!!!!  
 
 
P.S. Во второй строке нет ошибки- как я выше указывал про "переработку", расчет такой: машина прибыла 14.08.09 в 11-00, ее начали разгружать и делали это до 15.08.09 до 20-00, т.е. люди работали в выходной период. Получается с 14.08.09 с 11-00 до 15.08.09 9-00 (22часа)+ 11 часов "переработки"= 33 часа. Но это только в случаях, когда дата/время окончания попадает на выходной день!  
 
Но это я дополню еще одним ЕСЛИ! Еще раз премного благодарен!
Страницы: 1
Читают тему
Наверх