Avatar billede spejder_leon Nybegynder
22. maj 2009 - 23:36 Der er 11 kommentarer

Rapport Sum i bund af side.

Jeg skal lave en faktura i MS Acces.
Summeringen, moms osv. skal stå i bunden af siden.

Designmæssigt vil jeg gerne have kolonne adskillelse vha. lodrette streger således:


+----------+----------+----------+
| Vare    | antal    | Pris    |
+----------+----------+----------+
| tlf      | 2        | 5        |
| lednign  | 34      | 3        |
|          |          |          |


Kolonnerne skal foresætte helt til bunden af siden hvor sum mv. skal stå:

+----------+----------+----------+
| Vare    | antal    | Pris    |
+----------+----------+----------+
| tlf      | 2        | 5        |
| lednign  | 34      | 3        |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
|          |          |          |
+----------+----------+----------+
| Total    | 36      | 8        |
+----------+----------+----------+


Summeringen mv. har jeg styr på, men hvordan sikrer jeg designet?

Varelinierne skrives i detaljesektionen, og summeringen i fakturaFoden.

Løsningen skal kunne håndtere at der er mere end een side med varer.
Avatar billede spejder_leon Nybegynder
22. maj 2009 - 23:37 #1
- tja

kolonne stregerne i ovenstående skulle have fulgt hinanden som lodrette streger. I Access er stregerne tegnet med bokse, hvilket umiddelbart virker fint.
Avatar billede mugs Novice
23. maj 2009 - 00:18 #2
Denne indsæter 2 lodrette linier i rapporten henholdsvis blå og rød. Det er en gaaaammel kode, og jeg kan ikke huske hvad de forskellige parametrer står for bortset fra lngColor, me prøv at lege lidt med den:


Private Sub Detaljesektion_Print(Cancel As Integer, PrintCount As Integer)
Dim lngColor As Long
Dim Hoejde As Single
Me.ScaleMode = 3
Hoejde = Me.Height
lngColor = RGB(0, 0, 180)
Me.Line (50, 0)-Step(0, Hoejde), lngColor

Me.ScaleMode = 3
Hoejde = Me.Height
lngColor = RGB(255, 0, 0)
Me.Line (1200, 0)-Step(0, Hoejde), lngColor
End Sub
Avatar billede spejder_leon Nybegynder
23. maj 2009 - 13:21 #3
Takker for input, men problemet er ikke at tegne stregerne, problemet er at få summeringstallene til at stå nederst på rapporten. De kan ikke stå i foden da nogle fakturaer naturligt har mere end een side.
Avatar billede mugs Novice
23. maj 2009 - 13:56 #4
" De kan ikke stå i foden da nogle fakturaer naturligt har mere end een side."

Hvis du bruger rapportfoden, burde summeringen da komme til sidst på rapporten uanset antal sider.
Avatar billede spejder_leon Nybegynder
23. maj 2009 - 14:11 #5
Jo, det kan du sige, men rapportfod skrives hellerikke nederst på siden. Den skrives under hvad der ellers er på siden pånær sidefod.


Det jeg vil er at have et felt til at stå nederst på siden og ikke blot der hvor detalje sektionen stopper.
Avatar billede spejder_leon Nybegynder
23. maj 2009 - 14:40 #6
Løsningen er givet her....


http://support.microsoft.com/kb/208979
Avatar billede spejder_leon Nybegynder
23. maj 2009 - 14:40 #7
Jeg anvendte metode 3
Avatar billede spejder_leon Nybegynder
23. maj 2009 - 17:23 #8
hmmm.... og så alligevel ikke...

Placeringen er glimrende sålænge detaljesektionen er relativ smal (1 linie), Men hvis man som jeg har nogle varetekster der kan blive mere end en linie, så hopper det i havet, da koden baseres på standardhøjden af detalje sektionen og ikke den strukne højde som kommer når tekstboksen med varebeskrivelsen bliver mere end een linie.

Nu er jeg tilbage ved at måtte nøjes med at skrive summeringerne i pagefooter. og løse problemet med udskrift over flere sider ved at skjule pagefooteren på de sider der er før sidste side.

Min udfordring er nu, hvordan jeg tæller hvilken side der er den sidste i en faktura? -Jeg har til tider mere end en faktura i rapporten.
Avatar billede mugs Novice
23. maj 2009 - 18:55 #9
Jeg har ikke rodet med dit problem siden du annoncerede, at det var løst, og nu har jeg knap tid, så nedennævnte er blot en ide:

Men hvis du grupperer din rapport efter et fakturanummer og viser en gruppefod, er det så ikke muligt at indsætte en subtotal i gruppefoden?
Avatar billede spejder_leon Nybegynder
24. maj 2009 - 06:41 #10
-Ja, det var lige vel hurtigt, men for netop ikke at spilde andres tid...

- Gruppefoden er jo umiddelbart et godt sted, den er bare ikke justeret mod bunden af rapporten.

Jeg vil forsøge at lave summeringen i sidefoden, og så noget tællerværk der kan angive om det er sidste side af en faktura (ud fra faktura nr. ell. lign)

Input modtages gerne hertil.
Avatar billede spejder_leon Nybegynder
27. maj 2009 - 12:29 #11
Hej så ser det ud til at være lykkedes.

ved brug af: http://www.mvps.org/access/reports/rpt0013.htm

og følgende kaldt fra footer formatering event.

Option Compare Database
Option Explicit

Dim GrpArrayPage(), GrpArrayPages()
Dim GrpNameCurrent As Variant, GrpNamePrevious As Variant
Dim GrpPage As Integer, GrpPages As Integer


Public Sub hideFoot()
  txtArr.Visible = False
  bf1.Visible = False
  bf2.Visible = False
  bf3.Visible = False
 
End Sub

Public Sub showFoot()
  txtArr.Visible = True
  bf1.Visible = True
  bf2.Visible = True
  bf3.Visible = True
 
End Sub

Private Sub Sidefodsektion_Format(Cancel As Integer, FormatCount As Integer)

'************ Code Start *************
' This code was originally written by James H Brooks.
' It is not to be altered or distributed,
' except as part of an application.
' You are free to use it in any application,
' provided the copyright notice is left unchanged.
'
' Code Courtesy of
' James H Brooks
'
Dim i As Integer
  If Me.Pages = 0 Then
    ReDim Preserve GrpArrayPage(Me.Page + 1)
    ReDim Preserve GrpArrayPages(Me.Page + 1)
    GrpNameCurrent = Me!fakturaId
    If GrpNameCurrent = GrpNamePrevious Then
        GrpArrayPage(Me.Page) = GrpArrayPage(Me.Page - 1) + 1
        GrpPages = GrpArrayPage(Me.Page)
            For i = Me.Page - ((GrpPages) - 1) To Me.Page
                GrpArrayPages(i) = GrpPages
            Next i
    Else
        GrpPage = 1
        GrpArrayPage(Me.Page) = GrpPage
        GrpArrayPages(Me.Page) = GrpPage
    End If
  Else
    Me!ctlGrpPages = "Side " & GrpArrayPage(Me.Page) & " af " & GrpArrayPages(Me.Page)
    If GrpArrayPage(Me.Page) = GrpArrayPages(Me.Page) Then
      ' Show elements
      showFoot
    Else
      ' Hide elements
      hideFoot
    End If
  End If
  GrpNamePrevious = GrpNameCurrent
End Sub
'************ Code End *************
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester