Разработка форм ввода данных

 

Прежде чем проектировать формы, необходимо определить требования к ним.

Форма «Справочник товаров»

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

Форма «Список клиентов»

Форма должна позволять вводить имя клиента и его реквизиты. Причем на экране должен быть виден не один клиент, а список. При вводе нового клиента должен формироваться его код, как последовательность натуральных чисел. Форма должна иметь кнопку закрытия.

Форма «Учет заказов»

Поскольку объем данных о заказе значителен и на экране должно быть размещено достаточно много информации, форма должна содержать сведения об одном заказе. Эта информация включает данные одной строки таблицы «Заказы» и нескольких строк таблицы «Спецификация», т.е. форма должна состоять из основной и подчиненной форм. Для создания нового заказа в форму необходимо включить кнопку, нажатие которой создаст новую запись в таблице «Заказы», сформирует новый номер заказа и добавит в дату заказа текущую дату. Для отметки оплаты заказа требуется кнопка, вызывающая форму регистрации оплаты. Подчиненная форма должна включать строки таблицы «Спецификация», в каждую из которых входит «Наименование товара», «Цена», «Наценка», «Скидка», «Количество», а так же «Сумма», рассчитываемая как:

 

«Цена» * (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. Функция

Nz(Выражение)

проверяет, является ли выражение в скобках равным Null. Если да, то она возвращает значение 0, в противном случае максимальный код товара. Для формирования кода нового товара к найденному максимальному коду нужно добавить 1. Таким образом, значением поля является 1, если в таблице «Товар» еще нет ни одной строки данных и увеличенный на единицу максимальный код товара, если в таблице уже существуют записи.

2. Для создания программы добавляющей код товара в новую запись необходимо с помощью правой кнопки мыши вызвать окно свойств, в котором выбрать вкладку «События» и для события «До обновления» выбрать позицию «Процедура обработки события». Далее, вызвав с помощью кнопки построитель процедур, ввести фрагмент программы.

If Nz([Код товара]) = 0 Then

[Код товара] = [Поле15]

End If

Смысл фрагмента состоит в следующем: по умолчанию код товара в таблице базы данных для вновь вводимого значения имеет значение Null. То есть, если вводится новый товар, то его код равен Null и выражение Nz([Код товара])будет равно 0.И, следовательно,полю «Код товара» необходимо присвоить значение, вычисленное в объекте «Поле15».

3. После того как будет проверена работоспособность этих средств, т.е. в режиме просмотра формы будет видно, что код товара формируется правильно, поле «Код товара» можно скрыть, установив свойство «Вывод на экран» в положение «Нет» и удалив совсем надпись «Код товара». Далее в форме можно установить размеры и вид шрифтов, цвета шрифтов и фона, после чего закрыть ее подтвердив предложение о сохранении изменений. В поле «Цена» нужно установить формат вывода на экран с двумя знаками после точки (копейки). Для этого в свойствах «Формат поля» и «Число десятичных знаков» нужно установить значения «Фиксированный» и 2 – соответственно. В итоге форма должна выглядеть примерно так.

 

Аналогичным образом разработайте форму

«Ввод данных о клиенте» и заполните её списком клиентов.

Описание создания формы «Заказы»

Разработка формы «Заказы» включает новые виды объектов и приемы работы с ними. Для того, чтобы приступить к разработке этой формы необходимо создать отдельно форму «Заказы», форму «Спецификация» и форму «Оплата», а затем включить форму «Спецификация» в форму «Заказы» в качестве подчиненной и установить вызов формы «Оплата» из формы «Заказы» с помощью кнопки.

Создание макета формы «Заказы»

 

Особенностью создания формы «Заказ» является то, что после запуска мастера построения форм необходимо выбрать внешний вид «В один столбец». Это позволяет разместить в форме данные одной записи. При создании макета формы в него необходимо включить поля «Код заказа», «Код клиента», «Дата заказа» и «Дата доставки» и переместить их в раздел заголовка формы, как указано на рисунке. При этом текст надписи к полю «Код заказа» лучше заменить на «Заказ N».

 

 

После изменения размещения объектов управления на форме она должна принять примерно следующий вид. При этом необходимо помнить, что в Access 2007 совокупность вышеуказанных полей автоматически объединяется в таблицу. Для того, чтобы разрешить перемещать и настраивть эти поля независимо, нужно выделить эту таблицу и далее нажать кнопку «Удалить» в разделе «Макет элемента управления» панели «Упорядочить». А далее можно настраивать каждое поле независимо.

 

 

 

 

Поле «Код клиента» лучше заменить на поле со списком. Проще всего сначала удалить поле «Код клиента» (выделив его и нажав клавишу Del), а затем вставить «Поле со списком». В форме «Товар» мы уже вставляли поле со списком. И там был выбран вариант «Будет введен фиксированный набор значений». Теперь в поле со списком нужно выбирать имена клиентов, которые ранее были введены в таблицу «Клиенты». Причем строку таблицы «Заказ» должен попадать «Код заказа», а в экранной форме отражалось бы название организации клиента. Это возможно сделать, выбрав в первом появившемся окне мастера создания поля со списком вариант «Объект «поле со списком» будет использовать значения из таблицы или запроса». Окна дальнейшего диалога построения поля со списком показаны ниже.

 

 

 


 

 

После нажатия кнопки «Готово» в последнем окне в форму «Заказ» будет вставлено поле со списком и она примет следующий вид.

При закрытии формы СУБД сохранит ее с именем той таблицы, на которой она была создана, то есть «Заказ».

Внимание! Вставленное поле со списком будет иметь имя не «Код клиента», а другое, назначенное системой. В нашем случае «ПолеСоСписком11». Эта информация пригодится далее.Пака приостановим работу с формой «Заказ» и приступим к созданию формы «Спецификация».

Создание подчиненной формы «Спецификация»

Закройте форму «Заказ» (она будет доработана позже) и создайте ленточную форму «Спецификация». Особенностями создания формы являются: расчетное поле «Стоимость», поле с итоговой суммой и автоматическое занесение цены в поле «Цена». Вид этой формы в режиме конструктора должен быть примерно таким.

Такая форма получается в результате следующих действий:

· Создайте ленточную форму «Спецификация» для одноименной таблицы;

· В разделе заголовка формы удалите надпись «Спецификация» из и поднимите надписи полей под верхний край раздела как показано на рисунке;

· Скройте поле «Код заказа», установив свойство «Вывод на экран» в положение «Нет» и измените его размер на максимально узкий.;

· Удалите поле «Код товара», вставив вместо него поле со списком, как было рассмотрено ранее. В Access 2007 необходимо помнить, что при создании списка полей в форме с помощью мастера поля и их наименования оформляются в виде таблицы, потому удаление и вставка поля отображаются как удаление и вставка столбца таблицы. При создании поля со списком в качестве таблицы выбора используйте таблицу «Товар», а в качестве полей для формирования списка товаров «Код товара» и «Наименование». После размещения поля со списком в области данных оно размещается поверх столбцов таблицы. Чтобы сделать его столбцом перетащите надпись поля с соответствующее место заголовка формы, а затем измените надпись, например, на «Наименование товара», как показано на рисунке. Поле создаётся с автоматически присвоенным именем, которое будет использовано ниже. В нашем случае это ПолеСоСписком13.

· Таким же образом добавьте в область данных несвязное поле, введя в свойство «Данные» выражение =[Цена]*[Количество]*(1+[Наценка]-[Скидка]). Это удобнее сделать воспользовавшись построителем выражений. Надпись поля поменяйте на «Стоимость» (см. рисунок).

· В примечание формы введите несвязное поле ( имя поля «Поле15»), введя в свойство «Данные» выражение =Sum([Цена]*[Количество]*(1+[Наценка]-[Скидка])). Не забывайте про построитель выражений. При его использовании возникает меньше ошибок. В этом поле будет рассчитываться сумма всего заказа. Поле лучше скрыть, задав в свойстве «Вывод на экран» значение «Нет». Это поле будет использовано для дальнейших построений. Запомните имя поля, которое создаст СУБД в вашем случае.

· Для автоматического занесения цены после выбора товара в свойство «После обновления» поля «Код товара» нужно вставить процедуру обработки, включающую следующий код:

[Цена]=DLookup("[Цена]", "[Товар]", "[Код товара]=" & ПолеСоСписком13)

 

Здесь полю «Цена» присваивается значение, возвращаемое функцией Dlookup , которая использует три параметра: имя поля с ценой, имя таблицы, условие отбора. Функция Dlookup выбирается из встроенных функций, предоставляемых построителем выражений в группе «По подмножеству». Условие представляет совой вычисляемое выражение, включающее текстовую константу и код товара из поля ПолеСоСписком13. Если введенный код товара будет, например, равен 2, то выражение даст "[Код товара]=2", и в таком виде будет передано функции Dlookup для поиска.

После внесения всех изменений сохраните форму «Спецификация».

Создание связанной формы «Оплата»

Еще одной формой, которая необходима для формы «Заказ» является форма «Оплата», которая в режиме конструктора имеет вид:

Форма создается для таблицы «Оплата» и имеет следующие особенности:

· Создать форму с помощью мастера для всех полей таблицы с внешним видом - ленточный;

· Скрыть поле «Номер заказа» и сузить его размер до минимального;

· Автоматически сформировать «Номер заказа» перенеся его из формы «Заказы». Для этого в событии «До обновления» формы «Оплата» необходимо с помощью редактора создать процедуру обработки события следующего вида:

If Nz([Номер заказа] )= 0 Then

[Номер заказа] = Forms![Заказ]![Номер заказа]

End If

Эта процедура для каждой новой записи значению поля «Номер заказа» присваивает значение одноименного поля из формы «Заказы».

· В примечание формы добавьте несвязанное поле с итоговой суммой по заказу, включив в свойство «Данные» формулу и изменив надпись как показано на рисунке.

· Закройте созданную форму с сохранением изменений.

 

Продолжение создания формы «Заказ»

 

После создания формы «Оплата» можно продолжить разработку формы «Заказы». В дополнение к уже созданным элементам формы необходимо:

· Вставить подчиненную форму «Спецификация»;

· Добавить кнопку «Новый», которая позволит создать запись для нового заказа, присвоив ему очередной номер и задав дату заказа равную текущей дате.

· Добавить кнопку, вызывающую форму «Оплата» с отображением записей только для данного заказа;

· Создать поле с итоговыми суммами по заказу.

Указанные действия выполняются следующим образом.

Откройте ранее разработанную форму «Заказ» в режиме конструктора. Вставка подчиненной формы:

На вкладке панели элементов «Конструктор» щелкнуть в группе «Элементы управления» кнопку «Подчиненная форма/отчёт», а затем при нажатой левой клавише выделить место под подчиненную форму в форме «Заказ». После этого запускается мастер построения подчиненных форм. Первым окном, которое появится на экране, будет:

 

 

Следующее окно позволяет установить связь между основной и подчиненной формами. Для этого нужно установить положение переключателей, как показано на рисунке.

 

Последнее окно запрашивает имя подчиненной формы. Здесь нужно просто нажать кнопку «Готово». Далее следует отрегулировать размер прямоугольника под подчинённую форму, чтобы форма «Спецификация» разместилась целиком.

Создание кнопки «Новый»

Форма «Заказ» создана в режиме «В один столбец» и отображает сведения об одном заказе. В таких формах нет свободной строки для добавления новой записи, как это происходит в ленточных формах (формы «Справочник товаров», «Списки клиентов» и т.д.). Поэтому нужно создать средство для создания новой (пустой) записи о заказе. Тут же надо предусмотреть занесение в новый заказ номера заказа и даты заказа. Номер заказа будет формироваться по известному принципу: максимальный существующий номер плюс 1. В качестве даты заказа в большинстве случаев удобно использовать системную дату компьютера. Все эти действия реализуются программным кодом привязанным к нажатию кнопки. Для этого создадим кнопку с надписью «Новый».

При вставке в форму «Заказ» кнопки «Новый» (действия по созданию кнопки смотри ниже) в Access 2007 в событие «Нажатие кнопки» , как указывалось выше, добавляется внедрённый макрос. Можно, конечно, сделать указанные действия в виде макросов, но для этого вначале нужно было бы изучить специфические средства макросов. Поэтому программный код будем создавать в VBA.

Итак, сначала в форму необходимо вставить кнопку из вкладки «Конструктор», как это было описано выше, и выбрав категорию «Обработка записей» и действие «Добавить запись». В окне выбора формы кнопки необходимо включить переключатель «Текст» и ввести слово – Новый. Созданная кнопка позволяет добавлять новые записи в таблицу «Заказ». При создании кнопки СУБД автоматически добавляет в событие «Нажатие кнопки» внедрённый макрос обработки события следующего вида:

Преобразовать внедрённый макрос в программный код на VBA в Access 2007 невозможно, потому сформируем из внедрённого макроса изолированный. Для этого выделим два первых оператора макроса как показано на рисунке и скопируем в буфер (Ctrl-C). Оператор в третьей строке должен выдавать сообщение об ошибке, если будет невозможно создать новую запись о заказе. Но для наших целей он не нужен. Затем на вкладке «Создание» выбреем позицию «Макрос» как показано на рисунке:

В появившемся окне конструктора макроса вставим из буфера выделенные ранее строки и сохраним макрос под именем, например «НовыйЗаказ». Затем в свойствах кнопки «Новый» выберем событие «Нажатие кнопки» и для его обработки укажем вновь сформированный макрос как показано ниже.

Теперь событие обрабатывает не внедрённый, а изолированный макрос и его можно преобразовать в код VBA. Это делается так:

 

 

На вкладке «Работа с базами данных» нажать кнопку «Преобразовать макросы формы». В появившемся всплывающем окне

нажать кнопку «Преобразовать». О завершении преобразования сообщается транспорантом

 

 

Теперь событие обрабатывает программный код на VBA:

'------------------------------------------------------------

' Кнопка18_Click

'------------------------------------------------------------

Private Sub Кнопка18_Click()

On Error GoTo Кнопка18_Click_Err

 

DoCmd.GoToRecord , "", acNewRec

 

Кнопка18_Click_Exit:

Exit Sub

 

Кнопка18_Click_Err:

MsgBox Error$

Resume Кнопка18_Click_Exit

 

End Sub

 

Этот программный код имеет следующий смысл.

 

 

Операторы On Error ,MsgBox Error$ ,Resume являются операторами БЕЙСИКа и служат для организации обработки ошибок. Это стандартный набор операторов, создаваемый мастером построения кнопок. Оператор DoCmd.GoToRecord , , acNewRec осуществляет создание новой записи о заказе и переход к ней.

Однако в задачу кнопки входит также создание нового номера записи и занесение текущей даты в дату заказа. Поэтому в процедуру после оператораDoCmd.GoToRecord , , acNewRecнеобходимо добавить следующие операторы:

[Номер заказа] = Nz(DMax ( "[Номер заказа]" , "[Заказ]")) +1

[Дата заказа] = Date()

DoCmd.GoToControl "ПолеСоСписком11"

Эти фрагментом программы в поле «Номер заказа»заносится максимальный код товара увеличенный на единицу; в поле «Дата заказа» заносится системная дата и последним оператором управление передается объекту «ПолеСоСписком11». Это поле со списком, которым мы заменили «Код клиента» ранее.

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