Procedura CDN.my_ImpDM_Dekr łączyła stronę Wn z Ma przez inner join po numerze linii, więc z dekretów zapisanych w liniach jednostronnych (np. PKI: linia 1 tylko Wn, linia 2 tylko Ma) nie przechodziła żadna linia albo tylko linie dwustronne. Teraz przechodzi każda linia; brakująca strona to puste konto i KKSNumer = 0 w pozycji noty. Procedura zwraca '' zamiast NULL, więc działa też ze starą wersją programu. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
268 lines
10 KiB
VB.net
268 lines
10 KiB
VB.net
'Public Module ImportDM
|
|
Partial Public Class MainFrm
|
|
Public GIDTyp, GIDFirma, GIDNumer, GIDLp As Integer 'aktualny dekret
|
|
Public DecimalGroupSep As String
|
|
Public DecimalSep As String
|
|
|
|
Function szukaj_sep(ByVal line As String, ByVal start As Integer, ByVal separator As String) As Integer
|
|
Dim i As Integer
|
|
szukaj_sep = -1
|
|
i = InStr(start, line, separator, CompareMethod.Text)
|
|
If i > start Then szukaj_sep = i
|
|
End Function
|
|
|
|
Function ToDate(Data As String) As Date
|
|
Dim dd As Date
|
|
Dim pos As Integer
|
|
|
|
Data = Replace(Data, "/", ".")
|
|
Data = Replace(Data, "-", ".")
|
|
pos = szukaj_sep(Data, 1, ".")
|
|
Dim TestAr() As String = Split(Data, ".", , CompareMethod.Text)
|
|
If pos = 5 Then 'rrrr.mm.dd
|
|
dd = DateSerial(TestAr(0), TestAr(1), TestAr(2))
|
|
Else 'dd.mm.rrrr
|
|
dd = DateSerial(TestAr(2), TestAr(1), TestAr(0))
|
|
End If
|
|
ToDate = dd
|
|
End Function
|
|
|
|
Function XL_Date(Data As Date) As Integer
|
|
XL_Date = 36161 + CInt(Data.ToOADate())
|
|
End Function
|
|
|
|
Function Liczba(bf As String) As String
|
|
Dim w As String
|
|
|
|
w = Replace(bf, ",", DecimalSep)
|
|
w = Replace(bf, ".", DecimalSep)
|
|
Liczba = w
|
|
End Function
|
|
|
|
Public Function ZamknijDekret(ByVal CzyZapisac As Boolean) As Boolean
|
|
Dim ZamknijDekretZbiorczyInfo As New cdn_api.XLDekretZbiorczyInfo_20251
|
|
Dim ret As Boolean = False
|
|
|
|
With ZamknijDekretZbiorczyInfo
|
|
.Wersja = Wersja
|
|
.Tryb = 2 'Tryb wystawienia (interakcyjny/wsadowy)
|
|
.GIDTyp = GIDTyp 'GID dekretu (zwracanego po dodaniu)
|
|
.GIDFirma = GIDFirma '
|
|
.GIDNumer = GIDNumer '
|
|
.GIDLp = 0 '
|
|
End With
|
|
XLZamknijDekretZb(ZamknijDekretZbiorczyInfo)
|
|
If wynikXL = 0 Then
|
|
ret = True
|
|
End If
|
|
If Not CzyZapisac Then
|
|
Dim KasujDekretInfo As New cdn_api.XLDekretInfo_20251
|
|
With ZamknijDekretZbiorczyInfo
|
|
.Wersja = Wersja
|
|
.Tryb = 2 'Tryb wystawienia (interakcyjny/wsadowy)
|
|
.GIDTyp = GIDTyp 'GID dekretu (zwracanego po dodaniu)
|
|
.GIDFirma = GIDFirma '
|
|
.GIDNumer = GIDNumer '
|
|
.GIDLp = 0 '
|
|
End With
|
|
XLKasujDekretzb(KasujDekretInfo)
|
|
End If
|
|
Return (ret)
|
|
End Function
|
|
|
|
Public Function UtworzDekretZbiorczy(ByVal IdentKsieg As String, ByVal Data As Date, ByVal DokData As Date, ByVal DokZrodlowy As String, ByVal Opis As String, ByVal SumaCT As Decimal, ByVal SumaDT As Decimal) As Boolean
|
|
Dim DekretZbiorczyInfo As New cdn_api.XLDekretZbiorczyInfo_20251
|
|
|
|
listuj(CStr(Now) + "-> Dokument: " + IdentKsieg)
|
|
With DekretZbiorczyInfo
|
|
.Wersja = Wersja
|
|
.Tryb = 2 'Tryb wystawienia wsadowy
|
|
.Data = XL_Date(Data) 'Data dekretu
|
|
.DataDokumentu = XL_Date(DokData) 'Data dokumentu
|
|
.KwotaDebet = Str(SumaDT) + Chr(0) 'Kwota sumaryczna winien
|
|
.KwotaCredit = Str(SumaCT) + Chr(0) 'Kwota sumaryczna ma
|
|
.NumerDokumentu = DokZrodlowy + Chr(0) 'Numer dokumentu źródłowego
|
|
.Dziennik = My.Settings.Seria + Chr(0) 'Dziennik księgowań
|
|
.Bufor = "BUFOR" + Chr(0) 'Bufor księgowań (pusty = KG)
|
|
.Identyfikator = IdentKsieg 'identyfikator księgowy - numer dokument z Jastrzębia
|
|
.Opis = Opis + Chr(0) 'Opis dekretu
|
|
End With
|
|
XLDodajDekretZb(DekretZbiorczyInfo)
|
|
If wynikXL = 0 Then
|
|
GIDFirma = DekretZbiorczyInfo.GIDFirma
|
|
GIDTyp = DekretZbiorczyInfo.GIDTyp
|
|
GIDNumer = DekretZbiorczyInfo.GIDNumer
|
|
GIDLp = DekretZbiorczyInfo.GIDLp
|
|
Return (True)
|
|
Else
|
|
GIDFirma = 0
|
|
GIDTyp = 0
|
|
GIDNumer = 0
|
|
GIDLp = 0
|
|
Return (False)
|
|
End If
|
|
End Function
|
|
|
|
Public Function DodajSkladowy(ByVal DZKNumer As Integer) As Boolean
|
|
Dim DekretSkladowyInfo As New cdn_api.XLDekretInfo_20251
|
|
Dim ret As Boolean = True
|
|
Dim i As Integer
|
|
Dim line As String
|
|
|
|
i = 0
|
|
Try
|
|
Tamy_ImpDM_Dekr.Fill(DsMain.Tbmy_ImpDM_Dekr, DZKNumer)
|
|
BsTbmy_ImpDM_Dekr.ResetBindings(False)
|
|
BsTbmy_ImpDM_Dekr.MoveFirst()
|
|
While i < BsTbmy_ImpDM_Dekr.Count
|
|
With DekretSkladowyInfo
|
|
.Kwota = Str(BsTbmy_ImpDM_Dekr.Current("Kwota")) + Chr(0) 'Kwota pomnożona przez 100
|
|
.NumerDokumentu = BsTbmy_ImpDM_Dekr.Current("DokZr") + Chr(0) 'Numer dokumentu
|
|
.KontoDebet = BsTbmy_ImpDM_Dekr.Current("KontoDebet") + Chr(0) 'Numer konta winien (WN)
|
|
.KontoCredit = BsTbmy_ImpDM_Dekr.Current("KontoCredit") + Chr(0) 'Numer konta ma (MA)
|
|
.Identyfikator = BsTbmy_ImpDM_Dekr.Current("Identyfikator")
|
|
.Opis = BsTbmy_ImpDM_Dekr.Current("Opis") + Chr(0) 'Opis dekretu
|
|
End With
|
|
line = " Dekret-> " & BsTbmy_ImpDM_Dekr.Current("DokZr")
|
|
line = line & " - Wn: " & BsTbmy_ImpDM_Dekr.Current("KontoDebet")
|
|
line = line & ", Ma: " & BsTbmy_ImpDM_Dekr.Current("KontoCredit")
|
|
line = line & ", kwota: " & Str(BsTbmy_ImpDM_Dekr.Current("Kwota"))
|
|
listuj(line)
|
|
XLDodajDekretSkl(DekretSkladowyInfo)
|
|
If wynikXL <> 0 Then ret = False
|
|
BsTbmy_ImpDM_Dekr.MoveNext()
|
|
i += 1
|
|
End While
|
|
Catch ex As System.Exception
|
|
ret = False
|
|
System.Windows.Forms.MessageBox.Show(ex.Message)
|
|
End Try
|
|
|
|
Return (ret)
|
|
End Function
|
|
|
|
Public Function UtworzNote(ByVal NrDokumentu As String, ByVal Data As Date, ByVal DokData As Date, ByVal DokZrodlowy As String, ByVal tresc As String) As Boolean
|
|
Dim NotaInfo As New cdn_api.XLNotaInfo_20251
|
|
|
|
listuj(CStr(Now) + "-> Nota do: " + NrDokumentu)
|
|
If tresc <= " " Then tresc = "brak opisu"
|
|
With NotaInfo
|
|
.GIDTyp = 4145 'nota uproszczona
|
|
.KNPTyp = 0
|
|
.KNPNumer = 0
|
|
.KNPLp = 0
|
|
.DataWprow = XL_Date(Data) 'Data dekretu
|
|
.DataDok = XL_Date(DokData) 'Data dokumentu
|
|
.DataOper = XL_Date(DokData) 'Data dokumentu
|
|
.Seria = My.Settings.Seria + Chr(0)
|
|
.NumerDokumentu = NrDokumentu + Chr(0) 'Numer dokumentu źródłowego
|
|
.Tresc = tresc + Chr(0) 'treść noty
|
|
End With
|
|
XLDodajNoteMem(NotaInfo)
|
|
If wynikXL = 0 Then
|
|
GIDFirma = NotaInfo.GIDFirma
|
|
GIDTyp = NotaInfo.GIDTyp
|
|
GIDNumer = NotaInfo.GIDNumer
|
|
GIDLp = NotaInfo.GIDLp
|
|
Return (True)
|
|
Else
|
|
GIDFirma = 0
|
|
GIDTyp = 0
|
|
GIDNumer = 0
|
|
GIDLp = 0
|
|
Return (False)
|
|
End If
|
|
End Function
|
|
|
|
Public Function DodajPozycjeNoty(ByVal DZKNumer As Integer, ByVal DataDok As Date, ByVal DataOper As Date, ByVal opis As String, ByVal NrDok As String) As Boolean
|
|
Dim NotaPozycjaInfo As New cdn_api.XLPozycjaNotyInfo_20251
|
|
Dim ret As Boolean = True
|
|
Dim i, KKS_Wn, KKS_Ma As Integer
|
|
Dim Rok As Integer
|
|
Dim sql, line, KontoWn, KontoMa As String
|
|
|
|
i = 0
|
|
If opis <= " " Then opis = "brak opisu"
|
|
Try
|
|
System.Threading.Thread.Sleep(200) 'chwilkę poczekaj na SQL
|
|
Tamy_ImpDM_Dekr.ClearBeforeFill = True
|
|
Tamy_ImpDM_Dekr.Fill(DsMain.Tbmy_ImpDM_Dekr, DZKNumer)
|
|
BsTbmy_ImpDM_Dekr.ResetBindings(False)
|
|
BsTbmy_ImpDM_Dekr.MoveFirst()
|
|
While i < BsTbmy_ImpDM_Dekr.Count
|
|
KontoWn = If(IsDBNull(BsTbmy_ImpDM_Dekr.Current("KontoDebet")), "", BsTbmy_ImpDM_Dekr.Current("KontoDebet"))
|
|
KontoMa = If(IsDBNull(BsTbmy_ImpDM_Dekr.Current("KontoCredit")), "", BsTbmy_ImpDM_Dekr.Current("KontoCredit"))
|
|
KKS_Wn = 0
|
|
KKS_Ma = 0
|
|
Rok = Year(DataDok)
|
|
' linia jednostronna - pusta strona zostaje z KKSNumer = 0
|
|
If KontoWn > "" Then
|
|
sql = "select top(1) KKS_GIDNumer from CDN.Konta where KKS_Rok = " & CStr(Rok) & " and KKS_Konto = '" & KontoWn & "'"
|
|
line = GetOneVal(sql, DstConn_str)
|
|
If line > "" Then KKS_Wn = CInt(line)
|
|
End If
|
|
If KontoMa > "" Then
|
|
sql = "select top(1) KKS_GIDNumer from CDN.Konta where KKS_Rok = " & CStr(Rok) & " and KKS_Konto = '" & KontoMa & "'"
|
|
line = GetOneVal(sql, DstConn_str)
|
|
If line > "" Then KKS_Ma = CInt(line)
|
|
End If
|
|
With NotaPozycjaInfo
|
|
.Kwota = Str(BsTbmy_ImpDM_Dekr.Current("Kwota")) + Chr(0) 'Kwota
|
|
.NumerDokumentu = NrDok + Chr(0) 'Numer dokumentu
|
|
.KKSNumerDT = KKS_Wn
|
|
.KKSNumerCT = KKS_Ma
|
|
.Opis = opis + Chr(0) 'Opis z pozycji dekretu
|
|
.DataDok = XL_Date(DataDok)
|
|
.DataOper = XL_Date(DataDok)
|
|
End With
|
|
line = " pozycja -> " & BsTbmy_ImpDM_Dekr.Current("DokZr")
|
|
line = line & " - Wn: " & KontoWn
|
|
line = line & ", Ma: " & KontoMa
|
|
line = line & ", kwota: " & Str(BsTbmy_ImpDM_Dekr.Current("Kwota"))
|
|
listuj(line)
|
|
XLDodajPozycjeNotyMem(NotaPozycjaInfo)
|
|
If wynikXL <> 0 Then ret = False
|
|
BsTbmy_ImpDM_Dekr.MoveNext()
|
|
i += 1
|
|
End While
|
|
Catch ex As System.Exception
|
|
ret = False
|
|
System.Windows.Forms.MessageBox.Show("Dodaj pozycje: " & ex.Message)
|
|
End Try
|
|
|
|
Return (ret)
|
|
End Function
|
|
|
|
Public Function ZamknijNote(ByVal CzyZapisac As Boolean) As Boolean
|
|
Dim NotaInfo As New cdn_api.XLNotaInfo_20251
|
|
Dim ret As Boolean = False
|
|
|
|
With NotaInfo
|
|
.Wersja = Wersja
|
|
.Tryb = 2 'Tryb wystawienia (interakcyjny/wsadowy)
|
|
.GIDTyp = GIDTyp 'GID dekretu (zwracanego po dodaniu)
|
|
.GIDFirma = GIDFirma '
|
|
.GIDNumer = GIDNumer '
|
|
.GIDLp = 0 '
|
|
End With
|
|
XLZamknijNoteMem(NotaInfo)
|
|
If wynikXL = 0 Then
|
|
ret = True
|
|
End If
|
|
If Not CzyZapisac Then
|
|
Dim KasNotaInfo As New cdn_api.XLNotaInfo_20251
|
|
With KasNotaInfo
|
|
.Wersja = Wersja
|
|
.Tryb = 2 'Tryb wystawienia (interakcyjny/wsadowy)
|
|
.GIDTyp = GIDTyp 'GID dekretu (zwracanego po dodaniu)
|
|
.GIDFirma = GIDFirma '
|
|
.GIDNumer = GIDNumer '
|
|
.GIDLp = 0 '
|
|
End With
|
|
XLKasujNoteMem(KasNotaInfo)
|
|
End If
|
|
Return (ret)
|
|
End Function
|
|
|
|
End Class
|