Topic: Сортировка в отчет

Дмитрий возник такой вопрос. Имеется ли возможность передачи результатов сортировки в гриде в отчет?
Например результаты поиска в грид выводятся SQL запросом, с некоторым порядком сортировки, но в результате я желаю передать в отчет иную последовательность (отсортировано вручную по заголовку в гриде). Если использовать компонент "Передать в таблицу Excel", результаты ручной сортировки сохраняются, хотелось бы такое и для отчета. Или можно сделать только через некоторое количество вариантов отчета с нужной сортировкой?

2 (edited by m.prokhachev 2018-09-03 09:43:15)

Re: Сортировка в отчет

на событие OnAfterSort в гриде повесить код типа

Sorted := 'ORDER BY <колонка таблицы - поле в БД>';

а в отчет выбирать SQL-запросом, в который будете добавлять эту строковую переменную Sorted, что-то типа

SQLQuery('SELECT * FROM ... WHERE ...' + Sorted, Result);

Если исходить из примера в хэлпе, то принимая во внимание

procedure Form1_TableGrid1_OnAfterSort (Sender: string; ACol: Integer);
begin
   ShowMessage('Пользователь сделал сортировку по колонке №' + IntToStr(ACol));
end;

надо еще четко знать какой номер колонки за какое поле в тбалице БД отвечает, а номер отсортированной колонки передается в ACol.

Re: Сортировка в отчет

Нда, пока понял лишь на половину, но все равно спасибо за ответ. Буду разбираться. По идее можно наверное и через компонент на форме в виде например комбобокса с выбором колонок сделать?

Re: Сортировка в отчет

Для кнопки с действием "Отчет (SQL)" поместите такой же SQL запрос, но без указания сортировки, который используется при поиске.


Затем для данной кнопки создайте событие OnClick и OnAfterClick

procedure Form1_bReportSQL_OnClick (Sender: TObject; var Cancel: boolean);
var
    sOrder: string;
begin
    Form1.bReportSQL.TagString := Form1.bReportSQL.dbSQL;

    // сортировка по умолчанию
    sOrder := 'ORDER BY person.firstname';

    if Form1.GridSearch.SortedColumn.Index = 0 then  sOrder := 'ORDER BY person.firstname';
    if Form1.GridSearch.SortedColumn.Index = 1 then  sOrder := 'ORDER BY person.lastname';
    if Form1.GridSearch.SortedColumn.Index = 2 then  sOrder := 'ORDER BY groups.groupname';

    if Form1.GridSearch.SortedColumn.SortKind = skAscending then sOrder := sOrder + ' ASC' else sOrder := sOrder + ' DESC';

    Form1.bReportSQL.dbSQL := Form1.bReportSQL.dbSQL + ' ' + sOrder;
end;

procedure Form1_bReportSQL_OnAfterClick (Sender: TObject);
begin
    Form1.bReportSQL.dbSQL := Form1.bReportSQL.TagString;
end;

Таким образом сортировка для данной кнопки задается скриптом

Dmitry.

Re: Сортировка в отчет

Спасибо теперь разжевано и понятно. :-)

Re: Сортировка в отчет

Подскажите, отчёт сделал по видео инструкции на кнопку Отчёт (SQL), запрос простой, передаю содержимое нескольких полей из базы SQLite. В отчёте в каждом поле перед содержимым появляется символ апостроф ('). Как это поправить? При этом если вывести данные из базы в Grid, всё нормально без лишних символов.

Re: Сортировка в отчет

newusr wrote:

Подскажите, отчёт сделал по видео инструкции на кнопку Отчёт (SQL), запрос простой, передаю содержимое нескольких полей из базы SQLite. В отчёте в каждом поле перед содержимым появляется символ апостроф ('). Как это поправить? При этом если вывести данные из базы в Grid, всё нормально без лишних символов.

Пожалуйста создайте новую тему с вашим вопросом, также приложите ваш проект.

Dmitry.

8 (edited by metatron 2018-11-12 12:55:54)

Re: Сортировка в отчет

У данного метода есть беда. Если нажать на кнопку и не выбрана запись в таблице то просит выбрать запись, а после выбора выдаёт ошибку. Приложу в картинке. Насколько я понял проблема в задвоении последней строки. И ещё, Как можно при данном случае печатать только выбранные строки?

Post's attachments

Attachment icon Снимок.PNG 27.68 kb, 200 downloads since 2018-11-12 

Re: Сортировка в отчет

metatron wrote:

У данного метода есть беда. Если нажать на кнопку и не выбрана запись в таблице то просит выбрать запись, а после выбора выдаёт ошибку. Приложу в картинке. Насколько я понял проблема в задвоении последней строки. И ещё, Как можно при данном случае печатать только выбранные строки?

Приложите пожалуйста ваш проект, т.к. не ясно, почему что то просит выбрать запись.


При использовании SQL запроса, печать выбранных строк можно реализовать только скриптом, пример
http://myvisualdatabase.com/forum/viewtopic.php?id=1367

Dmitry.

Re: Сортировка в отчет

DriveSoft wrote:

Приложите пожалуйста ваш проект, т.к. не ясно, почему что то просит выбрать запись.

   К сожалению работодатель ввёл запрет на выкладку даже для помощи. На форме есть универсальный поиск через sql запрос, он и формирует вывод данных в TableGrid, от проблемы я избавился добавив в скрипт на событие OnShow строку "TableGrid1.SelectedRow :=0"
   Есть другой нюанс. При первичном формировании TableGrid (в моём случае разумеется) сортировка указанна в sql запросе и имеет итоговый вид в  TableGrid :а,б,в,г,д,a,b,c,d (жирным выделил латиницу)
Но стоит отсортировать по клику в хедере, сортировка становится:a,b,c,d,а,б,в,г,д  а при обратном варианте сортировки д,г,в,б,а,d,c,b,a.
  У конечного пользователя после сортировки через хедер едет крыша, особенно учитывая тот факт что при распечатке результат отличается от результат на экране smile

Re: Сортировка в отчет

Действительно, получается не очень хорошо, написал данный вопрос автору компонента, жду ответа.

Dmitry.