Коллеги, добрый день!

Очень актуально для многих Клиентов - зафиксировать наименование столбцов в Списочном представлении реестра записей в разделах.

Сейчас при прокручивании реестра записей, наименования столбцов скрываются. 

Огромная просьба, внести корректировки в систему.

3 комментария

Разработчики системы говорят, что примерно в версии 7.15.2 запланировано добавление такой возможности.

Зверев Александр,

это будет замечательно,если они это реализуют в версии 7.15.2. Уж очень ждем. :)

Максимова Екатерина,

Здравствуйте. Данный функционал уже реализован и будет доступен после обновления на версию 7.15.2

Показать все комментарии

Добрый день!
Скажите пожалуйста, можно ли каким-то образом задать фильтры на отображаемые в отчете поля (столбцы)?
Запрос возвращает все поля, а мне нужно дать возможность отображать только отмеченные на форме фильтров отчета.
Спасибо!

Нравится

12 комментариев

Подобный функционал придётся прописывать в коде сервиса FastReport, регулируя вручную расположение колонок, их видимость и размер.

Например, создаём окно фильтрации, в котором галочками будут отмечаться колонки для отображения. В обработчике события OnPrepare отчёта считываем эти значения и записываем их в атрибуты отчёта. Дальше допустим, что у нас есть MasterData с полями Memo1, Memo2, Memo3. Тогда создаём обработчик события OnBeforePrint для MasterData, в котором проверяем: если атрибут, соответствующий полю Memo1, равен false, выполняем:

Memo1.Visible := false;
Memo2.Left := Memo1.Left;
Memo2.Width := ...;
Memo3.Left := Memo2.Left + Memo2.Width;
Memo3.Width := ...;

Аналогично поступаем и для остальных случаев. Важно учесть все возможные варианты отображения.

Вариант попроще: если есть несколько (два, три) самых распространённых вариантов отображения полей, можно создать в отчёте три страницы, которые будут отличаться только набором полей. Дальше в окне фильтрации предлагать выбрать один из вариантов отображения, а в обработчике события OnStartReport объекта Report определять вариант отображения, и в зависимости от него делать видимой ту или иную страницу:

if (<Attribute2> = true) then
begin
  Page1.Visible := false;
  Page2.Visible := true;
  Page3.Visible := false;
end
else
...

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Олег, спасибо за помощь!

Подскажите пожалуйста как реализовать вот это:

"Лабьяк Олег Игоревич" написал:В обработчике события OnPrepare отчёта считываем эти значения и записываем их в атрибуты отчёта.

?

Скажите пожалуйста, есть ли в отчетах механизм сортировки по определенному столбцу?

Можно даже не использовать скрипт отчёта, а установить атрибуты напрямую из окна фильтрации. Например, так:

В обработчике btnOKOnClick Вашего окна фильтрации получаем отчёт и устанавливаем ему атрибуты:

function btnOKOnClick(Control) {
    var Report = Self.Attributes('ReportPreviewer').Report;
    Report.Attributes('AttributeName1') = edtControl1.Value;
    Report.Attributes('AttributeName2') = edtControl2.Value;
    ...
    SendNotify(Self, MSG_OK);
}

После этого в коде отчёта Вы сможете обращаться к этим атрибутам так:

if (<AttributeName1> = 1) then ...

"McCoy" написал:Скажите пожалуйста, есть ли в отчетах механизм сортировки по определенному столбцу?

По определённому столбцу можно отсортировать запрос отчёта - непосредственно в сервисе запроса установить тип и порядковый номер сортировки. Другой вариант - установить сортировку по полю датасета в скрипте перед формированием отчёта:

var Dataset = ReportPreviewer.DatasetByUSI('ds_ReportDataset');
Dataset.DataFields('FieldName').OrderType = otAsc;
Dataset.DataFields('FieldName').OrderPosition = 1;

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Большое спасибо!

А как бы оптимизировать данную ситуацию...
К примеру у нас через фастрепорт формируются заявки-анкеты двух типов для физ лиц и для юр.лиц.
В первом случае анкеты выводятся с данными физического лица - серия и номер паспорта
Во втором случае анкеты выводятся данные юр.лица - едрпоу, р/с, мфо и т.д.

Как выводить в отчет только те поля которые заполнены...
Например если заполнены поля паспорт - выводить отчёт с данными для физ лиц, а если заполнен ЄДРПОУ то выводить отчёт с данными для юр лиц.

Александр, попробуйте в коде отчета на OnBeforePrint прописать проверку примерно следующего вида:

if <Table1."Field1"> = Null then...

Пример:

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
  if (<TSDataset1."SignedQuantity"> = Null) then
       MasterData1.Visible := false
  else
       MasterData1.Visible := true;                                                                         
end;

По аналогии можете скрывать или делать видимыми компоненты отчета (скрывать страницы или печатать выбранные).

Page1.Visible := true;
Page2.Visible := true;
Page3.Visible := false;

Спасибо Татьяна,
но не правильно отрабатывает проверка логики:

(<ds_ReportContractCard."EDRPOU"> = Null)

даже если поле пустое, всё равно срабатывает

MasterData1.Visible := true;

По-моему на Null в скрипте к отчету сравнивать не получится, попробуйте сравнить с пустой строкой:

(<ds_ReportContractCard."EDRPOU"> = '')

Пробовал и одинарные и двойные скобки.
Ругается на синтаксис, просит ")"

Александр, вот так работает:

if <ds_ReportOfferingsInInvoice."Offering"> = '' then

Возможно, проблема с "()" в которые заключено выражение.

Татьяна,
действительно так работает.
Просто насколько мне известно в ObjectPascal не обязательно указывать скобки в случае когда есть всего одно условие, в отличии от JScript.
Но даже если и указать, то отладчик в самом ObjectPascal не ругается,
а вот в FastReport ему почему то не нравятся "()"
Спасибо за помощь...

Показать все комментарии