DEL работает со второго раза

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

DEL работает со второго раза

Сообщение Nikos »

Добрый день!
Добавил конфигуратором поле в стандартный интерфейс галактики (сведения об образовании). Сделал поле Protect и PickButton. Выбирает из нужного каталога отлично, а вот отцепляет запись только со второго раза! Т.е. если поле заполнено (есть привязка), то первое нажатие клавиши DEL приводит к визуальному очищению поля, и только повторное очищает поле непосредственно в таблице. Почему так работает? Пытался перехватить cmDelOnProtect и обнулить поле вручную – не реарирует.
Интерфейс предварительно немножко докомпилировал:

Код: Выделить всё

alter interface RECWIN02
create view
as select PlanEducation.name
from synonym Catalogs PlanEducation
where ((EDUCATION.CREF1 == PlanEducation.NREC));

HandleEvent 
  cmPick:
  {
    case CurField of
      #PLANEDUCATION.NAME : 
      {
        if not isnew()
        {
					RunInterface(GetPlanEdu, PERSONS.NREC, EDUCATION.CREF1);
          update current EDUCATION;
        }
        else
        {
          RunInterface(GetPlanEdu, PERSONS.NREC, EDUCATION.CREF1);
        }
      }
    end;
    inherited::HandleEvent(cmPick);
  }
end;
end.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: DEL работает со второго раза

Сообщение edward_K »

ну а где cmDelOnProtect?
в нем обработку поля нужно также отдельно прописывать - как в Pick.
и updatetable и rescanpanel(#таблица окна) тоже нужно бы сделать
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Re: DEL работает со второго раза

Сообщение Nikos »

сейчас добавил все, что можно (на мой взгляд) - ничего не изменилось. По-прежнему DEL работает только со второго раза, ни одного сообщени ене выдается:

Код: Выделить всё

#component 'Z_STAFF'

alter interface RECWIN02
create view
as select PlanEducation.name
from synonym Catalogs PlanEducation
where ((EDUCATION.CREF1 == PlanEducation.NREC));

HandleEvent 
  cmPick:
  {
    case CurField of
      #PLANEDUCATION.NAME : 
      {
        if not isnew()
        {
					RunInterface(GetPlanEdu, PERSONS.NREC, EDUCATION.CREF1);
          update current EDUCATION;
        }
        else
        {
          RunInterface(GetPlanEdu, PERSONS.NREC, EDUCATION.CREF1);
        }
      }
    end;
    inherited::HandleEvent(cmPick);
  }
  
  cmDelOnProtect:
  {
    case CurField of
      #PLANEDUCATION.NAME : 
      {
        Message('cmDelOnProtect');
      }
    end;
    inherited::HandleEvent(cmDelOnProtect);
  }
end;

TableEvent table EDUCATION
  cmDelOnProtect:
  {
    case CurField of
      #PLANEDUCATION.NAME : 
      {
        Message('cmDelOnProtect2');
      }
    end;
    Message('cmDelOnProtect3');
    inherited::HandleEvent(cmDelOnProtect);
  }
  
  cmUpdateRecord: 
  {
  	Message('cmUpdateRecord');
   	update current EDUCATION;
   	inherited::HandleEvent(cmUpdateRecord);
  }
end;

end.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: DEL работает со второго раза

Сообщение edward_K »

message вам в помощь
а вы туда вообще попадаете?
попробуйте перенести из handleevent в
TableEvent table LevelEducation или в какой там у вас панели поле - посмотреть можно например добавляя конфигуратором поле - главная таблица будет красная в списке. Событие табличное.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Re: DEL работает со второго раза

Сообщение Nikos »

Ничего не получается. Перенес из handleevent в TableEvent table LevelEducation (LevelEducation - красная таблица в списке). Получилось так:

Код: Выделить всё

#component 'Z_STAFF'

alter interface RECWIN02
create view
as select PlanEducation.name
from synonym Catalogs PlanEducation
where ((EDUCATION.CREF1 == PlanEducation.NREC));

HandleEvent 
  cmPick:
  {
    case CurField of
      #PLANEDUCATION.NAME : 
      {
        if not isnew()
        {
					RunInterface(GetPlanEdu, PERSONS.NREC, EDUCATION.CREF1);
          update current EDUCATION;
        }
        else
        {
          RunInterface(GetPlanEdu, PERSONS.NREC, EDUCATION.CREF1);
        }
      }
    end;
    inherited::HandleEvent(cmPick);
  }
end;

TableEvent table LEVELEDUCATION
  cmDelOnProtect:
  {
    case CurField of
      #PLANEDUCATION.NAME : 
      {
        Message('cmDelOnProtect1');
      }
    end;
    Message('cmDelOnProtect2');
    inherited::HandleEvent(cmDelOnProtect);
  }
end;

end.
По-прежнему никаких сообщений не выводится. В то же время cmPick отрабатывает правильно. Может, кто-нибудь знает, почему единичное DEL правильно не работает, а двойное - работает? При этом никаких сообщений не выдается (видимо, cmDelOnProtect не отрабатывает)
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: DEL работает со второго раза

Сообщение edward_K »

а да - главная то таблица другая - там времянка заполняется.
попробуйте сразу в delonprotect сообщение вызвать . Еще может быть фишка с перепутанными константами в компиляторе.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Re: DEL работает со второго раза

Сообщение Nikos »

С delonprotect перепробовал все - никак не реагирует. Константы перепутаны в моем компиляторе? Если да, то подскажите, какой должен было у delonprotect код?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: DEL работает со второго раза

Сообщение edward_K »

у меня в Inc
CONST
cmDelOnProtect = 504;
проверьте - мож перекрыли где.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Re: DEL работает со второго раза

Сообщение Nikos »

Как оказалось почему-то Message вообще не работает здесь! Пишу:

Код: Выделить всё

alter interface RECWIN02
create view
as select PlanEducation.name
from synonym Catalogs PlanEducation
where ((EDUCATION.CREF1 == PlanEducation.NREC));

HandleEvent
  cmPick:
  {
    case CurField of
      #PLANEDUCATION.NAME :
      {
        Message('ok');
        if not isnew()
        {
          RunInterface(GetPlanEdu, PERSONS.NREC, EDUCATION.CREF1);
          update current EDUCATION;
        }
        else
        {
          RunInterface(GetPlanEdu, PERSONS.NREC, EDUCATION.CREF1);
        }
      }
    end;
    inherited::HandleEvent(cmPick);
  }
end;
end.
В итоге интерфейс GetPlanEdu вызывается, а сообщение никакое не выдается. Че-то я вообще запутался...
Ответить