Files
ImportDokMag/.svn/pristine/74/748465dbca0ef2a54899f2fe13f3a7855625066b.svn-base
T
2026-10-14 11:31:36 +02:00

480 lines
17 KiB
Plaintext

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.CurrentRow.Cells("colLp").ColumnIndex
.cDokument = DgvDokumenty.CurrentRow.Cells("colDokument").ColumnIndex
.cDokZr = DgvDokumenty.CurrentRow.Cells("colDokZr").ColumnIndex
.cDZKOpis = DgvDokumenty.CurrentRow.Cells("colDZKOpis").ColumnIndex
.cDataWyst = DgvDokumenty.CurrentRow.Cells("colDataWyst").ColumnIndex
.cDataOper = DgvDokumenty.CurrentRow.Cells("colDataOper").ColumnIndex
.cSumaCT = DgvDokumenty.CurrentRow.Cells("colSumaCT").ColumnIndex
.cSumaDT = DgvDokumenty.CurrentRow.Cells("colSumaDT").ColumnIndex
.cDZKDziennik = DgvDokumenty.CurrentRow.Cells("colDZKDziennik").ColumnIndex
.cDekret = DgvDokumenty.CurrentRow.Cells("colDekret").ColumnIndex
.cRokMiesiac = DgvDokumenty.CurrentRow.Cells("colRokMiesiac").ColumnIndex
.cDataImp = DgvDokumenty.CurrentRow.Cells("colDataImportu").ColumnIndex
.cMagazyn = DgvDokumenty.CurrentRow.Cells("colMagazyn").ColumnIndex
.cKontrahent = DgvDokumenty.CurrentRow.Cells("colKontrahent").ColumnIndex
.cOpisDok = DgvDokumenty.CurrentRow.Cells("colOpisDok").ColumnIndex
.cDokKor = DgvDokumenty.CurrentRow.Cells("colDokKoryg").ColumnIndex
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
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
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.CurrentRow.Cells("Wybrany").ColumnIndex
colData = DgvDokumenty.CurrentRow.Cells("colDataImportu").ColumnIndex
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
'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" Then 'dekret nie zaimportowany
AktualnyDokument = wiersz.Cells.Item(KD.cDokument).Value 'Nowa nota memoriałowa
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 = tresc + "Kontr.:" + 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
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
If UtworzNote(nrdok, wiersz.Cells.Item(KD.cDataWyst).Value, '"Data Wystawienia"
wiersz.Cells.Item(KD.cDataWyst).Value, 'wszytskie 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.cOpisDok).Value), "", wiersz.Cells.Item(KD.cOpisDok).Value)
If DodajPozycjeNoty(Nr_ZapisuSrc, wiersz.Cells.Item(KD.cDataWyst).Value,
wiersz.Cells.Item(KD.cDataWyst).Value,
ss) Then 'dodajpozycje noty
ZamknijNote(True) 'zamknij notę
'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)
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)
Else
ZamknijNote(False) 'usuń utworzoną notę
AktualnyDokument = ""
End If
End If
Else
listuj(CStr(Now) & "-> Dokument: " & wiersz.Cells.Item(2).Value & " już jest zaimportowany !!")
End If
Next
End If
Tylko_Listing = False
OdswiezDane()
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()
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.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()
RM = CInt(CStr(Rok) & IIf(Mies < 10, "0", "") & CStr(Mies))
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
If RM < 200001 Or Mies <= 0 Then Return
Try
lbUwaga.Visible = True
lbUwaga.BringToFront()
lbUwaga.Refresh()
Tamy_ImpDM_Src.Fill(Me.DsMain.Tbmy_ImpDM_Src, SpFlag, ZakFlag, WewFlag, RM, Rok, Mies)
lbUwaga.Visible = False
lbUwaga.Invalidate()
Catch ex As System.Exception
lbUwaga.Visible = False
lbUwaga.Refresh()
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)
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