Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlTypes Imports System.IO Imports System.Threading 'Namespace for Thread class Public Class frmDokumentAufbereitung Inherits System.Windows.Forms.Form #Region " Vom Windows Form Designer generierter Code " Public Sub New() MyBase.New() ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. InitializeComponent() ' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen End Sub ' Die Form überschreibt den Löschvorgang der Basisklasse, um Komponenten zu bereinigen. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub ' Für Windows Form-Designer erforderlich Private components As System.ComponentModel.IContainer 'HINWEIS: Die folgende Prozedur ist für den Windows Form-Designer erforderlich 'Sie kann mit dem Windows Form-Designer modifiziert werden. 'Verwenden Sie nicht den Code-Editor zur Bearbeitung. Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar Friend WithEvents btnabbruch As System.Windows.Forms.Button Friend WithEvents btnWeiter As System.Windows.Forms.Button Friend WithEvents lblpartner As System.Windows.Forms.Label Friend WithEvents Label2 As System.Windows.Forms.Label Friend WithEvents btnclose As System.Windows.Forms.Button Private Sub InitializeComponent() Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(frmDokumentAufbereitung)) Me.btnabbruch = New System.Windows.Forms.Button() Me.Label1 = New System.Windows.Forms.Label() Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() Me.btnWeiter = New System.Windows.Forms.Button() Me.lblpartner = New System.Windows.Forms.Label() Me.Label2 = New System.Windows.Forms.Label() Me.btnclose = New System.Windows.Forms.Button() Me.SuspendLayout() ' 'btnabbruch ' Me.btnabbruch.Location = New System.Drawing.Point(8, 104) Me.btnabbruch.Name = "btnabbruch" Me.btnabbruch.Size = New System.Drawing.Size(88, 32) Me.btnabbruch.TabIndex = 0 Me.btnabbruch.Text = "Abbruch" ' 'Label1 ' Me.Label1.Location = New System.Drawing.Point(8, 32) Me.Label1.Name = "Label1" Me.Label1.Size = New System.Drawing.Size(352, 32) Me.Label1.TabIndex = 1 Me.Label1.Text = "Die auszudruckenden Dokumente werden zusammengestellt und aufbereitet." ' 'ProgressBar1 ' Me.ProgressBar1.Location = New System.Drawing.Point(8, 64) Me.ProgressBar1.Name = "ProgressBar1" Me.ProgressBar1.Size = New System.Drawing.Size(352, 23) Me.ProgressBar1.TabIndex = 2 ' 'btnWeiter ' Me.btnWeiter.Enabled = False Me.btnWeiter.Location = New System.Drawing.Point(232, 104) Me.btnWeiter.Name = "btnWeiter" Me.btnWeiter.Size = New System.Drawing.Size(128, 32) Me.btnWeiter.TabIndex = 3 Me.btnWeiter.Text = "Druckdialog anzeigen" ' 'lblpartner ' Me.lblpartner.Location = New System.Drawing.Point(56, 8) Me.lblpartner.Name = "lblpartner" Me.lblpartner.Size = New System.Drawing.Size(336, 23) Me.lblpartner.TabIndex = 5 ' 'Label2 ' Me.Label2.Location = New System.Drawing.Point(8, 8) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(48, 23) Me.Label2.TabIndex = 4 Me.Label2.Text = "Partner:" ' 'btnclose ' Me.btnclose.Location = New System.Drawing.Point(8, 104) Me.btnclose.Name = "btnclose" Me.btnclose.Size = New System.Drawing.Size(88, 32) Me.btnclose.TabIndex = 6 Me.btnclose.Text = "Schliessen" Me.btnclose.Visible = False ' 'frmDokumentAufbereitung ' Me.AutoScale = False Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(370, 141) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.btnclose, Me.lblpartner, Me.Label2, Me.btnWeiter, Me.ProgressBar1, Me.Label1, Me.btnabbruch}) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(366, 166) Me.MinimizeBox = False Me.Name = "frmDokumentAufbereitung" Me.Text = "Druckaufbereitung" Me.ResumeLayout(False) End Sub #End Region Dim DruckThread As New Thread(AddressOf Druckaufbereitung) Dim ProgressThread As New Threading.Thread(AddressOf set_progress) Dim M_Druchjobid As Integer Dim alnr As Integer Dim part As Integer Public Sub New(ByVal druckjobid As Integer, ByVal part As Integer) MyBase.New() ' Dieser Aufruf ist für den Windows Form-Designer erforderlich. InitializeComponent() Me.M_Druchjobid = druckjobid Me.alnr = druckjobid Me.part = part ' Initialisierungen nach dem Aufruf InitializeComponent() hinzufügen End Sub Private Sub tf_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.get_partner(alnr) Me.Text = "Dokumentaufbereitung: " + Me.lblpartner.Text Me.ProgressBar1.Value = 0 Me.btnWeiter.Text = "Drucken" End Sub Private Sub set_progress() Try Do While 1 = 1 Me.ProgressBar1.Value = Me.ProgressBar1.Value + 1 If Me.ProgressBar1.Value = 100 Then Me.ProgressBar1.Value = 0 ProgressThread.Sleep(100) Loop Catch End Try End Sub Public Sub StartDruckaufbereituung() ProgressThread.Start() DruckThread.Start() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnabbruch.Click Try ProgressThread.Abort() Catch End Try Try DruckThread.Abort() Catch End Try Close() End Sub Private Sub Druckaufbereitung() Try Dim remoteObj As EDKB07Verarbeitung.EDKB07Verarbeitung.IEDKB07 Dim Obj As Object Obj = Activator.GetObject( _ GetType(EDKB07Verarbeitung.EDKB07Verarbeitung.IEDKB07), _ System.Configuration.ConfigurationSettings.AppSettings("RemoteObjUrl")) remoteObj = CType(Obj, EDKB07Verarbeitung.EDKB07Verarbeitung.IEDKB07) remoteObj.PrintJobF(Me.M_Druchjobid, Me.part) Me.btnWeiter.Enabled = True Me.ProgressBar1.Value = 100 Me.Refresh() Application.DoEvents() Me.Label1.Text = "Die EDOKA-Druckaufbereitung ist abgeschlossen." Me.Text = "Fertig - " + Me.Text Me.BringToFront() Catch ex As Exception MsgBox("Aufgrund des folgenden Fehlers konnte der Druckjob nicht gestartet werden:" + vbCrLf + vbCrLf + ex.Message, MsgBoxStyle.Critical) Finally Me.Cursor = Cursors.Default ProgressThread.Abort() DruckThread.Abort() End Try End Sub Private printthread As Thread Private Sub btnWeiter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWeiter.Click Try kill_acroreader() Catch End Try tuesdrucken() End Sub Private Sub kill_acroreader() Try Dim myprocess() As Process Dim mp As Process myprocess = Process.GetProcessesByName("acrord32") For Each mp In myprocess mp.Kill() Next Thread.Sleep(100) Catch ex As Exception Finally End Try End Sub Private Sub tuesdrucken() Dim i As Integer Me.Cursor = Cursors.WaitCursor If get_pdf(alnr, Me.part) Then Me.btnclose.Visible = True Me.btnabbruch.Visible = False Me.btnWeiter.Text = "Ausdruck wiederholen" print_pdf(alnr) If get_parts(alnr) = 0 Then Me.update_aushaendigungsquittung_status(alnr, 3) End If If part = 0 Then set_druckjobstatus(alnr, 3) Else Me.set_druckjobstatus_part(alnr, part, 3) End If Else MsgBox("Das temporäre PDF-Dokumente konnte nicht erstellt werden.", MsgBoxStyle.Information) End If Me.Cursor = Cursors.Default Me.Close() End Sub Public Function get_parts(ByVal alnr As Integer) As Integer Dim connect As New SqlConnection() connect.ConnectionString = Globals.sConnectionString Dim scmCmdToExecute As SqlCommand = New SqlCommand() scmCmdToExecute.CommandText = "dbo.sp_edex_bl_get_druckjobparts_count" scmCmdToExecute.CommandType = CommandType.StoredProcedure Dim dtToReturn As DataTable = New DataTable() Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute) Try scmCmdToExecute.Connection = connect scmCmdToExecute.Parameters.Add(New SqlParameter("@auslieferungnr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, alnr)) scmCmdToExecute.Parameters.Add(New SqlParameter("@parts", SqlDbType.Int, 4, ParameterDirection.Output, True, 10, 0, "", DataRowVersion.Proposed, 0)) sdaAdapter.Fill(dtToReturn) Return scmCmdToExecute.Parameters("@parts").Value Catch ex As Exception Return -1 Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() connect.Dispose() End Try End Function Private Function set_druckjobstatus_part(ByVal alnr As Integer, ByVal part As Integer, ByVal status As Integer) As Integer Dim scmCmdToExecute As SqlCommand = New SqlCommand() scmCmdToExecute.CommandText = "dbo.SP_edex_bl_set_druckjobstatus_part" scmCmdToExecute.CommandType = CommandType.StoredProcedure Dim dtToReturn As DataTable = New DataTable() Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute) Try scmCmdToExecute.Connection = conn.scoDBConnection scmCmdToExecute.Parameters.Add(New SqlParameter("@auslieferungnr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, alnr)) scmCmdToExecute.Parameters.Add(New SqlParameter("@part", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, part)) scmCmdToExecute.Parameters.Add(New SqlParameter("@status", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, status)) scmCmdToExecute.Parameters.Add(New SqlParameter("@return", SqlDbType.Int, 4, ParameterDirection.Output, True, 10, 0, "", DataRowVersion.Proposed, 0)) sdaAdapter.Fill(dtToReturn) Return scmCmdToExecute.Parameters("@return").Value Catch ex As Exception Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() End Try End Function Private Sub print_pdf(ByVal alnr As Integer) Try Dim f As New frmPDFPrinter(True) f.addressBar.Text = dokumentfilename f.MdiParent = Me.MdiParent f.alnr = alnr f.Part = Me.part f.Show() Application.DoEvents() f.PrintPDF() Catch ex As Exception End Try End Sub Dim dokumentfilename As String Private Function get_pdf(ByVal alnr As Integer, ByVal part As Integer) As Boolean If part = 0 Then 'PDF-Dokument aus der Datenbank auslesen Me.Cursor = Cursors.WaitCursor Dim connection As New SqlConnection() Dim da As New SqlDataAdapter("Select * from edex_bl_druckjob where (status=2 or status=3) and auslieferungnr=" + LTrim(Str(alnr)), connection) Dim CB As SqlCommandBuilder = New SqlCommandBuilder(da) Dim ds As New DataSet() Try 'Connectionstring zur Datenbank connection.ConnectionString = Globals.sConnectionString connection.Open() da.Fill(ds, "docs") Dim myRow As DataRow myRow = ds.Tables(0).Rows(0) Dim MyData() As Byte MyData = myRow.Item("pdfdokument_aufbereitet") dokumentfilename = Globals.Applikationsdaten.Rows(Globals.AppldataRow).Item("pfad_temporaer_dokumente") + LTrim(Str(myRow.Item(0))) + ".PDF" Dim K As Long K = UBound(MyData) Dim fs As New FileStream(dokumentfilename, FileMode.OpenOrCreate, FileAccess.Write) fs.Write(MyData, 0, K) fs.Close() fs = Nothing Return True Catch ex As Exception Return False Finally CB = Nothing ds = Nothing da = Nothing connection.Close() connection = Nothing Me.Cursor = Cursors.Default End Try Else 'PDF-Dokument aus der Datenbank auslesen Me.Cursor = Cursors.WaitCursor Dim connection As New SqlConnection() Dim s As String = "SELECT dbo.EDEX_BL_Druckjob_Part.* " & _ "FROM dbo.EDEX_BL_Druckjob INNER JOIN " & _ "dbo.EDEX_BL_Druckjob_Part ON dbo.EDEX_BL_Druckjob.druckjobnr = dbo.EDEX_BL_Druckjob_Part.druckjobnr " & _ "where (dbo.edex_bl_druckjob_part.status=2 or dbo.edex_bl_druckjob_part.status=3) and dbo.edex_bl_druckjob.auslieferungnr=" + LTrim(Str(alnr)) & " " & _ "and dbo.edex_bl_druckjob_part.partno=" + LTrim(part) Dim da As New SqlDataAdapter(s, connection) Dim CB As SqlCommandBuilder = New SqlCommandBuilder(da) Dim ds As New DataSet() Try 'Connectionstring zur Datenbank connection.ConnectionString = Globals.sConnectionString connection.Open() da.Fill(ds, "docs") Dim myRow As DataRow myRow = ds.Tables(0).Rows(0) Dim MyData() As Byte MyData = myRow.Item("pdfdokument_aufbereitet") dokumentfilename = Globals.Applikationsdaten.Rows(Globals.AppldataRow).Item("pfad_temporaer_dokumente") + LTrim(Str(myRow.Item(0))) + ".PDF" Dim K As Long K = UBound(MyData) Dim fs As New FileStream(dokumentfilename, FileMode.OpenOrCreate, FileAccess.Write) fs.Write(MyData, 0, K) fs.Close() fs = Nothing Return True Catch ex As Exception Return False Finally CB = Nothing ds = Nothing da = Nothing connection.Close() connection = Nothing Me.Cursor = Cursors.Default End Try End If End Function Private Function set_druckjobstatus(ByVal alnr As Integer, ByVal status As Integer) Dim scmCmdToExecute As SqlCommand = New SqlCommand() scmCmdToExecute.CommandText = "dbo.SP_edex_bl_set_druckjobstatus" scmCmdToExecute.CommandType = CommandType.StoredProcedure Dim dtToReturn As DataTable = New DataTable() Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute) Try scmCmdToExecute.Connection = conn.scoDBConnection scmCmdToExecute.Parameters.Add(New SqlParameter("@auslieferungnr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, alnr)) scmCmdToExecute.Parameters.Add(New SqlParameter("@status", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, status)) sdaAdapter.Fill(dtToReturn) Return dtToReturn Catch ex As Exception Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() End Try End Function Private Function get_partner(ByVal alnr As Integer) Dim scmCmdToExecute As SqlCommand = New SqlCommand() scmCmdToExecute.CommandText = "dbo.SP_edex_bl_get_partner" scmCmdToExecute.CommandType = CommandType.StoredProcedure Dim dtToReturn As DataTable = New DataTable() Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute) Try scmCmdToExecute.Connection = conn.scoDBConnection scmCmdToExecute.Parameters.Add(New SqlParameter("@alnr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, alnr)) scmCmdToExecute.Parameters.Add(New SqlParameter("@bkpar00", SqlDbType.VarChar, 255, ParameterDirection.Output, True, 10, 0, "", DataRowVersion.Proposed, "")) sdaAdapter.Fill(dtToReturn) Me.lblpartner.Text = scmCmdToExecute.Parameters("@bkpar00").Value Return dtToReturn Catch ex As Exception Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() End Try End Function Private Function update_aushaendigungsquittung_status(ByVal auslieferungnr As Integer, ByVal status As Integer) Dim scmCmdToExecute As SqlCommand = New SqlCommand() scmCmdToExecute.CommandText = "dbo.SP_edex_bl_aushaendigungsquittung_update_status" scmCmdToExecute.CommandType = CommandType.StoredProcedure Dim dtToReturn As DataTable = New DataTable() Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute) Try scmCmdToExecute.Connection = conn.scoDBConnection scmCmdToExecute.Parameters.Add(New SqlParameter("@auslieferungnr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, auslieferungnr)) scmCmdToExecute.Parameters.Add(New SqlParameter("@status", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, status)) scmCmdToExecute.Parameters.Add(New SqlParameter("@mitarbeiternr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Globals.MitarbeiterNr)) sdaAdapter.Fill(dtToReturn) Return dtToReturn Catch ex As Exception Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() End Try End Function Private Sub btnclose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnclose.Click Me.Close() End Sub End Class