Страница 2 из 2
Re: редактирование в browse
Добавлено: 09 дек 2013, 15:14
s2176
Всего то нужно пробежаться по всем полям и разрешить им редактирование (хоть по ClearFieldOption /SetFieldOption), по enter соотв. запретить редактирование. Ну и может быть статус строку заменить.
это ровно то, что я хотела)))
А как статус строку поменять?
Re: редактирование в browse
Добавлено: 09 дек 2013, 15:31
edward_K
установить свойство объекта "StatusCtx" в требуемое. При этом обратите внимание, что если вы его задавали для каждого, то и переназначать нужно для каждого, иначе для корневого.
cfsSetProp('наименование элемента','StatusCtx',sci13Esc);
Ну еще способ продисаблить команды.
Код: Выделить всё
var
w_mode :word;
Procedure ReadEdit ;
{ if w_mode=0
{DisableCommand(cmInsert);
DisableCommand(cmAddNewRec);
DisableCommand(cmInsertRecord);
DisableCommand(cmSetDefault);
DisableCommand(cmDelete);
DisableCommand(cmDeleteRecord);
}
else
{ .. }
}
HandleEvent
cmPositionChanged:
{ if w_mode=0
ProtectRecord(#table,true)
}
...
end.
Re: редактирование в browse
Добавлено: 10 дек 2013, 09:25
s2176
Победила, спасибо!
Re: редактирование в browse
Добавлено: 11 дек 2013, 10:59
s2176
Задача немного изменилась.
Теперь из таблицы Arxshtrf надо выбрать записи по одному сотруднику, показать их в порядке возрастания datan (ключа по этому полю нет).
Показать все это на экране и дать возможность редактировать.
Не смогла добиться сортировки по datan, решила сделать вспомогательную табличку, ее структура:
Table Struct tArxSotr
( dataR : date,
nrec_arx : comp
)
with index
( ind1 = dataR
);
Сделала ее в запросе главной, отображается все красиво, только не редактируется(((
собственно текст:
Код: Выделить всё
interface CorrectReserveSotr 'Просмотр/корректировка резерва по сотруднику' cyan;
var ...
create view
as select arx.*, tArxSotr.*, arxshtrf.*
from tArxSotr, arxshtrf, arxshtrf arx
where ((tArxSotr.nrec_arx/==arxshtrf.nrec and
ltabn==arx.tabn
))
;
browse b_resView (,,sci14esc);
show at (,,,);
table tArxSotr;
fields
tArxSotr.DataR 'Дата'#13'резерва': protect, centered;
arxshtrf.namepl2 'Категория': [15], skip, centered;
arxshtrf.Procpsb 'Норма'#13'дн.': [5.0,#IntSumformat], protect, centered;
arxshtrf.koldn #3'Заработ.'#13#3'дн.': [9.2,#Sumformat], protect;
arxshtrf.Summa0 #3'Использ.'#13#3'дн.': [7.0,#IntSumformat], protect;
arxshtrf.sumnach #3'СДЗ': [9.2,#Sumformat], protect;
arxshtrf.ostatpr #3'Всего'#13#3'отпускых': [12.2,#BigSumformat], protect;
arxshtrf.dat1 'Дата'#13'приема': protect, centered;
arxshtrf.dat2 'Дата ув.': protect, centered;
end;
tableevent table tArxSotr
cmUpdateRecord:
{ kdpo:=arxshtrf.koldn-arxshtrf.summa0; _sdz:=arxshtrf.sumnach;
arxshtrf.summa1:=kdpo; arxshtrf.summa2:=kdpo*_sdz;
if message('Вы уверены?',YesNo) = cmYes then update current arxshtrf;
}
cmSetDefault:
{ message('cmSetDefault')
}
end;
HandleEvent
cmInit:
{ var famio: string;
Disablecommand(cmInsert);
Disablecommand(cmDelete);
delete all from tArxSotr;
runinterface(Pick_OnePerson_AnyDate,nrec_pers,ltabn);
if getfirst persons where ((nrec_pers==persons.nrec)) = tsOk then famio:=persons.fio;
SetTitle('Ввод/корректировка резерва по сотруднику '+famio);
_loop arx { insert tArxSotr set dataR:=arx.datan, nrec_arx:=arx.nrec; }
}
cmEdit:
{ _prizEdit:=1;
enablecommand(cmInsert);
enablecommand(cmDelete);
cfsSetProp(cfsGetCurrentContainerSelf,'Palette',0) //Изменение цвета окна: был cyan(1), стал blue(0), 2-серый
ClearFieldOption(#arxshtrf.Procpsb, ofProtected);
ClearFieldOption(#arxshtrf.koldn, ofProtected);
ClearFieldOption(#arxshtrf.Summa0, ofProtected);
ClearFieldOption(#arxshtrf.sumnach, ofProtected);
ClearFieldOption(#arxshtrf.ostatpr, ofProtected);
rescanpanel(b_resView);
}
cmCancel:
{ if _prizEdit=1
{ cfsSetProp(cfsGetCurrentContainerSelf,'Palette',1) //Изменение цвета окна: был cyan(1), стал blue(0), 2-серый
SetFieldOption(#arxshtrf.Procpsb, ofProtected);
SetFieldOption(#arxshtrf.koldn, ofProtected);
SetFieldOption(#arxshtrf.Summa0, ofProtected);
SetFieldOption(#arxshtrf.sumnach, ofProtected);
SetFieldOption(#arxshtrf.ostatpr, ofProtected);
Disablecommand(cmInsert);
Disablecommand(cmDelete); rescanpanel(b_resView);
_prizEdit:=0; abort();
}
}
cmClose:
{ closeinterface(cmClose);
}
end;
end.
Редактировать мне нужно значения из Arxshtrf.
Менять значения на экране получается, но ничего при этом не сохраняется.
Какое событие ловит такие изменения?
Re: редактирование в browse
Добавлено: 11 дек 2013, 11:14
edward_K
Тут проблема.
Дело в том что cmUpdateRecords по умолчанию срабатывает только для основной таблицы окна
Поэтому либо вы перетащите это поле во времянку и в событии cmUpdateRecords пропишите синхронное изменение либо хватайте изменение cmCheckFields.
Re: редактирование в browse
Добавлено: 11 дек 2013, 12:27
s2176
Понятно, спасибо!
Буду копать дальше.
Получается, что мне в cmCheckField нужно понять было ли изменение.
Я могу достать старое значение из OldFieldValue, но можно ли как-то, не перебирая все поля, сравнить старое значение с новым?
Re: редактирование в browse
Добавлено: 11 дек 2013, 12:50
Den
можно попробовать UpdatePanels
добавьте еще
Код: Выделить всё
tableevent table arxshtrf;
CmUpdateRecord : {
Message('get CmUpdateRecord table arxshtrf');
update current arxshtrf;
}
...
end;
а тут :
tableevent table tArxSotr
cmUpdateRecord:
{ kdpo:=arxshtrf.koldn-arxshtrf.summa0; _sdz:=arxshtrf.sumnach;
if isvalid(#arxshtrf)
{
arxshtrf.summa1:=kdpo; arxshtrf.summa2:=kdpo*_sdz;
UpdatePanels;
}
}
Re: редактирование в browse
Добавлено: 11 дек 2013, 13:03
s2176
И еще до кучи..
Как можно отловить событие "выхода из записи"?
Чтобы один раз запросить подтверждения от пользователя.
Re: редактирование в browse
Добавлено: 11 дек 2013, 13:12
Алексей
вроде cmPositionChanged
Re: редактирование в browse
Добавлено: 11 дек 2013, 13:26
Den
s2176 писал(а):И еще до кучи..
Как можно отловить событие "выхода из записи"?
Чтобы один раз запросить подтверждения от пользователя.
Такого нет. Точнее будет все равно каждый раз спрашать с Вашей реализацией. Нужно просто для этого бравсе организовать два режима - один для редактирования, другой - смотрелка.
Re: редактирование в browse
Добавлено: 11 дек 2013, 13:30
s2176
Понятно, тогда проще сделать временную таблицу - кальку с arxshtraf, но с нужными индексами, работать с ней, а по выходу все это переписывать в arxshtraf.
Спасибо за помощь!
Re: редактирование в browse
Добавлено: 11 дек 2013, 13:42
Den