powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi+MySQL+FastReport.
38 сообщений из 38, показаны все 2 страниц
Delphi+MySQL+FastReport.
    #39714655
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужен совет. Как все это проще (точнее правильнее) сделать. Есть обработчик, который формирует отчет, но мне не нравится код.
Как это можно сделать правильно, а не через такие костыли?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
var theme_array: array of integer;
tmp_array: array of string;
i:integer;
tmp:string;
SQLText:string;
sdate,sdate2,sdate3,sdate4:string;
k:integer;
begin
//Приведение дат к формату БД
  sdate:=''; DateTimeToString(sdate,'yyyy-mm-dd',sDateEdit1.date);
  sdate2:=''; DateTimeToString(sdate2,'yyyy-mm-dd',sDateEdit2.date);
  sdate3:=''; DateTimeToString(sdate3,'yyyy-mm-dd',sDateEdit3.date);
  sdate4:=''; DateTimeToString(sdate4,'yyyy-mm-dd',sDateEdit4.date);

begin
 // Получаем список источников поступления
  GetInfoRepSQL('SELECT ist1 FROM register GROUP BY ist1 ORDER BY ist1 '); // Выполнение запроса с Open
  //Определяем размер массивов
  SetLength(tmp_array, Form1.ZReport.RecordCount);
  Form1.ZReport.First;
    while not Form1.ZReport.Eof do
      begin     // записываем в массив 
        tmp_array[Form1.ZReport.RecNo-1]:=Form1.ZReport.FieldByName('ist1').AsString;
        Form1.ZReport.Next;
      end;

EXESQL('TRUNCATE TABLE reports_template') ;  // Очищаем таблицу отчета, запрос типа EXE

 for i:=Low(tmp_array) to High(tmp_array) do
begin
//подсчет сумм по источнику из массива в 2-ух периодах, формирование запроса
SQLText:='SELECT ist1,count(*) AS all0, ';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate+''' AND '''+sdate2+''') AND (resultview = ''УДОВЛЕТВОРЕНО'')) AS ud0, ';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate+''' AND '''+sdate2+''') AND (resultview = ''РАЗЪЯСНЕНО'')) AS raz0,';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate+''' AND '''+sdate2+''') AND (resultview = ''ОТКАЗАHО'')) AS otk0,';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''') AND (resultview = ''УДОВЛЕТВОРЕНО'')) AS ud1, ';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''') AND (resultview = ''РАЗЪЯСНЕНО'')) AS raz1,';
SQLText:=SQLText +' (SELECT count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''') AND (resultview = ''ОТКАЗАHО'')) AS otk1,';
SQLText:=SQLText +' (SELECT Count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate+''' AND '''+sdate2+''') AND (control=1) AND (resultview='''')) AS view0, ';
SQLText:=SQLText +' (SELECT Count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''') AND (control=1) AND (resultview='''')) AS view1, ';
SQLText:=SQLText +' (SELECT Count(*) FROM register WHERE (ist1 = '''+tmp_array[i]+''') AND (datecreate between '''+sdate3+''' AND '''+sdate4+''')) AS all1 ';

SQLText:=SQLText +' FROM register WHERE (ist1 = '''+tmp_array[i]+''')  AND (datecreate between '''+sdate+''' AND '''+sdate2+''')';

GetInfoRepSQL(SQLText);  // Выполнение запроса с Open

//Инсертим результат во временную таблицу отчета
with Form1.ZQWork do
  begin
  Active:=false;
  Close;
  SQL.Clear;
  SQL.Add('INSERT INTO reports_template');
  SQL.Add('(naim,all0,all1,view0,view1,ud0,ud1,raz0,raz1,otk0,otk1) ');
  SQL.Add('VALUES (');
  SQL.Add(':naim,:all0,:all1,:view0,:view1,:ud0,:ud1,:raz0,:raz1,:otk0,:otk1)');
  Prepare;
ParamByName('naim').Value:=Form1.ZReport.FieldByName('ist1').AsString;
ParamByName('all0').Value:=Form1.ZReport.FieldByName('all0').AsString;
ParamByName('all1').Value:=Form1.ZReport.FieldByName('all1').AsString;
ParamByName('view0').Value:=Form1.ZReport.FieldByName('view0').AsString;
ParamByName('view1').Value:=Form1.ZReport.FieldByName('view1').AsString;
ParamByName('ud0').Value:=Form1.ZReport.FieldByName('ud0').AsString;
ParamByName('ud1').Value:=Form1.ZReport.FieldByName('ud1').AsString;
ParamByName('raz0').Value:=Form1.ZReport.FieldByName('raz0').AsString;
ParamByName('raz1').Value:=Form1.ZReport.FieldByName('raz1').AsString;
ParamByName('otk0').Value:=Form1.ZReport.FieldByName('otk0').AsString ;
ParamByName('otk1').Value:=Form1.ZReport.FieldByName('otk1').AsString ;
  ExecSQL;
  end;
end;

end;

 GetInfoRepSQL('SELECT * FROM reports_template '); //Получаем результирующую таблицу для отчета

  Form1.frxReport1.LoadFromFile(Form1.sPath + '\reports\' + 'test.fr3', true);
// Заполняем данными отчет
  with Form1.frxReport1.Variables do
       begin
          Variables[' ' + 'MyDefaultCategory'] := Null;  //Создаем пустую категорию для дальнейшего создания переменных в отчете
          Variables['period'] := quotedstr('Журнал по исполнителям по вопросам за текущий период '+sDateEdit1.Text+' - '+sDateEdit2.Text);
        end;
    Form1.frxReport1.ShowReport(true);
end;



Результат:
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714658
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666,

накати вотки или форматтер кода используй, и попустит.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714661
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КотовасияВалерий666,

накати вотки или форматтер кода используй, и попустит.
Да и так попустило) Вышел на результат, но что-то внутри подсказывает, что лупить запросы внутри цикла - это жесть.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714707
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне почему-то кажется что этими "SELECT count(*) FROM" вы имитируете операция GROUP BY
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714711
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по тому, что отчёты у вас лежат в папочке, программа - однопользовательская ?
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714746
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrМне почему-то кажется что этими "SELECT count(*) FROM" вы имитируете операция GROUP BY
Если есть предложения, с удовольствием выслушаю)
Программа сетевая. Отчеты у каждого свои.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714747
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666Программа сетевая. Отчеты у каждого свои.
И если нужно исправить один отчёт у всех, то бежим к каждому на комп ?
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714748
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666,

зачем уже полученный курсор (набор данных) загонять в ("временную") табличку?
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714754
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrВалерий666Программа сетевая. Отчеты у каждого свои.
И если нужно исправить один отчёт у всех, то бежим к каждому на комп ?
Нет, зачем, есть апдейтер. Смотрятся хэши, если не совпадают то перед стартом все сливается с сервера.


авторзачем уже полученный курсор (набор данных) загонять в ("временную") табличку?
Набор данных строиться в цикле. Если подскажите как полностью его получить без временной таблички буду благодарен.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714756
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
declare @Tmp table(DateCreate  smalldatetime, ResultView varchar(20), ist1 int)

insert into @Tmp select '20180901','РАССМОТР',1
insert into @Tmp select '20180901','РАССМОТР',2
insert into @Tmp select '20180901','РАССМОТР',3

insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2
insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2
insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2

insert into @Tmp select '20180901','РАЗЪЯСНЕНО',2

insert into @Tmp select '20180901','ОТКАЗАHО',2
insert into @Tmp select '20180901','ОТКАЗАHО',2
insert into @Tmp select '20170901','ОТКАЗАHО',1

-- запрос
select ist1,
       Name = case ist1 when 1 then ''
                        when 2 then 'Администрация президента РБ' 
                        when 3 then 'Другие органы госуправления'
              end,
All1 = sum(case when (DateCreate between '20180901' and '20180930') then 1 else 0 end),
All2 = sum(case when (DateCreate between '20170901' and '20170930') then 1 else 0 end),
Raz1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'РАССМОТР') then 1 else 0 end),
Raz2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'РАССМОТР') then 1 else 0 end),
Ud1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end),
Ud2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end),
Raz1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end),
Raz2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end),
Ot1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'ОТКАЗАHО') then 1 else 0 end),
Ot2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'ОТКАЗАHО') then 1 else 0 end)
from @Tmp
group by ist1


...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714785
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
так ?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
declare @Tmp table(DateCreate  smalldatetime, ResultView varchar(20), ist1 int)

insert into @Tmp select '20180901','РАССМОТР',1
insert into @Tmp select '20180901','РАССМОТР',2
insert into @Tmp select '20180901','РАССМОТР',3

insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2
insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2
insert into @Tmp select '20180901','УДОВЛЕТВОРЕНО',2

insert into @Tmp select '20180901','РАЗЪЯСНЕНО',2

insert into @Tmp select '20180901','ОТКАЗАHО',2
insert into @Tmp select '20180901','ОТКАЗАHО',2
insert into @Tmp select '20170901','ОТКАЗАHО',1

-- запрос
select ist1,
       Name = case ist1 when 1 then ''
                        when 2 then 'Администрация президента РБ' 
                        when 3 then 'Другие органы госуправления'
              end,
All1 = sum(case when (DateCreate between '20180901' and '20180930') then 1 else 0 end),
All2 = sum(case when (DateCreate between '20170901' and '20170930') then 1 else 0 end),
Raz1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'РАССМОТР') then 1 else 0 end),
Raz2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'РАССМОТР') then 1 else 0 end),
Ud1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end),
Ud2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end),
Raz1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end),
Raz2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end),
Ot1 = sum(case when (DateCreate between '20180901' and '20180930') and (resultview = 'ОТКАЗАHО') then 1 else 0 end),
Ot2 = sum(case when (DateCreate between '20170901' and '20170930') and (resultview = 'ОТКАЗАHО') then 1 else 0 end)
from @Tmp
group by ist1



Благодарю! Все получилось! Немного пришлось повозится с представлениями и синтаксисом.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714824
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может подскажите еще один момент?
Это уже немного другой отчет.
Есть номенклатурный справочник. На его основе хотелось бы видеть отчет с результирующими полями по группам. Рисунок ниже.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714828
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рисую вот такой запрос, как получить сумму по группе?
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714846
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В отчёте - GroopFooter, где группу нужно как то выделить по номеру
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714974
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrВ отчёте - GroopFooter, где группу нужно как то выделить по номеру
Немного не то, мне результат нужен ДО подвала и уже в таблице датасета.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714983
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не ПОДВАЛ, а ПОДВАЛ ГРУППЫ
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39714996
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотите данные в запросе - пристыкуйте второй запрос (на суммы) через UNION
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715357
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrХотите данные в запросе - пристыкуйте второй запрос (на суммы) через UNION
Вобщем получилось так, но это не совсем то что надо, удалил пункты ("в том числе") и итоги закинул в футер груп. Для этой формы сойдет, но есть другая такая же только без периода, и там строгая форма, и все цифры должны идти по порядку.


Была мысль сделать в репорте переприсваивание значения из подвала, а подвал невидимым, но почемуто такая манипуляция даже с двойным проходом работает правильно только на первых двух группах бэндов… Вобщем я сгруппировал полем в таблице эти пункты(группа 1,2,3,4,5,6,7 и тп), с запросами я далеко на вы, и про join и пр. прочитал только на прошлой неделе, уже не говоря про агрегатные ф-ии.
Можно ли сделать еще одно поле, суммирующее по группе? т.е. чтобы было все то что есть сейчас + поле, в котором будет сумма всех записей группы 1, где группа 1, 2 где группа 2 и тп.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715359
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас репорта есть отдельный компонент для составления итоговых таблиц (такой мини-олап) -- на оде подается список данных, а он сам группирует их по различным разрезам и считает цифры. Если к дизайну претензий не будет, то вполне себе вариант.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715361
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли сделать еще одно поле, суммирующее по группе? т.е. чтобы было все то что есть сейчас + поле, в котором будет сумма всех записей группы 1, где группа 1, 2 где группа 2 и тп.
Повторяю ещё раз, для суммирования по группе существует GROUP FOOTER
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715386
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666Можно ли сделать еще одно поле, суммирующее по группе?

https://www.fastreport.ru/public_download/docs/vcl/FR6/HTML_RU/index.html?report_with_groups.htm
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715416
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrМожно ли сделать еще одно поле, суммирующее по группе? т.е. чтобы было все то что есть сейчас + поле, в котором будет сумма всех записей группы 1, где группа 1, 2 где группа 2 и тп.
Повторяю ещё раз, для суммирования по группе существует GROUP FOOTER
Да при чем тут GROUP FOOTER? На картинке нарисовал как есть.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715430
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666,

а на groupheader'е не получается разместить компоненты? Если не получается, то можно и дополнительной строкой в наборе.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715444
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"но при таком раскладе замена идёт только на 2-е первые группы, а дальше цифры не совпадают" - если честно, то ничего не понял
Код: pascal
1.
[IIF(<DS."TOREP">=0, Memo36.Value, <DS."All0">)] // сомневаюсь что так можно, и какой в этом смысл - не ясно
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715507
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr"но при таком раскладе замена идёт только на 2-е первые группы, а дальше цифры не совпадают" - если честно, то ничего не понял
Код: pascal
1.
[IIF(<DS."TOREP">=0, Memo36.Value, <DS."All0">)] // сомневаюсь что так можно, и какой в этом смысл - не ясно



<DS."TOREP">=0, поле в таблице, 0 - замена значения на Memo36.Value
Memo36.Value - сумма по группе
DS."All0" - значение из таблицы.


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

Отсюда и вопрос как это реализовать.
Я вижу 2 выхода, подмена значений и расчет в самом репорте сумм(что пока не очень получается). Либо по тому же условию отображения, к запросу:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select kodvopr.groupid,kodvopr.torep,kodvopr.KODnom,kodvopr.NAIM,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') then 1 else 0 end) AS All0,
sum(case when (datecreate between '2017-01-01' AND '2017-10-09') then 1 else 0 end) AS All1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end) AS ud0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end) As ud1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end) AS raz0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end) As raz1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'ОТКАЗАHО') then 1 else 0 end) As otk0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'ОТКАЗАHО') then 1 else 0 end) AS otk1, 
sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (control=1) AND (resultview='')  then 1 else 0 end)AS view0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (control=1) AND (resultview='') then 1 else 0 end) AS view1
 from kodvopr 
LEFT JOIN register ON kodvopr.KODnom = register.themeid
# WHERE kodvopr.torep=1
 group by KODnom ORDER BY kodvopr.KOD11;


Добавить еще 10 полей и суммами, в которых будет сумма по группе, чтобы выглядело это так как на табличке в скриншоте

Т.е. в SUM_All0,SUM_All1.....SUM_view0,SUM_view1 - собирались бы соответствено суммы из All0, All1.... view0,view1 в разрезе группы. Т.е. берем итем смотрим группу, считаем количество итемов в этой группе в нужном разрезе по датам и условиям записываем в SumИМЯПОЛЯ (к примеру SUM_All0).
А в репорте уже вставить условие в поле для отображения:
[IIF(<DS."TOREP">=0, <DS."SumAll0">, <DS."All0">)]
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715554
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666,

ну ты попробуй потрудиться и представить, что вот такие вопросы задают тебе:

Валерий666Есть обработчик, который формирует отчет, но мне не нравится код.
Как это можно сделать правильно, а не через такие костыли?
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39715564
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Если вам нужны ИТОГИ ПО ГРУППАМ в виде отдельной таблички, то реализуйте это отдельным запросом.
2. Если вам нужны ИТОГИ ПО ГРУППАМ в виде "Итого" по окончанию группы - то для этого есть GROUP FOOTER
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39716694
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr1. Если вам нужны ИТОГИ ПО ГРУППАМ в виде отдельной таблички, то реализуйте это отдельным запросом.
2. Если вам нужны ИТОГИ ПО ГРУППАМ в виде "Итого" по окончанию группы - то для этого есть GROUP FOOTER

Мне нужно ИТОГО ПО ГРУППАМ в начале группы в одной таблице, все же вроде нарисовано на картинке.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39716730
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вам нужен ИТОГО в начале группы, то изучайте это
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39716889
_Den_Z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Валерий666,

Если у вас FR6, то смотрите отчет 131.fr3 из \Demos\Main.
Кладете мемо с агрегатом на футер(если футер не нужен, то можно скрыть его установив нулевую высоту, он нужен для агрегата ) и заголовок, после, у мемо на заголовке с агрегатом, установите св-во Processing.ProcessAt = paGroupFinished.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39717158
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_ZВалерий666,

Если у вас FR6, то смотрите отчет 131.fr3 из \Demos\Main.
Кладете мемо с агрегатом на футер(если футер не нужен, то можно скрыть его установив нулевую высоту, он нужен для агрегата ) и заголовок, после, у мемо на заголовке с агрегатом, установите св-во Processing.ProcessAt = paGroupFinished.

К сожалению у меня 5.4 версия. 6-ую не нашел. Читал про такие свойства, но в ранних версиях их нет(
З.Ы.
Я вот действительно не могу понять, то ли не отображаются рисунки, то ли я настолько не умею изложить суть что меня невозможно понять. Мне не надо итого по группам в футере или еще где-то, я через if пытаюсь сделать вывод суммы по группам в фиксированной таблице, которую менять нельзя, и в которой по запросу(который имеется) выводятся данные из dataset'a. Ну приложил уже рисунок с таблицей, и решение, но в SQL я нуль, поэтому спрашиваю можно ли это организовать одним запросом или нет. Если нет, то буду делать костыли с временными запросами и пересчетом.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39717180
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666то ли не отображаются рисунки, то ли я настолько не умею изложить суть что меня невозможно понять.
К сожалению, второе, поскольку чут выше вы писали что "Мне нужно ИТОГО ПО ГРУППАМ в начале группы в одной таблице"

Валерий666я через if пытаюсь сделать вывод суммы по группам в фиксированной таблице, которую менять нельзя, и в которой по запросу(который имеется) выводятся данные из dataset'a.

Опять тоже самое, ничего не понятно.
Что конкретно не получается ?
Сделайте тестовый пример и на нём покажите чего хотите добиться.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39717181
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите набор данных и картинку готового отчёта, которую хотите получить.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39718614
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrПокажите набор данных и картинку готового отчёта, которую хотите получить.

Вобщем есть вот такой справочник, и в итоге нужен такой результат:

Вы мне скидывали запрос на предыдущий вопрос, я его немного переделал

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select kodvopr.group_parent,kodvopr.groupid,kodvopr.torep,kodvopr.KODnom,kodvopr.NAIM as NAIM,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') then 1 else 0 end) AS All0,
sum(case when (datecreate between '2017-01-01' AND '2017-10-09') then 1 else 0 end) AS All1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end) AS ud0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'УДОВЛЕТВОРЕНО') then 1 else 0 end) As ud1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end) AS raz0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'РАЗЪЯСНЕНО') then 1 else 0 end) As raz1,
 sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (resultview = 'ОТКАЗАHО') then 1 else 0 end) As otk0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (resultview = 'ОТКАЗАHО') then 1 else 0 end) AS otk1, 
sum(case when (datecreate between '2018-01-01' AND '2018-10-09') AND (control=1) AND (resultview='')  then 1 else 0 end)AS view0,
 sum(case when (datecreate between '2017-01-01' AND '2017-10-09') AND (control=1) AND (resultview='') then 1 else 0 end) AS view1
 from kodvopr 
LEFT JOIN register ON kodvopr.KODnom = register.themeid
 group by KODnom ORDER BY kodvopr.KOD11;



и получил вот такой результат:



Мне надо в строках с номенклатурой 1,1.8,2,6,7 получить итоги по группе в той таблице(отчете) что на рисунке сверху.
Группа определяется двумя полями group_parent - родительская группа, groupid - вложенная группа.
Загвоздочка в том, что мне надо в 1 получить сумму 1.1-1.10 (включительно 1.8, т.е. сумму по 1.8.1 - 1.8.2 - второй уровень вложенности)
Сейчас я вижу выход из ситуации следующий: дописать к тому запросу, что сверху, еще 20 полей с суммами по группам, соответственно 1 - го и 2 - го уровня вложенности. Реально ли это сделать?

Что бы получилось грубо говоря вот так:


Возможно не самое эстетичное решение, но подобный результирующий набор данных позволит выводить итоги по группам, где угодно, менять номенклатуру в произвольном порядке и не вносить изменения нив запрос, ни в файл отчета.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39718615
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чет с картинками не вышло, вот увеличенные копии:
https://radikal.ru/big/qt3nf5fyr7g0k][img] https://d.radikal.ru/d02/1810/5e/8ccd1b56a2dat.jpg [/img]

https://radikal.ru/big/kg0ptpcxhwrc8][img] https://d.radikal.ru/d18/1810/30/e6f8a19118a7t.jpg [/img]

https://radikal.ru/big/k321els6tyoci][img] https://b.radikal.ru/b15/1810/83/68b980bcee12t.jpg [/img]
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39718673
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий666,

если форма не для печати/контроля, то рекомендую убрать нули из таблицы (у фаста есть в свойствах полей такое) -- пользователям будет НАМНОГО удобнее смотреть и проверять цифры.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39718735
Валерий666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiВалерий666,

если форма не для печати/контроля, то рекомендую убрать нули из таблицы (у фаста есть в свойствах полей такое) -- пользователям будет НАМНОГО удобнее смотреть и проверять цифры.
Как раз таки она самая, я предлагал свернуть пустые значения, но сказали что нужно именно так.
...
Рейтинг: 0 / 0
Delphi+MySQL+FastReport.
    #39719225
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, так как у вас Дерево с произвольным вложением, то нужно сначала построить его (расставить Id и IdParent), затем научится рекурсивно перебирать узлы дерева на произвольную глубину.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi+MySQL+FastReport.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]