Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Контроль даты / 9 сообщений из 9, страница 1 из 1
19.12.2013, 13:48:33
    #38506480
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
Есть такая проблема. Пользователи, при вводе даты, иногда ошибаются и вводят вместо "01.01.2012" дату "01.01.0201" и подобное. Проблему частично решил, добавив в домен даты ограничение. Но, так как взял с запасом (считая, что 2015 тоже корректен), то уникумы начала вводить даты 2014, 2015 годов и так далее.
Вопрос: как вы у себя решили проблему проверки корректности введенной даты, причем в любом поле? Чтобы сегодня 15 января 2014 года давало ошибку, а в следующем месяце - уже нет?
...
Рейтинг: 0 / 0
19.12.2013, 13:59:20
    #38506494
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
Hello, CyberMax!
You wrote on 19 декабря 2013 г. 13:52:07:

CyberMax> Есть такая проблема. Пользователи, при вводе даты, иногда ошибаются и
> вводят вместо "01.01.2012" дату "01.01.0201" и подобное. Проблему
> частично решил, добавив в домен даты ограничение. Но, так как взял с
> запасом (считая, что 2015 тоже корректен), то уникумы начала вводить
> даты 2014, 2015 годов и так далее.
> Вопрос: как вы у себя решили проблему проверки корректности введенной
> даты, причем в любом поле? Чтобы сегодня 15 января 2014 года давало
> ошибку, а в следующем месяце - уже нет?
в таком ТОТАЛЬНОМ контроле смысла нет.
это попытка натянуть кондом на отражение луны в осенней луже.
контроль нужен на уровне бизнес-правил и бизнес-логики.
формализация же оных - весьма нетривиальный процесс.
но реализуемый.
при соответствующем объеме выделенных человеко-часов.

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

ну и про волшебный пездюлин тм забывать тоже не стоит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.12.2013, 15:28:11
    #38506635
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
CyberMax,

В дополнение к сказанному МП - есть диапазон (типично - месяц), внутри которого введенные даты считаются корректными. Все что не попадает в диапазон - выбрасывается тригерами с соответствующим ексепшном. Настройки диапазона задает ответственный человек.

Но все это укладывается в фразу МП "контроль на уровне бизнес-правил".
...
Рейтинг: 0 / 0
19.12.2013, 15:46:27
    #38506667
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
miwaonlineВсе что не попадает в диапазон - выбрасывается тригерами с соответствующим ексепшном.
Тут надо на каждую таблицу с датой триггер делать. А если дат несколько? Навскидку скажу, что проверять надо порядка 500 дат. И хотелось бы делать это из одного места. Причина ошибок в большинстве случаев - клавиатурная опечатка. например, 4 вместо 1, 9 вместо 6, 2 вместо 5... Ну вы поняли.
В принципе есть мысль побороть это путем дописывания контрола поля ввода даты. И прямо в нем проверять дату - если она больше текущей, то ошибка. Если предыдущий месяц - предупреждение. Если далеко в прошлом - тоже ошибка. Как-то так.
...
Рейтинг: 0 / 0
19.12.2013, 16:38:14
    #38506783
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
CyberMaxесть мысль побороть это путем дописывания контрола поля ввода даты. И прямо в нем проверять дату - если она больше текущей, то ошибка.Для договоров один диапазон, для накладнушек другой, для отчетов третий и т.д и т.п. приходим к указанному выше:
Мимопроходящийконтроль нужен на уровне бизнес-правил и бизнес-логики.
...
Рейтинг: 0 / 0
19.12.2013, 17:05:31
    #38506870
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
Ivan_Pisarevsky,

Для реализации сего действа можно завести себе табличку типа: "как контролировать (правило)" + "какие даты (диапазон) контролировать". Потом наваять хранимку с контролем. И звать хранимку из триггеров или хранимок на Insert/Update.
...
Рейтинг: 0 / 0
19.12.2013, 18:57:01
    #38507052
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
CyberMax> В принципе есть мысль побороть это путем дописывания контрола поля ввода даты.

Я бы именно так и делал, если бы понадобилось.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
20.12.2013, 12:02:41
    #38507659
SEYD
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
Это можно сделать так:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SET TERM ^ ;

create or alter procedure DATE_CHECK (
    DATEVALUE date)
returns (
    RESULT integer)
as
begin
  result=0;
  if (datevalue>current_date) then result=-1;

  suspend;
end^

SET TERM ; ^

CREATE DOMAIN TEST AS
DATE
CHECK ((select result from date_check(value))=0);

CREATE TABLE TEST_DATE (NEW_FIELD TEST);



соответственно в хранимке DATE_CHECK можно прописать любую необходимую логику
...
Рейтинг: 0 / 0
24.12.2013, 06:43:28
    #38510645
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контроль даты
SEYD,

Интересное решение!

В общем, опыт эксплуатации показал, что тут действительно, наскоком проблему не решить. В частности, на некоторые даты ограничение через домен накладывать нельзя (например, дата окончания срока эксплуатации счетчика - она может быть до 2040 года, а точка отсчета - 2013 год - валидна). Поэтому для даты учета сделаю проверку прямо в контроле, а по остальным - проверки через триггеры, для каждой даты каждого документа - свои.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Контроль даты / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]