#limit (11.0)##pagelength (16.5)##block# #start (2.0,0.0)# #page (69)# #headodd# #center#gs-Warenhaus#right#% #end# #headeven# %#center#gs-Warenhaus #end# #center#1 #center##on("b")#7  Weitere Kommandos (für Systembetreuer)#off("b")# Wenn Sie #on("b")#gs-Warenhaus#off("b")# installiert haben und mit dem Aufbau des Systems nach der automatischen Generierung zufrieden sind, dann ist dieses Kapitel nicht wichtig für Sie. Wir erklären Ihnen hier die Befehle, mit denen Sie die Einstellungen, die bei der Installation vorgenommen wurden, auch nachträglich noch ändern können. Beachten Sie bitte, daß aus Sicherheitsgründen eine Einstellungs#on("b")#änderung#off("b")# i.a. nur in der Task möglich ist, in der die entsprechende Einstellung vorgenommen wurde, es sei denn, dort wurde eine Einstellung gänzlich aufgehoben. Außerdem werden Ein­ stellungsänderungen stets nur an Sohntasks weitergegeben ("vererbt"), die #on("b")#nach#off("b")# der Änderung angemeldet werden! Die Standard-Installation sieht z.B. nur die Einrichtung #on("b")#einer#off("b")# Warenhaus-Hauptstelle vor. Wenn Sie tatsächlich nur eine Hauptstelle eingerichtet haben, nun aber doch mehrere Hauptstellen (für verschiedene Lerngruppen) betreiben wollen, so brauchen Sie das Programm nicht erneut zu insertieren! Machen Sie besser in der bisherigen Hauptstellen-Task den Hauptstellenstatus mit dem Kommando 'warenhaus haupt­ stelle (FALSE)' rückgängig und richten Sie in Sohntasks mit dem Kommando 'waren­ haus hauptstelle (TRUE)' wieder neue Hauptstellen ein. Außerdem können Sie in Hauptstellen-Tasks die Version für die Programmierschnittstelle umstellen ('grin (TRUE)' bzw. 'grin (FALSE)'). Ähnlich verhält es sich mit dem Betrieb eines Adapters für das Kartenleser-Interface. Auch hier ist die Standard-Einstellung u.U. nur für den Betrieb #on("b")#eines#off("b")# Adapters ausge­ legt. Möchten Sie mehrere Kartenleser anschließen, so sind bei der Verwendung von MUFIs im Terminalkanal keine Änderungen nötig, da hier jede Filialtask sowieso nur auf das MUFI zugreifen kann, das in den Kanal des Terminals geschaltet ist, an das die Task gekoppelt ist. Möchten Sie jedoch mehrere Kartenleser über Adapter an separaten seriellen Schnittstellen ansprechen, so müssen Sie dem System mehrere Kanalnummern mitteilen, die für verschiedene Filialtasks ja durchaus unterschied­ lich sein können. Am geschicktesten erscheint es in diesem Fall, unter einer Haupt­ stelle mehrere "Zwischentasks" einzurichten, in diesen jeweils die Interface- Kanalnummern festzulegen und die Filialtasks als Söhne dieser "Zwischentasks" anzumelden. Benennen Sie die "Zwischentasks" so, daß die eingestellte Kanal­ nummer aus dem Namen ersichtlich ist, so ist gleich bei der Anmeldung einer Filial­ task klar, welcher Kartenleser von dieser Task aus angesprochen werden kann. Um diesen Aufbau zu realisieren, sollten Sie zunächst in der entsprechenden Haupt­ stellentask einen etwa eingerichteten Direktstart mit dem Kommando 'warenhaus direktstart (FALSE)' aufheben. Ebenfalls in der Hauptstellentask wird dann mit dem Kommando 'init interface channel' eine etwa vorhandene Kanaleinstellung gelöscht, wenn Sie bei der Aufforderung 'Gib Interface-Kanal:' eine '0' eingeben. Nun richten Sie für jeden vorhandenen Adapter (natürlich müssen auch entsprechend viele freie serielle Schnittstellen zur Verfügung stehen!) eine "Zwischentask" als Sohn der Hauptstellentask ein (z.B. 'Kanal 5', 'Kanal 6' etc.) und geben dort jeweils wieder das Kommando 'init interface channel'. Bei der Abfrage 'Gib Interface-Kanal:' geben Sie dann die entsprechende Kanalnummer ein (in unserem Beispiel 5 oder 6 etc.). Alle Söhne der Zwischentask 'Kanal 5' z.B. können dann (abwechselnd) den Kartenleser benutzen, der an den Adapter an Kanal 5 angeschlossen ist. In diesen Zwischentasks können Sie, wenn Sie möchten, mit dem Kommando 'warenhaus direktstart (TRUE)' einen Direktstart für die neu anzumeldenden Sohntasks (Filialen) einrichten. Ansonsten wird #on("b")#gs-Warenhaus#off("b")# in den Sohntasks aus der 'gib Kommando' - Ebene mit dem Befehl 'warenhaus' gestartet (vgl. Kapitel 3.3). Sollten Sie beim Betrieb eines Codekartenlesers feststellen, daß die Wartezeit beim Einlesen einer Codekarte zu kurz oder zu lang ist, so können Sie auch diese ändern. Da die Wartezeit durch eine Schleife realisiert ist, in der laufend Werte vom Interface gelesen werden, ist sie abhängig von der Geschwindigkeit des verwendeten Rechners und von der gewählten Interface-Anpassung. Die Veränderung der Wartezeit erfolgt mit dem Kommando 'eingabesicherheit (n)', wobei n eine 'Integer'-Zahl sein muß. Bei sehr langsamen Systemen hat sich ein Wert von 3 als sinnvoll herausgestellt; bei schnellen Rechnern muß n etwa 10 oder noch größer sein. Ermitteln Sie den für Ihren Rechner geeigneten Wert bitte durch Ausprobieren. (Standardmäßig eingestellt ist n = 5.) Mit Hilfe von drei Informationsprozeduren können Sie Informationen über den Systemzustand einholen: 'put (hauptstellenname)' liefert den Namen der zu­ ständigen Hauptstellen-Task, 'put (interface anpassung)' zeigt den Namen der bei der Installation gewählten Interfaceanpassung für den Kartenleser, und 'put (inter­ face channel)' liefert die Nummer des Kanals, über den ein Interface an separater serieller Schnittstelle angesprochen wird. #on("b")#Detailbeschreibung der Befehle#off("b")#: #on("b")#PROC eingabesicherheit (INT CONST n):#off("b")# - stellt die Wartezeit beim Einlesen einer Artikel-, Kunden- oder Auskunfts­ codenummer in Abhängigkeit vom Absolutbetrag von n ein. Bei langsamen Rechnern sollte abs(n) klein (ca. 3), bei schnellen Rechnern größer (ca. 10) sein. - Standardeinstellung ist 5. - Der Befehl kann in jeder Task gegeben werden, in der #on("b")#gs-Warenhaus#off("b")# insertiert ist. #on("b")#PROC grin (BOOL CONST entscheidung):#off("b")# - ist nur in Hauptstellentasks aufrufbar und in Tasks, die keiner Hauptstellen­ task untergeordnet sind. - stellt die Version für die Programmierschnittstelle gemäß der 'entscheidung' ein: TRUE ---> GRIN-Version, FALSE ---> ELAN-Version. Fehlerfälle: - Dieser Befehl darf nur von der Task '...' aus gegeben werden! #on("b")#TEXT PROC hauptstellenname:#off("b")# - liefert den Namen der zuständigen Hauptstellentask. - liefert 'niltext' (""), wenn in diesem Zweig des Taskbaumes noch keine Hauptstelle existiert; es ist dann kein Warenhaus-Betrieb möglich! (vgl. 'PROC warenhaus hauptstelle') #on("b")#PROC init interfacechannel:#off("b")# - initialisiert eine unbenannte Sohntask ("-") zum Ansprechen des Interface­ systems über eine separate serielle Schnittstelle und existiert deshalb nur bei den Anpassungen für 'MUFI als Endgerät' und 'AKTRONIK-Adapter'. - erfragt zunächst eine Kanalnummer ('Gib Interface-Kanal:'); zulässig sind Eingaben von 0 bis 24. - löscht eine evtl. bereits vorhandene unbenannte Sohntask ("-"). - richtet bei Eingabe einer Kanalnummer > 0 eine neue unbenannte Sohntask ein und sperrt dieses Kommando für Sohntasks, die danach angemeldet werden. - hebt eine etwa gesetzte Sperrung bei Eingabe von 0 als Kanalnummer wieder auf. Fehlerfälle: - Dieses Kommando kann nur von der Task '...' aus gegeben werden! - Unzulässige Kanalnummer! #on("b")#TEXT PROC interface anpassung:#off("b")# - liefert den Namen der bei der Installation ausgewählten Anpassung. Möglich sind zur Zeit: "ohne Kartenleser", "mit Kartenleser an AKTRONIC-Adapter", "mit Kartenleser an MUFI als Endgerät", "mit Kartenleser an MUFI im Terminalkanal". #on("b")#INT PROC interface channel:#off("b")# - existiert nur bei den Anpassungen für den AKTRONIC-Adapter und MUFI als Endgerät. - liefert die Kanalnummer der seriellen Schnittstelle, über die das Interface­ system angesprochen wird. - wird der Wert 0 geliefert, so kann in der Task keine Eingabe über einen Kartenleser erfolgen (siehe 'PROC init interfacechannel'). #on("b")#PROC warenhaus:#off("b")# - ist nicht in Hauptstellentasks aufrufbar. - startet #on("b")#gs-Warenhaus#off("b")# aus der 'gib Kommando' - Ebene oder wird bei einge­ richtetem Direktstart automatisch aufgerufen. - richtet eine Sohntask als Filialverwaltung ein und kennzeichnet damit die eigene Task für das System als 'aktive' Filiale. Der Name dieser Sohntask enthält den Namen der zuständigen Hauptstellentask und die Filialnummer, unter der die Filiale geführt wird. Diese Filialnummer ist identisch mit der Kanalnummer des angekoppelten Terminals. - löscht die Filialverwaltungstask, wenn das Warenhaus-Menu geregelt mit verlassen wird. Zu Kollisionen bezüglich der Filialnummer kann es somit nur kommen, wenn an einem Arbeitsplatz das WARENHAUS- Menu ungeregelt verlassen wird (z.B. durch Tippen der SV-Taste) und dann an demselben Arbeitsplatz eine neue Filiale angemeldet werden soll. In diesem Fall erhält die neue Task #on("b")#keine#off("b")# Filialverwaltung als Sohntask und ist damit für den Warenhaus-Betrieb nicht brauchbar. Deshalb wird hier nach Ausgabe einer Fehlermeldung sofort gefragt, ob die Task gelöscht werden soll. Fehlerfälle: - Dieser Befehl darf nur von Söhnen dieser Task aus gegeben werden! - Keine uebergeordnete Task ist 'warenhaus hauptstelle'! - Filiale ist bereits besetzt durch TASK '...'! Es ist so kein geregelter Warenhaus-Betrieb möglich! #on("b")#PROC warenhaus direktstart (BOOL CONST entscheidung):#off("b")# - richtet gemäß dem Wahrheitswert der 'entscheidung' einen Direktstart ein oder hebt ihn wieder auf. Hat 'entscheidung' den Wert 'TRUE', so wird ein Direktstart eingerichtet. Es erscheint zunächst die Frage 'Mit automatischem Löschen (j/n)?'. Durch den Direktstart gelangt man beim Anmelden einer Sohntask nicht in die 'gib Kommando' - Ebene, sondern sofort in das WARENHAUS-Menu. Wird die obige Frage mit beantwortet, so werden Sohntasks nach dem Ausstieg aus dem WARENHAUS-Menu sofort gelöscht; andernfalls wird erst noch ge­ fragt, ob gelöscht werden soll. Bei Verneinung erfolgt ein 'break'. Die Ein­ richtung eines Direktstarts wird vom System vermerkt und der Befehl darauf­ hin in allen untergeordneten Tasks gesperrt. Sowohl der Direktstart als auch die Sperrung sind nur wirksam für Sohntasks, die #on("b")#nach#off("b")# Ausführung dieses Befehls angemeldet werden. Hat 'entscheidung' den Wert 'FALSE', so wird ein etwa eingerichteter Direkt­ start und die damit verbundene Sperrung des Befehls für neue Sohntasks wieder aufgehoben. Die Aufhebung ist nur möglich in der Task, von der aus der Direktstart eingerichtet wurde. Fehlerfälle: - Der Direktstart kann nur aus der Task '...' geaendert werden! #on("b")#PROC warenhaus hauptstelle (BOOL CONST entscheidung):#off("b")# - macht je nach Wahrheitswert der 'entscheidung' eine Task zur Hauptstellen­ task ('TRUE') bzw. hebt diesen Status wieder auf ('FALSE'). Eine Task kann nur Hauptstelle werden, wenn noch keine übergeordnete Task Hauptstelle ist. Der Hauptstellenstatus kann danach auch nur in dieser Task wieder aufge­ hoben werden. - löscht bei der Einrichtung der Hauptstelle eine etwa bereits vorhandene "Zentrale" und richtet automatisch eine neue "Zentrale" in Form einer Sohn­ task ein, die den Namen der Vatertask mit dem Zusatz ".Zentrale" erhält und in der später die zentrale Kundendatei gespeichert wird. Bei Aufhebung des Hauptstellenstatus wird diese Task wieder gelöscht. - fragt bei Einrichtung der Hauptstelle nach, ob ein Direktstart eingerichtet werden soll ('Mit Direktstart (j/n)?') und ruft die Prozedur 'warenhaus direktstart' entsprechend auf. - Hebt bei Löschen des Hauptstellenstatus einen in der Task etwa einge­ richteten Direktstart automatisch auf. Fehlerfälle: - Hauptstelle ist bereits die Task '...'! - Dieses Kommando darf nur in der Task '...' gegeben werden!