редактирование в browse

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

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

s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: редактирование в browse

Сообщение s2176 »

Всего то нужно пробежаться по всем полям и разрешить им редактирование (хоть по ClearFieldOption /SetFieldOption), по enter соотв. запретить редактирование. Ну и может быть статус строку заменить.
это ровно то, что я хотела)))
А как статус строку поменять?
Кто сказал, что бесполезно биться головой об стену?!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: редактирование в browse

Сообщение 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.
  
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: редактирование в browse

Сообщение s2176 »

Победила, спасибо!
Кто сказал, что бесполезно биться головой об стену?!
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: редактирование в browse

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

Re: редактирование в browse

Сообщение edward_K »

Тут проблема.
Дело в том что cmUpdateRecords по умолчанию срабатывает только для основной таблицы окна
Поэтому либо вы перетащите это поле во времянку и в событии cmUpdateRecords пропишите синхронное изменение либо хватайте изменение cmCheckFields.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: редактирование в browse

Сообщение s2176 »

Понятно, спасибо!
Буду копать дальше.
Получается, что мне в cmCheckField нужно понять было ли изменение.
Я могу достать старое значение из OldFieldValue, но можно ли как-то, не перебирая все поля, сравнить старое значение с новым?
Кто сказал, что бесполезно биться головой об стену?!
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: редактирование в browse

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

Re: редактирование в browse

Сообщение s2176 »

И еще до кучи..
Как можно отловить событие "выхода из записи"?
Чтобы один раз запросить подтверждения от пользователя.
Кто сказал, что бесполезно биться головой об стену?!
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: редактирование в browse

Сообщение Алексей »

вроде cmPositionChanged
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: редактирование в browse

Сообщение Den »

s2176 писал(а):И еще до кучи..
Как можно отловить событие "выхода из записи"?
Чтобы один раз запросить подтверждения от пользователя.

Такого нет. Точнее будет все равно каждый раз спрашать с Вашей реализацией. Нужно просто для этого бравсе организовать два режима - один для редактирования, другой - смотрелка.
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Re: редактирование в browse

Сообщение s2176 »

Понятно, тогда проще сделать временную таблицу - кальку с arxshtraf, но с нужными индексами, работать с ней, а по выходу все это переписывать в arxshtraf.
Спасибо за помощь!
Кто сказал, что бесполезно биться головой об стену?!
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: редактирование в browse

Сообщение Den »

Ответить