- •Часть I. Хранение данных в таблицах 34
- •Глава 1. Создание вашей первой базы данных 35
- •Глава 2. Создание более сложных таблиц 66
- •Глава 3. Обработка листа данных: сортировка, поиск,
- •Глава 4. Блокировка неправильных данных 136
- •Глава 5. Связывание таблиц с помощью отношений 168
- •Часть II. Обработка данных с помощью запросов 206
- •Глава 6. Запросы, выбирающие записи 207
- •Глава 7. Основные хитрости, применяемые в запросах 241
- •Глава 8. Запросы, обновляющие записи ..272
- •Глава 9. Анализ данных с помощью перекрестных запросов и
- •Часть III. Отчеты 323
- •Глава 10. Создание отчетов 324
- •Глава 11. Проектирование сложных отчетов 356
- •Часть IV. Разработка пользовательского интерфейса
- •Глава 12. Создание простых форм 392
- •Глава 13. Проектирование сложных форм 426
- •Глава 14. Создание системы переходов 465
- •Часть V. Программирование в access 496
- •Глава 15. Автоматизация задач с помощью макросов 497
- •Глава 16. Автоматизация выполнения задач средствами языка
- •Глава 17. Написание кода с более развитой логикой 571
- •Часть VI. Совместное использование access 615
- •Глава 18. Совместное использование бд несколькими пользователями 616
- •Глава 19. Импорт и экспорт данных 650
- •Глава 20. Подключение Access к sql Server 692
- •Глава 21. Подключение Access к SharePoint 724
- •На профессиональном уровне. Преимущества хорошо спроектированной базы данных
- •Для тех, кто понимает. Когда программы Access недостаточно
- •Уголок ностальгии. Зачем опять изобретать колесо?
- •Уголок ностальгии. Сочетания клавиш в Access 2003
- •Часть I
- •Часто задаваемый вопрос. Использование чужой бд
- •На профессиональном уровне. Шаблоны, подходящие для разных целей
- •На профессиональном уровне. Работа Access в интерактивном режиме
- •Для тех, кто понимает. Использование Access бд, созданных в более ранних версиях программы
- •На профессиональном уровне. Проектирование бд для начинающих
- •На профессиональном уровне. Вставка больших значений в узкие столбцы
- •Для тех. Кто понимает. Если сомневаетесь, не удаляйте
- •Малоизвестная или недооцененная возможность. Копирование записи целиком за один шаг
- •Малоизвестная или недооцененная возможность. Сжатие бд
- •Часто задаваемый вопрос. У какого файла расширение laccdb?
- •Практические занятия для опытных пользователей. Изменение папки, которую Access использует для хранения бд
- •Малоизвестная или недооцененная возможность. Сворачивание ленты
- •Экономящая время подсказка. Создание ярлыка для таблицы
- •Глава 2
- •Для тех, кто понимает. Изменение типа данных может привести к потере информации
- •На профессиональном уровне. Нормативы максимальной длины
- •На профессиональном уровне. Как Access предотвращает дублирование записей
- •На профессиональном уровне. Почему так важна уникальность
- •Глава 3
- •Малоизвестная или недооцененная возможность. Настройка всех листов данных
- •На профессиональном уровне. Числа и специальные символы в текстовых полях
- •Практические занятия для опытных пользователей. Фильтры в противоположность запросам
- •Малоизвестная или недооцененная возможность. Поиск и замена
- •Глава 4
- •Для тех, кто понимает. Не требуйте слишком многого
- •На профессиональном уровне. Как работают индексы
- •Часто задаваемый вопрос. Индексы и производительность
- •Практические занятия для опытных пользователей. Вставка вашей маски в список масок программы
- •На профессиональном уровне. Создание списка подстановки, использующего другую таблицу
- •Глава 5
- •Часто задаваемый вопрос. Отключение обеспечения целостности данных
- •Для тех, кто понимает. Пользуйтесь каскадным удалением с осторожностью
- •Практические занятия для опытных пользователей. Изменение параметров подтаблицы
- •Часто задаваемый вопрос. Обновление списка
- •Для тех, кто понимает. Применяйте связи "один-к-одному" с осторожностью
- •Часто задаваемый вопрос. Работа со связями "многие-ко-многим"
- •Часто задаваемый вопрос. Печать ваших отношений
- •Часть II
- •Для тех, кто понимает. Не бойтесь подстановок
- •На профессиональном уровне. Синтаксис фильтра
- •Практические занятия для опытных пользователей. Как индексы ускоряют поиск
- •Малоизвестная или недооцененная возможность. Запросы на базе запросов
- •Для тех, кто понимает. Подумайте дважды, прежде чем изменять структуру таблиц
- •На профессиональном уровне. Сравнение: отношения и объединения
- •На профессиональном уровне. Изменение данных при использовании запроса с объединением
- •Глава 7
- •На профессиональном уровне. Синхронизация запросов
- •Малоизвестная или недооцененная возможность. Переименование поля в запросе
- •Часто задаваемый вопрос Банковское округление
- •Практические занятия для опытных пользователей. Улучшенные числовые форматы
- •Малоизвестная или недооцененная возможность. Использование случайных чисел для сортировки в случайном порядке
- •Практические занятия для опытных пользователей. Как извлечь первое слово из текстовой строки
- •Для тех, кто понимает. Вычисления для дат и времени
- •Глава 8
- •Аварийная ситуация. Когда Access блокирует ваше обновление
- •Малоизвестная или недооцененная возможность. Скрытие запроса
- •Глава 9
- •Часто задаваемый вопрос. Итоговый проигрыш; итоговый запрос против перекрестного
- •Для тех, кто понимает. Создание запроса с объединением для лучшей группировки
- •На профессиональном уровне. Правильный выбор групп
- •Малоизвестная или недооцененная возможность. Помещение сводных таблиц в их собственные формы
- •Часть III
- •Глава 10. Создание отчетов
- •Глава 11. Проектирование сложных отчетов
- •Глава 10
- •На профессиональном уровне. Выполнение тяжелой работы с помощью запроса
- •Часто задаваемый вопрос. Добавление изображений в отчеты.
- •На профессиональном уровне. Учитесь любить pdf-файлы
- •Часто задаваемый вопрос. Разные способы экспорта данных
- •Малоизвестная или недооцененная возможность. Формат по образцу.
- •Практические занятия для опытных пользователей. Разные линии сетки
- •Глава 11
- •Часто задаваемый вопрос. Ошибки выражений
- •Часть IV
- •На профессиональном уровне. Поля типа Счетчик в формах
- •На профессиональном уровне. Разные люди — разные формы
- •Малоизвестная или, недооцененная возможность. Вывод на экран изображений из бд
- •На профессиональном уровне. Семейство форм Access
- •Глава 13
- •На профессиональном уровне. Присоединенные элементы управления
- •Малоизвестная или недооцененная возможность. Повторное применение ваших любимых настроек стиля границ
- •Часто задаваемые вопросы. Осовременивание элементов управления Windows
- •Практические занятия для опытных пользователей. Как освободиться от привязки к сетке
- •На профессиональном уровне. Насколько велик ваш экран?
- •Глава 14
- •Малоизвестная или недооцененная возможность. Варианты сортировки и просмотра в области переходов
- •На профессиональном уровне. Кнопочные формы с несколькими страницами
- •За кадром. Меню кнопочных форм сохраняются в бд
- •Часть V
- •На профессиональном уровне. Макросы по сравнению с программным кодом
- •Практические занятия для опытных пользователей. Обработка ошибок макроса
- •На профессиональном уровне. Макрокоманды, которым Access не доверяет
- •На профессиональном уровне. ОтправитьОбъект работает с вашей программой элекронной почты
- •Часто задаваемый вопрос. Внедренный макрос
- •Глава 16
- •Малоизвестная или недооцененная возможность. Справка по Visual Basic
- •Для тех кто понимает. Как код связывается с событиями
- •Малоизвестная или недооцененная возможность Разбиение длинных строк кода
- •На профессиональном уровне. Взаимодействие с другими формами
- •Практические занятия для опытных пользователей. Получение нужного цвета
- •Часто задаваемый вопрос. Ленточные формы и неприсоединенные элементы управления
- •Практические занятия для опытных пользователей. Связывание записей с рисунками
- •Глава 17
- •Практические занятия для опятных пользователей. Применение более сложных переменных
- •Практические занятия для опытных пользователей. Применение пользовательских функций в запросах
- •На профессиональном уровне. Алгоритм Луна (Luhn Algorithm)
- •Часто задаваемый вопрос. Запуск других Windows-программ
- •На профессиональном уровне. Станьте знатоком статистических функции по подмножеству
- •Уголок ностальгии. Dао против аdо
- •Часть VI
- •Для тех, кто понимает. Поиск места в сети для вашей бд
- •На профессиональном уровне Указание местонахождения в сети
- •Часто задаваемый вопрос. Как поведут себя старые версии Aсcess?
- •Аварийная ситуация. Мистическая ошибка “Файл уже используется”
- •Часто задаваемый вопрос. Когда не следует пользоваться форматом accde
- •Уголок ностальгии. Отмирание страниц доступа к данным
- •Практические занятия для опытных пользователей. Разделение таблиц для более безопасных корректировок
- •Уголок ностальгии. Защита с помощью рабочих групп упразднена
- •Глава 19
- •На профессиональном уровне. Sql Server и SharePoint: два частных случая
- •Сберегающая время подсказка. Копирование из одной бд в другую
- •На профессиональном уровне. Опасность дубликатов
- •Малоизвестная или недооцененная возможность. Экспорт отчетов
- •На профессиональном уровне. Более внимательный взгляд на теги
- •Глава 20
- •На профессиональном уровне. Важнейшие причины перехода на sql Server
- •Часто задаваемые вопрос. Можно ли доверять корпорации Microsoft?
- •На профессиональном уровне. Проекты Access по сравнению со связанными таблицами
- •0 Запросах
- •Для тех, кто понимает. Синтаксические различия
- •Глава 21
- •Часто задаваемый вопрос. Путаница, связанная с SharePoint
- •На профессиональном уровне. Установка SharePoint
- •На профессиональном уровне. Пять интересных инструментов программы SharePoint, которые стоит опробовать
- •Малоизвестная или недооцененная возможность.
- •Малоизвестная или недооцененная возможность. Представление таблицы данных Access
- •Малоизвестная или недооцененная возможность. Параметры списков SharePoint
Часто задаваемый вопрос. Ошибки выражений
Почему выражение отображает #Error в режиме предварительного просмотра?
Как ни странно код #Error означает, что в вашем выражении не все правильно. Программа Access пытается вычислить его, попадает в аварийную ситуацию и выводит вместо результата сообщение об ошибке.
Часто легко увидеть наличие проблемы, если вернуться в Конструктор и посмотреть ошибочный элемент управления Поле. Обычно в верхнем левом углу элемента виден зеленый треугольник, сигнализирующий о наличии проблемы. Выделите его, и слева немедленно появится пиктограмма ошибки. Можно поводить указателем мыши поверх пиктограммы, чтобы увидеть описание проблемы, и щелкнуть ее кнопкой мыши для отображения короткого меню возможных способов ее решения, которые можно применить, и вариантов контроля наличия ошибок, способных заставить программу Access игнорировать эту проблему в будущем.
Сообщения об ошибках программы Access известны своей туманностью, поэтому даже когда вы найдете пиктограмму ошибки и получите подробности, реальная проблема может остаться во мраке неизвестности. Для того чтобы вернуть вас на правильную дорогу, предлагаю краткий перечень наиболее распространенных проблем:
вы забыли начать выражение со знака равенства;
вы ошиблись,' набирая имя поля, или сослались на поле, которого нет в базовой таблице или запросе;
вы вставили непарный набор скобок;
у элемента управления Поле то же имя, что и у одного из полей, используемых вами, Если у вас есть выражение =UnitsInStock+UnitsOnOrder и ваш элемент управления Поле назван UnitsInStock, Access приходит в замешательство. Для решения проблемы переименуйте Поле (например в UnitsInStockCalculation) с помощью Окна свойств. (Свойство Имя отображается в верхней части вкладки Все.)
Группировка
Группировка — неоценимое средство для придания смысла большим объемам данных счет упорядочивания их в группах меньшего размера. Затем можно выполнять вычисления в каждой отдельной группе. Рассмотрим список заказов в компании Boutique Fudge. В зависимости от того, как вы сгруппируете данные, можно посмотреть, лучше ли продается шоколадное молоко, чем шоколадное пиво, или сильнее ли клиенты из Нью-Йорка жаждут какао, чем клиенты из Алабамы, и т. д.
Существуют три способа применения группировки для анализа информации в отчете.
■ Применение группировки в запросе. В этом случае в ваш отчет не включаются подробности. Он только отображает вычисленные суммы, средние значения, максимумы или
минимумы. Вам не понадобятся изощренные колдовские приемы создания отчета для решения этой задачи — создайте сводный отчет с группировкой (как описано в разд. "Итоговые данные " главы 7) и затем используйте его для формирования отчета.
Применение группировки в отчете. В этом случае можно разделить информацию большого объема на подгруппы. При этом бы можете видеть все данные и применять промежуточные итоги и другие вычисления. Можно также добавить несколько уровней группировки для выявления глубинных тенденций.
Применение подчиненных отчетов. Этот метод создает тот же эффект, что и группировка в отчете. Единственное отличие — формирование отчета из двух отдельных частей.
Примечание
Подчиненные отчеты — во многом наследие более ранних версий программы Access. В Access 2007 функциональные возможности группировки настолько улучшены, что в подчиненных отчетах больше нет нужды. В данной книге уделяется внимание наиболее эффективному применению группировки, а подчиненные отчеты пропущены.
Группировка в отчетах
Для создания групп выполните следующие действия.
Перейдите в Режим макета или Конструктор.
Выберите поле, которое хотите использовать для сортировки. Обычно следует сортировать таблицу по тому полю, которое планируется применять для группировки.
Если вы хотите группировать по полю ProductCategoryID (идентификатор категории товара), которое формирует отдельную группу товаров для каждой категории, то начать следует с сортировки результатов по полю ProductCategorylD. В этом случае все товары одной группы перечисляются один за другим. (Можно сортировать и но однозначно определяемому полю из связанной таблицы ProductCategories, например, CategoryName. Поскольку у каждой категории товара — свое название, это поле отсортирует товары по группам столь же эффективно.)
Примечание
Если вы создали подстановку, у программы Access хватит сообразительности для использования при сортировке более информативного поля, а не связанного с ним поля. Поле ProductCategoryID использует подстановку, которая выводит на экран название соответствующей категории, а не связанный с ним идентификатор категории, до которого на самом деле никому нет дела. Когда вы щелкните правой кнопкой мыши поле ProductCategoryID и выберите команду сортировки, программа Access применит поле CategoryName для сортировки.
3. Для сортировки данных щелкните правой кнопкой мыши поле, по которому собираетесь сортировать, и выберите команду сортировки (например, Сортировка от А до Я (Sort A to Z) или Сортировка от минимального к максимальному (Sort Smallest to Largest)).
Точное название в меню команды сортировки зависит от типа данных, хранящихся в поле.
4 Щелкните правой кнопкой мыши поле, которое хотите использовать для группировки, и выберите команду Группировка (Group On). Программа Access отсортирует ваши результаты по этому полю и затем сгруппирует их.
На рис. 11.18 и 11.19 показаны два отчета, в которых товары сгруппированы по категориям.
Рис. 11.18. Этот простой табличный отчет отсортирован и сгруппирован по категориям за несколько быстрых щелчков мыши
Подсказка
Когда используется группировка, возможно, нет смысла оставлять заголовки столбцов в разделе макета страницы, т. к. каждый заголовок группы разрывает таблицу. Часто гораздо лучше располагать заголовки столбцов под названием группы так, чтобы они выводились в начале каждой группы (а не в верхней части каждой страницы). На рис. 11.18 применен этот подход (на рис. 11.19 он не нужен, поскольку в отчете вообще не используются заголовки.) К сожалению, для того чтобы применить эту более привлекательную организацию данных, вам придется удалить поля из автоматически создаваемого макета (см. разд. "Удаление полей из макета' ранее в этой главе).
Группировка включает дополнительные разделы в отчет. Если вы группируете с помощью ноля ProductCategoryID, ваш отчет получает новый раздел Заголовок группы 'ProductCategoryID' (ProductCategoryID Header), который программа Access располагает непосредственно над Областью данных (рис. 11.20). Это название группы содержит сведения о группировке — в данном случае, категории товара. В Области данных находятся данные всех записей, включенных в группу.
Примечание
Как вы увидите позже, можно добавлять несколько уровней группировки. В этом случае пса-грамма Access вставляет один заголовок группы для каждого уровня.
Рис. 11.19. Группировка так же хорошо функционирует и в отчетах со сложными нетабличными макетами. Но, возможно, придется потратить немного больше времени на определение начала и конца группы, поэтому подумайте о задании другого цвета фона для разделения категорий (с помощью свойства Цвет фона) и их выделения, как в данном примере. Или же можно использовать элемент управления Линия для создания разделительной черты в начале каждой категории. На рис, 11.20 показан этот отчет в Конструкторе
Тонкая настройка с помощью панели
Группировка, сортировка и итоги
Когда группировка задана, у вас появляются дополнительные возможности:
можно вставить дополнительную сортировку в пределах каждой подгруппы;
можно выполнить сводные вычисления для каждой группы;
можно расставить разрывы страниц в начале каждой новой группы.
Любой из этих вариантов легче всего добавить с помощью панели Группировка, сортировка и итоги (Group, Sort, and Total). Для ее отображения в Конструкторе выберите па ленте Инструменты конструктора отчетов | Конструктор → Группировка и итоги → Группировка и сортировка (Report Design Tools | Design → Grouping & Totals → Group & Sort)
или вРежиме макета — Работа с макетами отчетов | Формат → Группировка и итоги → Группировка и сортировка (Report Layout Tools | Formatting → Grouping & Totals → Group & Sort).
Рис. 11.20. Конструктор предоставляет самый легкий способ добавления содержимого в раздел заголовка каждой группы. В отчет ProductCatalog можно вставить в раздел Заголовок группы 'ProductCategoryID' дополнительные поля из таблицы ProductCategories (например, поле Description)
ПанельГруппировка, сортировка и итоги выводится в нижней части окна программы. На рис. 11.21 показан примерный вид экрана при отображении отчета (см. рис. 11.19) с товарами, сгруппированными по категориям.
Рис. 11.21. У данного отчета один уровень сортировки (по полю CategoryName в алфавитном порядке) и один уровень группировки (по полю ProductCategorylD). Для отображения дополнительных параметров для каждого уровня выберите его и щелкните мышью кнопку Больше (обведена). На рис. 11.22 показаны параметры группировки, которые можно изменить
Рис. 11.22. Панель Группировка, сортировка и итоги позволяет быстро задать подсчет промежуточных итогов, включение разделов заголовка и примечания и установку разрывов страниц для каждого имеющегося уровня группировки
В следующих разделах описываются функциональные возможности панели Группировка, сортировка и итоги.
Сортировка...
Позволяет выбрать поле, применяемое для сортировки. На рис. 11.21 поля сортируются по полю CategoryName и затем группируются по полю ProductCategorvID.
Группировка ...
Предоставляет возможность задать поле, применяемое для группировки. Этот параметр позволяет моментально включить группировку.
Сортировка от А до Я/от минимального к максимальному
Изменяет порядок сортировки. Точное название параметра зависит от типа данных, можно сортировать текст в алфавитном порядке, числа по возрастанию или убыванию или даты в хронологическом порядке.
По всему значению
Заставляет программу Access создавать индивидуальную группу для каждого отдельного значения в поле группировки. Если вы группируете по полю ProductCategoryID, этот параметр обеспечивает размещение каждой категории товаров в отдельной группе. Иногда подобный подход приводит к созданию слишком большого количества групп, что затрудняет последующий анализ (и расходует груды бумаги). В подобных ситуациях необходимо формировать более крупные группы, включающие больше записей. Если группируются товары по ценам или заказы по датам, возможно, лучше группировать по диапазону значений, как показано на рис. 11.23.
С итогами...
Промежуточные итоги — самое популярное свойство группировки. Они позволяют сравнивать количественно одну группу с другой. Панель Группировка, сортировка и итоги позволяет выполнять вычисления промежуточных итогов любых числовых полей (рис. 11.24).
Рис. 11.23. В случае дат или числовых полей можно выбрать создание группы, включающей целый диапазон значений. В данном примере группы формируются по цене с интервалом 5 долларов. В первую группу включены товары с ценой менее 5 долларов, во вторую — с ценами от 5 до 9.99 долларов и т. д.
В зависимости от того, что вы хотите получить, можно сосчитать количество значений, суммировать их, вычислить средние или определить максимальные и минимальные значения в группе. Эту информацию можно поместить в заголовок, который выводится в начале каждой группы, или в примечание, следующее в конце. В завершение вы можете дополнить отчет финальным общим итогом, который суммирует все промежуточные.
С заголовком...
Щелкните кнопкой мыши эту область для вставки текстового заголовка, который выводится в заголовке категории, в начале каждого раздела категории. Конечно, можно вставить заголовок и без помощи панели посредством добавления элемента управления Подпись в Конструкторе, но этот параметр предоставляет быстрый и удобный способ.
Рис. 11.24. В данном примере список товаров группируется по категории, передняя для каждой категории цена выводится в примечании (обведено)
С разделом заголовка/С разделом примечания
Можно вставить раздел заголовка в начале каждой группы и раздел примечания в конце. После добавления этих разделов в них можно вставить любое содержимое в Конструкторе. Чаще всего их используют для вывода информации, относящейся к группе в целом, отображают промежуточные итоги или рисуют разделительные линии с помощью элемента управления Линия.
Удерживать группу на одной странице
Этот режим позволяет избежать висячих заголовков категорий. В примере с каталогом товаров он гарантирует, что в конце страницы не появится название группы, например Beverages (напитки), а товары группы при этом не перейдут па следующую страницу.
Обычно программа Access не предотвращает неуместные разрывы страницы. Access просто старается заполнить до конца каждую страницу. Если вас это не устраивает, есть два
варианта. Можно выбрать режим обязательного размещения всей группы на одной странице (конечно, при условии, что группа занимает меньше одной страницы) или сохранения на одной странице заголовка группы и, по крайней мере, одной записи, принадлежащей группе,
Панель Группировка, сортировка и итоги не предлагает установить разрыв страницы в начале каждой группы. Для этого необходимо перейти в Конструктор, выбрать раздел заголовка группы и затем выбрать на ленте Страницу свойств в группе Формат, найти параметр Конец страницы. Задать значение До раздела для установки разрыва страницы в начале каждого раздела или После раздела — в конце раздела. (Вы не увидите разницы между этими вариантами, пока в отчете используются заголовок и примечание отчета. Если вы применяете заголовок отчета и используете значение До раздела, разрыв страницы устанавливается между заголовком отчета и первым разделом.)
Примечание
В Режиме макета, Представлении отчета или Конструкторе действие параметра Конец страницы незаметно. Оно отображается только в режиме Предварительный просмотр или при реальной распечатке отчета.
Рис. 11.25. В этом списке посещаемости для создания распечатки, совсем не похожей на типичный отчет, применяется несколько приемов, о которых вы узнали в данной главе. Отчет выводит список студентов, сгруппированных по классам. В отчете нет заголовка, а в заголовок группы для каждого класса вставлено несколько ключевых данных из таблицы Classes. Благодаря установке разрывов страниц список каждого класса начинается с новой страницы и за данными о каждом студенте следует строка нарисованных от руки элементов управления Прямоугольник, в которых можно отмечать посещаемость
Рис. 11.27. В данном отчете информация заказа преобразуется в подготовленный для печати счет с помощью группировки и еще нескольких приемов, которые вам уже знакомы. Исходная информация извлекается из таблицы OrderDetails (дополненная данными из таблиц Orders, Product и Customer). Элементы управления Линия отделяют разные разделы счета, автоматически генерируемые итоги сообщают вам общую стоимость заказа, в выражениях комбинируется несколько полей и дополнительные текстовые фрагменты (например, "Order History for" (сведения о сделанных заказах) и "Order #" (номер заказа)). Данный пример включен в БД Boutique Fudge с загружаемым из Интернета содержимым, иллюстрирующим материал данной главы
Если у вас несколько уровней группировки, некоторую информацию можно скрыть, так чтобы отображались только сводные данные. В Режиме макета просто выберите Работа с макетами отчетов | Формат → Группировка и итоги → Без подробностей (Report Layout Tools | Formatting → Grouping & Totals → Hide Details). Если применить этот прием к примеру, показанному на рис. 11.27, программа Access скроет построчное содержание заказа, и вы увидите лишь общую стоимость каждого заказа.
Подсказка
В примере со счетами создается отчет, печатающий счета для всех заказов вашей БД. Но вы можете воспользоваться фильтрацией (см. разд. "Фильтрация" главы 3) для отбора результатов для конкретного заказа или определенного клиента.