Отчеты в FastReport

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

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

Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Отчеты в FastReport

Сообщение Sheinina »

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.

В FR-отчете появилось новое поле, но в колонку, которую под него сотворили, ничего не выводится :(
При этом гарантировано, что каждая выставленная с/ф связана с ДО и у каждого ДО ссылка на KatNazna не пустая.
Помогите, пожалуйста!!!
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

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

Re: Отчеты в FastReport

Сообщение 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
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Отчеты в FastReport

Сообщение Sheinina »

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
Извините, не было доступа к сети некоторое время :) В КУ мне, кроме управления репозитарием, ничего не доступно (лицензии нет).
Скажите, а я не должна в Handleevent писать волшебное слово inherited? и если должна, то где? Сейчас у меня написалось так:

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

#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.
И опять ничего не получается. Нутром чую, что-то не то пишу...
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Отчеты в FastReport

Сообщение Sheinina »

Удалось мне все победить. в итоге получился вот такой код:

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

#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.
И вроде все замечательно, появились в FR-отчете новые колонки с данными. Но теперь отчет надо научиться фильтровать по значениям этих колонок (сами-то значения нужны именно для фильтрации). Excel-фильтр (после экспорта) работает криво, да и бухгалтерию лишний раз напрягать не хочется. Вариантов два:
- либо придумать что-то вроде фильтрации в самом отчете (в FCom я обычно для этого добавляла интерфейс выбора значения фильтра и гасила вывод ненужных данных)
- либо лезть дальше в сам галактический интерфейс, на событие, генерируемое кнопкой "Продолжить" вешать интерфейс выбора значения фильтра и каким-то образом гасить вывод в DataStream информации, не отвечающей заданным условиям.
Оба пути для меня - тайна за семью печатями, очень нужна помощь!!!
LaaLaa

Re: Отчеты в FastReport

Сообщение LaaLaa »

Sheinina писал(а):Удалось мне все победить.
Отлично :)
Sheinina писал(а): И вроде все замечательно, появились в FR-отчете новые колонки с данными. Но теперь отчет надо научиться фильтровать по значениям этих колонок (сами-то значения нужны именно для фильтрации). Excel-фильтр (после экспорта) работает криво, да и бухгалтерию лишний раз напрягать не хочется. Вариантов два:
- либо придумать что-то вроде фильтрации в самом отчете (в FCom я обычно для этого добавляла интерфейс выбора значения фильтра и гасила вывод ненужных данных)
- либо лезть дальше в сам галактический интерфейс, на событие, генерируемое кнопкой "Продолжить" вешать интерфейс выбора значения фильтра и каким-то образом гасить вывод в DataStream информации, не отвечающей заданным условиям.
Оба пути для меня - тайна за семью печатями, очень нужна помощь!!!
Проще сделать фильтрацию в самом отчете. Для этого у объекта отчета MasterData1 : TfrxMasterData в инспекторе свойств задайте событие OnBeforePrint (двойным кликом). На вкладке "Код" задайте обработчик этого события примерно так:

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

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
  if <Table."Field"> = 'текст' then // здесь программируете нужное вам условие фильтрации
     MasterData1.Visible := false        
  else
     MasterData1.Visible := true;                 
end;
Лишние строки бэнда MasterData1 будут спрятаны.
LaaLaa

Re: Отчеты в FastReport

Сообщение LaaLaa »

Всем изучающим FastReport рекомендую не полениться и прочитать документацию по FR там хорошо описаны основные принципы.
Справка вызывается из меню в дизайенере отчета или по клавише F1.
Этот же документ есть на нашем FTP ftp://ftp.galaktika.ru/pub/support/gala ... FRUser.pdf
И на сайте производителя http://www.fast-report.com/pbc_download ... ual-ru.pdf
LaaLaa

Re: Отчеты в FastReport

Сообщение LaaLaa »

Массу материалов и примеров по FastReport для Галактики найдете на моей страничке http://code.google.com/p/laalaa/downloads/list
LaaLaa

Re: Отчеты в FastReport

Сообщение LaaLaa »

Кроме того на сервисе YouTube компания Fast Reports опубликовала массу обучающих видео роликов: https://www.youtube.com/user/FastReportsInc
Рекомендую посмотреть на досуге.
Sheinina
Местный житель
Сообщения: 366
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Отчеты в FastReport

Сообщение Sheinina »

Спасибо огромное! И за подсказку, и за информацию, где чего почитать!
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

я бы ссылки эти в опыт в ветку про FR залепил... а то иногда ищешь что-нибудь и блин поиском не находится :) или не так ищу.
а вообще чем больше отчетов на FR делаю, тем понимаю что всё проще и проще получается делать.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Отчеты в FastReport

Сообщение Алексей »

сделал отчетик, ввиду того что он очень большой на А4 в альбоме, там всё очень мелко.
Как сделать чтобы при формировании он автоматом ставил размер 150% ? сохраняю шаблон в таком виде, формирую - 100%
LaaLaa

Re: Отчеты в FastReport

Сообщение LaaLaa »

Вы можете управлять окном просмотра из скрипта отчета. Через поля Report.PreviewOptions. Добавьте например в блок begin end. следующий фрагмент кода:

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

begin
   // прятать лишние кнопки
   Report.PreviewOptions.AllowEdit := false;
   Report.PreviewOptions.Buttons := 1 + 16 + 32 + 64 + 128 + 1024 + 4096 + 8192 + 16384;

   // масштаб просмотра
   Report.PreviewOptions.Zoom := 1.50;                        
end.
Friendlyman
Постоянный гость
Сообщения: 74
Зарегистрирован: 23 июн 2007, 23:07
Откуда: ТопСофт, Минск

Re: Отчеты в FastReport

Сообщение Friendlyman »

В документации по процедуре RunFReportByGroup следующее

Назначение
Процедура RunFReportByGroup работает аналогично вызову RunFReport с пустым вторым параметр и третьим false:
RunFReport(dstream, '', false);
Однако вместо общего списка форм отображаются только те формы, для которых назначен один из идентификаторов из списка GroupList. Группы, к которым относится отчет, назначаются при проектировании формы в дизайнере FastReport.

Описание
procedure RunFReportByGroup (dstream : longInt; groupList : string);

Параметры
dstream - имя потока данных. Идентификатор, должен соответствовать имени одного из потоков данных, объявленных в интерфейсе.
groupList - список групп для фильтра через запятую.

Пример
RunFReportByGroup(MyStream, 'aaa');
RunFReportByGroup(MyStream, 'aaa,bbb');
RunFReportByGroup(MyStream, 'Русская группа');


Рассказал бы еще кто-нибудь как эти группы назначаются при проектировании формы в дизайнере FastReport.
Ответить