Re: Отчеты в FastReport
Добавлено: 06 июл 2012, 19:56
Обсуждение различных вопросов, связанных с сопровождением, администрированием и программированием
https://asu.tyumbit.ru/
Пробовала я что-то сделать. Получился вот такой интерфейсedward_K писал(а):А зачем вам лицензия не консоль управления?
Вообще там сейчас какая тулсятина вышла в патчах для просмотра и редактирования форм смотрите FREASYEDIT_EXE_81020.txt.
А без нее включаете Forms - Fcnev=On и где можно в списке отчетов редактируете и сохраняете под своим именем(я бы советовал кроме ресурса еще и в файл сохранить - потом можно frres компилить). Ну там будет сложнее, чем в компиляторе форм наверное
- надо правильно создать разделы данных - зато рисовать удобней. Доступные таблицы из фастрепорта посмотрите.
Код: Выделить всё
#component "L_SF"
alter interface JOURNGETSETSF;
create view lbs_1 as select *
from synonym schfact schfact_1, basedoc, katnazna
where ((
comp(FRGETSCHFACT.nrec) == schfact_1.nrec
and schfact_1.cbasedoc == basedoc.nrec
and basedoc.cnazna == katnazna.nrec));
overload
DataStream DTS;
end;
DataStream DTS
(
Table inherited::FRSETSCHFACT
(
[SetNaz] lbs_1.katnazna.name;
);
)
end; // DataStream
end.
Извините, не было доступа к сети некоторое время В КУ мне, кроме управления репозитарием, ничего не доступно (лицензии нет).edward_K писал(а):если ваше логическая таблица не совпадает с главной(это можно в консоли управления глянуть), то вам нужно по ней позиционироваться принудительно. Да и вообще лучше всегда позиционироваться. Не очень хорошо в уcловиях юзать таблу c другого view
Заодно сможете отконтролировать - а есть ли что в текущий момент.
DataStream
(..
table table_main
( ...
);
table table_sp
( ...
);
)
HandleEvent table table_main
cmOnProcess:
{ ....
}
end;
HandleEvent table table_sp
cmOnProcess:
{ ....
}
end;
end;//DataStream
Код: Выделить всё
#component "L_SF"
alter interface JOURNGETSETSF;
create view lbs_1 as select *
from synonym schfact schfact_1, basedoc, katnazna
where ((
comp(FRGETSCHFACT.nrec) == schfact_1.nrec
and schfact_1.cbasedoc == basedoc.nrec
and basedoc.cnazna == katnazna.nrec));
overload
DataStream DTS;
end;
DataStream DTS
(
Table inherited::FRSETSCHFACT
(
[SetNaz] lbs_1.katnazna.name;
);
)
Handleevent table FRSETSCHFACT
cmOnProcess: {
if lbs_1.getfirst basedoc = tsOK then {}
}
end;
end; // DataStream
end.
Код: Выделить всё
#component 'L_SF'
alter interface JOURNGETSETSF;
var crec: comp;
create view lbs_1 as select *
from synonym schfact schfact_1,
synonym basedoc basedoc_1,
synonym katnazna katnazna_1
where ((
crec == schfact_1.nrec
and schfact_1.cbasedoc == basedoc_1.nrec
and basedoc_1.cnazna == katnazna_1.nrec))
;
overload
DataStream DTS;
end;
DataStream DTS
(
Table inherited::FRSETSCHFACT
(
[SetNaz] lbs_1.katnazna_1.name;
);
Table inherited::FRGETSCHFACT
(
[GetNaz] lbs_1.katnazna_1.name;
);
)
Handleevent table FRSETSCHFACT
cmOnProcess: {
crec:=FRSETSCHFACT.cschf;
if lbs_1.getfirst schfact_1 = tsOK then
if lbs_1.getfirst basedoc_1 = tsOK then
if lbs_1.getfirst katnazna_1 = tsOK then {}
}
end;
Handleevent table FRGETSCHFACT
cmOnProcess: {
crec:=FRGETSCHFACT.cschf;
if lbs_1.getfirst schfact_1 = tsOK then
if lbs_1.getfirst basedoc_1 = tsOK then
if lbs_1.getfirst katnazna_1 = tsOK then {}
}
end;
end; // DataStream
end.
ОтличноSheinina писал(а):Удалось мне все победить.
Проще сделать фильтрацию в самом отчете. Для этого у объекта отчета MasterData1 : TfrxMasterData в инспекторе свойств задайте событие OnBeforePrint (двойным кликом). На вкладке "Код" задайте обработчик этого события примерно так:Sheinina писал(а): И вроде все замечательно, появились в FR-отчете новые колонки с данными. Но теперь отчет надо научиться фильтровать по значениям этих колонок (сами-то значения нужны именно для фильтрации). Excel-фильтр (после экспорта) работает криво, да и бухгалтерию лишний раз напрягать не хочется. Вариантов два:
- либо придумать что-то вроде фильтрации в самом отчете (в FCom я обычно для этого добавляла интерфейс выбора значения фильтра и гасила вывод ненужных данных)
- либо лезть дальше в сам галактический интерфейс, на событие, генерируемое кнопкой "Продолжить" вешать интерфейс выбора значения фильтра и каким-то образом гасить вывод в DataStream информации, не отвечающей заданным условиям.
Оба пути для меня - тайна за семью печатями, очень нужна помощь!!!
Код: Выделить всё
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
if <Table."Field"> = 'текст' then // здесь программируете нужное вам условие фильтрации
MasterData1.Visible := false
else
MasterData1.Visible := true;
end;
Код: Выделить всё
begin
// прятать лишние кнопки
Report.PreviewOptions.AllowEdit := false;
Report.PreviewOptions.Buttons := 1 + 16 + 32 + 64 + 128 + 1024 + 4096 + 8192 + 16384;
// масштаб просмотра
Report.PreviewOptions.Zoom := 1.50;
end.