Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.01.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.004 c
2-1288950802
DelphiRandom
2010-11-05 12:53
2011.01.23
Действительно случайные значения


2-1288563898
Германн
2010-11-01 01:24
2011.01.23
Отладка компонент


2-1289080453
NewZ
2010-11-07 00:54
2011.01.23
Как нарисовать стрелку?


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


2-1288267508
RWolf
2010-10-28 16:05
2011.01.23
Редактирование XML





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский