EXG Auto Ncts
This commit is contained in:
@@ -5147,6 +5147,197 @@ OPTION (MAXRECURSION 1000);", "AVISO") '
|
||||
Return Nothing
|
||||
End Function
|
||||
|
||||
Private Sub Button61_Click(sender As Object, e As EventArgs) Handles Button61.Click
|
||||
Dim referenz As String = InputBox("Bitte EXG-Referenz eingeben (mit % am Ende):", "NCTS-Test aus EXG", "4801/26033344%")
|
||||
If String.IsNullOrWhiteSpace(referenz) Then Exit Sub
|
||||
|
||||
VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "UNISPED"
|
||||
VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG = "SUB"
|
||||
|
||||
Try
|
||||
Dim saveFile = TestNCTSFromEXG(referenz.Trim(), True, "T1")
|
||||
MsgBox("NCTS-Test erfolgreich!" & vbCrLf & saveFile)
|
||||
Process.Start(saveFile)
|
||||
Catch ex As Exception
|
||||
MsgBox("Fehler beim NCTS-Test:" & vbCrLf & ex.Message)
|
||||
End Try
|
||||
End Sub
|
||||
Shared Function GET_IDsByBezugsNr(bezugsNr As String) As List(Of Integer)
|
||||
Dim ids As New List(Of Integer)
|
||||
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
||||
|
||||
Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL()
|
||||
Using cmd As New SqlCommand("SELECT exg_Id FROM tblDakosy_EXG WHERE exg_ObjectName LIKE @bezugsNr ORDER BY exg_ObjectName", conn)
|
||||
cmd.Parameters.AddWithValue("@bezugsNr", bezugsNr.Replace("[", "[[]").Replace("%", "[%]").Replace("_", "[_]") & "[_]EXG[0-9]%")
|
||||
|
||||
Using dr = cmd.ExecuteReader()
|
||||
While dr.Read()
|
||||
ids.Add(Convert.ToInt32(dr("exg_Id")))
|
||||
End While
|
||||
End Using
|
||||
End Using
|
||||
End Using
|
||||
|
||||
Return ids
|
||||
End Function
|
||||
|
||||
Shared Function TestNCTSFromEXG(bezugsNrEXG As String, Optional sendFTP As Boolean = False, Optional nctsArt As String = "T1") As String
|
||||
Dim exgIds As List(Of Integer) = GET_IDsByBezugsNr(bezugsNrEXG)
|
||||
|
||||
If exgIds.Count = 0 Then
|
||||
Throw New Exception("Keine EXG-Gestellungen gefunden für: " & bezugsNrEXG)
|
||||
End If
|
||||
|
||||
Console.WriteLine("EXG-Test: " & exgIds.Count & " Gestellungen gefunden.")
|
||||
|
||||
Dim BezugsNr As String = "TEST_EXG_" & Now.ToString("MMddHHmmss")
|
||||
Dim NCTS_OUT As New DAKOSY_Worker.cDakosyNCTSOut004
|
||||
Dim DY_ANM As New cDakosy_Zollanmeldungen
|
||||
Dim firma As String = ""
|
||||
Dim niederlassung As String = ""
|
||||
Dim firstEXG As Boolean = True
|
||||
|
||||
NCTS_OUT.ncts_ObjectName = BezugsNr
|
||||
|
||||
'EXG-Daten laden und NCTS befüllen
|
||||
For Each exgId In exgIds.Distinct()
|
||||
Dim EXG As New DAKOSY_Worker.cDakosyEXG
|
||||
EXG.exg_Id = exgId
|
||||
|
||||
If Not EXG.LOAD(True) Then Throw New Exception("EXG nicht gefunden: " & exgId)
|
||||
If EXG.exg_POSITION Is Nothing OrElse EXG.exg_POSITION.Count = 0 Then Throw New Exception("EXG ohne Positionen: " & exgId)
|
||||
|
||||
If firstEXG Then
|
||||
firma = EXG.exg_firma
|
||||
niederlassung = EXG.exg_niederlassung
|
||||
firstEXG = False
|
||||
Else
|
||||
If firma <> EXG.exg_firma OrElse niederlassung <> EXG.exg_niederlassung Then
|
||||
Throw New Exception("EXG-Datensätze gehören zu unterschiedlichen Firmen oder Niederlassungen.")
|
||||
End If
|
||||
End If
|
||||
|
||||
DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, BezugsNr) '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
Console.WriteLine("TEST NCTS: EXG übernommen: " & EXG.exg_ObjectName)
|
||||
|
||||
|
||||
Dim HC = NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Last()
|
||||
|
||||
Console.WriteLine("EXG: " & EXG.exg_ObjectName)
|
||||
Console.WriteLine("EXG Versender: " & Convert.ToString(EXG.exg_Consignor_Name))
|
||||
Console.WriteLine("EXG Empfänger: " & Convert.ToString(EXG.exg_Consignee_Name))
|
||||
Console.WriteLine("NCTS Versender: " & Convert.ToString(HC.nctsHC_Consignor_Name))
|
||||
Console.WriteLine("NCTS Empfänger: " & Convert.ToString(HC.nctsHC_Consignee_Name))
|
||||
|
||||
|
||||
Next
|
||||
|
||||
|
||||
If NCTS_OUT.ncts_HOUSE_CONSIGNMENT Is Nothing OrElse NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Count = 0 Then
|
||||
Throw New Exception("Keine NCTS-House-Consignments erzeugt.")
|
||||
End If
|
||||
|
||||
'Neue Zollanmeldung erstellen
|
||||
DY_ANM.dy_ART = nctsArt
|
||||
DY_ANM.dy_BezugsNr = BezugsNr
|
||||
|
||||
If Not DY_ANM.SAVE() OrElse DY_ANM.dy_Id <= 0 Then
|
||||
Throw New Exception("NCTS-Zollanmeldung konnte nicht erstellt werden.")
|
||||
End If
|
||||
|
||||
'NCTS mit der neuen Zollanmeldung verknüpfen
|
||||
NCTS_OUT.ncts_ObjectName = BezugsNr
|
||||
NCTS_OUT.ncts_dyaAnmID = DY_ANM.dy_Id
|
||||
NCTS_OUT.ncts_Trans_Referenz = BezugsNr & "_" & Now.ToString("ddMMyyHHmmSS") 'Eindeutig
|
||||
NCTS_OUT.ncts_Erstellung_SB = DY_ANM.dy_Erstellung_SB
|
||||
NCTS_OUT.ncts_LetzteBearbeitung = Now
|
||||
NCTS_OUT.ncts_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB
|
||||
NCTS_OUT.ncts_firma = If(firma, "VERAG")
|
||||
NCTS_OUT.ncts_niederlassung = If(niederlassung, "SUB")
|
||||
|
||||
'CheckNCTSStringLengths(NCTS_OUT)
|
||||
If Not NCTS_OUT.SAVE_ALL() Then
|
||||
Throw New Exception("NCTS-Daten konnten nicht gespeichert werden. DY-ID: " & DY_ANM.dy_Id)
|
||||
End If
|
||||
|
||||
'NCTS-XML erstellen
|
||||
Dim saveFile As String = ""
|
||||
|
||||
|
||||
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
If Not cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, "CREATE", Application.StartupPath, "NCTS") Then
|
||||
Throw New Exception("NCTS-XML konnte nicht erzeugt werden.")
|
||||
End If
|
||||
|
||||
If String.IsNullOrWhiteSpace(saveFile) OrElse Not System.IO.File.Exists(saveFile) Then
|
||||
Throw New Exception("NCTS-XML-Datei fehlt.")
|
||||
End If
|
||||
|
||||
'Optional an DAKOSY senden
|
||||
If sendFTP Then
|
||||
If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, BezugsNr, DY_ANM.dy_Id, firma) Then
|
||||
DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03)
|
||||
DY_ANM.UPDATE_DATA()
|
||||
DY_ANM.UPDATE_AVISO_SND(DY_ANM.dy_SendungsId)
|
||||
Else
|
||||
DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_09)
|
||||
Throw New Exception("NCTS-FTP-Versand fehlgeschlagen. DY-ID: " & DY_ANM.dy_Id)
|
||||
End If
|
||||
End If
|
||||
|
||||
Console.WriteLine("TEST NCTS: " & BezugsNr & " / DY-ID: " & DY_ANM.dy_Id)
|
||||
Return saveFile
|
||||
End Function
|
||||
Private Shared Sub CheckNCTSStringLengths(NCTS_OUT As cDakosyNCTSOut004)
|
||||
Using conn = VERAG_PROG_ALLGEMEIN.SQL.GetNewOpenConnectionFMZOLL
|
||||
|
||||
Dim lengths As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase)
|
||||
|
||||
Using cmd As New SqlClient.SqlCommand("
|
||||
SELECT c.name, t.name AS DataType, c.max_length
|
||||
FROM sys.columns c
|
||||
INNER JOIN sys.types t ON c.user_type_id = t.user_type_id
|
||||
WHERE c.object_id = OBJECT_ID('dbo.tblDakosy_NCTSOut004')
|
||||
AND t.name IN ('varchar', 'nvarchar', 'char', 'nchar')", conn)
|
||||
|
||||
Using dr = cmd.ExecuteReader()
|
||||
While dr.Read()
|
||||
Dim maxLen As Integer = CInt(dr("max_length"))
|
||||
If maxLen = -1 Then Continue While
|
||||
Dim dataType As String = CStr(dr("DataType"))
|
||||
If dataType = "nvarchar" OrElse dataType = "nchar" Then maxLen \= 2
|
||||
lengths.Add(CStr(dr("name")), maxLen)
|
||||
End While
|
||||
End Using
|
||||
End Using
|
||||
|
||||
Dim errors As New List(Of String)
|
||||
|
||||
For Each prop In NCTS_OUT.GetType().GetProperties()
|
||||
If prop.PropertyType IsNot GetType(String) OrElse Not prop.CanRead Then Continue For
|
||||
If prop.GetIndexParameters().Length > 0 Then Continue For
|
||||
If Not lengths.ContainsKey(prop.Name) Then Continue For
|
||||
|
||||
Dim value As String = TryCast(prop.GetValue(NCTS_OUT, Nothing), String)
|
||||
If value Is Nothing Then Continue For
|
||||
|
||||
Dim maxLen As Integer = lengths(prop.Name)
|
||||
Dim actualBytes As Integer = System.Text.Encoding.GetEncoding(1252).GetByteCount(value)
|
||||
If actualBytes > maxLen Then
|
||||
errors.Add(prop.Name & ": " & actualBytes & "/" & maxLen & " Bytes - " & value.Substring(0, Math.Min(value.Length, 100)))
|
||||
End If
|
||||
Next
|
||||
|
||||
If errors.Count > 0 Then
|
||||
MsgBox("Zu lange NCTS-Felder:" & vbCrLf & String.Join(vbCrLf, errors))
|
||||
Throw New Exception("Zu lange NCTS-Felder:" & vbCrLf & String.Join(vbCrLf, errors))
|
||||
End If
|
||||
If lengths.Count = 0 Then
|
||||
Throw New Exception("Keine Spalten für tblDakosy_NCTSOut004 gefunden. Datenbank oder Schema prüfen.")
|
||||
End If
|
||||
End Using
|
||||
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user