МакЦентр: Apple компьютеры, iPod, полиграфическое оборудование, новости, обзоры, новинки мира Mac
FileMaker. Часть 5 [ 24 июня, 2008 г ]
Создание программы ведения домашней бухгалтерии

Продолжение цикла статей, посвященных изучению FileMaker. Продолжение статьи про создание программы для ведения домашней бухгалтерии.

В прошлый раз мы остановились на том, что создали простую, но уже функционирующую систему для учета домашней бухгалтерии при помощи FileMaker. Однако, как было замечено в конце той статьи, системе не хватает некоторых обычных для подобных программ функций: работа со счетами (аккаунты) и работа с категориями. Подробнее о принципах работы программ учета домашних финансов можно прочитать в статье "Финансы в порядке".

Категории

В нашей системе уже предусмотрена работа с категориями - существует поле category, которое пользователь может заполнить при создании/редактировании транзакции. Но возможность выбирать категорию из готового списка и редактировать по своему усмотрению - гораздо удобнее и эффективнее. Кроме этого, чтобы указать, к какому типу (доходы или расходы) относится данная транзакция, пользователь вынужден вручную вбивать в поле type соответствующее слово. Это неудобно и чревато серьезным сбоем - простая ошибка при наборе слова приведет к тому, что сумма транзакции не будет учитываться в подсчете баланса. Существует множество решений подобных задач, и большинство из них легко реализуется в FileMaker.

Все категории можно разделить на два вида: категории доходов (зарплата, продажа, дивиденды, проценты по вкладам и т.п.) и категории расходов (покупки, траты, платежи и т.д.). Вспомним Джефа Раскина - гуру интерфейсостроения и создателя первого Macintosh, который всегда указывал, что программа не должна заставлять пользователя вводить дублирующую информацию, то есть, должна быть как можно более интуитивно понятной. В нашем случае это означает, что, выбрав ту или иную категорию, пользователь уже тем самым указывает, к какому типу относится данная транзакция - к доходам или расходам.

Действительно, было бы совершенно нелепо, если бы наша программа позволяла транзакцию категории "платежи за интернет" отметить как "доходы". Значит при выборе той или иной категории поле type должно заполняться автоматически.

Начнем с того, что создадим списки категорий. Для этого потребуется создать две новые таблицы. Выбираем пункт меню File - Manage - Database и в закладке Tables создаем таблицы Category Expenses (категории расходов) и Category Income (категории доходов). В каждой из таблиц создадим по два поля:

- name. Формат Text. Это название категории

- global. Формат Number. Кроме того, нажав кнопку Options и выбрав закладку Storage, присвоим этому полю признак Global, аналогично тому, как мы это делали для поля balance в прошлой статье. Теперь это поле превратилось в глобальную переменную, "прикрученную" к таблице. Зачем потребовалась поле global - мы увидим в дальнейшем.

Теперь у нас есть две таблицы категорий. И соответственно, FileMaker создал два Layout для каждой из таблиц. В этой статье мы не будем останавливаться на создании редактора категорий с кнопками и т.п., - с точки зрения обучения FileMaker, эта работа выглядела бы аналогично созданию режима редактирования транзакций. Пойдем более простым путем. Выбрав соответствующий Layout, укажем пункт меню View - View as Table. Теперь можно вводить категории в поля таблицы аналогично работе с Excel. Учитывая, что список категорий вводится только в начале работы с системой, а потом только изредка редактируется, для нашей учебной программы такой способ можно назвать приемлемым.

Теперь взглянем на рисунок ниже, чтобы увидеть, как должен выглядеть режим редактирования транзакций, и чего именно мы хотим добиться, вводя списки категорий.

Итак мы видим, что редактор транзакций существенно преобразился. Пространство, оставленное свободным в прошлый раз, заполнено таблицами категорий. Раньше мы неоднократно указывали, что в Filemaker каждый Layout привязан к конкретной таблице, и вот теперь видим обратное - на нашем Layout Transaction показываются данные сразу из трех таблиц. Никакого противоречия здесь нет - ситуации, когда на одном Layout требуется использовать данные из других таблиц, встречаются достаточно часто, для этого в FileMaker существует специальный механизм связей между таблицами - Relation, а также инструмент Portal, с помощью которого и были созданы списки категорий в редакторе транзакций. Но сначала поговорим о Relations - связях.

Связи

Relation означает, что одна таблица связана с другой по какому-либо полю. Значения двух полей (в обеих таблицах) будут указывать, какие из записей одной таблицы отображаются на Layout, привязанном ко второй таблице. Возможно, это звучит несколько заумно, поэтому перейдем к реализации, чтобы на примере лучше уяснить суть.

Итак, нам нужно привязать таблицу категорий доходов Category Income (для Category Expenses весь процесс будет полностью аналогичным) к Layout Transaction таким образом, чтобы все записи таблицы (названия категорий), отображались списком в редакторе транзакций. Выберем меню File - Manage - Database. Relations определяется в этом диалоге, но нам нужно еще решить, по каким полям связывать таблицы. Сначала перейдем в таблицу Transaction и создадим там новое поле - numb. В качестве формата поля выберем формат Calculation и в появившемся диалоговом окне укажем способ автоматического вычисления поля:

Get ( RecordNumber )

Таким образом, для каждой записи значением поля numb будет является номер это записи. Теперь перейдем во вкладку Relationships. В этой вкладке каждая таблица отображается отдельным прямоугольнsv окошком с перечислением полей. Нажав вторую кнопку внизу слева (плюсик над линией связи), создадим связь между полем numb таблицы Transaction и полем global таблицы Category Income как показано на рисунке. Повторим операцию для таблицы Category Expenses.

Ну вот и поле global пригодилось. То что это поле является "глобальным", то есть, переменной, привязанной к таблице, для нашего случая очень важно - таким образом с каждой записью таблицы Transaction оказывается связаны ВСЕ записи таблицы категорий. Поле numb не может быть пустым, иначе связь работать не будет, поэтому мы сделали его автоматически вычисляемым. Само значение поля numb нас в данному случае не интересует, я использовал вычисление по номеру записи, что дает каждой записи уникальность, но можно было указать любое выражение или просто число.

Нужно понимать, что рассмотренный сейчас частный случай является, пожалуй, самым простым случаем применения связей между таблицами в FileMaker. Грамотно оперируя значениями связанных полей, можно настроить систему так, чтобы каждой записи одной таблицы соответствовали только определенные (либо только одна) записи другой таблицы. Приведем пример. Допустим, требуется, чтобы в списке категорий расходов в нужный момент отображались только категории одной группы из нескольких: авто, медицина, питание и т.п. В таблице категорий тогда создается еще одно поле, в которое будет заноситься название группы, к которой относится данная категория, а в таблице транзакций нужно создать поле для указания группы. Теперь, если в диалоге Relationships мы создадим связь между этими полями, то при вводе в поле "группа категорий" таблицы транзакций в списке категорий будут отображаться только те категории, которые относятся к этой группе. Мы не будем реализовать подобный механизм в нашей программе (здесь он нецелесообразен), но описали его с целью иллюстрирования применения связей в FileMaker. Теперь перейдем к созданию списка категорий.

Список категорий

Для создания списка используется инструмент Portal. Можно выбрать соответствующую кнопку из панели Status Area или выбрать пункт меню Insert - Portal. Естественно, все эти манипуляции должны происходить в режиме Layout Mode. Выбрав инструмент Portal и нарисовав будущий список, мы оказываемся в диалоге Portal Setup. Здесь, в первую очередь, потребуется указать "связанную" таблицу, записи которой будут отображаться в портале. Кроме этого, мы можем указать параметры их отображения:

- порядок сортировки записей

- разрешить ли удалять записи прямо из портала

- показывать ли вертикальную полосу прокрутки

- скрывать вертикальную полосу прокрутки если все записи умещаются в портале.

- количество строк в портале и с какого номера требуется начинать отображение

Нажав "Ок" мы окажемся в диалоге Add Fields to Portal, где нужно указать, какие поля требуется отображать в портале. Для нашего случая это только поле name.

В итоге должно получиться что-то вроде показанного на рисунке:

В портале я добавил значок стрелку, который будет служить кнопкой для выбора нужной категории. Если вернуться к началу статьи и еще раз взглянуть на рисунок 1, то станет понятно, как эта кнопка работает. Важно знать, что в пределах строки портала можно размещать какие угодно элементы и давать им произвольные размеры. FileMaker позволяет превратить портал из скучного построчного списка в сколь угодно сложный и более наглядный способ отображения записей связанных таблиц, добавляя требуемые элементы управления этим списком. Единственное ограничение: все элементы портала не должны выходить за пределы его строки. Сам размер строки ограничен только фантазией разработчика. Тем не менее, в нашей системе ограничимся добавлением кнопки выбора категории.

Для описания реакции системы на нажатие кнопки потребуется создать два коротеньких скрипта - один для категорий доходов, другой - для категорий расходов. Как создаются скрипты и как "привязываются" к конкретной кнопке, рассказано в предыдущей статье, так что приведем текст самих скриптов:

Для категорий доходов создадим скрипт set income category:

Set Fiield [Transactions::category; Category Income::name]

Set Fiield [Transactions::type; "Доходы"]

Первая строка устанавливает название категории в данные о редактируемой транзакции, а вторая строка указывает, что данная транзакция описывает доходы. Аналогично для категорий расходов скрипт set expenses category будет следующим:

Set Fiield [Transactions::category; Category Excel::name]

Set Fiield [Transactions::type; "Расходы"]

Ну что же, мы добились чего хотели - пользователю нашей системы больше не придется вручную указывать тип транзакции и категорию, теперь достаточно одного щелчка мыши. Нас не должно смущать, каким образом при нажатии на кнопку стрелки требуемой категории FileMaker поймет, что нужна именно эта строка из списка. Эту задачу FileMaker полностью берет на себя.

Ну что же, нам осталось совсем немного: добавить в систему возможность работы с несколькими счетами - accounts. Полученных ранее знаний вполне должно хватить, чтобы реализовать такую функциональность.

В таблицу Transactions добавим поле account name c форматом Text. Создадим еще одну таблицу, назовем account с единственным полем name. Аналогично с таблицами категорий в режим Table View создадим несколько записей - названия счетов.

В режиме редактирования транзакции нарисуем новое поле и помощью диалога Fields/Control Setup привяжем его к полю account name. Не выходя из диалога укажем способ отображения поля - Control Style - как Drop-down list - выпадающий список. В качестве значений списка (Display values from) нам требуется указать таблицу accounts. Для этого из выпадающего списка Display values from выберем пункт Manage Values Lists... и оказавшись в соответствующем диалоге создадим новый список значений.

Теперь нашу систему можно считать законченно а результат работы можно посмотреть на рисунке.

В заключение еще раз напомним, что целью статей не ставилась задача описания создания конкурентоспособной программы, а лишь продемонстрировать, как с помощью FileMaker и небольшого количества терпения можно создавать вполне способные рабочие системы для собственных нужд людям, относительно далеким от профессиональной разработки приложений.


Автор: А. Перла

Источники: