Topic: Отчеты: график с количеством повторений

День добрый, созрел вопрос:

В моей программе учёта заказов есть таблица, и в каждой записи есть столбец с мастером, который обслуживал клиента.
Хочется сделать статистику по мастерам в виде графика (посредством отчёта), чтобы наглядно видеть, у какого мастера больше клиентов.
Получается, что нужно подсчитать количество повторений строчек с мастерами, и уже работать с этими цифрами. Но как это сделать?

FastReport ругается на COUNT(<Report."master">).

Нужно получить результат, как в аттаче.

Post's attachments

Attachment icon 2857.jpg 30.17 kb, 240 downloads since 2015-09-17 

Re: Отчеты: график с количеством повторений

Приветствую,


Пожалуйста приложите ваш проект к сообщению (zip файл без exe и dll)
постараюсь помочь.

Dmitry.

3 (edited by Andrew.Frolov 2015-09-17 21:06:12)

Re: Отчеты: график с количеством повторений

Удалил из проекта всё лишнее, приложил.

В главном меню программы справа наверху будет кнопка "Отчёты", там есть визуальный пример, что бы я хотел сделать (кнопка "Визуальный пример отчета"), на всякий случай прокомментирую текстом:

График 1: Количество повторений main->id_master, можно жестко указать, что мастеров двое, если так будет проще

График 2: Соотношение суммы zp->zp_price (стоимость запчастей) к main>price (стоимости всего заказа)

График 3: Было бы круто посчитать прибыль (сумму main->price) за день, если это вообще возможно в рамках отчета и программы

И хотелось бы узнать, как, или возможно ли вообще реализовать совсем космическую по сложности задачу такого плана:

Допустим, у нас два мастера. Если один мастер делает работу, то он получает 80% прибыли (main->price), а второй - 20% от неё же. Можно ли посчитать на этих двух мастеров  прибыль за все заказы?

P.S: Вчера доковырялся с базой, и возник баг, который воспроизведён в приложенном примере: если создать новую заявку, сохранить её, а потом в этой созданной заявке поочерёдно добавлять "используемые детали", то в главной таблице записи заявок будут дублироваться, хотя в sql всё в порядке и запись одна. Из-за чего такое может быть?

Post's attachments

Attachment icon CRM_cut.zip 235.68 kb, 414 downloads since 2015-09-17 

Re: Отчеты: график с количеством повторений

Andrew.Frolov


Сделал отчет по мастерам и заказам в качестве примера.



Записи дублируются, т.к. вы выводите используемые запчасти заказа, нет другого способа вывести все используемые запчасти заказа кроме как дублирующими записями только с разной стоимостью запчастей (последняя колонка)
Переделал с помощью вычисляемого поля чтобы выводилась общая сумма запчастей заказа.


К сожалению с остальными вопросами помочь не смогу, т.к. я могу помочь только с конкретными проблемами, но не могу реализовать данные отчеты за вас. Возможно вам будет полезен данный проект в качестве примера с отчетами
http://myvisualdatabase.com/database_ex … aster.html



Исправленный вариант проекта приложил к сообщению:

Post's attachments

Attachment icon CRM_cut_fixed.zip 21.93 kb, 461 downloads since 2015-09-18 

Dmitry.

Re: Отчеты: график с количеством повторений

В примере отчета по мастерам я нашел некий "Report.qty", что он означает? В базе такой переменной нет.

Re: Отчеты: график с количеством повторений

Andrew.Frolov wrote:

В примере отчета по мастерам я нашел некий "Report.qty", что он означает? В базе такой переменной нет.

Отчет создается на основе SQL запроса:

SELECT

COUNT(main.date) as qty,
master.master
............
Dmitry.

Re: Отчеты: график с количеством повторений

Спасибо. Есть еще одна проблема, с которой я не разобрался: если снять галочки у DateTimePicker'ов "Начиная с" и "И заканчивая", то запрос выводит не информацию за всё время, а пустоту. Ясно, что это связано с:

WHERE

date(main.date) >= date({picker_s}) AND
date(main.date) <= date({picker_do})

Как можно сделать проверку на "проставленность галочек" у этих DateTimePicker'ов, и выводить всё, если они не отмечены?

Re: Отчеты: график с количеством повторений

Andrew.Frolov
попробуйте данный запрос:

SELECT
COUNT(main.date) as qty,
master.master

FROM main

LEFT OUTER JOIN master ON master.id=main.id_master

WHERE
(CASE WHEN IFNULL({picker_s},1)=1 then 1=1 else date(main.date) >= date({picker_s}) end)
AND
(CASE WHEN IFNULL({picker_do},1)=1 then 1=1 else date(main.date) <= date({picker_do}) end)

GROUP BY master.master
Dmitry.