SELECT
Het "SELECT" bevel in PxPLUS is op het eerste zicht niet echt spectaculair. Maar bij nader inzien kun je met deze instructie toch heel wat regels uit je programma wissen.
Het eerste programma is de 'klassieke' manier, om via een secundaire sleutel op 'klantnummer' in het faktuur-bestand (sale) te gaan lezen. Via het faktuurnummer gaan we dan de faktuurlijnen ophalen in het faktuur-detail-bestand (sale_itm).
0010 rem TT1A
0020 begin
0030 open (1)"sale"
0040 open (2)"sale_item"
0050 input (0,err=0050)'CS',@(10,10),'SB',"Customer number ",'SF',CUST$
0060 gosub GET_INVOICE
0070 goto 0050
1000 GET_INVOICE: ! ^1000 --------------------------------------------
1010 let K$=CUST$
1020 extract (1,key=CUST$,kno=2,dom=1030)iol=1140; goto 1150
We zetten de filepointer vlak voor de faktuur van de klant die we gekozen hebben.
We lezen via 'kno=2'.
1100 READ_INVOICE: rem ^100
1110 let K$=key(1,end=1180)
1120 if K$(1,5)>CUST$ then goto 1180
We lezen tot het einde van het bestand of tot er geen
fakturen meer zijn van onze ingetypte klantnummer.
1130 read (1)iol=1140
1140 iolist INVOICE$,DATE$,EXPDATE$,CUSTOMER$,TOTAL,NET,TAX,DISCOUNT
1150 print INVOICE$," ",DATE$," ",CUSTOMER$,TOTAL:"###B###B##0.00-"
1160 gosub GET_DETAIL
1170 goto READ_INVOICE
1180 return
2000 GET_DETAIL: rem ^1000 ------------------------------------------
2010 let D$=INVOICE$
2020 extract (2,key=INVOICE$,dom=2030)iol=2140; goto 2150
Het zetten van de filepointer op de juiste faktuur
2100 READ_DETAIL: rem ^100
2110 let D$=key(2,end=2170)
2120 if D$(1,10)>INVOICE$ then goto 2170
Ook hier weer de nodige controles om de juiste detaillijnen te kunnen lezen
2130 read (2)iol=2140
2140 iolist D_INVOICE$,LINE$,PRODUCT$,D_TOTAL,D_NET,D_TAX,D_DISCOUNT
Vermits 'TOTAL' ed. al gebruikt is in de eerste IOLIST,
moeten we ervoor zorgen dat we nu een andere naam kiezen voor de variabelen.
2150 print @(20),PRODUCT$,D_TOTAL:"###B###B##0.00-"
2160 goto READ_DETAIL
2170 return
|