Imports System.IO Imports System.IO.Compression Public Class frmZahlung Dim fname As String Dim lw As String Dim f As String Dim s1 As String Dim i As Integer Dim ii As Integer Dim jetzt As Double Dim az As Integer Dim xx As Double Dim su As Integer, su1 As Integer, su2 As Integer, su3 As Integer Dim nrkonto As String Dim fehler As Integer = 0 Dim WithEvents evh As Generic_Event_Handler = Globals.EVH Private Sub tsbtnquit_Click(sender As Object, e As EventArgs) Handles tsbtnquit.Click Me.Close() End Sub Public Sub Insert_Protokoll(ByVal IText As String) 'If Me.txtProtokoll.Text <> "" Then Me.txtProtokoll.Text = Me.txtProtokoll.Text + vbCrLf Me.txtProtokoll.Text = IText + vbCrLf + Me.txtProtokoll.Text Application.DoEvents() End Sub Private Sub tsbtnSave_Click(sender As Object, e As EventArgs) Handles tsbtnSave.Click 'Dim ds As New DataSet 'ds.ReadXml("H:\DPM\dmp1\dmp2\08092021_sik\2021-08-30_ZE1_CH700022722726822201U_CHF_US9B4SAMKEGGCYJA.xml") fehler = 0 Me.txtProtokoll.Text = "" Me.OpenFileDialog1.Filter = "ZIP/V11-Dateien|*.ZIP;*.V11|ZIP-Dateien|*.zip|Zahlungsdateien (XML-Dateien|*.xml|*.v11|*.v11|Alle Dateien|*.*" Me.OpenFileDialog1.FileName = "" Me.OpenFileDialog1.FilterIndex = 0 Insert_Protokoll("Zahlungsdatei:" + Me.OpenFileDialog1.FileName) If Me.OpenFileDialog1.ShowDialog() = DialogResult.OK Then Dim checkdb As New clsDB Dim fi As New FileInfo(OpenFileDialog1.FileName) checkdb.Get_Tabledata("CMTFile", "", "Select * from CAMT_Run where sourcefilename='" + fi.Name + "'") If checkdb.dsDaten.Tables(0).Rows.Count > 0 Then If MsgBox("Die ausgewählte Zahlungsdatei wurde bereits verarbeitet. Möchten Sie die Verarbeitung wiederholen?", vbYesNo + vbQuestion) = vbNo Then Insert_Protokoll("Zahlungsverarbeitung abgebrochen.") Exit Sub End If End If Dim s As String = System.IO.Path.GetExtension(OpenFileDialog1.FileName) s = UCase(s) Select Case s Case ".XML" Try Dim camt54 As New clscamt054 Dim i As Integer = 0 i = camt54.CheckFiles(OpenFileDialog1.FileName) camt54.Init_Datatable() If i > 1 Then If MsgBox("Alle Dateine im Verzeichnis verarbeiten?", vbYesNo + vbQuestion) = MsgBoxResult.Yes Then camt54.Insert_Camt_Run(OpenFileDialog1.FileName) camt54.Alles_XML_Dateien(OpenFileDialog1.FileName) Else camt54.Insert_Camt_Run(OpenFileDialog1.FileName) camt54.Init_Datatable() camt54.Einzelne_XML_Datei(OpenFileDialog1.FileName) End If End If If camt54.fehler <> 0 Then MsgBox("Bei der Dateiverarbeitung ist ein Fehler aufgetretetn. Verarbeitung wird abgebrochen:") Exit Sub End If Insert_Protokoll("Start Zahlungen verbudhen") camt54.fehler = 0 camt54.Daten_Verbuchen() If camt54.fehler <> 0 Then MsgBox("Bei der Zahlungsverarbeitung sind Fehler aufgetreten. Bitte Protokoll prüfen.") End If Dim f As New frmAuswertung f.MdiParent = Me.MdiParent f.Show() f.Show_CAMT_Journal() Catch ex As Exception MsgBox("Beim auslesen der XML-Daten ist ein Fehler aufgetreten:" + ex.Message) Insert_Protokoll(ex.Message) Exit Sub End Try Case ".ZIP" Try Dim camt54 As New clscamt054 camt54.Init_Datatable() camt54.ZIP_Verarbeitung(OpenFileDialog1.FileName) 'Insert_Protokoll("Start Zahlungen verbudhen") If camt54.fehler <> 0 Then MsgBox("Bei der Dateiverarbeitung ist ein Fehler aufgetretetn. Verarbeitung wird abgebrochen:", vbExclamation) Exit Sub End If Insert_Protokoll("Start Zahlungen verbuchen") camt54.fehler = 0 camt54.Daten_Verbuchen() If camt54.fehler <> 0 Then MsgBox("Bei der Zahlungsverarbeitung sind Fehler aufgetreten. Bitte Protokoll prüfen.", vbExclamation) End If Dim f As New frmAuswertung f.MdiParent = Me.MdiParent f.Show() f.Show_CAMT_Journal() Catch ex As Exception MsgBox("Bei der Verarbeitung ist ein Fehler aufgetreten." + ex.Message) Insert_Protokoll(ex.Message) Exit Sub End Try Case ".V11" Zahlungen_Verarbeiten(OpenFileDialog1.FileName) Case Else End Select MsgBox("Zahlungsverarbeitung ist abgeschlossen.", vbInformation) Insert_Protokoll("Zahlungsverarbeitung abgeschlossen.") End If End Sub Private Sub frmZahlung_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub Sub Zahlungen_Verarbeiten(ByVal fn As String) Dim db As New clsDB su = 0 su1 = 0 su2 = 0 su3 = 0 Dim b1 As Decimal Dim b2 As Decimal Dim s As String Dim besrt As New DataTable db.Get_Tabledata("Besrt", "where datum = getdate()") Dim dr As DataRow dr = db.dsDaten.Tables(0).NewRow FileOpen(1, fn, OpenMode.Input) While Not EOF(1) Input(1, s) 'Total-Datensatz If s.Substring(0, 3) = "999" Or s.Substring(0, 3) = "995" Then dr.Item("Datum") = "20" + s.Substring(63, 2) + "-" + s.Substring(65, 2) + "-" + s.Substring(67, 2) dr.Item("Transaktion") = s.Substring(0, 3) dr.Item("svbnummer") = s.Substring(3, 9) dr.Item("sortierung") = s.Substring(11, 27) b1 = s.Substring(39, 12) b1 = b1 / 100 dr.Item("Betrag") = b1 dr.Item("AnzahlTransaktionen") = s.Substring(58, 5) dr.Item("Erstellungsdatum") = dr.Item("Datum") b2 = s.Substring(69, 9) / 100 dr.Item("Taxen_PTT") = b2 b2 = s.Substring(78, 9) / 100 dr.Item("Taxen_Manuell") = b2 dr.Item("Reserve") = "" dr.Item("Erstellt_am") = Now dr.Item("Mutiert_am") = Now dr.Item("Mutierer") = Globals.ActUser dr.Item("Aktiv") = True db.dsDaten.Tables(0).Rows.Add(dr) db.Update_Data() End If End While FileClose(1) Insert_Protokoll("Anzahl Transaktionen: " + dr.Item("AnzahlTransaktionen").ToString) Insert_Protokoll("Total-Betrag: " + dr.Item("Betrag").ToString) db.Get_Tabledata("Besrt", "", "Select top 1 eintragnr from besrt order by eintragnr desc") Dim besrtnr As Integer = db.dsDaten.Tables(0).Rows(0).Item(0) db.Get_Tabledata("besri", "where datum = getdate()") FileOpen(1, fn, OpenMode.Input) While Not EOF(1) Input(1, s) If s.Substring(0, 3) <> "999" And s.Substring(0, 3) <> "995" Then dr = db.dsDaten.Tables(0).NewRow dr.Item("Datum") = "20" + s.Substring(59, 2) + "-" + s.Substring(61, 2) + "-" + s.Substring(63, 2) dr.Item("Transaktion") = s.Substring(0, 3) dr.Item("svbnr") = s.Substring(3, 9) dr.Item("Referenz") = s.Substring(12, 27) b1 = s.Substring(39, 10) b1 = b1 / 100 dr.Item("Betrag") = b1 dr.Item("Aufgabereferenz") = s.Substring(49, 9) dr.Item("Datumaufgabe") = "20" + s.Substring(59, 2) + "-" + s.Substring(61, 2) + "-" + s.Substring(63, 2) dr.Item("Datumverarbeitung") = "20" + s.Substring(65, 2) + "-" + s.Substring(67, 2) + "-" + s.Substring(69, 2) dr.Item("Datumgutschrift") = "20" + s.Substring(71, 2) + "-" + s.Substring(73, 2) + "-" + s.Substring(75, 2) dr.Item("recherche") = s.Substring(77, 9) dr.Item("rejectcode") = s.Substring(86, 1) dr.Item("reserve") = s.Substring(87, 9) b1 = s.Substring(96, 4) / 100 dr.Item("Taxen_PTT") = b1 dr.Item("Verbucht") = Verbuchen(dr) dr.Item("ERSTELLT_AM") = Now dr.Item("MUTIERT_AM") = Now dr.Item("AKTIV") = True dr.Item("MUTIERER") = Globals.ActUser dr.Item("BESRTNR") = besrtnr db.dsDaten.Tables(0).Rows.Add(dr) End If End While db.Update_Data() FileClose(1) If fehler > 0 Then MsgBox("Achtung, in der Zahlungsverarbeitung gab es Fehler.", vbExclamation) End If End Sub Private Function Verbuchen(ByRef dr As DataRow) As Boolean Dim db1 As New clsDB Dim fakturanr As String fakturanr = dr.Item("Referenz").Substring(6, 10) If fakturanr.Substring(4, 1) = "9" Then 'Anzahlung_Verbuchen' Else db1.Get_Tabledata("RG", "", "Select * from faktura where nrfaktura='" + fakturanr + "' and aktiv=1 and status=0") If db1.dsDaten.Tables(0).Rows.Count < 1 Then Insert_Protokoll("Keine Rechnung mit der Nummer: " + fakturanr + " vorhanden.") fehler = fehler + 1 Return False Exit Function End If If db1.dsDaten.Tables(0).Rows.Count < 1 Then Insert_Protokoll("Rechnung mit der Nummer: " + fakturanr + " wurde bereits storniert.") fehler = fehler = fehler + 1 Return False Exit Function End If Dim db2 As New clsDB db2.Get_Tabledata("Zahlung", "", "Select * from zahlung where nrfaktura='" + fakturanr + "' and status<>9 and aktiv=1") If db2.dsDaten.Tables(0).Rows.Count > 0 Then Insert_Protokoll("Zahlung wurde bereits verbucht: " + fakturanr + " - " + db1.dsDaten.Tables(0).Rows(0).Item("patientzeile")) fehler = fehler + 1 Return False Exit Function End If Dim db3 As New clsDB db3.Get_Tabledata("Debitor", "", "Select * from Debitor where nrfaktura='" + fakturanr + "' and aktiv=1 ") If db3.dsDaten.Tables(0).Rows.Count < 1 Then Insert_Protokoll("Für die Zahlung ist kein Debitor vorhanden: " + fakturanr) fehler = fehler + 1 Return False Exit Function End If 'Debitor buchen If db3.dsDaten.Tables(0).Rows(0).Item("Betrag") = 0 Then db1.dsDaten.Tables(0).Rows(0).Item("Status") = 0 db1.dsDaten.Tables(0).Rows(0).Item("statusdatum") = Now Else db1.dsDaten.Tables(0).Rows(0).Item("Status") = 0 db1.dsDaten.Tables(0).Rows(0).Item("statusdatum") = Now End If db1.Update_Data() db3.dsDaten.Tables(0).Rows(0).Item("Betrag") = db3.dsDaten.Tables(0).Rows(0).Item("Betrag") - dr.Item("Betrag") db3.Update_Data() Dim db4 As New clsDB Dim dr1 As DataRow dr1 = db2.dsDaten.Tables(0).NewRow dr1.Item("nrzahlung") = db4.Get_DBKey("Zahlung") dr1.Item("nrfaktura") = fakturanr dr1.Item("betrag") = dr.Item("Betrag") dr1.Item("Vorauszahlung") = False dr1.Item("nrkonto") = db4.Get_Option(2003) dr1.Item("Mandant") = Globals.Mandant dr1.Item("nrdebitor") = db1.dsDaten.Tables(0).Rows(0).Item("nrdebitor") dr1.Item("valuta") = dr.Item("DatumGutschrift") dr1.Item("nrbehandlung") = db1.dsDaten.Tables(0).Rows(0).Item("nrbehandlung") dr1.Item("status") = 0 dr1.Item("Statusdatum") = Now dr1.Item("erstellt_am") = Now dr1.Item("mutiert_am") = Now dr1.Item("mutierer") = Globals.ActUser dr1.Item("aktiv") = True db2.dsDaten.Tables(0).Rows.Add(dr1) db2.Update_Data() db2.Dispose() Insert_Protokoll("Zahlung verbucht: " + fakturanr + " / " + dr.Item("Betrag").ToString) Dim db5 As New clsDB db5.Insert_ZJournal(fakturanr, dr1.Item("nrdebitor"), db5.Get_Datavalue("Select dbo.get_name(" + dr1.Item("nrdebitor").ToString + ")"), dr1.Item("Betrag"), db5.Get_Datavalue("Select Konto from konto where nrkonto=" + dr1.Item("nrkonto").ToString), "", "") db5.Dispose() Return True End If End Function Private Sub evh_Insert_Protokoll_entry(Entry As String) Handles evh.Insert_Protokoll_entry Insert_Protokoll(Entry) End Sub End Class