Public Module FunkcjeXL Public Const API_VERSION = 20251 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_20251 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 System.Threading.Thread.Sleep(200) 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_20251 With { .Wersja = Wersja, ' numer wersji API (20251) 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_20251 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_20251) 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_20251) 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_20251 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_20251 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_20251 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_20251 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_20251 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_20251) 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_20251) 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_20251) 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_20251) 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_20251) 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_20251) 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_20251) 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_20251) 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_20251) 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