[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Progress mnie oszukuje ;-)



Witam.

Nie wiem, czy jest to znany problem, czy tez jest to moj brak wiedzy...
Otoz przy zlozeniu dwoch buforow tej samej tabeli w jednej petli FOR EACH,
kiepsko wypada sortowanie... 

Zeby przyblizyc problem, opowiem historie...

W firmie ubezpieczajacej samochody jest sobie drzewiasta struktura
agentow (zalozmy, ze ma glegokosc 2). 

                 Szef
               /   |  \
           Agent Agent Agent

Umowe na ubezpieczenie podpisuje agent, ale w prowizji partycypuje
szef. Struktura agentow sie zmienia.  Agent moze awansowac, szef zostac
zdegradowany, albo wyrzucony z firmy ;-)
Dlatego na umowie chcemy pamietac jaka byla ich struktura w momencie
podpisania ubezpieczenia.

Tworze sobie nastepujaca strukture    

tabela1:	ubezpieczenie
pola:		id_ubezpieczenia AS INT
		id_agenta	 AS INT EXTENT 2

tabela2:	agent
		id_agenta	AS INT
		nazwisko	AS CHAR
		imie		AS CHAR

W polu ubezpieczenie.id_agenta[1] jest id agenta,
w polu ubezpieczenie.id_agenta[2] jest id szefa (obydwa id w momencie
podpisania ubezpieczenia)

I teraz nieszczesna petla

DEF BUFFER xagent FOR agent.

FOR EACH ubezpieczenie WHERE...,
FIRST agent WHERE agent.id_agenta = ubezpieczenie.id_agenta[1],
FIRST xagent WGERE xagent.id_agenta = ubezpieczenie.id_agenta[2]

BREAK BY xagent.id_agenta
BY agent.nazwisko:
  
  IF FIRST-OF(xagent.id_agenta) THEN DO:

  END.

  IF FIRST-OF(agent.nazwisko) THEN DO:

  END.

END.

Czyli chce sobie pogrupowac ubezpieczenia wg szefow, a w ich obrebie
wg agentow alfabetycznie.

Bardzo dziwne jest to, ze drugi FIRST-OF uruchamia zawarty w nim fragment 
kodu, ale sortowanie odbywa sie nie po nazwisku agenta, ale wg indeksu
PRIMARY (w tym wypadku pole id_agenta).

XREF wskazuje wykorzystanie indeksu PRIMARY, ale SORT-ACCESS jest wg.
nazwiska. Czyli niby wszystko OK.

Jakies sugestie?

Pozdrawiam.
Tomek

 ________ 
|_   _|__|Tomasz Fidecki, Progress Analyst/Programmer, UNIX fan 
  | || _| tomek@pekao-fs,com,pl, phone +48 501 136 122 IRC Fido__
  |_||_|  My opinion is just mine!

------
Strona WWW:     http://pluton.pol.lublin.pl/pugpl/index.htm
Obsluga listy:  listserv@zeto.bydgoszcz.pl
Archiwum listy: http://www.zeto.bydgoszcz.pl/progress/index.html
------