Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-11-21, 23:36x



Odpowiedz w temacie  [ Posty: 12 ] 
Sortowanie w strukturze record 
Autor Wiadomość

Rejestracja: 2010-02-10, 21:24
Posty: 260
Pomógł: 4
Post Sortowanie w strukturze record
Witam,

Czy można w jakis sposób posortować dane w strukturze record?

Chodzi mi o to, że chciałbym z pojedynczych dokumentów (np WZ) wystawić zbiorcze dokumenty WZ na kontrahenta. Informacje o dokumentach i pozycjach zbieram w strukturze record, ale ostatecznie chciałbym je posortować po kodzie kontrahenta, tak by za pomocą Bioreca wystawić w ostatnim etapie dokumenty WZ skumulowane na kontrahenta. Dokumenty WZ "źródłowe" muszą być posortowane na liście po numerze bo działa również funkcja kasująca która musi dokumenty kasować od ostatniego w serii.


2013-10-11, 11:51
Wyświetl profil
Autor Wiadomość
 


Awatar użytkownika

Rejestracja: 2013-09-05, 11:53
Posty: 126
Pomógł: 8
Post Re: Sortowanie w strukturze record
jeżeli masz 'tablicę elementów typu record' to najprościej będzie użyć bąbelkowego sortowania :-)
chyba, że musisz mieć mega-wydajność i masz dużą ilość danych to pokombinuj trudniejsze algorytmy


2013-10-11, 12:11
Wyświetl profil

Rejestracja: 2010-02-10, 21:24
Posty: 260
Pomógł: 4
Post Re: Sortowanie w strukturze record
A co to jest bąbelkowe sortowanie? Masz jakiś przykład?


2013-10-11, 12:47
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: Sortowanie w strukturze record
Ta wiadomość była pomocna.(1)
Kod:
record rWZ
   string       kod      [40]
   long      id   
endrec

rWz wz(3)
int i

wz(1).kod = "WZ/003/2013"
wz(1).id = 65545

wz(2).kod = "WZ/001/2013"
wz(2).id = 65546


wz(3).kod = "WZ/002/2013"
wz(3).id = 65547

// wypełnienie mapy sortującej (indeksu)

mapValue mvSort
mvSort.Type( long )

for i = 1 to i > Size( wz )
   mvSort.Set( wz(i).kod, i ) // sortowanie po kod   
//   mvSort.Set( (using "%l",wz(i).id), i ) // sortowanie po id   
next i

mvSort.Sort()

// Tablica rekordów pozostaje nie posortowana
// Pobieramy z niej rekordy wg posortowanego indeksu

print "Tablica wz"+lf

for i = 1 to i > Size( wz )
   print using "%s %l" + lf, wz( i ).kod, wz( i ).id
next i

print "Tablica wz wg. posortowanej mapy"+lf

for i = 1 to i > Size( wz )
   print using "%s %l" + lf, wz( mvSort.Get( i ) ).kod, wz( mvSort.Get( i ) ).id
next i

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2013-10-11, 13:48
Wyświetl profil

Rejestracja: 2010-02-10, 21:24
Posty: 260
Pomógł: 4
Post Re: Sortowanie w strukturze record
OOO, Dzieki :)


2013-10-11, 14:45
Wyświetl profil
Awatar użytkownika

Rejestracja: 2013-09-05, 11:53
Posty: 126
Pomógł: 8
Post Re: Sortowanie w strukturze record
wojtek pisze:
A co to jest bąbelkowe sortowanie? Masz jakiś przykład?


to takie bardzo proste sortowanie
polega na tym, że tablicę N-elem sprawdzasz od 1 do N-1 (pętlą;-)) i sprawdzasz który element (wybrane pole) jest 'cięższy' - ten niżej czy ten wyżej
jak trzeba to zamieniasz je miejscami (całe rekordy) i kontynuujesz przebieg
potem powtarzasz przebieg, do momentu aż nie trzeba będzie nic 'przestawiać'

w ten sposób 'lżejsze' elementy w każdym przebiegu będą 'szły do góry' coś jak bąbelki w szklance z zimnym piwem o który teraz sobie pewnie każdy pomyśli ;-)
aż wszystkie bąbelki wypłyną albo zabraknie piwa

:-)


2013-10-11, 16:55
Wyświetl profil

Rejestracja: 2013-10-11, 19:10
Posty: 4
Post Re: Sortowanie w strukturze record
O sortowaniu bąbelkowym możesz poczytać tutaj: http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0006.php


2013-10-11, 19:15
Wyświetl profil
Ekspert
Ekspert
Awatar użytkownika

Rejestracja: 2008-04-18, 18:52
Posty: 5169
Pomógł: 59
Post Re: Sortowanie w strukturze record
ale czemu babelki - lepiej uzyc quick sort - tak samo prosty algorytm a sporo szybszy......
tu opis - http://toyoteczka.mainrc.com/pliki/asd/quicksort.pdf

PS. widzę ze kolega wojtek na zajęcia algorytmy i struktury danych to chyba nie uczęszczał ;)


2013-10-14, 00:43
Wyświetl profil

Rejestracja: 2008-03-10, 14:01
Posty: 593
Post Re: Sortowanie w strukturze record
nie działa mi sortowanie po PocId
kawałek kodu:
Kod:
record rFZ
   string PocId [25]
   string Quantity [25]
   string Amount [25]
EndRec

   mapValue mvSort
   mvSort.type(int)
...
if ...
...
//pocz.sortowania po PocId
   for i=1 to i>=iItemsCount
      xmlPocId=xmlPocIdList.item(i)
      xmlQuantity=xmlQuantityList.item(i)
      xmlAmount=xmlAmountList.item(i)       
      tblItems(i).Quantity=xmlQuantity.text
      tblItems(i).Amount=xmlAmount.text
      tblItems(i).PocId=xmlPocId.text
      grow tblItems,1
   next i

   for i=1 to i>=size(tblItems)
      mvSort.Set(tblItems(i).PocId,i)
   next i
//koniec sort. po POCid   
...
for j=1 to j>=size(tblItems)
print tblItems(mvSort.Get(j)).PocId
next j
...
endif


Proszę o pomoc ;)

_________________
zz


2018-07-13, 00:17
Wyświetl profil

Rejestracja: 2016-05-17, 20:41
Posty: 392
Pomógł: 75
Post Re: Sortowanie w strukturze record
Ta wiadomość była pomocna.(1)
Po tej pętli:
Kod:
   for i=1 to i>=size(tblItems)
      mvSort.Set(tblItems(i).PocId,i)
   next i

brakuje Ci sortowania mapy:
Kod:
mvSort.sort()


Nota bene to wcale nie jest sortowanie bąbelkowe, tylko standardowe sortowanie na niższym poziomie niż ambasic (c#? c++?). Znaczy prawdopodobnie chyba quicksort.

Sortowanie bąbelkowe zwykle wygląda mniej więcej tak jak niżej (nie wiem czy to działa, pisałem z pamięci ale koncepcja zwykle tak mniej więcej wygląda), i faktycznie jest bez porównania wolniejsze, szczególnie jeśli robisz to na bardzo dużej tablicy rekordów:
Kod:
for i=1 to i>n-1
    for j=i+1 to j>n
       if a(i)>a(j) then
           b = a(i)
           a(i) = a(j)
           a(j) = b
       endif
    next j
next i


2018-07-13, 23:08
Wyświetl profil

Rejestracja: 2008-03-10, 14:01
Posty: 593
Post Re: Sortowanie w strukturze record
Okazało się że mogą być dwa wpisy o identycznym PocId, po którym sortuję
(dwie dostawy na niepełne ilości, jedna faktura)
i wtedy mam w zbiorze źródłowym np. 16 pozycji a po posortowaniu 15.
Czy mozna zrobić mvSort po dwóch polach? np. PocId+Quantity

_________________
zz


2018-09-03, 12:09
Wyświetl profil

Rejestracja: 2008-03-10, 14:01
Posty: 593
Post Re: Sortowanie w strukturze record
wystarczyło zwykłe
Kod:
mvSort.Set((tblItems(i).PocId+tblItems(i).Quantity),i)

i chyba jest OK

_________________
zz


2018-09-03, 14:03
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 12 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. Record - deklaracja w procedurze

w Programowanie

zz

2

2398

2018-07-11, 15:20

zz Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. sortowanie excel

w Programowanie

supersebek

2

3454

2013-04-30, 09:05

supersebek Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Sortowanie towaru na wydruku FV

w Programy Handlowe

r2r

1

2642

2010-07-08, 12:20

wrob Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Załączniki sortowanie dokumentów wg numerów

w Programy Księgowe

r2d2

5

4302

2015-06-13, 12:49

perek Wyświetl najnowszy post



Kto jest online

Użytkownicy przeglądający to forum: Google [Bot] i 23 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant