Вызов окна при вставке строки в брауз

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

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

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

Вызов окна при вставке строки в брауз

Сообщение BlazeBio »

Как правильно вызвать окно при вставке строки в брауз?

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

						  tableevent table pptitle
							 cmSetDefault: {		    //clearbuffer(#pptitle);
														set pptitle.pdate:=Cur_Date();//StrToDate('25/05/95','DD/MM/YY');//
														set pptitle.npp:='';
														set pptitle.cppstatus:=281474976710657;
														set pptitle.cpodr:=0;
														SetModified(true);
														UpdateTable();
														 RunWindowModal(PlanCorrect);
														//rereadrecord(#pptitle);
														//message('setdefault');

													  }
							cmUpdateRecord :{ if grant_s=true
							  					{
												  	update current pptitle;
												}
										 	}
							cmInsertRecord :{ insert current pptitle;
											//	clearbuffer(#ppspecif);
								            ppspecif.cpptitle:=pptitle.atl_nrec;
											 insert current ppspecif;
											 //updateTable();
											//	RunWindowModal(PlanCorrect);
											}
							cmDeleteRecord :
							{
								  If Delete ppSpecif Where ((ppTitle.atl_nrec == ppSpecif.cPPTitle )) = tsOk
								    Delete Current ppTitle;

							}
							cmCheckRecord:
 							{
									MakeValid(#pptitle);
									if isvalid(#pptitle)
											{
									update current pptitle;
											}
									if isnew
											{
									Putcommand(cmInsertRecord);
									//RunWindowModal(PlanCorrect);
											}
							
							}
							cmCheckField:
							  {
								if grant_s=true
								  {
									updatetable;
									SetModified(true);
									  case CurField of
										#pptitle.pbdate:
										{
										  update current pptitle;
										  RescanPanel(#pptitle);
										  RescanPanel(#ppspecif)
										}
										#pptitle.pedate:
										{
										  update current pptitle;
										  RescanPanel(#pptitle);
										  RescanPanel(#ppspecif)
										}
										#pptitle.pdate:
										{
										  update current pptitle;
										  RescanPanel(#pptitle);
										  RescanPanel(#ppspecif)
										}
										#pptitle.npp:
										{
									  	  update current pptitle;
										  RescanPanel(#pptitle);
										  RescanPanel(#ppspecif)
										}

										end;
								  }
								  else
									stop;
							  }
							  cmPositionChanged:
							  {
								//message(sGetTune('user.descr'));
								//message(sGetTune('USER.descr'));
								if( iSecurity::fSecurityPolicy(sGetTune('USER.descr'),pptitle.atl_nrec,pptitle.cppstatus) = FALSE )
								 //bPPlan(,,Sci178EnEsc)
								 {
								         cfsSetProp('bPPlan','StatusCtx', Sci17EnEsc);//Sci17EnEsc//SciAQAEnEsc1
//								 cfsSetProp('bCorPPlan','StatusCtx',sciAQACancel1);

										 SetFormat(sCorPPlan_nogrant);
										 cfsSetProp('bCorPPlan','StatusCtx',sciAQACancel1);
										 cfsSetProp('sCorPPlan','StatusCtx',sciAQACancel1);
										 grant_s:=false;
//										 message('false');
								 }
								 else if( iSecurity::fSecurityPolicy(sGetTune('USER.descr'),pptitle.atl_nrec,pptitle.cppstatus) = true )
								 {
								  		 cfsSetProp('bPPlan','StatusCtx',Sci178EnEsc);
//								  cfsSetProp('bCorPPlan','StatusCtx',Sci13478Esc);
										 SetFormat(sCorPPlan);
										 cfsSetProp('bCorPPlan','StatusCtx',Sci13478Esc);
										 cfsSetProp('sCorPPlan','StatusCtx',SciAqaSwitchItemName);
										 grant_s:=true;
//										 message('true');
								 }
								 rescanpanel(#pptitle);
							  }
							end;



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

Re: Вызов окна при вставке строки в брауз

Сообщение m0p3e »

Ну во первых зачем в cmSetDefault все присвоения с set и затем еще и SetModified??? Масло масленое...
Во вторых какой смысл в этой строке "set pptitle.npp:='';"?
В cmSetDefault пишут инициализацию поле по умолчанию без всяких сетов дабы если пользователь отказался от ввода никакой вставки записи не было.
RunWindow лучше написать в cmInsert или cmAddNewRec в зависимости от статуса.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вызов окна при вставке строки в брауз

Сообщение BlazeBio »

set и setmodified я делал, чтоб наверника проверить отработку вставки. А в cmInsertRecord пробовал вызов окна, вызывалось не сразу, только если пермещался на другую строку в браузе. Добавил в cmInsertRecord UpDatePanels() и использовал в cmSetDefault - UpDateTableWithInserted и PutCommand(cmDefault)(по cmDefault происходит вызов окна ), тогда лок пропал.
m0p3e писал(а):Во вторых какой смысл в этой строке "set pptitle.npp:='';"?
Тут по умолчанию номера у плана нет.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вызов окна при вставке строки в брауз

Сообщение m0p3e »

BlazeBio писал(а):set и setmodified я делал, чтоб наверника проверить отработку вставки. А в cmInsertRecord пробовал вызов окна, вызывалось не сразу, только если пермещался на другую строку в браузе. Добавил в cmInsertRecord UpDatePanels() и использовал в cmSetDefault - UpDateTableWithInserted и PutCommand(cmDefault)(по cmDefault происходит вызов окна ), тогда лок пропал.
m0p3e писал(а):Во вторых какой смысл в этой строке "set pptitle.npp:='';"?
Тут по умолчанию номера у плана нет.
cmInsertRecord и cmInsert разные события!!!

В cmDefault пишем поля отличные от дефолта. set pptitle.npp:=''; сброс поля в дефолт. Зачем?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вызов окна при вставке строки в брауз

Сообщение BlazeBio »

m0p3e писал(а): cmInsertRecord и cmInsert разные события!!!
В cmDefault пишем поля отличные от дефолта. set pptitle.npp:=''; сброс поля в дефолт. Зачем?
Сорри, не внимательно прочитал, уберём pptitle.npp:='' :grin:
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вызов окна при вставке строки в брауз

Сообщение BlazeBio »

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

Re: Вызов окна при вставке строки в брауз

Сообщение m0p3e »

А зачем позже то?
Стандартная схема такова:
cmSetDefault подготавливает буфер записи.
cmInsert открывает окно для редактирования.
Если что-то пользователь изменил, то устанавливается признак модификации и будет вызван cmInsertRecords перед перепозиционированием и т.д..
Ответить