Files
ImportDokMag/ImportDokMag/ImportDM.vb
T
KrzysztofandClaude Opus 5.5 7fc8b638d7 Import linii dekretu jednostronnych (wersja 2.0.2)
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>
2026-10-14 14:43:45 +02:00

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