Proble creating a progressive sum and place it at pre-defined place on page (bottom)
Hi,
I'm having a huge problem, and any help is more than appreciated...
The problem is:
I want to create a bill report. The data are pulled from a database.
The report will be printed on pre-printed paper where on the bottom of each
page sould be the progressive sum of a column.
So on the last page there should be the summary of all pages.
I use a DBcalc component with DBcalcType=dcSum and i place it on the page
footer.
The problem is that the report seems to understand that the page has change
only when the first line of the next page is printed.
That results on a miscalculation of the proggressive summary because it has
add the first line of the next page.
Is there a way to avoid it?
I have tried to use the ppSummaryBand instead of the footerBand but it seams
to me that there is no way to place it in a predifined place on a page.
Thank you very much for your help
Kindly regards
Nemos
I'm having a huge problem, and any help is more than appreciated...
The problem is:
I want to create a bill report. The data are pulled from a database.
The report will be printed on pre-printed paper where on the bottom of each
page sould be the progressive sum of a column.
So on the last page there should be the summary of all pages.
I use a DBcalc component with DBcalcType=dcSum and i place it on the page
footer.
The problem is that the report seems to understand that the page has change
only when the first line of the next page is printed.
That results on a miscalculation of the proggressive summary because it has
add the first line of the next page.
Is there a way to avoid it?
I have tried to use the ppSummaryBand instead of the footerBand but it seams
to me that there is no way to place it in a predifined place on a page.
Thank you very much for your help
Kindly regards
Nemos
This discussion has been closed.
Comments
have is including the record which prints on the top of the subsequent page.
What happens when the report is generating is that the band tries to print
at the bottom, if it doesn't fit, then it must print at the top of the next
page. In order to determine if a dynamic height band can fit on a page, it
must generate. This includes firing the OnCalc events, even though it will
be determined later that the band will not be able to fit on the current
page. In order to workaround this, you can code the transfer of the
calculation to a label in the footer. Place a TppVariable in the detail
band. In its OnCalc event handler, place the calculation to sum the value in
the pipeline.
Value := Value + plOrders['AmountPaid'];
Then use the DetailBand.AfterGenerate event in order to find out if the band
could successfully generate. If it did attempt to generate and is not out of
space, then transfer the variable's value to the label.
procedure TForm1.ppDetailBand1AfterGenerate(Sender: TObject);
begin
if not(ppDetailband1.OutOfSpace) then
ppLabel5.Caption := ppVariable1.Value;
end;
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com
I have tried it but it doesn't work.
It's still adding the record which prints on the top of the subsequent page.
But i tried something else:
procedure TDoneBillFrm.ppVariable1Calc(Sender: TObject;
var Value: Variant);
begin
Value:=Value+FcostPipeline.GetFieldAsDouble('oblAmount');
end;
procedure TDoneBillFrm.ppFooterBand9AfterGenerate(Sender: TObject);
begin
if not (ppFooterBand9.OutOfSpace) then
ppLabel144.Caption:=ppVariable1.Value-FcostPipeline.GetFieldAsDouble('oblAmo
unt');
end;
The problem now is that in the last page it misses the last value ... (it's
logical)
any idea ?
best regards and many thanks
Nemos
Because bands sometimes have to generate to check for space used, but don't
create output, then you can leverage the OnDrawCommandCreate event of a
component to know that the report created output. Here is an example which
works this way. I didn't free the variable draw commands, as the report
engine doesn't expect this to happen, so I cleared the text out instead and
left them as objects on the page.
http://www.digital-metaphors.com/tips/RunningSummaryTotalInFooter.zip
If you use any KeepTogether action, you can dispose of the above technique,
but use a DBCalc instead. The KeepTogether logic should track the correct
value in the DBCalc in the footer. When KeepTogether is not in use, then you
will need to track the value similar to the demo.
Cheers,
Jim Bennett
Digital Metaphors
http://www.digital-metaphors.com
info@digital-metaphors.com
I'll try it
thanks very match.