Warning: Zend OPcache API is restricted by "restrict_api" configuration directive in /home/u52/libreoffice.su/WWW/forum/Sources/Load.php on line 2699

Notice: SSI.php не может загрузить сессию! Возможно, это проблема связана с выходом или другими функциями. Пожалуйста, убедитесь что SSI.php вставлен в самом начале перед всеми другими скриптами! in /home/u52/libreoffice.su/WWW/forum/SSI.php on line 170

Создание форм в LibreOffice Base

Опубликовано: 27.06.14 / Автор: Катерина - 11 комментариев

Мы уже рассмотрели, как в LibreOffice Base создаётся база данных, формируются запросы и выполняется сортировка. Следующий этап — создание форм.

По сути форма представляет собой удобный и упрощённый интерфейс для ввода и редактирования данных в таблицы базы. Простой пользователь может испытывать сложности в работе со стандартным окном редактирования таблицы, а также иногда возникает необходимость разграничивать доступ к различной информации разным пользователям.
Создавать формы в LibreOffice Base можно так же как и предыдущие типы объектов: с помощью дизайнера или мастера форм. Мы испробуем оба варианта.
Для примера возьмём созданную ранее базу данных клиентов.

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

Создание форм LibreOffice Base

Так как у СУБД этого типа нет специальных инструментов для объединения таблиц и данных в них, выносим закономерный урок, что исправлять ошибки проектирования в уже используемой базе данных довольно накладно.
А для наглядности создания форм с субформами (подчинёнными формами со связью «1-много») создадим таблицу Покупки, содержащую информацию о времени, дате, наименовании и сумме покупок клиентов:
Создание форм LibreOffice Base

Свяжем таблицы между собой по полю НомерДисконтнойКарты.

Итак, вернёмся к формам. Для таблиц Клиенты2 и Покупки мы сделаем две формы: одну для менеджера, который вносит данные по новым картам и связывается с клиентами и, соответственно, должен иметь возможность видеть и редактировать всю информацию, и другую — для кассира, который может только просмотреть данные клиента о бонусах и вносить информацию о покупках.
Откроем Мастер, выбрав пункт Использовать мастер для создания формы… в окне Задачи:

Создание форм LibreOffice Base

Из выпадающего списка Таблицы или запросы выберем таблицу Клиенты и переместим все поля из списка Существующие поля в список Поля в форме:

Создание форм LibreOffice Base

На следующем шаге нам предлагается решить, нужна ли нам субформа. Так как мы собираемся получать информацию из двух таблиц — главной и подчиненной, нужна:

Создание форм LibreOffice Base

Сразу скажу, что Мастер автоматически свяжет для нас таблицы между собой, и при работе с формой мы будем видеть данные из таблиц, связанными по номеру дисконтной карты.

Для субформы выберем отображение всех имеющихся в таблице Покупки полей:

Создание форм LibreOffice Base

Теперь нам нужно выбрать расположение элементов на форме: для данных клиента целесообразнее выбрать столбцы или блоки — как правило, во время работы с подобными данными одномоментно нужна только одна запись, а не целый гурт. Я выбрала вариант Столбцы - подписи сверху. А вот для покупок возьмём таблицу (или Лист данных, как она названа в Мастере) — клиент и его покупки будут автоматически сопоставлены при выполнении формы и при выборе других вариантов отображения мы сможем увидеть только первую покупку клиента:
Создание форм LibreOffice Base

Нам шестом шаге выбирается источник данных, а по сути определяются права доступа. Мы предполагаем, что менеджеру доступны все действия, поэтому оставим настройки по умолчанию:

Создание форм LibreOffice Base

На следующем этапе можно изменить стиль элементов формы. Сейчас мы не будем этого делать и оставим всё, как есть:
Создание форм LibreOffice Base

Ну и восьмой, последний шаг — название формы и определение действий с ней. Так как мы ориентируемся на пользователя, назовём форму «Клиенты (для менеджера)»:

Создание форм LibreOffice Base

После нажатия кнопки Готово, форма откроется на выполнение:

Создание форм LibreOffice Base

Внизу, под ней, есть удобная панель Навигация формы:
base-form-12

С её помощью можно:
— найти нужную запись;
— последовательно просмотреть всю имеющуюся информацию;
— добавить/удалить/отредактировать и сохранить запись;
— сортировать и фильтровать данные;
— отобразить записи в виде таблицы из базы.
Согласитесь, основной функционал, необходимый пользователю, присутствует.

Теперь попробуем немного изменить внешний вид формы: закроем форму (естественно, с сохранением, если вы успели внести изменения) и отроем её на редактирование — на вкладке Формы основного окна Base вызовем контекстное меню для нашей формы и выберем Изменить. Откроется дизайнер (или редактор, как изволите), в котором мы можем изменить размер и расположение имеющихся элементов, добавить новые, запрограммировать их на выполнения конкретных действий и сделать многое другое. Вообще, по функционалу он напоминает IDE, пусть и сильно упрощённую. Поэтому рассказать обо всех её возможностях, да ещё и с примерами — дело целого курса, а не одной статьи. Но кое-что мы попробуем 🙂
Для начала немного изменим размеры полей и таблицы: одинарное нажатие на элементе высвечивает зелёные ключевые точки, потянув за которые можно изменить размер:

Создание форм LibreOffice Base

Немного опустим столбцы с данными о клиентах: для этого выделим все поля ввода с зажатым Shift’ом и сдвинем их вниз:
Создание форм LibreOffice Base

Добавим подписи к логически блокам о клиентах и покупках: для этого нам потребуется элемент Метка с панели Элементы управления слева. Нажмем на него и расположим над столбцами с информацией о клиентах:

Создание форм LibreOffice Base

Изменим её название и размер шрифта: двойной клик на метку откроет окно свойств, в котором мы изменим значение полей Текст (именно его, а не свойство Имя, которое обычно используется для пр