Как правильно вызвать отчет?

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

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

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

Как правильно вызвать отчет?

Сообщение BlazeBio »

У меня такой код

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

.form test
.fields
   podr  
   vsego
.endfields
Количесвто МЦ по плану
--------------------------------------------------------
Мат. ценность                         |  Количество
--------------------------------------------------------
.{------------------------------------------------------
! начало цикла по номеру склада
.{======================================================
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   |  @@@@@@@@@@
======================================================  
.}
------------------------------------------------------

! Конец цикла по номеру склада
!Всего:                              | @@@@@@@@@@@@
.}
.endform

.linkform 'Itogi' prototype is 'test'
.fields
podr
vsego  
.endfields
.var   
summa_1:double   
.endvar
.fields   
summa_1
.endfields
Количесвто МЦ по плану
--------------------------------------------------------
Мат. ценность                |  Количесвто
                             |
--------------------------------------------------------
.{--------------------------------------------------------
! начало цикла по номеру склада
.begin  summa_1:=summa_1+vsego;  end.
.{========================================================
@@@@@@@@@@@@@@@@@@@@@@@      |  @@@@@@@@@@@@@@@@
========================================================
.}
--------------------------------------------------------
.}
! Конец цикла по номеру склада
Всего:                       |@@@@@@@@@@@@@@@@@@
.endform
В интерфейсе описание и вызов такие

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

form Itogi("Itogi.out");

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

		cmReport:
		{
		   var summa:double;
		   _loop ppspecif where((pptitle.atl_nrec==ppspecif.cpptitle))
		   {
			if getfirst ppkatstan where((ppspecif.cppkatstan==ppkatstan.atl_nrec))=tsok
			{
				Itogi.Write(ppkatstan.name);			
			}
			    summa:=ppspecif.Fdec+ppspecif.Sdec+ppspecif.Tdec; 
			    Itogi.Write(summa);
		   }
		   Itogi.PutEvent(feBreak);
		   Itogi.PutEvent(feBreak);
		   Itogi.ShowFile('');
		}
При нажатии кнопки cmReport вылазит окно отчетов, где надпись "Видимых отчетов нет".
Если вызывать форму-прототип, то открывается сразу же отчет, но в форме прототипе у меня не получается объявить переменную, описанную в форме-прототипе, полем, компилятор ругается, что переменную. нельзя объявить полем. В доке не очень понятно всё описано. Там пример вызова только для формы прототипа.

Поммогите разобраться как правильно вызвать из интерфейса отчет?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Как правильно вызвать отчет?

Сообщение m0p3e »

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

Re: Как правильно вызвать отчет?

Сообщение BlazeBio »

Как организовать этот поток?(я в отчетах плаваю :grin: )
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Как правильно вызвать отчет?

Сообщение m0p3e »

form test('OUT\%USER%\itogi.out');
или
form Itogi('OUT\%USER%\itogi.out',test);
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Как правильно вызвать отчет?

Сообщение BlazeBio »

Сделал form test('OUT\%USER%\itogi.out'). Появилось два отчёта test и Itogi. Открыл Itogi. Но итоговая сумма "Всего 0". Почему?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Как правильно вызвать отчет?

Сообщение BlazeBio »

Почему-то работает отчет Itogi, если описать его так.

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

.linkform 'Itogi' prototype is 'test'
.fields
podr
vsego  
.endfields
.var   
summa_1:double
summa_2:double   
.endvar
.fields   
summa_1
.endfields
Количестыо МЦ по плану(линкформ)
--------------------------------------------------------
Мат. ценность                |  Количество
                             |
--------------------------------------------------------
!.begin summa_1:=22222; end.
!--------------------------------------------------------
.begin summa_1:=0; end.
.{
! начало цикла по номеру склада
.{
!.begin  summa_1:=summa_1+vsego;  end.
.begin summa_2:=vsego; summa_1:=summa_1+summa_2; end.
========================================================
@@@@@@@@@@@@@@@@@@@@@@@      |  @@@@@@@@@@@@@@@@
.}
========================================================
.}
--------------------------------------------------------
! Конец цикла по номеру склада
!.begin summa_1:=summa_1+vsego; end.
Всего:                       |@@@@@@@@@@@@@@@@@@
.endform
Всё формируется нормально. Но, если не формировать отчёт, а нажать "закрытие окна" (в простонародье крест) или кнопку escape, то повторно кнопка(cmReport) не хочет открываться . Всё снова работает, если закрыть и открыть интерфейс с кнопкой cmReport заново.
Почему происходит такое "залипание", вызывается же другой интерфейс с отчётами?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как правильно вызвать отчет?

Сообщение edward_K »

В начале(даже не вывода, а сбора информации - чтобы пользователь не ждал появления окна со списком отчета)
outf.reinit
if outf.error
{ message('отчет не выбран!')
exit;
}
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как правильно вызвать отчет?

Сообщение edward_K »

суммирование кстати не работает потому как идет ошибка преобразования строки в double. В прототипе лучше vsego описать как double или суммировать как double(trim(vsego)).
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Как правильно вызвать отчет?

Сообщение BlazeBio »

Компилятор ругается, что нет такого поля или метода outf.reinit. Как быть? :?:
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: Как правильно вызвать отчет?

Сообщение edward_K »

outf замените на Itogi - слегка ж надо додумывать. В 90% в текстах галки идет именно Outf - но это ж всего лишь название класса. А ссылку на этот класс можно даже передавать в другой фейс
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Как правильно вызвать отчет?

Сообщение BlazeBio »

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

Re: Как правильно вызвать отчет?

Сообщение BlazeBio »

У меня почему-то при повторном вызове отчёта, суммируются данные. И так сколько вызовешь столько и суммирует. Может где-то нужно почистить что-нибудь вроде буффера?

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

cmRep:
{			   test.SetGroup('Итоговые по МЦ'); 
			 	   	   test.reinit;
						if test.error
						{ message('отчет не выбран!')
						exit;
						}
						var summa:double;
						_loop ppspecif where((wnrec==ppspecif.cpptitle))
						{
						 _loop ppkatstan where((ppspecif.cppkatstan==ppkatstan.atl_nrec))
						 {
							 vsegodec:=ppspecif.Fdec+ppspecif.Sdec+ppspecif.Tdec;
						     test.Write(ppkatstan.name);
							 test.Write(vsegodec);
						 }
						}
						test.PutEvent(feBreak);
						test.ShowFile('');
}
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Как правильно вызвать отчет?

Сообщение BlazeBio »

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

Re: Как правильно вызвать отчет?

Сообщение BlazeBio »

Не найден файл \\srv31\gal810ora\EXE\OUT\alenichevasv\Gruppa.out

У меня и тестового порльзователя создаются отчёты, а у других пользователей при вызове отчёта пишется выше указанная ошибка. В чём может быть дело?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Как правильно вызвать отчет?

Сообщение m0p3e »

А у вас временные файлы в EXE хранятся и все пользователи имеют туда доступ на запись???
Ответить