Страница 2 из 2

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

Добавлено: 16 июл 2010, 16:58
BlazeBio
нашёл способ обновлять поля(а то уже запарился): :grin:

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

		cmDefault:
		{
		  		  updatetable;
				  update current ppspecif;
				  rescanpanel(#ppspecif);
		}
Только это, наверное, не очень красиво по Enter update. Объясните кто-нибудь почему у меня упорно не хочет вызываться cmCheckField?

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

Добавлено: 16 июл 2010, 18:45
BlazeBio
Сам спросил, сам ответил.
cmChekfield работает, только нужно заносить его в handleevent панели. :grin:

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;