Суммирование по бендам
У меня есть отчет такой структуры, который создается из 2-х таблиц связанных реляционными отношениями
Группа №1
Строка 1
Строка 2
Строка 3
Строка 4
Группа №2
Строка 1
Строка 2
Строка 3
Строка 4
Группа №3
Строка 1
Строка 2
Строка 3
Строка 4
.....
В дизайнере у меня такая структура
Master Data (Группа) (таблица мастер)
Detail Data (Строки) (таблица детайл)
мне надо в конце отчета получить итоговые данные по всем группам в разрезе строк, должно получится вот так
.....
Итого по группам
Строка 1
Строка 2
Строка 3
Строка 4
Можно ли это сделать с помошью бендов не прибегая к созданию еще одной базы с итогом?
Группа №1
Строка 1
Строка 2
Строка 3
Строка 4
Группа №2
Строка 1
Строка 2
Строка 3
Строка 4
Группа №3
Строка 1
Строка 2
Строка 3
Строка 4
.....
В дизайнере у меня такая структура
Master Data (Группа) (таблица мастер)
Detail Data (Строки) (таблица детайл)
мне надо в конце отчета получить итоговые данные по всем группам в разрезе строк, должно получится вот так
.....
Итого по группам
Строка 1
Строка 2
Строка 3
Строка 4
Можно ли это сделать с помошью бендов не прибегая к созданию еще одной базы с итогом?
Комментарии
"Итого по Строкам 1" - сложнее. Если во всех группах набор деталей одинаковый, можно например в каждой строке деталей увеличивать итоговую сумму и заносить в массив. В бенде ReportSummary запустить цикл типа
For i:=1 To МаксимальноеКоличествоСтрок Do ShowBand(Child1)
А на бенде Child1 выводить итоговые суммы по строкам. Это если строк дофига. Если штук 5 проще итоговые суммы загонять в переменные.
А вабще не лучшая схема отчета. Может я чего не понял? Интересно будет почитать что думают коллеги 8=|
За ранее спасибо.
В скрипте, помимо переменных, можно создавать массивы. Массивы могут быть только одномерными, но можно организовать доступ к элементам массива таким образом, что можно трактовать массив как двумерный или с болшим количеством измерений.
Пример использования массива:
begin
MyArr[0] := 'a'; MyArr[1] := 'b'; MyArr[3] := 'd';
MyArr[2] := MyArr[0] + MyArr[1] + 'c' + MyArr[3];
end;
Фактически значения элементов массива хранятся в списке frVariables в виде
Arr_имя массива_индекс. Т.е. в вышеприведенном примере мы получим содержимое frVariables:
Arr_MyArr_0 := 'a'
Arr_MyArr_1 := 'b'
Arr_MyArr_2 := 'abcd'
Arr_MyArr_3 := 'd'
Это все из хелпа... Вроде и добавить нечего, массивы в FR очень простые. Разбирайся.
Спасибо за разъяснение по массивам, но хотел еще узнать, можно осуществлять поиск по массивам, так как у меня могу не все строки выводится на печать, потому как в них ничего может не быть.
1 строка- приход
2 строка- продажа
3 строка- оплата
4 строка- возврат
5 строка- списание
то есть каждая строка имеет какой-то логический смысл, использование параметра LINE# будет ошибкой, т.к. LINE# возвращает просто порядковый номер строки в группе, а не номер по смыслу
Группа №1
1 строка- приход
2 строка- продажа
3 строка- оплата
4 строка- возврат
5 строка- списание
Группа №2
1 строка- оплата
2 строка- возврат
3 строка- списание
в группе два просто отсутвуют Продажа и Приход, по ним может вообще ничего не быть и выводить их напечать просто нет необходимости.
Я уже подумываю, перед отчетом создать временные базы и туда просуммировать нужные мне базы (благо их придется делать всего три), вот только незнаю как их потом на листе отобразить, ведь еще одна связка Master-Detail Band приведет перемешиванию с первой связкой.
Вопрос ко всем
Объясните пожайлуста как можно извратится с одномерным массивом , что бы сделать его двумерным. Я как понимаю это можно сделать используя вложенные массивы. Так ли это?
Создать массив строк, каждая из которых содержит элементы с разделителями,
т.е.
MyArr:= 'abc;xyz;1234;test;...'
Здесь разделителем является ';', а значения отдельных элементов , будут:
элемент [i,0] = 'abc'
элемент [i,1] = 'xyz'
элемент [i,2] = '1234'
элемент [i,3] = 'test'.
Только придется писать функцию, которая распарсивает такую строку, т.е. фактически ищет разделители и то, что между ними считает элементом массива. Правда ситуация осложнится, если символ разделителя может присутствовать в значении элемента.
SELECT Field1, Field2, ... 1 AS LineType - для прихода
SELECT Field1, Field2, ... 2 AS LineType - для продажи
...
Тогда можно будет заносить итоговую сумму в элемент массива
MyArray[DocType]