Взгляд на класс календаря с бюрократической точки зрения
Владимир
Журавлев, http://nsvisual.com
Почившему
в бозе (обанкротившемуся) и возродившемуся из ничего, как феникс из пепла,
торговому холдингу - 'Торговые Залы' посвящаю эту песню и код на Фоксе. Пусть
вечно живет и процветает расходная накладная , источник наших побед, зарплат
и благ. Да здравствуют и процветают наши коммерческие заказчики , фирмы и фирмочки,
дающие хлеб насущный скромным труженикам клавиатуры и монитора - программистам"
Из всего иногда можно извлечь
пользу. Даже из вещей и людей , которые на первый взгляд неприятны. Скажем бюрократ
, я считаю , что он - один из основных и лучших источников вдохновения и свежих
идей для программиста. Кто , как ни бюрократ , любит все учитывать, подсчитывать
и вообще все записывать и все знать. А кто как ни программист поможет ему это
сделать. Особенно , если не безвозмезно, а за зарплату . Ну вот какой толк вообще
может быть от календаря. Уж сколько классов календарей написано и сколько activex
календарей. А толку от них -только выбрать дату. Нет, мой прежний босс в 1997
году , золотая голова,
Павел Петрович Бугров говорит , чтобы завтра работа каждого работника в часах,
числах накладных, проводках и всем , чего бы он ни делал на рабочем месте ,
регистрировалась . Чтобы приход на рабочее место учитывался и чтобы это было
видно на календаре и учитывалось. У меня уже и люди в отделах, кому я поручу
эту самую регистрацию, есть, и приказ я по фирме заготовил. Этап второй- чтобы
это и на расчете зарплаты было видно. Срок , как обычно , до завтрашней зари,
а лучше до вчера. "Слушаю и повинуюсь" - сказала золотая рыбка и бросилась к
клавиатуре искать в интернетовской сети что нибудь подходящее. Классов с календарями
полно, но с нужными свойствами - ничего. Ну чтоже .
Возьмем контейнер и заполним
его label и textbox числом 7* 6 =42 штуки , одни для даты, другие
для ввода учитываемого параметра. На втором классе вместо текстовых коробок
-checkbox для регистрации явки или факта исполнения. Сверху на первым
рядом названия дней недели, над ними комбобокс для выбора недели с кодом в init
t=date()
for i =1 to 10
m=gomonth(t,i-5)
g=str(year(m))
g1=month(m)
do case
case g1=1
g2=" Январь"
case g1=2
g2=" Февраль"
case g1=3
g2=" Март"
case g1=4
g2=" Апрель"
case g1=5
g2=" Май"
case g1=6
g2=" Июнь"
case g1=7
g2=" Июль"
case g1=8
g2=" Август"
case g1=9
g2=" Сентябрь"
case g1=10
g2=" Октябрь"
case g1=11
g2=" Ноябрь"
case g1=12
g2=" Декабрь"
endcase
if i=5
h=g+g2
endif
this.additem(g+g2)
endfor
this.displayvalue=h
this.value=5
this.refresh
this.parent.st
и кодом click- st method класса
T=date()
this.dm=month(gomonth(t,this.cmb1.value-5))
this.dy=year(gomonth(t,this.cmb1.value-5))
m=gomonth(t,this.cmb1.value-5)
g=(year(m))
g1=month(m)
v="1/"+str(g1)+"/"+str(g)
dt=ctod(v)
IF dow(dt)1
b=dow(dt)-2
dt1=dt-b
ELSE
dt1=dt-6
ENDIF
k=0
FOR i=1 to 42
yy="this.tt"+alltrim(str(i))
zz="this.tx"+alltrim(str(i))
od=eval(yy)
ov=eval(zz)
WITH od
.value=day(dt1+i-1)
ENDWITH
WITH ov
.value=0
ENDWITH
m=day(dt1+i-1)
***************************
IF m=1 and k=1
k=2
ENDIF
************************
IF m=1 and k=0
ov=eval(zz)
WITH ov
.visible=.t.
ENDWITH
this.ibeg=i
k=1
ENDIF
*******************************
IF m1 and (k=0 or k=2)
ov=eval(zz)
WITH ov
.visible=.f.
ENDWITH
ENDIF
***************************
IF m1 and k=1
ov=eval(zz)
WITH ov
.visible=.t.
ENDWITH
this.iend=i
this.de=m
ENDIF
****************************
*******************************
IF m=1 and ( k=2)
ov=eval(zz)
WITH ov
.visible=.f.
ENDWITH
ENDIF
*******************************
ENDFOR
this.refresh
ss=alltrim(str(1))+'/'+alltrim(str(this.dm))+'/'+alltrim(str(this.dy))
aa=alltrim(str(this.de))+'/'+alltrim(str(this.dm))+'/'+alltrim(str(this.dy))
this.db=ctod(ss)
this.ds=ctod(aa)
Ну вот . Кликаешь комбобокс и подсказки дат располагаются над полями ввода .
Сами поля ввода очищаются.
Изобразим теперь таблицу для хранения с 31 полем и ключом сотрудника. Таким
же кодом автоматизируем подключение свойства controlsource текстовых коробок
ввода к полям таблицы . И все готово.
Ну вот , а теперь загадка.
Какой отдел одним из первых подвергся регистрации своей работы? Угадайте с трех
раз Ну конечно отдел автоматизации. Но разве этот отдел такого боится, напишем
таймер для правильного заполнения календаря и будем работаь дальше.
Русский Фокс программист
и в огне не горит и в бюрократии не тонет.
|