Scanner - Eingaben

Hier könnt ihr alle Fragen zu SpiderBasic austauschen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Scanner - Eingaben

Beitrag von Kiffi »

H.Brill hat geschrieben: 21.07.2023 17:02Muß der Key$ einzigartig sein ? Sonst würde er ja den vorhanden überschreiben, richtig ?
Innerhalt einer PreferenceGroup sind sie eindeutig, korrekt. Insofern könnte man PreferenceGroups für die Aufteilung verwenden.

Alternativ kannst Du Mitarbeiternummer und Datum miteinander zu einem eindeutigen Key zusammenfassen (Key$ = MitarbeiterNummer$ + "|" + Heute$)

Was das Thema Apps angelangt müsstest Du jemanden fragen, der sich besser damit auskennt.
H.Brill hat geschrieben: 21.07.2023 17:02Oder soll ich mal die neuste Version von Spiderbasic laden ?
das ist ohnehin immer empfehlenswert :wink:
a²+b²=mc²
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Scanner - Eingaben

Beitrag von H.Brill »

Da meine Version nur bis 2019 gilt, müßte ich mir eine neue Version kaufen.
Und 37 € für nur ein Jahr ist mir doch zuviel. Im Gegensatz zu PB ?

Das "app build failed" war auch schon im originalen Spider-Forum ein Thema. Da wußte auch
niemand Rat bzw. die Ratschläge funktionierten nicht. Für das Geld hätte ich eigentlich mehr
erwarted. Zumindest hätte Fred mal dazu Stellung nehmen müssen.

Das Zusammenfassen von MitarbeiterNr$ und Datum$ ist schon mal eine gute Idee, zumal
sich ja der Tag im Datum täglich ändert.

PS: Was ist denn mit JSON ? Hab ich auch schon mal mit XProfan gemacht und geht natürlich
in PB auch. Werde ich mal auch drüber nachdenken, aber das Problem der Eindeutigkeit ist
dort auch. Ein gleiches Objekt wird da auch überschrieben, wenn es schon vorhanden ist.
Da könnte aber eine Liste innerhalb eines Objektes Abhilfe schaffen.
Und mit dem Speicherort der JSON-Datei wird es wohl ähnlich problematisch sein.
PB 6.10
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Scanner - Eingaben

Beitrag von TroaX »

Ich verstehe das Problem nicht so ganz mit der Eindeutigkeit. Wenn jeder nur ein Essen pro Tag gezählt bekommt, dann ist doch die Eindeutigkeit das, was man will.

Preferences:

Code: Alles auswählen

[05.07.2023]
4711=1
4712=1
[12.07.2023]
4711=1
4712=1

... Das =1 ist nur dem Format geschuldet
JSON

Code: Alles auswählen

{
  "05.07.2023" : {
    4711,
    4712 
  },
  "12.07.2023" : {
    4711,
    4712
  }
}

... Bei JSON ist es in diesem Fall nicht eindeutig, da die Personalnummern in dem Beispiel Values und keine Schlüssel/Indizes sind. Das müsste sonst so aussehen:

{
  "05.07.2023" : {
    4711:1,
    4712 :1
  },
  "12.07.2023" : {
    4711:1,
    4712:1
  }
}

... Also im Grunde genauso wie Preferences.
Ich würde aber, wenn sich mit der 2019er Version keine App für Android bauen lässt, hier entweder den Umweg gehen, das ganze als Webapp zu exportieren und dann über Cordova als Android-App zu backen oder B4A nehmen.

So ganz raffe ich aber auch nicht den Aufbau. Du nutzt ein Handy sowie einen dedizierten Bluetooth-Handscanner. Letzterer ist mit deinem Handy verbunden und bedient bei erfolgreichem Scan die App? Wenn dem so ist, käme da dann nicht auch ein Raspberry Pi mit Touchdisplay in Frage? Dann könntest du das mit PureBasic machen und hättest es dann deutlich leichter. Noch dazu lässt sich auch nen Pi mit einer Powerbank betreiben. Nur so eine Idee.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Scanner - Eingaben

Beitrag von H.Brill »

Naja, die App will ich für jemand anderen machen, betrifft mich also hardwaremäßig gar nicht.
Dem geht es darum, das so einfach, wie möglich zu gestalten. Ob der mit einem Raspi Pi einverstanden
ist, weiß ich noch nicht. Könnte man ja auch mit einem ausrangierten PC machen. Der Vorteil eines
ausrangierten Handy ist eben, daß es in der Küche (Dämpfe, Hitze usw.) unempfindlicher ist und auch
so wenig Platz einnimmt. Das könnte man notfalls sogar außen an einen Küchenschrank oder Regal pappen,
wo es nicht stört. An das Smartphone käme dann auch noch eine Powerbank, die daneben gepappt wird.
So hält das mindestens einen Monat oder auch länger, wenn man eine Powerbank nutzt, die sich auch
paralell am Stromnetz auflädt.

Kann ich auch mit B4a machen. Das kenne ich auch. Wäre so für mich nur einfacher, da ich ja schon die PB-Syntax
länger kenne.

PS: Ich probiere z.Z. das ganze ja zuerst mit dem PC und die App als Browser-App.
In welchen Ordner schreibt denn die die Datei hin. Hatte schon in den betreffenden Ordnern von SpiderBasic
geschaut, aber nichts gefunden.

Es sollte ja autark laufen. Ich könnte ja trotzdem das OpenFileRequester() und einen Button ("Start") nehmen.
Das Handy muß ja einmalig mit BT gekoppelt werden und die App gestartet werden. Nach dem Start kann
man ja auch noch schnell einen Button in der App drücken, der die Datei auswählt. Somit stände auch bei
OpenFile() nichts im Wege.

Da muß ich nur noch einen Weg finden, die Datei am Monatsende auf einen USB-Stick o. ä. zu kopieren.
Notfalls auch über WLAN bzw. Bluetooth. Für BT könnte ich mir ja auch etwas mit B4J basteln, das die
Daten dann als .csv Datei konvertiert.
PB 6.10
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Scanner - Eingaben

Beitrag von TroaX »

Du wirst um B4A nicht herumkommen. SpiderBasic ist primär dazu gedacht, Web-Frontends (nicht Apps, dafür wären Funktionalitäten für PWA's nötig, die SB nicht bietet) mit PB Syntax zu schreiben. Davon mal abgesehen, das die UI gerade für Touchgeräte etwas clunky wirkt.

Ich weiß ... Ich wiederhole mich ständig. Aber SpiderBasic ist so nutzlos wie ein Wasserglas in der Wüste. Weder Fisch noch Fleisch noch trocken Brot. Ohne Backend und somit ohne Server ist es einfach unerträglich, damit irgendetwas zu machen. Browser schrenken einen bzgl. Sicherheit (zum Glück muss man da aber auch sagen) erheblich ein. Localstorage/WebSQL/IndexedDB sind Browser-API's, die Daten im Browser-Cache speichern, um diese sobald eine Verbindung zu einem Backend besteht mit selben über HTTPRequest, WebRTC, websockets und co. zu synchronisieren. Aber nicht auf dem Gerät direkt abrufbar in einem überall lesbaren Format zu speichern.

Erst in einem nativen Context (Cordova, Electron und co.) sind Zugriffe auf den Festspeicher des Clients möglich. Die Fähingkeit, eine App für das Smartphone zu erstellen, würde die Spiderbasic-App in einen entsprechenden Kontext verfrachten. Das, wie du festgestellt hast, geht gerade aber nicht so ohne weiteres.

Bei so einer einfache App das ganze mit B4A zu machen ist deutlich sinnvoller, als sich Spiderbasic dafür zurecht zu biegen.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Scanner - Eingaben

Beitrag von H.Brill »

Da hast du wohl Recht.
Ich hatte ja schon selber ein paar Apps (Einkaufliste usw.) mit B4A gemacht.
Werde es dann in B4A machen. Und damit habe ich auch noch die Möglichkeit,
die Daten per Bluetooth an den PC zu senden. Eine App mit B4J,( die das in eine .csv
Datei schreibt) für den PC ist auch kein großes Ding.

Das blöde an B4A bzw. B4J ist, daß man sich alles irgendwie zusammensuchen muß,
was interne und externe Libs und deren Funktionen und Befehle betrifft. Da sind
oft viele Forenbesuche, wo Erel was erklärt, erforderlich.
PB 6.10
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Scanner - Eingaben

Beitrag von H.Brill »

Hallo TroaX,
Falls es dich interessiert, ich habe mir nun eine App mit B4A dazu gemacht.
War mit wenigen Zeilen Code, im Designer ein Eingabefeld und ein Listview,
schnell gemacht.
Das ganze habe ich mit einer MAP und wie Kiffi schon vorgeschlagen hatte
Key$ = MitarbeiterNummer$ + "|" + Heute$ gemacht. Zusätzlich wird auch
noch in eine .csv Datei geschrieben.

Zuerst habe ich mit B4J getestet und es dann fast 1 : 1 übernommen.
Da mußten eigentlich nur Die Pfade geändert werden und das Eingabefeld
heißt anders.

B4A :

Code: Alles auswählen

Sub Process_Globals
	'These global variables will be declared once when the application starts.
	'These variables can be accessed from all modules.
	Private xui As XUI
End Sub

Sub Globals
	'These global variables will be redeclared each time the activity is created.
	Private Button1 As Button
	Private Button2 As Button
	Private EditText1 As EditText
	Dim Listview1 As ListView
	Dim TextWriter1 As TextWriter
	Dim Datei1 As String
	Dim Datei2 As String
	Dim Datum As String
	Dim zeile As String
	Dim MA As String
	Dim found As Int
	Dim Personal As Map
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Activity.LoadLayout("layout")
	Personal.Initialize
	InitListview
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
	Activity.Finish
End Sub

Private Sub Button2_Click
	
End Sub

Private Sub ListView1_ItemClick (Position As Int, Value As Object)
	
End Sub

Private Sub EditText1_EnterPressed
MA = EditText1.Text
found = 0
DateTime.Dateformat = "dd.MM.yyyy"
Datum = DateTime.Date(DateTime.Now)
DateTime.DateFormat = "MM_yyyy"
Datei1 = DateTime.Date(DateTime.Now) & ".txt" 
Datei2 = DateTime.Date(DateTime.Now) & ".csv"
TextWriter1.Initialize(File.OpenOutput(File.DirInternal, Datei2, True))
If File.Exists(File.DirInternal, Datei1) = True Then
	File.ReadMap(File.DirInternal, Datei1)
	If Personal.ContainsKey(MA & "|" & Datum) Then
		 found = 1	
	End If
End If
If found = 1 Then
	ToastMessageShow("Mitarbeiter und Datum schon vorhanden ! ", False)
Else
	Personal.Put(MA & "|" & Datum, Datum)
	Listview1.AddSingleLine(MA & "," & Datum)
	TextWriter1.WriteLine(MA & "," & Datum)
	TextWriter1.Close
End If
File.WriteMap(File.DirInternal, Datei1, Personal)
EditText1.Text = ""
EditText1.RequestFocus
End Sub

Sub InitListview
	DateTime.DateFormat = "MM_yyyy"
	Datei1 = DateTime.Date(DateTime.Now) & ".txt"
	If File.Exists(File.DirInternal, Datei1) Then
		Personal = File.ReadMap(File.DirInternal, Datei1)
		For Each MA As String In Personal.Keys
			Dim MN As String = Personal.Get(MA)
			zeile = MA.SubString2(0, MA.IndexOf("|")) & "," & MN
			Listview1.AddSingleLine(zeile)
		Next
	End If
End Sub
Das könnte man auch leicht umbauen für EAN13 - Nummern. Der Wert von Key ist ja eigentlich frei und
so für Artikelname + Preis verfügbar. Mit dem Scanner vom Handy kann man ja in die Zwischenablage
kopieren und im Editfeld wieder einfügen.
PB 6.10
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Scanner - Eingaben

Beitrag von TroaX »

Wie ich sagte, ist das Szenario sehr einfach und lässt sich schneller mit einem RAD-Tool wie B4A erstellen. Deutlich zielführender als mit SB ;)
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Scanner - Eingaben

Beitrag von H.Brill »

TroaX hat geschrieben: 28.07.2023 08:26 Programmierung: B4J (Nur B4J = Keine andere Variante) | Webtechs (Nur zum erweitern meiner BANano-Apps)
Ich habe jetzt PureBasic erstmal von meiner Liste gestrichen. Ich habe aus diversen Gründen B4J nochmal eine Chance gegeben und mich noch einmal richtig reingefressen. Da ist zwar auch nicht alles perfekt. Aber dafür kann ich persönlich trotzdem deutlich mehr damit anfangen, als mit PureBasic.
Kann ich nur zustimmen, zumal es in B4A/B4J tonnenweise Libs gibt und ständig neue hinzu kommen, die teilweise sogar in B4A/B4J
von Erel integriert werden.

Das einzige, was mir nicht gefällt, ist, daß man diverse Ordner noch mitliefern muß, obwohl man eine .exe daraus gemacht hat.
Ich dachte immer, wenn man JAVA installiert hat, bräuchte man sowas nicht.
PB 6.10
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Scanner - Eingaben

Beitrag von TroaX »

Lib != Runtine
Custom Lib != Build in Framework

Java liefert erstmal nur die VM inkl. Runtine und die Java Standard Libraries mit. In PureBasic lassen sich auch nur unter bestimmten Vorraussetzungen in die Executable die Libs einbetten. Je nachdem, wie die Libs also ausgeführt sind, brauch man sie nicht mitliefern ... Oder muss sie eben mitliefern.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Antworten