Последняя версия DataExpress 3 beta от 1 сентября 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Проверка временного интервала

Вопросы, связанные с конструктором приложений баз данных DataExpress.
WPAS
Новичок
Сообщения: 48
Зарегистрирован: Пн фев 11, 2019 8:35 pm
Благодарил (а): 13 раз
Поблагодарили: 3 раза

Проверка временного интервала

Сообщение WPAS » Вс мар 10, 2019 4:56 pm

Добрый день. Есть таблица в которую добавляется дата, время начала и конца,подскажите, как перед добавлением данных в таблицу сделать проверку, попадает ли указанное время, уже в имеющиеся в таблице временные интервалы времени, с учетом даты. Условие пробовал добавлять в поле "Начало", но у меня не получилось это сделать.
Вложения
testTime.7z
(42.65 КБ) 21 скачивание

Аватара пользователя
Гocть
Эксперт
Сообщения: 1583
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 8 раз

Re: Проверка временного интервала

Сообщение Гocть » Вс мар 10, 2019 5:49 pm

testTime.zip
(64.08 КБ) 24 скачивания
Фрилансер. Разработка на заказ. Консультирование.

WPAS
Новичок
Сообщения: 48
Зарегистрирован: Пн фев 11, 2019 8:35 pm
Благодарил (а): 13 раз
Поблагодарили: 3 раза

Re: Проверка временного интервала

Сообщение WPAS » Вс мар 10, 2019 6:45 pm

Спасибо. То что надо, до такого я бы не додумался :D

Аватара пользователя
Гocть
Эксперт
Сообщения: 1583
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 8 раз

Re: Проверка временного интервала

Сообщение Гocть » Вс мар 10, 2019 8:24 pm

Немного подправил:

Код: Выделить всё

iif([Начало]>=[Конец],
              block(
                MsgBox('Сохранение невозможно!','Дата начала не можен быть больше или равна дате конца.'),
                setfield('ФлагСохранения',0),
                'Исправьте дату и время.'
              )
    ,
    iif(newrec=1 | (oldvalue('Дата')<>[Дата] | oldvalue('Начало') <> [Начало] | oldvalue('Конец') <> [Конец]),
          iif(
          DBCOUNT('ФВД', '[!ШтапмКонец] >[ШтапмНачало] & [!ШтапмНачало] < [ШтапмКонец]') > 0,

              block(
                MsgBox('Сохранение невозможно!','Указанный диапазон времени пересекается с имеюшимися в БД.'),
                setfield('ФлагСохранения',0),
                'Исправьте дату и время.'
               ),
              block(
                setfield('ФлагСохранения',1),
                null
                )
          ),
       null
    )
)
Фрилансер. Разработка на заказ. Консультирование.

WPAS
Новичок
Сообщения: 48
Зарегистрирован: Пн фев 11, 2019 8:35 pm
Благодарил (а): 13 раз
Поблагодарили: 3 раза

Re: Проверка временного интервала

Сообщение WPAS » Пт мар 15, 2019 7:08 pm

Гocть, Спасибо. А как вы скрыли свои дополнительные поля, так что они не показываются в таблице?

Аватара пользователя
Гocть
Эксперт
Сообщения: 1583
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 8 раз

Re: Проверка временного интервала

Сообщение Гocть » Пт мар 15, 2019 7:24 pm

Изображение
Фрилансер. Разработка на заказ. Консультирование.

WPAS
Новичок
Сообщения: 48
Зарегистрирован: Пн фев 11, 2019 8:35 pm
Благодарил (а): 13 раз
Поблагодарили: 3 раза

Re: Проверка временного интервала

Сообщение WPAS » Пт мар 15, 2019 7:59 pm

Еще раз спасибо :oops:

WPAS
Новичок
Сообщения: 48
Зарегистрирован: Пн фев 11, 2019 8:35 pm
Благодарил (а): 13 раз
Поблагодарили: 3 раза

Re: Проверка временного интервала

Сообщение WPAS » Пт мар 15, 2019 8:37 pm

Гocть писал(а):Немного подправил:

Протестировал этот вариант, обнаружил что если в базе, например, есть запись 15-00 / 16-00, то изменить эту запись на 15-15 / 16-00 невозможно, выдается сообщение о том что время занято.

Аватара пользователя
Гocть
Эксперт
Сообщения: 1583
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 8 раз

Re: Проверка временного интервала

Сообщение Гocть » Пт мар 15, 2019 9:38 pm

Аппетит приходит во время еды ;) . Дальше только скрипты, так как сколько не усложняй это выражение, все равно где то будет дырка.
Фрилансер. Разработка на заказ. Консультирование.

WPAS
Новичок
Сообщения: 48
Зарегистрирован: Пн фев 11, 2019 8:35 pm
Благодарил (а): 13 раз
Поблагодарили: 3 раза

Re: Проверка временного интервала

Сообщение WPAS » Пт мар 15, 2019 11:44 pm

Код: Выделить всё

iif([Начало]>=[Конец],
              block(
                MsgBox('Сохранение невозможно!','Дата начала не можен быть больше или равна дате конца.'),
                setfield('ФлагСохранения',0),
                'Исправьте дату и время.'
              )
    ,


iif(newrec=1,
    iif(
    DBCOUNT('ФВД', '[!ШтапмКонец] >=[ШтапмНачало] & [!ШтапмНачало] <= [ШтапмКонец]') > 0,

          block(
           MsgBox('Сохранение невозможно!','Указанный диапазон времени пересекается с имеюшимися в БД.'),
          setfield('ФлагСохранения',0),
            'Исправьте дату и время.'
           ),

          block(
            setfield('ФлагСохранения',1),
            null
            )
      ),
      null
)

А если так сделать, вроде бы все нормально работает.