Topic: Графическое процентное отображение

Добрый день, возможно ли осуществить графическое отображение, в зависимости от заполнения - как на картинке (взято из что реализовать в первую очередь). Либо какой нибудь похожий вариант.

Также вопрос относительно сохранения отчетов: при нажатии кнопки создать отчет - он открывается в формате RTF (в моем случае).
И у Вас был пример, где какой то конкретный пользователь мог видеть только свои записи и администратор видел все. Можно ли сделать так, чтобы название отчета(файла) состояло из переменных User (под которым человек авторизировался) + Дата создания этого отчета (поле есть в таблице БД), например Иванов.И.В 14.01.2015.
Можно ли сразу задать конкретный путь куда будет сохранен этот файл? (отличается для каждого пользователя)

Post's attachments

Attachment icon 44974839.jpg 43.62 kb, 273 downloads since 2016-01-11 

Re: Графическое процентное отображение

Дмитрий, подскажите еще по такому вопросу.

С помощью этого скрипта добавляю две таблицы в отчет:

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
    frxDBDataset1, frxDBDataset2: TfrxDBDataset;
    Results1, Results2: TDataSet;
begin
    // Data for first dataset
    SQLQuery('SELECT * FROM employees,users', Results1);

    // Data for second dataset
    SQLQuery('SELECT * FROM employees,users', Results2);



    // create first DataSet
    frxDBDataset1 := TfrxDBDataset.Create(Form1);
    frxDBDataset1.UserName := 'Report1';
    frxDBDataset1.CloseDataSource := True;
    frxDBDataset1.OpenDataSource := True;
    frxDBDataset1.DataSet := Results1;

    // create second DataSet
    frxDBDataset2 := TfrxDBDataset.Create(Form1);
    frxDBDataset2.UserName := 'Report2';
    frxDBDataset2.CloseDataSource := True;
    frxDBDataset2.OpenDataSource := True;
    frxDBDataset2.DataSet := Results2;

    // set up report
    Form1.frxReport.Clear;
    Form1.frxReport.DataSets.Clear;
    Form1.frxReport.DataSets.Add(frxDBDataset1);
    Form1.frxReport.DataSets.Add(frxDBDataset2);


    // DESIGN MODE
    Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\print.fr3');
    Form1.frxReport.DesignReport;


    // PREVIEW MODE
    //frxDBDataset1.DataSet.Close;
    //frxDBDataset2.DataSet.Close;
    //Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\print.fr3');
    //Form1.frxReport.ShowReport;



    frxDBDataset1.Free;
    frxDBDataset2.Free;
end;

Пока делаю это на Вашем примере (в приложении, файл отчета print.fr3), описанным выше. Эти две таблицы будут потом отличаться запросом в скрипте (к примеру условие в 1-ой таблице А>100 и во 2-ой таблице А<100) .В самой программе каждый пользователь видит только свои записи и админ видит все записи. Когда же я перекидываю таблицу в отчет - там отображаются все записи, всех пользователей, независимо от того под каким пользователем я авторизовался. По сути в отчете должны отображаться только те записи, которые на данный момент отображаются в таблице самой программы,т.е зависеть от пользователя который зашел.

Post's attachments

Attachment icon Login with visible own records and admin_1.rar 330.23 kb, 432 downloads since 2016-01-12 

Re: Графическое процентное отображение

memult wrote:

Добрый день, возможно ли осуществить графическое отображение, в зависимости от заполнения - как на картинке (взято из что реализовать в первую очередь). Либо какой нибудь похожий вариант.

К сожалению в текущей версии нет возможности вставить ProgressBar в грид, но графическое изображение можно
http://myvisualdatabase.com/forum/viewtopic.php?id=1707
в зависимости от значения в ячейке, можете вставлять различные изображения, т.о. иммитируя прогресс.



memult wrote:

Также вопрос относительно сохранения отчетов: при нажатии кнопки создать отчет - он открывается в формате RTF (в моем случае).
И у Вас был пример, где какой то конкретный пользователь мог видеть только свои записи и администратор видел все. Можно ли сделать так, чтобы название отчета(файла) состояло из переменных User (под которым человек авторизировался) + Дата создания этого отчета (поле есть в таблице БД), например Иванов.И.В 14.01.2015.
Можно ли сразу задать конкретный путь куда будет сохранен этот файл? (отличается для каждого пользователя)

Можно, но у меня нет готового примера, что именно у вас не получается?

Dmitry.

Re: Графическое процентное отображение

DriveSoft wrote:
memult wrote:

Добрый день, возможно ли осуществить графическое отображение, в зависимости от заполнения - как на картинке (взято из что реализовать в первую очередь). Либо какой нибудь похожий вариант.

К сожалению в текущей версии нет возможности вставить ProgressBar в грид, но графическое изображение можно
http://myvisualdatabase.com/forum/viewtopic.php?id=1707
в зависимости от значения в ячейке, можете вставлять различные изображения, т.о. иммитируя прогресс.



memult wrote:

Также вопрос относительно сохранения отчетов: при нажатии кнопки создать отчет - он открывается в формате RTF (в моем случае).
И у Вас был пример, где какой то конкретный пользователь мог видеть только свои записи и администратор видел все. Можно ли сделать так, чтобы название отчета(файла) состояло из переменных User (под которым человек авторизировался) + Дата создания этого отчета (поле есть в таблице БД), например Иванов.И.В 14.01.2015.
Можно ли сразу задать конкретный путь куда будет сохранен этот файл? (отличается для каждого пользователя)

Можно, но у меня нет готового примера, что именно у вас не получается?

Про прогрессбар все понятно,спасибо. По поводу имени файла отчета и пути сохранения файла -у меня нет мыслей как это можно сделать,можно ли Вас попросить реализовать что - то похожее на примере,прикрепленном выше? Т.к пример может быть полезен не только мне. А что по поводу вопроса во втором посте?

Re: Графическое процентное отображение

Про прогрессбар все понятно,спасибо. По поводу имени файла отчета и пути сохранения файла -у меня нет мыслей как это можно сделать,можно ли Вас попросить реализовать что - то похожее на примере,прикрепленном выше? Т.к пример может быть полезен не только мне.

Я могу помочь только с конкретным вопросом.



А что по поводу вопроса во втором посте?

попробуйте данный скрипт

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
var
    frxDBDataset1, frxDBDataset2: TfrxDBDataset;
    Results1, Results2: TDataSet;
    sql: string;
begin
    // Data for first dataset
    if isAdmin then
            sql := 'SELECT employees.firstname, employees.lastname, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users'
        else
            sql := 'SELECT employees.firstname, employees.lastname, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users WHERE ' + 'id_users='+IntToStr(idUser);
    SQLQuery(sql, Results1);


    // Data for second dataset
    if isAdmin then
            sql := 'SELECT employees.firstname, employees.lastname, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users'
        else
            sql := 'SELECT employees.firstname, employees.lastname, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users WHERE ' + 'id_users='+IntToStr(idUser);
    SQLQuery(sql, Results2);


    // create first DataSet
    frxDBDataset1 := TfrxDBDataset.Create(Form1);
    frxDBDataset1.UserName := 'Report1';
    frxDBDataset1.CloseDataSource := True;
    frxDBDataset1.OpenDataSource := True;
    frxDBDataset1.DataSet := Results1;

    // create second DataSet
    frxDBDataset2 := TfrxDBDataset.Create(Form1);
    frxDBDataset2.UserName := 'Report2';
    frxDBDataset2.CloseDataSource := True;
    frxDBDataset2.OpenDataSource := True;
    frxDBDataset2.DataSet := Results2;

    // set up report
    Form1.frxReport.Clear;
    Form1.frxReport.DataSets.Clear;
    Form1.frxReport.DataSets.Add(frxDBDataset1);
    Form1.frxReport.DataSets.Add(frxDBDataset2);


    // DESIGN MODE
    Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\print.fr3');
    Form1.frxReport.DesignReport;


    // PREVIEW MODE
    //frxDBDataset1.DataSet.Close;
    //frxDBDataset2.DataSet.Close;
    //Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\print.fr3');
    //Form1.frxReport.ShowReport;



    frxDBDataset1.Free;
    frxDBDataset2.Free;
end;
Dmitry.

Re: Графическое процентное отображение

Спасибо,что поправили. Работает.

По поводу имени отчета - сделал вот так:

// OPEN REPORT IN RTF
    Form1.frxReport.LoadFromFile(ExtractFilePath(Application.ExeName)+'Report\print.fr3');
    Form1.frxReport.PrepareReport();
    ///Form1.frxRTFExport1.FileName := ChangeFileExt(GetTempFileName, '.rtf');
    Form1.frxRTFExport1.FileName :=ChangeFileExt(sUser+' '+FormatDateTime('YYYY-MM-DD.', frmEmployee.dtDateOfBirth.Date), '.rtf') ;
    Form1.frxRTFExport1.ShowDialog := False;
    Form1.frxReport.Export(Form1.frxRTFexport1);

Файл открывается в нужном формате и с нужным именем, но сохраняется в папку с программой. Как задать пусть сохранения файла, опять же через переменные? Нужно что-то вроде R:\Report\Текущий_Месяц\Имя_пользователя(sUser)\

Если каких то папок не существует, то они должна создаваться. Также попробовал с диалогом:
Form1.frxRTFExport1.ShowDialog := True; В этом случае он предлагает место сохранения файла,но сам диалог совершенно не нужен.
Если можно как то убрать сам диалог, но оставить вопрос куда сохранить файл- так будет даже лучше.

Re: Графическое процентное отображение

memult
Сделал для вас пример, но перед этим скачайте пожалуйста последнюю бета версию 2.4, пришлось добавить функцию ForceDirectories
https://www.dropbox.com/s/ro1hs53q8rdv5 … a.zip?dl=0

Post's attachments

Attachment icon Report to File.zip 6.66 kb, 401 downloads since 2016-01-14 

Dmitry.

8 (edited by memult 2016-01-17 19:35:55)

Re: Графическое процентное отображение

Добрый день, Дмитрий. Маленький вопрос по поводу исправленного Вами выше SQL запроса:

// Data for first dataset
    if isAdmin then
            sql := 'SELECT employees.firstname, employees.lastname, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users'
        else
            sql := 'SELECT employees.firstname, employees.lastname, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users WHERE ' + 'id_users='+IntToStr(idUser);
    SQLQuery(sql, Results1);


    // Data for second dataset
    if isAdmin then
            sql := 'SELECT employees.firstname, employees.lastname, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users'
        else
            sql := 'SELECT employees.firstname, employees.lastname, users.login FROM employees LEFT OUTER JOIN users ON users.id=employees.id_users WHERE ' + 'id_users='+IntToStr(idUser);
    SQLQuery(sql, Results2);


Пытаюсь выбрать данные еще из другой таблицы,к примеру:


    if isAdmin then
            sql := 'SELECT Tema.Tema,Percent.Percent,employees.DATA, employees.lastname, users.login FROM employees,Percent,Tema LEFT OUTER JOIN users ON users.id=employees.id_users'

    В отчет начинается беда и очень много лишних записей. Не подскажите как поправить, чтобы можно было добавить в запрос еще данные из других таблиц БД.

Пробовать через Group BY? Или это может сказаться на быстродействии? Еще дата в данном запросе в отчете отображается как, Год-Месяц-День. Подскажите, как сделать ДД.ММ.ГГГГ. Пробовал заменить employees.DATA на strftime('%d.%m.%Y', employees.DATA) - не помогло.

Еще в моем случае, Tema.Tema- комбобокс. И когда в отчет вставляю данные из запроса, вставляется во все строки последняя запись в комбобоксе.-как на скрине. Почему?

UPD: Проблема дублирование записей в отчете,как я понял, связанно именно с комбобоксом. Он сопоставляет все варианты,присутствующие в комбобоксе с другими записями.

Post's attachments

Attachment icon 2016-01-17 22-32-52 Скриншот экрана.png 10.29 kb, 329 downloads since 2016-01-17 

Re: Графическое процентное отображение

memult
Пожалуйста, создайте для каждого вопроса отдельную тему.

Dmitry.

Re: Графическое процентное отображение

Дмитрий, вопрос по поводу прикрепленного Вами выше примера Report to File.

Если ставить открытие файла после сохранения: Form1.frxRTFExport1.OpenAfterExport := True;
Файл сохраняется, но открывается не тот файл, который был только что сохранен, а другой,во временном каталоге, с другим именем.

Можно ли как то реализовать открытие того файла, который был только что сохранен? т.е из каталога сохранения.

Re: Графическое процентное отображение

memult wrote:

Дмитрий, вопрос по поводу прикрепленного Вами выше примера Report to File.

Если ставить открытие файла после сохранения: Form1.frxRTFExport1.OpenAfterExport := True;
Файл сохраняется, но открывается не тот файл, который был только что сохранен, а другой,во временном каталоге, с другим именем.

Можно ли как то реализовать открытие того файла, который был только что сохранен? т.е из каталога сохранения.

Попробуйте открывать файл с помощью функции OpenFile

Dmitry.

Re: Графическое процентное отображение

Получилось,благодарю.