Страница 2 из 2
Re: Модификации в интерфейсах
Добавлено: 16 июл 2010, 16:58
BlazeBio
нашёл способ обновлять поля(а то уже запарился):
Код: Выделить всё
cmDefault:
{
updatetable;
update current ppspecif;
rescanpanel(#ppspecif);
}
Только это, наверное, не очень красиво по Enter update. Объясните кто-нибудь почему у меня упорно не хочет вызываться cmCheckField?
Re: Модификации в интерфейсах
Добавлено: 16 июл 2010, 18:45
BlazeBio
Сам спросил, сам ответил.
cmChekfield работает, только нужно заносить его в handleevent панели.
Re: Модификации в интерфейсах
Добавлено: 19 июл 2010, 09:48
Maverick
Ну дык оно и ежу понятно.. это же табличное событие, привязанное к логической таблице Ж-)
А вообще Поиск рулит.. Года 4 мож чуть больше обсуждалась тепа последовательности событий и их принадлежность.
И еще... Почитайте все-таки доку... Там ведь УЖЕ разнесены события по областям их действия... Метод научного тыка - это конечно гуд, но и теорию нужно читать тоже...
Re: Модификации в интерфейсах
Добавлено: 19 июл 2010, 19:46
BlazeBio
Maverick писал(а):
вставка: имеем browsе. Жмем F7 -> отрабатывает cmSetDefault. В нем определеяем поля по умолчанию тут же вызываем окно в котором определен screen для редактирования записи. заносим значения. при потере позиции (закрытии окна, перемещении с текущей записи, для корневой таблицы в данном скрине/броузе отрабатывает cmInsertRecord
редактирование: все то же самое, только отрабатывает cmUpdateRecord
удаление: напрямую из броуза/скрина отрабатывает cmDeleteRecord и при этом текущей становится предыдущая/следующая запись.
собственно логика отработки примерно такая, если не вдаваться в подробности отлова cmAbortInsert и прочее
...то есть получается вначале происходит cmInsert, а потом cmSetDefault...
У меня при попытке использования cmSetDefault, появляется сообщения о том, что нарушена уникальность ключа nrec...Как я понимаю почему-то происходит попытка вставки двух строк с одинаковым nrec. Без использования cmSetDefault всё нормально вставляется по cmInsert. Может всё-таки лучше оставить вставку значений по умолчанию в cmInsert. Или каким-то образом описать вставку по умолчанию через cmInsertRecord. Или вовсе нужно в этом случае делать update в cmSetDefault. Потому что в таком виде cmSetDefault никак не катит.
Что лучше?
Re: Модификации в интерфейсах
Добавлено: 19 июл 2010, 19:56
edward_K
cmSetDefault идет до вставки - очень нужен при вставке по фильтру, позволяет отказаться от вставки и так далее
Можно вставить и в нем но я уже писал про setnew(false)
Вообще полезно проверить в событиях была ли уже вставка, или вообще тупо всегда вызывать updatetable
Re: Модификации в интерфейсах
Добавлено: 19 июл 2010, 19:58
m0p3e
У меня при попытке использования cmSetDefault, появляется сообщения о том, что нарушена уникальность ключа nrec...
cmSetDefault :
{
ClearBuffer(#MyTable);
....................
}
Re: Модификации в интерфейсах
Добавлено: 20 июл 2010, 10:39
Maverick
m0p3e писал(а):У меня при попытке использования cmSetDefault, появляется сообщения о том, что нарушена уникальность ключа nrec...
cmSetDefault :
{
ClearBuffer(#MyTable);
....................
}
Морзик прав - при вставке новой записи с нее не сбрасываются фильтры, установленные при прошлой вставке. ClearBuffer для этого и служит.. но можно делать хитрее
cmSetDefault:
{
MyTable.NRec:=0;
};
в этом случае мы буффер для новой записи не чистим, НО.. указываем системе, что уникальный ключ (NRec) нужно сгенерить самой системе по своим правилам ). Просто, элегантно и удобно.
....
а насчет cmInsert повторюсь - это ПОЛЬЗОВАТЕЛЬСКОЕ событие и описывает реакцию В КОНКРЕТНОМ контексте на нажатие клавиши F7 (например в управлении персоналом и ЗП никогда не удастся поймать F7 на событие cmInsert - там F7 отлавливается событием cmAddNewRec кажется).
cmSetDefault, cmInsertRecord, cmupdateRecord и cmDeleteRecord - ТАБЛИЧНЫЕ СИСТЕМНЫЕ события, не связанные с пользовательским контекстом. И возникают они ПРИ РАБОТЕ С ЗАПИСЬЮ КОРНЕВОЙ (ТЕКУЩЕЙ) ТАБЛИЦЫ для данного экрана/брауза/дерева вне зависимости от контекста.
Еще раз повторюсь - проштудируйте матчасть, т.е. доку - там ведь все это написано...
Re: Модификации в интерфейсах
Добавлено: 20 июл 2010, 20:32
Screw
Системный обработчик cmSetDefault автоматически выполняет очистку записи текущей таблицы. Поэтому в простейших случаях нет необходимости в прикладном обработчике вызывать ClearBuffer.
Re: Модификации в интерфейсах
Добавлено: 28 май 2013, 07:58
Алексей
возникла необходимость отслеживать изменение одного поля и по определенному условию запрещать менять его.
написал альтре, нахожу что поле изменено, выдаю сообщение но... пока не нажмешь alt+backspace - запись не возвращается в исходное состояние.
Как можно программно вернуть полю его первоначальное значение чтобы Галактика сняла "флаг" о редактировании поля? Чтобы юзер не нажимал alt+backspace ?
Re: Модификации в интерфейсах
Добавлено: 28 май 2013, 08:24
Алексей
отбой. решается так:
Rereadrecord(#tablename);
exit;