Avatar billede cgleerup Nybegynder
04. marts 2002 - 13:14 Der er 23 kommentarer og
2 løsninger

Nok mest terry og thomasjepsen

For lang tid siden hjalp i med følgende eankode beregning. Men efter en mindre ændring af koden er der nu opstået en fejl i afrundingsdelen. Der skal rundet OP til nærmeste hele 10er:

Koden er således:
Me![type_beregn] = DLookup("[ean_type]", "type", "[Autonummer]=" & Me![Type_Opslag])

Me.[eandk_beregn] = "540610" & Me.[type_beregn] & Me.Varenummeret
Me.[eanse_beregn] = "540611" & Me.[type_beregn] & Me.Varenummeret
Me.[eanno_beregn] = "540612" & Me.[type_beregn] & Me.Varenummeret
Me.[eanfi_beregn] = "540613" & Me.[type_beregn] & Me.Varenummeret

Me.[eandket] = (Val(Mid([eandk_beregn], 1, 1)) + Val(Mid([eandk_beregn], 3, 1)) + Val(Mid([eandk_beregn], 5, 1)) + Val(Mid([eandk_beregn], 7, 1)) + Val(Mid([eandk_beregn], 9, 1)) + Val(Mid([eandk_beregn], 11, 1))) + ((Val(Mid([eandk_beregn], 2, 1)) + Val(Mid([eandk_beregn], 4, 1)) + Val(Mid([eandk_beregn], 6, 1)) + Val(Mid([eandk_beregn], 8, 1)) + Val(Mid([eandk_beregn], 10, 1)) + Val(Mid([eandk_beregn], 12, 1))) * 3)
Me.[eanseet] = (Val(Mid([eanse_beregn], 1, 1)) + Val(Mid([eanse_beregn], 3, 1)) + Val(Mid([eanse_beregn], 5, 1)) + Val(Mid([eanse_beregn], 7, 1)) + Val(Mid([eanse_beregn], 9, 1)) + Val(Mid([eanse_beregn], 11, 1))) + ((Val(Mid([eanse_beregn], 2, 1)) + Val(Mid([eanse_beregn], 4, 1)) + Val(Mid([eanse_beregn], 6, 1)) + Val(Mid([eanse_beregn], 8, 1)) + Val(Mid([eanse_beregn], 10, 1)) + Val(Mid([eanse_beregn], 12, 1))) * 3)
Me.[eannoet] = (Val(Mid([eanno_beregn], 1, 1)) + Val(Mid([eanno_beregn], 3, 1)) + Val(Mid([eanno_beregn], 5, 1)) + Val(Mid([eanno_beregn], 7, 1)) + Val(Mid([eanno_beregn], 9, 1)) + Val(Mid([eanno_beregn], 11, 1))) + ((Val(Mid([eanno_beregn], 2, 1)) + Val(Mid([eanno_beregn], 4, 1)) + Val(Mid([eanno_beregn], 6, 1)) + Val(Mid([eanno_beregn], 8, 1)) + Val(Mid([eanno_beregn], 10, 1)) + Val(Mid([eanno_beregn], 12, 1))) * 3)
Me.[eanfiet] = (Val(Mid([eanfi_beregn], 1, 1)) + Val(Mid([eanfi_beregn], 3, 1)) + Val(Mid([eanfi_beregn], 5, 1)) + Val(Mid([eanfi_beregn], 7, 1)) + Val(Mid([eanfi_beregn], 9, 1)) + Val(Mid([eanfi_beregn], 11, 1))) + ((Val(Mid([eanfi_beregn], 2, 1)) + Val(Mid([eanfi_beregn], 4, 1)) + Val(Mid([eanfi_beregn], 6, 1)) + Val(Mid([eanfi_beregn], 8, 1)) + Val(Mid([eanfi_beregn], 10, 1)) + Val(Mid([eanfi_beregn], 12, 1))) * 3)

Dim eandkx1 As Single
Dim eansex1 As Single
Dim eannox1 As Single
Dim eanfix1 As Single

Dim AfrundetResultat As Integer
Me.[eandkto] = IIf(Me.[eandket] Mod 10 = 0, eandkx1, Int(Me.[eandket] / 10 + 1) * 10)
Me.[eandk] = (Me.[eandk_beregn] & (Me.[eandkto] - Me.[eandket]))

Dim AfrundetResultatse As Integer
Me.[eanseto] = IIf(Me.[eanseet] Mod 10 = 0, eansex1, Int(Me.[eanseet] / 10 + 1) * 10)
Me.[eanse] = (Me.[eanse_beregn] & (Me.[eanseto] - Me.[eanseet]))

Dim AfrundetResultatno As Integer
Me.[eannoto] = IIf(Me.[eannoet] Mod 10 = 0, eannox1, Int(Me.[eannoet] / 10 + 1) * 10)
Me.[eanno] = (Me.[eanno_beregn] & (Me.[eannoto] - Me.[eannoet]))

Dim AfrundetResultatfi As Integer
Me.[eanfito] = IIf(Me.[eanfiet] Mod 10 = 0, eannox1, Int(Me.[eanfiet] / 10 + 1) * 10)
Me.[eanfi] = (Me.[eanfi_beregn] & (Me.[eanfito] - Me.[eanfiet]))
Avatar billede cgleerup Nybegynder
04. marts 2002 - 13:16 #1
Jeg har ændret Dim eandkx1 as single, her stod der eandket før - og det gav tilsyneladende en dobbelt værdi! - men jeg er i tvivl om, hvorvidt det er det rigtigt sted jeg har ændret i resten af koden, håber i har tid til at hjælpe hurtigt!
04. marts 2002 - 13:20 #2
Øh, jeg er ikke helt med på hvad du vil, men nedenstående funktion afrunder alle tal til det tal du angiver:

Public Function Afrund(Tal As Single, Optional Nærmeste As Long = 1, Optional RundOp As Boolean = True)
    If Nærmeste = 1 Then
        Afrund = Int(Tal + IIf(RundOp = True, 1, 0))
    Else
        Afrund = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0)) * Nærmeste
    End If
End Function

Ek:
Afrund([Tal], 10, true) afrunder op til nærmeste 10'er.

Hjælper det?
Avatar billede cgleerup Nybegynder
04. marts 2002 - 13:29 #3
Det er som beskrevet til udregning af en såkaldt EAN-Kode, afrundingsdelen ligger, tror jeg nok, her:

Me.[eandkto] = IIf(Me.[eandket] Mod 10 = 0, eandkx1, Int(Me.[eandket] / 10 + 1) * 10)
Avatar billede cgleerup Nybegynder
04. marts 2002 - 13:36 #4
Jeg er rimelig ny, så hjælp mig venligst!
04. marts 2002 - 13:38 #5
Så skulle du bare kunne skrive:
Me!eandkto = Afrund(Me!eandkto, 10, True)

/Thomas
04. marts 2002 - 13:43 #6
Og det samme gælder de andre linier:

Me!eandkto = Afrund(Me!eandkto, 10, True)
Me!eandk = (Me!eandk_beregn & (Me!eandkto] - Me!eandket))
Me!eanseto = Afrund(Me!eanseto, 10, True)
Me!eanse = (Me!eanse_beregn & (Me!eanseto - Me!eanseet))
Me!eannoto =  Afrund(Me!eannoto, 10, True)
Me!eanno = (Me!eanno_beregn & (Me!eannoto - Me!eannoet))
Me!eanfito = Afrund(Me!eanfito , 10, True)
Avatar billede cgleerup Nybegynder
04. marts 2002 - 13:46 #7
virker ikke! Bin there done that!

Men kan du ikke greje den løsning jeg fik af jer for et par nåneder siden?
Avatar billede terry Ekspert
04. marts 2002 - 14:07 #8
Hi cglerup> I am glad to say that I dont think it was me that helped you here although I recall it was up at some time! wasnt it mugs?

MUUUuuuuGGGGGss!!!..... Can you hear us?
Avatar billede cgleerup Nybegynder
04. marts 2002 - 14:14 #9
hvis jeg har feltnavne, osv - er der så mulighed for at i kan hjælpe mig ud af det her lettere rodet gang kode?
Avatar billede terry Ekspert
04. marts 2002 - 14:24 #10
cgleerup>what is the actual problem? are you saying that eandket was declared twice and you altered the local to eandkx1, and since doing that you ae not sure if you have altered correctly?

If you send me th eprogram I will take a look this evening and see if I can can see what is happening, but I cant see from here
04. marts 2002 - 14:28 #11
Ja, du må lige uddybe det lidt. Hvilken fejl kommer der og i hvilken linie?
Avatar billede cgleerup Nybegynder
04. marts 2002 - 14:28 #12
Ja det er præcis det jeg mener, af en eller anden grund havde jeg en dublikeret værdi, så ændrere jeg på terrys anbefaling denne variabel ting -Dim eandket as single til dim eandkx1 as single - men så skulle det resterende kode jo også ændres på de steder hvor den reffererede til eandkx1 og jeg er ikke sikker på at jeg har rette det de rigtige steder!
Avatar billede cgleerup Nybegynder
04. marts 2002 - 14:29 #13
Lige nu kommer der INGEN fejl - som meddelelser, men den runder tilsynelande forkert af - i hvertfald har jeg fået nogel forkerte resultater hvor den har rundet til 0 i stedet for til 10
Avatar billede terry Ekspert
04. marts 2002 - 14:38 #14
You are more than likely refering to this question http://www.eksperten.dk/spm/177871 where I suggested yuo should move the declarations to the start of the procedure!
I never did find out what the actual problem was though, and I still dont know whatit is now. It isnt always easy to find a problem just looking at code, sometimes it is necessary to have HANDS ON and debug through the code.
Avatar billede cgleerup Nybegynder
04. marts 2002 - 14:41 #15
jeg prøver lige at beregne skidtet manuelt, og vender så tilbage med en konlussion på, i hvilken retning vi skal kigge efter fejl!

giv mig lige 15 sek.
04. marts 2002 - 14:41 #16
Jeg fandt også lige ud af, at der var en mindre fejl i Afrund-koden, som gjorde at 0 blev afrundet til 10 :o(

Prøv med denne i stedet:

Public Function Afrund(Tal As Single, Optional Nærmeste As Long = 1, Optional RundOp As Boolean = True)
    If Nærmeste = 1 Then
        Afrund = Int(Tal + IIf(RundOp = True, 1, 0))
    Else
        If Int(Tal / Nærmeste) = Tal / Nærmeste Then
            Afrund = Tal
        Else
            Afrund = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0)) * Nærmeste
        End If
    End If
End Function
Avatar billede cgleerup Nybegynder
04. marts 2002 - 14:53 #17
I feltet eankode_beregn ligger tallet 540610235554, udfra dette tal skal jeg beregne et checkciffer - dette gøres på følgende måde hverandet tal vægtes med 1 og hvertandet med 3 - således 1-3-1-3-1-3-1-3- osv. når dette er gjort rundes tallet op til nærmeste hele tal, dividerbart med 10 eksempelvis skal 174 rundes op til 180.

Gøres dette har man således 180 og trækker så 174 fra det giver et checkciffer på 6 dette sættes i rumpen af det tal vi have i feltet eankode_beregn. Resultatet af hele denne udregning skal så placeres i feltet eandk

Hvis dette kan gøres på en nemmere måde er det også en løsning, men jeg skal gerne bruge en rimelig god forklarring - der gives gerne et par ekstra point for en hurtig brugbar løsning!
Avatar billede cgleerup Nybegynder
04. marts 2002 - 15:01 #18
kan det lade sig gøre?
Avatar billede cgleerup Nybegynder
04. marts 2002 - 15:11 #19
haloooo, giv lige et ja eller et nej!
Avatar billede terry Ekspert
04. marts 2002 - 15:13 #20
:o) believe it or not, we do have work to do too! (NEJ) cant help with that one cgleerup!
Avatar billede cgleerup Nybegynder
04. marts 2002 - 15:17 #21
jeg har koden der beregner 174 og placere dette tal i eandket men mangler den der kan siger at eandkto skal være lig med eandkto rundetop til nærmeste hele tal dividerbart med 10!
04. marts 2002 - 15:21 #22
vent 10 min, cgleerup....så er jeg tilbage!
Avatar billede cgleerup Nybegynder
04. marts 2002 - 15:23 #23
Kanon!
04. marts 2002 - 15:44 #24
Jeg ved ikke om jeg er på rette spor, men nedestående kode beregner eandket:
Public Function Beregn_eandket(eankode_beregn As String)
    Dim n As Integer
    Dim CheckSum As Long
    For n = 1 To Len(eankode_beregn)
        If n Mod 2 = 0 Then
            CheckSum = CheckSum + Mid(eankode_beregn, n, 1) * 3
        Else
            CheckSum = CheckSum + Mid(eankode_beregn, n, 1)
        End If
    Next n
    Beregn_eandket = CheckSum
End Function

Derved kan du sige:
Me!eandket = Beregn_eandket(Me!eandk_beregn)
Me!eandkto = Afrund(Me!eandkto, 10, true)

Hvad giver det?
Avatar billede cgleerup Nybegynder
05. marts 2002 - 14:23 #25
Jeg fik løst problemet efter adskillige timer med stærk kaffe, så omkring klokken 03.00 natten til idag lykkedes det mig at nå hertil - og faktisk er det jo logisk.

Me.[eandkto] = IIf(Me.[eandket] Mod 10 = 0, me.[eandket], Int(Me.[eandket] / 10 + 1) * 10)

Men i har ydet en ihærdig indsats!
og det giver naturligvis point for SVAR
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