Re: Календарь с выбором произвольных дат | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
lulgu
Очевидно, у вас свои задачи. И выбрав такую структуру хранения, вы реализовали все что вам надо. У вас очевидно, что один график на всех. Согласитесь - простейший случай. Вот кусочек из аутсорсинга персонала Скрипт с MS SQL, но думаю понятно.
Инфа в любом разрезе, получается на раз. Хоть по персоналу, хоть по фирме. за любой период. Думаю как получить, даже писать не надо. Так это выглядит для юзера. Картинку урезал как мог [attachment 27041 IMG_0735.gif] ------------------ |
Re: Календарь с выбором произвольных дат | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Я тут многое не читал, время нет.
Я в календаре крашу "выходные". По году храню только выходные. В календаре на год, сразу все рабочие. На кнопке могут влупить все субботы, воскресенья (и/или) в выходные. Кнопкой пометить праздники, снять выходной с какой-то субботы. Принцип - первый клик - день стал выходным, второй - уже нет. Не жаловались. Может Вы здесь это прошли - я не читал, а просто встрял |
Re: Календарь с выбором произвольных дат | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Аспид
Это у вас форма хранения даных, на сервере. Но извлекли вы ее запросом, в данном случае все равно развернув в виде того же табеля. Потому что сервер вам это позволяет. И вводите данные, скорее всего, примерно в таком же виде. Но в Фоксе (речь ведь о нем) каждый раз заниматься подобной перекантовкой (SELECT или типа vfpxtab) не самое лучшее занятие. Исправлено 1 раз(а). Последнее : lulgu, 16.02.17 21:20 |
Re: Календарь с выбором произвольных дат | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
EVALUATE это точно такой же динамически формируемый код, как и макро. Просто другая реализация той же идеи. В любой системе программирования любой "динамический код" это КРАЙНЕЕ средство, когда по другому уж никак. Тот кто его применяет направо и налево, в т.ч. там где оно совершенно не нужно - ну, мягко говоря, непрофессионален. Предложенная структура из 31 поля ВЫНУЖДАЕТ использовать динамический код (при том ПОСТОЯННО - т.е. по сути для любого обращения к данным - либо динамика, либо огромная простыня из перечисления всех полей-дней - с самом простом случае "в виде суммы") -> она плоха. Затем что таковы принципы нормализации данных в реляционных БД. Да, их иногда нарушают - но для этого должны быть очень серьёзные основания. Я, к примеру, не вижу таковых ни для табеля отработанного/регламентированного времени, ни, тем более, для календаря рабочих/выходных дней. Желание "сделать эксель" - опять таки понятно (для пользователя, не для разработчика), но зачастую непродуктивно. А там вовсе не только "дополнительный цикл" потребуется... FIELD() в продуктивном коде (исключаем всякие утилиты обслуживания БД/обновления структур таблиц) - ещё более корявое решение чем evaluate и даже макро - при том что использование FIELD никак не отменит надобности в макро или EVALUATE... SCATTER TO ARRAY может избавить от динамики - за счёт перехода от работы с таблицей, к работе с массивом (где как раз вполне "нормально" использовать номера строк/колонок - а точнее это единственный вариант работы). Но назачем это нужно в обсуждаемой задаче, лично я не понимаю. Человек работающий с реляционной таблицей "по порядковому номеру поля" (равно как и "по порядковому номеру записи") - не понимает основных идей реляционных БД. И я не вижу этому никаких оправданий - не способен отличить массив от реляционной таблицы - переквалифицируйся в управдомы ------------------ WBR, Igor |
Re: Календарь с выбором произвольных дат | |
---|---|
Перминов Игорь Сообщений: 1591 Откуда: Красная Орловка Дата регистрации: 16.09.2001 |
Вот как у нас табельные данные хранятся
------------------ Без коментариев.. |
Re: Календарь с выбором произвольных дат | |
---|---|
Taran Сообщений: 13624 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Насколько понял у ТС вопрос был именно в визуальном контроле, а не в хранении результата.
В качестве идеи. При желании конечно и сырцы могу восстановить. Давненько правда не брал в руки VFP. [attachment 27045 frm_getPeriodEx_selected.png] Основная идея была быстрого ввода периода. Год отражается чтобы по месяцам не скакать. Колесо мыши крутит всю таблицу помесячно. Клик - начало периода, второй клик - завершение. Клик внутри отмеченного периода предлагает поделить. Клик за периодом - увеличивает его. |
Re: Календарь с выбором произвольных дат | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Taran Это наверное как раз то, что ТС хотел. Правда он уже решил все)
Это у меня как раз наоборот, форма для юзера. На сервере формы не хранятся. Это позволяет любой "сервер", в том числе и движок фокса) Ввод данных, это особая статья, и тут уж она точно, неразрывна с БП. Да, можно вводить и сразу в таблице (мало ли что то надо подкоректировать. Но есть свои правила ввода. Манагеры работают с персоналом и фирмами. И табель заполняется по результатам их работы. ПО написано на фоксе. Дело в том, что преобразование к внешнему виду, делается один раз, навсегда. Как бы сложно оно не было, процесс однозначно детерминированный. И не подлежит изменениям. А вот различные отчеты, появляются как грибы. И делать их из правильной структуры, дело 2 минут. Впрочем все это, совершенно не имеет отношения к теме топика) ------------------ |
Re: Календарь с выбором произвольных дат | |
---|---|
Taran Сообщений: 13624 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Про моё тугодумие - это я понял. Просто дискуссия тут горячая... и ни о чём. Естественно не в твой огород камень и не Игоря. ;) Чисто так, к слову о манипулировании с числом колонок в курсоре по дням. Ежели 31 можно, то под мою форму и 365 однако. Плюс сдвиг начала недели, плюс скрол. Т.е. конечно моя мысль что мухи и котлеты отдельно употреблять. Т.е. хранение и представление. |
Re: Календарь с выбором произвольных дат | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Igor Korolyov
Задавили вы терминами. Прям пол-хелпа привлекли, вплоть до управдомов. Что вас не устраивает в этом цикле:
Аспид Если вы о Фоксе, то подтвердите свои абстрактные рассуждения реальным примером. |
Re: Календарь с выбором произвольных дат | |
---|---|
pasha_usue Сообщений: 3649 Откуда: Е-бург Дата регистрации: 06.10.2006 |
Тем, что это не все циклы. Нужен еще цикл по месяцам, если даты не внутри одного месяца.
А ещё тем, что при нормальном проектировании вся эта куча кода умещается в одну строчку: SELECT COUNT(Day) FROM Calendar WHERE WorkHours#0 AND BETWEEN(Day, {^2017.02.01}, {^2017.02.28} INTO... И при этом, работает в разы быстрее. |
Re: Календарь с выбором произвольных дат | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Наверное, это так, я вам верю. Но ... Ваш SELECT - это только выборка, одна. "Быстрее" в данном случае вряд ли имеет значение. В свое время при большой выборке мне как-то пришлось заменить SELECT на SCAN...ENDSCAN так как он просто "засыпал". Он ведь тоже пробегает те же циклы, порой в усложненном варианте. Усилить цикл еще строчкой через MONTH() можно, если в этом был бы смысл. Да и ваш COUNT(Day) тогда можно заменить вызовом функции суммирования по полям, было бы желание. Исправлено 2 раз(а). Последнее : lulgu, 17.02.17 14:38 |
Re: Календарь с выбором произвольных дат | |
---|---|
pasha_usue Сообщений: 3649 Откуда: Е-бург Дата регистрации: 06.10.2006 |
... INTO ARRAY laArr RETURN laArr[1] И это уже функция ))) "Быстрее" всегда имеет значение. А то находятся программисты, которые то-здесь, то-там по 20-50 мсек потеряли, а потом запускают расчёт за большой период по большому массиву данных, и удивляются, почему оно два дня считается. Неудивительно. Язык запросов очень критичен к ошибкам проектирования. А если ошибка проектирования ещё и сознательно заложена, так и вообще. Кто вам это сказал? Плюньте в лицо тому, кто вам это сказал. SELECT в памяти делает кучу оптимизирующих операций, которые в SCAN-е не повторить никогда. Ну, хотя бы то, что SELECT может построить в памяти недостающий индекс и продолжить работу по этому индексу. И для чего делать сложно то, что можно сделать просто. Не понятно. |
Re: Календарь с выбором произвольных дат | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
При правильном проектировании, такое просто невозможно. Я не понимаю, какой пример вам нужен.
Так же легко пишется остальное. При чем тут не фоксовый сервер.? (На фоксе такое не держу, вовсе не по причине, что в фоксе выборки хуже, есть масса более весомых причян) А вообще то скучно... я же везде пишу. ВАМ переделывать не стоит. Это кто только начинает. ------------------ |
Re: Календарь с выбором произвольных дат | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
pasha_usue
Ваши доводы убедительны, но ... Стоило сделать замечание, так еще и массив появился, как Игорь и заказывал. Наверное, его еще и проверять нужно, а то можно и 31 февраля получить. Насчет "уже функция" - похоже, вы каждый раз пишете этот SELECT, когда попросят. Недостающие индексы надо добавлять заранее, нехорошо это, с табелем. Если для вас цикл FOR...ENDFOR сложен, я не знаю, что и сказать. Аспид Похоже, кроме "легко пишется" вам нечего предъявить даже новичку. Просьба к вам обоим - табель это не кассовый чек, чтобы его разглядывать по вертикали. Разверните вашу исходную таблицу хотя бы в BROWSE. |
Re: Календарь с выбором произвольных дат | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Для "разворота" есть штатный vfpxtab, и "улучшенный" fastxtab. Отчёты это позволяет делать не заморачиваясь. Впрочем, вы это и сами прекрасно знаете. По другим пунктам спорить смысла не вижу никакого. Если для вас 2-х уровневый цикл "проще" чем один тривиальный запрос - ну пишите так. Я видел немало кода на 2,3 а то и 5 страниц который успешно заменялся на 2-3 достаточно несложных запроса. Уверен что авторы этого кода искренне считали что всё делают правильно, и "лучшим образом".
И да, некоторые реально перегоняли данные из таблицы в массив, и потом обычными for i=... с этим и работают. Уж не знаю сишная/паскалевская это привычка, или банально незнание как работать с курсором... Но фокс вообще-то как раз и писался с тем, чтобы такого кода не нужно было применять... При том что я не спорю, среди сотен тысяч разнообразных применение найдётся два-три где обрабатывать данные таки лучше именно в массиве. Но в задачах с календарными табелями я такого никогда не встречал - там всё отлично работает именно на "длинных" таблицах, а развороты/шахматки применяются лишь в отчётах. Более того, если для отчётов применять эксель, то сами данные можно выгрузить именно "столбиком", и уже затем в экселевской "сводной таблице" их развернуть в "привычный вид". ------------------ WBR, Igor |
Re: Календарь с выбором произвольных дат | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Igor Korolyov
То, что "некоторые" делают так, или не делают так, является аргументом только для детей. Я выложил простейший цикл, решающий с датами задачу, и я не знаю, где вы там увидели какие-то 2-3-5 страниц кода, массивы, курсоры, и т.п. Чтобы опровергнуть эти конкретные несколько строк, взамен предлагаются абстрактные и довольно объемные программные решения по перекантовке таблиц, причем эти решения вроде того суслика, которого не видно, а он есть. Глвное - основным доводом является SELECT SUM() ..., проще которого разве что SELECT * ..., тоже мне нашли бином ньютона. |
Re: Календарь с выбором произвольных дат | |
---|---|
AndyNigmatec Сообщений: 1573 Откуда: Волгоград Дата регистрации: 28.06.2015 |
хоспидя ... ну что же вы спорите с очевидным то ... причем с очевидным даже для такого любителя как я ... да к вашему "табелю" может быть привязано хренова туча инфы не всегда очевидной ... и хрен вы ее по-простому разрулите при вашем подходе... простой пример - посчитать кол-во дней присутствия товара на складе (учитывая тока рабочие) уже превращается в квест ... не говоря уже о масштабируемости вашего приложения в целом Исправлено 1 раз(а). Последнее : AndyNigmatec, 18.02.17 01:56 |
Re: Календарь с выбором произвольных дат | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
AndyNigmatec
При всем желании не смог понять, о чем это вы. |
Re: Календарь с выбором произвольных дат | |
---|---|
AndyNigmatec Сообщений: 1573 Откуда: Волгоград Дата регистрации: 28.06.2015 |
я о том о чем писали в этом топике многие - сами данные и их представление пользователю - суть разные (очень разные) вещи ...
Но, думаю, реальные задачи с которыми вы рано или поздно столкнетесь поставят все на свои места))) и после N-го переписывания кода и X*N-го отлова ошибок по вашему динамическому (а с вашим подходом только так) коду, вы придете к тому о чем здесь и толкуют З.Ы. с темы топика давно сьехали - поэтому не отследил кто что писал ... так что ув. lulqu оба моих поста пожалуй не совсем к вам Исправлено 2 раз(а). Последнее : AndyNigmatec, 18.02.17 02:46 |
Re: Календарь с выбором произвольных дат | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
AndyNigmatec
Такое впечатление, что вы сами с собой тихо ведете беседу. Igor Korolyov Да, кстати, непонятно, что за 2-уровневой цикл вы увидели. |
© 2000-2024 Fox Club  |