Страница 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;