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

Вставка новой записи и позиционирование на ней

Добавлено: 20 сен 2013, 10:07
s2176
Добрый день!
Есть browse по таблице arxshtrf.
На экране отображаются таб.№(arxshtrf), ФИО(из persons) и еще несколько полей из arxshtrf.
По нажатию F7 сначала открывается интерфейс выбора сотрудника, для которого нужно создать
новую запись в arxshtrf.
Сотрудник выбирается, запись с табельным и ФИО создается, но при этом на экране появляется еще одна
запись с незаполненными полями, и курсор стоит на ней.
А как сделать так, чтобы курсор остался на новой записи с только что выбранным сотрудником в поле, следующем за ФИО?

кусок текста:

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

browse b_resEdit (,,sci178esc);
show at (,,,);
table arxshtrf;
  fields
  arxshtrf.tabn 'Таб.№': [6], protect;
  persons.fio 'ФИО': [30], skip;
  arxshtrf.Procpsb 'Отпуск по норме': [3.0,#Sumformat];
  arxshtrf.koldn 'Заработано дн.': [7.2,#Sumformat];
  arxshtrf.Summa0 'Использовано дн.': [4.0,#Sumformat];
  arxshtrf.sumnach 'СДЗ': [12.2,#Sumformat];
end;
...
cmInsert:
{ runinterface(Pick_OnePerson,dat_form,nrec_pers);
   ...
  insert arxshtrf set
      clsch:=nrec_lsch,  tabn:=ltabn,  tperson:=nrec_pers,  datan:=dat_form,  filialno:=106,  vidud:=1,
      sw1:=yy,  cexal:=nrec_podr,  Schpol1:=sgrkateg,  Schpol2:=skateg,  procpsb:=vacat,
      cschetk:=dbschet,  csubschk:=dbsschet,  paynum:=sdolgn,  dat1:=app_date,  dat2:=dis_date;
}

Re: Вставка новой записи и позиционирование на ней

Добавлено: 20 сен 2013, 10:35
edward_K
буфeр записи создается по cmSetDefault в событии таблицы (Tableevent table ....). Вставлять запись лучше в cmInsertRecord - insert current ....
Вставку как insert set лучше не делать. Вам надо перенести выбор в cmSetDefault и выбранное значение присвоить полю в таблице как set table.поле:= - это в автомате вызовет cmInsertRecord. Можно и принудительно вставить в cmSetDefault, но тогда нужно писать SetNew(False).
И почаще пользуйтесь UpdateTable; - это в автомате приводит к вызову cmInsertRecord или cmUpdateRecord по необходимости.

Re: Вставка новой записи и позиционирование на ней

Добавлено: 20 сен 2013, 13:36
s2176
Спасибо огромное, работает!

Re: Вставка новой записи и позиционирование на ней

Добавлено: 23 сен 2013, 09:50
s2176
Теперь другая засада(((
Вставляет новую запись красиво.
Но может быть ситуация, когда запись вставлять не нужно.
Например: сотрудник уже есть в списке, а я пытаюсь выбрать его еще раз.
Выдаю соответствующее сообщение, при этом не могу подавить возникновение на экране пустой записи.
Попробовала после выдачи сообщения вставить SetNew(False), но в результате из browse исчезают все записи, остается только пустая.

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

 cmSetDefault:
 { message('cmSetDefault');
   runinterface(Pick_OnePerson,dat_form,nrec_pers);
   if nrec_pers=0
	  then { message('Вы никого не выбрали, запись сформирована на будет.'); SetNew(False); }
	  else { if getfirst arx where ((dat_form/==arx.datan(noindex) and nrec_pers/==arx.tperson(noindex))) <> tsOk
				then { if getfirst pers = tsOk
					   {  ...
 						 arxshtrf.clsch:=nrec_lsch; arxshtrf.tabn:=ltabn; arxshtrf.tperson:=nrec_pers;
 						 arxshtrf.datan:=dat_form; arxshtrf.filialno:=106; arxshtrf.vidud:=1;
						 arxshtrf.sw1:=yy; arxshtrf.cexal:=nrec_podr; arxshtrf.Schpol1:=sgrkateg;
						 arxshtrf.Schpol2:=skateg; arxshtrf.procpsb:=vacat; arxshtrf.summa2:=kdpo; 
                                                 arxshtrf.summa1:=kdpo*_sdz;
						 arxshtrf.cschetk:=dbschet; arxshtrf.csubschk:=dbsschet; arxshtrf.cex:=nrec_cex;
						 arxshtrf.paynum:=sdolgn; arxshtrf.dat1:=app_date; arxshtrf.dat2:=dis_date;
					   }
					 }
				else { message('Cотрудник уже есть в списке!'); SetNew(False); }
			}
   _sdz:=0; kdpo:=0; vacat:=0;
 }
end;

Re: Вставка новой записи и позиционирование на ней

Добавлено: 23 сен 2013, 11:05
m0p3e
Abort;

Re: Вставка новой записи и позиционирование на ней

Добавлено: 23 сен 2013, 12:38
s2176
Как все просто)))) спасибо!