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

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

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

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

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

Сообщение BlazeBio »

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

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

Сообщение edward_K »

rescanpanel(#table) обычно помогает. Или руками позиционируетесь, а потом снова рескан.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

Дело в том, что после вставки или удаления курсор улетает в самый низ брауза, при этом при вставке встаёт на не сущетсвующую строку(за последней реальной). Это происходит даже при RescanPanel и PushPos/PopPos.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение 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.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

Пробовал ваш способ - удаляются сразу две позиции в браузе. :(
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение m0p3e »

Необходимо по человечески описать cmSetDefault, cmInsertRecord и cmDeleteRecord и ничего улетать никуда не будет.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

В том то и проблема, что по-человечески не получается. Если бы всё было хорошо я б не спрашивал.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

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

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

Сообщение 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;
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

tableevent вообще то делается на конкретную таблу и не в панели.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение m0p3e »

Панель с данном случае не нужна.
Запись не вставляется, т.к. не было модификации. Т.е. запись IsNew. Если ручная корректировка полей не производится, то в cmSetDefault необходимо выставить флаг модификации. SetModified(true).
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

m0p3e , поставил SetModified(true) - идёт вставка в таблицу pptitle, удаления происходит. Но у меня должны удаляться две таблицы pptitle и ppspecif(подчинённая). Получается тогда ещё прописывать удаление в handleevent и таблицы ppspecif?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение 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;
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

А если вставка в другом окне? Как обработчик узнаёт, что именно та или иная таблица изменяется?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение m0p3e »

По указанной корневой таблице в браузе или скрине. Если ppTitle указана корневой в 10-ти скринах/браузах, то для всех будет выполняться TableEvent Table ppTitle;
Ответить