Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.23;
Скачать: CL | DM;

Вниз

Отчет за период. Интерфейс. Как Вы понимаете, с какого по какое?   Найти похожие ветки 

 
12 ©   (2010-10-06 08:59) [0]

т.е. за месяц, например, - это с первого по последнее или с первого по первое?
Как Вы понимаете для себя и как делаете обычно?
Просто интересно стало :)


 
Palladin ©   (2010-10-06 09:03) [1]

советую изучить понятия отрезка и интервала, понятия "до" и "по"
ну а месяц это месяц, у него нет двусмысленности


 
Медвежонок Пятачок ©   (2010-10-06 09:16) [2]

или с первого по первое?

а за следующий месяц - "со второго по второе"? ведь первое число уже попало в предыдущий отчет.


 
И. Павел ©   (2010-10-06 09:18) [3]

Думаю, речь идет об том: какую границу указывать, чтобы получить отчет за месяц.
Тут есть сложность в том, что кто-то указывает правую границу исключительно, а кто-то включительно. Недавно была такая вещь в программе: при постановке ТЗ было решено делать правую границу включительно, а при тестировании заказчик сказал, что все-таки нужно исключительно. Базу и программу не менял (там удобно работать с включительными интервалами), но вывод и сохранение даты немного изменил, что привело к появлению ошибки...


 
RWolf ©   (2010-10-06 09:32) [4]

чтобы получить отчет за месяц, надо так и указывать — отчет за месяц; какие могут быть разногласия?


 
12 ©   (2010-10-06 09:38) [5]

за месяц было к примеру

поставим вопрос так:
есть таблица, table. Есть поле table.CreateDT (datetime)
если пользователь указывает в интерфейсе, что ему нужны объекты, созданные
с 01.01.2010 по 01.01.2010

какие объекты должны попасть в отчет?


 
RWolf ©   (2010-10-06 09:42) [6]

это должно быть 1) согласовано с заказчиком; 2) оговорено в интерфейсе выбора периода, например: «с ___▼ по ___▼ включительно».


 
12 ©   (2010-10-06 09:43) [7]

Я считаю, что никакие. с 01.01.2010 по 01.01.2010 не прошло ни секунды
Но, почему то у юзеров появляются мнения, что должны попасть все объекты, созданные первого января.
Поправить то можно, но: Где логика?

Это уже со второй моей программой.
Вот и хочу узнать - я один так думаю или это специфично для технарей


 
RWolf ©   (2010-10-06 09:45) [8]

но предоставить возможность выбирать период длиной в месяц(квартал, полугодие) как альтернативу манипуляциям с календарём, я считаю, нужно.


 
12 ©   (2010-10-06 09:45) [9]


> это должно быть 1) согласовано с заказчиком; 2) оговорено
> в интерфейсе выбора периода, например: «с ___▼ по ___▼ включительно».

Согласен. Это теперь будет отдельный дополнительный вопрос навсегда :)
Ну а как считаешь то сам?


 
Sergey13 ©   (2010-10-06 09:46) [10]

> [4] RWolf ©   (06.10.10 09:32)

ИМХО, разногласия могут быть в том, что некоторые СУБД (я так понимаю про них речь) могут вообще не понять такого указания, а некоторые если и поймут, то будут тормозить с выполнением.


 
RWolf ©   (2010-10-06 09:51) [11]


> 12 ©   (06.10.10 09:45) [9]

считаю, что для юзера интуитивно понятнее, когда правая граница включена в интервал; т.е. когда выбор «с 1 по 31 января» означает "1 янв 00:00" <= datetime < "1 фев 00:00".


 
Думкин ©   (2010-10-06 10:05) [12]


> но: Где логика?

в словах заказчика. Как у солдат - приказы не обсуждаются.

Меня вот много как разработчика бесит в требованиях заказчиков, но и ладно.


 
Юрий Зотов ©   (2010-10-06 10:09) [13]

Ох, больная тема...

1. Обязательно согласовать с заказчиком.
2. Делать так, как он скажет.
3. В коде обязательно предусмотреть возможность простого и быстрого переключения (например, объявив пограничные даты именованными константами и далее работая только через их имена).

>  это специфично для технарей

Для технарей как раз специфична простая, четкая, однозначная и всем понятная логика. А игнорирование разницы между "включительно" и "исключительно" свойственно как раз НЕтехнарям. Мог бы привести пару примеров на эту тему - ухохочешься.


 
Медвежонок Пятачок ©   (2010-10-06 10:12) [14]

но: Где логика?

Логика простейшая.
Хотят "отчет за месяц".
Скажем звонит вася пете и говорит - "петя, построй мне отчет за месяц"
петя васе: "за какой месяц?"
вася пете: "за сентябрь"

итого: отчет с первого сентября по тридцатое, ибо первое октября это уже не сентябрь


 
DiamondShark ©   (2010-10-06 10:13) [15]


> Мог бы привести пару примеров на эту тему - ухохочешься.

Приведите, пожалуйста.


 
Anatoly Podgoretsky ©   (2010-10-06 10:13) [16]


> 12 ©   (06.10.10 09:38) [5]

Это зависит от типа данных и от СУБД
Можно получить как включительно, так и исключительно.
Я правую границу задаю как <


 
Юрий Зотов ©   (2010-10-06 10:19) [17]


> DiamondShark ©   (06.10.10 10:13) [15]

Нельзя. Неполиткорректно.


 
DiamondShark ©   (2010-10-06 10:22) [18]


> Нельзя. Неполиткорректно.

Материться придётся? Понимаю ;)


 
Kerk ©   (2010-10-06 10:28) [19]

Я как-то в похожей задачей столкнулся с веселой неоднозначностью, связанной с високосными годами.

На сцене Oracle:

MONTHS_BETWEEN(DATE"2009-02-28",DATE"2008-02-29‘)
————————————————-
12
MONTHS_BETWEEN(DATE’2009-02-28&#8242;,DATE’2008-02-28‘)
————————————————-
12


И ведь все верно.

If date1 and date2 are either the same days of the month or both last days of months, then the result is always an integer


 
Медвежонок Пятачок ©   (2010-10-06 10:31) [20]

с 01.01.2010 по 01.01.2010

какие объекты должны попасть в отчет?


вопрос неправильный сам по себе.

с какого по какое - это элемент интерфейса, который видит юзер.
а какие значения параметров для селекта должны при этом порождаться - это вопрос следующий:

юзер оперируя этими датами может захотеть отчет и за одни сутки и за много суток.

так вот: спроси себя, что он должен будет вводить в эти контролы чтобы получить отчет за нужный ему период, если твоя логика интерпретации этих границ будет такая-то.


 
Petr V. Abramov ©   (2010-10-06 13:31) [21]


> 12 ©   (06.10.10 09:43) [7]
>
> Я считаю, что никакие. с 01.01.2010 по 01.01.2010 не прошло
> ни секунды
> Но, почему то у юзеров появляются мнения, что должны попасть
> все объекты, созданные первого января.
> Поправить то можно, но: Где логика?

с утра date_from по вечер date_to
любая субд на вопрос between 01.01.2010 and 01.01.2010 выдаст записи за первое января, по-моему, это даже в стандарте, а его не совсем дураки делали.


 
Думкин ©   (2010-10-06 13:52) [22]


> любая субд на вопрос between 01.01.2010 and 01.01.2010

это не так. Можно и шиш получить.


 
DiamondShark ©   (2010-10-06 14:02) [23]


> любая субд на вопрос between 01.01.2010 and 01.01.2010 выдаст
> записи за первое января

Любая СУБД на запрос between 01.01.2010 and 01.01.2010 выведет записи за 01.01.2010 00:00:00.000, если тип поля DATETIME, и записи за 01.01.2010, если тип поля DATE.
А это разные результаты.

В чуть менее, чем всех СУБД даты хранятся со временем, а тип DATE является лишь псевдонимом к DATETIME, и принудительной обрезки времени не производится. Даже если логика предметной области предполагает точность времени до дня, из-за хреновой фильтрации ввода в поля может попасть мусорная информация о времени. Как следствие, запрос between 01.01.2010 and 01.01.2010 не выведет вообще ни одной записи.


 
DVM ©   (2010-10-06 14:03) [24]


> это не так. Можно и шиш получить.

В какой СУБД будет шиш?


 
DiamondShark ©   (2010-10-06 14:04) [25]


> DVM ©   (06.10.10 14:03) [24]
> > это не так. Можно и шиш получить.В какой СУБД будет шиш?

Почти в любой.


 
Anatoly Podgoretsky ©   (2010-10-06 14:04) [26]

> Petr V. Abramov  (06.10.2010 13:31:21)  [21]

Все даты от 01.01.2010 00:00:00 по 01.01.2010 00:00:00


 
DVM ©   (2010-10-06 14:05) [27]


> DiamondShark ©   (06.10.10 14:04) [25]

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


 
DiamondShark ©   (2010-10-06 14:14) [28]


> DVM ©   (06.10.10 14:05) [27]

Это у вас всегда время.
А вот представьте, где-то так сделано, что поле по логике должно хранить только день. Тип поля физически -- DATETIME. И где-то в клиенте есть быдлокод вроде:

defaultDate = DateTime.Now;

И больше нигде никакой фильтрации.
Усё. Приплыли.


 
Petr V. Abramov ©   (2010-10-06 14:16) [29]


> Даже если логика предметной области предполагает точность
> времени до дня, из-за хреновой фильтрации ввода в поля может
> попасть мусорная информация о времени.

ну сдуру-то можно знаешь чего сломать?


 
stas ©   (2010-10-06 14:30) [30]

12 ©   (06.10.10 08:59)
Я понимаю и всегда делаю c первого по последний включительно.


 
Игорь Шевченко ©   (2010-10-06 14:38) [31]

Во многих СУБД есть функции отсечения времени от даты. Они рулез


 
DiamondShark ©   (2010-10-06 15:04) [32]


> ну сдуру-то можно знаешь чего сломать?

Если бы все были умными, компьютеры были бы не нужны.

Вот совсем недавно ветка была, где упоминались сектанты новой технологии, у которых база без констрейнтов, потому что клиент умный.


 
Petr V. Abramov ©   (2010-10-06 15:11) [33]


> DiamondShark ©   (06.10.10 15:04) [32]
>
>

хватит и 5% умных


 
Anatoly Podgoretsky ©   (2010-10-06 15:26) [34]

> Petr V. Abramov  (06.10.2010 15:11:33)  [33]

5 процентов не прокормить.



Страницы: 1 вся ветка

Текущий архив: 2011.01.23;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.009 c
2-1288267508
RWolf
2010-10-28 16:05
2011.01.23
Редактирование XML


2-1288724567
SIV5000
2010-11-02 22:02
2011.01.23
Контекстное меню


15-1286604563
TUser
2010-10-09 10:09
2011.01.23
Антигедонистическое


2-1288609551
s_t_d
2010-11-01 14:05
2011.01.23
Как проверить создавался Frame или нет?


4-1243758013
Unknown user
2009-05-31 12:20
2011.01.23
IsHandleValid?