Создание форм в LibreOffice Base
Мы уже рассмотрели, как в LibreOffice Base создаётся база данных, формируются запросы и выполняется сортировка. Следующий этап — создание форм.
По сути форма представляет собой удобный и упрощённый интерфейс для ввода и редактирования данных в таблицы базы. Простой пользователь может испытывать сложности в работе со стандартным окном редактирования таблицы, а также иногда возникает необходимость разграничивать доступ к различной информации разным пользователям.
Создавать формы в LibreOffice Base можно так же как и предыдущие типы объектов: с помощью дизайнера или мастера форм. Мы испробуем оба варианта.
Для примера возьмём созданную ранее базу данных клиентов.
Здесь я вынуждена оговориться и признать, что при создании данного примера мы напоролись на Бритву Оккама: данные из таблицы Дисконтные карты должна была быть сразу включена в таблицу Клиенты. Верность этой ошибки подтверждает тот факт, что при создании связи мы получили тип «1-1», считающийся у проектировщиков не желательным. Поэтому я исправлю свою ошибку: создам новую сводную таблицу и перенесу в неё все имеющиеся данные:
Так как у СУБД этого типа нет специальных инструментов для объединения таблиц и данных в них, выносим закономерный урок, что исправлять ошибки проектирования в уже используемой базе данных довольно накладно.
А для наглядности создания форм с субформами (подчинёнными формами со связью «1-много») создадим таблицу Покупки, содержащую информацию о времени, дате, наименовании и сумме покупок клиентов:
Свяжем таблицы между собой по полю НомерДисконтнойКарты.
Итак, вернёмся к формам. Для таблиц Клиенты2 и Покупки мы сделаем две формы: одну для менеджера, который вносит данные по новым картам и связывается с клиентами и, соответственно, должен иметь возможность видеть и редактировать всю информацию, и другую — для кассира, который может только просмотреть данные клиента о бонусах и вносить информацию о покупках.
Откроем Мастер, выбрав пункт Использовать мастер для создания формы…
в окне Задачи
:
Из выпадающего списка Таблицы или запросы
выберем таблицу Клиенты и переместим все поля из списка Существующие поля
в список Поля в форме
:
На следующем шаге нам предлагается решить, нужна ли нам субформа. Так как мы собираемся получать информацию из двух таблиц — главной и подчиненной, нужна:
Сразу скажу, что Мастер автоматически свяжет для нас таблицы между собой, и при работе с формой мы будем видеть данные из таблиц, связанными по номеру дисконтной карты.
Для субформы выберем отображение всех имеющихся в таблице Покупки полей:
Теперь нам нужно выбрать расположение элементов на форме: для данных клиента целесообразнее выбрать столбцы или блоки — как правило, во время работы с подобными данными одномоментно нужна только одна запись, а не целый гурт. Я выбрала вариант Столбцы - подписи сверху
. А вот для покупок возьмём таблицу (или Лист данных
, как она названа в Мастере) — клиент и его покупки будут автоматически сопоставлены при выполнении формы и при выборе других вариантов отображения мы сможем увидеть только первую покупку клиента:
Нам шестом шаге выбирается источник данных, а по сути определяются права доступа. Мы предполагаем, что менеджеру доступны все действия, поэтому оставим настройки по умолчанию:
На следующем этапе можно изменить стиль элементов формы. Сейчас мы не будем этого делать и оставим всё, как есть:
Ну и восьмой, последний шаг — название формы и определение действий с ней. Так как мы ориентируемся на пользователя, назовём форму «Клиенты (для менеджера)»:
После нажатия кнопки Готово
, форма откроется на выполнение:
Внизу, под ней, есть удобная панель Навигация формы
:
С её помощью можно:
— найти нужную запись;
— последовательно просмотреть всю имеющуюся информацию;
— добавить/удалить/отредактировать и сохранить запись;
— сортировать и фильтровать данные;
— отобразить записи в виде таблицы из базы.
Согласитесь, основной функционал, необходимый пользователю, присутствует.
Теперь попробуем немного изменить внешний вид формы: закроем форму (естественно, с сохранением, если вы успели внести изменения) и отроем её на редактирование — на вкладке Формы
основного окна Base вызовем контекстное меню для нашей формы и выберем Изменить
. Откроется дизайнер (или редактор, как изволите), в котором мы можем изменить размер и расположение имеющихся элементов, добавить новые, запрограммировать их на выполнения конкретных действий и сделать многое другое. Вообще, по функционалу он напоминает IDE, пусть и сильно упрощённую. Поэтому рассказать обо всех её возможностях, да ещё и с примерами — дело целого курса, а не одной статьи. Но кое-что мы попробуем 🙂
Для начала немного изменим размеры полей и таблицы: одинарное нажатие на элементе высвечивает зелёные ключевые точки, потянув за которые можно изменить размер:
Немного опустим столбцы с данными о клиентах: для этого выделим все поля ввода с зажатым Shift’ом и сдвинем их вниз:
Добавим подписи к логически блокам о клиентах и покупках: для этого нам потребуется элемент Метка
с панели Элементы управления
слева. Нажмем на него и расположим над столбцами с информацией о клиентах:
Изменим её название и размер шрифта: двойной клик на метку откроет окно свойств, в котором мы изменим значение полей Текст
(именно его, а не свойство Имя
, которое обычно используется для программных обращений к элементу) и Шрифт
(до 12 пт):
Теперь скопируем метку (команды Копировать/Вставить
контекстного меню метки, либо комбинации клавиш Ctrl+C/Ctrl+V
) и озаглавим таблицу покупок, аналогично изменив текст метки. Получилось так:
Кстати, изменить названия созданных через Мастер полей и столбцов таблицы нельзя.
Ну и на закуску изменим фон формы: для этого откроем Галерею кнопкой и откроем в левом столбце папку Фоны
. Выберем в окне справа наиболее приемлемый вариант и применим его через пункт контекстного меню Вставить фоном->Страница
:
Также в галерее можно найти различный картинки, звуки и иконки для вставки на форму. Для примера я вставила картинку из папки Финансы 🙂
Закрываем галерею повторным нажатием на кнопку , сохраняем форму, закрываем редактор и запускаем на выполнение. В итоге форма выглядит так:
Для того, чтобы просто изменить цвет фона или вставить на его место своё изображение, воспользуйтесь пунктом основного меню Формат->Страница...
, вкладкой Фон
.
Теперь попробуем создать форму в режиме дизайна: откроем редактор форм через пункт Создать форму в режиме дизайна…
в окне Задачи
. Зададим для формы таблицу, с которой она будет работать, — на панели элементов управления найдём кнопку Свойства формы
и в открывшемся окне на вкладке Данные
выберем нашу базу данных и таблицу клиентов:
Добавим четыре текстовых поля и четыре метки с той же панели. Изменим текст меток на понятный для пользователя (как это сделать, рассказано выше) и назначим значения текстовых полей, открыв для них окно свойств. В нём изменим значения: пункт Поле данных
(вкладка Данные) на соответствующее поле таблицы, Метка
— соответствующая типу поля, Только для чтения
— Да (мы заранее договорились, что кассир не сможет править данные клиента):
Теперь вставим на форму таблицу для вывода информации о покупках. Сначала для этого нужно изменить свойства формы так, чтобы мы смогли получать данные из подчинённой таблицы. Для этого зайдём на вкладку Данные
свойств формы и изменим Тип содержимого
на Команда SQL — иначе у нас не получится работать сразу с двумя таблицами на форме, не прибегая к запросам (хотя по сути это как раз он и будет и ещё не известно, что удобнее — сформировать запрос привычным способом или так 😎 ). Нажмем на кнопку ...
для пункта Содержимое
и у нас откроется редактор запросов. Добавим в него таблицы Клиенты2 и Покупки и сформируем для них простой запрос — получим все поля обеих таблиц так, чтобы они были связаны по номеру дисконтной карты:
Этот же запрос на языке SQL будет выглядеть так: SELECT "Клиенты2".*, "Покупки".* FROM "Покупки", "Клиенты2" WHERE "Покупки"."НомерДисконтнойКарты" = "Клиенты2"."НомерДисконтнойКарты"
.
Добавим таблицу для вывода данных по покупкам: выберем элемент Таблица
на панели Дополнительные элементы управления
(она открывается на панели Элементы управления
слева). При этом откроется Мастер, в котором нам будет предложено выбрать поля для вывода:
Сохраним форму под именем «Клиенты (для кассира)» и откроем её на выполнение:
Конечно, на эту форму также можно добавить дополнительные метки, графические элементы и прочие плюшки, но выполнение этих приёмов мы рассмотрели выше и повторно останавливаться на них не будем.
Ну и закончим на сегодня. На этом уроке мы постарались рассмотреть основные приёмы, необходимые для создания форм и отчётов в базах данных LibreOffice Base. Однако, если у вас остались вопросы по данной теме, вы можете задать их в комментариях или на нашем форуме. Мы постараемся оперативно на них ответить 🙂
11 comments
Михаил - 4 апреля 2015
Очень полезная статья!
Но не понял как можно изменять значения связанных таблиц, например изменение текста в одном поле изменяет соответствующий ему айди в другой таблице?
Да и вообще как назначить запросы на некоторые действия, можно назначать только макросы (((( ?
Катерина - 6 апреля 2015
Спасибо, Михаил!
Вы создаёте таблицы и связи между ними. Если в процессе работы изменяете информацию в родительской таблице, то и в дочерней она сменится. Но есть момент. Если вы создаёте ID, значения которых база генерирует сама, менять их потом будет очень проблемно. Да и сложно придумать реальную потребность в этом, если честно. А остальные поля в связанных таблицах не дублируются при правильном их проектировании. Они только могут «встречаться» в запросах.
Про создание запросов у нас была отдельная статья. Их содержимое потом можно выводить на форму аналогично таблицам. Или вы что-то другое имеете ввиду?
Денис - 3 июня 2015
Можно ли сделать форму с кнопками? Чтобы каждая кнопка вызывала свою форму. Можно ли сделать авторизацию? Имя пользователя, пароль. Чтобы было видно кто какую информацию внес.
Катерина - 3 июня 2015
Денис, конечно можно сделать на форме кнопки. Этот элемент есть на панели слева. По нажатию на него можно назначить событие. Открытие новой формы в вашем случае.
Чтобы сделать авторизацию, вам для начала нужно создать в базе таблицу с пользователями, куда вы занесете их логин и пароль. Для авторизации вам нужно будет сравнивать введённые данные с теми, что занесены в базу. И если они совпадут, то позволять пользователю работать (открывать форму, например). Чтобы было видно, кто что вносит, потребуется создать в таблицах, с которыми работают пользователи, поле с их ID. Или можно писать в таблицу или файл пользователь с каким номером с какими номерами записей работал.
Keysee - 11 августа 2015
Как в Base реализовать закрытую базу по типу файла .accdr в Access? То есть, чтоб автоматически открывалась главная форма и у пользователя не было возможности редактировать структуру таблиц, запросов и форм, а только работать с самой базой, вносить данные и т.д.
oermolaev - 17 августа 2015
Keysee, можно сохранить нужную форму в формате *.odt, которая будет открываться в Libreoffice Writer. Далее, в Главном меню Libreoffice Writer -> Вид включить панель Конструктор форм. На нижней панели включить Режим разработки. В Свойствах формы выбрать Источник данных, Тип содержимого, Содержимое. Выключить Режим разработки.
Денис - 13 сентября 2015
У меня галочка «субформа основанная на существующей связи» неактивна. Я не могу ее выбрать. Что не так?
Катерина - 14 сентября 2015
Денис, скорее всего вы хотите назначить субформу для той таблицы, которая в связи с какой-то другой является подчинённой. Это противоречит логике создания формы 🙂 Вы можете либо сделать для такой таблицы форму без субформы, либо создать форму для родительской таблицы, взяв из неё минимум полей, а нужную таблицу сделать как раз субформой.
- 21 ноября 2015
Добрый день!
подскажите, пожалуйста- модно ли в форме вставлять формулы?
меня интересует такой вопрос- есть поле 1 с датой. в поле 2 мне нужно получить дату, равную дате из поля 1 + 210 дней, например.
как это можно реализовать в base?
спасибо!
- 17 августа 2016
Большое вам спасибо за очень подробные и понятные уроки.
Евгений - 13 ноября 2016
Ау. Народ.
Кто знает как решить следующий вопрос:
Есть каталог(папка) с рисунками. Как сделать так, чтобы в форме ввводить набор символов и Base в форме выдавал все рисунки в названии которых есть такие символы? И ссылки на них и желательно делал миниатюры???