Отчеты в FastReport
Модераторы: m0p3e, edward_K, Модераторы
Re: Отчеты в FastReport
Обновилась библиотека генератора отчетов FastReport версия 9.1.22.
Обновление содержит обновленную справку.
Что нового?
✔ Для объекта TfrxPictureView реализована поддержка растрового формата графических изображений — GIF.
✔ Реализована возможность загрузки OLE-объекта из файла, для этого из скрипта необходимо вызвать процедуру LoadFromFile компонента TfrxOLEView.
✔ В класс TfrxDataSet добавлена функция ValueAsMemoryStream для получения значения в объект TMemoryStream.
✔ Доработан обработчик ошибок получения и вычисления данных, возникающих при построении отчета. При ошибочном вычислении значения в объекте Текст — красный фон принимает только та ячейка, в которой возникли ошибки формирования данных.
Обновление доступно по ссылке на FTP:
FREPORT3_DLL_91220.acd - ACD файл.
Обновление содержит обновленную справку.
Что нового?
✔ Для объекта TfrxPictureView реализована поддержка растрового формата графических изображений — GIF.
✔ Реализована возможность загрузки OLE-объекта из файла, для этого из скрипта необходимо вызвать процедуру LoadFromFile компонента TfrxOLEView.
✔ В класс TfrxDataSet добавлена функция ValueAsMemoryStream для получения значения в объект TMemoryStream.
✔ Доработан обработчик ошибок получения и вычисления данных, возникающих при построении отчета. При ошибочном вычислении значения в объекте Текст — красный фон принимает только та ячейка, в которой возникли ошибки формирования данных.
Обновление доступно по ссылке на FTP:
FREPORT3_DLL_91220.acd - ACD файл.
Последний раз редактировалось rmozgov 16 июн 2017, 17:20, всего редактировалось 1 раз.
Re: Отчеты в FastReport
Обновилась библиотека генератора отчетов FastReport версия 9.1.23.
Обновление содержит обновленную справку.
Что нового?
✔ Доработан функционал управления отчетом из VIP-кода для доступа к данным БД из FastReport-отчета с помощью потока данных, созданного по DSQL-запросу. Для этого в параметрах функции FRCreate необходимо передать строку DSQL-запроса до 255 символов или "длинную строку" запроса более 255 символов, созданную функцией sqlAddStr.
✔ Улучшен функционал отправки отчета по почте из VIP-кода. Для функции FRSetParameters с параметром frMailParam реализована передача длинных строк. Поля MailTo, Subject и Body структуры frxSendMailParam могут быть дескрипторами файла.
✔ Доработан функционал отправки отчета по e-mail с помощью кнопки [Отправить]. Добавлена возможность задавать значения по умолчанию в полях «Кому», «Тема» и «Содержание письма». Для этого необходимо добавить в шаблон соответствующие переменные GalaxyMailTo, GalaxyMailSubject, GalaxyMailBody и задать им необходимые значения.
✔ Оптимизирован режим автопечати отчетов с автопометками. В автоотчет выводятся только помеченные записи, автопометка и другие иконки записей не отображаются.
✔ Исправлено формирование штрих-кодов типа bcCode128C и bcCodeEAN128C. При нечетном количестве символов в начало значения добавляется незначащий ноль.
Обновление доступно по ссылке на FTP:
FREPORT3_DLL_91230.acd - ACD файл.
Обновление содержит обновленную справку.
Что нового?
✔ Доработан функционал управления отчетом из VIP-кода для доступа к данным БД из FastReport-отчета с помощью потока данных, созданного по DSQL-запросу. Для этого в параметрах функции FRCreate необходимо передать строку DSQL-запроса до 255 символов или "длинную строку" запроса более 255 символов, созданную функцией sqlAddStr.
✔ Улучшен функционал отправки отчета по почте из VIP-кода. Для функции FRSetParameters с параметром frMailParam реализована передача длинных строк. Поля MailTo, Subject и Body структуры frxSendMailParam могут быть дескрипторами файла.
✔ Доработан функционал отправки отчета по e-mail с помощью кнопки [Отправить]. Добавлена возможность задавать значения по умолчанию в полях «Кому», «Тема» и «Содержание письма». Для этого необходимо добавить в шаблон соответствующие переменные GalaxyMailTo, GalaxyMailSubject, GalaxyMailBody и задать им необходимые значения.
✔ Оптимизирован режим автопечати отчетов с автопометками. В автоотчет выводятся только помеченные записи, автопометка и другие иконки записей не отображаются.
✔ Исправлено формирование штрих-кодов типа bcCode128C и bcCodeEAN128C. При нечетном количестве символов в начало значения добавляется незначащий ноль.
Обновление доступно по ссылке на FTP:
FREPORT3_DLL_91230.acd - ACD файл.
Re: Отчеты в FastReport
почему при компиляции ругается на Нет такой функции, поля или метода : CONTINUEDATASET?
Код: Выделить всё
[..........]
DataStream FRBookings
(
table inherited::FRtbl_Bookings
(
[e_MnPlanName] MnPlan.Name;
);
)
Handleevent table FRtbl_Bookings
cmOnProcess: {
Var i : Word;
Var NewRef : Comp;
Var bflag : boolean;
if( GetMarkerCount(Markers) = 0 )
{
bflag := true;
InsertMarker(Markers, Indent.NRec);
}
for (i:= 0; i < GetMarkerCount(Markers); i++)
{
if (Not GetMarker(Markers, i, NewRef))
Continue;
if getfirst Indent where ((NewRef == Indent.Nrec)) = tsOk
{
ContinueDataset;
}
}
}
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Отчеты в FastReport
Ну видимо потому, что у вас FRtbl_Bookings не DataSet и ему ContinueDataSet не нужен.
Вот так примерно делать с DataSet
Вот так примерно делать с DataSet
Код: Выделить всё
handleEvent dataset ContDoc
cmPreProcess:
{ if Print_Group>0
{ boPrint_Group_First:=Getfirst_Print_Group
if not boPrint_Group_First BreakProcess
else boPrint_SP_First:=Getfirst_Print_SP;
}
else
{ boPrint_Group_First:=getfirst ContDoc=tsok;
boPrint_SP_First:=getfirst ContDocPersons=tsok;;
}
}
cmOnProcess:
{ if (boPrint_Group_First)
{
boPrint_Group_First := false;
ContinueDataset;
}
else
{ if Print_Group>0
{ if not GetNext_Print_Group
{ BreakProcess;
//if not boPrint_Group_First BreakProcess
}
else
{ boPrint_SP_First:=Getfirst_Print_SP;
ContinueDataset;
}
}
else
{ if getnext Contdoc<>tsok BreakProcess
else ContinueDataset;;
}
}
if getfirst ContDocPersons=tsok {}
if getfirst Appointments=tsok {}
}
end;
Re: Отчеты в FastReport
Спасибо за ответ, edward_K, я ещё плаваю в FR.edward_K писал(а):Ну видимо потому, что у вас FRtbl_Bookings не DataSet и ему ContinueDataSet не нужен.
Другой вопрос, почему я не могу использовать свои поля для вставки, которые я добавил в table inherited?
т.е. если я пишу
Код: Выделить всё
[.......]
DataStream FRBookings
(
table inherited::FRtbl_Bookings
(
[e_MnPlanName] mnplan.name;
);
)
Handleevent table FRtbl_Bookings
cmOnProcess:
{
ClearBuffer(#FRtbl_Bookings);
FRtbl_Bookings.e_MnPlanName:=mnplan.name;
insert current FRtbl_Bookings
}
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Отчеты в FastReport
edd, элемент datastream table
этой таблы , но да, можешь добавить свое поле в table FRtbl_Bookings в датастриме. Временная FRtbl_Bookings фактически заполнена внутренними алгоритмами Bookings и делать insert current FRtbl_Bookings не имеет смысла никакого в коде твоего наследника. Ты дозаявил поле e_MnPlanName, осталось только его как то связать с существующей записью(ями) FRtbl_Bookings.
Кстати, в FRtbl_Bookings есть поле _IndNrec , в котором хранится Indent.Nrec. Цель же , насколько я понимаю, довывести данные о записи плана к конкертной заявке.
Т.е. в родительском стандартном функционале заявок заявлен table FRtbl_Bookings на основе временной таблицы FRtbl_Bookings, и ты не можешь изменить задекларированную структуру<имя-таблицы> — уникальное в пределах потока данных имя элемента потока. Должно соответствовать имени одной из таблиц интерфейса, возможно, с префиксом, состоящим из имени логической таблицы и точки.
этой таблы , но да, можешь добавить свое поле в table FRtbl_Bookings в датастриме. Временная FRtbl_Bookings фактически заполнена внутренними алгоритмами Bookings и делать insert current FRtbl_Bookings не имеет смысла никакого в коде твоего наследника. Ты дозаявил поле e_MnPlanName, осталось только его как то связать с существующей записью(ями) FRtbl_Bookings.
Кстати, в FRtbl_Bookings есть поле _IndNrec , в котором хранится Indent.Nrec. Цель же , насколько я понимаю, довывести данные о записи плана к конкертной заявке.
Re: Отчеты в FastReport
Да, помимо записей плана мне нужно было собрать список поставщиков из заявки и все исходящие ДО снабжения. Я не стал мучиться,Den писал(а):edd, элемент datastream table
Т.е. в родительском стандартном функционале заявок заявлен table FRtbl_Bookings на основе временной таблицы FRtbl_Bookings, и ты не можешь изменить задекларированную структуру<имя-таблицы> — уникальное в пределах потока данных имя элемента потока. Должно соответствовать имени одной из таблиц интерфейса, возможно, с префиксом, состоящим из имени логической таблицы и точки.
этой таблы , но да, можешь добавить свое поле в table FRtbl_Bookings в датастриме. Временная FRtbl_Bookings фактически заполнена внутренними алгоритмами Bookings и делать insert current FRtbl_Bookings не имеет смысла никакого в коде твоего наследника. Ты дозаявил поле e_MnPlanName, осталось только его как то связать с существующей записью(ями) FRtbl_Bookings.
Кстати, в FRtbl_Bookings есть поле _IndNrec , в котором хранится Indent.Nrec. Цель же , насколько я понимаю, довывести данные о записи плана к конкертной заявке.
часть элементов потока связал с переменными, часть с логической таблой
Код: Выделить всё
table inherited::FRtbl_Bookings
(
[e_MnPlanName] mnplan.name;
[e_katnazna] katnazna.name;
[e_DoS_No_d] sbasedoc_nodoc;
[e_allPost] sAllpost;
);
Код: Выделить всё
NewRef:= FRtbl_Bookings._IndNrec
Код: Выделить всё
if getfirst Indent where ((NewRef == Indent.Nrec)) = tsOk
{ sbasedoc_nodoc:=_DO_SnbNmDt(indent.nrec, 0h, 0, 0);
} else sbasedoc_nodoc:=''
If getfirst claim1 where((NewRef == claim1.cindent)) =tsOK and getfirst katorg where ((claim1.CVALKAU[1] == katorg.nrec)) = tsOk
{sAllPost=''
sAllPost:= _Kontragents
}else sAllPost:=''
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Отчеты в FastReport
Если вам все таки понадобится таблица, то добавляете свою и связываете ее с каким нибудь уникальным полем(ми) в родителе.
Ну а дальше вы уже знаете
Ну а дальше вы уже знаете
Re: Отчеты в FastReport
Как связать свою таблицу с уникальным полем родителя?edward_K писал(а):Если вам все таки понадобится таблица, то добавляете свою и связываете ее с каким нибудь уникальным полем(ми) в родителе.
Родитель это
Код: Выделить всё
DataStream
(
родитель table
(
моя table
)
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Отчеты в FastReport
edward_K , наверное имел ввиду в свою таблицу собрать все что нужно и просто указать связь на нее в create view. Хотя, особой разницы не вижу.
Как то так, на примере :
Как то так, на примере :
Код: Выделить всё
Alter interface Bookings;
Overload
DataStream FRBookings;
end;
table struct tempdata
(
cind : comp ,
s1 : string
)
with index
(
in1=cind
);
Create View Bookings_v
as select
if(isvalidall(tntempdata),tempdata.s1,'') (fieldname=ss1)
from
tempdata
,Indent IndFr
where
((
FRtbl_Bookings._IndNrec == tempdata.cind
))
;
DataStream FRBookings
(
table inherited::FRtbl_Bookings
(
[e_MnPlanName] ss1;
);
)
Handleevent
cmPreProcess : {
Var i : Word;
Var NewRef : Comp;
if( GetMarkerCount(Markers) = 0 )
{
InsertMarker(Markers, Indent.NRec);
}
mtClear(#tempdata,fmNormal);
for (i:= 0; i < GetMarkerCount(Markers); i++)
{
if (Not GetMarker(Markers, i, NewRef))
Continue;
if getfirst IndFr where (( NewRef== IndFr.nrec))=tsok
if getfirst tempdata where (( NewRef == tempdata.cind))<>tsok
{
insert tempdata set tempdata.cind:=NewRef , tempdata.s1:='Это помеченная заявка №'+string(i+1)+' маркера . '+DateTostr(IndFr.atl_lastdate,'DD.MM.YYYY');
}
}
}
end;
end;
end.