Страница 8 из 8
Re: Отчеты в FastReport
Добавлено: 23 мар 2017, 17:14
rmozgov
Обновилась библиотека генератора отчетов FastReport версия 9.1.22.
Обновление содержит обновленную справку.
Что нового?
✔ Для объекта TfrxPictureView реализована поддержка растрового формата графических изображений — GIF.
✔ Реализована возможность загрузки OLE-объекта из файла, для этого из скрипта необходимо вызвать процедуру LoadFromFile компонента TfrxOLEView.
✔ В класс TfrxDataSet добавлена функция ValueAsMemoryStream для получения значения в объект TMemoryStream.
✔ Доработан обработчик ошибок получения и вычисления данных, возникающих при построении отчета. При ошибочном вычислении значения в объекте Текст — красный фон принимает только та ячейка, в которой возникли ошибки формирования данных.
Обновление доступно по ссылке на FTP:
FREPORT3_DLL_91220.acd - ACD файл.
Re: Отчеты в FastReport
Добавлено: 16 июн 2017, 17:19
rmozgov
Обновилась библиотека генератора отчетов 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 файл.
Re: Отчеты в FastReport
Добавлено: 24 апр 2019, 10:13
edd
почему при компиляции ругается на Нет такой функции, поля или метода : 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;
}
}
}
Re: Отчеты в FastReport
Добавлено: 24 апр 2019, 11:25
edward_K
Ну видимо потому, что у вас FRtbl_Bookings не DataSet и ему ContinueDataSet не нужен.
Вот так примерно делать с 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
Добавлено: 24 апр 2019, 15:45
edd
edward_K писал(а):Ну видимо потому, что у вас FRtbl_Bookings не DataSet и ему ContinueDataSet не нужен.
Спасибо за ответ, edward_K, я ещё плаваю в FR.
Другой вопрос, почему я не могу использовать свои поля для вставки, которые я добавил в 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
}
то галактика говорит что нет такого поля в FRtbl_Bookings
Re: Отчеты в FastReport
Добавлено: 24 апр 2019, 16:16
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. Цель же , насколько я понимаю, довывести данные о записи плана к конкертной заявке.
Re: Отчеты в FastReport
Добавлено: 24 апр 2019, 17:35
edd
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;
);
передал переменной нрек заявки,
спозиционировался на логической табле и собрал данные о записях ДО снабжения и поставщиков через функции
Код: Выделить всё
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:=''
Re: Отчеты в FastReport
Добавлено: 24 апр 2019, 20:35
edward_K
Если вам все таки понадобится таблица, то добавляете свою и связываете ее с каким нибудь уникальным полем(ми) в родителе.
Ну а дальше вы уже знаете
Re: Отчеты в FastReport
Добавлено: 25 апр 2019, 08:06
edd
edward_K писал(а):Если вам все таки понадобится таблица, то добавляете свою и связываете ее с каким нибудь уникальным полем(ми) в родителе.
Как связать свою таблицу с уникальным полем родителя?
Родитель это
?
Re: Отчеты в FastReport
Добавлено: 25 апр 2019, 12:33
Den
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.