Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите решить один вопрос с датой ...

18K
05 августа 2006 года
kabak
10 / / 05.08.2006
Добрый день, я только учусь , так что за пустяцкий вопрос сильно не линчуйте :)

Смысл вопроса в следующем..

Разрабатываю простенькую систему учета зала интернет-кафе в Акцессе 2003...
Итак, имеется начальное время работы клиента и конечное..

Задача: нужно из конечного времени вычесть начальное, получить время работы и умножить его на тариф...

Всем ответившим огромное спасибо ...
282
05 августа 2006 года
Bard
481 / / 26.02.2006
Код:
[COLOR="Blue"]Private[/COLOR] StartTime [COLOR="Blue"]as String[/COLOR] [COLOR="Green"]'время начала работы[/COLOR]
[COLOR="Blue"]Private[/COLOR] EndTime [COLOR="Blue"]as String[/COLOR] [COLOR="Green"]'время окончания работы[/COLOR]

[COLOR="Blue"]Sub[/COLOR] Начало_Работы() [COLOR="Green"]'вызиваеться по началу работы[/COLOR]
    StartTime = Time
[COLOR="Blue"]End Sub[/COLOR]

[COLOR="Blue"]Sub[/COLOR] Окончане_Работы() [COLOR="Green"]'вызиваеться по окончанию работы[/COLOR]

    endHour = Mid(Time, 1, 1) & Mid(Time, 2, 1)
    endMinute = Mid(Time, 4, 1) & Mid(Time, 5, 1)
    endSecond = Mid(Time, 7, 1) & Mid(Time, 8, 1)

    startHour = Mid(StartTime, 1, 1) & Mid(StartTime, 2, 1)
    startMinute = Mid(StartTime, 4, 1) & Mid(StartTime, 5, 1)
    startSecond = Mid(StartTime, 7, 1) & Mid(StartTime, 8, 1)

    xHour = endHour - startHour
   
    [COLOR="Blue"]If[/COLOR] endMinute < startMinute [COLOR="Blue"]Then Goto[/COLOR] 3
    xMinute = endMinute - startMinute
3
    [COLOR="Blue"]If[/COLOR] endSecond < startSecond [COLOR="Blue"]Then Goto[/COLOR] 4
    xSecond = endSecond - startSecond
4

    [COLOR="Green"]'короче до секунды я думаю выщитывать не будем.
    'такая точность не к чему.[/COLOR]

    EndTime = xHour & ":" & xMinute & ":" & xSecond

    MsgBox "Рабочий проработал сегодня " & EndTime & " и ему за ето полагаеться " & xHour * 100 & "$"

[COLOR="Blue"]End Sub[/COLOR]
18K
06 августа 2006 года
kabak
10 / / 05.08.2006
большое человеческое спасибо :)

xHour = endHour - startHour

в этой строке эррорит , говорит не соответствие типов... :confused:
282
06 августа 2006 года
Bard
481 / / 26.02.2006
[QUOTE=kabak]большое человеческое спасибо :)

xHour = endHour - startHour

в этой строке эррорит , говорит не соответствие типов... :confused:[/QUOTE]

Блин, я думал ты сам догадаешся, просто лень писать было...

В начале процедуры:

[FONT="Courier New"]Dim xHour As Integer
-----------------
...
-----------------
xHour = Int(endHour) - Int(startHour)[/FONT]

Вот теперь должно работать, должно, потому-что я не проверял :)
Но если вдруг я ошибся - пиши!
18K
06 августа 2006 года
kabak
10 / / 05.08.2006
догадался, если бы знал VB.... :)

Объявил переменную xHour как целочисленное..
Но снова тайп мисматч здесь: xHour = Int(endHour) - Int(startHour) :confused:

Спасай, гитаристы - добрые люди, по себе знаю :)
282
06 августа 2006 года
Bard
481 / / 26.02.2006
Ето работает!
Показывает деньги с точностью до минуты!

Код:
Private StartTime As String 'время начала работы
Private EndTime As String 'время окончания работы

Sub St() 'вызиваеться по началу работы
    StartTime = Time
End Sub

Sub En() 'вызиваеться по окончанию работы
    Dim Tm As String
   
    Tm = Time
   
    Dim xHour As String
    Dim xMinute As String
    Dim xSecond As String
   
    Dim EndMinute As Double

    endHour = Mid(Tm, 1, 1) & Mid(Tm, 2, 1)
    EndMinute = Mid(Tm, 4, 1) & Mid(Tm, 5, 1)
    endSecond = Mid(Tm, 7, 1) & Mid(Tm, 8, 1)

    startHour = Mid(StartTime, 1, 1) & Mid(StartTime, 2, 1)
    startMinute = Mid(StartTime, 4, 1) & Mid(StartTime, 5, 1)
    startSecond = Mid(StartTime, 7, 1) & Mid(StartTime, 8, 1)

    '/// Ето самая важная часть ///
   
    If EndMinute < startMinute Then 'сколько часав трудился
    xHour = startHour
    Else
    xHour = endHour - startHour
    End If
   
    If EndMinute < startMinute Then 'сколько минут
    xMinute = startMinute
    Else
    xMinute = EndMinute - startMinute
    End If

    If endSecond < startSecond Then 'сколько секунд (по-приколу)
    xSecond = startSecond
    Else
    xSecond = endSecond - startSecond
    End If
   
    '//////////////////////////////
   
    EndMinute = (60 / 100) * xMinute 'подщитаем сколько денег в одной минуте, и умножим на количество минут :)
   
    'короче до секунды я думаю выщитывать не будем.
    'такая точность не к чему.
   
    'выравниваем по формату ##:##:##, чтобы было красиво :)
    If Int(xHour) < 10 Then xHour = "0" & xHour: MsgBox xHour
    If Int(xMinute) < 10 Then  xMinute = "0" & xMinute
    If Int(xSecond) < 10 Then  xSecond = "0" & xSecond
   
    EndTime = xHour & ":" & xMinute & ":" & xSecond
   
    d = (xHour * 100) + EndMinute 'сумма в зеленых :)))
   
    MsgBox "Рабочий проработал сегодня " & EndTime & " и ему за ето полагаеться " & d & "$"

End Sub
18K
06 августа 2006 года
kabak
10 / / 05.08.2006
огромное человеческое спасиба :)
все зааботало и весьма красиво )

Спасибо еще раз .. :p
18K
07 августа 2006 года
kabak
10 / / 05.08.2006
ув. Bard
написанный тобою код актуален для времени в промежутке от 10 часов до 24.

если например , время 8:45 ,то переменная endHour принимает значение 8:, ну и минуты и секунды также... ну и далее естественно операции с ними не выполняюцца...

Как сделать его универсальным ?

В делфе конечно можно было бы try-преобразовать в Int-except-выделить из строки по другому... А как в ВБ ?
282
07 августа 2006 года
Bard
481 / / 26.02.2006
Зачем какие-то преобразования ? Просто смотрим длину [FONT="Courier New"]Time[/FONT] и от етого исходим:

[FONT="Courier New"]Если длина <> 7 (00:00:00) Значит
' --- код обработки ---
Иначе (0:00:00)
' --- код обработки ---
Конец Оператора[/FONT]

Ведь все в наших руках!

Код:
Private StartTime As String 'время начала работы
Private EndTime As String 'время окончания работы

Sub Начало_Работы() 'вызиваеться по началу работы
    StartTime = "8:45:00"
End Sub

Sub Окончане_Работы() 'вызиваеться по окончанию работы
    Dim Tm As String
   
    Tm = Time
   
    Dim xHour As String
    Dim xMinute As String
    Dim xSecond As String
   
    Dim endMinute As Double

    If Len(Tm) <> 7 Then
        endhour = Mid(Tm, 1, 1) & Mid(Tm, 2, 1)
        endMinute = Mid(Tm, 4, 1) & Mid(Tm, 5, 1)
        endsecond = Mid(Tm, 7, 1) & Mid(Tm, 8, 1)
    Else
        endhour = Mid(Tm, 1, 1)
        endMinute = Mid(Tm, 3, 1) & Mid(Tm, 4, 1)
        endsecond = Mid(Tm, 6, 1) & Mid(Tm, 7, 1)
    End If
   
    If Len(StartTime) <> 7 Then
        startHour = Mid(StartTime, 1, 1) & Mid(StartTime, 2, 1)
        startminute = Mid(StartTime, 4, 1) & Mid(StartTime, 5, 1)
        startsecond = Mid(StartTime, 7, 1) & Mid(StartTime, 8, 1)
    Else
        startHour = Mid(StartTime, 1, 1)
        startminute = Mid(StartTime, 3, 1) & Mid(StartTime, 4, 1)
        startsecond = Mid(StartTime, 6, 1) & Mid(StartTime, 7, 1)
    End If
   
    'msg = "start hour: " & startHour & " --- end hour: " & endhour & vbNewLine & _
          '"start minute: " & startminute & " --- end minute: " & endMinute & vbNewLine & _
          '"start second: " & startsecond & " --- end second: " & endsecond
    'MsgBox msg
   
    '/// Ето самая важная часть ///
   
    If Int(endhour) < Int(startHour) Then 'сколько часав трудился
    xHour = startHour
    Else
    xHour = endhour - startHour
    End If
   
    If Int(endMinute) < Int(startminute) Then 'сколько минут
    xMinute = startminute
    Else
    xMinute = endMinute - startminute
    End If

    If Int(endsecond) < Int(startsecond) Then 'сколько секунд (по-приколу)
    xSecond = startsecond
    Else
    xSecond = endsecond - startsecond
    End If
   
    '//////////////////////////////
   
    endMinute = ((60 / 100) * xMinute) * 2.8  'подщитаем сколько денег в одной минуте, и умножим на количество минут :)
   
    'короче до секунды я думаю выщитывать не будем.
    'такая точность не к чему.
   
    'выравниваем по формату ##:##:##, чтобы было красиво :)
    If Int(xHour) < 10 And Len(xHour) < 2 Then xHour = "0" & xHour
    If Int(xMinute) < 10 Then xMinute = "0" & xMinute
    If Int(xSecond) < 10 Then xSecond = "0" & xSecond
   
    EndTime = xHour & ":" & xMinute & ":" & xSecond
   
    d = (xHour * 100) + endMinute 'сумма в зеленых :)))
   
    MsgBox "Рабочий проработал сегодня " & EndTime & " и ему за ето полагаеться " & d & "$"

End Sub
18K
08 августа 2006 года
kabak
10 / / 05.08.2006
Большое, спасибо... Все заработало ...
15K
08 августа 2006 года
KAN
40 / / 08.08.2006
замудрил :)
вместо функции int(которая округляет до ближайшего целого в меньшую сторону), использовать val.
А если чек на ночь снял комп, например с 22 до 08?
мне кажется проще не время считать а таймер.
starttime=timer
endtime=timer
sittime=endtime-starttime 'в секундах
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог