1 (edited by zoomix 2015-02-26 17:55:30)

Topic: Автоматический выбор из таблиц-справочников

Добрый всем вечер!

В проекте есть несколько таблиц, в том числе и users (которая используется для входа по логину), а также справочники - отделы, должности. см. рис1.
Есть форма по регистрации опозданий (рис.2), в ней есть 3 комбобокса с инфой из справочников. Для первого комбобокса (нач.отдела) инфа берется из логина и подставляется автоматически при заходе в форму (т.е. вручную юзеру этот параметр  выбирать не нужно).
Следующий комбобокс "список отделов" - сейчас выбирается вручную из списка, но хотелось бы, чтобы тоже автоматом - в зависимости от логина того, кто зашел, т.е. чтобы у этого юзера автоматом, как и его фамилия, отдел сразу высвечивался только свой и небыло бы выбора других отделов.
-----------
В скрипте заданы глобальные переменные по юзеру
-----------------
var
   sUser: string = ''; // глобальная переменная, куда записываtм данные текущего юзера
   idUser: integer = -1;
   idOtdel: integer = -1;
   idPosition: integer = -1;
--------------------------
Далее по событию открытия формы задана процедура:

procedure frmOpozdun_OnShow (Sender: string; Action: string);

begin
frmOpozdun.ComboBox1.Enabled := False;  // Делаем неактивным выбор начальника
frmOpozdun.ComboBox2.Enabled := False;  // Делаем неактивным выбор отдела
--
if frmOpozdun.dbAction = 'NewRecord' then frmOpozdun.ComboBox1.dbItemID := idUser;
if frmOpozdun.dbAction = 'NewRecord' then frmOpozdun.ComboBox2.dbItemID := idOtdel;
-----------
значение по idUser вытаскиваем отсюда:
idUser := SQLExecute('SELECT id FROM users WHERE (login = ''' + frmLogin.edUser.Text + ''' AND (password='''+sHash+'''));');
============================
А как присвоить значение idOtdel?

Post's attachments

Attachment icon ris1.jpg 109.73 kb, 335 downloads since 2015-02-26 

2 (edited by zoomix 2015-02-26 17:55:51)

Re: Автоматический выбор из таблиц-справочников

рис 2

Post's attachments

Attachment icon ris2.jpg 73.82 kb, 330 downloads since 2015-02-26 

Re: Автоматический выбор из таблиц-справочников

Попробуйте так:

idUser := SQLExecute('SELECT id FROM users WHERE (login = ''' + frmLogin.edUser.Text + ''' AND (password='''+sHash+'''));');
idOtdel := SQLExecute ('SELECT id_Otdely FROM users WHERE id='+IntToStr(idUser));
Dmitry.

Re: Автоматический выбор из таблиц-справочников

Спасибо, Дмитрий, счас попробую.

Re: Автоматический выбор из таблиц-справочников

Отдел конкретного юзера стал прописываться автоматом. Но в последнем комбобоксе  "Сотрудники" раньше, при выборе отдела вручную, появлялись сотрудники  этого отдела, а сейчас, под каким бы юзером не зашел - выбора нет, список пустой, хотя списки сотрудников из базы не удалялись.
----------------
вот какие ключи и поля по этим 3-м комбобоксам записаны:
-----------
Начальник:
F.key: Opozduns.id_users
F.name Login
------
Отдел:
F.Key: Sotrudniki.id_Sotrudniki
F.n: Otdel
--------
Сотрудники:
F.k: Opozduns.id_Sotrudniki
F.n: Sotrudnik
-----------

Re: Автоматический выбор из таблиц-справочников

ComboBox-ы отделы и сотрудники являются связанными?
тогда попробуйте так

if frmOpozdun.dbAction = 'NewRecord' then 
begin
    frmOpozdun.ComboBox2.dbItemID := idOtdel;
    frmOpozdun.ComboBox2.DoOnChange;
end;
Dmitry.

Re: Автоматический выбор из таблиц-справочников

Да,связаны, счас попробую

Re: Автоматический выбор из таблиц-справочников

Все сразу появилось! Супер! Спасибо!!!

9 (edited by zoomix 2015-02-26 19:20:27)

Re: Автоматический выбор из таблиц-справочников

Еще вопрос по той же форме (рис2):
Дата опоздания на форме, по умолчанию - текущая, но можно выбрать из календаря - любую.
Как и где прописать, что если юзер выбирает дату опоздания не сегодняшнюю, а более раннюю (скажем, записать опоздание можно только в течение 5-х дней, а позже уже нельзя) то вылетает надпись типа "Просрочено!" и форма не пропускает дальнейший ввод и запись, пока не введется дата в пределах разрешенного интервала.

Re: Автоматический выбор из таблиц-справочников

if frmOpozdun.dbAction = 'NewRecord' then 
begin
    frmOpozdun.ComboBox2.dbItemID := idOtdel;
    frmOpozdun.ComboBox2.DoOnChange;

    frmOpozdun.DateTimePicker1.MinDate := Trunc(now)-5; // минимальная возможная дата, сегодняшняя
end else frmAbonent.DateTimePicker1.MinDate := -1; // если например открыли для редактирования записи, то ограничение убираем 

но при редактировании опоздания, дату все же можно будет изменить.

Dmitry.

Re: Автоматический выбор из таблиц-справочников

Спасибо! А предупреждающее сообщение о просрочке даты как прописать?

Re: Автоматический выбор из таблиц-справочников

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

Dmitry.

Re: Автоматический выбор из таблиц-справочников

Да я уже увидел. Пустой календарь, хочешь, а не можешь...  смешно, так даже лучше.