z.B.
aus dem erfassten Bestand
- O-Sostr-Lager
- O-W13rp-Lager1
- O-W13rp-Lager2
- ...
Rechnungen kalkulieren
- Miete
- BK
- ...

--> /frepjs2000/Fr_Anf_Ang_Auftr_Pflege?submitaction=%2F%3D%2F&datatable_primarykey=25
Grundstücke, Lagerhallen und Co
kann man auch als Stücklisten betrachten.
- 1 - (TxtDoc-lag-z-b-2026-06-24.html)
Dann ist das Teil
- initial als Anlage erfasst
durchläuft das Einkaufsprozedere u.A. mit Prüfung auf
- laufende Aufwände
und Ersatz (Entsorgung).
Mit dem ERP fallen dann wichtige weitere Informationen zwangsläufig an.
Z.B. Gliederung in
- F&E / Investitionen / laufenden Kosten / ausserordentlichen ...
- ev. Kostenstellen
- ev. Kostenträgern
- ...
und tauchen dann als Planungs-, Forecast- und Ist-Darstellungen auf.
- 2 - (TxtDoc-lag-z-b-2026-06-24.html)
Einen Artikel kann man
- herstellen
- einkaufen
- verkaufen
- vermieten
- warten
- ...
( Was das ERP eben hergibt )
z.B.
--> /frepjs2000/Fr_Artikel_Pflege?submitaction=%2F%3D%2F&datatable_primarykey=129

Pro Artikelgruppe können individuelle Felder ohne Datenbank/Programm-Änderung definiert werden
--> s.a. https://jobst-software.net/ainfojs2000/InfoPrint_Default?only_REPORT_KNZ=TxtDoc&search_text=ADialog
- 3 - (TxtDoc-lag-z-b-2026-06-24.html)
Damit
- Zwischenablage
- höhere/dynamische Auflösung
funktioniert,
ist auf dem Clientsystem ein passender Gast-Treiber erforderlich.
Konfigration z.B. per virt-manager

--> https://de.wikipedia.org/wiki/SPICE_(Protokoll)
Zugriff von Ausserhalb z.B. mit dem remote-viewer
remote-viewer spice://10.110.10.101:5999
oder
remote-viewer vnc://10.110.10.101:5982
- 4 - (TxtDoc-lag-z-b-2026-06-24.html)
z.B.
try {
dokument.speichern();
datenbank.commit();
status_anzeigen("Daten gespeichert");
}
catch() {
datenbank.rollback();
meldung("speichern fehlgeschlagen");
}
Also, versuche zu speichern:
- wenn's klappt, alles festschreiben
- wenn nicht, alles rückgängig machen und den User informieren
Buffer-Overflows sollten in Script/Runtime/VM-Sprachen auch nicht vorkommen.
( z.B. TypeScript/JavaScript, Java, C#, ... )
Diese benutzen jedoch Bibliotheken, die's ev. mit dem Speicher nicht so genau nehmen.
Oder man benutzt unsafe-Blöcke oder unglückliche Compilerschalter.
( Undefiniertes Verhaltung (UB) glänzt am besten durch Abwesenheit )
C++ ohne UB geht auch -- z.B. mit C++/CLI
jedoch nicht ISO C++ konform.
( Alles mit ^ ist hier auch verwalteter Speicher )
public ref class IntDotnetClass
{
public: int IntValue;
public: IntDotnetClass()
{
this->IntValue = 0;
}
public: virtual ~IntDotnetClass()
{
System::Console::WriteLine("~destruct IntDotnetClass" + IntValue.ToString());
}
public: int operator=( const int IntValue)
{
this->IntValue = IntValue;
return this->IntValue;
}
public: virtual System::String^ ToString() override
{
return IntValue.ToString();
}
};
Weiters stehen zur Vermeidung von Speicherproblemen
- Rust
- Fil-C
- Valgrind
- und ev. bald TrapC
zur Verfügung.
Auf Client und Server eine Script-Sprache
ist auf dem Weg.
Und dann ev.
- sicherer
- Module per import ohne Konfigs und Builds
- TypeScript neben JavaScript es6 out of the Box
- Grundfunktionen (z.B. HTTP, SQL) ohne zusätzliche Abhängigkeit
Hat Vorteile, wenn am Client und Server
die gleichen Formate und Werkzeuge verwendet werden können.
( natürlich eher für Sachen, bei denen man mit Scriptsprachen auskommen kann )
Compiler vs. Script/Runtime/VM-Sprachen
Anforderungen schnell umzusetzen,
braucht dynamische Software.
Laufzeitprüfungen bei Script/Runtime/VM-Sprachen,
wie z.B.
- RtAssert( fdName != null && !"".equals(fdName), "fdName mit Inhalt erwartet");
können den Nachteil gegenüber statischer Codeanalyse bei Compilern z.T. ausgleichen.
Diese sind
- beim entwickeln / testen
und
- im Produktivbetrieb
aktiv.
Immer Prüfen kostet jedoch immer Resourcen.
Unterschied zwischen UB und Exception
- undefiniertes Verhalten
--> Kontrolle verloren --> bevorzugter Kandidat für Container
( Programmtypen, die das NICHT vermeiden, sind im Container besser aufgehoben )
- Exception
--> Ausnahme per Catch einfangen, Fehlermeldung, Rollback --> nichts kaputt
- 5 - (TxtDoc-lag-z-b-2026-06-24.html)
Zusammen mit den aktuellen Stammdaten,
ergibt sich der aktuelle Bedarf.

--> https://jobst-software.net/al_storage/?submitaction=%2F%3D%2F&datatable_primarykey=6
Auch hier, trägt die Last die SQL.
Webanwendung und/oder Office für Eingabe und Anzeige.
Die SQL kümmert sich um
- Tabellen -- Abfragen
- Benutzer -- Rollen -- Berechtigungen
- Integrität
- Grundlagen für Reports / PDFs
Sparsamer Umgang mit Scripts/Makros fördert
- Systemunabhängigkeit
und
- Sicherheit
- 6 - (TxtDoc-lag-z-b-2026-06-24.html)
Details lassen sich per Kopfrechnung weniger gut überschlagen.
Dafür hat man ev. eine SQL samt Tools.
z.B.

--> /frepjs2000/Fr_Artikel_Pflege?submitaction=%2F%3D%2F&datatable_primarykey=127
Eine SQL kann auch helfen mit rekursiven Strukturen umzugehen.
z.B.:
WITH RECURSIVE included_parts( t_nr, apart_artikelnr, artikelnr, par_menge, t1_x_menge) AS (
SELECT 1 as t_nr, apart_artikelnr, artikelnr, 1::numeric as par_menge, menge::numeric as t1_x_menge
FROM frepjs2000.Artikel_AParts WHERE artikelnr like '%Pal%'
UNION ALL
SELECT (t_nr + 1) as t_nr, p.apart_artikelnr, p.artikelnr, (par_menge * 1)::numeric as par_menge, (p.menge * pr.t1_x_menge)::numeric as t1_x_menge
FROM included_parts pr
join frepjs2000.Artikel_AParts p on pr.apart_artikelnr = p.artikelnr
)
SELECT
string_agg( inc_pr.t_nr::varchar, ' ') as t_nrs,
--
inc_pr.artikelnr,
round( SUM( inc_pr.par_menge), 4) as menge,
string_agg( distinct art.mengen_einheit, ' ') as mengen_einheit,
--
inc_pr.apart_artikelnr as t_artikelnr,
round( SUM( inc_pr.t1_x_menge), 4) as t1_x_menge,
string_agg( distinct ap_art.mengen_einheit, ' ') as t_meh,
string_agg( concat( f_n(inc_pr.t1_x_menge), f_meh( ' ', ap_art.mengen_einheit) ), ' + ') as t1_x_menge_dets,
string_agg( concat( inc_pr.apart_artikelnr, ' ', f_n(inc_pr.t1_x_menge), f_meh( ' ', ap_art.mengen_einheit) ), ' + ') as t1_x_menge_dets_ex
FROM included_parts inc_pr
join frepjs2000.artikel art on inc_pr.artikelnr = art.artikelnr
join frepjs2000.artikel ap_art on inc_pr.apart_artikelnr = ap_art.artikelnr
GROUP BY
inc_pr.artikelnr, inc_pr.apart_artikelnr
;
- 7 - (TxtDoc-lag-z-b-2026-06-24.html)