Dodaj pliki projektów.
This commit is contained in:
1 parent
1d6a7b0924
commit
da030eff7c
298 files changed
+83623
No files matched your search
@@ -0,0 +1,371 @@
|
||||
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 SpFlag, ZakFlag, WewFlag As Integer
|
||||
Private RM, Rok, Mies As Integer
|
||||
Private SrcConn_str, DstConn_str As String
|
||||
|
||||
'----------------------------------------------------------
|
||||
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(My.Settings.BazaDst, My.Settings.SerwerDst) '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ć")
|
||||
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
|
||||
|
||||
'----------------------------------------------------------
|
||||
|
||||
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
|
||||
|
||||
If DgvDokumenty.Rows.Count > 0 Then
|
||||
DoImportu.Clear()
|
||||
'For Each wiersz In DgvDokumenty.Rows 'zrób kopię zaznaczonych (checkboxem Do Importu) dokumentów
|
||||
' If wiersz.Cells.Item("Wybrany").Value = 1 Then
|
||||
' 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)
|
||||
' End If
|
||||
'Next
|
||||
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(12).Value <= "1990-01-01 00:00:00" Then 'dekret nie zaimportowany
|
||||
AktualnyDokument = wiersz.Cells.Item(2).Value 'Nowy dekret zbiorczy
|
||||
Nr_ZapisuSrc = wiersz.Cells.Item(10).Value 'Dekret (DZK_GIDNumer) źródłowy
|
||||
If UtworzDekretZbiorczy(AktualnyDokument, wiersz.Cells.Item(5).Value, '"Data Wystawienia"
|
||||
wiersz.Cells.Item(6).Value, '"Data operacji"
|
||||
wiersz.Cells.Item(3).Value, '"Dokument źródłowy"
|
||||
wiersz.Cells.Item(4).Value, '"Opis dekretu"
|
||||
wiersz.Cells.Item(7).Value, '"Suma Ma"
|
||||
wiersz.Cells.Item(8).Value) Then '"Suma Winien"
|
||||
If DodajSkladowy(Nr_ZapisuSrc) Then 'dodaj dekrety składowe
|
||||
ZamknijDekret(True) 'zamknij dekret zbiorczy
|
||||
'oznacz dokument jako zaimportowany
|
||||
AktualnyDokument = ""
|
||||
Else
|
||||
ZamknijDekret(False) 'usuń utworzony dekret zbiorczy
|
||||
AktualnyDokument = ""
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
Next
|
||||
End If
|
||||
Tylko_Listing = False
|
||||
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()
|
||||
PolaczBaze()
|
||||
End Sub
|
||||
|
||||
Private Sub BtKoniec_Click(sender As Object, e As EventArgs) Handles BtKoniec.Click
|
||||
Wyloguj()
|
||||
f_out.Flush()
|
||||
f_out.Close()
|
||||
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)
|
||||
' DstConn_str = zrob_polaczenie(My.Settings.SerwerDst, My.Settings.BazaDst, My.Settings.MCdst, My.Settings.Comdst)
|
||||
Me.Tamy_ImpDM_Src.Connection.ConnectionString = SrcConn_str
|
||||
Tamy_ImpDM_Dekr.Connection.ConnectionString = SrcConn_str
|
||||
Try
|
||||
lbUwaga.Visible = True
|
||||
lbUwaga.BringToFront()
|
||||
lbUwaga.Refresh()
|
||||
Me.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)
|
||||
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()
|
||||
OdswiezDane()
|
||||
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
|
||||
|
||||
End Class
|
||||
@@ -0,0 +1,979 @@
|
||||
Public Module FunkcjeXL
|
||||
Const API_VERSION = 20193
|
||||
|
||||
Public Zalogowany As Boolean
|
||||
Public wynikXL As Integer
|
||||
Public Wersja As Integer
|
||||
Dim Ilosc_Bledow As Integer
|
||||
Dim Sesja As Integer
|
||||
Dim IDDokumentu As Integer
|
||||
Public NotaID As Integer
|
||||
Dim Flagi As Integer
|
||||
Dim Komunikat As String
|
||||
|
||||
|
||||
'-------------------------------------------------------
|
||||
' Funkcja XLLogin - W przypadku podania poprawnych parametrów poprzez strukturę XLLoginInfo _
|
||||
' logowanie następuję automatycznie. W przeciwnym przypadku otwiera się okno _
|
||||
' logowania do systemu CDN XL, w którym należy podać poprawne dane. _
|
||||
' Poprzez parametr sesja zwracany jest numer przydzielonej dla programu sesji. _
|
||||
' Numerem tym należy się posługiwać przy wywoływaniu następnych funkcji API.
|
||||
|
||||
Public Function Zaloguj(ByVal Baza As String, ByVal CDNop As String, ByVal Haslo As String, ByVal SerwerKlucza As String) As Boolean
|
||||
Dim LoginInfo As New cdn_api.XLLoginInfo_20193
|
||||
Dim sesja_temp As Int32
|
||||
|
||||
If Zalogowany And Sesja > 0 Then
|
||||
wynikXL = 0
|
||||
Ilosc_Bledow = 0
|
||||
Zaloguj = Zalogowany
|
||||
Exit Function
|
||||
End If
|
||||
Try
|
||||
' listuj(" Logowanie do ERP XL - proszę czekać...", 1)
|
||||
Zalogowany = False
|
||||
Ilosc_Bledow = 0
|
||||
' AttachThread()
|
||||
Wersja = API_VERSION
|
||||
LoginInfo.Wersja = Wersja ' numer wersji API
|
||||
LoginInfo.UtworzWlasnaSesje = 0
|
||||
LoginInfo.Winieta = -1
|
||||
LoginInfo.TrybWsadowy = 1
|
||||
LoginInfo.TrybNaprawy = 1
|
||||
LoginInfo.ProgramID = "Import dok. magazynowych z Jastrzębia" ' nazwa programu korzystającego z XL-API (pojawia się na liście sesji)
|
||||
LoginInfo.Baza = Baza & Chr(0) ' nazwa bazy danych do której ma nastąpić login pobierana
|
||||
' z klucza HKEY_CURRENT_USER oraz HKEY_LOCAL_MACHINE (nazwa rejestracji w managerze baz an tym komputerze, nie rzeczywista nazwa bazy !!)
|
||||
' LoginInfo.OpeIdent = CDNop & Chr(0) ' identyfikator CDNOpera logującego się
|
||||
' LoginInfo.OpeHaslo = Haslo & Chr(0) ' hasło CDNOpera logującego się
|
||||
LoginInfo.PlikLog = ""
|
||||
LoginInfo.SerwerKlucza = SerwerKlucza
|
||||
Sesja = 0
|
||||
sesja_temp = 0
|
||||
wynikXL = 0
|
||||
wynikXL = cdn_api.cdn_api.XLLogin(LoginInfo, sesja_temp)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLLogin"
|
||||
End Try
|
||||
If wynikXL = 0 Then
|
||||
Sesja = sesja_temp
|
||||
Ilosc_Bledow = 0
|
||||
Zalogowany = True
|
||||
Else
|
||||
Komunikat = "Nieokreślony błąd logowania do XL = " & CStr(wynikXL)
|
||||
Select Case wynikXL
|
||||
Case -9
|
||||
Komunikat = "XLLogin: operator nie jest podpięty do żadnego centrum"
|
||||
Case -8
|
||||
Komunikat = "XLLogin: Nie podano nazwy bazy danych"
|
||||
Case -7
|
||||
Komunikat = "XLLogin: Baza niezarejestrowana w systemie"
|
||||
Case -6
|
||||
Komunikat = "XLLogin: Nie podano hasła lub brak operatora"
|
||||
Case -5
|
||||
Komunikat = "XLLogin: nieprawidłowe hasło"
|
||||
Case -4
|
||||
Komunikat = "XLLogin: konto operatora zablokowane"
|
||||
Case -3
|
||||
Komunikat = "XLLogin: nie podano nazwy programu (pole ProgramID)"
|
||||
Case -2
|
||||
Komunikat = "XLLogin: błąd otwarcia pliku tekstowego, do którego mają być zapisywane komunikaty. Nie znaleziono ścieżki lub nazwa pliku jest nieprawidłowa."
|
||||
Case -1
|
||||
Komunikat = "XLLogin: podano niepoprawną wersję API"
|
||||
Case 1
|
||||
Komunikat = "XLLogin: inicjalizacja nie powiodła się"
|
||||
Case 2
|
||||
Komunikat = "XLLogin: istnieje już jedna instancja programu i nastąpiło ponowne logowanie (z tego samego komputera i na tego samego operatora)"
|
||||
Case 3
|
||||
Komunikat = "XLLogin: istnieje już jedna instancja programu i nastąpiło ponowne logowanie z innego komputera i na tego samego operatora, ale operatora nie posiada prawa do wielokrotnego logowania"
|
||||
Case 5
|
||||
Komunikat = "XLLogin: występuje przy pracy terminalowej w przypadku, gdy operatora nie ma prawa do wielokrotnego logowania i na pytanie czy usunąć istniejące sesje terminalowe wybrano odpowiedź ‘Nie’"
|
||||
Case 61
|
||||
Komunikat = "XLLogin: błąd zakładania nowej sesji"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Zalogowany = False
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
End If
|
||||
If Zalogowany Then MainFrm.listuj("Zalogowano")
|
||||
Zaloguj = Zalogowany
|
||||
End Function
|
||||
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
'Funkcja XLPolaczenie - podaje ConnectionStgring do bazy danych
|
||||
' Funkcja XLPolaczenie - Funkcja umozliwia identyfikację połączenia do bazy
|
||||
' zwraca nazwę serwera, bazy oraz connect string dla raportowania
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
Public Function Polaczenie() As String
|
||||
Dim PolaczenieInfo As New cdn_api.XLPolaczenieInfo_20193 With
|
||||
{
|
||||
.Wersja = Wersja, ' numer wersji API (20193) ustawiony w funkcji Zaloguj()
|
||||
.NTMode = 0,
|
||||
.Serwer = "" + Chr(0),
|
||||
.Baza = "" + Chr(0),
|
||||
.ConnectString = "" + Chr(0)
|
||||
}
|
||||
wynikXL = 0
|
||||
wynikXL = cdn_api.cdn_api.XLPolaczenie(PolaczenieInfo)
|
||||
If wynikXL >= 0 Then
|
||||
Polaczenie = PolaczenieInfo.ConnectString
|
||||
' Serwer = PolaczenieInfo.Serwer
|
||||
Else
|
||||
Polaczenie = ""
|
||||
Komunikat = "XLPolaczenie: nieaktywna sesja API lub nieprawidłowy numer wersji"
|
||||
End If
|
||||
End Function
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLLogout - Funkcja ta służy do zamykania sesji otwartej funkcją XLLogin. _
|
||||
' Parametr sesja określa numer sesji, którą chcemy zamknąć _
|
||||
' (numer przydzielany funkcją XLLogin).
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
Public Sub Wyloguj()
|
||||
Dim LogoutInfo As New cdn_api.XLLogoutInfo_20193
|
||||
Dim wynik As Integer
|
||||
|
||||
If Zalogowany Or Sesja > 0 Then
|
||||
LogoutInfo.Wersja = Wersja
|
||||
LogoutInfo.TrybUsuwaniaDok = 0
|
||||
If Sesja > 0 Then
|
||||
Try
|
||||
cdn_api.cdn_api.XLLogoutEx(LogoutInfo, Sesja)
|
||||
Catch ex As Exception
|
||||
wynik = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLLogout"
|
||||
End Try
|
||||
End If
|
||||
Zalogowany = False
|
||||
Sesja = 0
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLNowyDokument - Jest to funkcja, która zapoczątkowuje wystawianie dokumentu. _
|
||||
' Nadaje ona nowy numer nagłówka, pobiera kontrahenta, _
|
||||
' wypełnia rekord standardowymi ustawieniami i ustawia go w stan zajętości. _
|
||||
' Wymagane jest użycie w komplecie co najmniej funkcji XLZamknijDokument _
|
||||
' w celu zakończenia dokumentu i zwolnienia jego zajętości (bez wywołania _
|
||||
' tej funkcji wewnętrzna kontrola XL'a spowoduje wycofanie wszelkich zapisów _
|
||||
' do tego dokumentu).
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
Public Sub UtworzNowyDok(DokNagInfo As cdn_api.XLDokumentNagInfo_20193)
|
||||
Dim w, i As Integer
|
||||
|
||||
wynikXL = 0
|
||||
For i = 1 To 200
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLNowyDokument(Sesja, IDDokumentu, DokNagInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLNowyDokument"
|
||||
Exit For
|
||||
End Try
|
||||
If wynikXL <> 106 Then Exit For
|
||||
System.Threading.Thread.Sleep(40)
|
||||
Next
|
||||
Flagi = DokNagInfo.Flagi
|
||||
w = OpisBledu(1, wynikXL, Flagi)
|
||||
End Sub
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLDodajPozycje - Funkcja ta jest odpowiedzialna za dodawanie do dokumentu elementów _
|
||||
' oraz związanych z nim subelementów.
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
Public Sub DodajPozycjeDok(DokEleInfo As cdn_api.XLDokumentElemInfo_20193)
|
||||
Dim w, i As Integer
|
||||
|
||||
wynikXL = 0
|
||||
If IDDokumentu > 0 Then
|
||||
For i = 1 To 200
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLDodajPozycje(IDDokumentu, DokEleInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLDodajPozycje"
|
||||
Exit For
|
||||
End Try
|
||||
If wynikXL <> 106 Then Exit For
|
||||
System.Threading.Thread.Sleep(40)
|
||||
Next
|
||||
End If
|
||||
Flagi = DokEleInfo.Flagi
|
||||
If wynikXL <> 17 Then w = OpisBledu(2, wynikXL, Flagi) 'bez drukowania kmunikatu, że zabrakło towaru
|
||||
End Sub
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLZamknijDokument - Funkcja odpowiada za zakończenie pracy z dokumentem.
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
|
||||
Public Sub ZamknijDokument(ByVal Tryb As Integer, Magazynowe As Integer)
|
||||
Dim ZamkniecieDokumentuInfo As New cdn_api.XLZamkniecieDokumentuInfo_20193
|
||||
Dim w, i As Integer
|
||||
|
||||
Try
|
||||
With ZamkniecieDokumentuInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = Tryb '-10, 0 - zatwierdz dokument, 1 - do bufora, -3 - zamknięcie otwartego dok., -1 - skasowanie dokumentu, -2 - anulowanie
|
||||
.Magazynowe = Magazynowe 'generowanie dokumentów WM i MMP: 0-wg. konfig., 1-nie generuj, 2-gen. do bufora, 3-gen. zatwierdzone
|
||||
'dla MMW: 0x,1x,2x - WM (bez, bufor, zatw.); x1,x2,x3 - MMP (bez, bufor, zatw.)
|
||||
End With
|
||||
wynikXL = 0
|
||||
If IDDokumentu > 0 Then
|
||||
For i = 1 To 200
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLZamknijDokument(IDDokumentu, ZamkniecieDokumentuInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLZamknijDokument"
|
||||
Exit For
|
||||
End Try
|
||||
If wynikXL <> 106 Then Exit For
|
||||
System.Threading.Thread.Sleep(40)
|
||||
Next
|
||||
End If
|
||||
w = OpisBledu(7, wynikXL, 0)
|
||||
Catch ex As Exception
|
||||
wynikXL = -201
|
||||
Komunikat = "Błąd w dostępie do danych w API XLZamknijDokument"
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLPodajKomunikat - Funkcja rozwiązuje podane numery bledów i ostrzeżeń na stringowy
|
||||
' komunikat, rodzaje trybów: 0-tryb cichy, 1-tylko bledy, 2-bledy i ostrzeżenia
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
|
||||
Public Function OpisBledu(ByVal Funkcja As Integer, ByVal wynik_lokalny As Integer, ByVal Flagi As Integer) As Integer
|
||||
Dim KomunikatInfo As New cdn_api.XLKomunikatInfo_20193
|
||||
Dim Komunikat As String
|
||||
|
||||
OpisBledu = 0
|
||||
If wynik_lokalny < -199 Then
|
||||
MainFrm.listuj("Nie rozpoznany błąd API w funkcji " + CStr(Funkcja))
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja < 900 Then
|
||||
KomunikatInfo.Wersja = Wersja
|
||||
KomunikatInfo.Funkcja = Funkcja
|
||||
KomunikatInfo.Blad = wynik_lokalny
|
||||
KomunikatInfo.Ostrzezenie = Flagi
|
||||
KomunikatInfo.Tryb = 0
|
||||
Try
|
||||
cdn_api.cdn_api.XLOpisBledu(KomunikatInfo)
|
||||
Catch ex As Exception
|
||||
wynik_lokalny = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLOpisBledu"
|
||||
End Try
|
||||
Komunikat = "!------! UWAGA: " + KomunikatInfo.OpisBledu
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 999 Then
|
||||
Komunikat = "XLOpisBledu: Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case 2
|
||||
Komunikat = "XLOpisBledu: UWAGA: ustalono wybór z listy, a brak ustawienia trybu selekcji"
|
||||
Case 3
|
||||
Komunikat = "XLOpisBledu: UWAGA: błąd otwarcia tabeli"
|
||||
Case 4
|
||||
Komunikat = "XLOpisBledu: UWAGA: nie znaleziono rekordu o podanym GIDzie"
|
||||
Case 5
|
||||
Komunikat = "XLOpisBledu: UWAGA: ustalono wybór elementu z listy a brak procedury listy dla takiego typu dokumentu"
|
||||
Case 6
|
||||
Komunikat = "XLOpisBledu: UWAGA: ustalono wybór grupy z listy, a brak procedury listy dla takiego typu dokumentu"
|
||||
Case 7
|
||||
Komunikat = "XLOpisBledu: UWAGA: ustalono podgląd elementów listy, a brak procedury listy dla takiego typu dokumentu"
|
||||
Case 8
|
||||
Komunikat = "XLOpisBledu: UWAGA: nieobsługiwany GIDTyp"
|
||||
Case Else
|
||||
Komunikat = "XLOpisBledu: UWAGA: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 998 Then 'Generuj EAN
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -1
|
||||
Komunikat = "UWAGA: API nie zostało aktywowane bądź błąd wersji"
|
||||
Case 1
|
||||
Komunikat = "UWAGA: Niepoprawny zakres"
|
||||
Case 2
|
||||
Komunikat = "UWAGA: Wystąpił niezidentyfikowany błąd, kod EAN nie został wygenerowany"
|
||||
Case Else
|
||||
Komunikat = "UWAGA: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 997 Then 'DodajAtrybut do obiektu
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -1
|
||||
Komunikat = "UWAGA: brak sesji"
|
||||
Case 2
|
||||
Komunikat = "UWAGA: błąd przy zakładaniu logout"
|
||||
Case 3
|
||||
Komunikat = "UWAGA: nie znaleziono obiektu"
|
||||
Case 4
|
||||
Komunikat = "UWAGA: nie znalezniono klasy atrybutu"
|
||||
Case 5
|
||||
Komunikat = "UWAGA: klasa nieprzypisana do definicji obiektu"
|
||||
Case 6
|
||||
Komunikat = "UWAGA: atrybut juz istnieje w kolejce"
|
||||
Case 7
|
||||
Komunikat = "UWAGA: błąd ADO Connection"
|
||||
Case 8
|
||||
Komunikat = "UWAGA: błąd ADO"
|
||||
Case 9
|
||||
Komunikat = "UWAGA: brak zdefiniowanego obiektu"
|
||||
Case Else
|
||||
Komunikat = "UWAGA: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 996 Then 'Dodaj Partię
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -1
|
||||
Komunikat = "UWAGA: API nie zostało aktywowane bądź błąd wersji"
|
||||
Case 2
|
||||
Komunikat = "UWAGA: Wystąpił błąd przy próbie zablokowania tabel dla wykonania transakcji"
|
||||
Case 11
|
||||
Komunikat = "UWAGA: nie znaleziono towaru"
|
||||
Case 12
|
||||
Komunikat = "UWAGA: Nie podano towaru"
|
||||
Case 106
|
||||
Komunikat = "UWAGA: Wystąpił błąd DeadLock"
|
||||
Case 160
|
||||
Komunikat = "UWAGA: Nie znaleziono podanej dostawy"
|
||||
Case 178
|
||||
Komunikat = "UWAGA: Partia o takich parametrach nie istnieje"
|
||||
Case 210
|
||||
Komunikat = "UWAGA: Nie znaleziono podanego identyfikatora partii"
|
||||
Case Else
|
||||
Komunikat = "UWAGA: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 995 Then 'Dokumenty związane
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -1
|
||||
Komunikat = "UWAGA: API nie zostało aktywowane bądź błąd wersji"
|
||||
Case 1
|
||||
Komunikat = "UWAGA: taki dokument jest już na liście (błąd zwracany przy akcji dodawania)"
|
||||
Case 30
|
||||
Komunikat = "UWAGA: nie znaleziono dokumentu na liście"
|
||||
Case Else
|
||||
Komunikat = "UWAGA: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 994 Then 'Dodaj Dekret zbiorczy
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -1
|
||||
Komunikat = "BŁĄD: API nie zostało aktywowane bądź błąd wersji"
|
||||
Case 101
|
||||
Komunikat = "BŁĄD: Niepoprawny dziennik księgowań"
|
||||
Case 102
|
||||
Komunikat = "BŁĄD: Niepoprawny bufor księgowań"
|
||||
Case 103
|
||||
Komunikat = "BŁĄD: Kwota = 0"
|
||||
Case 104
|
||||
Komunikat = "BŁĄD: Brak opisu"
|
||||
Case 105
|
||||
Komunikat = "BŁĄD: Dodawanie dekretu składowego bez otwarcia dekretu zbiorczego"
|
||||
Case 1002
|
||||
Komunikat = "BŁĄD: Otwarty poprzedni dekret lub zamknięty modyfikowany dekret"
|
||||
Case 1031
|
||||
Komunikat = "BŁĄD: Uruchomienie tej operacji nie jest możliwe ze względu na brak dostępu do modułu, problem z połączeniem lub niezgodność danych w kluczu ze stanem faktycznym."
|
||||
Case 8001
|
||||
Komunikat = "BŁĄD: Niepoprawne konto księgowań"
|
||||
Case 8005
|
||||
Komunikat = "BŁĄD: Bieżący okres obrachunkowy jest zamknięty do x.
|
||||
Próbujesz księgować lub kasować księgowanie z datą y."
|
||||
Case 8006
|
||||
Komunikat = "BŁĄD: Data nie mieści się w żadnym z zadeklarowanych okresów obrachunkowych. Załóż okres i powtórz operację"
|
||||
Case 8008
|
||||
Komunikat = "BŁĄD: Zła data . Załóż nowy dekret księgowy. Błąd ten wyświetla się zawsze kiedy data nie mieści się w okresie obrachunkowym"
|
||||
Case 8046
|
||||
Komunikat = "BŁĄD: Nie można księgować na to samo konto"
|
||||
Case 8190
|
||||
Komunikat = "BŁĄD: Dokonywanie zapisu księgowego bez podania żadnego z kont"
|
||||
Case Else
|
||||
Komunikat = "UWAGA: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 993 Then 'Dodaj dekret składowy
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -1
|
||||
Komunikat = "BŁĄD: API nie zostało aktywowane bądź błąd wersji"
|
||||
Case 101
|
||||
Komunikat = "BŁĄD: Niepoprawny dziennik księgowań"
|
||||
Case 102
|
||||
Komunikat = "BŁĄD: Niepoprawny bufor księgowań"
|
||||
Case 103
|
||||
Komunikat = "BŁĄD: Kwota = 0"
|
||||
Case 104
|
||||
Komunikat = "BŁĄD: Brak opisu"
|
||||
Case 105
|
||||
Komunikat = "BŁĄD: Dodawanie dekretu składowego bez otwarcia dekretu zbiorczego"
|
||||
Case 1002
|
||||
Komunikat = "BŁĄD: Otwarty poprzedni dekret lub zamknięty modyfikowany dekret"
|
||||
Case 8001
|
||||
Komunikat = "BŁĄD: Niepoprawne konto księgowań"
|
||||
Case 8003
|
||||
Komunikat = "BŁĄD: Konto posiada analitykę"
|
||||
Case 8006
|
||||
Komunikat = "BŁĄD: Data nie mieści się w żadnym z zadeklarowanych okresów obrachunkowych. Załóż okres i powtórz operację"
|
||||
Case 8008
|
||||
Komunikat = "BŁĄD: Zła data . Załóż nowy dekret księgowy. Błąd ten wyświetla się zawsze kiedy data nie mieści się w okresie obrachunkowym"
|
||||
Case 8046
|
||||
Komunikat = "BŁĄD: Nie można księgować na to samo konto"
|
||||
Case 8190
|
||||
Komunikat = "BŁĄD: Dokonywanie zapisu księgowego bez podania żadnego z kont"
|
||||
Case Else
|
||||
Komunikat = "UWAGA: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 992 Then 'Zamknij dekret zbiorczy, sumuj dekret zbiorczy
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -1
|
||||
Komunikat = "BŁĄD: API nie zostało aktywowane bądź błąd wersji"
|
||||
Case 101
|
||||
Komunikat = "BŁĄD: Niepoprawny dziennik księgowań"
|
||||
Case 102
|
||||
Komunikat = "BŁĄD: Niepoprawny bufor księgowań"
|
||||
Case 103
|
||||
Komunikat = "BŁĄD: Kwota = 0"
|
||||
Case 104
|
||||
Komunikat = "BŁĄD: Brak opisu"
|
||||
Case 105
|
||||
Komunikat = "BŁĄD: Dodawanie dekretu składowego bez otwarcia dekretu zbiorczego"
|
||||
Case 8001
|
||||
Komunikat = "BŁĄD: Niepoprawne konto księgowań"
|
||||
Case 8006
|
||||
Komunikat = "BŁĄD: Data nie mieści się w żadnym z zadeklarowanych okresów obrachunkowych. Załóż okres i powtórz operację"
|
||||
Case 8008
|
||||
Komunikat = "BŁĄD: Zła data . Załóż nowy dekret księgowy. Błąd ten wyświetla się zawsze kiedy data nie mieści się w okresie obrachunkowym"
|
||||
Case 8046
|
||||
Komunikat = "BŁĄD: Nie można księgować na to samo konto"
|
||||
Case 8190
|
||||
Komunikat = "BŁĄD: Dokonywanie zapisu księgowego bez podania żadnego z kont"
|
||||
Case Else
|
||||
Komunikat = "UWAGA: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 990 Then 'Dodaj dekret pojedynczy
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -1
|
||||
Komunikat = "BŁĄD: API nie zostało aktywowane bądź błąd wersji"
|
||||
Case 101
|
||||
Komunikat = "BŁĄD: Niepoprawny dziennik księgowań"
|
||||
Case 102
|
||||
Komunikat = "BŁĄD: Niepoprawny bufor księgowań"
|
||||
Case 103
|
||||
Komunikat = "BŁĄD: Kwota = 0"
|
||||
Case 104
|
||||
Komunikat = "BŁĄD: Brak opisu"
|
||||
Case 105
|
||||
Komunikat = "BŁĄD: Dodawanie dekretu składowego bez otwarcia dekretu zbiorczego"
|
||||
Case 1002
|
||||
Komunikat = "BŁĄD: Otwarty poprzedni dekret lub zamknięty modyfikowany dekret"
|
||||
Case 8001
|
||||
Komunikat = "BŁĄD: Niepoprawne konto księgowań"
|
||||
Case 8003
|
||||
Komunikat = "BŁĄD: Konto posiada analitykę"
|
||||
Case 8006
|
||||
Komunikat = "BŁĄD: Data nie mieści się w żadnym z zadeklarowanych okresów obrachunkowych. Załóż okres i powtórz operację"
|
||||
Case 8008
|
||||
Komunikat = "BŁĄD: Zła data . Załóż nowy dekret księgowy. Błąd ten wyświetla się zawsze kiedy data nie mieści się w okresie obrachunkowym"
|
||||
Case 8046
|
||||
Komunikat = "BŁĄD: Nie można księgować na to samo konto"
|
||||
Case 8190
|
||||
Komunikat = "BŁĄD: Dokonywanie zapisu księgowego bez podania żadnego z kont"
|
||||
Case Else
|
||||
Komunikat = "BŁĄD: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 989 Then 'Dodaj uproszczoną notę memoriałową
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -3
|
||||
Komunikat = "BŁĄD: brak GIDTypu noty"
|
||||
Case -2
|
||||
Komunikat = "BŁĄD: błąd zakładania transakcji"
|
||||
Case -1
|
||||
Komunikat = "BŁĄD: niewłaściwy parametr SesjaID"
|
||||
Case 1
|
||||
Komunikat = "BŁĄD: błąd dodawania/aktualizacji/kasowania nagłówka;"
|
||||
Case 2
|
||||
Komunikat = "BŁĄD: błędny numer noty (XLNotaInfo.Numer już istnieje w ramach serii/miesiąca);"
|
||||
Case 3
|
||||
Komunikat = "BŁĄD: brak definicji noty"
|
||||
Case 4
|
||||
Komunikat = "BŁĄD: brak podmiotu (kontrahenta lub pracownika);"
|
||||
Case 5
|
||||
Komunikat = "BŁĄD: Nie znaleziono podanej waluty"
|
||||
Case 6
|
||||
Komunikat = "BŁĄD: brak płatnika"
|
||||
Case 7
|
||||
Komunikat = "BŁĄD: nota nie posiada treści"
|
||||
Case 8
|
||||
Komunikat = "BŁĄD: brak praw do używania tego modułu"
|
||||
Case 9
|
||||
Komunikat = "BŁĄD: seria nie istnieje w systemie"
|
||||
Case 8001
|
||||
Komunikat = "BŁĄD: Niepoprawne konto księgowań lub konto nie znajduje się w bieżącym okresie"
|
||||
Case 8046
|
||||
Komunikat = "BŁĄD: Nie można księgować na to samo konto lub oba konta puste"
|
||||
Case 8047
|
||||
Komunikat = "BŁĄD: po obu stronach pozycji noty konta rozrachunkowe"
|
||||
Case Else
|
||||
Komunikat = "BŁĄD: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 988 Then 'Dodaj pozycję noty
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -2
|
||||
Komunikat = "BŁĄD: błąd zakładania transakcji"
|
||||
Case -1
|
||||
Komunikat = "BŁĄD: niewłaściwy parametr SesjaID"
|
||||
Case 3
|
||||
Komunikat = "BŁĄD: brak definicji noty"
|
||||
Case 5
|
||||
Komunikat = "BŁĄD: brak noty o podanym ID"
|
||||
Case 7
|
||||
Komunikat = "BŁĄD: pozycja noty nie posiada opisu"
|
||||
Case 8
|
||||
Komunikat = "BŁĄD: brak symbolu kwoty"
|
||||
Case 9
|
||||
Komunikat = "BŁĄD: błąd dodawania pozycji noty"
|
||||
Case 10
|
||||
Komunikat = "BŁĄD: błąd synchronizacji konta walutowego"
|
||||
Case 8001
|
||||
Komunikat = "BŁĄD: Niepoprawne konto księgowań lub konto nie znajduje się w bieżącym okresie"
|
||||
Case 8046
|
||||
Komunikat = "BŁĄD: Nie można księgować na to samo konto lub oba konta puste"
|
||||
Case 8047
|
||||
Komunikat = "BŁĄD: z uwagi na płatności, wygenerowanie noty nie jest możliwe. W ramach zapisu wprowadzono dekrety dwustronne, zawierające po obydwu stronach konta rozrachunkowe"
|
||||
Case Else
|
||||
Komunikat = "BŁĄD: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 987 Then 'Zamknij notę
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -2
|
||||
Komunikat = "BŁĄD: błąd zakładania transakcji"
|
||||
Case -1
|
||||
Komunikat = "BŁĄD: niewłaściwy parametr SesjaID"
|
||||
Case 1
|
||||
Komunikat = "BŁĄD: błąd dodawania/aktualizacji/kasowania nagłówka"
|
||||
Case 2
|
||||
Komunikat = "BŁĄD: błędny numer noty (XLNotaInfo.Numer już istnieje w ramach serii/miesiąca);"
|
||||
Case 3
|
||||
Komunikat = "BŁĄD: brak definicji noty"
|
||||
Case 5
|
||||
Komunikat = "BŁĄD: brak noty o podanym ID"
|
||||
Case 6
|
||||
Komunikat = "BŁĄD: nota niezgodna z definicją (przychodowa/rozchodowa, podmiot);"
|
||||
Case 7
|
||||
Komunikat = "BŁĄD: nie udało się wygenerowanie płatności;"
|
||||
Case Else
|
||||
Komunikat = "BŁĄD: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
ElseIf wynik_lokalny <> 0 And Funkcja = 986 Then 'kasuj notę
|
||||
Komunikat = "Nieokreślony błąd API XL"
|
||||
Select Case wynik_lokalny
|
||||
Case -2
|
||||
Komunikat = "BŁĄD: błąd zakładania transakcji"
|
||||
Case -1
|
||||
Komunikat = "BŁĄD: niewłaściwy parametr SesjaID"
|
||||
Case 1
|
||||
Komunikat = "BŁĄD: błąd dodawania/aktualizacji/kasowania nagłówka"
|
||||
Case 5
|
||||
Komunikat = "BŁĄD: brak noty o podanym ID"
|
||||
Case Else
|
||||
Komunikat = "BŁĄD: Nieznany błąd"
|
||||
End Select
|
||||
MainFrm.listuj(Komunikat)
|
||||
Ilosc_Bledow = Ilosc_Bledow + 1
|
||||
OpisBledu = Ilosc_Bledow
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLPobierzNumerDokumentu rozwiązuje GID na sformatowany numer dokumentu
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
|
||||
Public Function NumerDokumentu(ByVal GIDTyp As Integer, ByVal GIDFirma As Integer, ByVal GIDNumer As Integer, ByVal GIDLp As Integer) As String
|
||||
Dim NumerDokumentuInfo As New cdn_api.XLNumerDokumentuInfo_20193
|
||||
Dim nrd As String
|
||||
|
||||
NumerDokumentuInfo.Wersja = Wersja
|
||||
NumerDokumentuInfo.GIDTyp = GIDTyp
|
||||
NumerDokumentuInfo.GIDFirma = GIDFirma
|
||||
NumerDokumentuInfo.GIDNumer = GIDNumer
|
||||
NumerDokumentuInfo.GIDLp = GIDLp
|
||||
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLPobierzNumerDokumentu(NumerDokumentuInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLPobierzNumerDokumentu"
|
||||
End Try
|
||||
NumerDokumentu = ""
|
||||
nrd = ""
|
||||
If wynikXL = 0 Then
|
||||
nrd = NumerDokumentuInfo.NumerDokumentu
|
||||
Else
|
||||
If wynikXL = -1 Then
|
||||
Komunikat = "XLPobierzNumerDokumentu: nieaktywna sesja API lub nieprawidłowy numer wersji"
|
||||
ElseIf wynikXL = 1 Then
|
||||
Komunikat = "XLPobierzNumerDokumentu: nie znaleziono dokumentu"
|
||||
ElseIf wynikXL = 2 Then
|
||||
Komunikat = "XLPobierzNumerDokumentu: podano nieobsługiwany GIDTyp"
|
||||
End If
|
||||
MainFrm.listuj(Komunikat)
|
||||
End If
|
||||
NumerDokumentu = RTrim(nrd)
|
||||
End Function
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
|
||||
Public Function XLSprawdzLicencje() As Boolean
|
||||
Dim LicencjaInfo As New cdn_api.XLLicencjaInfo_20193 With
|
||||
{
|
||||
.Wersja = Wersja,
|
||||
.Licencja = 1,
|
||||
.Odswiez = 1,
|
||||
.Stan = 0
|
||||
}
|
||||
|
||||
wynikXL = 0
|
||||
XLSprawdzLicencje = False
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLSprawdzLicencje(LicencjaInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLSprawdzLicencje"
|
||||
End Try
|
||||
If LicencjaInfo.Stan = 1 Then
|
||||
XLSprawdzLicencje = True
|
||||
Else
|
||||
Komunikat = "Błąd API XLSprawdzLicencje = " & CStr(wynikXL)
|
||||
If wynikXL = 0 Then
|
||||
Select Case LicencjaInfo.Stan
|
||||
Case 0
|
||||
Komunikat = "XLSprawdzLicencje: nie pobrano licencji"
|
||||
Case 2
|
||||
Komunikat = "XLSprawdzLicencje: nie pobrano licencji - błąd pobrania licencji bądź ilość licencji wyczerpana"
|
||||
Case 3
|
||||
Komunikat = "XLSprawdzLicencje: licencja przeterminowana"
|
||||
Case 4
|
||||
Komunikat = "XLSprawdzLicencje: licencja promocyjna"
|
||||
End Select
|
||||
ElseIf wynikXL = -1 Then
|
||||
Komunikat = "XLSprawdzLicencje: Sesja API nieaktywna lub nieprawidłowy numer"
|
||||
ElseIf wynikXL = 1 Then
|
||||
Komunikat = "XLSprawdzLicencje: błąd klucza sprzętowego"
|
||||
End If
|
||||
MainFrm.listuj(Komunikat)
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
||||
'-------------------------------------------------------------------------------------
|
||||
' Funkcja XLDodajDekretPojedynczy - Funkcja dodaje jeden dekret pojedynczy - bez nagłówka
|
||||
|
||||
Sub XLDodajDekretPoj()
|
||||
Dim DekretInfo As New cdn_api.XLDekretInfo_20193
|
||||
Dim w As Integer
|
||||
|
||||
With DekretInfo
|
||||
.Wersja = Wersja
|
||||
'.Tryb = Range("b6").Value 'Tryb wystawienia (interakcyjny/wsadowy)
|
||||
'.GIDTyp = Range("b7").Value 'GID dekretu (zwracanego po dodaniu)
|
||||
'.GIDFirma = Range("b8").Value '
|
||||
'.GIDNumer = Range("b9").Value '
|
||||
'.GIDLp = Range("b10").Value '
|
||||
'.Data = Range("b11").Value 'Data dekretu
|
||||
'.DataDokumentu = Range("b12").Value 'Data dokumentu
|
||||
'.Kwota = Str(Range("b13").Value) 'Kwota pomnożona przez 100
|
||||
'.KwotaWalDT = Str(Range("b14").Value) 'Kwota winien w walucie pomnożona przez 100
|
||||
'.KwotaWalCT = Str(Range("b15").Value) 'Kwota ma w walucie pomnożona przez 100
|
||||
'.NumerDokumentu = Range("b16").Value + Chr(0) 'Numer dokumentu
|
||||
'.Dziennik = Range("b17").Value + Chr(0) 'Dziennik księgowań
|
||||
'.Bufor = Range("b18").Value + Chr(0) 'Bufor księgowań (pusty = KG)
|
||||
'.KontoDebet = Range("b19").Value + Chr(0) 'Numer konta winien (WN)
|
||||
'.KontoCredit = Range("b20").Value + Chr(0) 'Numer konta ma (MA)
|
||||
'.KontoWalDT = Range("b21").Value + Chr(0)
|
||||
'.KontoWalCT = Range("b22").Value + Chr(0)
|
||||
'.Identyfikator = Range("b23").Value
|
||||
'.Opis = Range("b24").Value + Chr(0) 'Opis dekretu
|
||||
End With
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLDodajDekretPojedynczy(Sesja, DekretInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLDodajDekretPojedynczy"
|
||||
End Try
|
||||
w = OpisBledu(990, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
|
||||
'-------------------------------------------------------------------------------------
|
||||
' Funkcja XLDodajDekretZbiorczy - Funkcja dodaje nagłówek dekretu zbiorczego
|
||||
|
||||
Sub XLDodajDekretZb(DekretZbiorczyInfo As cdn_api.XLDekretZbiorczyInfo_20193)
|
||||
Dim w As Integer
|
||||
|
||||
With DekretZbiorczyInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2 'Tryb wystawienia wsadowy
|
||||
End With
|
||||
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLDodajDekretZbiorczy(Sesja, DekretZbiorczyInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLDodajDekretZbiorczy"
|
||||
End Try
|
||||
w = OpisBledu(994, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
|
||||
'-------------------------------------------------------------------------------------
|
||||
' Funkcja XLDodajDekretSkladowy - Funkcja dodaje jeden dekret składowy w otwartym dekrecie zbiorczym
|
||||
|
||||
Sub XLDodajDekretSkl(DekretSkladowyInfo As cdn_api.XLDekretInfo_20193)
|
||||
Dim w As Integer
|
||||
|
||||
With DekretSkladowyInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2 'Tryb wystawienia wsadowy
|
||||
End With
|
||||
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLDodajDekretSkladowy(Sesja, DekretSkladowyInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLDodajDekretSkładowy"
|
||||
End Try
|
||||
w = OpisBledu(993, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
|
||||
'-------------------------------------------------------------------------------------
|
||||
' Funkcja XLZamknijDekretZbiorczy - Funkcja zamyka dekret zbiorczy
|
||||
|
||||
Sub XLZamknijDekretZb(ZamknijDekretZbiorczyInfo As cdn_api.XLDekretZbiorczyInfo_20193)
|
||||
Dim w As Integer
|
||||
|
||||
With ZamknijDekretZbiorczyInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2 'Tryb wystawienia wsadowy
|
||||
End With
|
||||
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLZamknijDekretZbiorczy(Sesja, ZamknijDekretZbiorczyInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLZamknijDekretZbiorczy"
|
||||
End Try
|
||||
w = OpisBledu(992, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
'-------------------------------------------------------------------------------------
|
||||
' Funkcja XLSumujDekret - Funkcja podaje sumę dekretu zbiorczego
|
||||
|
||||
Sub XLSumujDekretZb(SumujDekretZbiorczyInfo As cdn_api.XLDekretZbiorczyInfo_20193)
|
||||
Dim w As Integer
|
||||
|
||||
With SumujDekretZbiorczyInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2 'Tryb wystawienia (interakcyjny/wsadowy)
|
||||
'.GIDTyp = Range("n7").Value 'GID dekretu (zwracanego po dodaniu)
|
||||
'.GIDFirma = Range("n8").Value '
|
||||
'.GIDNumer = Range("n9").Value '
|
||||
'.GIDLp = Range("n10").Value '
|
||||
'.Data = Range("n11").Value 'Data dekretu
|
||||
'.DataDokumentu = Range("n12").Value 'Data dokumentu
|
||||
'.KwotaDebet = Str(Range("n13").Value) + Chr(0) 'Kwota sumaryczna winien pomnożona przez 100
|
||||
'.KwotaCredit = Str(Range("n14").Value) + Chr(0) 'Kwota sumaryczna ma pomnożona przez 100
|
||||
'.NumerDokumentu = Range("n15").Value + Chr(0) 'Numer dokumentu
|
||||
'.Dziennik = Range("n16").Value + Chr(0) 'Dziennik księgowań
|
||||
'.Bufor = Range("n17").Value + Chr(0) 'Bufor księgowań (pusty = KG)
|
||||
'.Identyfikator = Range("n18").Value
|
||||
'.Opis = Range("n19").Value + Chr(0) 'Opis dekretu
|
||||
End With
|
||||
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLSumujDekretZbiorczy(Sesja, SumujDekretZbiorczyInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLSumujDekretZbiorczy"
|
||||
End Try
|
||||
w = OpisBledu(992, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
'-------------------------------------------------------------------------------------
|
||||
' Funkcja XLKasujDekret - Funkcja kasuje dekret
|
||||
|
||||
Sub XLKasujDekretzb(KasujDekretInfo As cdn_api.XLDekretInfo_20193)
|
||||
Dim w As Integer
|
||||
|
||||
With KasujDekretInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2 'Tryb wystawienia (interakcyjny/wsadowy)
|
||||
End With
|
||||
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLKasujDekret(Sesja, KasujDekretInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLKasujDekret"
|
||||
End Try
|
||||
w = OpisBledu(992, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLDodajNote
|
||||
|
||||
Sub XLDodajNoteMem(NotaInfo As cdn_api.XLNotaInfo_20193)
|
||||
Dim w, IDNoty As Integer
|
||||
|
||||
NotaID = 0
|
||||
With NotaInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2
|
||||
.GIDTyp = 4145 'nota uproszczona
|
||||
'.DataWprow = Range("b24").Value
|
||||
'.DataDok = Range("b25").Value
|
||||
'.DataOper = Range("b26").Value
|
||||
'.Seria = Range("b32").Value + Chr(0)
|
||||
'.NumerDokumentu = Range("b33").Value + Chr(0)
|
||||
'.Tresc = Range("b34").Value + Chr(0)
|
||||
End With
|
||||
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLDodajNote(Sesja, IDNoty, NotaInfo)
|
||||
NotaID = IDNoty
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
NotaID = 0
|
||||
Komunikat = "Nie rozpoznany błąd API XLDodajNote"
|
||||
End Try
|
||||
w = OpisBledu(989, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLDodajPozycjeNoty - Funkcja ta dodaje element do otwartej wcześniej noty
|
||||
|
||||
Sub XLDodajPozycjeNotyMem(PozycjaNotyInfo As cdn_api.XLPozycjaNotyInfo_20193)
|
||||
Dim w As Integer
|
||||
|
||||
With PozycjaNotyInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2
|
||||
'.KKSNumerDT = Range("e15").Value
|
||||
'.KKSNumerCT = Range("e16").Value
|
||||
'.DataDok = Range("e21").Value
|
||||
'.DataOper = Range("e22").Value
|
||||
'.Kwota = Str(Range("e23").Value) + Chr(0)
|
||||
'.Opis = Range("e24").Value + Chr(0)
|
||||
'.NumerDokumentu = Range("e29").Value
|
||||
End With
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLDodajPozycjeNoty(Sesja, NotaID, PozycjaNotyInfo)
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLDodajPozycjeNoty"
|
||||
End Try
|
||||
w = OpisBledu(988, wynikXL, 0)
|
||||
End Sub
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLZamknijNote - Funkcja ta zamyka otwartą notę memoriałową
|
||||
|
||||
Sub XLZamknijNoteMem(NotaInfo As cdn_api.XLNotaInfo_20193)
|
||||
Dim w As Integer
|
||||
|
||||
With NotaInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2
|
||||
End With
|
||||
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLZamknijNote(Sesja, NotaID, NotaInfo)
|
||||
NotaID = 0
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLZamknijNote"
|
||||
End Try
|
||||
w = OpisBledu(987, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
|
||||
'--------------------------------------------------------------------------------------------------
|
||||
' Funkcja XLKasujNote - Funkcja ta kasuje notę memoriałową
|
||||
|
||||
Sub XLKasujNoteMem(NotaInfo As cdn_api.XLNotaInfo_20193)
|
||||
Dim w As Integer
|
||||
|
||||
With NotaInfo
|
||||
.Wersja = Wersja
|
||||
.Tryb = 2
|
||||
'.GIDTyp = Range("k7").Value
|
||||
'.GIDFirma = Range("k8").Value
|
||||
'.GIDNumer = Range("k9").Value
|
||||
'.GIDLp = Range("k10").Value
|
||||
End With
|
||||
|
||||
wynikXL = 0
|
||||
Try
|
||||
wynikXL = cdn_api.cdn_api.XLKasujNote(Sesja, NotaID, NotaInfo)
|
||||
NotaID = 0
|
||||
Catch ex As Exception
|
||||
wynikXL = -200
|
||||
Komunikat = "Nie rozpoznany błąd API XLKasujNote"
|
||||
End Try
|
||||
w = OpisBledu(986, wynikXL, 0)
|
||||
End Sub
|
||||
|
||||
End Module
|
||||
Reference in new issue
Block a user