home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-05-18 | 39.6 KB | 1,111 lines |
- ******************************************************************************
- * PROGRAM NAME: BIBLIO.PRG
- * LIBRARY OF PROCEDURES COMMON TO ALL BUSINESS PROGRAMS
- * SAMPLE BUSINESS APPLICATION PROGRAM
- * LAST CHANGED: 080692
- * WRITTEN BY: Borland International Inc.
- ******************************************************************************
-
- PROCEDURE Add_new
- * Add new record to database file
- * Erase previous record number from screen
- @ 0,65 SAY SPACE(15) COLOR &c_yellow.
- * Display F9 lookup key message, if lookup available
- IF lookup_ok
- DO Sho_look WITH dbf
- ENDIF
- DO Init_fld
- DO Get_data
- READ
- * Erase lookup message from screen
- @ 0,0 SAY SPACE(51)
- * If user didn't enter data into key fields, exit without saving
- IF "" = TRIM(&key.) .OR. READKEY() < 256
- RETURN
- ELSE
- * Each application checks for duplicates if duplicate keys not allowed
- * If duplicate key (when not allowed), exit from add mode without saving
- IF rec_is_dup
- * Reset status flag and exit
- rec_is_dup = .F.
- RETURN
- ELSE
- * Append and save validated record
- DO Sav_data
- GO record_num
- ENDIF
- ENDIF
- RETURN
-
- PROCEDURE Bar_def
- * Define the main popup OPTION MENU, main_mnu
- mesg = "Druk op eerste letter van de optie of selecteer en druk op <Return>"
- DEFINE POPUP main_mnu FROM 2,58 TO 22,78 MESSAGE mesg
- DEFINE BAR 1 OF main_mnu PROMPT "== OPTIEMENU ==" SKIP
- DEFINE BAR 2 OF main_mnu PROMPT " Toevoegen record"
- DEFINE BAR 3 OF main_mnu PROMPT " Bewerken record"
- DEFINE BAR 4 OF main_mnu PROMPT " Wissen record"
- DEFINE BAR 5 OF main_mnu PROMPT "-------------------" SKIP
- DEFINE BAR 6 OF main_mnu PROMPT " Volgend record"
- DEFINE BAR 7 OF main_mnu PROMPT " Record terug"
- DEFINE BAR 8 OF main_mnu PROMPT " Eerste record"
- DEFINE BAR 9 OF main_mnu PROMPT " Laatste record"
- DEFINE BAR 10 OF main_mnu PROMPT " Overslaan records"
- DEFINE BAR 11 OF main_mnu PROMPT " Zoeken record"
- DEFINE BAR 12 OF main_mnu PROMPT "-------------------" SKIP
- DEFINE BAR 13 OF main_mnu PROMPT " Inhoud database"
- DEFINE BAR 14 OF main_mnu PROMPT " Uitvoeren rapport"
- DEFINE BAR 15 OF main_mnu PROMPT " Groep records" SKIP FOR dbf = "REKN_REC"
- DEFINE BAR 16 OF main_mnu PROMPT " Aantal records"
- DEFINE BAR 17 OF main_mnu PROMPT " Database indexeren"
- DEFINE BAR 18 OF main_mnu PROMPT " Hulp"
- DEFINE BAR 19 OF main_mnu PROMPT " Stop & hoofdmenu"
- * Define the popup dest_mnu for printing reports to a destination
- DEFINE POPUP dest_mnu FROM 13,10 TO 19,38 MESSAGE mesg
- DEFINE BAR 1 OF dest_mnu PROMPT "======= BESTEMMING =======" SKIP
- DEFINE BAR 2 OF dest_mnu PROMPT " Printer"
- DEFINE BAR 3 OF dest_mnu PROMPT " Bestand"
- DEFINE BAR 4 OF dest_mnu PROMPT " Scherm"
- DEFINE BAR 5 OF dest_mnu PROMPT " Terug naar optiemenu"
- * Define the popup rpt_mnu for printing reports to a destination
- DEFINE POPUP rpt_mnu FROM 11, 5 TO 17,38 MESSAGE mesg
- DEFINE BAR 1 OF rpt_mnu PROMPT "============ RAPPORTEN ===========" SKIP
- DEFINE BAR 2 OF rpt_mnu PROMPT " Database-rapport: " + dbf
- DEFINE BAR 3 OF rpt_mnu PROMPT " Verzendlijst: " + mlist ;
- SKIP FOR mlist = "NIET BESCHIKBAAR"
- DEFINE BAR 4 OF rpt_mnu PROMPT " Rapport eigen programma: " + cust_rpt ;
- SKIP FOR cust_rpt = "N/B"
- DEFINE BAR 5 OF rpt_mnu PROMPT " Einde en naar optiemenu"
- * Define which procedures are executed by the defined popups
- ON SELECTION POPUP main_mnu DO Barpop
- ON SELECTION POPUP rpt_mnu DO Barpop_r
- ON SELECTION POPUP dest_mnu DO Barpop_d
- * Define windows for text, msgs, etc.
- DEFINE WINDOW alert FROM 15, 3 TO 22,46 PANEL COLOR &c_alert.
- DEFINE WINDOW duplicat FROM 15, 5 TO 21,70 PANEL COLOR &c_alert.
- DEFINE WINDOW lister FROM 5, 3 TO 22,74 PANEL COLOR &c_list.
- DEFINE WINDOW look FROM 6, 5 TO 16,65 PANEL COLOR &c_list.
- DEFINE WINDOW memo_windo FROM 7, 4 TO 19,75 PANEL COLOR &c_list.
- RETURN
-
- PROCEDURE Barpop
- * Perform action selected by user from OPTION MENU bars
- DO CASE
- * BAR() = 1 is title of menu
- CASE BAR() = 2 && Record toevoegen
- DO Add_new
- CASE BAR() = 3 && Record bewerken
- DO Edit
- CASE BAR() = 4 && Wissen record
- DO Eraser
- CASE BAR() = 6 && Volgend record
- DO Skip_rec WITH 1
- CASE BAR() = 7 && Record terug
- DO Skip_rec WITH -1
- CASE BAR() = 8 && Eerste record
- GO TOP
- CASE BAR() = 9 && Laatste record
- GO BOTTOM
- CASE BAR() = 10 && Overslaan records
- DO Skip_rec WITH 0
- CASE BAR() = 11 && Zoeken record
- DO Find_rec WITH key, key1, keyname1, key2, keyname2, key3, keyname3
- CASE BAR() = 13 && Inhoud database
- DO List_rec
- CASE BAR() = 14 && Uitvoeren rapport
- SAVE SCREEN TO Pre_rept && Scherm opslaan
- ACTIVATE POPUP rpt_mnu
- RESTORE SCREEN FROM Pre_rept
- RELEASE SCREEN Pre_rept
- CASE BAR() = 15 && Groep records
- DO Filter
- CASE BAR() = 16 && Aantal records
- ************
- IF NETWORK()
- * Turn off file lock to count
- SET LOCK off
- DO Kount
- SET LOCK on
- ***********
- ELSE
- DO Kount
- ENDIF
- CASE BAR() = 17 && Index voor database
- ************
- IF NETWORK()
- old_tag = ORDER()
- USE (dbf) EXCLUSIVE
- IF net_choice <> 27 && controleer optie Net_err (Esc=27)
- DO Indexer
- SET EXCLUSIVE off
- USE (dbf) ORDER (old_tag)
- ENDIF
- ***********************
- ELSE
- DO Indexer
- ENDIF
- CASE BAR() = 18 && Hulp
- SET COLOR TO &c_standard.
- DO Helper
- CASE BAR() = 19 && Einde en hoofdmenu
- DEACTIVATE POPUP
- ENDCASE
- DO Dstatus && Recordnr. en filterstatus tonen
- DO Show_data && Scherm met huidig record tonen
- CLEAR GETS
- SET COLOR TO &c_popup.
- RETURN
-
- PROCEDURE Barpop_d
- * Perform action selected by user from Destination menu
- SET COLOR TO &c_popup.
- DO CASE
- * BAR() 1 is title of menu
- CASE BAR() = 2 && Uitvoer naar printer
- DO Prt_menu && Menu voor printopties activeren
- SET PRINTER on
- SET CONSOLE off
- DO Printout && Gekozen rapport uitvoeren
- SET PRINTER off
- SET CONSOLE on
- CASE BAR() = 3 && Uitvoeren naar bestand
- answer = SPACE(8)
- ACTIVATE WINDOW alert
- @ 0,0 SAY "----------- RAPPORT NAAR BESTAND ---------"
- @ 2,1 SAY "Typ bestandsnaam voor rapport: " GET answer ;
- VALID "" <> TRIM(answer) ;
- MESSAGE "Typ bestandsnaam van maximaal acht tekens"
- READ
- DEACTIVATE WINDOW alert
- SET ALTERNATE TO &answer.
- SET ALTERNATE on
- SET CONSOLE off
- GO TOP
- DO Printout && Output report or labels to file
- SET ALTERNATE off
- SET CONSOLE on
- CASE BAR() = 4 && Output to screen
- SET COLOR TO &c_standard.
- CLEAR
- * Store current page settings
- plength = _plength
- rmargin = _rmargin
- * Set page width & length for screen
- _plength = 25
- _rmargin = 80
- DO Printout && Output chosen report/labels to screen
- CLEAR
- * Reset page settings
- _plength = plength
- _rmargin = rmargin
- GO record_num && Return to original record
- CASE BAR() = 5 && Exit to OPTION MENU
- DEACTIVATE POPUP
- ENDCASE
- SET COLOR TO &c_standard.
- DEACTIVATE POPUP
- RETURN
-
- PROCEDURE Barpop_r
- * Select available reports menu
- SET COLOR TO &c_popup.
- reportype = SPACE(6)
- DO CASE
- CASE BAR() = 2 && Output standard report to destination
- reportype = "LISTING"
- ACTIVATE POPUP dest_mnu && Activate printer destination menu
- CASE BAR() = 3 && Output mailing labels to destination
- reportype = "LABELS"
- ACTIVATE POPUP dest_mnu && Activate printer destination menu
- CASE BAR() = 4 && Output custom report to destination
- reportype = "CUSTOM"
- ACTIVATE WINDOW alert
- * Get custom report name from user
- * First, allow READ errors and warning bell
- ON READERROR
- SET BELL ON
- rpt_name = SPACE(8)
- @ 0,0 SAY "-------- RAPPORT EIGEN PROGRAMMA --------"
- @ 2,1 SAY "Typ de rapportnaam:" GET rpt_name ;
- VALID FILE(TRIM(rpt_name) + ".prg") ;
- MESSAGE "Typ bestandsnaam van max. acht " + ;
- "tekens, b.v. Lg_rept " ;
- ERROR "Bestandsnaam ongeldig. Typ andere naam"
- READ
- * Now, put the READ error redirection back.
- ON READERROR
- SET BELL OFF
- DEACTIVATE WINDOW alert
- IF LASTKEY() <> 27 && A report filename was found
- SET COLOR TO &c_popup.
- ACTIVATE POPUP dest_mnu
- ENDIF
- ENDCASE
- SET COLOR TO &c_popup.
- DEACTIVATE POPUP
- RETURN
-
- PROCEDURE Colo_rese
- PRIVATE old_color, c_messages, c_titles, c_box, c_info, c_fields
-
- old_color = c_save
-
- * Set the Primary colors
- SET COLOR TO &old_color.
-
- * Remove primary colors and start at the secondary colors
- old_color = STUFF(old_color, 1, AT("&",old_color)+2, "")
-
- comma = AT(",",old_color)
- c_messages = LEFT(old_color, comma-1) && Get MESSAGES color
- old_color = STUFF(old_color, 1, comma, "") && Remove MESSAGES color
-
- comma = AT(",",old_color)
- c_titles = LEFT(old_color, comma-1) && Get TITLES color
- old_color = STUFF(old_color, 1, comma, "") && Remove TITLES color
-
- comma = AT(",",old_color)
- c_box = LEFT(old_color, comma-1) && Get BOX color
- old_color = STUFF(old_color, 1, comma, "") && Remove BOX color
-
- comma = AT(",",old_color)
- c_info = LEFT(old_color, comma-1) && Get INFORMATION color
- old_color = STUFF(old_color, 1, comma, "") && Remove INFORMATION color
-
- comma = AT(",",old_color)
- c_fields = old_color && Get FIELDS color
-
- SET COLOR OF MESSAGES TO &c_messages.
- SET COLOR OF TITLES TO &c_titles.
- SET COLOR OF BOX TO &c_box.
- SET COLOR OF INFORMATION TO &c_info.
- SET COLOR OF FIELDS TO &c_fields.
- RETURN
-
-
- PROCEDURE Sub_ret
- IF erased
- * Pack deleted records (if any) - erases completely from database
- ************
- IF NETWORK()
- USE (dbf) EXCLUSIVE
- ENDIF
- IF net_choice <> 27 && Skip if user pressed Esc
- ******************* && error condition
- ?? CHR(7)
- ACTIVATE WINDOW alert
- @ 0,0 SAY "--------- DATABASE WORDT GESCHOOND -------"
- @ 2,0 SAY "Records met wismarkering worden verwijderd"
- @ 3,0 SAY "Even geduld a.u.b....SCHAKEL NIETS UIT"
- PACK
- DEACTIVATE WINDOW alert
- ENDIF
- ENDIF
- * Houskeeping
- CLOSE DATABASES
- CLEAR WINDOWS
- RELEASE ALL
- CLEAR
- ON ERROR
- ON KEY LABEL F9 && Turn off ON KEY LABEL F9/F10 commands
- ON KEY LABEL F10
- * Restore environment (in case user began at Control Center or dot prompt)
- DO Rest_env
- CLEAR
- RETURN TO MASTER && Exit Subapplication
-
- FUNCTION Duplicat
- PARAMETERS key
- * Used if duplicates are not allowed in a database
- * Set rec_is_dup to .T. if user entered duplicate key data
- rec_is_dup = .F.
- IF RECCOUNT() = 0 .OR. "" = TRIM(key)
- * Do not check if database or key field(s) is empty
- RETURN rec_is_dup
- ENDIF
- record_num = RECNO() && Save current record position
- SEEK TRIM(key)
- * Determine if record is duplicate key
- * PROMPT() used instead of BAR() for clarity
- DO CASE
- CASE PROMPT() = " Bewerken record"
- * If seek finds a record other than the current one,
- * the edited record has a duplicate key
- rec_is_dup = record_num <> RECNO() .AND. FOUND()
- CASE PROMPT() = " Toevoegen record"
- * New record is duplicate if seek finds any record that matches
- rec_is_dup = FOUND()
- ENDCASE
- IF rec_is_dup && Show duplicate record in window
- ACTIVATE WINDOW duplicat
- CLEAR
- DO Warnbell
- ? "------------------ DUPLICAAT " + dbf + ;
- " RECORD ------------------"
- ? " Duplicaten niet toegestaan"
- DO CASE
- CASE dbf = "KLNT"
- ? " " + klant_nr + " " + klantnaam
- ? "Dit is actieve record in de database; " + ;
- "Typ opnieuw een klantnr."
- CASE dbf = "VERKOPER"
- ? " " + verkoop_nr + " " + verkoper
- ? "Dit is actieve record in de database; " + ;
- "Typ opnieuw een verkoopnr."
- CASE dbf = "GOEDEREN"
- ? " " + ondrdl_nr + " " + artikel
- ? "Dit is actieve record in de database; " + ;
- "Typ opnieuw een artikelnr."
- CASE dbf = "REKN_REC"
- ? " " + factuur_nr + " " + klant + " " + DTOC(fact_datum)
- ? "Dit is actieve record in de database; " + ;
- "Typ opnieuw een factuurnr."
- ENDCASE
- WAIT " Ga verder met de spatiebalk..."
- DEACTIVATE WINDOW duplicat
- ENDIF
- GO record_num && Return to original record
- RETURN .NOT. rec_is_dup
-
- PROCEDURE Dstatus
- * Display filter status and current record number
- * Set colors with blink on/off depending on hardware
- IF filters_on
- * Show blinking msg for filter status
- @ 0,51 SAY "Filter ACTIEF" COLOR &c_blink.
- ELSE
- SET COLOR TO &c_standard.
- * Erase message - filter is off
- @ 0,51
- ENDIF
- * Show current record number on screen
- @ 0,66 SAY "Recordnr." + STR(RECNO(),5,0) COLOR &c_yellow.
- RETURN
-
- PROCEDURE Edit
- * Edit current record
- * Display lookup key message if lookup available (set in each application)
- IF lookup_ok
- DO Sho_look WITH dbf
- ENDIF
- record_num = RECNO()
- * Load data from record into memory variables
- DO Load_fld
- IF NETWORK() && Edit data in a network
- ready = .F.
- DO WHILE .NOT. ready
- IF CHANGE()
- * If the record was changed by somone since user first accessed it
- DO Warnbell
- GO RECNO() && Updates database record with changed data
- IF DELETED()
- DO Show_msg WITH "ATTENTIE: record is verwijderd"
- SKIP
- DO Show_data
- RETURN && Exit to OPTION MENU - quit edit
- ELSE
- DO Show_msg WITH ;
- "Gegevens gewijzigd; nieuwe gegevens op scherm"
- DO Load_fld && Updates memvars with database data
- ENDIF
- ENDIF
- DO Get_data
- READ && Edit data
- * Test if another user changed data while editing this data
- ready = .NOT. CHANGE() && DO loop will repeat if CHANGE() is .F.
- ENDDO
- ELSE && Non-network edit
- DO Get_data
- READ && Edit data
- ENDIF
- *****
- * Erase F9 lookup message from screen
- @ 0,0 SAY SPACE(51)
- IF "" = TRIM(&key.) .OR. READKEY() < 256
- * Exit if user blanked key, did not change data, or deleted record
- RETURN
- ELSE
- * Save edited data to disk
- DO Sav_data
- ENDIF
- RETURN
-
- PROCEDURE Eraser
- * Erase current record
- answer = " "
- ACTIVATE WINDOW alert
- @ 0,0 SAY "----------GEGEVENSRECORD WISSEN-----------"
- @ 2,1 SAY "Dit gegevensrecord wissen? (J=Ja,N=Nee)" GET answer PICTURE "Y"
- READ
- DEACTIVATE WINDOW alert
- IF answer = "J"
- DELETE
- * Position to the next record
- SKIP
- * Check if the last record was deleted
- DO CASE
- CASE filters_on .AND. EOF()
- * If no records left in filter subset, turn off filter
- SET FILTER TO
- filters_on = .F.
- * If last record deleted, go to beginning of database
- GO TOP
- CASE .NOT. filters_on .AND. EOF()
- * If last record deleted, go to beginning of database
- GO TOP
- ENDCASE
- * Set erased status flag that record was deleted
- erased = .T.
- ENDIF
- RETURN
-
- PROCEDURE Filt_ans
- * Get answer from user about filtering data into subset
- ACTIVATE WINDOW alert
- @ 0,0 SAY "--Groeperen in DEELVERZAMELING (filter)--"
- IF filters_on
- * Filter window - to turn off filter
- @ 2,0 SAY " Deelverzameling is geselecteerd."
- @ 3,0 SAY " Filter uitschakelen ?"
- @ 4,0 SAY " (U=Uit, N=Nee) "GET choice PICTURE "!" ;
- VALID choice $ "UN"
- ELSE
- * Filter window - to turn on filter
- @ 2,1 SAY "Kies tijdelijke deelverzameling met"
- @ 3,1 SAY "gegevens (typ filtervoorwaarde(n)) "
- @ 4,1 SAY " "
- @ 5,1 SAY "Doorgaan? (J=Ja, N=Nee) "GET choice PICTURE "Y"
- ENDIF
- READ
- DEACTIVATE WINDOW alert
- IF choice = "N" && Do not change filter status
- RETURN TO Barpop && Do not finish processing Filter proceedure
- ENDIF
- RETURN
-
- PROCEDURE Findcode
- PARAMETERS acity
- * Look up area code for phone number - by city
- i = INKEY()
- acode = 0
- ACTIVATE WINDOW alert
- CLEAR
- acode = LOOKUP(Netnum->kengetal,TRIM(acity),Netnum->woonplaats)
- ? "-------- ZOEKFUNCTIE KENGETAL --------"
- IF .NOT. FOUND("Netnum") .OR. "" = TRIM(acity)
- DO Warnbell
- ? "Woonplaats: " + TRIM(acity) + " komt" AT 2
- ? "komt NIET voor in tabel met kengetallen." AT 2
- ELSE
- ?
- ? "KENGETAL is: " + acode AT 2
- ? "voor " + TRIM(acity) AT 16
- ENDIF
- ?
- i= INKEY(3) && Display for 3 seconds
- DEACTIVATE WINDOW alert
- RETURN
-
- PROCEDURE Findcust
- PARAMETERS custid
- * Look up customer from customer ID
- i= INKEY()
- acust = ""
- ACTIVATE WINDOW alert
- CLEAR
- acust = LOOKUP(Klnt->klantnaam,TRIM(custid),Klnt->klant_nr)
- ? "-------- ZOEKFUNCTIE KLANTNUMMER ---------"
- IF .NOT. FOUND("Klnt") .OR. "" = TRIM(custid)
- DO Warnbell
- ? "Klantnummer: " + TRIM(custid) + " komt" AT 2
- ? "NIET voor in database Klnt." AT 2
- ELSE
- ? "Klant: " + TRIM(acust) AT 2
- ? "Tel.: " + klnt->telefoon AT 2
- ? "nummer: " + TRIM(custid) AT 12
- ENDIF
- WAIT " Ga verder met de spatiebalk..."
- DEACTIVATE WINDOW alert
- RETURN
-
- PROCEDURE Find_rec
- PARAMETERS key, key1, keyname1, key2, keyname2, key3, keyname3
- * Get target data to find/seek and show data record after retrieving
- STORE "" TO target1, target2, target3
- target1 = IIF(TYPE(key1) = "C", SPACE(LEN(&key1.)), { / / })
- * If key2 exists (database requires two keys)
- IF "GEEN" <> key2
- target2 = IIF(TYPE(key2) = "C", SPACE(LEN(&key2.)), { / / })
- * If key3 exists (database has three keys)
- IF "GEEN" <> key3
- target3 = IIF(TYPE(key3) = "C", SPACE(LEN(&key3.)), { / / })
- ENDIF
- ENDIF
- ACTIVATE WINDOW alert
- @ 0,0 SAY "------- TYP TE ZOEKEN DOELGEGEVENS -------"
- @ 2, 1 SAY keyname1
- @ 2,15 GET target1 MESSAGE "Typ " + keyname1
- IF "GEEN" <> key2
- @ 3, 1 SAY keyname2
- @ 3,15 GET target2
- IF "GEEN" <> key3
- @ 4, 1 SAY keyname3
- @ 4,15 GET target3
- ENDIF
- ENDIF
- @ 5,1 SAY "Typ gegevens (geheel of gedeeltelijk)"
- READ
- DEACTIVATE WINDOW alert
- target = IIF(type(key1) = "C", target1, DTOC(target1))
- IF "GEEN" <> key2
- target = target + IIF(type(key2) = "C", target2, DTOC(target2))
- IF "GEEN" <> key3
- target = target + IIF(type(key3) = "C", target3, DTOC(target3))
- ENDIF
- ENDIF
- target = TRIM(target)
- IF RIGHT(target, 6) = " / /"
- * If a date key wasn't filled in, remove the template
- target = LEFT(target, LEN(target) - 6)
- ENDIF
- IF "" = target
- * If user entered nothing (blank key) => exit
- RETURN
- ENDIF
- * Store record no. that the user was viewing
- record_num = RECNO()
- * Find record with target key
- IF .NOT. SEEK(target)
- * If target not found, uppercase & look again
- IF .NOT. SEEK(UPPER(target))
- * Sound bell and alert user with message
- DO Warnbell
- DO Show_msg WITH "Record met doelgegevens NIET gevonden."
- * Return to original record user was viewing
- GO record_num
- ENDIF
- ENDIF
- RETURN
-
- PROCEDURE Findpart
- PARAMETERS partid
- * Look up part data using part ID number in Goods database when
- * function key pressed
- i = INKEY()
- p_name = SPACE(30)
- ACTIVATE WINDOW alert
- CLEAR
- p_name = LOOKUP(Goederen->artikel,TRIM(partid),Goederen->ondrdl_nr)
- ? "-------- ZOEKFUNCTIE DEELGEGEVENS --------"
- IF .NOT. FOUND("Goederen") .OR. "" = TRIM(partid)
- DO Warnbell
- ? "Artikel: " + TRIM(partid) AT 2
- ? "NIET gevonden in database Goederen." AT 2
- ELSE
- ? "nummer: " + partid AT 2
- ? "Artikel: " + TRIM(p_name) AT 2
- ? "In voorraad: " + STR(Goederen->aant_voorr,4) AT 2
- ? "Prijs: ƒ " AT 2, Goederen->prijs PICTURE "99999.99"
- ENDIF
- WAIT " .....Ga verder met de spatiebalk..."
- DEACTIVATE WINDOW alert
- RETURN
-
- PROCEDURE Findvend
- PARAMETERS vendr
- * Look up vendor name using vendor ID number in Vendor database
- * when function key pressed
- i = INKEY()
- v_name = SPACE(30)
- ACTIVATE WINDOW alert
- CLEAR
- v_name = LOOKUP(Verkoper->verkoper,TRIM(vendr),Verkoper->verkoop_nr)
- ? "----- ZOEKFUNCTIE VERKOOPNUMMER -----"
- IF .NOT. FOUND("Verkoper")
- DO Warnbell
- ? "Verkoopnr.: " + TRIM(vendr) AT 2
- ? "komt NIET voor in database Verkoper." AT 2
- ELSE
- ? "Lever.: " + TRIM(v_name) AT 2
- ? "Telnr.: " + Verkoper->telefoon AT 2
- ? "Nummer: " + vendr AT 2
- ENDIF
- WAIT " Ga verder met de spatiebalk..."
- DEACTIVATE WINDOW alert
- RETURN
-
- PROCEDURE Kount
- * Count and display number of records in database
- record_num = RECNO()
- ACTIVATE WINDOW alert
- @ 0,0 SAY "------------- AANTAL RECORDS -------------"
- @ 2,1 SAY "Records worden geteld..."
- * Use count if filter is active (subset of records)
- IF filters_on
- COUNT TO kount
- ELSE
- * Use reccount if filter is not active (all records)
- kount = RECCOUNT()
- ENDIF
- @ 2,1 SAY dbf +" bevat " + STR (kount,6) + " records"
- ?
- WAIT " Druk op een toets om verder te gaan..."
- DEACTIVATE WINDOW alert
- * Return to original record (before count)
- GO record_num
- RETURN
-
- PROCEDURE List_rec
- * Lists records (in active index order) from top
- * If filter is active, then subset listed
- record_num = RECNO() && Store current record position
- GO TOP && Start at beginning
- ACTIVATE WINDOW lister
- answer = " "
- CLEAR
- @ 0,0 SAY "-------------------------- INHOUD DATABASE " + ;
- "---------------------------" ;
- COLOR &c_red.
- SCAN WHILE .NOT. answer $ "tT"
- LIST OFF NEXT 10 &list_flds.
- WAIT "Ga verder met de spatiebalk of druk op T voor " + ;
- "OPTIEMENU." TO answer
- CLEAR
- ENDSCAN
- DEACTIVATE WINDOW lister
- * Return to original record (before viewing list)
- GO record_num
- RETURN
-
- PROCEDURE Look_msg
- DO CASE && Show proper lookup msg in window
- CASE similar = .F. && No similar data found
- @ 1,1 SAY "Ingev. "+look_name+" nr. komt niet voor in " + ;
- look_dbf+" dbf. "
- ?
- WAIT "Geen " + look_name + " overeenk. nrs. - " + ;
- "T om naar scherm te gaan." TO answer
- CASE similar = .T. .AND. listcount > 0
- && Similar data found and listed
- WAIT "Spatiebalk voor vervolg of " + ;
- "T om naar scherm te gaan." TO answer
- CLEAR
- ENDCASE
- CLEAR
- RETURN
-
- FUNCTION Lookupid
- PARAMETERS l_target, look_dbf, look_name, matchchars
- * During data entry or editing, validate data entered into any of the
- * fields of customer ID, parts ID, vendor ID, and employee ID by checking
- * for their existence in their respective databases - list any similar data
- * by matching the first one or more characters (between entered data and
- * database).
- * Note: matchchars = number of initial matching characters for lookup lists
- * Example: list will show customers whose cust_id's first two characters
- * match with the entered cust_id's first two characters (matchchars = 2)
- IF .NOT. SEEK(l_target,(look_dbf)) && Seek data in its respective dbf
- ACTIVATE WINDOW look
- DO Warnbell
- answer = " "
- similar = .F.
- SELECT (look_dbf) && Use appropriate dbf for listing
- GO TOP
- DO WHILE .NOT. (EOF() .OR. answer $ "tT")
- * Show list of records having identical initial character(s)
- * in ID number
- @ 0,0 SAY "---FOUT BIJ GEGEVENSINVOER:" + look_name + ;
- " ONGELDIG NUMMER-------"
- @ 1,0 SAY " Dit is een lijst met op elkaar lijkende " + look_name + ;
- " nummers"
- ?
- listcount = 0
- DO CASE && Check which database screen in use
- CASE dbf = "BESTEL"
- DO CASE && Check which field is being read
- CASE VARREAD() = "KLANT_NR"
- SCAN FOR LIKE(SUBSTR(l_target,1,matchchars)+"*",klant_nr) ;
- WHILE listcount <= 4
- ? klant_nr, klantnaam && Display a record
- listcount = listcount + 1 && Increment list counter
- similar = .T. && Data found and listed
- ENDSCAN
- CASE VARREAD() = "ONDRDL_NR"
- SCAN FOR LIKE(SUBSTR(l_target,1,matchchars)+"*",ondrdl_nr) ;
- WHILE listcount <= 4
- ? ondrdl_nr, SUBSTR(artikel,1,21), ;
- SUBSTR(omschrijv,1,24)
- listcount = listcount + 1 && Increment list counter
- similar = .T. && Data found and listed
- ENDSCAN
- CASE VARREAD() = "PERS_NR"
- SCAN FOR LIKE(SUBSTR(l_target,1,matchchars)+"*",pers_nr) ;
- WHILE listcount <= 4
- ? pers_nr, achternaam, voornaam && Display a record
- listcount = listcount + 1 && Increment list counter
- similar = .T. && Data found and listed
- ENDSCAN
- ENDCASE
- CASE dbf = "GOEDEREN"
- SCAN FOR LIKE(SUBSTR(l_target,1,matchchars)+"*",verkoop_nr) ;
- WHILE listcount <= 4
- ? verkoop_nr, verkoper && Display a record
- listcount = listcount + 1 && Increment list counter
- similar = .T. && Data found and listed
- ENDSCAN
- CASE dbf = "REKN_REC"
- SCAN FOR LIKE(SUBSTR(l_target,1,matchchars)+"*",klant_nr) ;
- WHILE listcount <= 4
- ? klant_nr, klantnaam && Display a record
- listcount = listcount + 1 && Increment list counter
- similar = .T. && Data found and listed
- ENDSCAN
- ENDCASE
- DO Look_msg && Show message in window
- ENDDO
- DEACTIVATE WINDOW look
- SELECT 1 && Use original dbf
- ENDIF
- RETURN not_valid = .NOT. FOUND((look_dbf))
-
- PROCEDURE Net_err
- PARAMETERS err_number
- * Error procedure for networks
- DO CASE
- CASE err_number = 108
- * File is in use by another person
- IF "" <> TRIM(LKSYS(2))
- message = " " + dbf + " in gebruik bij: " + LKSYS(2)
- ELSE
- message = " " + dbf + " wordt al door iemand gebruikt"
- ENDIF
- CASE err_number = 109
- * Record is locked by another person
- message = " Record vergrendeld door: " + LKSYS(2)
- CASE err_number = 110
- * File must be in exclusive use for indexing/packing
- message = "Voor bestand moet USE EXCLUSIVE gelden"
- CASE err_number = 372 .OR. err_number = 373
- * File or record is in use by another
- message = MESSAGE()
- OTHERWISE
- message = " Onbekende fout: " + MESSAGE()
- ENDCASE
- DO Warnbell
- ACTIVATE WINDOW alert
- CLEAR
- ? "--------ALGEMENE- OF NETWERKFOUT----------"
- ?
- ? message AT 1
- ? "Druk op spatiebalk voor nieuwe poging" AT 1
- ? " - of druk op Esc om te stoppen" AT 1
- net_choice = INKEY(0) && Wait for user to press a key
- DEACTIVATE WINDOW alert
- IF net_choice <> 27 && User did not press Esc key
- * Execute command again that caused network error
- RETRY
- ENDIF
- RETURN
-
- PROCEDURE Printout
- * Print report or label
- DO CASE
- CASE reportype = "LISTING"
- REPORT FORM &dbf.
- CASE reportype = "LABELS"
- LABEL FORM &dbf.
- CASE reportype = "CUSTOM"
- DO &rpt_name.
- ENDCASE
- GO record_num
- RETURN
-
- PROCEDURE Prt_menu
- * Display menu of print options
- msg_num = "Typ een nummer"
- msg_logic = "Typ J of N"
- msg_enum = "Druk op de spatiebalk voor andere opties"
- * Set up default values to print variables for reports
- loffset = 0
- lmargin = 0
- rmargin = 80
- indent = 4
- plength = 66 && 60 - HP laserjet printer
- STORE 1 TO pspacing, pbpage, pcopies
- pepage = 9999
- peject = "NONE "
- STORE .F. TO pwait, pquality
- ppitch = "PICA "
- *
- ACTIVATE WINDOW lister
- CLEAR
- @ 0, 0 SAY "------------------------- AFDRUKMENU " + ;
- "---------------------------" COLOR &c_red.
- @ 2, 1 SAY "Pagina-instellingen:"
- @ 3, 1 SAY "============="
- @ 4, 1 SAY "Offset links " GET loffset ;
- PICTURE "99" MESSAGE msg_num
- @ 5, 1 SAY "Linkerkantlijn " GET lmargin ;
- PICTURE "99" MESSAGE msg_num
- @ 6, 1 SAY "Rechterkantlijn " GET rmargin ;
- PICTURE "99" MESSAGE msg_num
- @ 7, 1 SAY "Inspringing " GET indent ;
- PICTURE "99" MESSAGE msg_num
- @ 8, 1 SAY "Paginalengte " GET plength ;
- PICTURE "99" MESSAGE msg_num
- @ 9, 1 SAY "Regelafstand " GET pspacing ;
- PICTURE "9" RANGE 1,3 MESSAGE msg_num
- @ 2,26 SAY "Afdrukinstellingen"
- @ 3,26 SAY "=============="
- @ 4,26 SAY "Afdrukken vanaf pagina " GET pbpage ;
- PICTURE "999" MESSAGE msg_num
- @ 5,26 SAY "Laatste pagina " GET pepage ;
- PICTURE "9999" MESSAGE msg_num
- @ 6,26 SAY "Aantal exemplaren " ;
- GET pcopies PICTURE "999" MESSAGE msg_num
- @ 7,26 SAY "Papier doorvoeren " GET peject ;
- PICTURE "@M BEFORE,BOTH,AFTER,NONE" MESSAGE msg_enum
- @ 8,26 SAY "Pauze tussen pagina's " GET pwait ;
- PICTURE "Y" MESSAGE msg_logic
- @ 9,26 SAY "Tekenbreedte " GET ppitch ;
- PICTURE "@M DEFAULT,PICA,ELITE,CONDENSED" MESSAGE msg_enum
- @ 10,26 SAY "Kwaliteitsafdruk " GET pquality ;
- PICTURE "Y" MESSAGE msg_logic
- @ 12, 1 SAY "Geef gewenste instellingen op (PgDn = afdrukken)"
- READ
- DEACTIVATE WINDOW lister
- * Assign values to system variables
- _ploffset = loffset
- _lmargin = lmargin
- _rmargin = rmargin
- _indent = indent
- _plength = plength
- _pspacing = pspacing
- _pbpage = pbpage
- _pepage = pepage
- _pcopies = pcopies
- _peject = peject
- _pwait = pwait
- _ppitch = ppitch
- _pquality = pquality
- SET COLOR TO &c_standard.
- RETURN
-
- PROCEDURE Rest_env
- * Restore database environment
- SET COLOR TO &c_standard.
- SET SCOREBOARD &scor.
- SET DELIMITERS &deli.
- SET HELP &hellp.
- SET CLOCK &clock.
- SET ESCAPE &esca.
- SET DELETED &delee.
- SET HEADING &head.
- SET STATUS &stat.
- SET SAFETY &safe.
- SET EXACT &exac.
- SET BELL &bell.
- SET NEAR &near.
- * Reset colors to system defaults
- DO Colo_rese
- SET TALK &talk.
- RETURN
-
- PROCEDURE Sav_data
- * If data is new: append record currently in memory to database.
- * If edited/modified data: replace database record with memory fields.
- choice = "J"
- ACTIVATE WINDOW alert
- @ 0,1 SAY "-----------GEGEVENS OPSLAAN-------------"
- @ 2,1 SAY "Deze gegevens opslaan ? (J/N) " GET choice PICTURE "Y"
- READ
- DEACTIVATE WINDOW alert
- IF choice = "J"
- IF PROMPT() = " Toevoegen record" && Add new blank record
- APPEND BLANK
- record_num = RECNO()
- ENDIF
- * Replace database file fields with contents of memory variables
- DO Repl_fld
- ELSE
- * Do not save data to disk, return to original record
- GO record_num
- ENDIF
- RETURN
-
- PROCEDURE Set_env
- PUBLIC talk && First set TALK OFF
- talk = SET("TALK")
- SET TALK off
-
- PUBLIC c_current
- c_current=SET("ATTRIBUTES")
-
-
- PUBLIC c_standard, c_data, c_fields, c_popup, c_alert, c_list
- PUBLIC c_red, c_blue, c_yellow, c_yelowhit, c_green, c_blink
-
- * Set color variables for applications
- IF ISCOLOR()
- * Color video card/monitor
- c_standard = "W/B,BG+/R,B"
- c_data = "B/W,R/BG,B"
- c_fields = "B/BG"
- c_popup = "B/W,GR+/R"
- c_alert = "GR+/R,B/W,R/G"
- c_list = "W+/G,GR+/B,GR+/GR"
- c_red = "R/W"
- c_blue = "B/W"
- c_yellow = "GR+/B"
- c_yelowhit = "GR+/W"
- c_green = "G/W"
- c_blink = "GR+*/B"
- ELSE
- * Monochrome video card/monitor
- STORE "W+/N,N/W" TO c_standard, c_data, c_popup, c_alert, c_list
- STORE "W" TO c_red, c_blue, c_yellow, c_yelowhit, c_green, c_fields
- c_blink = "W+*/N,N/W"
- ENDIF
- SET COLOR OF MESSAGES TO &c_blue.
- SET COLOR TO &c_standard.
-
- * Configure working environment
- * Store SET environment in case started from Control Center or dot prompt
- PUBLIC scor, deli, hellp, clock, esca, delee, head, stat, safe
- PUBLIC exac, bell, near
- scor = SET("SCOREBOARD")
- deli = SET("DELIMITERS")
- hellp = SET("HELP")
- clock = SET("CLOCK")
- esca = SET("ESCAPE")
- delee = SET("DELETED")
- head = SET("HEADING")
- stat = SET("STATUS")
- safe = SET("SAFETY")
- exac = SET("EXACT")
- bell = SET("BELL")
- near = SET("NEAR")
-
- * Set database environment for applications
- SET SCOREBOARD off
- SET DELIMITERS off
- SET HELP off
- SET CLOCK off
- SET ESCAPE off
- SET DELETED on
- SET HEADING on
- SET STATUS off
- SET SAFETY off
- SET TALK off
- SET EXACT off
- SET BELL off
- SET NEAR off
- PUBLIC erased, not_valid, rec_is_dup, filters_on, lookup_ok, choice
- PUBLIC record_num, net_choice
- PUBLIC target, look_dbf, matchchar, scanfield
- * Logical variables used for status flags
- STORE .F. TO erased, not_valid, rec_is_dup, filters_on
- lookup_ok = .T.
- * Other variables
- STORE "" TO choice,subset
- STORE 0 TO record_num, net_choice
- ************************************************
- * Setup error processing if running on a network
- IF NETWORK()
- * Network programming assumes databases have been CONVERTed
- SET EXCLUSIVE off
- ON ERROR DO Net_err WITH ERROR()
- * Retry a reasonable amount of time (depends on computer)
- SET REPROCESS TO 3
- ENDIF
- ************************************************
- * Turns off VALID failure's (PRESS SPACE)
- ON READERROR ??
- RETURN
-
- PROCEDURE Sho_look
- PARAMETERS db
- * Show lookup function keys on screen (if available for database)
- DO CASE
- CASE db = "PERSONEL" .OR. db = "KLNT" .OR. db = "VERKOPER"
- look_txt = "F9: zoeken naar netnummer"
- CASE db = "GOEDEREN"
- look_txt = "F9: zoeken naam+tel.nr. leverancier"
- CASE db = "BESTEL"
- look_txt = "F9: Klnt-gegevens zoeken: F10: gegevens onderdeelnr."
- CASE db = "REKN_REC"
- look_txt = "F9: zoeken naar naam+tel.nr. in Klanten"
- ENDCASE
- @ 0,0 SAY look_txt COLOR &c_blink.
- i = INKEY(1) && Blink for 1 second
- @ 0,0 SAY look_txt COLOR &c_yellow.
- RETURN
-
- PROCEDURE Show_msg
- PARAMETERS u_message
- _wrap = .T.
- ACTIVATE WINDOW alert
- @ 1,0 SAY u_message
- ?
- WAIT " Ga verder met de spatiebalk..."
- DEACTIVATE WINDOW alert
- RETURN
-
- PROCEDURE Skip_rec
- PARAMETERS skipno
- * Skip forward or backward in database by one or more records
- DO CASE
- CASE skipno = 1 && Skip to next record (in active index order)
- IF .NOT. EOF()
- SKIP
- ENDIF
- CASE skipno = -1 && Skip to previous record (in active index order)
- IF .NOT. BOF()
- SKIP -1
- ENDIF
- CASE skipno = 0
- * Skip records - to goto/view records ahead of or behind current record
- numb_2skip = 0
- ACTIVATE WINDOW alert
- @ 0,0 SAY "---------- RECORDS OVERSLAAN ------------"
- @ 2,1 SAY "Hoeveel records wilt u overslaan?"
- @ 3,0 SAY " (voorbeeld: 15 of -5) " ;
- GET numb_2skip PICTURE "9999" ;
- MESSAGE "Positief getal: voorwaarts; " + ;
- "negatief getal: achterwaarts"
- READ
- DEACTIVATE WINDOW alert
- IF .NOT. (BOF() .AND. numb_2skip < 0) .OR. (EOF() .AND. numb_2skip > 0)
- SKIP numb_2skip
- ENDIF
- ENDCASE
-
- * Check whether record pointer hits beginning or end of file
- DO CASE
- CASE EOF()
- GO BOTTOM && reset record pointer if EOF
- DO Show_msg WITH " Laatste record in database " + dbf
- CASE BOF()
- DO Show_msg WITH " Eerste record in database " + dbf
- ENDCASE
- RETURN
-
- PROCEDURE Warnbell
- PRIVATE mwrap
- mwrap = _wrap && Save _wrap value
- _wrap = .F.
- * Sound unique warning for errors
- SET BELL TO 880,4
- ?? CHR(7)
- SET BELL TO 1400,4
- ?? CHR(7)
- SET BELL TO 880,4
- ?? CHR(7)
- SET BELL TO
- _wrap = mwrap
- RETURN
-
- **************************** END OF BIBLIO.PRG ******************************
-
-