Страница 3 из 5

Re: Alter interface

Добавлено: 20 мар 2012, 12:13
savov
Вижу: скрин SCRPRNVARIATMCUSL входит в L_SF::PRNSCHFVARIATMCUSL (Укажите варианты наименований для МЦ/услуг).
Код VIP

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

HandleEvent
    cmInit:
    {
    inherited::handleEvent(cmInit);
       cfsSetCurrentContainer('L_SF::PRNSCHFVARIATMCUSL');
       cfsCreateObject('button', 'SCRPRNVARIATMCUSL', 'ChangeStateSF', FALSE, ButMyComSF);
       cfsSetProp ( ButMyComSF, cfpOrigin_X,300);
       cfsSetProp ( ButMyComSF, cfpOrigin_Y, 70 );
       cfsSetProp ( ButMyComSF, cfpSize_X, 95 );
       cfsSetProp ( ButMyComSF, cfpSize_Y, 24 );
       cfsSetProp ( ButMyComSF, cfpCommand, cmChangeStateSF);
       cfsSetProp ( ButMyComSF, cfpTitle, 'Выбрать вариант' );
       cfsSetProp ( ButMyComSF, cfpVisible,TRUE);

    }

    cmChangeStateSF:
    { 
      .....
     }
    end;
    end.
Должно вроде работать, но не работает.

Re: Alter interface

Добавлено: 20 мар 2012, 12:35
savov
Попробовал код:

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

 Window PRNSCHFVARIATMCUSL '' EscClose;
    HandleEvent
    cmChangeStateSF:
    {  тут делаем....
     }
     end; //
     end; // 


    HandleEvent
    cmInit:
    {
    inherited::handleEvent(cmInit);
       cfsSetCurrentContainer('L_SF::PRNSCHFVARIATMCUSL');
       cfsCreateObject('button', 'SCRPRNVARIATMCUSL', 'ChangeStateSF', FALSE, ButMyComSF);
       cfsSetProp ( ButMyComSF, cfpOrigin_X,300);
       cfsSetProp ( ButMyComSF, cfpOrigin_Y, 70 );
       cfsSetProp ( ButMyComSF, cfpSize_X, 95 );
       cfsSetProp ( ButMyComSF, cfpSize_Y, 24 );
       cfsSetProp ( ButMyComSF, cfpCommand, cmChangeStateSF);
       cfsSetProp ( ButMyComSF, cfpTitle, 'Выбрать вариант' );
       cfsSetProp ( ButMyComSF, cfpVisible,TRUE);

    }
не работает..

Re: Alter interface

Добавлено: 20 мар 2012, 13:19
Den
этот скрин находится в mainwindow

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

#component "l_sf"

const
 cmpdopmy =9881;
end;


alter interface PrnSchFVariatMcUsl;
  create view
  var
  st,aself,aSelf1,cur_cont : longint ;
  cur_o,cont_i,aObjType : string ;
  ;


HandleEvent
    CmInit   :{
               if ( inherited :: handleEvent (cminit)=heOk)
                {

                  st:=cfsGetObjInfo(
                                    'SCRPRNVARIATMCUSL'   ,
                                    cur_o        ,
                                    aself        ,
                                    cont_i       ,
                                    aObjType
                                   );
                    if st=0
                    {

                       st:=cfsCreateObject ('Button',
                                              aself ,
                                             'MyPedal',
                                             false,
                                             aSelf1 );
                       if st=0
                       {
!                          Message('ееееее...удалось создать кнопарь :)');
                          cfsSetProp(aself1, 'Origin_X', 300);
                          cfsSetProp(aself1, 'Origin_Y', 70);
                          cfsSetProp(aself1, 'Size_X', 95);
                          cfsSetProp(aself1, 'Size_y', 24);
                          cfsSetProp(aself1, 'Title', 'qwerty');
                          cfsSetProp(aself1, 'Command', cmpdopmy);
                      }
                    }
                }

               }
    cmpdopmy: {
               Message('run cmpdopmy');
              }
 end;
end.

Re: Alter interface

Добавлено: 20 мар 2012, 13:28
savov
Den, укажи тупому, чем данный код
Den писал(а):этот скрин находится в mainwindow

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

#component "l_sf"

const
 cmpdopmy =9881;
end;


alter interface PrnSchFVariatMcUsl;
  create view
  var
  st,aself,aSelf1,cur_cont : longint ;
  cur_o,cont_i,aObjType : string ;
  ;


HandleEvent
    CmInit   :{
               if ( inherited :: handleEvent (cminit)=heOk)
                {

                  st:=cfsGetObjInfo(
                                    'SCRPRNVARIATMCUSL'   ,
                                    cur_o        ,
                                    aself        ,
                                    cont_i       ,
                                    aObjType
                                   );
                    if st=0
                    {

                       st:=cfsCreateObject ('Button',
                                              aself ,
                                             'MyPedal',
                                             false,
                                             aSelf1 );
                       if st=0
                       {
!                          Message('ееееее...удалось создать кнопарь :)');
                          cfsSetProp(aself1, 'Origin_X', 300);
                          cfsSetProp(aself1, 'Origin_Y', 70);
                          cfsSetProp(aself1, 'Size_X', 95);
                          cfsSetProp(aself1, 'Size_y', 24);
                          cfsSetProp(aself1, 'Title', 'qwerty');
                          cfsSetProp(aself1, 'Command', cmpdopmy);
                      }
                    }
                }

               }
    cmpdopmy: {
               Message('run cmpdopmy');
              }
 end;
end.
принципиально отличается от

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

HandleEvent
    cmInit:
    {
    inherited::handleEvent(cmInit);
       cfsSetCurrentContainer('L_SF::PRNSCHFVARIATMCUSL');
       cfsCreateObject('button', 'SCRPRNVARIATMCUSL', 'ChangeStateSF', FALSE, ButMyComSF);
       cfsSetProp ( ButMyComSF, cfpOrigin_X,300);
       cfsSetProp ( ButMyComSF, cfpOrigin_Y, 70 );
       cfsSetProp ( ButMyComSF, cfpSize_X, 95 );
       cfsSetProp ( ButMyComSF, cfpSize_Y, 24 );
       cfsSetProp ( ButMyComSF, cfpCommand, cmChangeStateSF);
       cfsSetProp ( ButMyComSF, cfpTitle, 'Выбрать вариант' );
       cfsSetProp ( ButMyComSF, cfpVisible,TRUE);

    }

    cmChangeStateSF:
    {
      .....
     }
    end;
    end.
, который не работает?
Мне кажется (может и не прав), что в обоих случаях обработчик относится к одному окну (mainwindow)

Re: Alter interface

Добавлено: 20 мар 2012, 13:34
Den
Видимо какие то нюансы есть все же...может приведешь полный код alter своего ? попробую у себя его тоже )

Re: Alter interface

Добавлено: 20 мар 2012, 13:46
savov

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

   #component 'L_SF'
    #include cfg_all.inc
    const 
	cmChangeStateSF = 990190; 
    End;

    Alter interface PRNSCHFVARIATMCUSL;
    overload   end;

    var ButMyComSF	:	longint	;
    var VarNameSF	: 	string	;
    var rf, nn		:	integer ;  
    var NrecAttrSF	:	Comp	;
    var NameStateSF     :	String	;
    var nrecspschf      :       Comp	;

    Create view Maint as select * FROM attrval;
   

    Create view tspschf as  select tmpvarspschf.crec, 
    catalpsd.prim, catalpsd.name
    FROM 
    tmpvarspschf, catalpsd
    WHERE((root==tmpvarspschf.crec 
           and tmpvarspschf.crec==spschf.nrec
           and spschf.CMCUSL==katmc.nrec
           and katmc.nrec==catalpsd.crec
           and VarNameSF==catalpsd.name ));

    Create view nattrnam as select Attrnam.nrec 
    From
    Attrnam
    WHERE((Word(3502)==Attrnam.wtable
           and 'ВАРИАНТ НАИМЕНОВАНИЯ'==attrnam.name));


    HandleEvent


    cmInit:
    {
    inherited::handleEvent(cmInit);

       cfsSetCurrentContainer('L_SF::PRNSCHFVARIATMCUSL');
       nn:=SetFormatEnabled('L_SF::PRNSCHFVARIATMCUSL',true);
       cfsCreateObject('button', 'SCRPRNVARIATMCUSL', 'ChangeStateSF', FALSE, ButMyComSF);
       cfsSetProp ( ButMyComSF, cfpOrigin_X,300);
       cfsSetProp ( ButMyComSF, cfpOrigin_Y, 70 );
       cfsSetProp ( ButMyComSF, cfpSize_X, 95 );
       cfsSetProp ( ButMyComSF, cfpSize_Y, 24 );
       cfsSetProp ( ButMyComSF, cfpCommand, cmChangeStateSF);
       cfsSetProp ( ButMyComSF, cfpTitle, 'Выбрать вариант' );
       cfsSetProp ( ButMyComSF, cfpVisible,TRUE);

    }

    cmChangeStateSF:
    {
      rf:=Nattrnam.GetFirst;
      NrecAttrSF:=Nattrnam.Attrnam.nRec;
      VarNameSF:='';
      
      RunInterface('L_PRNSOPR::ChangeStates',VarNameSF);
      if VarNameSF<>''
       {
      	rf:=tspschf.getfirst;
      
      	while (rf=0)
      	{
        	NameStateSF:=tspschf.catalpsd.prim;
        	NrecSpschf:=tspschf.tmpvarspschf.crec;
        	insert attrval set attrval.wtable:=3502, 
               		attrval.cattrnam:=NrecAttrSF, attrval.vstring:=NameStateSF, attrval.crec:=nrecspschf;
        	rf:=tspschf.getnext;
      	}
       }	
      RescanPanel(#tmpvarspschf); 
     }

    end;
    end.
Этот код работает на двух других аналогичных фейсах (для ДО и накладных). Единственное различие между этими фейсами в том, что в ДО и накладных есть изменяемый чекбокс, а для СФ - нет. Отсюда подозрение, что добавление любого кнопаря не будет работать ( в другом посте писалось, что если все поля SKIP, то ничего и не работает). Но полной уверенности в этом у меня нет.

Re: Alter interface

Добавлено: 20 мар 2012, 13:58
Den
У меня работает вроде твой код тоже....в смысле отрабатывает код кнопки ...по крайней мере при нажатии "Выбрать вариант" огребаю что не найден ChangeStates...

Re: Alter interface

Добавлено: 20 мар 2012, 14:07
savov
А как выглядит у тебя галактический интерфейс выбора варианта названия для СФ? В Верхней части окна при подключении моего кода только кнопка "Выбрать вариант" и никаких других галактических чекбоксов и пр ( что можно изменить)?

Re: Alter interface

Добавлено: 20 мар 2012, 14:18
Den
чекбокс есть..."заполнить вариантом по умолчанию" (WSETDEF поле) - дает тоже по нему флаг выставлять/сбрасывать..

Re: Alter interface

Добавлено: 20 мар 2012, 14:25
savov
ВОТ!!!! А У МЕНЯ ЭТОГО ЧЕКБОКСА НЕТУ!! Т.е. нельзя ничего изменить в фейсе...Наверно нету и HendleEvent Чего тогда делать?

Re: Alter interface

Добавлено: 20 мар 2012, 16:09
Den
Да...как то встречал кажется такое, но тогда выкрутился, т.к. у меня была несколько иная ситуация - это какой то косяк атлантиса.
навсидку попробуй (решение конечно не самое хорошее, но все же....) воспользоваться hideFormats в своей докомпиляции описав тот же самый скрин 1:1, но сделав первое поле noprotect
Т.е. там сейчас что то вроде :

Screen scrPrnVariatMcUsl
Show At (,,,4);
Table SchFact;
Fields
UsersDoc.Name : Skip, {Font = {Bold = true}};
.....

...а нужно попробовать описать тот же самый формат тока не одноименный а свой (первое поле скрина делаем Noprotect):

Screen scrPrnVariatMcUslMy;
Show At (,,,4);
Table SchFact;
Fields
UsersDoc.Name : Noprotect, {Font = {Bold = true}};
....
end;

ну и в alter сделать hideFormats SCRPRNVARIATMCUSL;

Тока тогда в коде добавления кнопки иждентификатор своего нового формата поправить нужно будет :
...
st:=cfsGetObjInfo(
'scrPrnVariatMcUslMy' ,
...

Хотя если прокатит так, то можно прямо кнопку описать в своем скрине и все )

Re: Alter interface

Добавлено: 20 мар 2012, 17:31
savov
К моему счастью, в той базе, где реально будет работать этот фейс, стоит исправленный Галактический фейс ( :cool: ), т.е. кнопка включилась.
Хотя по большому счету , вопрос остался ( вдруг еще раз такое попадется).
спасибо за участие!

Re: Alter interface

Добавлено: 06 июн 2012, 14:31
Руслан
После установки патчей при компиляции стал ругаться на события cmAlt5 и cmMAKEORDER ("Ошибка: Oops. Такой команды нет: MAKEORDER")... Может эти события переименовали???
Новая версия компонента L_SKLAD, на которой не компилится - 8.10.111.0. Старая версия L_SKLAD - 8.10.84.0

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

#Component "L_SKLAD"

alter interface PERESORT;

create view;

Window  EDITDOC;

  HandleEvent
   cmAlt5:
    {
Message ('Выполняется обработчик');

var nrecPl,nrec_Doc : comp;
var NAZ, M_S, NOM_DD :string;
var koef, sum_katsopr : double;
nrec_Doc := katsopr.nrec;

   koef :=   0.51221876;
sum_katsopr := 0;

_loop PATDEFS  where (KEY = '&Const_GP')
   {
   koef := Double(PATDEFS.FORMULA);
   }
If KATSOPR.Vidsopr = Word(600)   //#1
{
_loop SPSOPR  where ((nrec_Doc == SPSOPR.CSOPR))
   {
   spsopr.rprice := Round(spsopr.rprice*koef,0);
   spsopr.price := Round(spsopr.price*koef,0);
   sum_katsopr :=    sum_katsopr + Round(spsopr.rprice*spsopr.kolfact);
   Update current spsopr;
   ReReadRecord (#spsopr);
        }
  katsopr.Summa := sum_katsopr;
  Update current Katsopr;
  ReReadRecord (#katsopr);
}
Message ('Цены пересчитаны с коэф. = ' + DoubleToStr(koef,'66.999999'));
    }
      cmMAKEORDER:
   {
   if katsopr.cpodrto<>katsopr.cpodrfrom
   {
      var stmt     : LongInt;
      var stmt_str : LongInt;
      var messageErr : longint;
      var nresult : word;
      var nresult2 : word;
      var nresult3 : word;
      var KatsoprNrec : comp;
      var tempRes : longint;
      KatsoprNrec := comp(katsopr.nrec);

      stmt := sqlAllocStmt;
      sqlBindCol(stmt, 1, nresult);

      sqlBindParam( stmt, 1, KatsoprNrec );
      sqlPrepare(stmt, stmt_str);
      sqlFreeStr(stmt_str);
      messageErr := sqlExecute(stmt);
      if(messageErr  = 0)
      {
         tempRes := 0;
         while( sqlFetch( stmt ) = tsOk )
         do
         {
            if(nresult = 1)
            {
               message('Будет создана новая партия');
               tempRes := 1;
            }
            else if nresult = 2
            {
               message('Присвоится существующая партия');
                tempRes := 2;
            }
            else if nresult = 3
            {
               message('Партия уже выбрана');
                tempRes := 3;
            }
            else if nresult = 4
            {
               message('МЦ не относится ни к одной из групп в таблице Nadolskiian.Group_mc');
                tempRes := 4;
            }
            else if nresult = 5
            {
               message('Функция S$F_GET_PARTY_SECOND неправильно отработала');
                tempRes := 5;
            }
         }
         if(tempRes = 0) message('Оприходование отработало неверно. Звоните в техподдержку по телефону 91');
      }
      else message('Опять этот Еррор(');

      ReReadRecord(#sporder);
      ReReadRecord(#spsopr);
      ReReadRecord(#katsopr);
   }
   inherited::handleEvent(cmMAKEORDER);

   }
  end;
  end;
end.

Re: Alter interface

Добавлено: 06 июн 2012, 15:25
edward_K
что то старая у вас версия
уже есть L_SKLAD_RES_8101160.acd
У меня вот так вот

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

...
Window EDITDOC ;  
HandleEvent
cmMAKEORDER: 
{  UpDateTable;
 inherited :: handleEvent (cmMAKEORDER); 

}
end;
end;
собирает

Re: Alter interface

Добавлено: 06 июн 2012, 16:38
Руслан
Не хочет компилить, не находит такого события makeorder... Может какой-то рес надо еще указывать кроме L_SKLAD????

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

#Component "L_SKLAD"

alter interface PERESORT;

Window  EDITDOC;

  HandleEvent
	cmMAKEORDER:
	{
	if katsopr.cpodrto<>katsopr.cpodrfrom
	{
		var stmt     : LongInt;
		var stmt_str : LongInt;
		var messageErr : longint;
		var nresult : word;
		var nresult2 : word;
		var nresult3 : word;
		var KatsoprNrec : comp;
		var tempRes : longint;
		KatsoprNrec := comp(katsopr.nrec);

		stmt := sqlAllocStmt;
		sqlBindCol(stmt, 1, nresult);
		sqlAddStr(stmt_str, 'select top 1 F_GET_PARTY_SECOND (?) from katsopr');
		sqlBindParam( stmt, 1, KatsoprNrec );
		sqlPrepare(stmt, stmt_str);
		sqlFreeStr(stmt_str);
		messageErr := sqlExecute(stmt);
		if(messageErr  = 0)
		{
			tempRes := 0;
			while( sqlFetch( stmt ) = tsOk )
			do
			{
				if(nresult = 1)
				{
					message('üπñÑΓ ß«ºñá¡á ¡«óá∩ »áαΓ¿∩');
					tempRes := 1;
				}
				else if nresult = 2
				{
					message('Åα¿ßó«¿Γß∩ ßπΘÑßΓóπεΘá∩ »áαΓ¿∩');
				    tempRes := 2;
				}
				else if nresult = 3
				{
					message('ÅáαΓ¿∩ πªÑ óδíαá¡á');
				 	tempRes := 3;
				}
				else if nresult = 4
				{
					message('îû ¡Ñ «Γ¡«ß¿Γß∩ ¡¿ ¬ «ñ¡«⌐ ¿º úαπ»» ó Γáí½¿µÑ Nadolskiian.Group_mc');
				 	tempRes := 4;
				}
				else if nresult = 5
				{
					message('öπ¡¬µ¿∩ S$F_GET_PARTY_SECOND ¡Ñ»αáó¿½∞¡« «Γαáí«Γá½á');
				 	tempRes := 5;
				}
			}
			if(tempRes = 0) message('Ä»α¿σ«ñ«óá¡¿Ñ «Γαáí«ΓὫ ¡ÑóÑα¡«. çó«¡¿ΓÑ ó ΓÑσ»«ññÑ᪬𠻫 ΓѽÑΣ«¡π 91');
		}
		else message('Ä»∩Γ∞ φëà àαα«α(');
		ReReadRecord(#sporder);
		ReReadRecord(#spsopr);
		ReReadRecord(#katsopr);
	}
	inherited::handleEvent(cmMAKEORDER);
	}
  end;
  end;

end.