Topic: Проект: Планировщик задач. Нужна помощь.

1) В приложенном проекте редактированием второй задачи измените статус первой субзадачи на "ВЫПОЛНЕНО". ПРОБЛЕМА: на главной форме статус второй задачи всё равно останется "НА КОНТРОЛЕ". Для того, чтобы он изменился на "ВЫПОЛНЕНО" нужно ещё раз редактированием сохранить запись. Пол дня бьюсь над этим - и всё никак. Прошу помочь.
2) Всплывающая подсказка обязательных полей. Как изменить текст?

Post's attachments

Attachment icon Задача-Субзадача.rar 12.18 kb, 452 downloads since 2015-07-30 

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

Re: Проект: Планировщик задач. Нужна помощь.

1. Потому что у вас может измениться этот статус автоматически только в событии формы

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

if frmTask.CheckStatusYes.Checked = True then frmTask.CheckStatus.Checked := True else frmTask.CheckStatus.Checked := False;

т.е. в момент вывода формы frmTask на экран.
Возможно поле task.status вам просто не нужно, т.к. для определения статуса задачи у вас есть выч. поле statusYes



2. Изменить к сожалению пока нельзя.

Dmitry.

Re: Проект: Планировщик задач. Нужна помощь.

DriveSoft wrote:

1. Потому что у вас может измениться этот статус автоматически только в событии формы

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

if frmTask.CheckStatusYes.Checked = True then frmTask.CheckStatus.Checked := True else frmTask.CheckStatus.Checked := False;

Именно так у меня и записано в строке 48.
Когда меняешь статус субзадачи на "НА КОНТРОЛЕ" изменяется статус задачи на главной форме. Когда же статус всех субзадач меняешь на "ВЫПОЛНЕНО" изменения на главной форме не происходит, а должно на главной форме в статусе задачи записаться "ВЫПОЛНЕНО".

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

Re: Проект: Планировщик задач. Нужна помощь.

Когда меняешь статус субзадачи на "НА КОНТРОЛЕ" изменяется статус задачи на главной форме. Когда же статус всех субзадач меняешь на "ВЫПОЛНЕНО" изменения на главной форме не происходит, а должно на главной форме в статусе задачи записаться "ВЫПОЛНЕНО".

У вас просто нет механизма, который менял бы статус CheckBox-а на главной форме frmTask при изменении субзадач на форме frmAddSubTask


Повторюсь, если у вас состояние задачи определяется только состояниями подзадачи, то поле task.status вам просто не нужно.

Dmitry.

5 (edited by kunar80 2015-07-30 11:51:18)

Re: Проект: Планировщик задач. Нужна помощь.

DriveSoft wrote:

Повторюсь, если у вас состояние задачи определяется только состояниями подзадачи, то поле task.status вам просто не нужно.

Состояние задачи определяется не только состоянием подзадач. В задаче может не быть ни одной подзадачи, в этом случае нужно поле task.status и, соответственно, CheckStatus на форме frmTask.

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

Re: Проект: Планировщик задач. Нужна помощь.

если все подзадачи выполнены, может ли задача иметь статус На контроле?


если подзадачи не выполнены, может ли задача считать выполненной?

Dmitry.

Re: Проект: Планировщик задач. Нужна помощь.

Если все подзадачи выполнены или сняты с контроля (т.е. ни одна из них не имеет статус "НА КОНТРОЛЕ") - задача снята с контроля.
Если хотя бы одна из подзадач имеет статус "НА КОНТРОЛЕ", значит и задача должна иметь такой статус.
Если в задаче нет подзадач, то её статус определяется на форме frmTask (сейчас для этого имеется поле task.status и CheckStatus)

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

Re: Проект: Планировщик задач. Нужна помощь.

сделал процедуру DoStatus для определения статуса

procedure DoStatus;
begin
    // если есть id записи от task и есть подзадачи
    if (frmTask.btnSave.dbGeneralTableId<>-1) and
       ( SQLExecute('SELECT IFNULL(Count(*),0) FROM subtask WHERE subtask.id_task='+IntToStr(frmTask.btnSave.dbGeneralTableId))>0 ) then
    begin
        frmTask.CheckStatus.Enabled := False; // блокируем изменения статуса вручную
        // если есть подзадачи на КОНТРОЛЕ
        if SQLExecute('SELECT IFNULL(Count(*),0) FROM subtask WHERE subtask.id_task='+IntToStr(frmTask.btnSave.dbGeneralTableId)+' AND subtask.status=1') > 0 then
            frmTask.CheckStatus.Checked := True else frmTask.CheckStatus.Checked := False;

    end else frmTask.CheckStatus.Enabled := True;
end;
Post's attachments

Attachment icon Задача-Субзадача_fixed.zip 14.9 kb, 462 downloads since 2015-07-30 

Dmitry.

Re: Проект: Планировщик задач. Нужна помощь.

DriveSoft wrote:

сделал процедуру DoStatus для определения статуса

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

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