|
|
|
| Имеется задачка
В аренду в течении дня на несколько минут-часов сдаётся "Кровать"
В течении дня её вновь и вновь хотят занять
Потому телефоны - звонят и звонят и звонят
И заранье за день иль за десять звонят
Ну востребована среди клиентов - кровать!!!
Ну а кто принимает звонки, тот в желании знать
Время в какое - свободна кровать,
Что бы другим в эти сроки отдать
Место - где можно слегка подремать
====================================== | |
|
| |
|
|
|
| Я так прикинул - нужна таблица с тремя полями
Дата заказа, начало услуги, конец услуги.
на форму бросаем календарь и тыкаем по дням - для определения уже в конкретном дне - какие чесы у девочки - свободны...
На форму выливаются по порядку часы(интервал ~15 минут), и если какой то период занят он красится в Red
А если какой свободен он красится в Blue | |
|
| |
|
9 Кб. |
|
| нужно разбить на минимальные периоды, если возможно - это все значительно упростит.=>
так, это было :))) просмотрел
а в чем тогда проблема?
это называется ResourceBooking | |
|
| |
|
|
|
| Красиво - прям как я описал
А что это за тёмные хвостики на конце графической линии?
Тада период возьмём - 1 минута.
или имеешь ввиду - 1 час? | |
|
| |
|
|
|
| технологические перерывы - подмести-убраться в номере, например - чтобы невозможно было букать обслуживаемый ресурс стык-в-стык | |
|
| |
|
|
|
|
Блин - а это идея....
Ну там помыть припудрить чего....
Сменить резину-
на зимнюю | |
|
| |
|
|
|
| теперь внимание - вопрос
На форме 4 поля для ввода данных о начальном часе и нач минутах, и о конечном часе и кон. минуте услуги.
Как устроит проверку - вхождения выбранного периода в уже зарезервированные в таблице места.....
сижу вота - думаю(не в туалете....) | |
|
| |
|
|
|
| Час - а можно уточнить
коечка одна или много | |
|
| |
|
|
|
|
| это он у тещи спер диван-кровать и решил бабла заработать
а в чем проблем со сравнением?
есть период Занято с...по -> попадаем каким либо концом в него болт!!!
и обратная проверка, для исключения попадания занятого периода в Искомый. | |
|
| |
|
|
|
|
| Все понятно на словах
Ну сумятица в умах
На кровати чтоб поспать
Как проверку мне создать-
Вот причина написанья,
Суть не в том кому давать
Как всё это расчитать
Что бы лишнего не дать
Но вопрос стоит про код
Что на это скажешь, Коттт
Как проверку обеспечить
Чтоб вхжденье только встретишь
Срзу выдать на весь свет
В это время - койки -НЕТ! | |
|
| |
|
|
|
| можно проще - на стадии принятия заказа - запретить челу вводить время, которое уже занято - это проще, чем сравнивать интервалы!!!! | |
|
| |
|
|
|
| Согласен - я ж никак не врублюся как организовать эту самую проверку
КАК то надо бежать по времени
For F = 00.00.01 to 23.59.59
if First_Time_Service = F then
Next F | |
|
| |
|
|
|
| вар 1 - на обновление поля Время нач. заказа/конец заказа - проверка на вхождение в забронированные интервалы по данному дню.
вар 2 - как правило заказы принимают 12-00, 12-30, ну максимум 12-00, 12-15, 12-30, 12-45.
сделать форму 0час, 1 час, ..... 23 часа. на каждый час выпадающий список с Время_нач в котором все возможные не занятые интервалы. | |
|
| |
|
|
|
|
| "select * from Zakaz where data_zak=" & me.Дата_Заказа & " and " & me.Нач_Заказа & "between time_nach and Time_end"
и проверка на EOF, возможно вместо between использовать конструкцию me.Нач_Заказа<= time_nach and me.Нач_Заказа <=Time_end | |
|
| |
|
|
|
| Боюся так не выйдет
потому как вводимый интервал может быть внутри уже имеющегося а может быть и наоборот...
Как ты считаешь??? | |
|
| |
|
|
|
| Где то на форуме мы с Lukas за чашкой чая это уже обсасывали - вот тока разве найжёшь теперь......... | |
|
| |
|
|
|
| не ты проверяешь на входжение данного времени во все забитые интервалы!!!! ты ж рабатаешь с таблой через Recordset - запрос, и при вхождении у тебя появится запись - т.е. св-во EOF = False - гласит о запрете на ввод. | |
|
| |
|
|
|
| Итак
таблица SERVICE_TBL
DATE_SERVICE - дата услуги as date
FIRST_TIME_SERVICE - время начала as (кстати какой тип выбрать чтобы select не ошибся)
LAST_TIME_SERVICE - время окончания as (кстати какой тип выбрать чтобы select не ошибся)
|
| |
|
| |
|
|
|
| Дата услуги должна быть 2!!!! если снимается койка на 1 сутки и более и если с нимать с 22:00 до 02:00!!!! | |
|
| |
|
|
|
| Да???
Тогда
FIRST_TIME_SERVICE будет as Date,
и табм будет и дата и время | |
|
| |
|
|
|
| все извини я в банк, если ч то после 17отвечу | |
|
| |
|
15 Кб. |
|
| во первых =>
SELECT
EventDateTime,
Description,
EventDuration,
Format([EventDateTime],"dd/mmm/yyyy") AS CheckInDate,
Format([EventDateTime],"hh:nn") AS CheckInTime,
Format(DateAdd("n",[EventDuration],[EventDateTime]),"dd/mmm/yyyy") AS CheckOutDate,
Format(DateAdd("n",[EventDuration],[EventDateTime]),"hh:nn") AS CheckOutTime
FROM tblReservations
|
где EventDuration число в минутах (резервирование на сутки = 24*60=1440 минут) а EventDateTime полный формат даты и времени начала события dd-mm-yyyy hh:nn
реализация условия "как не попасть в диапазон" зависит в принципе от алгоритма работы с приложением - интерфейса ввода | |
|
| |
|
|
|
| Спасибо!!! | |
|
| |
|
|
|
| Прорисовалась функция добавления контролов (Label) на форму с указанием часов услуг и закраской занятых участков...
Function Create_TIME_Line(STR_LEFT As Long, STR_TOP As Long, STR_DATE As String)
' создание рисунков
Dim im As Label
Dim rst As ADODB.Recordset
Dim KL As String ' название
Dim KL1 As Long ' + название
Dim STR_HOUR As Long ' часы
Dim STR_MINUTE As Long ' минуты
Dim STR_TIME As String
' Удаление рисунков
Call DELETE_TIME_Line
Set rst = New ADODB.Recordset
rst.Open "SELECT SERVICE_TBL.DATE_SERVICE, SERVICE_TBL.FIRST_TIME_SERVICE, SERVICE_TBL.LAST_TIME_SERVICE" _
& " From SERVICE_TBL " _
& " WHERE (((SERVICE_TBL.DATE_SERVICE)= #" & STR_DATE & "#));", GLB_CONNECTION, adOpenKeyset, adLockOptimistic
KL1 = 1
For STR_MINUTE = 480 To 1440 Step 2
KL = "DNI" & KL1
Set im = Controls.Add("VB.Label", KL)
im.Top = STR_TOP
im.Left = STR_LEFT
im.Height = 250
im.Width = 500
im.Appearance = 0
im.BorderStyle = 1
im.FontSize = 9
im.Alignment = 2
im.Visible = True
STR_LEFT = STR_LEFT + im.Width - 15 'FRM_OKNO("T" & s)
If STR_LEFT >= 14500 Then
STR_LEFT = 600
STR_TOP = STR_TOP + 250
End If
If Val(STR_MINUTE) >= 60 Then
im.Caption = Format(Int(Val(STR_MINUTE) / 60), "00") & ":" & Format(Int(Val(STR_MINUTE) - 60 * Int(Val(STR_MINUTE) / 60)), "00")
STR_TIME = im.Caption
If STR_TIME = "24:00" Then STR_TIME = "00:00"
rst.Filter = "FIRST_TIME_SERVICE<= " & STR_TIME & " AND LAST_TIME_SERVICE >= " & STR_TIME
If rst.RecordCount <> 0 Then
im.BackColor = &HFFEBE8
Else
im.BackColor = vbWhite
End If
rst.Filter = adFilterNone
Else
im.Caption = Int(Val(STR_MINUTE) / 60) & ":" & STR_MINUTE
im.BackColor = vbWhite
End If
KL1 = KL1 + 1
Next STR_MINUTE
End Function
|
И тут я понял, что не всё кту масленница | |
|
| |
|
|
|
|
Function Create_TIME_Line(STR_LEFT As Long, STR_TOP As Long, STR_DATE As String)
' создание рисунков
Dim im As Label
Dim rst As ADODB.Recordset
Dim KL As String ' название
Dim KL1 As Long ' + название
Dim STR_HOUR As Long ' часы
Dim STR_MINUTE As Long ' минуты
Dim STR_TIME As String ' время
' Удаление рисунков
Call DELETE_TIME_Line
Set rst = New ADODB.Recordset
rst.Open "SELECT SERVICE_TBL.DATE_SERVICE, SERVICE_TBL.FIRST_TIME_SERVICE, SERVICE_TBL.LAST_TIME_SERVICE" _
& " From SERVICE_TBL " _
& " WHERE (((SERVICE_TBL.DATE_SERVICE)= #" & STR_DATE & "#));", GLB_CONNECTION, adOpenKeyset, adLockOptimistic
KL1 = 1
For STR_MINUTE = 480 To 1440 Step 2
KL = "DNI" & KL1
Set im = Controls.Add("VB.Label", KL)
im.Top = STR_TOP
im.Left = STR_LEFT
im.Height = 250
im.Width = 500
im.Appearance = 0
im.BorderStyle = 1
im.FontSize = 9
im.Alignment = 2
im.Visible = True
STR_LEFT = STR_LEFT + im.Width - 15
' дошли до конца строки - перевод на новую
If STR_LEFT >= 14500 Then
STR_LEFT = 600
STR_TOP = STR_TOP + 250
End If
If Val(STR_MINUTE) >= 60 Then
im.Caption = Format(Int(Val(STR_MINUTE) / 60), "00") & ":" & Format(Int(Val(STR_MINUTE) - 60 * Int(Val(STR_MINUTE) / 60)), "00")
STR_TIME = im.Caption
If STR_TIME = "24:00" Then STR_TIME = "00:00"
rst.Filter = "FIRST_TIME_SERVICE<= " & STR_TIME & " AND LAST_TIME_SERVICE >= " & STR_TIME
' если занято
If rst.RecordCount <> 0 Then
im.BackColor = &HFFEBE8
Else
' если свободно
im.BackColor = vbWhite
End If
' удалим фильтр
rst.Filter = adFilterNone
Else
' если минут менее часа
im.Caption = Int(Val(STR_MINUTE) / 60) & ":" & STR_MINUTE
im.BackColor = vbWhite
End If
KL1 = KL1 + 1
Next STR_MINUTE
End Function
|
А каким методом удалять эти Labels с формы?? | |
|
| |
|
|
|
| Пробую вот так:
Function DELETE_TIME_Line()
' удаление рисунков
Dim ctrl As Control
For Each ctrl In Controls
If TypeName(ctrl) = "Label" And Left(ctrl.Name, 3) = "DNI" Then
ctrl.Remove
End If
Next ctrl
End Function
|
| |
|
| |
|
|
|
| Решил не удалять - один раз создать, а потом перекрашивать токма
Function COLOR_TIME_LINE(STR_DATE As String)
' перекрасить рисунки (Labels)
Dim ctrl As Control 'Labels
Dim rst As ADODB.Recordset
Dim STR_TIME As String ' время
Set rst = New ADODB.Recordset
rst.Open "SELECT SERVICE_TBL.DATE_SERVICE, SERVICE_TBL.FIRST_TIME_SERVICE, SERVICE_TBL.LAST_TIME_SERVICE" _
& " From SERVICE_TBL " _
& " WHERE (((SERVICE_TBL.DATE_SERVICE)= #" & STR_DATE & "#));", GLB_CONNECTION, adOpenKeyset, adLockOptimistic
For Each ctrl In Controls
If TypeName(ctrl) = "Label" And Left(ctrl.Name, 3) = "DNI" Then
STR_TIME = ctrl.Caption
If STR_TIME = "24:00" Then STR_TIME = "00:00"
rst.Filter = "FIRST_TIME_SERVICE<= " & STR_TIME & " AND LAST_TIME_SERVICE >= " & STR_TIME
' если занято
If rst.RecordCount <> 0 Then
ctrl.BackColor = &HFFEBE8
Else
' если свободно
ctrl.BackColor = vbWhite
End If
' удалим фильтр
rst.Filter = adFilterNone
End If
Next ctrl
rst.Close
Set rst = Nothing
End Function
|
| |
|
| |
|
|
|
|
| Час:
если с каждой на кровать - поломается давать!!! | |
|
| |
|
|
|
| я бы воздержался.
и вообще - не размещал бы лэйблы на форме а рисовал бы тайм-лайны в имадже | |
|
| |
|
|
|
|
Простите невежду, что Бы | |
|
| |
|
|
|
| на lebans.com есть пример PictureBoxA2k - посмотри как там реализована отрисовка - всего один объект имадж - ничего не нужно в дизайн-вью формы мастырить (кстати и лукасу с его диаграммами и тайм-лайнами этот пример подошел бы)
когда потребуется какая-то интерактивность при работе с таймлайнами можно отталкиваться от границ имаджа -
я так когда-то интерактивные карты рисовал и атобусные маршруты по ним прокладывал
с тайм-лайнами все проще будет. | |
|
| |
|