Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
26-10-2006 07:15 | Сообщение от автора вопроса
Ура оно работает!
Спасибо огромное!
Очень помог.
Как всегда всё гениальное просто :)
Вот с такой постановки и надо было начинать. В этом случае проще будет сделать через объединяющий запрос. Попробуй так:
SELECT ID, NETTO, TIME_IN, DATE_IN, NAME_ORG, NUM, 0 as GroupIndex
FROM VES_V
WHERE ...
union all
SELECT ID, NETTO, TIME_IN, DATE_IN, NAME_ORG, NUM, 1 as GroupIndex
FROM VES_V
WHERE ...
ORDER BY name_org, GroupIndex, date_in, time_in
А в отчет добавь еще один GroupHeader (пустой, с нулевой высотой) с группировкой по полю GroupIndex и поставь его самым первым, перед GroupHeader'ом по организации.
Не получается что-то у меня. С возможностями скрипта знаком мало. Можно поподробнее плиз!
Вот мой запрос целиком (без объединения)
function TFReestr.Get_Querry_Without_Num: string;
var
s: string;
i: integer;
begin
s := '(';
{тут мы определяем, что выделил пользователь и генерим WHERE}
for i := 0 to dbg1.SelectedRows.Count - 1 do
begin
dbg1.DataSource.DataSet.GotoBookmark(Pointer(dbg1.SelectedRows.Items[i]));
s := s + '(ORG_CODE=' + dbg1.DataSource.DataSet.FieldByName('ORG_CODE').AsString + ') OR ';
end;
Delete(s, Length(s) - 3, 4);
s := s + ') AND (';
{добавляем в WHERE фильтр по датам}
s := s + 'date_in BETWEEN ' + QuotedStr(ed1.Text) + ' AND ' + QuotedStr(ed2.Text) + ') ';
{вот и сам запрос в форме для группирующего отчета}
Result := 'SELECT ID, NETTO, TIME_IN, DATE_IN, NAME_ORG, NUM FROM VES_V WHERE ' + s +
'ORDER BY name_org, date_in, time_in;';
end;
Теперь как у меня выглядит отчет:
1. сначала заголовок первой группы по полю имя организации: на группе лежит мемо с именем и кодом организации из БД
2. Заголовок второй группы по полю дата, на нем MasterData. Вверху пишется текущая дата из БД, а в MasterData идут записи из БД с времнем и весом.
3.Потом идут два подвала и на последнем отображается сумма по весу в клонках и текущая дата.
Вот. И надо чтобы этот набор 2 раза подряд вывелся. Что делать ума не приложу.
Это так и должно быть или это как-то можно отключить?
Какое поле задано в группировке, по тому он и группирует, две одинаковые записи всегда попадут в одну группу. Получается, что их надо "разгруппировать". Можно попробовать такие варианты:
Добавить в запрос дополнительное поле и в отчете группировать по нему:
SELECT qq, qq1, qq2, 0 as GroupIndex FROM TABEL_MY
UNION ALL
SELECT qq, qq1, qq2, 1 as GroupIndex FROM TABEL_MY
Или другой вариант, без объединяющего запроса - в скрипте отчета написать обработчик GroupFooter2AfterPrint (для бэнда, который выводится последним) и в нем сделать "ручной" повторный вывод требуемых бэндов через Engine.ShowBand
Точнее они есть, но так как-будто бы я дейстительно продублировал в MasterData1 строки. Он не хочет делать группирующий отчет по каждой строке - он объединяет их. Вот что мне не нужно. Это так и должно быть или это как-то можно отключить?
Либо в запросе с объединением задать ORDER BY чтобы две одинаковые записи шли подряд.
Дык у меня так и есть. Проблемма: фаст - убирает дубли! Я же говорю в датасете всё нормарльно - я на DBGrid выводил смотрел. Там подряд идут 2 одинаковые строки, а фасту побоку :(
Надо либо на MasterData продублировать поля, тогда запроса с объединением не нужно.
Не в моём случае - у меня группирующий запрос. Я смогу получить только дубль строк в MasterData1 и всё, а у меня же целая форма. GropeHeader1, GroupHeader2, GroupeFooter1, GroupeFooter2 и т.п. Если просто продублировать эти компоненты, то отработает сначала один MasterData, а потом второй - по другому я не знаю как можно сделать.
Вопрос-то - почему дублей нет в отчете? Когда они есть в результатах запроса.
мне надо, чтобы каждая строка из БД прозвучала 2 раза и сразу
Надо либо на MasterData продублировать поля, тогда запроса с объединением не нужно. Либо в запросе с объединением задать ORDER BY чтобы две одинаковые записи шли подряд.
не мне не это надо. мне надо, чтобы каждая строка из БД прозвучала 2 раза и сразу. У меня результат - отчет с подгруппами. Группировка по организации. Формируется отчет по каждой организации - а их там море. Всё печатаестя на рулоне. Вот мне и надо, чтобы подряд шло 2 копии одной записи по критерию группировки. А не сначало вся БД, а потом еще раз.
Мне вот и нужно узнать - какого фаст не хочет отображать дубликаты - если мне надо, чтобы они были! Не может же быть, чтобы такой возможности не было.
Зачем запрос с объединением? Если 2 копии надо выводить только на печать - поставь PrintOptions.Copies:=2, если 2 копии надо выводить еще и на экран, то так:
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.