Автоматическая подстановка значения в поле ввода

Частсг для заполнения некоторых полей таблиц требуется вычислить выражение на основе данных в других полях этой таблицы и, возможно, связанных с ней таблиц. Чтобы при вводе данных не вычислять это значение каждый раз самостоятельно, требуется создать форму для ввода данных, выполняющую необходимые вычисления автоматически. Это позволит застраховаться от ошибок при вычислениях и сократит время ввода данных.
Представим себе такой пример. Есть таблица "Товары" со списком товаров, где для каждого товара указана его цена (таблица содержит поля "НаименованиеТовара" и "Цена", и первое поле является ключевым). Есть другая таблица "Заказы" со списком заказов на эти товары, содержащая информацию о типе и количестве заказанного товара (поля "НаименованиеТовара" и "Количество"), а также о его стоимости (поле "Сумма"). Таблица "Заказы" связана с таблицей "Товары" по полю "НаименованиеТовара" отношением "один-ко-многим". Требуется создать форму для добавления новых заказов так, чтобы при выборе необходимого товара из предложенного списка и после ввода заказанного количества в поле "Сумма" автоматически подставлялось значение стоимости всего заказа для данного товара.
Для решения поставленной задачи требуется выполнить следующие действия:
Создайте запрос, содержащий поле "Цена" из таблицы "Товары" и все поля из таблицы "Заказы". Сохраните его с именем "Заказано".

  1. Создайте форму "Заказы" на основе запроса "Заказано".
  2. Поместите в форму элемент управления Список, связанный с полем "НаименованиеТовара" источника данных формы.

Замечание
Это можно выполнить с помощью окна Список полей (Filed List), предварительно указав в режиме Конструктора таблицы "Заказы" для поля "НаименованиеТовара" на вкладке Подстановка (Lookup) значение Поле со списком (Combo Box) для свойства Тип элемента управления (Display Control) и имя таблицы "Товары" в качестве значения свойства Источник,строк (Row Source).

  1. Поместите в форму текстовые поля, связанные с полями "Количество" и "Сумма" источника данных формы.
  2. Для поля "Количество" в окне свойств раскройте вкладку События (Events). Для события После обновления (After Update) создайте процедуру обработки события со следующим содержанием:

Private Sub Количество_А?terUpdate()
Сумма = Цена * Количество End Sub
Таким образом, после ввода значения в поле "Количество" в поле "Сумма" будет автоматически подставлена вычисленная стоимость заказа. А поскольку поле "Сумма" является присоединенным к одноименному полю в таблице "Заказы", вычисленное значение автоматически попадет в таблицу.
Совет
Не всегда вычисляемые значения требуется сохранять в самих таблицах. Чаще всего достаточно только отобразить результат вычисления в вычисляемом поле формы или запроса для информирования пользователя. Ведь это значение можно вычислить в любой момент на основе данных, хранящихся в таблицах, и не потребуется выполнять проверку на правильность сохраненного значения при изменении значений полей, использованных в его вычислении, в других формах или непосредственно в таблице.
 
Создание многостраничных форм
Многостраничные формы используются в том случае, если данных, связанных с объектом, так много, что их невозможно разместить в форме, ограниченной размерами экрана.
Для создания многостраничных форм используются элементы управления Разрыв страницы (Page Break) и Набор вкладок (Tab Control). Более распространенным является второй способ создания многостраничных форм — с помощью элемента управления Набор вкладок (Tab Control). Для того чтобы посмотреть, как выглядит такая форма и как она устроена, вы можете открыть в режиме Конструктора форму "Сотрудники" (Employees) — пример многостраничной формы со вкладками в демонстрационном приложении "Борей". Форма "Сотрудники" содержит элемент управления Набор вкладок (Tab Control), состоящий из двух вкладок. Переключение между вкладками выполняется с помощью щелчка мыши по ярлыку вкладки.
Создание многостраничных форм с элементом Разрыв страницы
Рассмотрим процедуру создания формы, подобной форме "Сотрудники" (Employees) в приложении "Борей" (Northwind), но состоящую не из набора вкладок, а из страниц, разделенных элементом управления Разрыв страницы (Page Break).

  1. На панели инструментов База данных (Database) нажмите стрелку справа от кнопки Новый объект (New object) и выберите элемент Форма (Form).
  2. В появившемся диалоговом окне выделите элемент списка Автоформа: в столбец (AutoForm: Columnar) и в раскрывающемся списке выберите таблицу "Сотрудники" (Employees). Нажмите кнопку ОК.
  3. Автоматически будет создана форма, содержащая все поля из таблица "Сотрудники". Откройте ее в режиме Конструктора (например, выбрав команду Вид, Конструктор (View, Design View)).
  4. Высота формы будет около 7,5 см. Растяните нижний край области данных формы так, чтобы высота области данных стала в два раза больше — 15 см.

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

  1. Пользуясь линейкой разметки формы, слева от нее, заметьте деление напротив отметки 7,5 см и перетащите туда с панели элементов элемент управления Разрыв страницы (Page Break). Этот элемент управления всегда располагается у левой границы формы и определяет конец текущей страницы.
  2. Мысленно разделите все поля на форме на две группы: те, что относятся к служебным данным о сотруднике, и те, что относятся к его личным данным — так, как они разделены в форме "Сотрудники". Перетащите все поля, относящиеся к личной информации, в нижнюю часть формы — ниже элемента Разрыв страницы (Page Break). Эта часть формы будет служить второй страницей.
  3. Чтобы сделать форму более наглядной, добавьте сразу под элементом Разрыв страницы (Page Break) надпись с текстом Личные данные, а также растяните нижнюю границу раздела Заголовок формы (Form Header) на высоту 1 см и добавьте в этот раздел вычисляемое поле (без метки), содержащее выражение . Отформатируйте добавленные элементы так, чтобы их выделить.
  4. В многостраничных формах обычно не размещают полос прокрутки, это излишне, поэтому установите для свойства Полосы прогрутки (Scroll Bars) значение Отсутствуют (Neither) в окне свойств формы. Мы практически закончили работу над содержимым формы, должно получиться примерно то, что показано на. Для наглядности на рисунке мы обвели элемент Разрыв страницы.
  5. Перемещая рамку окна формы, установите высоту окна так, чтобы самый нижний край был около отметки 5,5 см на линейке разметки (так, чтобы в режиме Формы высота окна формы была примерно равна высоте заголовка формы плюс высота одной страницы — это 1 см + 7,5 см).
  6. С помощью кнопки Сохранить (Save) на панели инструментов сохраните созданную форму с именем "Сотрудники (с переводом страниц)".
  7. Откройте форму в режиме Формы (команда Вид, Режим формы (View, Form View)).

Созданная форма состоит из двух страниц. На первой странице размещены служебные данные о сотруднике, а на второй странице — личные данные. Переключение между страницами, как обычно, выполняется с помощью клавиш <PageUp> и <PageDown>. Но кроме этого, для удобства переключения можно добавить на каждую страницу специальные кнопки Служебные данные (Company Info) и Личные данные (Persorfal Info) с реакцией на событие Нажатие кнопки (Click), вызывающей макрокоманду переключения на другую страницу GoToPage с заданным номером страницы (в нашем примере — 1 или 2) или инструкцию DoCmd.GoToPage в процедуре VBA. Обратите внимание на поле, которое расположено в заголовке формы. Это вычисляемое поле, значение которого меняется для каждой записи в форме. Оно содержит имя и фамилию сотрудника. Это поле предназначено для того, чтобы при переходе на вторую страницу видеть имя и фамилию сотрудника — тогда пользователь всегда будет знать, с какой записью таблицы он работает.

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