Модификации в интерфейсах

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

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

BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Модификации в интерфейсах

Сообщение BlazeBio »

нашёл способ обновлять поля(а то уже запарился): :grin:

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

		cmDefault:
		{
		  		  updatetable;
				  update current ppspecif;
				  rescanpanel(#ppspecif);
		}
Только это, наверное, не очень красиво по Enter update. Объясните кто-нибудь почему у меня упорно не хочет вызываться cmCheckField?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Модификации в интерфейсах

Сообщение BlazeBio »

Сам спросил, сам ответил.
cmChekfield работает, только нужно заносить его в handleevent панели. :grin:
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Модификации в интерфейсах

Сообщение Maverick »

Ну дык оно и ежу понятно.. это же табличное событие, привязанное к логической таблице Ж-)
А вообще Поиск рулит.. Года 4 мож чуть больше обсуждалась тепа последовательности событий и их принадлежность.
И еще... Почитайте все-таки доку... Там ведь УЖЕ разнесены события по областям их действия... Метод научного тыка - это конечно гуд, но и теорию нужно читать тоже...
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Модификации в интерфейсах

Сообщение BlazeBio »

Maverick писал(а):
вставка: имеем browsе. Жмем F7 -> отрабатывает cmSetDefault. В нем определеяем поля по умолчанию тут же вызываем окно в котором определен screen для редактирования записи. заносим значения. при потере позиции (закрытии окна, перемещении с текущей записи, для корневой таблицы в данном скрине/броузе отрабатывает cmInsertRecord
редактирование: все то же самое, только отрабатывает cmUpdateRecord
удаление: напрямую из броуза/скрина отрабатывает cmDeleteRecord и при этом текущей становится предыдущая/следующая запись.

собственно логика отработки примерно такая, если не вдаваться в подробности отлова cmAbortInsert и прочее
...то есть получается вначале происходит cmInsert, а потом cmSetDefault...
У меня при попытке использования cmSetDefault, появляется сообщения о том, что нарушена уникальность ключа nrec...Как я понимаю почему-то происходит попытка вставки двух строк с одинаковым nrec. Без использования cmSetDefault всё нормально вставляется по cmInsert. Может всё-таки лучше оставить вставку значений по умолчанию в cmInsert. Или каким-то образом описать вставку по умолчанию через cmInsertRecord. Или вовсе нужно в этом случае делать update в cmSetDefault. Потому что в таком виде cmSetDefault никак не катит. :(

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

Re: Модификации в интерфейсах

Сообщение edward_K »

cmSetDefault идет до вставки - очень нужен при вставке по фильтру, позволяет отказаться от вставки и так далее
Можно вставить и в нем но я уже писал про setnew(false)
Вообще полезно проверить в событиях была ли уже вставка, или вообще тупо всегда вызывать updatetable
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Модификации в интерфейсах

Сообщение m0p3e »

У меня при попытке использования cmSetDefault, появляется сообщения о том, что нарушена уникальность ключа nrec...
cmSetDefault :
{
ClearBuffer(#MyTable);
....................
}
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Модификации в интерфейсах

Сообщение Maverick »

m0p3e писал(а):
У меня при попытке использования cmSetDefault, появляется сообщения о том, что нарушена уникальность ключа nrec...
cmSetDefault :
{
ClearBuffer(#MyTable);
....................
}
Морзик прав - при вставке новой записи с нее не сбрасываются фильтры, установленные при прошлой вставке. ClearBuffer для этого и служит.. но можно делать хитрее :-)

cmSetDefault:
{
MyTable.NRec:=0;
};

в этом случае мы буффер для новой записи не чистим, НО.. указываем системе, что уникальный ключ (NRec) нужно сгенерить самой системе по своим правилам ). Просто, элегантно и удобно.

....

а насчет cmInsert повторюсь - это ПОЛЬЗОВАТЕЛЬСКОЕ событие и описывает реакцию В КОНКРЕТНОМ контексте на нажатие клавиши F7 (например в управлении персоналом и ЗП никогда не удастся поймать F7 на событие cmInsert - там F7 отлавливается событием cmAddNewRec кажется).
cmSetDefault, cmInsertRecord, cmupdateRecord и cmDeleteRecord - ТАБЛИЧНЫЕ СИСТЕМНЫЕ события, не связанные с пользовательским контекстом. И возникают они ПРИ РАБОТЕ С ЗАПИСЬЮ КОРНЕВОЙ (ТЕКУЩЕЙ) ТАБЛИЦЫ для данного экрана/брауза/дерева вне зависимости от контекста.

Еще раз повторюсь - проштудируйте матчасть, т.е. доку - там ведь все это написано...
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Re: Модификации в интерфейсах

Сообщение Screw »

Системный обработчик cmSetDefault автоматически выполняет очистку записи текущей таблицы. Поэтому в простейших случаях нет необходимости в прикладном обработчике вызывать ClearBuffer.
Виталий
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Модификации в интерфейсах

Сообщение Алексей »

возникла необходимость отслеживать изменение одного поля и по определенному условию запрещать менять его.
написал альтре, нахожу что поле изменено, выдаю сообщение но... пока не нажмешь alt+backspace - запись не возвращается в исходное состояние.
Как можно программно вернуть полю его первоначальное значение чтобы Галактика сняла "флаг" о редактировании поля? Чтобы юзер не нажимал alt+backspace ?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Модификации в интерфейсах

Сообщение Алексей »

отбой. решается так:
Rereadrecord(#tablename);
exit;
Ответить