Как правильно вызвать отчет?
Модераторы: m0p3e, edward_K, Модераторы
Re: Как правильно вызвать отчет?
Изменил вывод на \\Srv31\gal810ora\exe\trash\OUT\ (у нас все отчёты в trash хранятся) вместо \\Srv31\gal810ora\exe\OUT\, т.е. с form test('OUT\%USER%\Gruppa.out') на form test('TRASH\OUT\%USER%\Gruppa.out'). Вроде как заработало. А какие права на это могут влиять?
Последний раз редактировалось BlazeBio 11 окт 2010, 11:55, всего редактировалось 1 раз.
Re: Как правильно вызвать отчет?
Файловые права доступа на сервере!
Зачем же в EXE времянки хранить?
Зачем же в EXE времянки хранить?
Re: Как правильно вызвать отчет?
У нас даже с полными правами у человека не формировался отчёт, только когда изменил на trash, он cмог сформировать отчёт. А как у вас хранятся отчёты?
Re: Как правильно вызвать отчет?
EXE только чтение для всех, кроме админов.
Под TMP отдельная папка на сервере.
OUT во временной папке пользователя. OutputFilesDirectory=%APPDATA%\GALAXY\%BaseName%\OUT
Под TMP отдельная папка на сервере.
OUT во временной папке пользователя. OutputFilesDirectory=%APPDATA%\GALAXY\%BaseName%\OUT
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Как правильно вызвать отчет?
1 для начала - стандартные отчеты где у этого пользователя создаются?
2 у вас где?
3 есть ли setfilename в фейсе или .f в отчете?
2 у вас где?
3 есть ли setfilename в фейсе или .f в отчете?
Re: Как правильно вызвать отчет?
1,2. У меня и у его вызываются через интефейс, посредством выбора из listbox.edward_K писал(а):1 для начала - стандартные отчеты где у этого пользователя создаются?
2 у вас где?
3 есть ли setfilename в фейсе или .f в отчете?
3. А SetFileName не использовал. А нужно?
Re: Как правильно вызвать отчет?
Я в отчётах новичок , поэтому хотел бы узнать такое:
Есть deDoLoop и feBreak (о них скудно и не совсем понятно в доке описано) - как их правильно использовать чтоб войти в нужный цикл, перейти из цикла в цикл? И еще. Как можно указать в интерфейсе конкретное поле, в которое данный момент будет передаваться значение или это возможно только с помощью комбинаций deDoLoop и feBreak?
Есть deDoLoop и feBreak (о них скудно и не совсем понятно в доке описано) - как их правильно использовать чтоб войти в нужный цикл, перейти из цикла в цикл? И еще. Как можно указать в интерфейсе конкретное поле, в которое данный момент будет передаваться значение или это возможно только с помощью комбинаций deDoLoop и feBreak?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Как правильно вызвать отчет?
читаем vipprogr.chm для PutEventById
feBreak - выйти из цикла;
feDoLoop - войти в цикл (для циклов, где требуется проверка на вход - цикл с параметром checkenter);
feTrue, feFalse - выбор альтернативы для условного оператора или выбор ветви while для оператора выбора.
там и примерчик есть с куском форм и фейса.
febreak в основном для PutEvent. Цикл с chekenter можно и не прерывать - главное пропихнуть точное число полей по этому циклу и все, а вот обычный нужно прервать в нужном месте. Смысл для обычного цикла примерно такой - как только вы в него попали, то для выхода из него нужно послать putevent(febreak), для checkenter нужно посылать для каждой итерации. Если есть несколько вложенных циклов, то управляем каждым по отдельности. А вообще уже пора изучать fastreport.
feBreak - выйти из цикла;
feDoLoop - войти в цикл (для циклов, где требуется проверка на вход - цикл с параметром checkenter);
feTrue, feFalse - выбор альтернативы для условного оператора или выбор ветви while для оператора выбора.
там и примерчик есть с куском форм и фейса.
febreak в основном для PutEvent. Цикл с chekenter можно и не прерывать - главное пропихнуть точное число полей по этому циклу и все, а вот обычный нужно прервать в нужном месте. Смысл для обычного цикла примерно такой - как только вы в него попали, то для выхода из него нужно послать putevent(febreak), для checkenter нужно посылать для каждой итерации. Если есть несколько вложенных циклов, то управляем каждым по отдельности. А вообще уже пора изучать fastreport.
Re: Как правильно вызвать отчет?
Пример есть и то закомичен почему-то
"Описание
procedure PutEventById (iEvent: word, iId: word);
procedure Form_PutEventById (iEvent: word, iId: word; p : longInt);
Параметры
iEvent : word - константа события. Доступны следующие константы:
feBreak - выйти из цикла;
feDoLoop - войти в цикл (для циклов, где требуется проверка на вход - цикл с параметром checkenter);
feTrue, feFalse - выбор альтернативы для условного оператора или выбор ветви while для оператора выбора.
iId : word - идентификатор элемента формы, которому передается событие. Идентификатор элемента формы доступен в интерфейсе с префиксом fc.
p : longInt - ссылка на форму. Ссылка создается вызовом метода форм Handle."
Элемент формы - поле что-ли? Куда будет выводится, если я установлю поле fc<имя поля>?
Ну вот к примеру в випе пишу:
Получается, что станет вывод на поле line? А потом если я снова хочу вернутся в самый внутренний цикл?
Код: Выделить всё
! form := getForm('t', 't.out');
! if form=nil then
! exit;
! for i:=1 to 10 do begin
! form^.writeInt(i);
! end;
! form^.putEventById(feBreak,1);
! GetReports(form);
procedure PutEventById (iEvent: word, iId: word);
procedure Form_PutEventById (iEvent: word, iId: word; p : longInt);
Параметры
iEvent : word - константа события. Доступны следующие константы:
feBreak - выйти из цикла;
feDoLoop - войти в цикл (для циклов, где требуется проверка на вход - цикл с параметром checkenter);
feTrue, feFalse - выбор альтернативы для условного оператора или выбор ветви while для оператора выбора.
iId : word - идентификатор элемента формы, которому передается событие. Идентификатор элемента формы доступен в интерфейсе с префиксом fc.
p : longInt - ссылка на форму. Ссылка создается вызовом метода форм Handle."
Элемент формы - поле что-ли? Куда будет выводится, если я установлю поле fc<имя поля>?
Ну вот к примеру в випе пишу:
Код: Выделить всё
_loop Rep(Rep12)
{
if Rep.nameline=group_line
{
test.Write(Rep.namefrm);
test.Write(Rep.Vsegofrm);
//test.PutEvent(feBreak);
vsegol:=vsegodec+Vsegofrm;
}
else
{
group_line:=Rep.nameline;
vsegol:=Vsegofrm;
test.Write(Rep.namefrm);
test.Write(Rep.Vsegofrm);
test.PutEventById(feBreak,fcline);
test.Write(Rep.nameline);
}
}
test.PutEvent(feBreak);
test.ShowFile('');
code]
А отчёт такой
[code].linkform 'отчёт по линии' prototype is 'test'
.group 'Итоговые по линиям'
.set thousand separator = '`'
.fields
podr
vsego_p
line
.endfields
.var
summa_l:double
summa_1:double
summa_2:double
summa_3:double
.endvar
.fields
summa_l
summa_1
.endfields
Количество МЦ по линиям (по плану)
─────────────────────────────┬──────────────────────────
Линия │ Количество
│
─────────────────────────────┴──────────────────────────
.{
.begin summa_1:=0; end.
.{
.begin summa_l:=0; end.
.{
.begin summa_3:=vsego_p; summa_l:=summa_l+summa_3; end.
─────────────────────────────┬──────────────────────────
@@@@@@@@@@@@@@@@@@@@@@@ │ &'&&&'&&&'&&&'&&&
.}
.begin summa_2:=summa_l; summa_1:=summa_1+summa_2; end.
─────────────────────────────┬──────────────────────────
@@@@@@@@@@@@@@@@@@@@@@@ │ &'&&&'&&&'&&&'&&&'&&&
─────────────────────────────┴──────────────────────────
.}
────────────────────────────────────────────────────────
Всего: | &&&'&&&'&&&'&&&'&&&'&&&
.}
--------------------------------------------------------
.endform
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Как правильно вызвать отчет?
fc????????????? подразумевается имя цикла с checkenter - причем тут поле line? Константа будет сгенерена в процессе компиляции формы в отдельный файл и в ресурс (поэтому в проекте компилите формы перед vip).
Чтобы вернутся в цикл без checkenter вам нужно после febreak отправить столько полей в следующий, сколько содержится после и перед внутренним циклом.
Чтобы вернутся в цикл без checkenter вам нужно после febreak отправить столько полей в следующий, сколько содержится после и перед внутренним циклом.
Re: Как правильно вызвать отчет?
А я думал, что циклы без названия. В отдельный файл это как? Я переставил все frm вначало ничего нового не появилось. Как мне выдрать эту fc?
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Как правильно вызвать отчет?
сделать цикл с checkenter. Для простых PutEventByid применять не нужно - только PutEvent(febreak) и все.
Re: Как правильно вызвать отчет?
Вставил везде checkenter. Теперь при вызове отчёт всё время пуст. Что делать?
Код: Выделить всё
Количество МЦ по линиям (по плану)
─────────────────────────────┬──────────────────────────
Линия │ Количество
│
─────────────────────────────┴──────────────────────────
.{checkenter vsego
.begin summa_1:=0; end.
.{checkenter linia
.begin summa_l:=0; end.
.{checkenter format
.begin summa_3:=vsego_p; summa_l:=summa_l+summa_3; end.
─────────────────────────────┬──────────────────────────
@@@@@@@@@@@@@@@@@@@@@@@ f│ &'&&&'&&&'&&&'&&&
.}
.begin summa_2:=summa_l; summa_1:=summa_1+summa_2; end.
─────────────────────────────┬──────────────────────────
@@@@@@@@@@@@@@@@@@@@@@@ l│ &'&&&'&&&'&&&'&&&'&&&
─────────────────────────────┴──────────────────────────
.}
────────────────────────────────────────────────────────
Всего: v| &&&'&&&'&&&'&&&'&&&'&&&
.}
--------------------------------------------------------
.endform
Re: Как правильно вызвать отчет?
Подключил созданный *.fnc в интерфейс по вызову отчётов.
Для заполнения сделал так.
Выводятся значения по форматам, по линиям. А вычисляемое поле в linkform с "Всего: v| ..."не выводит вообще, даже нулевое. Исходник отчёта описан выше. Что я упустил?
Для заполнения сделал так.
Код: Выделить всё
_loop Rep ordered by index Rep11
{
if Rep.nameline=group_line
{
test.PutEventById(feDoLoop,fcvsego);
test.PutEventById(feDoLoop,fclinia);
test.PutEventById(feDoLoop,fcformat);
test.Write(Rep.namefrm);
test.Write(Rep.Vsegofrm);
test.PutEventById(feBreak,fcformat);
test.PutEventById(feBreak,fclinia);
test.PutEventById(feBreak,fcvsego);
vsegol:=vsegodec+Rep.Vsegofrm;
}
else
{
test.PutEventById(feDoLoop,fcvsego);
test.PutEventById(feDoLoop,fclinia);
test.Write(group_line);
test.PutEventById(feDoLoop,fcformat);
test.Write(Rep.namefrm);
test.Write(Rep.Vsegofrm);
test.PutEventById(feBreak,fcformat);
test.PutEventById(feBreak,fclinia);
test.PutEventById(feBreak,fcvsego);
group_line:=Rep.nameline;
vsegol:=Rep.Vsegofrm;
}
}
test.PutEventById(feDoLoop,fcvsego);
test.PutEventById(feDoLoop,fclinia);
test.Write(group_line);
test.PutEventById(feBreak,fcformat);
test.PutEventById(feBreak,fclinia);
test.PutEventById(feBreak,fcvsego);
test.PutEventById(feDoLoop,fcvsego);
test.PutEventById(feBreak,fcvsego);
test.ShowFile('');
Re: Как правильно вызвать отчет?
Не варит мозг, запарился
выводя последние три поля пустыми в отчёт, хотя если проверить условие в *.vip, то всё работет, а тут в *.frm никак(
Код: Выделить всё
.linkform 'Economist1' prototype is 'SF'
.NameInList 'XXX'
.group 'EconomistForm'
.p 64
...
.var
lostOpravka, lostKercontrol, lostSortnost:double;
endvar.
...
.create view plan as select
sfplan.*
;
.begin
...
TblClearBuffer(tblColl);
TblSFComp(tblColl, nrecColl, mcGrNrec)
TblSFComp(tblColl, nrecMC, mcNrec)
TblSFComp(tblColl, cnrecPers, sfmclistCsfperson)
if tsOk=plan.getfirst sfplan where ((mcNrec == sfplan.cmc and Year(StrToDate(d1,'DD/MM/YY'))==sfplan.yearmc and Month(StrToDate(d1,'DD/MM/YY'))==sfplan.monthmc ))
{
TblSFDouble(tblColl, lostOpravka, plan.sfplan.opravka);
TblSFDouble(tblColl, lostKercontrol,plan.sfplan.kercontrol);
TblSFDouble(tblColl, lostSortnost, plan.sfplan.sortnost);
}
...
end.
.}