Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

11 Август 2022, 02:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Зависимые выпадающие списки в форме  (Прочитано 542 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexWorkStream
Форумчанин
***
Offline Offline

Сообщений: 58


« Стартовое сообщение: 20 Июль 2022, 13:49 »

День добрый. Застрял на моменте создания зависимого выпадающего списка в форме.
Как я понял, необходимо указать Критерий в конструкторе запросов, но вот как правильно это сделать - непонятно.
Для ясности, можно представить таблицы с областями и городами. Надо, чтобы в форме после введенного поля "Область", в следующей строке оставался только выбор городов из заданной области.
Записан
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 470



« Ответ #1: 20 Июль 2022, 14:20 »

Гляньте, оно?

https://youtu.be/bRVH008vG54?list=PLnzEVwX9gt1jEhDjr8EGAUS_L_hmvJ_0F
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
AlexWorkStream
Форумчанин
***
Offline Offline

Сообщений: 58


« Ответ #2: 20 Июль 2022, 16:30 »

Гляньте, оно?
Увы нет. Я пересмотрел уже все эти уроки, но там все не то. Нашел похожее для Access https://www.youtube.com/watch?v=BVDiiWc53o8 , но как это реализовать здесь - хз.
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 718


« Ответ #3: 20 Июль 2022, 19:40 »

wiki.harlamenkov.ru про Base и поиск в Форме.

В Base логику работы Формы можно строить на связанных полях/ID, а можно реализовать макросами, привязанными к событиям контролов.

А вот Конструктор тут не помощник вообще, его логика невнятна. Ещё сайт для решения связи контролов - это myooo.ru
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
AlexWorkStream
Форумчанин
***
Offline Offline

Сообщений: 58


« Ответ #4: 21 Июль 2022, 00:44 »

wiki.harlamenkov.ru про Base и поиск в Форме. Ещё сайт для решения связи контролов - это myooo.ru
Спасибо, но там ничего подобного я не нашел. Есть что угодно, но только не это... Проблема остается, а решения нигде найти не могу(((
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 718


« Ответ #5: 21 Июль 2022, 08:44 »

С макросом, имхо, можно реализовать даже самую идиотскую бизнес-логику, поэтому это "наш метод":

1) Имеем Список 1 ОБЛАСТИ и Список 2 ГОРОДА, оба заполняются из ТАБЛИЦА - таблицы БД вида "ОБЛАСТЬ-ГОРОД-ПРОДАЖИ" запросами. Конструктор форм позволяет создать связь, но делает это контр-интуитивно, поэтому сделаем связь ручками

Список 1 ОБЛАСТИ - первичный, главный. Заполним его: Поле со списком - ПКМ в Режиме разработки - Данные - Содержимое списка -
Код:
SELECT DISTINCT Область FROM ТАБЛИЦА ORDER BY Область

2) Хотим чтобы Список 2 ГОРОДА показывал города из выбранной в Список 1 области. Для этого нужен макрос, который при каждой смене области - подменяет запрос Списка 2 на запрос с условием WHERE на фильтр по области. Макрос должен
- найти контрол Список 1 и считать текущую ОБЛАСТЬ
- найти контрол Список 2, обратиться к его SQL-свойству, а именно ListSource и заменить его.

Приведу пример для, имхо, самой правильной среды рисования Форм работы с данными из баз данных и "деловых приложений" из пакета OpenOffice|LibreOffice. А именно для Calc. В Base и Writer придется поправить пару слов.

В Calc Формы можно органично дополнять формулами, усл. форматированием Листа, а значит вовлечь широкие слои населения в автоматизацию. Которой это население (в силу вовлеченности) неизбежно будет пользоваться.

В коде это выглядит так:
Код:
Sub Link_Oblast_Gorod  
oblast = ThisComponent.CurrentController.ActiveSheet.DrawPage.Forms(0).getByName("ОБЛАСТИ").Text
sql = "SELECT DISTINCT Город FROM ТАБЛИЦА WHERE Область = '" & oblast & "' ORDER BY 1"
ThisComponent.CurrentController.ActiveSheet.DrawPage.Forms(0).getByName("ГОРОДА").ListSource = sql
End sub

4) Макрос назначаем на события Списка 1, которые происходят со списком. Обычно их два:
- Текст изменен (возникает при вводе первых букв, что реализует "быстрый поиск по первым введенным символам с автодополнением"
- Состояние изменено (это при выборе готового элемента мышью/клавой)

Поле со списком - ПКМ в Режим разработки - Свойства элемента - События Данные - <событие> - [...] - выбрать наш макрос.

Теперь выбор Области меняет список доступных Городов. Аналогично каскадно можно привязать следующий контрол (Район города итд). Если Таблицы Области и Города две - ничего особо не меняется, т.к. мы по прежнему можем "соединить" их в представлении/view или в запросе/под-запросе. Надеюсь, объяснил понятно.
« Последнее редактирование: 21 Июль 2022, 09:04 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
AlexWorkStream
Форумчанин
***
Offline Offline

Сообщений: 58


« Ответ #6: 21 Июль 2022, 20:16 »

С макросом, имхо, можно реализовать даже самую идиотскую бизнес-логику, поэтому это "наш метод":
 Надеюсь, объяснил понятно.
Спасибо большое, буду пробовать)
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!