Imports MySql.Data
Imports MySql.Data.MySqlClient
Imports Microsoft.Office.Interop
Public Class FMInstatAfnameMenu
Dim dbcon As MySqlConnection
Dim strQeury As String = ""
Dim SQLCmd As MySqlCommand
Dim DR As MySqlDataReader
Dim INSTAT_AantalWeken As Long
Private Sub GetDBdata()
Try
'Prepare connection and Query
dbcon = New MySqlConnection("server=10.1.30.104;Database=vm06inkdb1;UID=VBvm;Password=vermaat")
strQeury = "SELECT tblfab.F_naam, tblfab.F_blok FROM tblfab WHERE tblfab.F_blok = 0"
SQLCmd = New MySqlCommand(strQeury, dbcon)
'open the db and kickoff
dbcon.Open()
DR = SQLCmd.ExecuteReader
While DR.Read
CbFabrikant.Items.Add(DR.Item("F_naam"))
End While
CbFabrikant.Sorted = True
DR.Close()
strQeury = "SELECT tblafname.AF_jaar FROM tblafname GROUP BY tblafname.AF_jaar"
SQLCmd = New MySqlCommand(strQeury, dbcon)
'open the db and kickoff
DR = SQLCmd.ExecuteReader
While DR.Read
CbJaartal.Items.Add(DR.Item("AF_jaar"))
End While
CbJaartal.Sorted = True
DR.Close()
Catch ex As Exception
MsgBox("Foutmelding met communicatie" & vbCrLf & vbCrLf & ex.Message)
End Try
End Sub
Private Sub releaseObject(ByVal obj As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
obj = Nothing
Catch ex As Exception
obj = Nothing
Finally
GC.Collect()
End Try
End Sub
Private Sub FMInstatAfnameMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TS1.Text = Environment.UserName & " " & Now
GetDBdata()
CmdUitvoeren.Enabled = False
CbWeekeinde.Enabled = False
CbWeekStart.Enabled = False
CbMerk.Enabled = False
CbJaartal.Enabled = False
RbAfname1.Enabled = False
RbAfname2.Enabled = False
End Sub
Private Sub CbFabrikant_SelectedIndexChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbFabrikant.SelectedIndexChanged
If CbFabrikant.Text <> "" Then
CbMerk.Items.Clear()
strQeury = "SELECT tblfab.F_naam, tblmerk.M_naam FROM tblmerk INNER JOIN tblfab ON tblmerk.fid = tblfab.fid WHERE tblfab.F_naam = '" & CbFabrikant.Text & "'"
SQLCmd = New MySqlCommand(strQeury, dbcon)
DR = SQLCmd.ExecuteReader
While DR.Read
CbMerk.Items.Add(DR.Item("M_naam"))
End While
CbMerk.Sorted = True
CbMerk.Enabled = True
CbJaartal.Sorted = True
DR.Close()
End If
End Sub
Private Sub CbMerk_SelectedIndexChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbMerk.SelectedIndexChanged
If CbMerk.Text <> "" Then
CbJaartal.Enabled = True
End If
End Sub
Private Sub CbJaartal_SelectedIndexChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbJaartal.SelectedIndexChanged
If CbJaartal.Text <> "" Then
strQeury = "SELECT tblafname.AF_jaar, tblafname.AF_week FROM tblafname WHERE tblafname.AF_jaar = " & CbJaartal.Text & " GROUP BY tblafname.AF_week"
SQLCmd = New MySqlCommand(strQeury, dbcon)
DR = SQLCmd.ExecuteReader
CbWeekeinde.Items.Clear()
CbWeekStart.Items.Clear()
While DR.Read
CbWeekeinde.Items.Add(DR.Item("AF_week"))
CbWeekStart.Items.Add(DR.Item("AF_week"))
End While
CbWeekeinde.Enabled = True
CbWeekStart.Enabled = True
RbAfname1.Enabled = True
RbAfname1.Checked = True
DR.Close()
End If
End Sub
Private Sub CmdUitvoeren_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdUitvoeren.Click
Dim TypeStatistiek As String
Dim PeriodeStatistiek As String
Dim AfzenderStatistiek As String
Dim MFstatistiek As String
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
Dim iRow As Integer
Dim iCol As Integer
Dim Afnamebestandsnaam As String
Dim Countstring As String
Dim DR_uitvoeren As MySqlDataReader
If CbFabrikant.Text <> "" And CbMerk.Text <> "" Then
strQeury = "SELECT tblfab.F_naam, tblmerk.M_naam, tblart.A_nr, tblart.A_naam, tblart.A_vp1, tblart.A_vp2, tblafname.AF_week, tblafname.AF_jaar, sum(tblafname.AF_af) AS Afname FROM tblmerk INNER JOIN tblfab ON tblmerk.fid = tblfab.fid INNER JOIN tblart ON tblart.A_merk = tblmerk.mid INNER JOIN tblafname ON tblafname.AID = tblart.aid WHERE tblafname.AF_jaar = " & CbJaartal.Text & " AND tblafname.AF_week BETWEEN " & CbWeekStart.Text & " AND " & CbWeekeinde.Text & " AND tblfab.F_naam = '" & CbFabrikant.Text & "' AND tblmerk.M_naam = '" & CbMerk.Text & "' GROUP BY tblafname.AID, tblafname.AF_jaar"
TypeStatistiek = "Afname statistiek Fabrikant & Merk"
MFstatistiek = "Afname inhoud: " & CbFabrikant.Text & " - " & CbMerk.Text
Afnamebestandsnaam = "Afname " & CbFabrikant.Text & " - " & CbMerk.Text & " - " & CbJaartal.Text & " Week " & CbWeekStart.Text & " tm " & CbWeekeinde.Text
'Countstring = "SELECT count(tblart.aid) AS CountArt, tblmerk.M_naam, tblfab.F_naam FROM tblart INNER JOIN tblmerk ON tblart.A_merk = tblmerk.mid INNER JOIN tblfab ON tblmerk.fid = tblfab.fid WHERE tblfab.F_naam = '" & CbFabrikant.Text & "' AND tblmerk.M_naam = '" & CbMerk.Text & "' GROUP BY tblfab.F_naam"
'TsProgress.Maximum = Getrecordnummers(Countstring) + 5
ElseIf CbFabrikant.Text <> "" And CbMerk.Text = "" Then
strQeury = "SELECT tblfab.F_naam, tblmerk.M_naam, tblart.A_nr, tblart.A_naam, tblart.A_vp1, tblart.A_vp2, tblafname.AF_week, tblafname.AF_jaar, sum(tblafname.AF_af) AS Afname FROM tblmerk INNER JOIN tblfab ON tblmerk.fid = tblfab.fid INNER JOIN tblart ON tblart.A_merk = tblmerk.mid INNER JOIN tblafname ON tblafname.AID = tblart.aid WHERE tblafname.AF_jaar = " & CbJaartal.Text & " AND tblafname.AF_week BETWEEN " & CbWeekStart.Text & " AND " & CbWeekeinde.Text & " AND tblfab.F_naam = '" & CbFabrikant.Text & "' GROUP BY tblafname.AID, tblafname.AF_jaar"
TypeStatistiek = "Afname statistiek Fabrikant & Merk"
MFstatistiek = "Afname inhoud: " & CbFabrikant.Text
Afnamebestandsnaam = "Afname " & CbFabrikant.Text & " - " & CbJaartal.Text & " Week " & CbWeekStart.Text & " tm " & CbWeekeinde.Text
'Countstring = "SELECT count(tblart.aid) AS CountArt, tblmerk.M_naam, tblfab.F_naam FROM tblart INNER JOIN tblmerk ON tblart.A_merk = tblmerk.mid INNER JOIN tblfab ON tblmerk.fid = tblfab.fid WHERE tblfab.F_naam = '" & CbFabrikant.Text & "' GROUP BY tblfab.F_naam"
'TsProgress.Maximum = Getrecordnummers(Countstring) + 5
End If
PeriodeStatistiek = "Statistiek periode: " & CbJaartal.Text & " Week " & CbWeekStart.Text & " t/m " & CbWeekeinde.Text
AfzenderStatistiek = "Vermaat Groep afdeling inkoop"
TsProgress.Value = 1
xlApp = New Excel.Application
xlWorkBook = xlApp.Workbooks.Add
xlWorkSheet = xlWorkBook.Worksheets(1)
'Basis informatie statistiek
TsProgress.Value = 2
xlWorkSheet.Cells(8, 1) = "Artikelnr"
xlWorkSheet.Cells(8, 2) = "Artikelnaam"
xlWorkSheet.Cells(8, 3) = "Merk"
xlWorkSheet.Cells(8, 4) = "Eenheid"
xlWorkSheet.Cells(8, 5) = "Inhoud"
xlWorkSheet.Cells(8, 6) = "Afname"
iCol = 0
If ChkbArtLaatstePrijs.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(8, 6 + iCol) = "Art LP"
End If
If ChkbArtLaatstePrijs.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(8, 6 + iCol) = "Gem Colli"
End If
If ChkbArtPrivateLabel.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(8, 6 + iCol) = "Art PL"
End If
If ChkbArtOmzet.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(8, 6 + iCol) = "Art Omzet"
End If
If ChkbGroep.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(8, 6 + iCol) = "Art Groep"
End If
Dim SQLCmd As MySqlCommand
SQLCmd = New MySqlCommand(strQeury, dbcon)
DR_uitvoeren = SQLCmd.ExecuteReader
iRow = 9
TsProgress.Value = 3
While DR_uitvoeren.Read
iRow = iRow + 1
iCol = 0
xlWorkSheet.Cells(iRow, 1) = DR_uitvoeren.Item("A_nr")
xlWorkSheet.Cells(iRow, 2) = DR_uitvoeren.Item("A_naam")
xlWorkSheet.Cells(iRow, 3) = DR_uitvoeren.Item("M_naam")
xlWorkSheet.Cells(iRow, 4) = DR_uitvoeren.Item("A_vp1")
xlWorkSheet.Cells(iRow, 5) = DR_uitvoeren.Item("A_vp2")
xlWorkSheet.Cells(iRow, 6) = DR_uitvoeren.Item("Afname")
'Speciale artikelfuncties
If ChkbArtLaatstePrijs.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(iRow, 6 + iCol) = ArtikelModule_LaatstePrijs(DR_uitvoeren.Item("A_nr"))
End If
If ChkbArtgem.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(iRow, 6 + iCol) = ArtikelModule_GemColli(DR_uitvoeren.Item("Afname"))
End If
If ChkbArtPrivateLabel.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(iRow, 6 + iCol) = ArtikelModule_PrivateLabel(DR_uitvoeren.Item("A_nr"))
End If
If ChkbArtOmzet.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(iRow, 6 + iCol) = ArtikelModule_Omzet(DR_uitvoeren.Item("A_nr"))
End If
If ChkbGroep.Checked = True Then
iCol = iCol + 1
xlWorkSheet.Cells(iRow, 6 + iCol) = ArtikelModule_Groep(DR_uitvoeren.Item("A_nr"))
End If
TsProgress.Value = TsProgress.Value + 1
End While
TsProgress.Value = TsProgress.Value + 1
DR_uitvoeren.Close()
xlWorkSheet.Columns(1).AutoFit()
xlWorkSheet.Columns(2).AutoFit()
xlWorkSheet.Columns(3).AutoFit()
xlWorkSheet.Columns(4).AutoFit()
xlWorkSheet.Columns(5).AutoFit()
xlWorkSheet.Columns(6).AutoFit()
xlWorkSheet.Cells(1, 1) = TypeStatistiek
xlWorkSheet.Cells(2, 1) = MFstatistiek
xlWorkSheet.Cells(3, 1) = PeriodeStatistiek
xlWorkSheet.Cells(4, 1) = AfzenderStatistiek
TsProgress.Value = TsProgress.Value + 1
xlWorkBook.SaveAs(Filename:="C:\Users\hcontent\Documents\" & Afnamebestandsnaam & ".xlsx")
xlApp.Quit()
releaseObject(xlApp)
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
TsProgress.Value = 10
Ts2.Text = "Afname opgemaakt"
End Sub
Private Sub cmdclose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdclose.Click
dbcon.Close()
Me.Close()
End Sub
Private Sub CbWeekeinde_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles CbWeekeinde.Validating
Dim WaardenStart As Long = CLng(CbWeekStart.Text)
Dim WaardenEinde As Long = CLng(CbWeekeinde.Text)
If WaardenEinde < WaardenStart Then
ErrorProvider1.SetError(CbWeekeinde, "De einde week dient een groter getal te hebben als de start week.")
Else
ErrorProvider1.SetError(CbWeekeinde, "")
INSTAT_AantalWeken = WaardenEinde - WaardenStart 'Aantal weken voor rapportage
End If
End Sub
Private Sub ChkbFabrikantonly_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkbFabrikantonly.CheckedChanged
If ChkbFabrikantonly.Checked = True Then
CbJaartal.Enabled = True
CbMerk.Enabled = False
Else
CbJaartal.Enabled = False
CbMerk.Enabled = True
End If
End Sub
'Function Getrecordnummers(ByVal StringMYSQL As String) As Integer
' Dim DR_Aantal As MySqlDataReader
' Dim PLstring As String
' Dim PLstringcode As String
' SQLCmd = New MySqlCommand(StringMYSQL, dbcon)
' DR_Aantal = SQLCmd.ExecuteReader
' While DR_Aantal.Read
' Return (DR_Aantal.Item("CountArt"))
' End While
' DR_Aantal.Close()
'End Function
Function ArtikelModule_PrivateLabel(ByVal Artnr As String) As String
Dim DRPL As MySqlDataReader
Dim PLstring As String
Dim PLstringcode As String
strQeury = "SELECT tblart.A_nr, tblart.A_plcode, tblart.A_PL FROM tblart WHERE tblart.A_nr = " & Artnr & ""
SQLCmd = New MySqlCommand(strQeury, dbcon)
DRPL = SQLCmd.ExecuteReader
While DRPL.Read
If DRPL.Item("A_PL") = 0 Then PLstring = "Geen PL"
If DRPL.Item("A_PL") = 1 Then PLstring = "PL"
If DRPL.Item("A_PL") = -1 Then PLstring = "PL"
If DRPL.Item("A_PL") = 4 Then PLstring = "PL LOG"
If DRPL.Item("A_plcode") = 0 Then PLstringcode = "0"
If DRPL.Item("A_plcode") = 1 Then PLstringcode = "1"
If DRPL.Item("A_plcode") = 5 Then PLstringcode = "5"
If DRPL.Item("A_plcode") = 8 Then PLstringcode = "8"
If DRPL.Item("A_plcode") = 10 Then PLstringcode = "10"
Return PLstring & " / " & PLstringcode
End While
CbMerk.Sorted = True
CbMerk.Enabled = True
CbJaartal.Sorted = True
DRPL.Close()
End Function
Function ArtikelModule_LaatstePrijs(ByVal artnr As String) As Decimal
Dim DRLP As MySqlDataReader
strQeury = "SELECT tblart.A_nr, tblprijs.ap_jaar, tblprijs.ap_week, tblprijs.ap_prijs FROM tblprijs INNER JOIN tblart ON tblprijs.aid = tblart.aid WHERE tblprijs.ap_jaar = " & CbJaartal.Text & " AND tblart.A_nr = " & artnr & " ORDER BY tblprijs.ap_week DESC"
SQLCmd = New MySqlCommand(strQeury, dbcon)
DRLP = SQLCmd.ExecuteReader
While DRLP.Read
Return DRLP.Item("ap_prijs")
Exit While
End While
DRLP.Close()
End Function
Function ArtikelModule_GemColli(ByVal Colli As Long) As Decimal
Return Colli / INSTAT_AantalWeken
End Function
Function ArtikelModule_Omzet(ByVal Artnr As Long) As Decimal
Dim DR_Omzet As MySqlDataReader
strQeury = "SELECT tblart.A_nr, tblart_omzet.ao_jaar, tblart_omzet.ao_week, sum(tblart_omzet.ao_omzet) AS expr1 FROM tblart_omzet INNER JOIN tblart ON tblart_omzet.AID = tblart.aid WHERE tblart.A_nr = " & Artnr & " AND tblart_omzet.ao_jaar = " & CbJaartal.Text & " AND tblart_omzet.ao_week BETWEEN " & CbWeekStart.Text & " AND " & CbWeekeinde.Text & " GROUP BY tblart.A_nr, tblart_omzet.ao_jaar"
SQLCmd = New MySqlCommand(strQeury, dbcon)
DR_Omzet = SQLCmd.ExecuteReader
While DR_Omzet.Read
Return DR_Omzet.Item("expr1")
Exit While
End While
DR_Omzet.Close()
End Function
Function ArtikelModule_Groep(ByVal Artnr As Long) As String
Dim DR_Omzet As MySqlDataReader
strQeury = "SELECT tblart.A_nr, tblgid.G_naam FROM tblart INNER JOIN tblgid ON tblart.A_gr = tblgid.gid WHERE tblart.A_nr = " & Artnr & " GROUP BY tblart.A_nr, tblgid.G_naam"
SQLCmd = New MySqlCommand(strQeury, dbcon)
DR_Omzet = SQLCmd.ExecuteReader
While DR_Omzet.Read
Return DR_Omzet.Item("G_naam")
Exit While
End While
DR_Omzet.Close()
End Function
Private Sub CbWeekeinde_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CbWeekeinde.SelectedIndexChanged
If CbWeekeinde.Text <> "" Then
CmdUitvoeren.Enabled = True
Else
End If
End Sub
Private Sub CmdReset_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdReset.Click
CmdUitvoeren.Enabled = False
CbWeekeinde.Enabled = False
CbWeekStart.Enabled = False
CbMerk.Enabled = False
CbJaartal.Enabled = False
RbAfname1.Enabled = False
RbAfname2.Enabled = False
CbWeekeinde.Text = ""
CbWeekStart.Text = ""
CbFabrikant.Text = ""
CbMerk.Text = ""
CbJaartal.Text = ""
Ts2.Text = "Reset gereed!"
End Sub
End Class