Hallo, ich will mir ein Programm in B4J (später auch in B4A) machen, das eine
Mitarbeiternummer ( QR-Code) mit einem BT-Scanner einliest. Diese Nummer
darf am aktuellen Tag nur einmal vorkommen, sodaß man am selben Tag nicht
2mal eingescannen, bzw. gespeichert werden kann. (Essenszuschlag pro Tag).
Um die Nummer eindeutig für die Map zu halten, wird sie so (4711|25.07.2023=25.07.2023)
als Wertepaar in die Map gespeichert. So kann sie nur einmal am Tag, aber mehrere Tage im
Monat erscheinen. Auch soll gleichzeitig eine .csv Datei geführt werden.
Die App soll später autark laufen, d.h. sie wird morgens gestartet und abends
beendet (ggf. auch über einen Monat).
Mit dem
TextField1_TextChanged (Old As String, New As String)
Event scheint das nicht richtig zu gehen. Mache ich was falsch oder wie
könnte ich das Textfeld sonst abfragen ?
Der Scanner hat Bluetooth und somit eine HID-Tastatur. Somit habe ich
mit BT in der App nichts am Hut. Der Scanner verbindet sich von selber mit
dem BT vom PC.
Im Designer hatte ich nur ein Textfeld und eine Listbox erstellt.
Mitarbeiternummer ( QR-Code) mit einem BT-Scanner einliest. Diese Nummer
darf am aktuellen Tag nur einmal vorkommen, sodaß man am selben Tag nicht
2mal eingescannen, bzw. gespeichert werden kann. (Essenszuschlag pro Tag).
Um die Nummer eindeutig für die Map zu halten, wird sie so (4711|25.07.2023=25.07.2023)
als Wertepaar in die Map gespeichert. So kann sie nur einmal am Tag, aber mehrere Tage im
Monat erscheinen. Auch soll gleichzeitig eine .csv Datei geführt werden.
Die App soll später autark laufen, d.h. sie wird morgens gestartet und abends
beendet (ggf. auch über einen Monat).
Mit dem
TextField1_TextChanged (Old As String, New As String)
Event scheint das nicht richtig zu gehen. Mache ich was falsch oder wie
könnte ich das Textfeld sonst abfragen ?
Der Scanner hat Bluetooth und somit eine HID-Tastatur. Somit habe ich
mit BT in der App nichts am Hut. Der Scanner verbindet sich von selber mit
dem BT vom PC.
Scanner App:
Sub Process_Globals
Private fx As JFX
Private MainForm As Form
Private xui As XUI
Private TextWriter1 As TextWriter
Private Button1 As Button
Private TextField1 As TextField
Private Datei1 As String
Private csvdatei As String
Private Datum As String
Private zeile As String
Private MA As String
Private MN As String
Private found As Int
Private Personal As Map
Private ListView1 As ListView
End Sub
Sub AppStart (Form1 As Form, Args() As String)
MainForm = Form1
MainForm.RootPane.LoadLayout("layout1")
MainForm.Show
Personal.Initialize
'InitListview
End Sub
Sub Button1_Click
End Sub
Private Sub TextField1_TextChanged (Old As String, New As String)
' Scanner hat als Endezeichen Chr(13) -> Return
DateTime.DateFormat = "dd.MM.yyyy"
Datum = DateTime.Date(DateTime.Now)
DateTime.DateFormat = "MM_yyyy"
Datei1 = DateTime.Date(DateTime.Now) & ".txt" ' Immer je Monat eine Datei z.b. 07_2023
csvdatei = DateTime.Date(DateTime.Now) & ".csv"
TextWriter1.Initialize(File.OpenOutput(File.DirApp, csvdatei, True))
MA = TextField1.Text
MA = New & "|" & Datum
Personal.Clear
If File.Exists(File.DirApp, Datei1) Then
File.ReadMap(File.DirApp, Datei1)
For Each MA As String In Personal.Keys
Dim MN As String = Personal.Get(MA)
If MN = Datum Then
found = 1
End If
Next
If found = 1 Then
xui.MsgboxAsync("Mitarbeiter + Datum schon vorhanden", "Fehler !")
' MitarbeiterNr soll nur einmal pro Tag vorkommen
' beim mehraligen Scannen wird ignoriert.
Else
Personal.Put(MA & "|" & Datum, Datum)
File.WriteMap(File.DirApp, Datei1, Personal)
ListView1.Items.Add(New & "," & Datum)
TextWriter1.WriteLine(New & "," & Datum)
End If
Else
Personal.Put(New & "|" & Datum, Datum)
File.WriteMap(File.DirApp, Datei1, Personal)
ListView1.Items.Add( New & "," & Datum)
TextWriter1.WriteLine(New & "," & Datum)
End If
TextField1.Text = ""
'TextField1.RequestFocus
End Sub
Private Sub TextField1_FocusChanged (HasFocus As Boolean)
End Sub
Sub InitListview
DateTime.DateFormat = "MM_yyyy"
Datei1 = DateTime.Date(DateTime.Now) & ".txt"
If File.Exists(File.DirApp, Datei1) Then
Personal = File.ReadMap(File.DirApp, Datei1)
For Each MA As String In Personal.Keys
Dim MN As String = Personal.Get(MA)
zeile = MA.SubString2(0, MA.IndexOf("|")) & "," & MN ' trennen : z. B. 4711|25.07.2023 -> 4711,25.07.2023
ListView1.Items.Add(zeile)
Next
End If
End Sub
Im Designer hatte ich nur ein Textfeld und eine Listbox erstellt.