:: Visual Foxpro, Foxpro for DOS
Re: Календарь с выбором произвольных дат
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
Igor Korolyov
P.S. Вариант с 31-м полем - это аллес капут.
В чем именно аллес капут?
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
SoccerStudio
силами поддержки пишется скрипт, состоящий из 365 команд insert
Я бы на месте этих товарищей никогда не стал писать вручную 365 инсертов Написать даже очень банальный генератор, где используя dow и те самые 15-20 "исключений" заполнить сию таблицу - дело пяти минут...
Но, как грится, "дурака работа любит"


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
vnkor
В чем именно аллес капут?
В том что это одно из самых отвратительных решений, которые только можно было придумать. Хуже него, наверное, только таблица с 367-ю полями, на каждый день года и на сам год.
Разжёвывать желания нет, кто этого не понимает (а он и не поймёт хоть ты 5 страниц испиши мелким почерком) - бог с ним, пусть и далее копается в подобном гумусе, считая что "всё в порядке".


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
SoccerStudio

Сообщений: 5055
Откуда: Подмосковье
Дата регистрации: 28.11.2006
Igor Korolyov
SoccerStudio
силами поддержки пишется скрипт, состоящий из 365 команд insert
Я бы на месте этих товарищей никогда не стал писать вручную 365 инсертов Написать даже очень банальный генератор, где используя dow и те самые 15-20 "исключений" заполнить сию таблицу - дело пяти минут...
Но, как грится, "дурака работа любит"
Ну, у поддержке у нас дураков не было, думаю, вряд ли они вручную это все делали.


------------------
"Здесь я, братцы, сдержу матерщину, и скажу только "... мать!"" (с) Шаов
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
vnkor
В чем именно аллес капут?

Да хотя бы в том что потом использовать таку таблу в запросах геморно ... ну и вообще - привыкайте к нормальному виду таблиц, почитайте например про нормализацию ...
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
В системах табельного учета таблица с 31 полями (на каждый день) - это нормально. Или что-то не так?
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
vnkor
В системах табельного учета таблица с 31 полями (на каждый день) - это нормально. Или что-то не так?
- это вы наверное про бухгалтерские "шахматки" )))
А в БД данные так хранить не принято ... для примера реализуйте какой-нить динамический запрос к такой таблице
я уж не говорю о масштабируемости такого подхода

ну вот даже касаемо темы текущего топика - как в вашей таблице с 31 полями на кажный день реализовать признак праздничный/выходной день?



Исправлено 2 раз(а). Последнее : AndyNigmatec, 15.02.17 21:47
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
pasha_usue

Сообщений: 3649
Откуда: Е-бург
Дата регистрации: 06.10.2006
vnkor
В системах табельного учета таблица с 31 полями (на каждый день) - это нормально. Или что-то не так?
Для отображения - нормально. Для хранения, расчётов и выборок - маленький пушной зверёк. Поэтому, табель хранится и показывается по-разному.
Ratings: 0 negative/1 positive
Re: Календарь с выбором произвольных дат
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
AndyNigmatec
как в вашей таблице с 31 полями на кажный день реализовать признак праздничный/выходной день?
График.
Для графика с 8-часовым рабочим днем в каждое поле либо проставляется 8 (для предпраздничных дней - 7), либо ничего не проставляется для праздничных/выходных дней. Есть и другие графики. Скажем, для сменного персонала 12-4-8 (день - сутки дома, ночь - двое суток дома) проставляется так: день с 08:00 до 20:00 в поле проставляется 12, ночь с 20:00 до 08:00 в одно поле проставляется 4, а в следующее - 8. При необходимости выполняется перенос рабочих дней.
Табель.
Табель вообще можно не хранить в отдельной таблице. Он получается расчетным путем на основании графика и таблицы отклонений от графика (неявки). В таблицу неявок проставляется табельный номер работника, 2 даты (с и по) и причина неявки (болезнь, отпуск, ОБС и др.). При печати табеля в каждый день берется информация из графика (8, 12, 4 или "пусто"). Для дней неявок (если таковые были) значения заменяются условными обозначениями "Б", "О", "ОБС" и др.



Исправлено 1 раз(а). Последнее : vnkor, 16.02.17 08:59
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
vnkor
График.
Как вы описали, делать можно.
И многие так и делают.
Без обид.
Скажем так-это екселевское мышление.
pasha_usue верно сказал, когда идет речь о представлении данных юзеру, это все верно, когда же речь идет о работе БД, это неправильно.
Вполне допускаю, что у вас все сложилось. И вам уютно.
Но это частный случай.
В случае нормализации данных, ваш случай легко решается, но легко решаются и те ситуации, которые в вашей структуре, будет очень сложно решить.

Думаете просто так, все ушли, от вашей ОЧЕВИДНОЙ структуры.

И да, конечно. Юзер все видит, как вы описали. Ему дела нет, как все внутри.


------------------
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
vnkor
Или что-то не так?
"Не так" смешивать отображение данных у пользователя (которое вполне себе может быть именно в гриде с 31 колонкой, плюс прятать "лишние" для месяцев где не 31 день) и их хранение в БД.
Для начальной несложной задачи учёта рабочих/нерабочих. Напиши:
1) примерный код для определения является ли заданный день нерабочим.
2) примерный код для нахождения n-го рабочего дня после указанного (т.е. задано, скажем 25 декабря, и какая дата будет "через 8 рабочих дней".
3) код для подсчёта числа рабочих дней в заданном интервале (для пущего интереса пусть это будет интервал в 2-3 года).
Будет макро на макро с тупыми преобразованиями номера дня в имя поля, и в общем не код а самый настоящий "вторичный продукт". Для простейшей структуры с полями "дата", "признак рабочего/выходного" код будет тривиальный - простой и легко читаемый. Для структуры где хранятся только выходные и переносы, конечно, код уже будет сложнее - но он опять же не потребует ни динамического кода, ни тупых неочевидных условий, и специальных признаков типа "нет такого дня". Соответственно такой код можно без проблем написать и для большой СУБД, не только для фокса.
Всё. Других аргументов не требуется.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Прям запугали с этими страшилками.
Таблицы по подсчету рабочего времени типа табеля ведут в 31 колонку.
Календари - у меня на стенке висит календарь, и где семь колонок, по числу дней в неделе.
Таблица в 1+1 столбец - для заполнения второго столбца нужен программный код.
Но для работы с датами и без этого имеются необходимые программные средства.

3) Примерный код для подсчёта числа рабочих дней в заданном интервале, для пунктов 1),2) добавить параметры:

td1 = DATE(2017,1,1) && Дата начала периода
td2 = DATE(2019,1,1) && Дата начала следующего периода
tcPr = '20170101,20170501,20180101,20180501' && Праздники
tcRab = '20170506,20171230' && Рабочие дни в выходные
LPARAMETERS td1,td2,tcPr,tcRab
LOCAL i
i = 0
DO WHILE td1 < td2
i = IIF(DTOS(td1)$tcPr OR (INLIST(DOW(td1,2),6,7) AND !DTOS(td1)$tcRab),i,i+1)
td1 = td1 + 1
ENDDO
RETURN i
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
lulgu
Таблицы по подсчету рабочего времени типа табеля ведут в 31 колонку.
Календари - у меня на стенке висит календарь, и где семь колонок, по числу дней в неделе.
Таблица в 1+1 столбец - для заполнения второго столбца нужен программный код.
Во первых, вообще не ясно, что написано.
На стенке 7 колонок - это здорово.
А Таблица в 1+1 столбец
Ничего не понял

Но повторюсь. Так можно. И решаются частные проблемы.
Хотя бы приведенным кодом (упаси меня бог от такого)

Но вот у вас 5 человек, и у каждого свой график. Надо выдать какой то результирующий отчет.

Еще раз. Очевидное, далеко не всегда правильное.


------------------
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Я тоже у вас ничего не понял.
Но раз вы знаете "правильное", то продемонстрируйте.
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Этот код как раз и работает со списком выходных дней - никакой таблицы на 31 колонку с отметками выходных в нём нету!
Только вместо таблицы с датами используются строки с ними же, и вместо поиска в таблице идёт поиск элементов в строке. По логике - один в один как я и говорил. Только без собственно таблицы.

А сами "табели" - без проблем ведутся "в колонку", а для показа пользователям (можно и для редактирования - хотя не очень хороший код придётся писать для этого) "разворачиваются" в широкую шахматку.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
Igor Korolyov
1) примерный код для определения является ли заданный день нерабочим.
2) примерный код для нахождения n-го рабочего дня после указанного (т.е. задано, скажем 25 декабря, и какая дата будет "через 8 рабочих дней".
3) код для подсчёта числа рабочих дней в заданном интервале (для пущего интереса пусть это будет интервал в 2-3 года).
2) и 3) - а зачем?
CREATE TABLE grafik (god N(4), mes N(2),;
d01 N(2), d02 N(2), d03 N(2), d04 N(2), d05 N(2), d06 N(2), d07 N(2), d08 N(2), d09 N(2), d10 N(2),;
d11 N(2), d12 N(2), d13 N(2), d14 N(2), d15 N(2), d16 N(2), d17 N(2), d18 N(2), d19 N(2), d20 N(2),;
d21 N(2), d22 N(2), d23 N(2), d24 N(2), d25 N(2), d26 N(2), d27 N(2), d28 N(2), d29 N(2), d30 N(2), d31 N(2))
INSERT INTO grafik (god, mes,;
d01, d02, d03, d04, d05, d06, d07, d08, d09, d10,;
d11, d12, d13, d14, d15, d16, d17, d18, d19, d20,;
d21, d22, d23, d24, d25, d26, d27, d28, d29, d30, d31) ;
VALUES (2017, 01,;
0, 0, 8, 8, 8, 7, 0, 0, 0, 8,;
8, 8, 8, 0, 0, 8, 8, 8, 8, 8,;
0, 0, 8, 8, 8, 8, 8, 0, 0, 8, 8)
den = 15 && не рабочий день
? PADL(den,2,"0") + " - " + IIF(EVALUATE("grafik.D" + PADL(den,2,"0")) > 0, "рабочий день", "не рабочий день")
den = 16 && рабочий день
? PADL(den,2,"0") + " - " + IIF(EVALUATE("grafik.D" + PADL(den,2,"0")) > 0, "рабочий день", "не рабочий день")
? "количество рабочих часов по графику - " + STR(d01+d02+d03+d04+d05+d06+d07+d08+d09+d10+d11+d12+d13+d14+d15+;
d16+d17+d18+d19+d20+d21+d22+d23+d24+d25+d26+d27+d28+d29+d30+d31,3)
m.kol_rd = 0
FOR den = 1 TO 31
m.kol_rd = m.kol_rd + IIF(EVALUATE("grafik.D" + PADL(den,2,"0")) > 0, 1, 0)
ENDFOR
? "количество рабочих дней по графику - " + STR(m.kol_rd, 3)
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Вопрос не в том "зачем" (ну банально - для отслеживания сроков выполнения поручений или осуществления доставок), а в том что крайне сложно это сделать.
Приведенный код считает исключительно число рабочих дней с 1-го по последний день месяца (и то, если корректно заполнены "несуществующие даты" типа 30-го февраля). Если нужно определить сколько рабочих дней с 15-го января до 10 мая - за..манаешься писать код. И да, куча обращений к полям по "вычисляемым именам" - о чём я и говорил - признак плохо спроектированной структуры данных.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Igor Korolyov
Этот код как раз и работает со списком выходных дней - никакой таблицы на 31 колонку с отметками выходных в нём нету!
Только вместо таблицы с датами используются строки с ними же, и вместо поиска в таблице идёт поиск элементов в строке. По логике - один в один как я и говорил. Только без собственно таблицы.

А сами "табели" - без проблем ведутся "в колонку", а для показа пользователям (можно и для редактирования - хотя не очень хороший код придётся писать для этого) "разворачиваются" в широкую шахматку.

Этот код как раз показывает, что с датами нет никаких "макро на макро" с устрашающими запросами.
Непонятно, зачем нужно "разворачиваются", когда и так "развернуто".
С каких это пор лишний цикл FOR...ENDFOR стал называться "за..манаешься" - просто в приведенном примере почему-то не используется функция FIELD(i) в соответствии с DAY(<дата>).
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
ЫЫЫЫЫЫ!

молчу, молчу ....
Ratings: 0 negative/0 positive
Re: Календарь с выбором произвольных дат
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
AndyNigmatec
ЫЫЫЫЫЫ!
молчу, молчу ....

Ведь порою и мычанье нам понятней всяких слов! (с)
Ratings: 0 negative/0 positive


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

On-line: 17 shumik73  (Гостей: 16)

© 2000-2024 Fox Club 
Яндекс.Метрика