Условия достоверности, хранимые процедуры, триггеры, представления данных
Глава 14. Условия достоверности, хранимые процедуры, триггеры, представления данных
Условия достоверности ввода данных на уровне записей Триггеры Хранимые процедуры Использование триггеров и хранимых процедур Условия достоверности ввода данных на уровне поля таблицы Использование представлений данных Создание представления данных Сохранение созданного представления данных Просмотр представления данных Просмотр объема продаж товаров клиентам Параметры представления данных Редактирование данных
Хранимые процедуры
Хранимые процедуры
Для создания хранимой процедуры выполните следующие действия:
В окне проекта выберите базу данных. Перейдите в группу Stored Procedures (Хранимые процедуры). Нажмите кнопку New (Новый) (рис. 14.2).Использование представлений данных
Использование представлений данных
Таблицы базы данных предназначены для хранения данных, а для просмотра данных предпочтительнее использовать представления данных, которые позволяют объединять связанные таблицы, выбирать интересующие вас поля таблиц или объединить несколько полей в одно поле, вычислять итоговые значения, определять новые имена для выбираемых полей таблицы и задавать условие выборки данных. После создания представления данных вы можете использовать его как обычную таблицу в формах, отчетах и при создании запросов.
Представления являются незаменимым средством для ограничения доступа пользователей к отдельным записям таблиц. В этом случае вся работа с базой данных осуществляется через представления данных.
Замечание
Замечание
Описание представления данных хранится в словаре базы данных, поэтому для их просмотра вы должны предварительно открыть базу данных.
Использование триггеров и хранимых процедур
Использование триггеров и хранимых процедур
Рассмотрим несколько примеров использования триггеров и хранимых процедур для определения условия достоверности ввода данных и начальных значений полей таблицы.
Определение значения поля при добавлении новой записи
Определение значения поля при добавлении новой записи
Рассмотрим следующий пример. Чтобы создать для таблицы customer первичный ключ, в таблицу было добавлено поле, содержащее код клиента. Информация в данное поле должна заноситься программно, чтобы не нарушалась уникальность ключа. Для формирования и записи в таблицу кода клиента при добавлении новой записи создадим хранимую процедуру GetAutoNewNum.
Откройте окно проекта sales. Создайте в базе данных sales таблицу Records, которая будет использоваться для хранения последних введенных значений кода. Данная таблица содержит два поля. Первое поле предназначено для ввода наименования таблицы, второе — для указания последнего введенного числового кода в данную таблицу. При вызове хранимой процедуры значение второго поля указанной таблицы увеличивается на единицу, и процедура возвращает новое значение кода. Введите в созданную таблицу название таблицы Customer и число, указывающее количество записей, содержащихся в ней. Выберите в окне проекта таблицу Customer и нажмите кнопку Modify (Модифицировать). Для определения свойств поля, содержащего код клиента, перейдите на вкладку Fields (Поля). В поле ввода Default value (Значение по умолчанию) области Field validation (Проверка правильности ввода) задайте вызов функции GetAutoNewNum( ) , введя Getautonewttum ("Customer ") (рис. 14.4). Нажмите кнопку ОК для закрытия конструктора таблицы. Теперь необходимо определить функцию GetAutoNewNum. Откройте окно редактирования хранимой процедуры и введите следующие команды:FUNCTION GetAutoNewNum
LPARAMETERS CNameAliasGANN
LOCAL nDefaultValueGANN IF TYPE("cNameAliasGANN")="L"
= GetMessage ("Нужно ввести имя таблицы для определения начального
значения в таблице "+ALIAS()+"!",48,"Функция GetAutoNewNum")
RETURN 1
ENDIF
cNameAliasGANN=ALLTRIM(UPPER(cNameAliasGANN))
DO OpenTable WITH "SALES!RECORDS",1
IF !SEEK(cNameAliasGANN)
APPEND BLANK
REPLACE NameOfTable WITH cNameAliasGANN
REPLACE ColRecordsInTable WITH 1
ELSE
REPLACE ColRecordsInTable WITH ColRecordsInTable+1
ENDIF
nDefaultValueGANN=ColRecordsInTable
SELECT (cNameAliasGANN)
RETURN nDefaultValueGANN
Параметры представления данных
Параметры представления данных
В Visual FoxPro при создании представления данных вы можете задать параметры представления. Значения этих параметров будут запрашиваться при открытии представления. Например, в предыдущем примере мы создали представление данных, которое содержит итоговые объемы продаж товаров. Использование параметров позволит вам выбирать не все продажи, а объем продаж за определенный интервал времени, продажи конкретного товара или покупки определенного клиента.
При открытии представления, для которого заданы параметры, запрашиваются значения заданных параметров и выборка данных осуществляется с учетом введенных значений. Для определения параметров используется команда View Parameters (Параметры представления данных) из меню Query (Запрос).
Добавим в созданное в предыдущем примере представление данных параметр, указывающий дату, для которой будет осуществляться выборка.
Выберите в окне проекта представление данных sumcust и нажмите кнопку Modify (Модифицировать). В окне конструктора представления данных в меню Query (Запрос) выберите команду View Parameters (Параметры представления данных). На экране открывается соответствующее диалоговое окно. Это диалоговое окно содержит список всех параметров представления, для каждого из которых заданы имя параметра и его тип. Введите параметр Date_View и определите для него тип данных Date (рис. 14.12). Нажмите кнопку ОК для закрытия диалогового окна. Определите условие выборки данных для заданной даты. Для этого перейдите на вкладку Filter (Фильтр) конструктора и добавьте условие для поля ordsaiem.dDoc. Для выбора значения за конкретную дату используйте оператор ==, а в поле ввода Example (Образец) введите ?Date_View (рис. 14.13).При выборе таблицы из этого списка...
При выборе таблицы из этого списка в области Field name (Имя таблицы) отображается список выбранных полей. Для каждого поля вы можете определить признаки ключевого поля и разрешения модификации, которые устанавливаются с помощью флажка в столбцах, заголовки которых содержат изображение ключа и карандаша соответственно.
Кнопка Reset Key (Сброс ключа) устанавливает исходное состояние флажков разрешения модификации и ключевых полей. При этом сбрасываются все флажки в столбце разрешения модификации, а флажки в столбце признака ключевых полей устанавливаются только для тех полей, которые являются первичными ключами.
Кнопка Update All (Обновить все) устанавливает флажки в столбце разрешения модификации для всех полей, кроме ключевых.
Замечание
Замечание
Все выбранные на вкладке Update Criteria (Критерий обновления) параметры действительны только в том случае, если установлен флажок Send SQL updates (Передавать команду SQL по изменению исходной таблицы).
Просмотр объема продаж товаров клиентам
Просмотр объема продаж товаров клиентам
Рассмотрим пример создания представления данных, которое содержит итоговую сумму покупок клиентов. Представление данных будет содержать наименование предприятия, наименование товара и итоговую сумму покупок клиентом каждого товара.
Откройте окно конструктора представлений и добавьте в него таблицы Customer, Ordsalem, Ordsaled и Goods, используемые для создания нового представления. Установите связи между размещенными в окне конструктора таблицами. При создании связей между таблицами необходимо учитывать, что связь между ними осуществляется по следующим полям: Customer и Ordsalem — по коду клиента; Ordsalem и Ordsaled — по код заказа; Ordsaled и Goods - по код товара. В список Selected fields (Выбранные поля) перенесите название фирмы, имя клиента и наименование товара. Добавьте в список Selected fields (Выбранные поля) вычисляемое поле, содержащее сумму продаж:SUM(Ordsaled.nQuant * Ordsaled.nUnitPrice)
Просмотр представления данных
Просмотр представления данных
После задания в окне конструктора представлений условий для выбора записей и указания результирующих полей вы можете просмотреть результаты выполнения представления данных. Для этого выполните одно из следующих действий:
нажмите кнопку Run (Запустить) на стандартной панели инструментов; выберите команду контекстного меню Run Query (Выполнить запрос); выберите в меню Query (Запрос) команду Run Query (Выполнить запрос); нажмите комбинацию клавиш <Ctrl>+<Q>.На экране появится сформированное представление данных. Для просмотра созданного представления данных вы можете также использовать окно проекта или окно Data Session (Окно данных). Чтобы просмотреть представления данных в окне проекта, достаточно установить на него курсор и нажать кнопку Browse (Обзор). Если вы просматриваете представление в окне Data Session (Окно данных), откройте его как обычную таблицу и нажмите кнопку Browse (Обзор).
Проверка удовлетворения введенных значений заданному условию
Проверка удовлетворения введенных значений заданному условию
В данном примере определим условие проверки достоверности ввода данных для таблицы ordsaied, содержащей информацию о заказе. Например, при формировании накладной отпуска товара в кредит необходимо сравнивать итоговую сумму заказываемых товаров с максимально допустимым кредитом для данного клиента, содержащимся в таблице customer. Проверку будем осуществлять при вводе каждой позиции заказа.
Откройте окно проекта sales. Выберите в окне проекта таблицу ordsaied и нажмите кнопку Modify (Модифицировать). Для определения свойств таблицы перейдите на вкладку Table (Редактирование данных
Редактирование данных
В Visual FoxPro представления данных могут использоваться не только для просмотра результатов выборки данных, но и для редактирования таблиц, которые использовались при его создании. Создавая представления данных, вы можете указать признак редактирования выбираемых полей базовых таблиц. Таким образом, вы можете задать список полей для просмотра и редактирования. Например, при изменении фамилии, имени и отчества клиента вы должны видеть на экране наименование фирмы, фамилию, имя и отчество клиента, но можете редактировать только поля, содержащие фамилию, имя и отчество.
Для определения таблиц и полей, которые будут изменяться при модификации данных с помощью представления, используется вкладка Update Criteria (Критерий обновления) конструктора (рис. 14.15).
Определение свойств таблицы
Рис. 14.1. Определение свойств таблицы
Для определения достоверности ввода данных могут использоваться триггеры добавления и изменения и поля ввода Rule (Условие) и Message (Сообщение) области Record validation (Проверка правильности ввода записей). В поле Rule (Условие) вводится логическое выражение, которое может содержать вызов хранимой процедуры. Если значение этого выражения равно True (Истина), то считается, что введены допустимые данные и разрешается переход на другую запись или закрытие таблицы. В противном случае выводится сообщение об ошибке, которое было задано в поле Message (Сообщение).
Для создания хранимой процедуры предназначена группа Stored Procedures окна проекта
Рис. 14.2. Для создания хранимой процедуры предназначена группа Stored Procedures окна проекта
Открывайте окно редактирования хранимых процедур (рис. 14.3). которое содержит все ранее созданные хранимые процедуры, включая процедуры. создаваемые автоматически при определении условий целостности базы данных.
Окно редактирования хранимых процедур
Рис. 14.3. Окно редактирования хранимых процедур
Предупреждение
Редактирование или удаление хранимых процедур, которые Visual FoxPro создал автоматически при определении условия целостности данных, может привести к непредсказуемым последствиям.
Для редактирования хранимых процедур в Visual FoxPro вы можете использовать команду modify procedure, которая открывает окно редактирования хранимых процедур текущей базы данных.
Для удаления хранимой процедуры необходимо в окне редактирования выделить текст удаляемой процедуры и нажать клавишу <Delete> или в окне конструктора проекта установить курсор на ее наименование и выполнить команду Remove (Удалить) окна проекта.
Задание вызова хранимой процедуры
Рис. 14.4. Задание вызова хранимой процедуры
Определение условия...
Действия, выполняемые при добавлении новых записей
Триггеры позволяют не только проверять условие достоверности ввода данных на уровне записей, но и выполнять требуемые действия при добавлении, удалении и изменении записей. Рассмотрим один из примеров использования триггера insert.
В некоторых случаях полезно иметь таблицу, в которой содержится список новых покупателей, которые обратились в вашу фирму за последний месяц. Данная таблица очищается в начале каждого месяца и может использоваться для рассылки рекламной информации новым покупателям. Для хранения списка новых покупателей используется таблица Newcustomer.
В данном примере определим триггер insert для таблицы customer:
Откройте окно проекта sales. Выберите таблицу customer, содержащую список товаров, и нажмите кнопку Modify (Модифицировать). Для определения свойств таблицы перейдите на вкладку Table (Определение условия достоверности для поля nQuant
Рис. 14.6. Определение условия достоверности для поля nQuant
Окно конструктора представлений данных
Рис. 14.7. Окно конструктора представлений данных
Окно конструктора представлений данных похоже на окно конструктора запросов и отличается от последнего некоторыми дополнительно предоставляемыми функциями, позволяющими:
указать поля для модификации данных; задать параметры, значения которых будут запрашиваться при открытии представления данных; определить количество выбираемых записей.Для формирования представления данных вы можете использовать команды меню Query (Запрос) и кнопки на панели инструментов View Designer (Конструктор представления данных). Функции кнопок панели инструментов View Designer описаны в табл. 14.2.
Задание имени представления данных
Рис. 14.8. Задание имени представления данных
Для открытия сохраненного представления данных из окна проекта необходимо установить на него курсор и нажать кнопку Modify (Модифицировать).
Просмотр итоговых продаж товаров
Рис. 14.9. Просмотр итоговых продаж товаров
Вы можете просмотреть созданное представление данных в окне Data Session (Окно данных). Для этого выполните следующие действия:
В меню Window (Окно) выберите команду Data Session (Окно данных). Нажмите кнопку Browse (Обзор). В открывшемся диалоговом окне Open (Открыть) в области Select (Выбор) установите опцию Views (Представления данных). Выберите из списка Views in database (Представления данных в базе данных) (рис. 14.10) требуемое представление данных и нажмите кнопку ОК.Выбор представления данных
Рис. 14.10. Выбор представления данных
Окно Data Session после открытия представления данных Sumcust
Рис. 14.11. Окно Data Session после открытия представления данных Sumcust
Замечание
Замечание
При открытии представления данных в окне Data Session (Окно данных) показывается не только выбранное представление, но и все таблицы, используемые при его создании (рис. 14.11).
Совет
Совет
Для открытия представления данных вы можете также в командном окне или в программе воспользоваться командой USE.
Диалоговое окно для определения параметров представления данных
Рис. 14.12. Диалоговое окно для определения параметров представления данных
Ввод условия выбора даты
Рис. 14.13. Ввод условия выбора даты
Замечание
Замечание
Вопросительный знак перед именем параметра является признаком использования параметра
Замечание
Замечание
Если при создании представления данных вы задали несколько параметров, то для ввода значения каждого параметра будет открываться отдельное окно.
Диалоговое окно для ввода значения параметра
Рис. 14.14. Диалоговое окно для ввода значения параметра
Замечание
Замечание
Диалоговое окно View Parameter (Параметры представления данных) для ввода значения параметра рекомендуется использовать только при отладке представления. Вы можете определить переменные, наименования которых совпадают с именем параметра, и присвоить им требуемые значения в программе или форме. В этом случае при открытии представления параметры запрашиваться не будут.
Вкладка Update Criteria
Рис. 14.15. Вкладка Update Criteria
Перечень всех таблиц, поля которых используются для создания представления, приведен в раскрывающемся списке Table (
Задание параметров для редактирования фамилии, имени и отчества клиентов
Рис. 14.16. Задание параметров для редактирования фамилии, имени и отчества клиентов
Сохраните представление данных и откройте его для редактирования данных в режиме Browse (Обзор) (рис. 14.17).
Редактирование информации о клиентах
Рис. 14.17. Редактирование информации о клиентах
Сохранение созданного представления данных
Сохранение созданного представления данных
Сформированное в окне конструктора представление данных можно сохранить, выполнив следующие действия:
В меню File (Файл) выберите команду Save As (Сохранить как). В поле View Name (Имя представления) открывшегося диалогового окна Save (Сохранить) (рис. 14.8) укажите имя созданного представления данных. Нажмите кнопку ОК.Замечание
Замечание
Обратите внимание, что, в отличие от сохранения запроса, вам не требуется указывать место расположения представления, так как описание представления хранится в самой базе данных.
Создание представления данных
Создание представления данных
Для создания представления используется конструктор представлений данных. Существует несколько альтернативных способов его вызова, перечисленных ниже.
Выберите в меню File (Файл) команду New (Новый). В открывшемся диалоговом окне установите опцию View (Представление данных) и нажмите кнопку New file (Новый файл). В окне конструктора проекта на вкладке Data (Данные) перейдите в раздел Local Views (Локальные представления данных) выбранной базы данных и нажмите кнопку New View (Новое представление данных). Введите в командном окне Command команду create view.Замечание
Замечание
При любом из вариантов вызова для создания представления данных вы можете воспользоваться услугами мастера, который аналогичен мастеру создания запросов.
При вызове конструктора представлений открывается диалоговое окно Add Table and View (Добавить таблицу и представление данных), позволяющее разместить в конструкторе таблицы и созданные ранее представления данных. Для отображения представлений в этом диалоговом окне необходимо в области Select (Выбор) установить опцию Views (Представления данных). Выбрав необходимую таблицу или представление данных, перенесите их в конструктор, нажав кнопку Add (Добавить). Сформировав список таблиц. нажмите кнопку Close (Закрыть) для закрытия диалогового окна Add Table and View (Добавить таблицу и представление). Выбранные таблицы размещаются в открывшемся на экране окне конструктора представлений данных (рис. 14.7).
Тригеры
Таблица 14.1. Тригеры
Триггер |
Описание |
Insert (Вставить) |
Определяет действия, которые будут выполняться после добавления новой записи в таблицу |
Update (Обновить) |
Определяет действия, которые будут выполняться после изменения записи таблицы |
Delete (Удалить) |
Определяет действия, которые будут выполняться после удаления записи из таблицы |
Для определения триггеров введите в поля ввода Insert trigger (Вставить триггер), Update trigger (Обновить триггер) или Delete trigger (Удалить триггер) вкладки Table (
Назначение кнопок панели инструментов View Designer
Таблица 14.2. Назначение кнопок панели инструментов View Designer
Кнопка | Название | Назначение |
Add Table (Добавить таблицу) | Добавляет в представление новую таблицу или представление данных | |
Remove Table (Удалить таблицу) | Удаляет выбранную таблицу из запроса | |
Add Join (Добавить объединение) | Открывает диалоговое окно Join Condition (Условие объединения) для задания условия объединения таблиц | |
Show the SQL windows (Показать SQL-оператор) | Открывает диалоговое окно, в котором отображается SQL-оператор, соответствующий созданному представлению данных | |
Maximize the table view (Раскрыть панель представления таблиц) | Раскрывает на весь экран панель отображения используемых в представлении таблиц. Повторное нажатие на эту кнопку возвращает панели первоначальный размер |
Таблица конструктора таблиц
Таблица конструктора таблиц. В поле ввода Insert trigger (Триггер добавления) задайте вызов функции AddNewCustomer(), которая добавляет новую запись в таблицу NewCustomer. Для добавления новой хранимой процедуры AddNewCustomer откройте окно редактирования хранимых процедур и добавьте в него следующий текст:
procedure AddNewCustomer
nCurCdCustomer=icdCustomer
SELECT NewCustomer
APPEND BLANK
REPLACE icdCustomer WITH nCurCdCustomer
SELECT NewCustomer
RETURN .T.
Таблица окна конструктора выбранной...
Таблица) окна конструктора выбранной таблицы операторы сравнения, вызов хранимой процедуры или любое логическое выражение. Если результат вычисления выражения равен True, то считается, что введены допустимые значения. В противном случае сохранения введенных данных не происходит и формируется сообщение об ошибке. При использовании хранимых процедур вы сможете не только проверить условие достоверности ввода данных, но и задать действия, выполняемые при добавлении, удалении и изменении данных.
Вызов триггера Delete (Удалить) осуществляется:
при выполнении команды delete; когда вы помечаете запись на удаление в режиме Browse (Обзор) или Edit (Правка).Вызов триггера insert (Вставить) осуществляется в следующих случаях:
при выполнении команд append from, append from array/append blank; при добавлении в таблицу новой записи в режиме Browse (Обзор) или Edit (Правка); при выполнении команд import, insert - sql, recall; при снятии метки об удалении записи в режиме Browse (Обзор) или Edit (Правка).Триггер update (Обновить) вызывается, когда:
наступает любое событие, которое приводит к модификации записи (например, при изменении значения поля); выполняются команды gather, replace, replace from array, UPDATE - SQL.При использовании триггеров необходимо учитывать следующие ограничения, имеющиеся в Visual FoxPro:
при модификации записей, помеченных для удаления, и выполнении команды pack триггеры не вызываются; выполнение команды zap не вызывает триггер Delete (Удалить); при использовании буферизации ввода триггер update (Обновить) вызывается только при вызове функции tableupdate ().Для удаления триггера в окне конструктора перейдите на вкладку Table (
Триггеры
Триггеры
В Visual FoxPro для таблиц, входящих в состав базы данных, вы можете определить триггеры, приведенные в табл. 14.1.
Условия достоверности ввода данных на уровне поля таблицы
Условия достоверности ввода данных на уровне поля таблицы
Для определения условия достоверности ввода данных на уровне поля таблицы используется область Field validation (Проверка правильности ввода) вкладки Fields (Поля) окна конструктора таблиц. В поле Rule (Условие) задается логическое выражение, а в поле Message (Сообщение) — сообщение, отображаемое на экране, если логическое выражение возвращает значение False.
Определим условие достоверности данных для поля nQuant, содержащего количество купленного товара, таблицы ordsaled. При вводе количества товара необходимо автоматически проверять его фактическое количество на складе.
Для определения данного условия достоверности данных выполните следующие действия:
Откройте проект sales. Перейдите на вкладку Data (Данные). В разделе Tables (Таблицы) выберите таблицу ordsaled и нажмите кнопку Modify (Модифицировать). В окне конструктора таблицы выберите поле nQuant. В поле ввода Rule (Условие) области Field validation (Проверка правильности ввода) введите вызов функции CheckQuant ( ) . В поле ввода Message (Сообщение) введите текст сообщения: "Заказанное количество товара превышает его фактическое количество"(рис. 14.6). Откройте окно редактирования хранимых процедур и добавьте в него новую процедуру CheckQuant:procedure CheckQuant
nCdGoods = Ordsaled.iCdGoods
*определяем фактическое количество товара
SELECT nFactQuant;
FROM Goods;
WHERE iCdGoods = nCdGoods;
INTO ARRAY nQuant
* сравниваем заказанное количество с имеющимся на складе
RETURN Ordsaled.nQuant(1) <= nQuant(1)
Условия достоверности ввода данных на уровне записей
Условия достоверности ввода данных на уровне записей
В реляционных базах данных, к которым относится и Visual FoxPro, для управления данными могут использоваться не только прикладные программы, но и непосредственно сервер базы данных. Данная возможность реализуется с помощью условий достоверности ввода данных, триггеров и хранимых процедур, которые являются неотъемлемой частью базы данных. Удобным средством просмотра хранящейся в базе данных информации являются представления данных, которые содержат результат выборки из одной или нескольких таблиц, удовлетворяющих заданному условию. Представления данных имеют много общего с запросами и таблицами. Так же, как и для запросов, вы можете связывать несколько таблиц, указывать отображаемые поля, задавать условие выборки. Просмотр представления данных осуществляется аналогично просмотру таблицы Visual FoxPro.
Условия достоверности позволяют контролировать ввод данных средствами сервера на уровне записей и полей таблицы. В первом случае условие определяется в окне ввода свойств таблицы, а во втором — в окне свойств поля таблицы. Проверка на уровне записи обычно используется, если необходима проверка при добавлении или удалении записи, а также если условие проверки изменения записи требует анализа более одного поля.
При определении условий достоверности ввода данных используются триггеры и хранимые процедуры. Триггеры задают действия, выполняемые при добавлении, удалении или изменении записей таблицы. Хранимые процедуры содержат наиболее часто используемые процедуры, выполняемые сервером базы данных. Если вы определили условия достоверности ввода данных, их проверка осуществляется независимо от способа изменения данных в таблице.
Для определения свойств таблицы откройте окно конструктора для выбранной таблицы и перейдите на вкладку Table (
Установка редактируемых полей
Установка редактируемых полей
Рассмотрим последовательность действий при создании представления данных, позволяющего редактировать информацию в полях, содержащих фамилию, имя и отчество клиента.
Откройте окно конструктора представлений и добавьте в него таблицу Customer. В список Selected fields (Выбранные поля) перенесите наименование фирмы cCompany, а также cLastName, cFirstName И cSecondName. Для определения редактируемых полей перейдите на вкладку Update Criteria (Критерий обновления). Установите флажки разрешения редактирования для полей cLastName, cFirstName и cSecondName. Установите флажок Send SQL updates (Передавать команду SQL по изменению исходной таблицы) (рис. 14.16).В поле ввода Rule (Условие) области...
В поле ввода Rule (Условие) области Record validation (Проверка правильности ввода записи) задайте вызов функции checkMaxCredit о, которая сравнивает итоговую сумму заказа с максимально допустимым кредитом клиента. В поле Message (Сообщение) области Record validation введите текст сообщения (рис. 14.5) "Превышена допустимая сумма кредита клиента".