Compare commits

..
2 Commits
Author SHA1 Message Date
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
KrzysztofandClaude Opus 5.5 8dc62f8986 Kolory w gridzie i automatyczne odświeżanie po zmianie konta
- zaimportowane dokumenty czerwoną czcionką, czekające na import czarną
  (status z DataImportu jako daty; wcześniej porównanie tekstu daty
  w formacie dd.mm.rrrr nigdy nie dawało czerwonego koloru)
- lista odświeża się sama 0,5 s po ostatniej zmianie konta, więc
  przewijanie kont przytrzymanym klawiszem nie uruchamia serii zapytań
- jedno odświeżenie grida po wczytaniu listy zamiast po każdym wierszu

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 14:43:45 +02:00
4 changed files with 63 additions and 14 deletions

No files matched your search

+14 -8
View File
@@ -1,4 +1,4 @@
SET ANSI_NULLS ON SET ANSI_NULLS ON
GO GO
SET QUOTED_IDENTIFIER ON SET QUOTED_IDENTIFIER ON
GO GO
@@ -7,6 +7,10 @@ IF EXISTS (SELECT * FROM sysobjects WHERE name = 'my_ImpDM_Dekr' AND user_name(u
DROP PROCEDURE [CDN].my_ImpDM_Dekr DROP PROCEDURE [CDN].my_ImpDM_Dekr
GO GO
/*
2026.10.14 - KC: import linii jednostronnych (tylko Wn albo tylko Ma). Wcześniej Wn i Ma były łączone przez inner join
po DT_GIDLp, więc z dekretu o kilku liniach przechodziły tylko linie mające obie strony.
*/
CREATE PROCEDURE [CDN].my_ImpDM_Dekr CREATE PROCEDURE [CDN].my_ImpDM_Dekr
( (
@DZKNr int -- 1 - DZK_DIGNumer @DZKNr int -- 1 - DZK_DIGNumer
@@ -22,21 +26,23 @@ AS
insert into @CRE insert into @CRE
select DT_GIDNumer, DT_GIDLp, DT_DC, DT_Konto, DT_Kwota, DT_DataCentrali from CDN.Dekrety where DT_DC = 2 and DT_GIDNumer = @DZKNr select DT_GIDNumer, DT_GIDLp, DT_DC, DT_Konto, DT_Kwota, DT_DataCentrali from CDN.Dekrety where DT_DC = 2 and DT_GIDNumer = @DZKNr
SELECT Lp = ROW_NUMBER() OVER(ORDER BY DZK_Opis, DEL_Opis, deb.DT_Konto, cre.DT_Konto), -- linia dekretu może mieć obie strony albo tylko jedną; brakująca strona = pusty numer konta
SELECT Lp = ROW_NUMBER() OVER(ORDER BY DZK_Opis, DEL_Opis, isnull(deb.DT_Konto, ''), isnull(cre.DT_Konto, ''), DEL_GIDLp),
DZK_Opis = left (DZK_Opis, 80), DZK_Opis = left (DZK_Opis, 80),
[Data] = DEL_DataWyst, [Data] = DEL_DataWyst,
DataDokumentu = DEL_DataOper, DataDokumentu = DEL_DataOper,
Kwota = deb.DT_Kwota, Kwota = coalesce(deb.DT_Kwota, cre.DT_Kwota),
DokZr = DZK_DokumentZrodlowy, DokZr = DZK_DokumentZrodlowy,
KontoDebet = deb.DT_Konto, KontoDebet = isnull(deb.DT_Konto, ''),
KontoCredit = cre.DT_Konto, KontoCredit = isnull(cre.DT_Konto, ''),
Identyfikator = left(DZK_Opis, 80), Identyfikator = left(DZK_Opis, 80),
Opis = left(DEL_Opis, 80), Opis = left(DEL_Opis, 80),
DataImportu = CDN.TsToDate(coalesce(deb.DT_DataCentrali, 0), 1) DataImportu = CDN.TsToDate(coalesce(deb.DT_DataCentrali, cre.DT_DataCentrali, 0), 1)
FROM CDN.Dziennik inner join CDN.DziennikElem on DZK_GIDNumer = DEL_GIDNumer FROM CDN.Dziennik inner join CDN.DziennikElem on DZK_GIDNumer = DEL_GIDNumer
inner join @DEB deb ON deb.DT_GIDNumer = DEL_GIDNumer and deb.DT_GIDLp = DEL_GIDLp left outer join @DEB deb ON deb.DT_GIDNumer = DEL_GIDNumer and deb.DT_GIDLp = DEL_GIDLp
inner join @CRE cre ON cre.DT_GIDNumer = DEL_GIDNumer and cre.DT_GIDLp = DEL_GIDLp left outer join @CRE cre ON cre.DT_GIDNumer = DEL_GIDNumer and cre.DT_GIDLp = DEL_GIDLp
where DZK_GIDNumer = @DZKNr where DZK_GIDNumer = @DZKNr
and (deb.DT_GIDNumer is not null or cre.DT_GIDNumer is not null)
order by 1 order by 1
+7 -2
View File
@@ -190,17 +190,22 @@ Partial Public Class MainFrm
BsTbmy_ImpDM_Dekr.ResetBindings(False) BsTbmy_ImpDM_Dekr.ResetBindings(False)
BsTbmy_ImpDM_Dekr.MoveFirst() BsTbmy_ImpDM_Dekr.MoveFirst()
While i < BsTbmy_ImpDM_Dekr.Count While i < BsTbmy_ImpDM_Dekr.Count
KontoWn = BsTbmy_ImpDM_Dekr.Current("KontoDebet") KontoWn = If(IsDBNull(BsTbmy_ImpDM_Dekr.Current("KontoDebet")), "", BsTbmy_ImpDM_Dekr.Current("KontoDebet"))
KontoMa = BsTbmy_ImpDM_Dekr.Current("KontoCredit") KontoMa = If(IsDBNull(BsTbmy_ImpDM_Dekr.Current("KontoCredit")), "", BsTbmy_ImpDM_Dekr.Current("KontoCredit"))
KKS_Wn = 0 KKS_Wn = 0
KKS_Ma = 0 KKS_Ma = 0
Rok = Year(DataDok) 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 & "'" sql = "select top(1) KKS_GIDNumer from CDN.Konta where KKS_Rok = " & CStr(Rok) & " and KKS_Konto = '" & KontoWn & "'"
line = GetOneVal(sql, DstConn_str) line = GetOneVal(sql, DstConn_str)
If line > "" Then KKS_Wn = CInt(line) 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 & "'" sql = "select top(1) KKS_GIDNumer from CDN.Konta where KKS_Rok = " & CStr(Rok) & " and KKS_Konto = '" & KontoMa & "'"
line = GetOneVal(sql, DstConn_str) line = GetOneVal(sql, DstConn_str)
If line > "" Then KKS_Ma = CInt(line) If line > "" Then KKS_Ma = CInt(line)
End If
With NotaPozycjaInfo With NotaPozycjaInfo
.Kwota = Str(BsTbmy_ImpDM_Dekr.Current("Kwota")) + Chr(0) 'Kwota .Kwota = Str(BsTbmy_ImpDM_Dekr.Current("Kwota")) + Chr(0) 'Kwota
.NumerDokumentu = NrDok + Chr(0) 'Numer dokumentu .NumerDokumentu = NrDok + Chr(0) 'Numer dokumentu
+1 -1
View File
@@ -633,7 +633,7 @@ Partial Class MainFrm
Me.Name = "MainFrm" Me.Name = "MainFrm"
Me.Padding = New System.Windows.Forms.Padding(3) Me.Padding = New System.Windows.Forms.Padding(3)
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Import dokumentów magazynowych 2.0.1 z 13.10.2026" Me.Text = "Import dokumentów magazynowych 2.0.2 z 14.10.2026"
Me.TlMainPanel.ResumeLayout(False) Me.TlMainPanel.ResumeLayout(False)
Me.Panel1.ResumeLayout(False) Me.Panel1.ResumeLayout(False)
Me.Panel1.PerformLayout() Me.Panel1.PerformLayout()
+41 -3
View File
@@ -204,6 +204,21 @@ Public Class MainFrm
End If End If
End Sub End Sub
' odświeżenie listy po zmianie konta z opóźnieniem - przewijanie listy kont przytrzymanym klawiszem
' albo wpisywanie numeru konta nie uruchamia zapytania po każdej zmianie, tylko raz po 0,5 s spokoju
Private WithEvents TmKonto As New System.Windows.Forms.Timer With {.Interval = 500}
Private WczytaneKonto As String = ""
Private Sub CbKonto_TextChanged(sender As Object, e As EventArgs) Handles CbKonto.TextChanged
TmKonto.Stop()
If SourceConnected AndAlso CbKonto.Text <> WczytaneKonto Then TmKonto.Start()
End Sub
Private Sub TmKonto_Tick(sender As Object, e As EventArgs) Handles TmKonto.Tick
TmKonto.Stop()
If CbKonto.Text <> WczytaneKonto Then OdswiezDane()
End Sub
Private Sub CbMiesiac_TextChanged(sender As Object, e As EventArgs) Handles CbMiesiac.TextChanged Private Sub CbMiesiac_TextChanged(sender As Object, e As EventArgs) Handles CbMiesiac.TextChanged
If SourceConnected Then If SourceConnected Then
Mies = CbMiesiac.Items.IndexOf(CbMiesiac.Text) + 1 Mies = CbMiesiac.Items.IndexOf(CbMiesiac.Text) + 1
@@ -243,9 +258,23 @@ Public Class MainFrm
OdswiezDane() OdswiezDane()
End Sub End Sub
Private Sub DgvDokumenty_RowPostPaint(sender As Object, e As DataGridViewRowPostPaintEventArgs) Handles DgvDokumenty.RowPostPaint ' Dokument niezaimportowany ma DataImportu = 1990-01-01 (DT_DataCentrali = 0) albo NULL
If Not DgvDokumenty.Rows(e.RowIndex).Cells("colDataImportu").Value Is DBNull.Value Then Private Shared ReadOnly BrakImportu As Date = New Date(1990, 1, 1)
If CStr(DgvDokumenty.Rows(e.RowIndex).Cells("colDataImportu").Value) > "1990-01-01" Then DgvDokumenty.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Red
Private Function CzyZaimportowany(ByVal Wiersz As DataRowView) As Boolean
Dim Data As Object = Wiersz("DataImportu")
Return Not IsDBNull(Data) AndAlso CDate(Data) > BrakImportu
End Function
' zaimportowane - czerwona czcionka, czekające na import - czarna
Private Sub DgvDokumenty_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DgvDokumenty.CellFormatting
If e.RowIndex < 0 OrElse e.RowIndex >= BsTbmy_ImpDM_Src.Count Then Return
' wiersz z BindingSource, a nie z DgvDokumenty.Rows - nie rozwiązuje współdzielonych wierszy grida
If CzyZaimportowany(CType(BsTbmy_ImpDM_Src(e.RowIndex), DataRowView)) Then
e.CellStyle.ForeColor = Color.Red
e.CellStyle.SelectionForeColor = Color.LightPink
Else
e.CellStyle.ForeColor = Color.Black
End If End If
End Sub End Sub
@@ -411,7 +440,9 @@ Public Class MainFrm
If Not SourceConnected Then Return If Not SourceConnected Then Return
TmKonto.Stop()
Konto = CbKonto.Text Konto = CbKonto.Text
WczytaneKonto = Konto
ImpFl = 2 ImpFl = 2
If RbBlack.Checked Then ImpFl = 0 Else If RbRed.Checked Then ImpFl = 1 If RbBlack.Checked Then ImpFl = 0 Else If RbRed.Checked Then ImpFl = 1
@@ -425,7 +456,14 @@ Public Class MainFrm
lbUwaga.Refresh() lbUwaga.Refresh()
Application.DoEvents() Application.DoEvents()
pos = BsTbmy_ImpDM_Src.Position pos = BsTbmy_ImpDM_Src.Position
' bez powiadamiania grida o każdym wczytanym wierszu - jedno odświeżenie po Fill
BsTbmy_ImpDM_Src.RaiseListChangedEvents = False
Try
Tamy_ImpDM_Src.Fill(Me.DsMain.Tbmy_ImpDM_Src, SpFlag, ZakFlag, WewFlag, RM, Rok, Mies, Konto, ImpFl) Tamy_ImpDM_Src.Fill(Me.DsMain.Tbmy_ImpDM_Src, SpFlag, ZakFlag, WewFlag, RM, Rok, Mies, Konto, ImpFl)
Finally
BsTbmy_ImpDM_Src.RaiseListChangedEvents = True
BsTbmy_ImpDM_Src.ResetBindings(False)
End Try
If pos < BsTbmy_ImpDM_Src.Count Then BsTbmy_ImpDM_Src.Position = pos Else BsTbmy_ImpDM_Src.Position = BsTbmy_ImpDM_Src.Count - 1 If pos < BsTbmy_ImpDM_Src.Count Then BsTbmy_ImpDM_Src.Position = pos Else BsTbmy_ImpDM_Src.Position = BsTbmy_ImpDM_Src.Count - 1
lbUwaga.Visible = False lbUwaga.Visible = False
lbUwaga.Invalidate() lbUwaga.Invalidate()