Разработка форм ввода данных
Прежде чем проектировать формы, необходимо определить требования к ним.
Форма «Справочник товаров»
Форма должна позволять вводить наименование товара и его цену. Причем на экране должен быть виден не один товар, а список. При вводе нового товара должен формироваться его код, как последовательность натуральных чисел. Форма должна иметь кнопку закрытия.
Форма «Список клиентов»
Форма должна позволять вводить имя клиента и его реквизиты. Причем на экране должен быть виден не один клиент, а список. При вводе нового клиента должен формироваться его код, как последовательность натуральных чисел. Форма должна иметь кнопку закрытия.
Форма «Учет заказов»
Поскольку объем данных о заказе значителен и на экране должно быть размещено достаточно много информации, форма должна содержать сведения об одном заказе. Эта информация включает данные одной строки таблицы «Заказы» и нескольких строк таблицы «Спецификация», т.е. форма должна состоять из основной и подчиненной форм. Для создания нового заказа в форму необходимо включить кнопку, нажатие которой создаст новую запись в таблице «Заказы», сформирует новый номер заказа и добавит в дату заказа текущую дату. Для отметки оплаты заказа требуется кнопка, вызывающая форму регистрации оплаты. Подчиненная форма должна включать строки таблицы «Спецификация», в каждую из которых входит «Наименование товара», «Цена», «Наценка», «Скидка», «Количество», а так же «Сумма», рассчитываемая как:
«Цена» * (1 + «Наценка» - «Скидка») * «Количество»
При вводе наименования товара в поле «Цена» должна автоматически заносится цена из справочника товаров. В конце формы необходимо сформировать итоговую сумму заказа. Форма должна иметь кнопку закрытия.
Задание! Сформулируйте требования к форме «Оплата заказов».
Требования к отчетным формам будут рассмотрены ниже.
Для понимания сути создаваемых форм необходимо отметить следующее. Каждая форма создается на базе таблицы или запроса и отражает данные хранящиеся в них. Так форма «Ввод справочника о товарах»связана с таблицей «Товар», форма «Ввод списка клиентов» связана с таблицей «Клиенты» и т.д.
Задание! С какой таблицей связана форма«Оплата заказов».
Описание создания формы «Ввод справочника о товарах»
В СУБД Access 2007 существует два режима представления форм приложения: перекрытие окон и окна как система вкладок. В данном проекте воспользуемся режимом перекрытия окон. Для его установки щёлкните кнопку настройки Access в верхнем левом углу окна. В результате появится всплывающее окно показанное на рис….
В нём необходимо нажать кнопку «Параметры Access». В появившемся окне во вкладке «Текущая база данных» установить параметры окна документа в положение «Перекрывание окон» как показано на Рис…
Далее нажать ОК.
На начальном этапе освоения ACCESS при создании формы удобнее воспользоваться мастером форм. Вызов мастера форм осуществляется путём выбора на главной панели инструментов пункта «Создание», в разделе «Формы» открывшейся панели выбирается пункт «Другие формы» . Как показано на рис. … в ниспадающем меню выбирается пункт «Мастер форм»
На экране появится окно, в котором надо выбрать таблицу, на базе которой строится форма и поля таблицы для включения в форму.
В создаваемую форму нужно включить все поля. Для этого достаточно в указанной форме нажать кнопку . После выбора полей и нажатия кнопки «Далее >» появится окно.
Поскольку в требованиях к форме говорится о списке наименований, необходимо выбрать позицию «ленточный». Тот же результат достигается и в табличной форме, однако в этом случае возможностей оформления окна формы становится меньше. После нажатия кнопки «Далее >» на экране появится окно:
Здесь необходимо выбрать стиль оформления формы. Автор выбрал «Стандартная». Вы можете воспользоваться любым из стилей.
В следующем окне нужно выбрать имя формы (по умолчанию совпадает с именем таблицы) и определить режим дальнейшей работы, т.е. показать форму или приступить к правке экранной формы в режиме конструктора.
Поскольку форма ещё не имеет окончательного вида необходимо установить режим «Изменить макет формы». После нажатия кнопки «Готово» на экране появится макет формы в режиме конструктора «Товар» (Рис…). Макет содержит заголовки и содержимое полей. Нам эта возможность не потребуется, поэтому это окно можно закрыть. В дальнейшем переход к правке формы или отчета, т.е. переход к режиму конструктора выполняется с помощью кнопок выбора режима работы с формой как показано на рис. ….
Теперь необходимо изменить макет так, чтобы он соответствовал требованиям к форме. Под изменением макета понимается изменение вида и стилей элементов управления уже существующих в макете и добавление новых элементов управления. На форме могут размещаться различные элементы управления, перечень которых указан на рис…..
Отметим основные элементы управления, которые будут использоваться в данной работе. К наиболее употребительным элементам управления относятся:
· Поле
· Надпись
· Кнопка
· Поле со списком
· Список
· Подчинённая рамка объекта
· Подчинённая форма
Каждый элемент управления выполняет определённые функции. Так поле отражает и позволяет изменять в форме данные одного поля таблицы или запроса из базы данных. Надпись позволяет размещать на форме произвольные тексты, которые делают форму более понятной. Элемент управления кнопка позволяет реализовывать функции выполняющие некоторые действия (закрытие формы, открытие других форм, выполнение программных фрагментов, решающих задачи управления действиями в форме). Поле со списком позволяет вводить данные в поле, а следовательно и в базу данных путём выбора из заранее подготовленного раскрывающегося списка. Список позволяет выводить в форме список значений данных из различных таблиц базы. Элемент управления подчинённая рамка объекта позволяет размещать в форме различные объекты, такие как листы Excel, документы Word и другие. Элемент управления подчинённая форма предназначен для вставки в форму другой, заранее разработанной формы. В Access 2007 существует ещё несколько полезных элементов управления, которые не используются в данном проекте, но могут быть весьма полезны в других разработках.
Макет формы имеет следующую структуру: раздел заголовка формы, область данных и примечание. В первом и последнем размещаются объекты, содержащие неповторяющиеся данные. В СУБД ACCESS используется объектно-ориентированный подход к проектированию приложений. Согласно этой концепции формы и отчеты рассматриваются как объекты, содержащие внутри себя другие объекты. Объекты (поля) области данных, как правило, связаны с данными таблицы или запроса и отображают экземпляры данных, содержащихся в них. Такие объекты называются связанными. Каждый объект имеет набор свойств и событий связанных с ним, которые можно посмотреть и изменить щелкнув правой кнопкой мыши на объекте и выбрав позицию «Свойства». В результате появится окно свойств, которое в зависимости от выбора вкладки имеет вид.
Все объекты имеют стандартный набор свойств соответствующий типу объекта. Свойства разделены на группы: «Макет», «Данные», «События» и другие. Свойства группы «Макет» отражают вид и расположение объекта на экране. Свойства «Данные» отражают состав и характеристики данных, которые содержит или с которыми связан объект. С каждым объектом в процессе работы с ним на экране могут происходить разные события. Причем для каждого типа объекта имеется свой набор событий. С помощью событий расширяются возможности работы с формой и ее объектами, путем связывания с любым из них фрагментов программ, которые выполняют действия при обработке события. Перечень событий каждого объекта отражается на вкладке «События».
В рассматриваемом проекте будут рассмотрены некоторые из событий в разделах, где эти события используются.
Добавление объекта в форму выполняется так: на панели объектов щелчком левой клавиши мыши выбирается тип объекта, затем курсор переносится в место окна формы, где планируется разместить объект и удерживая нажатой левую клавишу мыши выделяется область объекта. После этого будет создан объект или запустится мастер его построения. При создании объекта ему присваивается имя состоящее из наименования типа поля и порядкового номера объекта. Имя является одним из свойств и при желании может быть изменено. Описанные выше общие замечания по разработке формы позволяют осознано подойти к выполнению следующих действий. Пользуясь описанной панелью и изменяя свойства объектов, преобразуем в режиме конструктора форму к виду показанному ниже. Для этого заменим в разделе заголовков текст созданной надписи «Товар» на название формы, добавим в раздел примечаний кнопку закрытия формы и заменим поле «Единица измерения» на поле со списком. Для этого нужно:
1. Установить в свойствах объекта цвет фона, размер и цвет надписи, ввести текст надписи «Справочник товаров».
2. Создать кнопку для закрытия формы. При создании этого объекта запускается мастер построения кнопок.
3. Единицы измерения представляют заранее известный перечень наименований. Для того, чтобы дать возможность пользователю не вводить единицу измерения вручную, а выбирать из заранее заданного списка необходимо заменить связанное поле «Единица измерения» на поле со списком.
Перейдя в режим просмотра формы и введя часть данных, получим:
Пояснения к выполнению указанных действий:
1. Корректировка надписи «Справочник товаров» достаточно просто, поэтому дополнительных пояснений не требуется.
2. При создании кнопки запускается мастер построения кнопок, первым окном которого является окно приведенное ниже. В этом окне выбираются категории и действия кнопки как показано на рисунке. Категория «Работа с формой» имеет набор действий, среди которых нужно выбрать «Закрыть форму». После нажатия кнопки «Далее» появляются еще два окна, для которых выбрать «Далее» и «Готово».
В результате указанных в этом пункте действий на экранной форме создаётся объект «Кнопка», щелчок левой клавишей мышки на которой вызывает определённые действия. В данном случае – закрытий формы.
Действия, которые выполняются нажатием кнопки, описываются программным кодом, который запускается при возникновении события «Нажатие кнопки». В Access 2007 программирование обработки событий можно выполнять либо с помощью макросов, либо на VBA (Visual Basic for Application). Программирование с помощью макросов считается более безопасным с точки зрения вирусных атак, поэтому мастер построения кнопок создаёт кнопку с «внедрённым макросом», вид которого вы можете посмотреть нажав кнопку в событии «Нажатие кнопки» вкладки «События» окна свойств объекта. В Access 2007 существуют две формы макросов: внедрённые и изолированные. Внедрённый макрос становится компонентом формы, отчета или элемента управления, в которых он был создан, и не может быть преобразован в код VBA. Изолированные макросы представляют поименованные фрагменты программ написанные на макро языке. Они могут быть преобразованы в код VBA. Поэтому когда нужно преобразовать внедрённый макрос в код VBA, из него нужно создать изолированный макрос, а тот преобразовать в код VBA. Этот процесс будет рассмотрен ниже в контексте создания кнопки «Новый».
3. Замену поля «Единица измерения» на поле со списком можно выполнить следующим образом. Удалить поле «Единица измерения» и вставить на его место поле со списком. При этом запустится мастер построения полей со списком:
Поскольку единицы измерения представляют конечный список, который можно определить заранее, то необходимо выбрать фиксированный набор значений и нажать кнопку «Далее>». В результате появится окно, в котором нужно заполнить список единиц измерения, как показано ниже и перейти к следующему окну нажав кнопку «Далее>».
В следующем окне просто нажмите кнопку «Готово». В результате в области данных формы появится поле со списком, у которого нужно перетащить прикрепленную к нему надпись в область заголовка формы и заменить его содержимое на «Ед. измерения».
В результате выполнения указанных действий форма «Товар» в режиме просмотра должна выглядеть как показано выше. Недостатком такой формы является то, что для пользователя, который будет работать с приложением, непонятно, для чего нужен код товара. Он может ошибиться при его заполнении. Возникают дополнительные вопросы, которые к эксплуатации приложения отношения не имеют. Поэтому лучше организовать автоматическое формирование кода товара и скрыть его от пользователя приложения. Принцип создания кода товара для вновь вводимого наименования прост: сформировать новый код товара и занести его в поле «Код товара» перед тем, как запись из формы будет помещена в таблицу. Для этого можно воспользоваться следующим способом:
1. Создать несвязное поле в разделе примечаний, установить для свойства «Данные» в одноименной вкладке значение строки вычисляющей новый код товара
=Nz(DMax("[Код товара]";"[Товар]"))+1
2. Построить для события «До обновления» формы процедуру позволяющую добавлять во вновь вводимый товар код товара, вычисляемый в несвязном поле. Событие «До обновления» имеет следующий смысл. Связанные поля формы отражают данные содержащиеся в соответствующей таблице ( в данном случае таблице «Товар»). При вводе нового товара наименование, единица измерения и цена хранятся в полях формы и переносятся в таблицу только при переходе к следующей строке формы. Перед тем, как они будут помещены в таблицу, возникает событие «До обновления». Поскольку на этот момент для нового товара занесены все данные кроме кода товара, необходимо занести код, сформированный в несвязанном поле (см. предыдущий пункт) в поле «Код товара». Это делается с помощью фрагмента программы (см. рисунок ниже), который переносит рассчитанный в «Поле17» код нового товара в поле «Код товара». И уже полный набор сведений о товаре переносится в таблицу базы данных.
3. Перевести форму в режим просмотра, проверить правильность занесения кода товара и скрыть объекты «Код товара» и «Поле17».
Пояснения к выполнению указанных действий:
1. В примечании формы создадим несвязное поле. Система сама присвоит ему имя. В нашем случае это «Поле15».
У вас может быть имя с другим номером. В позицию «Данные» одноименной вкладки свойств поля с помощью построителя выражении вводится формула. Ввести формулу удобнее через построитель выражений, который вызывается из позиции «Данные» одноимённой вкладки свойств поля путём нажатия кнопки с многоточием, как показано на рис….
В результате появляется построитель выражения.
Для формирования функции в нём необходимо выбрать в левой колонке Функции →Встроенные функции, в средней По подмножеству , а в правой DMax и нажать кнопку Вставить. В результате в верхнем окне появляется заготовка функции как показано на рис…. Функция имеет три параметра: выражение с именем поля, максимальное значение которого нужно найти(«expr»), имя таблицы, в которой находится поле («domain») и необязательный критерий отбора строк таблицы («criteria»). Первые два выражения нужно заменить соответственно на имя поля ([Код товара]) и имя таблицы ([Товар]). Имена должны задаваться в двойных кавычках. Поскольку поиск максимального значения должен производиться во всей таблице, то критерий отбора нужно удалить. Смысл функции состоит в следующем. Функция
DMax(“[Код товара]”;”Товар”)
возвращает максимальное значение кода товара из таблицы «Товар». Если в таблицу не было введено ни одного данного, то функция вернет значение Null, которое соответствует понятию – нет данного. Поскольку специфическое данное Null не может участвовать в арифметических выражениях (выражение с его участием всегда будет Null), то при его наличии его нужно преобразовать в 0. Поэтому сформированное выше выражение должно использоваться как аргумент функции Nz. Функция