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

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 11:47
BlazeBio
Вот код .

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

alter interface RASHORD;
var fMy_var2,pil1:string;
	katsoprnrec:comp;
	sklorderrec:comp;
	summat:double;
function funcSUM( price : double; kol : double ) : double; forward;
function funcSUM( price : double; kol : double ) : double;
  { 
	  funcSUM:=funcSUM+price*kol;
	  logstrtofile('summak.txt',funcSUM);
  }

create view
(osum)
as select
sporder.rsrprice*sporder.kol,
sporder.*
 from sporder;
create view v2 (summak) as select  /*sporder.rsrprice*sporder.kol*/ funcSUM(sporder.rsrprice,sporder.kol) from SpSopr,SpOrder//,
	where ((1==SpSopr.PrMc
		and  katsopr.nrec /*281474976821314*/== SpSopr.cSopr
		and  SpSopr.Nrec  == SpOrder.cSpSopr
		and 1==sporder.vidorder));
	 handleevent
		 cmInit:
		 {		inherited :: handleEvent(cmInit);
				katsoprnrec:=katsopr.nrec;
				sklorderrec:=sklorder.nrec;
				summat:=0;
				message(v2.summak);
				cfsSetCurrentContainer('RASHORD.EDITORDERS.BRSPORDER');
				var  i: integer;
				for (i:=0;   i<2;   i++)
				{
				cfsCreateObject('Column','BRSPORDER','osum',FALSE, fMy_var2);
				cfsSetProp('osum','Visible',TRUE);
				if (i =0)
				{
				cfsSetProp('osum','Visible', FALSE );
				}
				else
				{
				cfsSetProp('osum' , 'Visible', TRUE ) ;
				}
				cfsSetProp('osum' , 'Title' , 'Стоимость' ) ;
				cfsSetProp('osum' , 'PrecisionVarName' , 'digitToch2');
				cfsSetProp('osum' , 'PassiveFormat' , '[|-]366`666`666`666`666.88');
				SetPrecisionGroup('digitToch2',2);
				cfsSetProp('osum' , 'MaxLen', 18 );
				cfsSetProp('osum','Protect',true);
				cfsDestroyObject('c_BRSPORDER_SUMPRICE_Стоимость');
				cfsSetCurrentContainer('RASHORD.PROSCINFO');
				cfsCreateObject('PanelInputLine','PROSCINFO','summak',FALSE, pil1);
				cfsSetProp('summak','Origin_X',100);
				cfsSetProp('summak','Origin_Y',25);
				cfsSetProp('summak' , 'Size_X',60);
				cfsSetProp('summak' , 'Visible', TRUE );
				cfsSetProp('summak' , 'Protect', False );
				cfsSetProp('summak' , 'Skip', False );
				}
				cfsSetCurrentContainer('RASHORD.PROSCINFO');
				cfsDestroyObject('i_PROSCINFO_TORDSTR');
				cfsDestroyObject('i_PROSCINFO_ATTRVALP.VSTRING');
				cfsDestroyObject('i_PROSCINFO_SFLDCOUNTANDSUM');
		 }
	 end;
end.
Все равно отображается 0 в PanelInputLine, и в log-файле тоже нули. :x

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 12:21
edward_K
summak должно быть в основной вьюхе - посмотрите в консоли управления какая.
в v2 не хватает условия на katsopr
в функцию надо добавить параметр katsopr.nrec
.. (wwnrec : comp ...)
{ v2.wnrec:= wwnrec
if v2 getfirst katsopr=0
{ logstrtofile ( ... , 'нашли накладную '+v2.katsopr.nsopr0
v2,_loop spsopr
{ if v2.getfirst sporder=0
{ .... +v2.sporder,kol*v2.sporder.price
}.

}
}
}

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 12:41
BlazeBio

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

function funcSUM( price : double; kol : double; wwnrec : comp  ) : double; forward;
function funcSUM( price : double; kol : double; wwnrec : comp  ) : double;
  {
	{ v2.katsopr.nrec:= wwnrec
		if v2 getfirst katsopr=0
		{  	logstrtofile ( ... , 'нашли накладную '+v2.katsopr.nsopr0)
			v2,_loop spsopr
			{ if v2.getfirst sporder=0
				{ 
					funcSUM:=funcSUM++v2.sporder*kol*v2.sporder.price
				}
	        }
	    }
	}
  }

create view
(osum)
as select
sporder.rsrprice*sporder.kol,
sporder.*
 from sporder;
create view v2 (summak) as select  /*sporder.rsrprice*sporder.kol*/ funcSUM(sporder.rsrprice,sporder.kol,katsopr.nrec) from SpSopr,SpOrder,katsopr//,
	where ((1==SpSopr.PrMc
		and  katsopr.nrec /*281474976821314*/== SpSopr.cSopr
		and  SpSopr.Nrec  == SpOrder.cSpSopr
		and 1==sporder.vidorder));
Пишется ошибка компиляции : Нет такой функции, поля или метода : V2.KATSOPR.NREC (стр.12, поз.19 в D:\CODE\_ALTERINTERFACE_L_SKLAD_ACTCOMPL_SPECIFINFO_BRRASPREDMCRAZ\1\MAKE\Rashord.vip)
│ { v2.katsopr.nrec:= wwnrec
│ ^
В чём может быть дело?

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 13:08
edward_K
я разве так писал? :D Кто же уникальному ключу что-то присваивает?
не хочется разжевывать каждую строку.
еще подсказка
create view v2
var wnrec:comp
as select katsopr.nrec
from ...
where (( wnrec == katsopr.nrec ... ))
видимость wnrec ограничена v2!!!!
при обращении к функциям или таблицам из v2 использование префикса "v2." обязательно!

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 13:27
BlazeBio
Согласен с katsopr.nrec ступил. Но я так понимаю вы нечто такое имели ввиду.

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

function funcSUM( price : double; kol : double; wwnrec : comp  ) : double; forward;
function funcSUM( price : double; kol : double; wwnrec : comp  ) : double;
  {
	{ v2.w_nrec:= wwnrec
		if v2 getfirst katsopr=0
		{  	logstrtofile ( ... , 'нашли накладную '+v2.katsopr.nsopr0)
			v2,_loop spsopr
			{ if v2.getfirst sporder=0
				{
					funcSUM:=funcSUM++v2.sporder*kol*v2.sporder.price
				}
	        }
	    }
	}
  }

create view
(osum)
as select
sporder.rsrprice*sporder.kol,
sporder.*
 from sporder;
create view v2
var w_nrec:comp
(summak) as select
 funcSUM(sporder.rsrprice,sporder.kol, katsopr.nrec), sporder.rsrprice, sporder.kol, katsopr.nrec from SpSopr,SpOrder,katsopr
	where ((1==SpSopr.PrMc
		and w_nrec=katsopr.nrec
		and  katsopr.nrec /*281474976821314*/== SpSopr.cSopr
		and  SpSopr.Nrec  == SpOrder.cSpSopr
		and 1==sporder.vidorder));
Если такое, то опять же ругается компилятор на v2.w_nrec:= wwnrec?

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 13:50
edward_K
а, для начала нужно понять - зачем описание forward
потом само описание функции перемесить после вьюхи v2
смысл forward состоит в том, что нам надо использовать функцию до ее описания, а описывать можно только после v2 - иначе компилятор не пускает :). То есть мы сначала указываем компилятору что такая функция где то будет описана и и ее можно уже пропускаь , а потом много ниже говорим что же в ней делать.

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 14:04
BlazeBio
То есть forward до v2, а само описание функций после?

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 14:19
BlazeBio
При таком варианте (forward до v2, а само описание функций после) поле вообще не заполняется, а логфайл пуст.

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 14:46
edward_K
1. читайте внимательно советы
2. законченное решение тока за мани 8)
со слов "не работает" тяжело понять что вы там сейчас нагородили, ну хотя бы на компиляцию уже не ругается.
имя главной то вьюхи хотя бы проверили?

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 14:51
BlazeBio
Всё компилится нормально, но нет никаких значений в поле PanelInputLine:

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

function funcSUM( price : double; kol : double; wwnrec : comp  ) : double; forward; 
create view
(osum)
as select
sporder.rsrprice*sporder.kol,
sporder.*
 from sporder;
create view v2
var w_nrec:comp
(summak) as select
funcSUM(sporder.rsrprice,sporder.kol, katsopr.nrec), sporder.rsrprice, sporder.kol, katsopr.nrec from SpSopr,SpOrder,katsopr
	where ((1==SpSopr.PrMc
		and w_nrec==katsopr.nrec
		and  katsopr.nrec /*281474976821314*/== SpSopr.cSopr
		and  SpSopr.Nrec  == SpOrder.cSpSopr
		and 1==sporder.vidorder));
function funcSUM( price : double; kol : double; wwnrec : comp  ) : double; 
   {
	 { v2.w_nrec:= wwnrec
		 if v2.getfirst katsopr=0
		 {  	logstrtofile ('summak.txt', 'нашли накладную '+v2.katsopr.nsopr);
			 v2._loop spsopr
			 { if v2.getfirst sporder=0
				 {
					 funcSUM:=funcSUM+v2.sporder.kol*v2.sporder.rsrprice;
				 }
			 }
		 }
	 }
   }
В чём может быть очередная моя ошибка?

Re: Проблема с PanelInputLine

Добавлено: 07 июн 2010, 15:16
edward_K
где нибудь сделайте message(funcSUM(0,0,???????????????) (в cmInit например)
я уже говорил что в визуальных элементах использовать поля из v2 нельзя!.
ваша переменная должна быть описана в главной(!) вьюхе.
функции вы должны передать katsopr.nrec из главной вьюхи(!) и вызвать ее там же. Смысл туда гнать из v2?
мучтесь дальше.

Re: Проблема с PanelInputLine

Добавлено: 08 июн 2010, 14:34
BlazeBio
edward_K, всё, домучал! :grin: Теперь всё считает и отображает то, что надо! :smile:
Ещё один вопрос, чтоб уже добить тему. Можно ли сделать как-то из PanelInputLine что-то типа StaticText, в смысле, чтобы отображались только данные, а самого поля не было видно на скрине?

Re: Проблема с PanelInputLine

Добавлено: 08 июн 2010, 23:37
edward_K
в смысле чтобы туда курсор не попадал?
в выводе поля
summat:skip ;
есть функции для установки сего програмно.

Re: Проблема с PanelInputLine

Добавлено: 09 июн 2010, 11:03
BlazeBio
Нет не skip, а как обычный текст на скрине. Я смотрел через список конфигурируемых параметров в некоторых интерфейсах, что у них есть вычисляемые надписи, которые, как ни странно, являются PanelInputLine, а не StaticText. А если skip использовать, то поле просто не позицинируется. Хотя на эти надписи тоже не станешь. Вот в чём собстваенно дело. Я полагаю, что так как-то можно это сделать, потому что разработчики Галактики использовали такие поля в стандартных интерфейсах, но не знаю как?

Re: Проблема с PanelInputLine

Добавлено: 09 июн 2010, 11:22
edward_K
вас что цвет фона поля не устраивает или чего?
это тоже можно задать. Statick сделать конечно можно, и есть функции для установки значений в свойства, которые видите в конфигураторе, но обычное поле все таки проще.