"Дела давно минувших дней, преданья старины глубокой"
Владимир Журавлев, Visual FoxPro CLUB
Как-то я попробовал сосчитать значимость полученной информации по Фоксу из
разных источников.
Крути не крути, а большинство рецептов я подсмотрел на интернете у других
разработчиков, или они ответили на вопросы, которые я повесил или просто узнал
что то от друзей которых знаю лично или которых и в глаза не видел.
Научиться радоваться чужим удачным решениям более своих собственных -дается
не каждому. Каждую неделю кто то из коллег в фирме или из других мест с блеском
в глазах и гордостью ( чувствуя себя как минимум Эйнштейном) приносит выстраданное.
А я ему говорю, 1995 год Fox Adviser, 1996 Pinter Letters и такие то такие то
сайты, такие то места-все уже было и даже лучше.
Работа в торговой фирме требует каждый день каких то новых решений с поставленным
сроком-вчера. Как бы ты ни был быстр, а за всем не угонишься. Единственный выход
- много читать и переписываться с друзями - кто нибудь да выручит. А выручил
ты его, твой же рецепт тебе самому завтра пригодится.
" Босс всегда прав, если он не прав, смотри пункт первый"
Вот простая задачка.
Босс и другие руководители хотят рассылать свои указания другим сотрудникам.
Сидит торговый менеджер, набирает накладную с ужасной итоговой суммой, большей
, чем все Российские программисты зарабатывают лет за пять. Клиент стоит с деньгами
в руках. Нужно его отпустить и всячески удовлетворить, расцеловать и все прочее
чтобы пришел еще раз. Так нет, у Русских особая гордость и свой менталитет.
Глав Бух хочет немедленно этому менеджеру послать ценное указание, да так ,
чтобы он на него ответил, в промежутки между набором торговых строк с 5 тоннами
сахара и 20 тоннами муки.
" Вставайте товарищи , с богом ура, последний парад наступает" . Или спасайся
, кто может.
Или вот другая проблема совсем из другой области. Как бы мы не любили наш
ФОКС, он время от времени подкинет какую то подлянку. ( по совести сказать,
не делай он этого, за что бы мы зарплаты получали) То содержание индексов попортит,
то таг потеряет, то его выражение поломает, то название индексов в контейнере
баз данных перестанут соответсвовать им же в таблицах, то мемо поле порушится,
то несколько записей в нем слепятся в одну, то вместо данных залетят прямоугольные
нули, порушившие даже первичные ключи , объявленные не нулевыми. А то еще появится
незадокументированная нигде ошибочная ситуация- бегущее через экран сообщение-"Record
is not available".
Короче, программист должен остановить на короткое время общую работу и отремонтировать,
все что можно.
По этажам и комнатам не набегаешься, пока бегаешь, станет еще хуже. Опять посылаем
всем сообщение с просьбой выйти.
А отошел человек от компьютера и не видит Вашего сообщения , нужно через минуту,
если он не выполнил требование, вместо пользователя закрыть все его формы и
что можно и не можно сохранить.
Решение этих задач я скомпилировал из нескольких , найденных на Интернете.
К сожалению, сайты эти уже не сущесвуют, могу сообщить только авторов.-Рик Страул,
Bill o 'Connor.
Что для решения нужно?
Ну перво наперво постоянно живущий таймер, объявленный в головной программе,
с интервалом активизации около минуты -двух. Tm=createobject('mytimer')
В базовом классе формы устроить метод автосохранения -разгрузки.
Таблицы с сообщением пользователям , имеющим поля ключ пользователя или статус
всем, определенное значение которого значит срочное прекращение работы .
При входе в программу пользователь здоровается и его ключ записывается в специальную
таблицу со временем ввода, а при выходе из программы снова его ключ , время
выхода и статус -вышел . Туда же можно записать и имя компьютера.
И так все работающие пользователи известны.
Таймерное событие с некоторой частотой по ключу пользователя проверяем в таблице
сообщений, есть ли непрочитанное им сообщение или сообщение всем пользователям.
Если есть, выкидываем модальную форму с текстом сообщения и чекбоксом -прочитал.
По нажатии чекбокса помечаем сообщение в таблице как прочитанное.
Если пользователь не ответил на экстаординарное сообщение о полундре, то в следующем
акте активизации таймера запускается процесс автовыхода.
Проходимся по коллекции _screen.forms по _screen.formcount
Смотря всегда на _screen.activeform.name и запускаем
методы автосохранения выхода всех висящих форм и напоследок код выхода из приложения.
|