Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вычисления с датами ????
 
 автор: M.B.   (14.06.2007 в 10:54)   личное сообщение
 
 

А 2007
Уважаемые эксперты!
Тупиковая ситуация. Помогите пож. добрым советом реализовать следующую задачу (просто уверен что пригодится многим):
Имеется таблица тАбонплата с полями: [ТекущийТариф] без пустых значений,
[ДатаИзменения] и [НовыйТариф] могут содержать Null.

Как создать запрос с четвёртым (вычисляемым) полем [АбонплатаЗаМесяц].

Алгоритм должен быть таким:
если тариф не менялся([ДатаИзменения] Is Not Null) то [АбонплатаЗаМесяц] = [ТекущийТариф],
а если менялся (начинается самое интересное) то (ТекущийТариф / на кол-во дней в месяце взятого из ДатаИзменения и * на кол-во дней от первого числа месяца до ДатаИзменения) + (ТекущийТариф / на кол-во дней в месяце взятого из ДатаИзменения и * на кол-во дней от ДатаИзменения до последнего числа месяца).

Например если [ДатаИзменения]=#10.05.2007#, а [ТекущийТариф]=60, [НовыйТариф]=80 :
(60/31*9)+(80/31*22)=74,19.
Как энту халеру реализовать на практике не могу представить.

P.S.
В VBA и SQL слабоват.

  Ответить  
 
 автор: osmor   (14.06.2007 в 11:48)   личное сообщение
 
 

киньте сюда табличку с небольшим кол-вом данных

  Ответить  
 
 автор: M.B.   (14.06.2007 в 12:50)   личное сообщение
7 Кб.
 
 

Прошу прощения у меня А 2003

Скинул пример таблицы

  Ответить  
 
 автор: osmor   (14.06.2007 в 13:43)   личное сообщение
 
 

Ну как-то вот так.
Правда в ВАшей таблице при наличии даты нет знаечния нового тарифа... я добавил ил нужно добавить проверку иначе получите фигню

SELECT N, [Наименование тарифа], IIf(IsNull([Дата]),[Текущий],(([Текущий]/Day(DateSerial(Year([Дата]),Month([Дата])+1,1)-1))*(Day([Дата])-1))+(([Новый]/Day(DateSerial(Year([Дата]),Month([Дата])+1,1)-1))*(Day(DateSerial(Year([Дата]),Month([Дата])+1,1)-1)-Day([Дата])))) AS NewTariff
FROM тАбонплата;

  Ответить  
 
 автор: osmor   (14.06.2007 в 13:53)   личное сообщение
8 Кб.
 
 

ну или вот

  Ответить  
 
 автор: M.B.   (14.06.2007 в 14:38)   личное сообщение
 
 

Проверил.
Что-то не катит, подбил на калькуляторе первый изменённый тариф, должно быть 4244. а не 4077.
Где может быть промах ?

  Ответить  
 
 автор: osmor   (14.06.2007 в 15:47)   личное сообщение
 
 

Ошибку нашел

SELECT тАбонплата.N, тАбонплата.[Наименование тарифа], IIf(IsNull([Дата]),[Текущий],(([Текущий]/Day(DateSerial(Year([Дата]),Month([Дата])+1,1)-1))*(Day([Дата])-1))+(([Новый]/Day(DateSerial(Year([Дата]),Month([Дата])+1,1)-1))*(Day(DateSerial(Year([Дата]),Month([Дата])+1,1)-1)-Day([Дата])+1))) AS newTariff
FROM тАбонплата;

  Ответить  
 
 автор: M.B.   (14.06.2007 в 16:42)   личное сообщение
 
 

Ууууурррррааааа заааработала!!!!
Огромное спасибо!

  Ответить  
 
 автор: M.B.   (10.07.2007 в 21:41)   личное сообщение
15 Кб.
 
 

Вот блин незадача .
Только с этим разобрался и пошел дальше, как абонотдел дал под дых.....кхе,кхе.
(Раньше они это считали вручную)
В продолжении этой темы появились новые вопросы.
Сложность реализации заключается в следующем:
Есть таблица Абоненты с полями ДатаУстановки, ДатаОткл, ДатаВкл, Абонплата.
Как начислить абонплату за прошлый месяц [color=red](с учетом возможности изменения тарифа)[/color] в поле Абонплата предусмотрев любые варианты, например:
1. ДатаУстановки раньше прошлого месяца, (проблем нет, считаем за весь месяц)
2. ДатаУстановки в прошлом месяце без изменения тарифа
3. ДатаУстановки в прошлом месяце до изменения тарифа
4. ДатаУстановки после изм.тар.
5. ДатаОткл и ДатаВкл без изменения тар.
6. ДатаОткл до изм.тар. ДатаВкл после
7. ДатаОткл и ДатаВкл до изм.тар.
8. ----- / ------ / ------ / ----- после изм.тар.
9. ДатаОткл до или после изм.тар. без ДатаВкл в прошлом месяце или наоборот
Ну и т.д.
Причем в промежутке между ДатаОткл и ДатаВкл абонплата неначисляется, так же неначисляется и до ДатаУстановки

Ну и как Вам эта головоломка? Лично у меня уже чайник закипел....

Молю о помощи, взываю к .......

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList