Проблема с PanelInputLine

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

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

BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение 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
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение 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
}.

}
}
}
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение 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
│ ^
В чём может быть дело?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

я разве так писал? :D Кто же уникальному ключу что-то присваивает?
не хочется разжевывать каждую строку.
еще подсказка
create view v2
var wnrec:comp
as select katsopr.nrec
from ...
where (( wnrec == katsopr.nrec ... ))
видимость wnrec ограничена v2!!!!
при обращении к функциям или таблицам из v2 использование префикса "v2." обязательно!
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение 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?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

а, для начала нужно понять - зачем описание forward
потом само описание функции перемесить после вьюхи v2
смысл forward состоит в том, что нам надо использовать функцию до ее описания, а описывать можно только после v2 - иначе компилятор не пускает :). То есть мы сначала указываем компилятору что такая функция где то будет описана и и ее можно уже пропускаь , а потом много ниже говорим что же в ней делать.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

То есть forward до v2, а само описание функций после?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

При таком варианте (forward до v2, а само описание функций после) поле вообще не заполняется, а логфайл пуст.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

1. читайте внимательно советы
2. законченное решение тока за мани 8)
со слов "не работает" тяжело понять что вы там сейчас нагородили, ну хотя бы на компиляцию уже не ругается.
имя главной то вьюхи хотя бы проверили?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение 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;
				 }
			 }
		 }
	 }
   }
В чём может быть очередная моя ошибка?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

где нибудь сделайте message(funcSUM(0,0,???????????????) (в cmInit например)
я уже говорил что в визуальных элементах использовать поля из v2 нельзя!.
ваша переменная должна быть описана в главной(!) вьюхе.
функции вы должны передать katsopr.nrec из главной вьюхи(!) и вызвать ее там же. Смысл туда гнать из v2?
мучтесь дальше.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

edward_K, всё, домучал! :grin: Теперь всё считает и отображает то, что надо! :smile:
Ещё один вопрос, чтоб уже добить тему. Можно ли сделать как-то из PanelInputLine что-то типа StaticText, в смысле, чтобы отображались только данные, а самого поля не было видно на скрине?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

в смысле чтобы туда курсор не попадал?
в выводе поля
summat:skip ;
есть функции для установки сего програмно.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

Нет не skip, а как обычный текст на скрине. Я смотрел через список конфигурируемых параметров в некоторых интерфейсах, что у них есть вычисляемые надписи, которые, как ни странно, являются PanelInputLine, а не StaticText. А если skip использовать, то поле просто не позицинируется. Хотя на эти надписи тоже не станешь. Вот в чём собстваенно дело. Я полагаю, что так как-то можно это сделать, потому что разработчики Галактики использовали такие поля в стандартных интерфейсах, но не знаю как?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

вас что цвет фона поля не устраивает или чего?
это тоже можно задать. Statick сделать конечно можно, и есть функции для установки значений в свойства, которые видите в конфигураторе, но обычное поле все таки проще.
Ответить