Files
ImportDokMag/.svn/pristine/94/94325e69f8ce9fc4f7aa4c8a17a448cc2e00cdac.svn-base
T

520 lines
19 KiB
Plaintext
Raw Normal View History

2026-10-14 11:31:36 +02:00
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