Topic: Автоматическое заполнение ComboBox

Добрый день.
Создал небольшую программку Учет обращения граждан.
В принципе все работает, но хотелось бы немного автоматизировать процесс заполнения.
Так как с программой только начал работать еще не все нюансы улавливаю.
Подскажите пожалуйста как правильней сделать.
1. Из примеров взял вход по логину и паролю
2. В справочнике дополнительно создал разделение на операторов и контролеров и необходимые данные для регистрации обращения
3. Почти все пункты имеют взаимосвязь я начал прописывать, но уперся в то как сделать чтобы эта связь работала в создании обращения и поиске то есть данные из справочника автоматом устанавливалась в формы фильтрации поиска и создания обращения
4. В FastReport так и не нашел где поставить галочку для автоматического растягивания ячейки по вертикали при экспорте в Excel.
Для понимания проблемы прилагаю проект программы.
Правда базу удалил, но хотя бы на таком примере дальше надеюсь разберусь (создал пример того что хочу сделать)
Заранее благодарю за помощь и консультацию.

Re: Автоматическое заполнение ComboBox

Приветствую,


к сожалению проект не приложен к сообщению, отправьте его на support@drive-software.com
со ссылкой на данную тему, постараюсь помочь.

Dmitry.

Re: Автоматическое заполнение ComboBox

Отправил.

Re: Автоматическое заполнение ComboBox

3. К сожалению не понял, что вы имеете ввиду, поиск у вас работает, данные в ComboBox-ах из справочников присутствуют, пожалуйста опишите конкретно (с именами форм и компонентов), что именно не работает.


4.  Для полей расположенных на MasterData1, установите значение StretchMode = smMaxHeight

Dmitry.

Re: Автоматическое заполнение ComboBox

3. Как пример услуга "1.1.1) Назначение и выплата пособий по уходу за ребенком".
В справочнике создаем типы услуг - frmTip и органы власти frmOgv. Их несколько.
При создании определенной услуги frmUsluga указываем к какому типу и органу власти относится данная услуга.
Потом в форме создания нового обращения frmNew при выборе этой услуги хотелось бы сделать чтобы поля тип и огв заполнялись автоматически так как другого варианта не должно быть, а так приходится выбирать. Я для первой услуги связи начал делать только как правильно в frmNew прописать чтобы это срабатывало.
Такое же хотел проделать для пользователей, Логин входа привязать к справочнику операторов и на frmMain могли выбрать только свои данные. Вот как то так.

За поля спасибо все отлично работает.

Re: Автоматическое заполнение ComboBox

Aleksandr.Popkov
Если у вас это связанный список (Орган власти > Услуги)
то обычно сперва выбирают родительскую запись (Орган власти), затем уже дочернюю (Услуги), в таком виде при выборе Органа власти, вы видите Услуги в списке, которые принадлежать к выбранному Органу власти и только затем выбираете услугу.


если же вы хотите сразу выбирать Услугу, то ComboBox-ы "Тип услуги" и "ОГВ" на форме в принципе не нужны, так как выбранная услуга однозначна определяет эти значения ("Тип услуги" и "ОГВ"), т.о. лучше выводить их например на компонент Label, просто для информации, без возможности изменения.
Реализовал это в качестве примера на вашем проекте.


Такое же хотел проделать для пользователей, Логин входа привязать к справочнику операторов и на frmMain могли выбрать только свои данные.

Пожалуйста загляните в эту тему
http://myvisualdatabase.com/forum/viewtopic.php?id=1633

Post's attachments

Attachment icon АИС Учет и регистрация обращений_fixed.zip 923.24 kb, 554 downloads since 2015-08-05 

Dmitry.

Re: Автоматическое заполнение ComboBox

Так вся загвоздка и состоит в том что  если настроить к примеру орган власти то всё равно из списка выбирать у него несколько услуг (до сотни у одной), а вот у услуги только один орган власти по логике зачем выбор если у каждой услуги свой ОГВ. По вашему примеру это просто информация которая не записывается в базу поэтому через поиск не отфильтруется и в отчет не попадет. Смысл программы теряется.
Привязка от родительского у меня получается к примеру при выборе услуги выпадает список только её подуслуг, а вот наоборот при выборе подуслуги чтобы его единственная услуга никак, как к примеру через поиск набираем уникальное слово и автоматом устанавливаетса та запись где оно присутствует.

А по поводу пользователей хотел сделать привязку подобную что описано выше чтобы по умолчанию прописывались в ComboBox-сах нв frmMain и frmNew чтобы не выбирать каждый раз при входе и создании обращения.

Re: Автоматическое заполнение ComboBox

Aleksandr.Popkov wrote:

По вашему примеру это просто информация которая не записывается в базу поэтому через поиск не отфильтруется и в отчет не попадет. Смысл программы теряется.


Данную информацию не нужно записывать, так как зная услугу, можно определить ее "Тип услуги" и "ОГВ"
Удалил из проекта лишние ComboBox-ы и связи в БД, поиск и отчеты при этом работают.

Post's attachments

Attachment icon АИС Учет и регистрация обращений_fixed2.zip 327.61 kb, 579 downloads since 2015-08-05 

Dmitry.

Re: Автоматическое заполнение ComboBox

Я понимал что скриптами нужно, только не мог сообразить как (плаваю в них еще, по примерам учу).
Спасибо.
Дальше сам порисую.
Если что в стопор войду обращусь за помощью ?

Re: Автоматическое заполнение ComboBox

Конечно, пишите )

Dmitry.

Re: Автоматическое заполнение ComboBox

Приветствую.
Столкнулся еще с двумя проблемками.
1. При наборе в строке поиска выпадает меню с перечнем соответствий. Все нормально но курсор мышки прячется за менюшкой. Как сделать чтобы он был поверх остальных окон.
2. В процессе работы выяснилось что операторы забывают указывать услугу и естественно остальные поля пустые. База уже наполненная, а нужно сделать это поле обязательным без удаления базы. Не могу понять какое значение по умолчанию указать. Методом научного тыка не получается.

Re: Автоматическое заполнение ComboBox

Aleksandr.Popkov

1. Немного доработал данный пример, т.к. не очень удобный. К сожалению проблему с исчезновением курсора решить не получиться, но теперь при поиске, вы можете нажать стрелку вниз, чтобы сразу начать выбор вариантов в ComboBox во время поиска, также можно нажать Esc, чтобы отменить поиск. (проект приложил к сообщению)


2. В случае создания обязательного внешнего ключа (для ComboBox), необходимо указать идентификатор записи по умолчанию, который присвоится для существующих записей, где данный внешний ключ не имеет значения. Например вы можете в словаре услуг создать название услуги как "Не определена", затем идентификатор этой новой записи использовать как значение по умолчанию.


Либо можно написать небольшой скрипт, который не позволит при создании/редактировании записи сохранить ее без указания Услуги, например так:
Создайте событие OnClick для кнопки "Сохранить запись"

procedure frmAbonent_Button6_OnClick (Sender: string; var Cancel: boolean);
begin
    if frmAbonent.cbService.dbItemID = -1 then
    begin
        ShowMessage('Выберите услугу.');
        Cancel := True;
    end;
end;
Post's attachments

Attachment icon Search in ComboBox - Phone Book.zip 53.61 kb, 517 downloads since 2015-08-09 

Dmitry.

Re: Автоматическое заполнение ComboBox

Как автоматически заполнить комбобокс 1 на форме card при выборе значения из грида? Заполнение Edit  получается, но нужен именно комбобокс, так как его значение должно сохраниться в таблицу.

Post's attachments

Attachment icon ОМ.rar 7.78 kb, 543 downloads since 2015-08-30 

Не боги горшки лепят!

Re: Автоматическое заполнение ComboBox

kunar80 wrote:

Как автоматически заполнить комбобокс 1 на форме card при выборе значения из грида? Заполнение Edit  получается, но нужен именно комбобокс, так как его значение должно сохраниться в таблицу.

procedure frmCard_TableGrid1_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
    frmCard.ComboBox1.dbItemID := frmCard.TableGrid1.dbItemID;
end;
Dmitry.

Re: Автоматическое заполнение ComboBox

СПАСИБО!

Не боги горшки лепят!

Re: Автоматическое заполнение ComboBox

Доброго всем дня! И вновь нужна помощь.
На форме frmCards грид TableGrid1 отображает данные из таблицы card.
При клике по ячейке грида срабатывает процедура:

procedure frmCards_TableGrid1_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
frmCards.cbPerson.dbItemID := SQLExecute ('SELECT IFNULL(id_person, -1) FROM card WHERE id='+frmCards.TableGrid1.sqlValue);
end;

и в комбобоксе cbPerson появляется фамилия сотрудника.
Нужно чтобы одновременно на этой же форме в комбобоксах или текстбоксах появились данные сотрудника:
- departament;
- otdel;
- room;
- job

Post's attachments

Attachment icon Таблицы.jpg 121.71 kb, 280 downloads since 2015-09-01 

Не боги горшки лепят!

Re: Автоматическое заполнение ComboBox

можно так в CombBox-ы

procedure frmCards_TableGrid1_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
   frmCards.cbPerson.dbItemID := SQLExecute ('SELECT IFNULL(id_person, -1) FROM card WHERE id='+frmCards.TableGrid1.sqlValue);

   if frmCards.cbPerson.dbItemID<>-1 then
   begin
      frmCards.cbDepartament.dbItemID := SQLExecute ('SELECT IFNULL(id_departament, -1) FROM person WHERE id='+frmCards.cbPerson.sqlValue);
      frmCards.cbOtdel.dbItemID := SQLExecute ('SELECT IFNULL(id_otdel, -1) FROM person WHERE id='+frmCards.cbPerson.sqlValue);
      frmCards.cbRoom.dbItemID := SQLExecute ('SELECT IFNULL(id_room, -1) FROM person WHERE id='+frmCards.cbPerson.sqlValue);
      frmCards.cbJob.dbItemID := SQLExecute ('SELECT IFNULL(id_job, -1) FROM person WHERE id='+frmCards.cbPerson.sqlValue);
   end;
end;
Dmitry.

Re: Автоматическое заполнение ComboBox

DriveSoft wrote:

можно так в CombBox-ы

Спасибо, работает!

Не боги горшки лепят!