Imports System.Globalization Imports System.IO Imports System.Text Public Class MainFrm Public Tylko_Listing As Boolean Public f_out As StreamWriter ' Plik wyjściowy Private Structure DokKolumny Public cLp As Integer Public cDokument As Integer Public cDokZr As Integer Public cDZKOpis As Integer Public cDataWyst As Integer Public cDataOper As Integer Public cSumaCT As Integer Public cSumaDT As Integer Public cDZKDziennik As Integer Public cDekret As Integer Public cRokMiesiac As Integer Public cDataImp As Integer Public cMagazyn As Integer Public cKontrahent As Integer Public cOpisDok As Integer Public cDokKor As Integer End Structure Private SpFlag, ZakFlag, WewFlag As Integer Private RM, Rok, Mies As Integer Private SrcConn_str, DstConn_str As String Private KD As DokKolumny '---------------------------------------------------------- Private Const INT_lens As Integer = 1 Private p() As Integer = {2, 4, 7, 9, 3, INT_lens} Public Function Encrypt(ByVal inputstr As String) As String Dim str As StringBuilder Dim b As Integer = 6 Dim i, j, k, c, cc, bb, lens As Integer If inputstr > "" Then str = New StringBuilder(inputstr) lens = str.Length While (lens < b) OrElse (lens Mod b) str.Append(” “) lens += INT_lens End While cc = (lens / b) - INT_lens For i = 0 To cc bb = b - INT_lens For j = 0 To bb k = p(j) + 100 c = (6 * i + j) str.Replace(str.Chars(c), Chr(Asc(str.Chars(c)) + k), c, INT_lens) Next Next Return str.ToString Else Return "" End If str = Nothing End Function Public Function Decrypt(ByVal inputstr As String) As String Dim str As StringBuilder Dim b As Integer = 6 Dim i, j, k, c, c1, cc, bb, lens As Integer If inputstr > "" Then str = New StringBuilder(inputstr) lens = str.Length While (lens < b) OrElse (lens Mod b) str.Append(” “) lens += INT_lens End While cc = (lens / b) - INT_lens For i = 0 To cc bb = b - INT_lens For j = 0 To bb k = p(j) + 100 c = (6 * i + j) c1 = Asc(str.Chars(c)) c1 -= k str.Replace(str.Chars(c), Chr(c1), c, INT_lens) Next j Next i Return str.ToString Else Return "" End If str = Nothing End Function Private Function zrob_polaczenie(srv As String, baza As String, user As String, pass As String) Dim cnstr As String cnstr = "Data Source=" + srv + ";Initial Catalog=" + baza cnstr += ";Persist Security Info=false;User ID=" + Decrypt(user).Trim + ";Password=" + Decrypt(pass).Trim Return (cnstr) End Function Private Function PolaczBaze() As Boolean Dim B1, conn, pp, K1 As String Dim ret As Boolean = False lbUwaga.Text = "Czekaj: Logowanie do ERPXL" lbUwaga.Visible = True lbUwaga.BringToFront() lbUwaga.Refresh() If Strings.Left(UCase(My.Settings.BazaDst), 6) = "CDNXL_" Or Strings.Left(UCase(My.Settings.BazaDst), 6) = "ERPXL_" Then B1 = Mid(My.Settings.BazaDst, 7) Else B1 = My.Settings.BazaDst End If K1 = My.Settings.SerwerKlucza If Not Zalogowany Then listuj(" Logowanie do ERP XL - proszę czekać...") ret = Zaloguj(B1, "", "", K1) If ret Then listuj(" sprawdzanie dostępności licencji...") ret = XLSprawdzLicencje() If ret Then listuj(" Zalogowano pomyslnie do ERP XL") conn = FunkcjeXL.Polaczenie() 'string połączenia wyznaczony przez API pp = InStr(conn, "SERVER=") conn = Mid(conn, pp) DstConn_str = conn ret = True Else listuj("!! Nie udało się pobrać licencji stanowiskowej ERP XL.") Wyloguj() End If Else listuj("!! Nie udało się zalogować. Proszę uruchomić aplikację ERP XL !!") End If If Not ret Then TcZakladki.SelectedTab = TpList TpList.Select() End If lbUwaga.Text = "Czekaj: pobieranie danych" lbUwaga.Visible = False lbUwaga.Invalidate() Return ret End Function '---------------------------------------------------------- Public Sub UstawKolumny() With KD .cLp = DgvDokumenty.Columns.Item("colLp").Index .cDokument = DgvDokumenty.Columns.Item("colDokument").Index .cDokZr = DgvDokumenty.Columns.Item("colDokZr").Index .cDZKOpis = DgvDokumenty.Columns.Item("colDZKOpis").Index .cDataWyst = DgvDokumenty.Columns.Item("colDataWyst").Index .cDataOper = DgvDokumenty.Columns.Item("colDataOper").Index .cSumaCT = DgvDokumenty.Columns.Item("colSumaCT").Index .cSumaDT = DgvDokumenty.Columns.Item("colSumaDT").Index .cDZKDziennik = DgvDokumenty.Columns.Item("colDZKDziennik").Index .cDekret = DgvDokumenty.Columns.Item("colDekret").Index .cRokMiesiac = DgvDokumenty.Columns.Item("colRokMiesiac").Index .cDataImp = DgvDokumenty.Columns.Item("colDataImportu").Index .cMagazyn = DgvDokumenty.Columns.Item("colMagazyn").Index .cKontrahent = DgvDokumenty.Columns.Item("colKontrahent").Index .cOpisDok = DgvDokumenty.Columns.Item("colOpisDok").Index .cDokKor = DgvDokumenty.Columns.Item("colDokKoryg").Index End With End Sub Private Sub CbWewn_CheckedChanged(sender As Object, e As EventArgs) Handles CbWewn.CheckedChanged If CbWewn.Checked Then WewFlag = 1 Else WewFlag = 0 End If OdswiezDane() End Sub Private Sub BtOdswiez_Click(sender As Object, e As EventArgs) Handles BtOdswiez.Click OdswiezDane() End Sub Private Sub CbZakup_CheckedChanged(sender As Object, e As EventArgs) Handles CbZakup.CheckedChanged If CbZakup.Checked Then ZakFlag = 1 Else ZakFlag = 0 End If OdswiezDane() End Sub Private Sub edRok_ValueChanged(sender As Object, e As EventArgs) Handles edRok.ValueChanged If IsNumeric(edRok.Value) Then Rok = edRok.Value Tamy_ImpDM_Konta.Fill(Me.DsMain.Tbmy_ImpDM_Konta, Rok, Mies) BsTbmyImpDMKonta.ResetBindings(False) OdswiezDane() End If End Sub Private Sub CbMiesiac_TextChanged(sender As Object, e As EventArgs) Handles CbMiesiac.TextChanged Mies = CbMiesiac.Items.IndexOf(CbMiesiac.Text) + 1 Tamy_ImpDM_Konta.Fill(Me.DsMain.Tbmy_ImpDM_Konta, Rok, Mies) BsTbmyImpDMKonta.ResetBindings(False) OdswiezDane() End Sub Private Sub DgvDokumenty_KeyPress(sender As Object, e As KeyPressEventArgs) 'Handles DgvDokumenty.KeyPress Dim wiersz As DataGridViewRow Dim check As Boolean Dim colWybrany, colData, kk As Integer Select Case e.KeyChar Case " " kk = 0 colWybrany = DgvDokumenty.Columns.Item("Wybrany").Index colData = DgvDokumenty.Columns.Item("colDataImportu").Index For Each wiersz In DgvDokumenty.SelectedRows If wiersz.Cells(colData).Value <= "1990-01-01 00:00:00" Then check = wiersz.Cells(colWybrany).Value wiersz.Cells(colWybrany).Value = Not check If (kk Mod 10) = 0 Then Application.DoEvents() End If kk += 1 Next End Select End Sub Private Sub CbSprzedaz_CheckedChanged(sender As Object, e As EventArgs) Handles CbSprzedaz.CheckedChanged If CbSprzedaz.Checked Then SpFlag = 1 Else SpFlag = 0 End If OdswiezDane() End Sub Private Sub DgvDokumenty_RowPostPaint(sender As Object, e As DataGridViewRowPostPaintEventArgs) Handles DgvDokumenty.RowPostPaint If Not DgvDokumenty.Rows(e.RowIndex).Cells("colDataImportu").Value Is DBNull.Value Then If CStr(DgvDokumenty.Rows(e.RowIndex).Cells("colDataImportu").Value) > "1990-01-01" Then DgvDokumenty.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Red End If End Sub Private Sub BtImport_Click(sender As Object, e As EventArgs) Handles BtImport.Click Dim DoImportu As New List(Of DataGridViewRow) 'kopia zaznaczonych do importu dokumentów Dim Aktwiersz As DataGridViewRow Dim AktualnyDokument As String = "" Dim ret, Nr_ZapisuSrc As Integer Dim sql, ss, tresc, nrdok, s1, s2 As String If DgvDokumenty.Rows.Count > 0 Then If System.Windows.Forms.MessageBox.Show("Czy zaimportować zaznaczone dokumenty ?", "", MessageBoxButtons.YesNo) = DialogResult.No Then Return End If DoImportu.Clear() UstawKolumny() 'powiązanie nazw kolumn z ich indeksem For Each wiersz In DgvDokumenty.SelectedRows 'zrób kopię zaznaczonych na niebiesko dokumentów Dim targetRow = CType(wiersz.Clone(), DataGridViewRow) For Each cell As DataGridViewCell In wiersz.Cells targetRow.Cells(cell.ColumnIndex).Value = cell.Value Next DoImportu.Add(targetRow) Next If DoImportu.Count > 0 Then 'zaloguj do XL listuj("Start importu: " + Now) ret = PolaczBaze() If ret Then DgvDokumenty.CurrentCell = DgvDokumenty(0, 0) Aktwiersz = DgvDokumenty.CurrentRow For Each wiersz In DoImportu Aktwiersz = wiersz DgvDokumenty.CurrentCell = DgvDokumenty(0, wiersz.Cells.Item(0).Value - 1) 'pokaż aktualnie przetwarzany wiersz If (wiersz.Cells.Item(KD.cDataImp).Value <= "1990-01-01 00:00:00") And (AktualnyDokument <> wiersz.Cells.Item(KD.cDokument).Value) Then 'dekret nie zaimportowany AktualnyDokument = wiersz.Cells.Item(KD.cDokument).Value 'Nowa nota memoriałowa - numer dokumentu w Jastrzębiu Nr_ZapisuSrc = wiersz.Cells.Item(KD.cDekret).Value 'Dekret (DZK_GIDNumer) źródłowy tresc = " " s1 = AktualnyDokument.Substring(0, 2) If s1 = "PZ" Or s1 = "WZ" Or s1 = "KK" Or s1 = "PK" Or s1 = "WK" Then ss = IIf(IsNothing(wiersz.Cells.Item(KD.cKontrahent).Value), " ", wiersz.Cells.Item(KD.cKontrahent).Value) If ss > " " Then tresc = ss End If ss = IIf(IsNothing(wiersz.Cells.Item(KD.cOpisDok).Value), " ", wiersz.Cells.Item(KD.cOpisDok).Value) If ss > " " Then If tresc > " " Then tresc += "; " + ss Else tresc = ss End If If tresc < " " Then tresc = "brak opisu" nrdok = "" s1 = AktualnyDokument.Substring(0, 3) If s1 = "PZK" Or s1 = "PKI" Or s1 = "WZK" Or s1 = "WKE" Or s1 = "RWK" Or s1 = "PWK" Then nrdok = AktualnyDokument + ", " + IIf(IsNothing(wiersz.Cells.Item(KD.cDokKor).Value), "", wiersz.Cells.Item(KD.cDokKor).Value) Else nrdok = AktualnyDokument End If System.Threading.Thread.Sleep(200) 'chwilkę poczekaj na SQL Try If UtworzNote(nrdok, wiersz.Cells.Item(KD.cDataWyst).Value, '"Data Wystawienia" wiersz.Cells.Item(KD.cDataWyst).Value, 'wszystkie daty takie same wiersz.Cells.Item(KD.cDokZr).Value, '"Dokument źródłowy" tresc) Then '"treśc noty" ss = IIf(IsNothing(wiersz.Cells.Item(KD.cDZKOpis).Value), " ", wiersz.Cells.Item(KD.cDZKOpis).Value) s1 = AktualnyDokument.Substring(0, 2) If s1 = "WZ" Or s1 = "WK" Then ss = tresc 'dla WZ/WZE/WZK/WKE opis pozycji taki sam jak treść noty If DodajPozycjeNoty(Nr_ZapisuSrc, wiersz.Cells.Item(KD.cDataWyst).Value, wiersz.Cells.Item(KD.cDataWyst).Value, ss, nrdok) Then 'dodajpozycje noty ZamknijNote(True) 'zamknij notę System.Threading.Thread.Sleep(200) 'chwilkę poczekaj na SQL 'oznacz dokument jako zaimportowany sql = "update CDN.Dekrety Set DT_DataCentrali = datediff(s,'19900101', GetDate()) where DT_GIDNUmer = " & Str(Nr_ZapisuSrc) SqlCmd(sql, SrcConn_str) System.Threading.Thread.Sleep(200) 'chwilkę poczekaj na SQL 'AktualnyDokument = "" sql = "update CDN.MemNag set MEN_CechaOpis = '" + IIf(IsNothing(wiersz.Cells.Item(KD.cMagazyn).Value), "", wiersz.Cells.Item(KD.cMagazyn).Value) + "' " sql += " where MEN_GIDNumer = " + CStr(GIDNumer) SqlCmd(sql, DstConn_str) System.Threading.Thread.Sleep(200) 'chwilkę poczekaj na SQL Else ZamknijNote(False) 'usuń utworzoną notę AktualnyDokument = "" End If End If Catch ex As System.Exception ret = False System.Windows.Forms.MessageBox.Show("ImportClick: " & ex.Message) End Try Else listuj(CStr(Now) & "-> Dokument: " & wiersz.Cells.Item(2).Value & " już jest zaimportowany !!") End If Next End If Tylko_Listing = False OdswiezDane() End If TcZakladki.SelectedTab = TpList TpList.Select() End If End Sub Private Sub BtKonfig_Click(sender As Object, e As EventArgs) Handles BtKonfig.Click dlgKonfig.ShowDialog() End Sub Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick Dim plik As String Timer.Stop() My.Settings.Reload() Try plik = My.Settings.FolderR_Roboczy + "\ImportDM-" + Replace(Replace(Replace(Now, ":", "."), "/", "."), " ", "_") + ".LOG" f_out = System.IO.File.CreateText(plik) Tylko_Listing = False Catch Tylko_Listing = True End Try Timer.Enabled = False Application.DoEvents() If My.Settings.SerwerSrc > "" Then SrcConn_str = zrob_polaczenie(My.Settings.SerwerSrc, My.Settings.BazaSrc, My.Settings.MCsrc, My.Settings.Comsrc) Tamy_ImpDM_Src.Connection.ConnectionString = SrcConn_str Tamy_ImpDM_Dekr.Connection.ConnectionString = SrcConn_str Tamy_ImpDM_Konta.Connection.ConnectionString = SrcConn_str Tamy_ImpDM_Konta.Fill(Me.DsMain.Tbmy_ImpDM_Konta, Rok, Mies) BsTbmyImpDMKonta.ResetBindings(False) OdswiezDane() End If If My.Settings.SerwerKlucza > "" And My.Settings.BazaDst > "" Then PolaczBaze() 'If Zalogowany Then OdswiezDane() End Sub Private Sub BtUsunFlage_Click(sender As Object, e As EventArgs) Handles BtUsunFlage.Click If DgvDokumenty.Rows.Count > 0 Then If System.Windows.Forms.MessageBox.Show("Czy usunąć flagę z zaznaczonych dokumentów ?", "", MessageBoxButtons.YesNo) = DialogResult.Yes Then Dim sql As String Dim col As Integer col = DgvDokumenty.Columns("colDekret").Index For Each wiersz In DgvDokumenty.SelectedRows sql = "update CDN.Dekrety set DT_DataCentrali = 0 where DT_GIDNUmer = " & Str(wiersz.Cells(col).Value) SqlCmd(sql, SrcConn_str) Next OdswiezDane() End If End If End Sub Private Sub BtKoniec_Click(sender As Object, e As EventArgs) Handles BtKoniec.Click Wyloguj() If Not IsNothing(f_out) Then f_out.Flush() f_out.Close() End If Close() End Sub Private Sub OdswiezDane() Dim Konto As String Dim ImpFl, pos As Integer Konto = CbKonto.Text ImpFl = 2 If RbBlack.Checked Then ImpFl = 0 Else If RbRed.Checked Then ImpFl = 1 RM = CInt(CStr(Rok) & IIf(Mies < 10, "0", "") & CStr(Mies)) If RM < 2001 Or Mies <= 0 Then Return Try lbUwaga.Visible = True Application.DoEvents() lbUwaga.BringToFront() Application.DoEvents() lbUwaga.Refresh() Application.DoEvents() pos = BsTbmy_ImpDM_Src.Position Tamy_ImpDM_Src.Fill(Me.DsMain.Tbmy_ImpDM_Src, SpFlag, ZakFlag, WewFlag, RM, Rok, Mies, Konto, ImpFl) If pos < BsTbmy_ImpDM_Src.Count Then BsTbmy_ImpDM_Src.Position = pos Else BsTbmy_ImpDM_Src.Position = BsTbmy_ImpDM_Src.Count - 1 lbUwaga.Visible = False lbUwaga.Invalidate() Catch ex As System.Exception lbUwaga.Visible = False Application.DoEvents() lbUwaga.Refresh() Application.DoEvents() System.Windows.Forms.MessageBox.Show(ex.Message) End Try End Sub Private Sub MainFrm_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim spr As String SpFlag = 0 ZakFlag = 0 WewFlag = 0 Rok = Year(Now) Mies = Month(Now) edRok.Value = Rok CbMiesiac.SelectedIndex = Mies - 1 CbMiesiac.Text = CbMiesiac.Items(CbMiesiac.SelectedIndex) RbAll.Checked = True CbKonto.Text = "" spr = Encrypt(Environment.MachineName.ToUpper + Environment.UserName.ToUpper) DecimalSep = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator.ToString DecimalGroupSep = NumberFormatInfo.CurrentInfo.NumberGroupSeparator.ToString If spr <> My.Settings.check Then MsgBox("Niezgodna konfiguracja. Ustaw od nowa") My.Settings.SerwerSrc = "" ' My.Settings.SerwerDst = "" My.Settings.SerwerKlucza = "" My.Settings.BazaSrc = "" ' My.Settings.BazaDst = "" My.Settings.FolderR_Roboczy = "" My.Settings.MCsrc = "" ' My.Settings.MCdst = "" My.Settings.Comsrc = "" ' My.Settings.Comdst = "" My.Settings.check = spr My.Settings.Save() End If Timer.Start() End Sub Public Sub listuj(ByVal linia As String) If linia > "" Then LstWynik.Items.Add(linia) If Not Tylko_Listing Then f_out.WriteLine(linia) End If If (LstWynik.Items.Count - 1) > 0 Then LstWynik.TopIndex = Me.LstWynik.Items.Count - 1 Else LstWynik.TopIndex = 0 End If Application.DoEvents() End If End Sub Public Function SqlCmd(ByVal sql As String, conn_str As String) As Boolean Dim wynik As Boolean wynik = False Try Using connection As New SqlClient.SqlConnection(conn_str) Dim command As New SqlClient.SqlCommand(sql, connection) connection.Open() command.ExecuteNonQuery() wynik = True End Using Catch ex As Exception My.Forms.MainFrm.listuj(ex.Message) End Try Return (wynik) End Function Public Function GetOneVal(ByVal sql As String, conn_str As String) As String Dim val As String val = "" Try Using connection As New SqlClient.SqlConnection(conn_str) Dim command As New SqlClient.SqlCommand(sql, connection) connection.Open() Dim reader As SqlClient.SqlDataReader = command.ExecuteReader() While reader.Read() If reader.IsDBNull(0) Then val = "" Else val = CType(reader, IDataRecord)(0) End If End While reader.Close() End Using Catch ex As Exception My.Forms.MainFrm.listuj(ex.Message) End Try GetOneVal = val End Function End Class