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

Улетает курсор в браузе

Добавлено: 29 июл 2010, 14:59
BlazeBio
Как сделать, чтобы после вставки строки курсор сразу же перемещался на место вставленной строки, или чтобы при удалении строки в браузе поднимался на позицию вверх?

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 16:19
edward_K
rescanpanel(#table) обычно помогает. Или руками позиционируетесь, а потом снова рескан.

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 16:33
BlazeBio
Дело в том, что после вставки или удаления курсор улетает в самый низ брауза, при этом при вставке встаёт на не сущетсвующую строку(за последней реальной). Это происходит даже при RescanPanel и PushPos/PopPos.

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 16:51
edward_K
PushPos при вставке и при удалении не имеют смысла. При удалении можно типа так

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

wkl:=false
if getperv tabla=0 { wkl:=true;PushPos() }
if wkl
  getnext tabla;
delete current tabla;
if wkl { PosPos() }
rescanpanel(#tabla)
но обычно как то без этого обхожусь
на несуществующую при вставке может улетать при некорректной обработке cmSetDefault.

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 18:50
BlazeBio
Пробовал ваш способ - удаляются сразу две позиции в браузе. :(

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 19:24
m0p3e
Необходимо по человечески описать cmSetDefault, cmInsertRecord и cmDeleteRecord и ничего улетать никуда не будет.

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 19:28
BlazeBio
В том то и проблема, что по-человечески не получается. Если бы всё было хорошо я б не спрашивал.

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 19:39
m0p3e

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

TableEvent Table Katorg;
 cmSetDefault : {
                };
 cmInsertRecord : Insert Current Katorg;
 cmUpdateRecord : Update Current Katorg;
 cmDeleteRecord : If Message ( '', YesNo ) = cmYes
                    then Delete Current Katorg;
End; //TableEvent Katorg

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 20:18
BlazeBio
Удалется нормально, но вставка происходит только одна, при чём при запуске окна заполняющего текущую строку оно пропадает. Может из-за того, что у меня несколько таблиц?

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

			panel pPPlan
			table pptitle;
	 	 	 browse bPPlan(,,Sci13478Esc)
			   	 fields
 	 	 	 	 	 pptitle.pdate   'Дата' : [15] , protect, noAutoSize;
 	 	 	 	 	 pptitle.npp   'Номер плана' : [25], protect, noAutoSize;
	 	 	 	 	 ppstatus.name 'Статус' : [7], protect,noAutoSize;
 	 	 	 	 	 podr   'Подразделение' : [25] , protect, noAutoSize;
  	 	 	 end;
			 tableevent
			 	cmSetDefault: {		  //clearbuffer(#pptitle);
										   pptitle.pdate:=Cur_Date();
										   pptitle.npp:='';
										   pptitle.cppstatus:=0;
										   pptitle.cpodr:=0;
										   
										 //pptitle.atl_nrec:=RecordsInTable(#pptitle)+1;
										 }
			   cmUpdateRecord : update current pptitle;
			   cmInsertRecord :{ insert current pptitle;};
			   cmDeleteRecord : delete current pptitle;
			 end;
			end;

Re: Улетает курсор в браузе

Добавлено: 29 июл 2010, 20:45
edward_K
tableevent вообще то делается на конкретную таблу и не в панели.

Re: Улетает курсор в браузе

Добавлено: 30 июл 2010, 11:05
m0p3e
Панель с данном случае не нужна.
Запись не вставляется, т.к. не было модификации. Т.е. запись IsNew. Если ручная корректировка полей не производится, то в cmSetDefault необходимо выставить флаг модификации. SetModified(true).

Re: Улетает курсор в браузе

Добавлено: 30 июл 2010, 11:31
BlazeBio
m0p3e , поставил SetModified(true) - идёт вставка в таблицу pptitle, удаления происходит. Но у меня должны удаляться две таблицы pptitle и ppspecif(подчинённая). Получается тогда ещё прописывать удаление в handleevent и таблицы ppspecif?

Re: Улетает курсор в браузе

Добавлено: 30 июл 2010, 11:50
m0p3e
BlazeBio писал(а):m0p3e , поставил SetModified(true) - идёт вставка в таблицу pptitle, удаления происходит. Но у меня должны удаляться две таблицы pptitle и ppspecif(подчинённая). Получается тогда ещё прописывать удаление в handleevent и таблицы ppspecif?
У таблицы нет HandleEvent-ов - есть TableEvent.

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

TableEvent Table ppTitle
cmDeleteRecord :
 {
  //Перед удалением основной записи удаляем все подчиненные
  If Delete ppSpecif Where ((ppTitle.nrec == ppSpecif.cPPTitle )) = tsOk
    Delete Current ppTitle;
 }
End;

TableEvent Table ppSpecif
cmDeleteRecord :
 {
  Delete Current ppSpecif;
 }
End;
Идея понятна?

И панели убираем нафиг! Для скринов и браузов указываем корневые таблицы! browse bPPlan(,,Sci13478Esc); Table ppTitle;

Re: Улетает курсор в браузе

Добавлено: 30 июл 2010, 12:21
BlazeBio
А если вставка в другом окне? Как обработчик узнаёт, что именно та или иная таблица изменяется?

Re: Улетает курсор в браузе

Добавлено: 30 июл 2010, 12:23
m0p3e
По указанной корневой таблице в браузе или скрине. Если ppTitle указана корневой в 10-ти скринах/браузах, то для всех будет выполняться TableEvent Table ppTitle;