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

Модификации в интерфейсах

Добавлено: 12 июл 2010, 17:40
BlazeBio
Есть такой интерфейс:

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

interface Plan 'Производственные планы';
 show   at   (,,76,25);
 var
 	 res : word;
 	 data:date;
	 nPPlan :string;
 	 status:string;
	 katpodrname:string;
	 nmc:string;
	 UnMea:string;
 	 t_plan:string;
	 table struct pplan
				 (
					nRec : comp,
					datum : date,
					nPPlan: word, // наименование
					status:string,
					podrname:string,
					t_plan : word
				 )
				 with index
				 (
					 pplan0 = nRec(Unique,Surrogate)
				 );
	 table struct pplancor
				 (
					nRec:comp,
				 	cpplan:comp,
					line: string,
					group_i:string,
					namemc : string,
					percIs:double,
					TechLoss:double,
					UnitMeasure:string,
					Vsego:double,
					Fdecp:double,
					Sdecp:double,
					Tdecp:double
				 )
				 with index
				 (
					 pplancor01 = nRec(Unique,Surrogate),
					 pplancor02=cpplan
				 );

create view
 as select *
from PPGRFORMAT,PPKATSTANMC,PPKATSTAN,PPSTATUS,PPLINE,PPTITLE,PPSPECIF,pplan,pplancor
where((pplan.nrec==pplancor.cpplan));


	 	 	 browse bPPlan(,,sci178EnEsc)
				 table pplan
 	 	 	 	 fields
 	 	 	 	 	 pplan.datum   'Дата' : [15] , protect, noAutoSize;
 	 	 	 	 	 pplan.nPPlan   'Номер плана' : [25], protect, noAutoSize;
 	 	 	 	 	 pplan.status 'Статус' : [7], protect,noAutoSize;
 	 	 	 	 	 pplan.podrname   'Подразделение' : [25] , protect, noAutoSize;
 	 	 	 	 	 pplan.t_plan 'Тип плана' : [4], protect, noAutoSize;
 	 	 	 end;

 	 handleevent
	 	 cmPick://F3
	 	 {
		 PushPos (bPPlan);
			 RunWindow('PlanCorrect');
		 PoPpos (bPPlan);
		 }
		 cmDelete://F8
		 {
			 delete current pplan;
			 ReReadRecord(#pplan);
		 }
		 cmInsert://F7
		 {
			insert current pplan;		   
			 RunWindow('PlanCorrect');
		 }
		 cmDefault://Enter
		 {
		 }
		 cmClose://Esc
		 {
		 }
 	 end;

window PlanCorrect 'Редактирование планов';
show at (,,83,25);
/*create view corr
as select * from pplancor
where ((pplan.nrec==pplancor.cpplan));*/
		panel p_sCorPPlan;
		show at (,,,8);
			screen sCorPPlan;
			bevel be1 {4,0,79,7,bsRaised, bsFrame};
				fields
					data :pickButton;
					nPPlan:noprotect;
					katpodrname :pickButton;
					status :pickButton;
					t_plan :pickButton;
					line: pickbutton;
					group_i:noprotect;
<<

          Дата            Номер плана              Структурное подразделение
        .@@@@@@@@@       .@@@@@@@@@@@@           .@@@@@@@@@@@@@@@@@@@@@@@@@@

               Статус               .@@@@@@@@@@@      Тип плана.@@@@@@@@@@@@
               Линия      .@@@@@@@@@@@@@@@@@@@@@      Группа  .@@@@@@@@@@@@@

>>
			end;
		end;
		panel p_bCorPPlan;
		show at (,9,,)
			browse bCorPPlan(,,sci178EnEsc)
			table pplancor
				fields
					pplancor.namemc 'Наименование' : [20], pickButton;
					pplancor.percIs'Процент','1 сорта,%': [6],noprotect;
					pplancor.TechLoss 'Техпотери, %':[8],noprotect;
					pplancor.UnitMeasure 'Единица','измерения':[7],pickButton;
					pplancor.Vsego 'Всего':[12],Skip;
					pplancor.Fdecp 'Первая','декада':[10],noprotect;
					pplancor.Sdecp 'Вторая','декада':[10],noprotect;
					pplancor.Tdecp 'Третья','декада':[10],noprotect;
			end;
		end;
handleEvent
		cmInit:
		{
			clearbuffer(sCorPPlan);
			data:=pplan.datum;
			nPPlan:=pplan.nPPlan;
			status:=pplan.status;
			katpodrname:=pplan.podrname;
			t_plan:=pplan.t_plan;
 			update current pplan;
			ReReadRecord(#pplan);
			RescanPanel(sCorPPlan);
		}
		cmPick:
		{

		  case CurField of
			#namemc:
		  	{
			pushpos (bCorPPlan);
			   res:= RunInterface('PickMC',nmc);
			   pplancor.namemc:=nmc;
			    pplancor.cpplan:=pplan.nrec;
				If (IsFieldModified(#pplancor.namemc))
				{
						  update current pplan;
				}
				else
				{
			  			  insert current pplancor;
			  	}
			  ReReadRecord(#pplancor);
			PopPos(bCorPPlan);
			}
			#UnitMeasure:
			{
			pushpos (bCorPPlan);
			   res:= RunInterface('MeashureUnits',UnMea);
			    pplancor.UnitMeasure:=UnMea;
			    pplancor.cpplan:=pplan.nrec;
				If (IsFieldModified(#pplancor.UnitMeasure))
				{
						  update current pplancor;
				}
				else
				{
			  			  insert current pplancor;
			  	}
			  ReReadRecord(#pplancor);
			PopPos(bCorPPlan);
			}
			#katpodrname:
			{
			  res:=RunInterface('PickPodr',katpodrname);
			  pplan.podrname:=katpodrname;
			  update current pplan;
			  ReReadRecord(#pplan);
			  RescanPanel(sCorPPlan);
			}
			#data:
			{

				pplan.datum:=data;
				update current pplan;
				ReReadRecord(#pplan);
				RescanPanel(sCorPPlan);
			}
		  end;
		  	RescanPanel(sCorPPlan);

		}
		cmCancel:
		{
		  CloseInterface(cmDefault);
		  stop;
		}
		cmCheckRecord:
 		{
		if IsModified
		{
			update current pplancor;
			update current pplan;
			ReReadRecord(#pplancor);
			ReReadRecord(#pplan);
			RescanPanel(sCorPPlan);
		}
		}
		cmExprFieldChanged:
		{
			pplancor.vsego:=pplancor.Fdecp+pplancor.Sdecp+pplancor.Tdecp;
			update current pplancor;
			update current pplan;
			ReReadRecord(#pplan);
			ReReadRecord(#pplancor);
			RescanPanel(sCorPPlan);
		}
		cmPositionchanged:
		{
			update current pplancor;
			ReReadRecord(#pplancor);
		}
		cmClose:
		{
			RescanPanel(sCorPPlan);
			ReReadRecord(#pplan);
		}
		cmDone:
		{
			ReReadRecord(#pplan);
			ReReadRecord(#pplancor);
		}
		cmUpdateRecord:
		{
		    PushPos (bCorPPlan);
			update current pplancor;
			ReReadRecord(#pplancor);
			PoPpos (bCorPPlan);
		}
		cmInsert:
		{	PushPos (bCorPPlan);
			insert current pplancor;
			ReReadRecord(#pplancor);
			PoPpos (bCorPPlan);
		}
		cmDelete:
		{	PushPos (bCorPPlan);
			delete current pplancor;
			ReReadRecord(#pplancor);
			PoPpos (bCorPPlan);
		}
end;
end;

 end.
Возникло несколько проблем:
- как сделать чтобы при создании записи в браузе bPPlan в скрине sCorPPlan данные были пусты;
- при выборе в поле pplancor.namemc матценность не отображается в браузе bCorPPlan, хотя величины измерений из интерфейса MeashureUnits в поле UnitMeashure отображаются;
- как сделать, чтобы происходило изменение последний трёх полей бразуза bCorPPlan( pplanancor.Fdecp, pplanancor.Sdecp, pplanancor.Tdecp)(а то при переходе в другое поле сбрасываются значения), а также суммирование этих полей в поле pplancor.vsego(сейчас оно не работает).
- почему поле c типом date не обновляется также по Pick как поля других типов;
- и как сделать, чтобы при вставке или обновлении позиция курсора в браузе не смещалась, а оставалась на своём месте;
Вот исходники PickMC:

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

#include %src%\make\vipInterface.vip
vipInterface PickMC ;//(SecurityPolicy);
public :
  function fCollection ( nrecMC : comp ) : string;
  function fTypeMC ( nrecMC : comp ) : string;
end;

Interface PickMC 'Каталог матценностей';
	show at (,,100,30);
  var katmcname:string;
  		i:integer;
  create view
  //var  kmcBARKOD : string;
  //     kmcName : string;
  ( ei, kgr, gr, collection, typeMC )
  as select
  ced->name,
  cgroupmc->kod,
  cgroupmc->name,
  fCollection ( katmc.nrec ),
  fTypeMC ( katmc.nrec ),
  *
  from katmc, exclassval, exclassseg
  WHERE (( 5 == katmc.isArch ))
  order by katmc.BARKOD
  ;
  	parameters katmcname;
/*
*******************************************************************************
Название:        fCollection ( nrecMC : comp ) : string;
Описание:        Функция поиска вида коллекции у МЦ
Входные пар-ры:  nrecMC : comp; - nrec МЦ
Выходные пар-ры: Название коллекции к которой принадлежит МЦ
*******************************************************************************
*/
  function fCollection ( nrecMC : comp ) : string;
  {
    if ( GetFirst exclassval where (( nrecMC == exclassval.crec and 1411 == exclassval.wtable and 3 == exclassval.classcode )) = tsOk )
    {  if ( GetFirst exclassseg where (( exclassval.cclassseg == exclassseg.nrec )) = tsOk )
        fCollection := exclassseg.name;
    } else fCollection := ' ';
  }

/*
*******************************************************************************
Название:        fTypeMC ( nrecMC : comp ) : string;
Описание:        Функция поиска доп. характеристик прикрепленных к МЦ
                 (цв., р.р. и т.д.)
Входные пар-ры:  nrecMC : comp; - nrec МЦ
Выходные пар-ры: Строку с перечислением описания доп. данных по МЦ
*******************************************************************************
*/
  function fTypeMC ( nrecMC : comp ) : string;
  {
    var tempCATMC : string;
    tempCATMC := '';

    if ( GetFirst exclassval where (( nrecMC == exclassval.crec and 1411 == exclassval.wtable)) = tsOk )
    {
      do
      {
        if ( exclassval.classcode = 3 ){tempCATMC := tempCATMC + '';}
        else
        {
          if ( GetFirst exclassseg where (( exclassval.cclassseg == exclassseg.nrec )) = tsOk )
            tempCATMC := exclassseg.name + ' ' + tempCATMC;
        }
      } while ( GetNext exclassval where (( nrecMC == exclassval.crec and 1411 == exclassval.wtable )) = tsOk )
    }
    fTypeMC := tempCATMC;
  }

	browse brClasdisc;
	  fields
		katmc.BARKOD 'Код' : [5], protect;
		katmc.name 'Наименование товара' : [30], protect;
		ei 'ед.и' : [3], protect, centered;
		kgr 'код' : [6], skip;
		gr 'группа' : [10], skip;
		collection 'Коллекция' : [20], Protect;
		typeMC 'вид' : [10], Protect;
		katmc.volume '%сортн' : [5.1], Protect;
		katmc.massa 'вес изд' : [5.1], Protect;
	end;

  handleEvent
    cmInit :
    { i:=0;
      // Ограничение отображения и возможностей работы с документом при ограничение прав
      if( SecurityPolicy::fSecurityPolicy(sGetTune('user.descr'), 'ChangeMC') = FALSE )
        cfsSetProp('brClasdisc','StatusCtx', sciAQACancel1);
      else cfsSetProp('brClasdisc','StatusCtx',sciAqaPlanChoice);

    }
    // Формирование отчета Списка МЦ

    // Редактирование данных по МЦ, вызов интерфейса L_MCU::KATMC
    cmDefault : //cmArmEdit :
    {
	  if (Message('Выбрать МЦ?',YesNo)=cmYes)
	  {	i:=1;
		katmcname:=katmc.name;
		CloseInterface('PickMC');
	  }
	  else
	  { cfsSetProp('brClasdisc','StatusCtx', sciAQAEnEsc178);
		if(SecurityPolicy::fSecurityPolicy(UserName, 'ChangeMC') = FALSE){}
		 else
		 {
		   RunInterface('L_MCU::KATMC',katmc.nrec,0);
		   katmcname:=katmc.name;
		   ReDrawPanel(tnkatmc);
		   stop;
		 }
	  }
		//Inherited::handleEvent(cmDefault);
    }
	cmPick : //cmArmEdit :
    {
	  if (Message('Выбрать МЦ?',YesNo)=cmYes)
	  {	i:=1;

		katmcname:=katmc.name;
		CloseInterface('PickMC');
	  }
	  else
	  {
		cfsSetProp('brClasdisc','StatusCtx', sciAQAEnEsc178);
		if(SecurityPolicy::fSecurityPolicy(UserName, 'ChangeMC') = FALSE){}
				 else
				 {
				   RunInterface('L_MCU::KATMC',katmc.nrec,0);
				   katmcname:=katmc.name;
				   ReDrawPanel(tnkatmc);
				   stop;
				 }
	  }
	}
	cmInsert :
    {
      insert katmc set katmc.isarch = 5;
      ReReadRecord(#katmc);
      RunInterface('L_MCU::KATMC',katmc.nrec,0);
      ReDrawPanel(tnkatmc);
      stop;
    }
    // Удаление МЦ
    cmDelete :
    {
       RunInterface('L_MCU::KATMC', katmc.nrec,0);
       ReDrawPanel(tnkatmc);
       stop;
    }

  end;
end.
и MeashureUnits:

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

interface MeashureUnits;
	show at (,,7,);
	var kateabbr:string;
	create view
	as select *
	from kated;
parameters kateabbr;
browse bKated;
	table kated;
	fields
		abbr 'Един.',' измер.':[7],centered;
	end;
	handleevent
		cmPick:
		{
			kateabbr:=kated.abbr;
			CloseInterface('MeashureUnits');
		}
		cmDefault:
		{
			kateabbr:=kated.abbr;
			CloseInterface('MeashureUnits');
		}
	end;
end.
Заранее благодарен за ответ на любой из вопросов. :cool:

Re: Модификации в интерфейсах

Добавлено: 12 июл 2010, 18:13
BlazeBio
Проблему с пустыми значениями решил, воспользовавшись cmSetDefault. :grin:. Да только теперь пустые значения и для редактирования и для создания строк :???: .

Re: Модификации в интерфейсах

Добавлено: 13 июл 2010, 12:02
Maverick
Ну для вставки/редактирования записей я бы
а) пользовался стандартными контекстами, поддерживающими нажатие F4, F7, F8
б) в соответствующих скринах/панелях обрабатывал стандартные табличные события

cmInsertRecord : If insert current Таблица = tsOk {логика на вставку новой записи}
cmUpdateRecord: If update current Таблица = tsOk {логика на модификцию записи}
cmDeleteRecord: If delete current Таблица = tsOk {логика на удаление записи}

в этом случае при вставке новой записи в скрине можно работать с буфером записи, в которую по умолчанию подставляются значения полей, определенных (если это необходимо) в cmSetDefault

суть такова:

вставка: имеем browsе. Жмем F7 -> отрабатывает cmSetDefault. В нем определеяем поля по умолчанию тут же вызываем окно в котором определен screen для редактирования записи. заносим значения. при потере позиции (закрытии окна, перемещении с текущей записи, для корневой таблицы в данном скрине/броузе отрабатывает cmInsertRecord
редактирование: все то же самое, только отрабатывает cmUpdateRecord
удаление: напрямую из броуза/скрина отрабатывает cmDeleteRecord и при этом текущей становится предыдущая/следующая запись.

собственно логика отработки примерно такая, если не вдаваться в подробности отлова cmAbortInsert и прочее

Re: Модификации в интерфейсах

Добавлено: 13 июл 2010, 17:08
BlazeBio
Теперь реализация идёт без cmSetDefault. C cmSetDefault у меня в браузе bCorPPlan не вставлялась новая строка. Сейчас у меня по декадам (Sdecp,Fdecp,Tdecp) записываются данные по вставленной первой строке и дублируются во всех последующих строках при вставке, а при попытке изменений данные обнуляются после ухода с поля. Также у меня компилятор не воспринимает по F4 событие cmEdit(пишет, что нет такого события, метода, функции, хотя мне казалось, что это стандартное событие). Брауз bCorPPlan вообщее какой-то проблемный при вставке новой строки приходится смещаться на позицию вверх иначе пишется, что ошибка позиции (при смещения курсора строка уходит на позицию вверх, а старая убирается), хотя в главном браузе bPPlan всё нормально. Проблема с МЦ решилась(в коде стояла не та временная таблица) :smile: . Вот новый вариант кода:

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


interface Plan 'Производственные планы';
 show   at   (,,76,25);
 var
 	 res : word;
	 nmc:string;
	 UnMea:string;
	 table struct pplan
				 (
					nRec : comp,
					datum : date,
					nPPlan: string, // наименование
					status:string,
					podrname:string,
					t_plan : string,
					line: string,
					group_i:string
				 )
				 with index
				 (
					 pplan0 = nRec(Unique,Surrogate)
				 );
	 table struct pplancor
				 (
					nRec:comp,
				 	cpplan:comp,
					namemc : string,
					percIs:double,
					TechLoss:double,
					UnitMeasure:string,
					//Vsego:double,
					Fdecp:double,
					Sdecp:double,
					Tdecp:double
				 )
				 with index
				 (
					 pplancor01 = nRec(Unique,Surrogate),
					 pplancor02=cpplan
				 );

create view (Vsego)
 as select (Fdecp+Sdecp+Tdecp),*
from PPGRFORMAT,PPKATSTANMC,PPKATSTAN,PPSTATUS,PPLINE,PPTITLE,PPSPECIF,pplan,pplancor
where((pplan.nrec==pplancor.cpplan));


	 	 	 browse bPPlan(,,sci178EnEsc)
				 table pplan
 	 	 	 	 fields
 	 	 	 	 	 pplan.datum   'Дата' : [15] , protect, noAutoSize;
 	 	 	 	 	 pplan.nPPlan   'Номер плана' : [25], protect, noAutoSize;
 	 	 	 	 	 pplan.status 'Статус' : [7], protect,noAutoSize;
 	 	 	 	 	 pplan.podrname   'Подразделение' : [25] , protect, noAutoSize;
 	 	 	 	 	 pplan.t_plan 'Тип плана' : [4], protect, noAutoSize;
 	 	 	 end;

 	 handleevent
	 	cmPick://F3
	 	{
				  PushPos (bPPlan);
		 		  RunWindow('PlanCorrect');
		 		  PoPpos (bPPlan);
		}
		cmDelete://F8
		{
		 		  delete current pplan;
		 		  ReReadRecord(#pplan);
		}
		cmInsert://F7
		{
				  Pplan.datum:=cur_date;
				  Pplan.npplan:='';
				  Pplan.status:='';
				  Pplan.podrname:='';
				  Pplan.t_plan:='';
				  insert current pplan;
				  Rereadrecord(#pplan);
		 		  RunWindow('PlanCorrect');
		}
		cmDefault://Enter
		{
		}
		cmClose://Esc
		{
		}
 	 end;

window PlanCorrect 'Редактирование планов';
show at (,,83,25);
/*create view corr
as select * from pplancor
where ((pplan.nrec==pplancor.cpplan));*/
		panel p_sCorPPlan;
		show at (,,,8);
			screen sCorPPlan;
			bevel be1 {4,0,79,7,bsRaised, bsFrame};
				fields
					pplan.datum :pickButton;
					pplan.nPPlan:noprotect;
					pplan.podrname :pickButton;
					pplan.status :pickButton;
					pplan.t_plan :pickButton;
					pplan.line: pickbutton;
					pplan.group_i:pickButton;
<<

          Дата            Номер плана              Структурное подразделение
        .@@@@@@@@@       .@@@@@@@@@@@@           .@@@@@@@@@@@@@@@@@@@@@@@@@@

               Статус               .@@@@@@@@@@@      Тип плана.@@@@@@@@@@@@
               Линия      .@@@@@@@@@@@@@@@@@@@@@      Группа  .@@@@@@@@@@@@@

>>
			end;
		end;
		panel p_bCorPPlan;
		show at (,9,,)
			browse bCorPPlan(,,SciFA14789Esc)//F1,F4,F7,F8,Esc//(,,sci178EnEsc)
			table pplancor
				fields
					pplancor.namemc 'Наименование' : [20], pickButton;
					pplancor.percIs'Процент','1 сорта,%': [6],noprotect;
					pplancor.TechLoss 'Техпотери, %':[8],noprotect;
					pplancor.UnitMeasure 'Единица','измерения':[7],pickButton;
					Vsego 'Всего':[12],Skip;
					pplancor.Fdecp 'Первая','декада':[10],noprotect;
					pplancor.Sdecp 'Вторая','декада':[10],noprotect;
					pplancor.Tdecp 'Третья','декада':[10],noprotect;
			end;
		end;
handleEvent
		cmInit:
		{
			/*clearbuffer(sCorPPlan);
			pplan.datum:=data;
			pplan.nPPlan:=nPPlan;
			pplan.status:=status;
			pplan.podrname:=katpodrname;
			pplan.t_plan:=t_plan;
 			update current pplan;
			ReReadRecord(#pplan);*/
			RescanPanel(sCorPPlan);
		}
		cmPick:
		{

		  case CurField of
			#namemc:
		  	{
			//pushpos (bCorPPlan);
			   res:= RunInterface('PickMC',namemc);
//			   pplancor.namemc:=nmc;
			    pplancor.cpplan:=pplan.nrec;
//				If (IsFieldModified(#pplancor.namemc))
//				{
						  update current pplancor;
//				}
/*				else
				{
			  			  insert current pplancor;
			  	}*/
			  ReReadRecord(#pplancor);
			//PopPos(bCorPPlan);
			}
			#UnitMeasure:
			{
			//pushpos (bCorPPlan);
			   res:= RunInterface('MeashureUnits',UnitMeasure);
//			    pplancor.UnitMeasure:=UnMea;
			    pplancor.cpplan:=pplan.nrec;
//				If (IsFieldModified(#pplancor.UnitMeasure))
//				{
						  update current pplancor;
//				}
/*				else
				{
			  			  insert current pplancor;
			  	}*/
			  ReReadRecord(#pplancor);
			//PopPos(bCorPPlan);
			}
			#podrname:
			{
			  res:=RunInterface('PickPodr',podrname);
			  //pplan.podrname:=katpodrname;
			  update current pplan;
			  ReReadRecord(#pplan);
			  RescanPanel(sCorPPlan);
			}
			#datum:
			{

				//pplan.datum:=data;
				update current pplan;
				ReReadRecord(#pplan);
				RescanPanel(sCorPPlan);
			}
			#nPPlan:
			{
				   //pplan.nPPlan:=nPPlan;
				   update current pplan;
				   ReReadRecord(#pplan);
				   RescanPanel(sCorPPlan);
			}
		  end;
		  	RescanPanel(sCorPPlan);

		}
		cmCancel:
		{
		  CloseInterface(cmDefault);
		  stop;
		}
		cmCheckRecord:
 		{
			//pplancor.vsego:=pplancor.Fdecp+pplancor.Sdecp+pplancor.Tdecp;
			update current pplancor;
			update current pplan;
			ReReadRecord(#pplancor);
			ReReadRecord(#pplan);
			RescanPanel(sCorPPlan);
		}
		cmExprFieldChanged:
		{
//			pplancor.vsego:=pplancor.Fdecp+pplancor.Sdecp+pplancor.Tdecp;
			update current pplancor;
			ReReadRecord(#pplancor);
		}
		cmCheckField:
		{
//				pplancor.vsego:=pplancor.Fdecp+pplancor.Sdecp+pplancor.Tdecp;
				update current pplancor;
				ReReadRecord(#pplancor);
		}
		cmPositionchanged:
		{
			update current pplancor;
			ReReadRecord(#pplancor);
		}
		cmClose:
		{
				  //clearbuffer(sCorPPlan);
				  update current pplan;
				  ReReadRecord(#pplan);
				  RescanPanel(sCorPPlan);
		}
		cmUpdateRecord:
		{
			If update current pplancor=tsOk
			{
				//PushPos (bCorPPlan);
//				pplancor.vsego:=pplancor.Fdecp+pplancor.Sdecp+pplancor.Tdecp;
				update current pplancor;
				ReReadRecord(#pplancor);
				//PoPpos (bCorPPlan);
			}
		}
		cmInsertRecord:
		{	
			If insert current pplancor=tsOk
			{
				//PushPos (bCorPPlan);
				//insert current pplancor;
				ReReadRecord(#pplancor);
				//PoPpos (bCorPPlan);
			}
		}
		cmDeleteRecord:
		{
			If Delete current pplancor=tsOk 
			{	//PushPos (bCorPPlan);
				//delete current pplancor;
				ReReadRecord(#pplancor);
				//PoPpos (bCorPPlan);
			}
		}
/*		cmEdit:
		{
//				update current pplancor;
		}*/
		cmInsert:
		{
		     insert current pplancor;
		}
		cmDelete:
		{
			 delete current pplancor;
		}
end;
end;

 end.



Re: Модификации в интерфейсах

Добавлено: 14 июл 2010, 17:48
BlazeBio
Сильно волнует проблема суммирования по декадам (Sdecp,Fdecp,Tdecp). Почему не идёт update записей при изменении значении в декаде, а значения при соскакивании с поля обнуляются?

Re: Модификации в интерфейсах

Добавлено: 15 июл 2010, 09:16
Maverick
Ну во-первых, я бы не пользовал RereadRecord
Лучше RescаnPanel
Во-вторых, я бы все-таки избавился от события cmInsert и все что там есть перенес в в cmSetDefault, а вставку всетаки делал бы в cmInsertRecord

попробуйте - может поможет
(честно говоря сильно интерфейс не анализировал, просмотрел "по диагонали")

Re: Модификации в интерфейсах

Добавлено: 15 июл 2010, 11:05
BlazeBio
Но нет же статус строк, которые реагируют, на cmInsertRecord, cmUpdateRecord,cmDeleteRecord. Как же тогда без cmInsert в статус строке вызвать событие cmInsertRecord?

Re: Модификации в интерфейсах

Добавлено: 15 июл 2010, 11:50
edward_K
sci13478ESC и разные варианты - главное чтобы 7 была. cmInsertRecord срабатывает после потери фокуса в строке, после нее идет cmInsert. Можно insert делать и в cmSetDefault - только тогда нужно делать setnew(false) иначе попадете в cmInsertRecord .

Re: Модификации в интерфейсах

Добавлено: 15 июл 2010, 12:08
Maverick
неее... события cmInsertRecord, cmUpdateRecord, cmDeleteRecord - системные события.. к примеру такие же как и cmHelp :-) Они не зависят от статулайна :-)
они просто "садятся" по дефолту и обрабатываются при работе с любой таблицей. Другое дело что cmInsert реагирует на нажатие F7 - вот здесь точно нужно подключать любой подходящий статус с цифирью 7 в названии :-)

т.е. по сути цепочка такая, какой я ее описывал в первом своем посте

Re: Модификации в интерфейсах

Добавлено: 15 июл 2010, 17:16
BlazeBio
Maverick писал(а):неее... события cmInsertRecord, cmUpdateRecord, cmDeleteRecord - системные события.. к примеру такие же как и cmHelp :-) Они не зависят от статулайна :-)
они просто "садятся" по дефолту и обрабатываются при работе с любой таблицей. Другое дело что cmInsert реагирует на нажатие F7 - вот здесь точно нужно подключать любой подходящий статус с цифирью 7 в названии :-)

т.е. по сути цепочка такая, какой я ее описывал в первом своем посте
У меня постоянно при вставке по F7 в bPPlan при попытке перехода к браузу bCorPlan вылетает сообщение: "Переход невозможен т.к. текущий документ не заполнен" или возникает вариант: " Отсутствие позиции в pCorPPlan" При попытке выбора мышью вставленной строки, позиция со строкой в bPPlan смещается вверх. И только теперь при попытке перемещения к bCorPPlan или вставке в него строки не вылетает вышеописанное сообщение. При коррекции полей Tdecp,Sdecp,Fdecp в bCorPPlan не сохраняются значения этих полей(обнуляются как только я смещаюсь вверх или вниз по позиции в bCorPPlan). Везде стоит RescanPanel. Что делать? :(

Re: Модификации в интерфейсах

Добавлено: 15 июл 2010, 17:25
BlazeBio
Замечено, что Update tdecp,sdecp,tdecp происходит только, если после этого изменить поле UnitMeashure или поле namemc?! :-( В чём может быть причина такого поведения этих трёх полей?

Re: Модификации в интерфейсах

Добавлено: 16 июл 2010, 08:58
Maverick
Подобные сообщения взникают в случае если текущая корневая таблица указана одна, а вы пытаетесь модифицировать поля другой таблицы, не корневой, не заполнив при этом ни одного поля в новой записи корневой таблицы.
Копайте в этом направлении

Re: Модификации в интерфейсах

Добавлено: 16 июл 2010, 14:23
BlazeBio
Я тут подумал,что если я изменяю поле обычной корректировкой (по клавишам backspace, либо по delete), то обновления по таблице не происходит(cmUpdateRecord не отрабатывает), даже при использование update current. Тогда возникает вопрос: возможно ли по какому-то событию, функции или процедуре отследить изменения такого рода?

Re: Модификации в интерфейсах

Добавлено: 16 июл 2010, 14:42
Maverick
говорю же - вполне возможно вы не ту ФИЗИЧЕСКУЮ таблицу ловите. на каждую ФИЗ таблицу, которая изменяется, нужно писать обработчики

ну а отловить изенилось поле или нет - событие cmCheckField - возникает когда теряетс фокус с модиф. поля

Re: Модификации в интерфейсах

Добавлено: 16 июл 2010, 15:02
BlazeBio
Maverick писал(а):говорю же - вполне возможно вы не ту ФИЗИЧЕСКУЮ таблицу ловите. на каждую ФИЗ таблицу, которая изменяется, нужно писать обработчики

ну а отловить изенилось поле или нет - событие cmCheckField - возникает когда теряетс фокус с модиф. поля
А разве не по ppspecif? А по событию cmCheckField ничего не происходит

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

		cmCheckField:
		{
		   case CurField of
			#Fdec:
			{		update current ppspecif;
					RescanPanel(#ppspecif);
			}
			#Sdec:
			{
			  		update current ppspecif;
					RescanPanel(#ppspecif);
			}
			#Tdec:
			{
			  		update current ppspecif;
					RescanPanel(#ppspecif);
			}
			 end;
                          message('cmCheckField')
		}
Обновления так и нет. Лишь одни нули.