FileMaker. Часть 4
Создание программы ведения домашней бухгалтерии
[ 21 апреля, 2008 г ]Автор: А. Перла

Начинаем

Создадим новый файл. Командой New Database в окне Filemaker Quick Start укажем опцию Create empty database (создать пустую базу данных), указав расположение и имя рабочего файла. Теперь перейдем к формированию таблиц. Основную таблицу так и назовем - Transactions, и опишем в ней следующие поля:

date - здесь будет храниться дата создания транзакции (формат Date)

type - тип транзакции: Расход/Доход (формат Text)

category - категория к которой относится транзакция (формат Text)

split - (формат Number [11]) - именно в это поле пользователь будет заносить сумму транзакций. Но почему мы назвали его split? Дело в том, что мы хотим дать возможность пользователю вводить сумму не одним числом, а разбив ее на несколько сумм.

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

Repetions (повторения) - это возможность сохранять несколько значений в одном поле таблицы. Количество этих значений указывается в процессе формирования таблицы. (Окно Options, закладка Storage, поле Maximum number of repetions). Для нашего случая мы укажем значение - 11, хотя можем указать любое, какое нам кажется более целесообразным.

split comments (формат Text [11]) - очевидно, что ввод сумм транзакции может сопровождаться комментариями, причем при разбивке на несколько сумм пользователь должен иметь возможность прокомментировать каждую сумму. Для нашего примера с авто-сервисом это "запчасти", "работа" и т.п. Соответственно, поле split comments должно иметь такое же количество repetions, что и поле split. Впоследствии, расположив эти поля рядом, мы фактически получим таблицу их двух столбцов и одиннадцати строк.

amount income - сумма дохода для данной транзакции

amount expenses - сумма расходов для данной транзакции

Дадим некоторые пояснения. Мы предполагаем, что каждая транзакция описывает либо доход, либо расход по счету, так как это гораздо удобнее для пользователя. Однако для подсчета баланса и наглядного представления доходов и расходов гораздо удобнее использовать два различных поля. В зависимости от того, какой тип транзакции указал пользователь (Расход или Доход), заполняться будет только нужное поле, а второе останется пустым.

Как это сделать прозрачным для пользователя при вводе данных, мы рассмотрим ниже. В любом случае, поле должно рассчитываться автоматически. Фактически это сумма чисел, введенных в таблицу split. Для того, чтобы реализовать автоматический подсчет, присвоим полям amount income и amount expenses специальный тип - Calculation.

Нажав кнопку Options, мы увидим классическое для Filemaker окно Specify Calculation, в котором можно указать, с помощью каких функций рассчитывается данное поле. С этим диалоговым окном мы столкнемся еще не раз, а сейчас в нижнем поле диалога для поля amount income введем следующее:

If ( type = "Доходы" ; Sum ( split ) ; "" )

а для поля amount expenses:

If ( type = "Расходы" ; Sum ( split ) ; "" )

Поясним написанное для поля amount income (для amount expenses все аналогично). Мы используем функцию if - для выяснения, к какому типу относится данная транзакция (type = "Доходы"), в случае положительного ответа, функция if присваивает полю amount income первое значение после знака "точка с запятой", в нашем случае, Sum ( split ), в случае отрицательного ответа - второе значение. В нашем случае двойные кавычки заставят Filemaker оставить поле пустым. Функция Sum ( split ), как следует из названия, просуммирует все значения repetions поля split.

Обратите внимание: использовав всего только две строчки кода, мы уже реализовали в нашей будущей системе разбивку суммы транзакции на части и автоматический подсчет ее суммы!

Пока остановимся на формировании таблицы (впоследствии еще придется добавить некоторые поля) и перейдем к следующему этапу.

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

Разберем повнимательней полученный результат. Пользователь уже сейчас может вносить данные о проводке (транзакции). Распишем подробно параметры полей. (Пустое пространство слева понадобится для дополнительных функциональных элементов)

Поле Date. Лучше всего указать в формате ввода даты из выпадающего календаря: в диалоге Filed/Control Setup в графе Control Style - Display as указываем Drop-down Calendar. Для того чтобы в правой части поля отображалась специальная иконка календаря, отметим соответствующий пункт Include icon to show and hide calendar.

Поля type и category. Оставим, как обычный Edit Box.

Поля split и split comments. Оставим, как обычный Edit Box, однако это - не обычные поля, а, благодаря механизму Repetions, по сути, таблицы значений. Для того, чтобы поля отображались так, как показано на нашем рисунке, в диалоге Filed/Control Setup в графе Repetions укажем, с какой по какую строчку требуется отображение (в нашем случае, с первой по одиннадцатую), а ориентацию укажем как вертикальную.

Поля Amount Income и Amount Expenses. Если вы заметили, оба этих поля я разместил одно на другом. Зачем это? Как мы помним, эти поля вычисляются автоматически с помощью механизма Calculation. В зависимости от того, что введет пользователь в графу type - "Расходы" или "Доходы", заполнится соответствующее поле, а второе окажется пустым. Таким образом у пользователя создается полная иллюзия, что поле, отмеченное на рисунке как "Всего", только одно, когда на самом деле наша система уже на этапе ввода данных разделяет доходы и расходы. Как мы увидим в дальнейшем, это очень пригодится, когда мы начнем считать баланс. Поскольку оба поля вычисляются сами, без участия пользователя, то имеет смысл заблокировать ручной ввод в эти поля. Для этого вызовем команду меню Format - Filed/Control - Behavior и в появившемся диалоге снимем все галочки (пункты).

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


Источники: МакЦентр

Комментарии, обсуждение