Почившему в бозе (обанкротившемуся) и возродившемуся из ничего, как феникс из пепла, торговому холдингу - 'Торговые Залы' посвящаю эту песню и код на Фоксе. Пусть вечно живет и процветает расходная накладная , источник наших побед, зарплат и благ. Да здравствуют и процветают наши коммерческие заказчики , фирмы и фирмочки, дающие хлеб насущный скромным труженикам клавиатуры и монитора - программистам"
Из всего иногда можно извлечь пользу. Даже из вещей и людей , которые на первый взгляд неприятны. Скажем бюрократ , я считаю , что он - один из основных и лучших источников вдохновения и свежих идей для программиста. Кто , как ни бюрократ , любит все учитывать, подсчитывать и вообще все записывать и все знать. А кто как ни программист поможет ему это сделать. Особенно , если не безвозмезно, а за зарплату . Ну вот какой толк вообще может быть от календаря. Уж сколько классов календарей написано и сколько 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 m<>1 and (k=0 or k=2) ov=eval(zz) WITH ov .visible=.f. ENDWITH ENDIF *************************** IF m<>1 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 текстовых коробок ввода к полям таблицы . И все готово.
Ну вот , а теперь загадка. Какой отдел одним из первых подвергся регистрации своей работы? Угадайте с трех раз Ну конечно отдел автоматизации. Но разве этот отдел такого боится, напишем таймер для правильного заполнения календаря и будем работаь дальше.
Русский Фокс программист и в огне не горит и в бюрократии не тонет.