08. juni 2004 - 21:40Der er
6 kommentarer og 1 løsning
Bundte postnumre
Hej
Jeg arbejder iet firma der blandt andet pakker adresseret månedsmagasiner til Post Danmark. Adresserne på måndesmagasinerne blive printe med nogle industri inkjet printere. Adresserne modtager vi fra vores kunder. Disse databaser forbereder og sortere vi i en bestemt postnr. rækkefølge og eksportere til en txt. fil. Der er imellem 1000 - 400.000 adr. i hver database.
Efter at magasinerne har fået printet adresserne på, bliver de bundtet og snørret. Hver bundt må kun indeholde det samme postnummer. Bundtstørrelsen er afhængigt af magasinest tykkelse. Normal bundter vi dem i antal af 20 stk. eller 25 stk., nogle gange i bundter af 100 stk. , hvis magasiner er meget tynde. Bundterne bliver derefter stablet på paller,og her er det vigtigt at bundter har samme str. ellers er det umuligt at stable.
Jeg vil gerne have en fuktion som kan lave en markering hvergang der et bundt, udfra nogle variable kriterier. som heddder
Minimum bundtstr. = 10 stk. Normal bundtstr. = 20 stk. Maximum bundtstr. = 25 stk.
Hvis der feks er 433 stk til postnr. 2100 Kbh
Udfra overstående kriterier vil der blive markeret følgende: 21 bundter med 20 stk. i hvert bundt = 420 ex. 1 bundt med 13 stk = 13 ex.
Et andet eksempel kunne være 207 stk. til 4000 Roskilde
Udfra overstående kriterier vil der blive markeret følgende: 9 bundter med 20 stk. i hvert bundt = 180 ex. 1 bundt med 17 stk = 17 ex. 1 bundt med 10 stk = 10 ex.
Dette er pga. vi fastsat, at ingen bundter må være under 10 stk. og ingen bundter må være over 25 stk.
Alle de postnr hvor der så er under 10 stk til vil fra sorteret og lagt i bunden og soreret efter et andet princip.
Jeg håber i forstår hvad det er jeg søger. Jeg har talt med en af mine bekendte, han mente det kunne laves i et filter, men han vidtse ikke hvordan.
Jeg forstår ikke helt: "Jeg vil gerne have en fuktion som kan lave en markering hvergang der et bundt"!? Hvordan og hvor skal denne markering laves? Er det i tabellen, du vil have markeret et bundtnr på hver post? eller? Kan du give en illustration af hvordan resultatet skal se ud?
De inkjet printer som printer adresserne, har indbygget noget software, som kan styrer en såkaldt stacker, den kan bundte magasiner i bundter af eks, 20 stk. Men for at den kan dette, kræver det at der i den txt. fil, som indeholder adresserne er et felt som fortæller hvornår der er et bundtskift. Så ja det skal med på hver post. Jeg havde tænkt mig at det skulle være et 1 tal hvergang der var et bundtskift og et 0 på de poster der ligger imellem 1 tallerne.
ok, jeg når ikke at kigge på det i aften, da jeg skal sidde og arbejde hele natten :O( Men hvis der ikke er dukket andre forslag op i morgen formiddag, skal jeg gerne kigge på det.
Her er mit bud, jvf mail-korrepondance. Har du fået testet den?
Public Function Bundte(Sortering As String) On Error Resume Next Dim cn As ADODB.Connection Dim rsgrupperet As ADODB.Recordset Dim rsAdresser As ADODB.Recordset Dim Antal As Long Dim Rest As Byte Dim tæller As Long
Set cn = CurrentProject.Connection Set rsgrupperet = New ADODB.Recordset Set rsAdresser = New ADODB.Recordset
CurrentDb.QueryDefs("QryGrupperet").SQL = "SELECT bdt, Count(bdt) AS Antal FROM [" & GetTabelnavn & "] GROUP BY bdt ORDER BY bdt" CurrentDb.QueryDefs("QrySætMarkeringer").SQL = "UPDATE [" & GetTabelnavn & "] SET Bundtskift = GetMarkerImellen() WHERE bdt In (select bdt From QryGrupperet)"
rsgrupperet.Open "QryGrupperet", cn, adOpenStatic
'marker alle poster som værende 'midt imellem' cn.Execute "QrySætMarkeringer"
Status "Opdaterer bundter!", False, rsgrupperet.RecordCount + 1, "Opdaterer bundter!"
Do Until rsgrupperet.EOF Status "Opdaterer " & rsgrupperet!bdt
'Find ud af antal spring Select Case True Case rsgrupperet!Antal <= GetMaxBundtStr Antal = 0 Rest = 25 Case rsgrupperet!Antal Mod GetNormalBundtStr = 0 Antal = rsgrupperet!Antal / GetNormalBundtStr Rest = 0 Case rsgrupperet!Antal Mod GetNormalBundtStr > 0 Rest = rsgrupperet!Antal Mod GetNormalBundtStr If Rest > 9 Then Antal = Int(rsgrupperet!Antal / GetNormalBundtStr) Else Antal = Int(rsgrupperet!Antal / GetNormalBundtStr) - 1 End If End Select rsAdresser.Open "select * from [" & GetTabelnavn & "] where bdt = '" & rsgrupperet!bdt & "' ORDER BY IDTal " & Sortering, cn, adOpenKeyset, adLockOptimistic If Antal > 0 Then For tæller = 1 To Antal rsAdresser.Move GetNormalBundtStr If tæller = 1 Then rsAdresser.MovePrevious rsAdresser!Bundtskift = GetMarkerBundtskift rsAdresser.Update Next tæller End If If rsAdresser.RecordCount - rsAdresser.AbsolutePosition >= GetMaxBundtStr Then rsAdresser.Move rsAdresser.RecordCount - rsAdresser.AbsolutePosition - GetMinBundtStr rsAdresser!Bundtskift = GetMarkerBundtskift rsAdresser.Update End If
'sæt markering sidst i recordsettet rsAdresser.MoveLast rsAdresser!Bundtskift = GetMarkerPostnrSkift rsAdresser.Update rsAdresser.Close
rsgrupperet.MoveNext Loop Status "", True rsgrupperet.Close Set rsgrupperet = Nothing rsAdresser.Close Set rsAdresser = Nothing cn.Close Set cn = Nothing End Function
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.