Любому из нас, разрабатывая какую-нибудь прогрымму, приходилось возиться со справочниками. И дело это нетак чтобы уж слишком радостное и захватывающее. Наверное, многие, запрограммировав справочник типа Sales пару десятков раз начинали задумываться, как энто дело унифицировать :). Меня как человека от рождения нелешонного любых человечиских пороков эта проблеммы настигла c поразительной скоростью. В резальтате сделал что сделал, вот
Прислал: Жихарев Дмитрий  Категория: Интерфейс
Набор классов для создания справочников.
Теперь кратко как это все работает.
Для демонстрации работы я выдернул кусок из вполне рабочей программы, что конечно не означает 100%
работоспособность куска, нуда рассмотреть по нему основной принцып возможно.
В демо проект входят несколько библиотек классов:
inctext.vcx
midatepic.vcx
project.vcx
splitter.vcx
spravoch.vcx – основная библиотека
xpbutton.vcx
несколько демонстрационных форм:
sprotdel.scx – основная форма с которой логически связаны все остальные
sprprof.scx
sprrazr.scx
sprsotrudn.scx
ну и прочий мусор, который даже описывать нестану ;)
Процесс создания нового справочника.
1. Идете в Tools>Options...> Forms
1.1. В группе Template classes ставите галгу радом с Form set:
1.2. Выбераете spravoch.vcx > frmsetsprav
1.3. Давите OK.
2. Затем в меню File>New... выбераете Form и жмете здоровенну кнопку New file.
3. На этом шаге нужно определить Data Еnvironment. Сдесь такой ньюанс, основная таблица должна
быть добавлена первой или должна быть прописана в InitialSelectedAlias.
4. Если вым нужны для отображения не все поля, накидайте их в грид сами. Не удаляйте первую
колонку. Оформление заголовков колонок устанавливается по образцу первой колонки. Возможно,
задание вычисляемых полей. Как это сделать посмотрите в демо форме sprOtdel. Также на форме
sprMain есть пара полезных своиств – sqlFields и sqlOrders. Почитайте к ним описание внизу
Properties Window.
5. Далше нужно накидать элементов редактирования на окна «Редактирование группы» и «Редактирование
записи». У кнопок Ок этих форм есть оброботчики призванные облегчить процесс записи. Для их
использования нужно прописать в Click контрола cntOk DoDefault(список параметров). Далее привиду
шапку одного обработчика с описанием передаваемых параметров.
===========================================================================
* tcName - имя поля которое нужно проверять на уникальность
* если не указано проверяется поле NAME
* если пустая строка, проверки на уникальность не производится.
* tlSposob - способ проверки
* .F. или опущено - проверка на уникальность осуществляется по всему
справочнику
* .T. - только в текущей группе
* tcErrorMessage - сообщение об ошибке, если поле не уникельно
LPARAMETERS tcFldName, tlSposob, tcErrorMessage
===========================================================================
В принципе все, можно запускать и опробовать.
Создание таблиц для справичника.
Справочник работает только с таблицами содержащимися в базе данных, причем таблицы должны
удовлетворять нескольким обязательным условиям.
Обязательная структура таблиц.
Id Numeric x
Pid Numeric x
Isfolder Numeric 1
Name Character x
Остальные поля по необходимости.
Индексы:
Id Primary Id
Pid Regular Pid
Isfolder Regular Isfolder
Name Regular UPPER(name)
DEL Regular DELETED()
Желательно заполнение у полей свойства Caption, т.к. оно используется для заполнения хадеров
колонок, если они небыли добавлены вручную.
Для поля Id необходимо создать Default value - присвоение уникального значение.
Необходимо заполнить поле Table Comment: на закладке Table прописав в нем русское название
справочника. Это название в дальнейшем будет использоваться для формирование капшинов для окон.
Просто блеск !
Я бы вообще все приложение посмотреть не отказался - хочется иметь эталонные приложения для
конкретной предметной области - склад и т.д.
Свое конструировать - получается хуже - работает но не так красиво ...
Ramil
Roman Koltsov
28.11.05 16:53:41
Обнаружил следующий "глюк" при использовании класса:
В основной библиотеке spravoch.vcx, имеется класс cntForSelection, содержащий объект TxtBorder, у
которого свойство "Visibility" установлено в "Protected" (это достаточно логично!). Теперь для
"воссоздания бага" создайте любую форму, разместите на ней объект /или экземпляр класса, кому как
угодно ;-) / cntForSelection, затем добавьте любую кнопку, где в ее методе Click разместите
какие-либо вычисления. Вполне естественно, при вычислениях, возникает желание добавить в код
кнопки следующие строки, как описано в книге "1001 Things You Wanted to Know About VFP" моего
любимого издательства "Hentzenwerke":
Roman Koltsov
28.11.05 16:54:17
... продолжение
ThisForm.MousePointer = 11 && HourGlass
ThisForm.SetAll('MousePointer',11)
Вот на второй-то строке приведенного кода программа и выдаст Вам ошибку из-за конфликта с
Protected Object TxtBorder (дескать он не существует!). Господа! По моему это чистейшей воды глюк
самого Fox'а, а именно ошибочной реализации метода SetAll!!!
Я использую Visual FoxPro 09.00.0000.2412 for Windows.
Пишите у кого какие на сей счет будут соображения!
Интересно так же мнение автора...
Влад Колосов
09.12.05 13:01:57
Непонятно в чем смысл класть картинку в контейнер в гриде.
Seeker
09.12.05 14:41:48
to Влад Колосов
Чтоб самому контролировать ее положение иначе фокс сам будет выбирать в каком углу ее показать.
Seeker
09.12.05 14:53:20
to Roman Koltsov
Честно говоря не понял в чем бага. Попытался воспроизвести ситуацию но ничего сверхестественного
не увидел. Сейчас у меня стоит 9-ка правда и классы уже местами подправленны. На сайте последний
раз это решение обновлял когда вышла только 8-ка помоему. Изначально все было написанно под 7.
Поэтому может что-то и глючить на новых версиях фокса.
Seeker
09.12.05 15:36:51
to Roman Koltsov
Честно говоря не понял в чем бага. Попытался воспроизвести ситуацию но ничего сверхестественного
не увидел. Сейчас у меня стоит 9-ка правда и классы уже местами подправленны. На сайте последний
раз это решение обновлял когда вышла только 8-ка помоему. Изначально все было написанно под 7.
Поэтому может что-то и глючить на новых версиях фокса.
Seeker
09.12.05 16:30:31
to Roman Koltsov
Честно говоря не понял в чем бага. Попытался воспроизвести ситуацию но ничего сверхестественного
не увидел. Сейчас у меня стоит 9-ка правда и классы уже местами подправленны. На сайте последний
раз это решение обновлял когда вышла только 8-ка помоему. Изначально все было написанно под 7.
Поэтому может что-то и глючить на новых версиях фокса.
Seeker
09.12.05 17:15:18
Извените за предыдущие несколько одинаковых сообщений, что-то у меня глюкануло видимо.
to Roman Koltsov 2
Тоже извеняюсь, предыдущий ответ был по первой части :) Прочитав вторую часть, убедился что да,
проблемма действительно есть. Но проблемма это самого фокса т.ч. единственным тут решением будет
не пользоваться Protected при проектировании классов а то что сейчас с Protected перевести в Public