Как правильно создать и вызвать Interface

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

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

Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Как правильно создать и вызвать Interface

Сообщение Иван »

Создал чисто для примера такой интерфейс:

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

interface pickSchet;
  create view
    var buhnrec : comp; 
    as select * from buhschet;
  browse viewBuhschet
    fields
      schet: protect;
  end;
  handleEvent
    cmDefault: buhnrec := nrec;
  end;
end.
и вызываю его в TxoApi

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

RunInterface(pickSchet);
Галактика пишет, что интерфейс F_TXOAPI::PICJSCHET не найден
В чем проБлема?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как правильно создать и вызвать Interface

Сообщение edward_K »

Вопрос в какой компоненте вы скомпилили ваш фейс.
Запустите в галактике сервис - утилиты - запуск внешнего интерфейса и по Ctrl+F найдите ваш
Обычно это прописано в проекте
типа
#component "F_USERREPORT"
В апихе вы должны свой фейс вызвать из той же компоненты (там то F_TXOAPI) как F_USERREPORT::ваш_фейс
либо подключить описание вашего фейса как VipInterface F_USERREPORT::ваш_фейс ;
Чтобы вернуть значение ваша перемения должна быть прописана в paramters фейса
А вообще смотрите vip_res.log - надо добиваться , чтобы там не било ошибок и предупреждений.
LaaLaa

Re: Как правильно создать и вызвать Interface

Сообщение LaaLaa »

Правильно будет сначала декларировать тип интерфейса и определить компонентную принадлежность а потом вызвать.

файл PickSchet.vih

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

#ifndef __PickSchet_vih__
#define __PickSchet_vih__

#Component "MyComponent"
vipinterface PickSchet licensed (Free);

#endif

файл PickSchet.vip

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

#include PickSchet.vih

interface PickSchet;
  create view
    var buhnrec : comp; 
    as select * from buhschet;
  browse viewBuhschet
    fields
      schet: protect;
  end;
  handleEvent
    cmDefault: buhnrec := nrec;
  end;
end.
и вызываешь его в TxoApi

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

#include PickSchet.vih

. . . . . . . . . .
RunInterface(PickSchet);
Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Re: Как правильно создать и вызвать Interface

Сообщение Иван »

сделал как в последнем варианте предложили, но пишет что интерфейс не найдет
скомпил даже в отдельный ресурсник
через утилиты вызывается нормально
Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Re: Как правильно создать и вызвать Interface

Сообщение Иван »

в логе такое пишет:

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

14:45:28 │  Предупреждение: Не задано имя компонента, компонентная принадлежность таблиц учитываться не будет (стр.3, поз.1 в PICKDATA\PickData.vip)
         │ interface PickData;
         │ ^
Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Re: Как правильно создать и вызвать Interface

Сообщение Иван »

В общем сделал кое-как окно, какое мне нужно, но почему не вызываются строки в разделе cmInit

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

#include PickData.vih

#Component "TNFComp"

interface PickData;
  show at (0, 0, 100, 9);
  Var
      dDatePerod    : Date;

panel pSetParams;
   Show At (1, 1, 99, 8);
      screen scrSetParams (,,sci1Esc);
        Fields
          dDatePerod ()            : NoProtect;
        Buttons
          cmValue1,,,;
<<
 `Дата прошлого периода:        `.@@@@@@@@@@@@   
  <. ОК .> 
>>
    end;
   HandleEvent 
      cmInit: 
      {
        ReadMyDSK(dDatePerod, 'TNFComp_PickData_dDatePerod', False);
        Message('init');
      }
      cmValue1:
      {
        SaveMyDSK(dDatePerod, 'TNFComp_PickData_dDatePerod');
        CloseInterface(0);
      }
    end;
  end;
end.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Как правильно создать и вызвать Interface

Сообщение Den »

потому что PickData берется какой то другой видимо...может быть собран в ресе у Вас еще такой же без компонентной принадлежности
Иван
Местный житель
Сообщения: 200
Зарегистрирован: 28 апр 2009, 13:19
Откуда: Новороссийск

Re: Как правильно создать и вызвать Interface

Сообщение Иван »

в общем сделал я этот интерфейс для добавления внешних атрибутов в проводки и даты прошлого периода, если кому-то понадобятся, выкладываю, а то тема бессмысленной получится
PickData.vih

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

#ifndef __PickData_vih__
#define __PickData_vih__

#Component "TNFComp"

vipInterface PickData Licensed(Free);

#endif
PickData.vip

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

#include TxoApi.vih
#include F_BuhSchet.vil
#include F_PlansSch.vil
#include ExtAttr.vih
#include PickBuh.vih

#include PickData.vih

#include GetKau.vih
#include GetKau.var

#Component "TNFComp"

interface PickData;
  show at (0, 0, 101, 7);

  Create View
    Var
      dDatePerod    : Date;
      sSchet        : String;
      cSchet        : Comp;
    	sGetSch       : String;
      sGetSub       : String;
      Init          : Boolean;
      sVidProd      : String;
      cVidProd      : Comp;
      sStDohRash    : String;
      cStDohRash    : Comp;

    As Select
      BuhSchet.Schet,BuhSchet.SubSch,BuhSchet.Name,BuhSchet.nRec,VidProd.nRec,VidProd.Code,VidProd.name,StDohRash.nRec,StDohRash.name,StDohRash.Code
    From
      BuhSchet,
      Synonym SpKAU VidProd,
      Synonym SpKAU StDohRash
    Where
    ((
    	Comp(0064000000000002h) == BuhSchet.cplanssch
    ))
  ;
  parameters dDatePerod,sSchet,cSchet,sGetSch,sGetSub,cVidProd,sVidProd,cStDohRash,sStDohRash,Init;

Procedure SetSchet;
{
    if(GetFirst BuhSchet where ((sGetSch == BuhSchet.Schet   and
                                 sGetSub == BuhSchet.SubSch     )) = tsOk)
    {
      Set sSchet := BuhSchet.Schet+'.'+BuhSchet.SubSch+' '+BuhSchet.Name;
      cSchet  := BuhSchet.nRec;
      sGetSch := BuhSchet.Schet;
      sGetSub := BuhSchet.SubSch;
      Init := true;
    }
    else
    {
      Set sSchet := 'Не установлено!';
      cSchet  := 0h;
      sGetSch := '';
      sGetSub := '';
      Init := False ;
    }
  }

  Procedure SetVidProd;
  {
    if(GetFirst VidProd where ((cVidProd == VidProd.nRec)) = tsOk)
    {
      Set sVidProd := VidProd.Code+' '+VidProd.Name;
    }
    else
    {
      Set sVidProd := 'Не установлено!';
      cVidProd := 0h;
    }
  }
  
  Procedure SetStDohRash;
  {
    if(GetFirst StDohRash where ((cStDohRash == StDohRash.nRec)) = tsOk)
    {
      Set sStDohRash := StDohRash.Code+' '+StDohRash.Name;
    }
    else
    {
      Set sStDohRash := 'Не установлено!';
      cStDohRash := 0h;
    }
  }

panel pSetParams;
   Show At (1, 1, 100, 6);
      screen scrSetParams (,,sci1Esc);
        Fields
          dDatePerod ()            : NoProtect;
          sSchet                   : Protect, PickButton;
          sVidProd                 : Protect, PickButton;
          sStDohRash               : Protect, PickButton;
        Buttons
          cmValue1,,,;
<<
 `Дата прошлого периода:        `.@@@@@@@@@@@@   
 `Счет/СубСчет прошлого периода:`.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 `Вид продукции:                `.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 `Статья доходов:               `.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  <. OК .> 
>>
    end;
   HandleEvent 
      cmValue1:
      {
        SaveMyDSK(dDatePerod, 'TNFComp_PickData_dDatePerod');
        SaveMyDSK(cSchet,     'TNFComp_PickData_cSchet');
        SaveMyDSK(sGetSch,    'TNFComp_PickData_sGetSch');
        SaveMyDSK(sGetSub,    'TNFComp_PickData_sGetSub');
        SaveMyDSK(cVidProd,   'TNFComp_PickData_cVidProd');
        SaveMyDSK(sVidProd,   'TNFComp_PickData_sVidProd');
        SaveMyDSK(cStDohRash,     'TNFComp_PickData_StDohRash');

        CloseInterface(0);
      }
    cmPick:
    {
      case CurField of
        #sSchet:
        {
          var cPlansSch : Comp;
          cPlansSch := coGetTune('Fin.User.cPlansSch');
          var sTmp1 : String;
          var sTmp2 : String;
          sTmp1 := sGetSch;
          sTmp2 := sGetSub;
          if (RunInterface(GetBuhSchet, cgiPick, cPlansSch, sTmp1, sTmp2) != cmCancel)
          {
            sGetSch := sTmp1;
            sGetSub := sTmp2;
            SetSchet;
          }
        }
				#sVidProd:
        {
          var cKAU : Comp;
          var wKAU : Word;
          wKAU := 20009;
          cKAU := cVidProd;
          if(iGetKau.GetCodeKau(cgiPick, wKAU, cKAU) != 0)
          {
            cVidProd := cKAU;
            SetVidProd;
          }
        }
        #sStDohRash:
        {
          var cKAU : Comp;
          var wKAU : Word;
          wKAU := 20057;
          cKAU := cStDohRash;
          if(iGetKau.GetCodeKau(cgiPick, wKAU, cKAU) != 0)
          {
            cStDohRash := cKAU;
            SetStDohRash;
          }
        }


      end;
    }

    end;
  end;
  HandleEvent 
      cmInit: 
      {
      	Init := False;
        ReadMyDSK(dDatePerod, 'TNFComp_PickData_dDatePerod',False);
        ReadMyDSK(sGetSch,    'TNFComp_PickData_sGetSch',    False);
        ReadMyDSK(sGetSub,    'TNFComp_PickData_sGetSub',    False);
        ReadMyDSK(cVidProd,    'TNFComp_PickData_cVidProd',    False);
        ReadMyDSK(sVidProd,    'TNFComp_PickData_sVidProd',    False);
        ReadMyDSK(cStDohRash,     'TNFComp_PickData_cStDohRash',   False);
        SetSchet;
        SetVidProd;
        SetStDohRash;
      }
    end;
end.
txooborotextattr.vip

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

#include TxoApi.vih
#include F_BuhSchet.vil
#include F_PlansSch.vil
#include ExtAttr.vih
//#include PickData\PickData.vih

#Component "F_TxoApi"
#Component "TNFComp"


VipInterface Txo_OborotExtAttr implements ObjTxoIdentPlugin Licensed(Free);

Interface Txo_OborotExtAttr;

create view TxoOborot
var
  CurSoprHoz : comp;
as select
  Oborot.nrec,
  Oborot.dataot
from
	Oborot
where
((
  CurSoprHoz == Oborot.csoprhoz
));

function GetInfo : string;{
	GetInfo := 'Установка внешних атрибутов проводки';
}


function ParamMaster : string;{
	ParamMaster := '';
}

var
	oea : iExtAttr;
//	picked : PickData ;


procedure StoreCycles(hTxo : longint; buf : TTxoApiInfoDoc);
{
	var ps : comp;
	var sch,sub : string;
	var sch_nrec : tNrec;
  var sch_name : string;
  var init : boolean;
  var dDatePerod: Date;
  var cvid,cstdohrash : comp;
  var svid,sstdohrash : string;

	TxoAllowRecallStoreCycles(hTxo);
	CurSoprHoz := buf.cSoprHoz;
	//parameters dDatePerod,sSchet,cSchet,sGetSch,sGetSub,Init;
	RunInterface(PickData,dDatePerod,sch_name,sch_nrec,sch,sub,cvid,svid,cstdohrash,sstdohrash,init);
	TxoDebugMsg(hTxo, 'Txo_OborotExtAttr', 'csoprhoz='+CurSoprHoz);
	if(init){
		_loop oborot{
			TxoDebugMsg(hTxo, 'Txo_OborotExtAttr', 'oborot.nrec='+oborot.nrec+'; Schet= '+sch+'; Subschet='+sub+'; csoprhoz='+CurSoprHoz);
			if oea.coSetAttrID(9011, oborot.nrec, 28147497671065947, sch_nrec, sch_name) {
			}else{
				TxoDebugMsg(hTxo, 'Txo_OborotExtAttr', 'атрибут не установлен счет/субсчет прошлого периода');	
			}
			if oea.coSetAttrID(9011, oborot.nrec, 28147497671065943, cvid, svid) {
			}else{
				TxoDebugMsg(hTxo, 'Txo_OborotExtAttr', 'атрибут не установлен вид продукции, работ, услуг');	
			}
			if oea.coSetAttrID(9011, oborot.nrec, 28147497671065944, cstdohrash, sstdohrash) {
			}else{
				TxoDebugMsg(hTxo, 'Txo_OborotExtAttr', 'атрибут не установлен прочие доходы и расходы');	
			}
      if(dDatePerod != To_Date(0, 0, 0)){
      	Update Current Oborot Set Oborot.DataOt := dDatePerod;
			}
		}
	}
}

End.
PickData.prj

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

const
#include Tpp_Key.inc
#include KauConst.inc
#include GloConst.inc
#include FldColor.inc 
#include buhconst.inc
#include KatDoc.inc
#include NalTunes.inc
#include GALNET_CCM.INC
#include GALNET_CSC.INC
end;

#include DicTypes.def

#define ComponentVersion

#make "PickData\PickData.vip"
TxoApi.prj

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

const
#include Tpp_Key.inc
#include KauConst.inc
#include GloConst.inc
#include FldColor.inc 
#include buhconst.inc
#include KatDoc.inc
#include NalTunes.inc
#include GALNET_CCM.INC
#include GALNET_CSC.INC
end;

#include DicTypes.def

#define ComponentVersion

#make "TXO_Oborot_Attr\txooborotextattr.vip"
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Как правильно создать и вызвать Interface

Сообщение Руслан »

Компилирую интерфейс, ругается, что "Не найден интерфейс ISECURITY_NORM". Хотя компилю этот фейс вместе и с интерфейсом normzapas. Через внешние интерфейсы он тоже не появляется.
Интерфейс iSecurity_norm:

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

#include %src%\src\vipInterface.h
interface iSecurity_norm 'Права доступа';
create view
as select *
from x$users, TUNEDEF, normzapas,ppstatus;

function fSecurityPolicy ( clog : string; norm_nrec : comp; status:comp ) : boolean;
{
  var tempNrecPers : comp;
  // Поиск nrec пользователя
  if( getfirst x$users where (( clog == x$users.XU$LOGINNAME )) = tsOk )
    tempNrecPers := x$users.atl_nrec;

	if (x$users.xu$type=1)
		{
		fSecurityPolicy:=true;
		}
//надо тут	else if getfirst ppstatus where(())

	else if getfirst normzapas where((norm_nrec==normzapas.atl_nrec))=tsOk
	{
		if (tempNrecPers=normzapas.atl_owner and x$users.xu$type=0
			and (comp(281474976710658)=normzapas.cstatus or comp(281474976710659)=normzapas.cstatus  ))//утверждённый или закрытый
			{
			fSecurityPolicy:=true;
			//message('1true');
			}
		else if (tempNrecPers=normzapas.atl_owner and x$users.xu$type=0 and comp(281474976710657)=pptitle.cppstatus)//корретируемый
			{
			fSecurityPolicy:=true;
			//message('2true');
			}
		else
			{
				fSecurityPolicy:=false;
			}
	}
	else
	{
		fSecurityPolicy:=false;
		//message('2false');
	}
   // fSecurityPolicy := fSPmc(tempNrecPers);
}
end.

Интерфейс normzapas:

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

#include %src%\src\vipInterface.h;
!#include %src%\src\GetKau.vih
!#include %src%\src\Galnet.ccm;
interface Normzapas 'Нормы страхового запаса';
!#include %src%\src\GetKau.var
 show   at   (,,92,25);
	const
	  cmPrintDoc = 3440;
	end;
 var
 	nr,mcnrec,katednrec,katpodrnrec,linenrec,formatnrec,katstannrec,ctitle,titlenrec,specnrec: comp;
	pptitlenrec,unitm:comp;
	wkl,grant_s, check_del, checkspecif,check_screen:boolean;
 	 res,check_i : word;
	 nmc:string;
	 pdate, pbdate, pedate : date;
	 statusnnrec:comp;
	 UnMea,plancopy:string;
	 somewindow:longint;
	 n:longint;
	 begindate,enddate:date;
	 sort1,teh_poteri,dek1,dek2,dek3,summ_plan,poludek1,poludek2,poludek3,summ_polu:double;
	 sum_gresbordur,gresbordur1,gresbordur2,gresbordur3:double;
	 sum_vstavka,vstavka1,vstavka2,vstavka3:double;
	 maxi,maxs:word;
	 butpick:longInt;
	 nomer_plana,formatname:string;
	 linia_name,podrasd,titlenpp:string;
	 status_plana,old_status,old_linia :comp;

create view normz
var status,linia_filter,grup_filter,format_filter, nomer_plana: word;
	x:integer;
	fldselect:longint;
	linia,gruppa,etalon,format,titlenrec,specifnrec,specifnrec2,specifnrec3, pmc:comp;
(Vsego,meash)
 as select katpodr.name,normzapas.npp, *
from normzapas, normzapasspec, katpodr, katmc, x$users, katpodr katpodr_2//, katmc katmc_2
where((	normzapas.cpodrazd==katpodr.nrec
        and normzapas.atl_nrec == normzapasspec.cnorm
   		and normzapasspec.cmc==katmc.nrec
	    and normzapas.atl_owner==x$users.atl_nrec
	    and katpodrnrec == katpodr_2.nrec
!	    and katmc.nrec == katmc_2.nrec
!		and pmc == katmc.nrec
		))
		order by normzapas.npp;

window NormCorrect 'Редактирование норм';
show at(,,,28);
toolbar F_Common::tbPrintDoc;
handleevent
    cmPrintDoc:
												{
												   UpdateTable();
												   res:=RunInterface('ireport',titlenrec);
												}
end;
			screen sCornormzapas(,,sci1EnEsc); //SciAqaSwitchItemName
			show at (,,,10);
			table katpodr;
			bevel be1 {1,0,110,10,bsRaised, bsFrame};
				fields
					normzapas.pdate :protect;
					normzapas.pbdate:noprotect;
					normzapas.pedate:noprotect;
					normzapas.npp:protect,noPickButton; //:noprotect; //(,,sciAQACancel1)
					katpodr.name :pickButton, protect;
					status  : [ list 'item 1', 'item 2', 'item 3' ];

<<

                     Дата         Начало действия         Конец действия
                    .@@@@@@@@@      .@@@@@@@@@            .@@@@@@@@@
                    Номер            Структурное подразделение
		            .@@@@@@@@@@@@   .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
                       Статус  .@@@@@@@@@@@@@@@@@@@@@
>>
			end;
!			browse bCornormzapas(,,Sci13478Esc )//F1,F4,F7,F8,Esc//(,,sci178EnEsc)
				browse bCornormzapas(,,Sci178EnEsc )//F1,F4,F7,F8,Esc//(,,sci178EnEsc) sci1478EnEscTreeI
						show at (,11,,22)
							  table normzapasspec;
			 fields
					katmc.name 'Наименование МЦ' : [20], pickButton;
					normzapasspec.kol 'Количество':[5,'666.88'],noprotect,noPickButton;
			end;
			procedure grants();
				{
												if(iSecurity_norm::fSecurityPolicy(sGetTune('USER.descr'),normzapas.atl_nrec,normzapas.cstatus) = FALSE )
													{
															cfsSetProp('bnormzapas','StatusCtx', Sci17EnEsc);
															cfsSetProp('bCornormzapas','StatusCtx',sciAQACancel1);
															cfsSetProp('status','StatusCtx',SciAqaSwitchItemName);
															SetFormat(sCornormzapas);
				   //										 cfsSetProp('sCorPPlan_nogrant','StatusCtx',sciAQACancel1);
														   // SetFieldOption(#ppspecif.npp,ofProtected);
															grant_s:=false;
			//												message('grant_s false');
													}
													else if(iSecurity_norm::fSecurityPolicy(sGetTune('USER.descr'),normzapas.atl_nrec,normzapas.cstatus) = true )
													{
													   if( getfirst x$users where (( sGetTune('USER.descr') == x$users.XU$LOGINNAME )) = tsOk )
													   {
				   //									   cfsSetCurrentContainer('Plan.PlanCorrect.sCorPPlan');
				   //									   cfsCreateObject('button', 'sCorPPlan', 'Etalons', false, butpick);
														   if (x$users.xu$type=1)
														   {
															 // SetFieldOption(#ppspecif.npp,ofSelectable);
				   //											 if (x$users.xu$type=1 and x$users.xu$loginname='pivovarchukaa')
				   //												 {
																	   //message('full_grants');
																	   cfsSetProp('Bnormzapas','StatusCtx',Sci178EnEsc);
																	   SetFormat(sCornormzapas);
																	   cfsSetProp('bCornormzapas','StatusCtx',Sci13478Esc);
																	   cfsSetProp('sCornormzapas','StatusCtx',SciAqaSwitchItemName);
				   //												 }
			//	   													   message('grant_s true');
														   }
														   else
														   {
															   //message('grants');
															   cfsSetProp('Bnormzapas','StatusCtx',Sci178EnEsc);
															   SetFormat(sCorPPlan);
															   cfsSetProp('bCornormzapas','StatusCtx',Sci13478Esc);
															   cfsSetProp('sCornormzapas','StatusCtx',SciAqaSwitchItemName);
														   }
																grant_s:=true;
													   }
													}
													rescanpanel(#normzapas);
				}
         tableevent table normzapasspec
										 cmSetDefault:
										 {
										 set normzapasspec.cnorm :=normzapas.atl_nrec
										 }
										 cmUpdateRecord :
										 { //if grant_s=false
																						 //{
										  update current normzapasspec;
																		 //}
										 }
											cminsertrecord:
											{
											insert current normzapasspec;
											UpDatePanels();
											}
											cmDeleteRecord :
											 {
											Delete Current normzapasspec;
											 }
		 end;
end;

						  browse bnormzapas(,,Sci178EnEsc)
							  table normzapas;
							  fields
								  normzapas.pdate   'Дата' : [15] , protect, noAutoSize;
 								  normzapas.npp   'Номер' : [25], protect, noAutoSize;
								  katpodr.name   'Подразделение' : [25] , protect, noAutoSize;
							      x$users.xu$fullname 'Создатель':[20],protect,noAutoSize;
						  end;
						   //end;
						  tableevent table normzapas

							 cmSetDefault: {
														normzapas.pdate:=Cur_Date();
														normzapas.cpodrazd:=0;
														normzapas.npp := 1;
														SetModified(true);
														UpDateTableWithInserted
														 PutCommand(cmDefault);
											}
							cmUpdateRecord :{ //if grant_s=false
							  					//{
												  	update current normzapas;
												//}
										 	}
							cmInsertRecord :{
							   					insert current normzapas;
!							                    insert current normzapasspec;
												UpDatePanels();
											}
							cmDeleteRecord :
							{
							  if Message('Удалить нормы?', yesButton + noButton) = cmYes
								{
								    Delete Current normzapas;
								Delete Current normzapasspec;
								}

							}
							cmCheckRecord:
 							{
									MakeValid(#normzapas);
									if isvalid(#normzapas)
											{
									update current normzapas;
											}
									if isnew
											{
									Putcommand(cmInsertRecord);
											}

							}
							cmCheckField:
							  {
									updatetable;
									SetModified(true);
									  case CurField of
										#normzapas.pbdate:
										{
										  update current normzapas;
										  RescanPanel(#normzapas);
										}
										#normzapas.pedate:
										{
										  update current normzapas;
										  RescanPanel(#normzapas);
										}
										#normzapas.pdate:
										{
										  update current normzapas;
										  RescanPanel(#normzapas);
										}
										#normzapas.npp:
										{
									  	  update current normzapas;
										  RescanPanel(#normzapas);
										}
										end;
							  }
							end;

							handleEvent
										cmInit:
										{
										 RescanPanel(Scornormzapas);
										   Rescanpanel(#normzapas);
										}
									cmPick:
									{
											  Updatetable();
											  case CurField of
												#katpodr.name:
												{
												  katpodrnrec:=normzapas.cpodrazd;
												  res:=RunInterface('Z_KATPODR::GETANYPODR',katpodrnrec);
												  normzapas.cpodrazd:=katpodrnrec
												  update current normzapas;
												if getfirst katpodr where((normzapas.cpodrazd==katpodr.nrec))=tsOk
												  {
												  }
												  RescanPanel(#normzapas);
												}
												#katmc.name:
												{
												pmc := normzapasspec.cmc;
												res := runinterface('L_MCU::GetSomeMC_KatMC', pmc, false, -12345);//вызов интерфейса выбора МЦ без ввода количества
!												res := runinterface('L_MCU::GetSomeMC', pmc);
!												res := runinterface('iGetKau.GetCodeKau', pmc);
												normzapasspec.cmc := pmc;
												update current normzapasspec;
												if getfirst katmc where((normzapasspec.cmc==katmc.nrec))=tsOk
												  {
												  }
												RescanPanel(#normzapasspec);
												}
											  end;
										}
										cmCheckField : update current normzapas;
									cmCancel:
									{
									}
									cmPrintDoc:
											{
											   UpdateTable();
											   res:=RunInterface('ireport',titlenrec);
											}
									cmClose:
									{
									   CloseWindow(cmDefault);
									}
									cmDefault:
									{
										   PutCommand(cmCheckField);
										   runwindowmodal(NormCorrect);
									  Rescanpanel(#normzapas);
									}
									cmInsert:
									{
!			   message('cminsert1');
!			titlenrec:=normzapas.atl_nrec;
!			maxs:=normzapas.npp;
!			specnrec:=normzapas.npp;
!!			_loop normzapas where ((titlenrec==normzapas.atl_nrec))
!!			{
!			   if (maxs<normzapas.npp) or (maxs=normzapas.npp)
!			   {
!			   message('cminsert2');
!			   normzapas.npp:=normzapas.npp+1;
!				  	update current normzapas;
!			   }
!//			   maxs:=maxs+1;
!!			}
!			maxs:=maxs+1;
									}
									cmDelete:
									{

									}
									cmDone:
									{
										  rescanpanel(#normzapas);
									}
							end;
end.

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

Re: Как правильно создать и вызвать Interface

Сообщение Den »

"Через внешние интерфейсы он тоже не появляется."

vip.VisibleAllInterface включен ? если включен и отдельно собирается данный интер-с без ошибок, то странно
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Как правильно создать и вызвать Interface

Сообщение Руслан »

Den писал(а):"Через внешние интерфейсы он тоже не появляется."

vip.VisibleAllInterface включен ? если включен и отдельно собирается данный интер-с без ошибок, то странно
Включил vip.VisibleAllInterface, интерфейс ISECURITY_NORM появился. Пытаюсь его вызвать в интерфейсе normzapas SF_DOC::ISECURITY_NORM::fSecurityPolicy, пишет "Ожидалось поле структурного или ссылочного типа".
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как правильно создать и вызвать Interface

Сообщение edward_K »

как вызвать? В коде надеюсь? Если да, то logstrtofile в нем. Если по Ctrl+F4, то можно попробовать типа runinterface, runanyview и т.п., но никогда так не делал. Отдельно же он у вас работает.
А вот это что?
SF_DOC::ISECURITY_NORM::fSecurityPolicy
фейс называется то SF_DOC::ISECURITY_NORM его и надо вызывать runinterface, параметры после имени фейса через запятую. Что вы хотели этим сделать?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Как правильно создать и вызвать Interface

Сообщение Den »

ну а у Вас в запуске внешнего интер-са он живет в компоненте SF_DOC ?
Руслан
Местный житель
Сообщения: 294
Зарегистрирован: 01 ноя 2011, 14:03
Контактная информация:

Re: Как правильно создать и вызвать Interface

Сообщение Руслан »

Den писал(а):ну а у Вас в запуске внешнего интер-са он живет в компоненте SF_DOC ?
Да, в компоненте SF_DOC.
Ответить