Код: Выделить всё
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.Код: Выделить всё
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.

 . Да только теперь пустые значения и для редактирования и для создания строк
. Да только теперь пустые значения и для редактирования и для создания строк  .
 .
 . Вот новый вариант кода:
 . Вот новый вариант кода: 
 Они не зависят от статулайна
 Они не зависят от статулайна 
 В чём может быть причина такого поведения этих трёх полей?
 В чём может быть причина такого поведения этих трёх полей?