Czy aplikacja Comarch e-Sprawozdania umożliwia sporządzanie sprawozdań dla jednostek mikro według załącznika nr 4 do Ustawy o rachunkowości?

Aplikacja Comarch e-Sprawozdania w wersji 2019.1 umożliwia sporządzanie sprawozdań dla jednostek mikro według załącznika nr 4 do Ustawy o rachunkowości.




OPT043 Zaawansowane schematy księgowe

Data aktualizacji: 28-11-2018


Spis treści



1. Jakich operatorów logicznych mogę używać w warunku w schemacie księgowym?

Warunek wpisany w schemacie księgowym jest „tłumaczony” na zapytanie SQL poprzez zastąpienie makr (symboli zaczynających się od znaku @) na odwołanie do kolumn bądź funkcji serwerowych.

Poszczególne odwołania można łączyć zgodnie z syntaktyką T-SQL – dotyczy to zarówno operatorów porównania (=, >, <, <>, LIKE) jak i operatorów łączących wyrażenia (AND, OR). Dodatkowo możliwe jest używanie funkcji serwerowych.

Przykładowo poprawny jest warunek

@KategoriaElem LIKE 'POZOST%' OR @KategoriaNag = 'SPR' AND SUBSTRING(@KategoriaElem, 5, 3)= 'TOW'

2. Jak sobie poradzić gdy długi warunek, zawierający wiele kategorii, nie mieści się w schemacie?

W warunku zamiast wersji dłuższej np.

@KodPodmiotu='ALA' AND ( @KategoriaElem='MATERIAŁY' OR @KategoriaElem='TOWARY' OR @KategoriaElem='INNE')

można użyć operatora serwerowego IN:

@KodPodmiotu='ALA' AND @KategoriaElem IN ('MATERIAŁY', 'TOWARY', 'INNE')

3. Czy księgując Fakturę Sprzedaży, można na konto pozabilansowe zaksięgować ilość sprzedanego towaru?

Ilość towaru jest zapisana w tabeli TraElem, żeby zaksięgować liczbę, która znajduje się w tabeli, ale nie istnieje odpowiadające jej makro (tzn. nie można wybrać np. @Ilosc), trzeba w schemacie księgowym odwołać się bezpośrednio do nazwy pola w tabeli.

Żeby na jakimś koncie pozabilansowym wyksięgować z faktury ilość sprzedanego towaru, w polu Kwota należy odwołać się do pola TrE_Ilosc. Ze względu jednak na optymalizację parsera analizującego schemat księgowy i „tłumaczącego” go na zapytanie SQL konieczne jest użycie w definicji kwoty przynajmniej jednego makra (tzn. pola zaczynającego się od '@’) lub definicja musi rozpoczynać się od znaku apostrofu (‘). Dodatkowo trzeba „zmusić” automat księgujący, żeby użył tabeli TraElem (automat księgujący nie wie, że TrE_Ilosc jest kolumną w tabeli TraElem, więc nie użyje jej automatycznie).

W tym celu w definicji kwoty można wpisać np.
@PozNetto – @PozNetto + TrE_Ilosc
@PozNetto – @PozNetto i tak dadzą w wyniku 0. Makro @PozNetto odwołuje się do pozycji faktury (a więc do tabeli TraElem), więc mamy pewność, że zapytanie zostanie zbudowane poprawnie.
Drugą możliwością jest wpisanie:
'0' + TrE_Ilosc
’0’ zostanie automatycznie przekonwertowane na liczbę 0 i nie zaburzy wyniku. W tym przypadku trzeba jeszcze „zmusić” automat księgujący, żeby użył tabeli TraElem. W tym celu w pozycji schematu księgowego należy użyć jakiegokolwiek parametru bądź makra odwołującego się do pozycji faktury, np.:

  • zaznaczyć Podział na kategorie
  • lub Podział na słowniki – Towary
  • lub w opisie (bądź w warunku) odwołać się do kategorii pozycji (@KategoriaElem lub @KategoriaOgolnaElem) lub do towaru (@NazwaTowaru)

4. Czy księgując Fakturę Sprzedaży w opisie pozycji dekretu mogę umieścić informację o stawce VAT, jakiej dotyczyła dana pozycja?

Tak, w przypadku opisu jest podobnie jak w przypadku kwoty - można odwołać się do pola (pól) z tabeli, z zastrzeżeniem, co do użycia co najmniej jednego makra i wymuszenia użycia tabeli TraElem.

W definicji kwoty używamy np. makra @PozNetto (ponieważ @PozNetto jest to wartość netto, pozycji faktury, to automatycznie mamy zapewnione, że zostanie użyta tabela TraElem)

Informacja o stawce Vat jest zapisywana w polach:

  • TrE_Flaga – mówi o tym, czy jest to stawka zwykła (2), zaniżona (3), zwolniona (1), czy nie podlega (4)
  • TrE_Stawka – zawiera wysokość stawki Vat

W definicji opisu pozycji można by więc użyć wyrażenia:

@NumerPelny + ': stawka Vat ' + Case TrE_Flaga When 1 Then 'ZW' When 4 Then 'NP' Else STR(TrE_Stawka,5,2) End

Spowoduje to wstawienie w dekrecie w polu Opis numeru dokumentu uzupełnionego o stawkę Vat - oczywiście zostanie wygenerowanych tyle pozycji, ile różnych stawek Vat jest na dokumencie.


5. Czy w schemacie księgowym Faktury Sprzedaży mogę w warunku użyć grupy, do której należy sprzedany towar?

Grupa towarowa znajduje się w tabeli Towary (pole Twr_Grupa) – przy czym nie możemy odwołać się do pola Twr_Grupa w taki sposób jak to opisywano poprzednio, ponieważ obecnie żadne makro nie odwołuje się do tabeli Towary (a więc nie ma możliwości w schemacie księgowym połączenia się z tą tabelą).

Możemy to natomiast zrobić za pomocą funkcji serwerowej. W tym celu tworzymy funkcję MojaFunkcja_GrupaTowaru – należy poniższy skrypt wykonać za pomocą Query Analyzera lub OSQL-a.

Jeżeli teraz chcemy zaksięgować warunkowo sprzedaż towarów z grupy 'AKCESORIA', w warunku wpisujemy wyrażenie:

'AKCESORIA' = dbo.MojaFunkcja_GrupaTowaru (TrE_TwrId)

Oczywiście funkcje mogą być znacznie bardziej skomplikowane, można ich używać zarówno w definicjach warunków, opisów jak i kwot (w ostatnim przypadku funkcja powinna zwracać typ NUMERIC). Podobnie jak w przypadku używania pól z tabel, używając funkcji należy pamiętać o tym, żeby wyrażenie zawierało co najmniej jedno makro, lub zaczynało się od znaku ' (apostrof).

Uwaga
Aby zaksięgować towar w zależności od grupy domyślnej, do której należy (na pierwszej zakładce karty cennika) należy funkcję skonstruować w poniższy sposób:

If Exists ( Select * From sysobjects Where name = 'MojaFunkcja_GrupaTowaru' And xtype='FN')
Drop Function dbo.MojaFunkcja_GrupaTowaru
GO
create Function dbo.MojaFunkcja_GrupaTowaru (@TwrId INT)
Returns VarChar(20)
As
Begin
Declare @Grupa VarChar(20)
select @grupa = twg_kod
from cdn.twrgrupy
join cdn.towary on twr_twggidnumer = twg_gidnumer AND twg_gidtyp = -16
where twr_twrid = @twrid
Return @Grupa
End

Uwaga
Aby zaksięgować towar pod warunkiem, że towar należy do grupy podrzędnej należy nieco inaczej zbudować funkcję.

If Exists (
Select * From sysobjects
Where name = 'MojaFunkcja_GrupaTowaru' And xtype='FN'
)
Drop Function dbo.MojaFunkcja_GrupaTowaru
GO
create Function dbo.MojaFunkcja_GrupaTowaru (@TwrId INT)
Returns VarChar(20)
As
Begin
Declare @Grupa VarChar(20)
select @grupa = A.twg_kod
from cdn.twrgrupy  A
join cdn.twrgrupy B on A.twg_gidnumer = B.twg_gronumer
join cdn.towary C on C.twr_gidnumer = B.twg_gidnumer AND C.twr_twggidnumer <> A.twg_gidnumer
where B.twg_gidtyp = 16 and A.twg_gidtyp <> 16 and c. twr_twrid = @twrid
Return @Grupa
End


6. Czy w schemacie księgowym mogę ustawić warunek na sprawdzanie istnienia lub nie kwot dodatkowych na dokumencie?

Można w warunku sprawdzić, czy istnieją kwoty dodatkowe, z tym, że korzystamy tu z pewnych funkcji pozastandardowych.

Niestety już w kilku przypadkach okazało się, że korzystanie z tego typu funkcji po zmianie wersji Comarch ERP Optima wymagało drobnych korekt w schematach księgowych.

Raporty kasowe/bankowe

Jeśli chcemy zaksięgować dokument, na którym NIE ISTNIEJĄ podpięte kwoty dodatkowe, w warunku należy wpisać:

'1'='1' AND NOT EXISTS (Select * FROM CDN.KwotyDodatkowe Where KDD_DokumentTyp=14 And KDD_DokumentId=BZp_BZpId)

Jeśli chcemy zaksięgować dokument, na którym ISTNIEJĄ podpięte kwoty dodatkowe (przy czym chodzi o księgowanie kwot przychód/rozchód, a nie kwot dodatkowych), w warunku należy wpisać:

'1'='1' AND EXISTS (Select * FROM CDN.KwotyDodatkowe Where KDD_DokumentTyp=14 And KDD_DokumentId=BZp_BZpId)

Rejestry VAT

Jeśli chcemy zaksięgować dokument, na którym NIE ISTNIEJĄ podpięte kwoty dodatkowe, w warunku należy wpisać:

'1'='1' AND NOT EXISTS (Select * FROM CDN.KwotyDodatkowe Where KDD_DokumentTyp=2 And KDD_DokumentId=van_vanId)

Jeśli chcemy zaksięgować dokument, na którym ISTNIEJĄ podpięte kwoty dodatkowe, w warunku należy wpisać:

'1'='1' AND EXISTS (Select * FROM CDN.KwotyDodatkowe Where KDD_DokumentTyp=2 And KDD_DokumentId=van_vanId)

7. Czy w schemacie do zaksięgowania listy płac można zastosować warunek do zaksięgowania wszystkich zasiłków w jednej kwocie (zasiłku rodzinnego, pielęgnacyjny, chorobowy...)?

Przy tworzeniu warunku można skorzystać z makra:

@TypWyplaty LIKE 'zas%'

8. W poniższym schemacie księgowania dokumentu PZ
z ewidencji dodatkowej występuję błąd księgowania: dokument niezbilansowany. Różnica 0,01 zł wynika
z zaokrągleń. Jak sobie z nimi poradzić?

Schemat pierwotny:

Konto WnKonto MaKwotaOpis
zwykłe1(@RazemKwota+@RazemKwota*0.32)*1.23cena brutto z marżą i VAT
zwykłe2@RazemKwotacena netto
zwykłe3@RazemKwota*0.32marża
zwykłe4(@RazemKwota+@RazemKwota*0.32)*0.23VAT

Kwota na dokumencie: 1669,06 zł. (@RazemKwota)

Rozwiązania są dwa:

1.Zastosować w schemacie podwójne dekrety:

Konto WnKonto MaKwotaOpis
zwykłe1zwykłe2@RazemKwotacena netto
zwykłe1zwykłe3@RazemKwota*0.32marża
zwykłe1zwykłe4(@RazemKwota+@RazemKwota*0.32)*0.23VAT

2. Zastosować następujące makra w schematach:

Konto WnKonto MaKwotaOpis
zwykłe1ROUND(@RazemKwota*1.32,2)*1.23cena bto z marżą i VAT
zwykłe2@RazemKwotacena netto
zwykłe3@RazemKwota*0.32marża
zwykłe4ROUND(@RazemKwota*1.32,2)*0.23VAT

9. Jak można zaksięgować wartość zakupu z rej. VAT przeniesioną za pomocą pliku COMMA?

Należy w pozycji Kwota wpisać: '0'+VaN_WartoscZak

10. Jak można podczas księgowania faktury sprzedaży odwołać się do wartości zakupu dla całego dokumentu?

Należy na pozycji schematu księgowego w polu Kwota wpisać: '0'+TrN_WartoscZakupu

11. Jak uzależnić księgowanie dokumentów z ewidencji dodatkowej na poszczególne konta od symbolu użytego w schemacie numeracji?

W przypadku Ewidencji dodatkowej przychodów można użyć w warunku wyrażenia:

@Dokument LIKE '%EDP%' 

co oznacza, że na konto zostanie zaksięgowany dokument, który ma w schemacie numeracji ciąg znaków EDP (np. EDP/000001/2003).

W przypadku Ewidencji dodatkowej kosztów można użyć w warunku wyrażenia:

'1'='1' AND EDN_NumerPelny LIKE 'EDK%'

Różnica wynika z faktu, że w Ewidencji dodatkowej kosztów, na formatce zapisu są dwa numery: numer nadawany przez program i numer obcy. Makro @Dokument w tym przypadku pobiera numer nadawany przez program jeżeli numer obcy nie jest wypełniony.

Jeżeli w warunku jest użyte jakieś makro to wystarczy dodać: AND EDN_NumerPelny LIKE 'EDK%'

Patrz też pytania nr:

    1. Jak zaksięgować fakturę zakupu, żeby w schemacie księgowania w warunku zastosować fragment numeru dokumentu np MAGAZYN i SERIA z numeru FZ/99/MAGAZYN/SERIA? 
    1. Jak w warunku schematu dla WZ odwołać się do symbolu/serii w numerze faktury do której zostało wystawione WZ?

12. Jak uzależnić księgowanie poszczególnych KP/KW
w raporcie kasowym od rodzaju podmiotu (dostawca, odbiorca, konkurencja, partner)?

W warunku schematu należy użyć wyrażenia:

'1'='1' AND EXISTS (Select * FROM CDN.Kontrahenci Where Knt_KntId=BZp_PodmiotID AND Knt_Rodzaj_Odbiorca='1')

Wówczas program zaksięguje na podane konta określoną kwotę, jeżeli kontrahent wybrany na KP/KW będzie odbiorcą.
Dla dostawcy należy zmienić w powyższym wyrażeniu nazwę pola na Knt_Rodzaj_Dostawca, dla konkurencji na Knt_Rodzaj_Konkurencja, dla partnera na Knt_Rodzaj_Partner, natomiast dla klienta potencjalnego na Knt_Rodzaj_Potencjalny.

13. Jak stworzyć warunek dla zaksięgowania na osobne konta kwot netto: towarów i usług?

Taki warunek można stworzyć w schematach dla Faktur sprzedaży i Faktur zakupu (księgowań z modułu Faktury – ewentualnie księgowań innych dokumentów z modułu Faktury lub Magazyn). Trzeba wybrać księgowanie kwoty @PozNetto (lub @PozBrutto) i w warunku dopisać:

      • Dla usługi (prostej lub złożonej):

'1'='1' AND Exists (Select * From CDN.Towary Where Twr_TwrId=TrE_TwrId And Twr_Typ=0)

      • Dla usługi prostej:

'1'='1' AND Exists (Select * From CDN.Towary Where Twr_TwrId=TrE_TwrId And Twr_Typ=0 And Twr_Produkt=0)

      • Dla usługi złożonej:

'1'='1' AND Exists (Select * From CDN.Towary Where Twr_TwrId=TrE_TwrId And Twr_Typ=0 And Twr_Produkt=1)

      • Dla towaru (prostego lub złożonego):

'1'='1' AND Exists (Select * From CDN.Towary Where Twr_TwrId=TrE_TwrId And Twr_Typ=1)

      • Dla towaru prostego:

'1'='1' AND Exists (Select * From CDN.Towary Where Twr_TwrId=TrE_TwrId And Twr_Typ=1 And Twr_Produkt=0)

      • Dla towaru złożonego:

'1'='1' AND Exists (Select * From CDN.Towary Where Twr_TwrId=TrE_TwrId And Twr_Typ=1 And Twr_Produkt=1)

14. Jakiego wyrażenia należy użyć w warunku pozycji schematu księgowego aby uzależnić księgowanie od grupy, do której należy kontrahent wybrany na fakturze w rejestrze VAT?

'1'='1' AND EXISTS (SELECT* FROM CDN.Kontrahenci where Knt_KntId=VaN_PodID AND VaN_PodmiotTyp = 1 AND Knt_Grupa='DOST')

Podana w schemacie kwota, zostanie zaksięgowana na zadane konta jeżeli kontrahent wybrany na fakturze należy do grupy 'DOST'.

W schematach księgowych dla księgowania faktur z modułu Faktury warunek powinien być następujący:

'1'='1' AND EXISTS (SELECT* FROM CDN.Kontrahenci where Knt_KntId=TrN_PodID AND TrN_PodmiotTyp = 1 AND Knt_Grupa='DOST')

15. Jak uzależnić księgowanie VAT-u z Rejestru VAT na dane konto od tego czy dokument jest rozliczony
w danym miesiącu?

Warunek czy dokument jest w ogóle nierozliczony:

'1'='1' AND EXISTS (Select * FROM CDN.BnkZdarzenia WHERE BZd_DokumentTyp = 2 And BZd_DokumentId = VaN_VaNId AND BZd_Rozliczono<2)

Poniżej warunek sprawdzający przy założeniu, że dla dokumentu jest tylko jedna płatność, czyli płatność na dokumencie nie została podzielona na raty (ale mogła być rozliczana "na raty").

Dokument jest nierozliczony lub został rozliczony w innym miesiącu niż data dokumentu:

'1'='1' AND EXISTS (Select * FROM CDN.BnkZdarzenia WHERE BZd_DokumentTyp = 2 And BZd_DokumentId = VaN_VaNId AND (BZd_Rozliczono<2 OR 100 * YEAR(BZd_DataRoz)
+ MONTH(BZd_DataRoz) <> VaN_RokMies))

Dokument został rozliczony w tym miesiącu, co data dokumentu:

'1'='1' AND NOT EXISTS (Select * FROM CDN.BnkZdarzenia WHERE BZd_DokumentTyp = 2 And BZd_DokumentId = VaN_VaNId AND (BZd_Rozliczono<2 OR 100 * YEAR(BZd_DataRoz)
+ MONTH(BZd_DataRoz) <> VaN_RokMies))

16. Jak uzależnić księgowanie VAT-u z Rejestru VAT na dane konto od tego, w którym miesiącu dokument trafi na deklarację VAT-7?

Aby zaksięgować VAT na zadane konto, jeżeli data deklaracji VAT-7 to 10.2018 należy w warunku użyć wyrażenia:

'1'='1' AND VaN_DeklRokMies='201810'

Aby zaksięgować na zadane konto, podaną kwotę, jeżeli data deklaracji VAT-7 jest różna od daty rejestru. Czyli mając wyświetloną na ekranie listę faktur za miesiąc 10.2018, program zaksięguje te, które mają datę deklaracji inną niż 10.2018 np. 11.2018.

'1'='1' AND Van_RokMies<>Van_DeklRokMies

I dla równowagi, warunek gdy data deklaracji jest równa dacie rejestru:

'1'='1' AND Van_RokMies=Van_DeklRokMies

Aby zaksięgować na zadane konto, podaną kwotę, jeżeli data deklaracji VAT-7 jest różna od daty zakupu faktury zakupu:

'1'='1' AND (100 * YEAR(VaN_DataOpe) + MONTH(VaN_DataOpe)) <> Van_DeklRokMies

Aby zaksięgować na zadane konto, podaną kwotę, jeżeli data deklaracji VAT-7 jest różna od daty wystawienia faktury zakupu:

'1'='1' AND (100 * YEAR(VaN_DataWys) + MONTH(VaN_DataWys)) <> Van_DeklRokMies

Dla metody kasowej:

'1'='1' AND Exists (Select * From CDN.VatTab7 Where Va7_VaNID=VaN_VaNID And (VAN_RokMies
<> Va7_RokMiesiac or (100*Year (VaN_DataOpe) + month (VaN_DataOpe)) <> Va7_RokMiesiac))

17. Jak zaksięgować dokument RWS na konta analityczne
w oparciu o grupy towarów?

Kwota netto ma zostać zaksięgowana na konto 311 (niesłownikowe) z podziałem na analityki w oparciu o grupy towarowe, np.:

311-01 - AKCESORIA

311-02 - ROŚLINY

311-03 – SPRZĘT

W schemacie księgowym należy utworzyć trzy pozycje z poniższymi odpowiednio warunkami:

Pozycja 1:

'1'='1' And Exists (Select * From CDN.Towary JOIN  CDN.TwRGrupy on TwR_TwGGIDNumer=TwG_GIDNumer and TwG_GIDTyp=-16 Where Twr_TwrId = TrE_TwrId And TwG_Kod  = 'AKCESORIA')

Pozycja 2:

'1'='1' And Exists (Select * From CDN.Towary JOIN  CDN.TwRGrupy on TwR_TwGGIDNumer=TwG_GIDNumer and TwG_GIDTyp=-16
Where Twr_TwrId = TrE_TwrId And TwG_Kod  = 'ROŚLINY')

Pozycja 3:

'1'='1' And Exists (Select * From CDN.Towary JOIN  CDN.TwRGrupy on TwR_TwGGIDNumer=TwG_GIDNumer and TwG_GIDTyp=-16
Where Twr_TwrId = TrE_TwrId And TwG_Kod  = 'SPRZĘT')

Można jeszcze skorzystać z innej, prostszej możliwości zaksięgowania. Gdyby 311 było kontem słownikowym (z podpiętym słownikiem Towary i podziałem na grupy), to takiego księgowania można dokonać automatem, zaznaczając w poszczególnych pozycjach schematu - Podział na słowniki: Towary.

W takiej sytuacji do analityki konta 311-01 - AKCESORIA będą podpięte subanalityki dla poszczególnych towarów.

18. Jak zaksięgować dokument RWS na konta analityczne
w zależności od tego do jakiej grupy towarowej należy towar złożony wybrany na dokumencie PWS?

Sytuacja wygląda następująco:

Dokument: Kompletacja – Przyjęcia produktówDokument: Kompletacja – Rozchody składników
Towar złożony należący do GRUPA1Towar1 – należy do GRUPA2
Towar2 – należy do GRUPA3

Księgujemy dokument: Kompletacja – Rozchody składników: chodzi o to aby zaksięgować kwotę np. @PozNetto, na wybrane konto jeżeli grupa, do której należy towar złożony wybrany na dokumencie: Kompletacja – Przyjęcia produktów, należy do GRUPA1.

Takiej operacji można dokonać schematami warunkowymi. W warunku należy wpisać:

'1'='1' AND EXISTS ( SELECT * FROM CDN.TraElem B JOIN CDN.Towary C
ON B.TrE_TwrId = C.Twr_TwrId JOIN  CDN.TwRGrupy D on C.TwR_TwGGIDNumer=D.TwG_GIDNumer and D.TwG_GIDTyp=-16
WHERE B.TrE_TrEId = CDN.TraElem.TrE_TrEIdProd AND D.TwG_Kod = 'GRUPA1' )

Jeżeli grup jest więcej i każda księgowana jest na inne konto analityczne – należy stworzyć osobną pozycję w schemacie dla każdej z nich.

Jeżeli na podane konto chcemy księgować określoną kwotę w sytuacji gdy grupa do jakiej należy towar złożony wybrany na PWP to GRUPA1 i jednocześnie towar na dokumencie RWS należy do grupy GRUPA2 to warunek powinien wyglądać następująco:

'1'='1' And Exists (Select * From CDN.Towary JOIN  CDN.TwRGrupy on TwR_TwGGIDNumer=TwG_GIDNumer and TwG_GIDTyp=-16
Where Twr_TwrId = TrE_TwrId And TwG_Kod  = 'GRUPA2') AND EXISTS ( SELECT * FROM CDN.TraElem B JOIN CDN.Towary C
ON B.TrE_TwrId = C.Twr_TwrId JOIN  CDN.TwRGrupy D on C.TwR_TwGGIDNumer=D.TwG_GIDNumer and D.TwG_GIDTyp=-16
WHERE B.TrE_TrEId = CDN.TraElem.TrE_TrEIdProd AND D.TwG_Kod = 'GRUPA1' )

19. Jak w opisie dekretu, dla księgowania Rejestru VAT, uzyskać liczbę porządkową faktury oraz rejestr,
w którym jest zapisana?

W pozycji schematu dla rejestru VAT, w polu Opis, należy wpisać:

@Dokument + ' ' + LTRIM(STR(VaN_Lp)) + ' '+ @Rejestr

Makro @Dokument może zostać zastąpione innym istniejącym makrem – chodzi o to, aby program wiedział do jakiej tabeli ma się odwołać.

Ponieważ Liczba porządkowa jest liczbą, SQL nie radzi sobie z dodaniem jej do tekstu.

Należy wykonać jawną konwersję danych, np:

@Dokument + ' ' + STR(VaN_Lp)

Ponieważ jednak funkcja STR dodaje spacje na początku liczby, więc żeby się ich pozbyć, można zapisać wyrażenie następująco:

@Dokument + ' ' + LTRIM(STR(VaN_Lp))20. Jak zaksięgować Fakturę Zakupu, żeby w schemacie  księgowania w warunku zastosować fragment numeru dokumentu np MAGAZYN  i SERIA z numeru FZ/99/MAGAZYN/SERIA?

@NumerPelny LIKE '%MAGAZYN/SERIA%'

Wówczas podana kwota, zostanie zaksięgowana na wskazane konta jeżeli numer faktury będzie zawierał ciąg znaków: ‘MAGAZYN/SERIA’. Warunek może być zastosowany dla faktury sprzedaży i zakupu księgowanych
z modułu Faktury.

Czy takiego warunku można też użyć przy księgowaniu faktur zakupu z poziomu rejestru VAT?

Tak, warunek księgowania powinien wyglądać tak:

'1'='1' AND exists (select * from CDN.TraNag where VaN_VaNID=TrN_VaNId AND TrN_NumerPelny LIKE '%MAGAZYN/SERIA%')

Patrz też pytania nr:

    1. Jak uzależnić księgowanie dokumentów z ewidencji dodatkowej na poszczególne konta od symbolu użytego w schemacie numeracji?
    1. Jak w warunku schematu dla WZ odwołać się do symbolu/serii w numerze faktury do której zostało wystawione WZ?

 

21. W jaki sposób, w schemacie księgowania faktury zakupu z rejestrów VAT (pochodzącej z modułu Faktury), umieścić w opisie jej numer pełny (własny)?

Należy zdefiniować funkcję serwerową. Poniżej przykład takiej funkcji:

Create Function CDN.MojeFunkcje_Podaj_TrN_NumerPelny (@VaNId Int) Returns VarChar(31) As  Begin
Declare @Numer VarChar(31)
Set @Numer = IsNull((Select Top 1 TrN_NumerPelny From CDN.TraNag Where TrN_VaNId = @VaNId), '')
Return @Numer
End

Jeżeli chcemy to umieścić w opisie, to musi się znaleźć w "towarzystwie" co najmniej jednego makra, np.:

@Dokument + ' ' + CDN.MojeFunkcje_Podaj_TrN_NumerPelny (VaN_VaNId)

22. Jakiego użyć warunku aby zaksięgować fakturę
w zależności od terminu płatności?

Dla księgowania faktur z modułu Faktury:

'1'='1' AND TrN_Termin BETWEEN Convert(DateTime, '2018-01-01', 120) AND Convert(DateTime, '2018-01-31', 120)

Podana w elemencie schematu kwota, zostanie zaksięgowana na zadane konta jeżeli termin płatności faktury będzie zawierał się między 2018-01-01 a 2018-01-31.

Dla księgowania faktur z Rejestrów VAT:

'1'='1' AND VaN_Termin BETWEEN Convert(DateTime, '2018-01-01', 120) AND Convert(DateTime, '2018-01-31', 120)23. Jak w schemacie księgowania podzielić wynagrodzenia wg wydziałów przy czym na jedną listę wchodzą pracownicy z kilku wydziałów?

W warunku należy wpisać:

'1'='1' and Exists (Select * From CDN.PracEtaty Where WPL_PraId = PRE_PraId AND WPL_DataDok Between PRE_DataOd And PRE_DataDo And CDN.DzialSciezka(PRE_DZLId) = 'FIRMA\WYDZIAŁ1\PODWYDZIAŁ1')

WYDZIAŁ1 to nazwa wydziału w którego skład wchodzi PODWYDZIAŁ1. Pracownik ma podpięty na karcie PODWYDZIAŁ1.

24. Jak w schemacie do księgowania listy płac rozksięgować składkę na FP i FGŚP z podziałem na wydziały (składkę wyliczoną i zsumowaną dla każdego
z pracowników danego wydziału)?

Wartości FP i FGŚP obliczone dla składników wynagrodzeń poszczególnych pracowników, są umieszczone
w tabeli CDN.WypElementy w polach: WPE_SklFP i WPE_SklFGSP. Do ww. tabeli odwołuje się np. makro kwoty @Brutto. Aby zaksięgować kwotę FP i FGŚP obliczoną dla poszczególnych pracowników przypisanych do konkretnego wydziału, należy w elemencie schematu, w polu Kwota, użyć wyrażenia:

Dla księgowania FP:

@Brutto - @Brutto + WPE_SklFP

Dla księgowania FGŚP:

@Brutto - @Brutto + WPE_SklFGSP

W warunku należy użyć wyrażenia dotyczącego Wydziału (@Wydzial) lub opisanego w pytaniu 30. Jak w schemacie księgowania podzielić wynagrodzenia wg wydziałów przy czym na jedną listę wchodzą pracownicy
z kilku wydziałów?

25. Jak zaksięgować KP/KW w zależności od tego czy termin płatności, na fakturze, która jest rozliczona
z płatnością, jest różny od daty wystawienia dokumentu i forma płatności to gotówka?

W warunku można użyć następującego wyrażenia:

'1'='1' AND exists ( select * from CDN.BnkRozRelacje join CDN.BnkZdarzenia on BRR_DDokID = BZd_BZdID AND BRR_DDokTyp=1 join CDN.FormyPlatnosci on BZd_FPlId = FPl_FPlId where BZp_BZpID=BRR_ZDokID AND BRR_ZDokTyp=2 AND BZd_Termin<>BZd_DataDok AND BZd_DokumentTyp IN (1,2) AND FPl_Typ=1)

Warunek sprawdza daty i formę płatności zdarzenia w Preliminarzu. Uwzględnia więc sytuację, w której płatność do faktury została podzielona na raty. Natomiast w sytuacji gdy jest jedna płatność, która rozlicza kilka faktur i co najmniej jedna z nich spełnia powyższy warunek - KP/KW zostanie zaksięgowane.

Pole FPl_Typ=1 oznacza, że typ formy płatności to "gotówka" (takich form zdefiniowanych w programie może być wiele i wszystkie zostaną wzięte pod uwagę). Jeżeli warunek ma dotyczyć tylko konkretnej formy płatności, która ma identyfikator np. 1 to zamiast powyższego należy wpisać: FPl_FPlId=1.

26. Jak w schemacie księgowym dla Rejestru VAT połączyć kwotę dodatkową z kwotą brutto i VAT faktury tak aby schemat nie wykazywał błędu użycia makr różnych typów?

W jednej z firm, program fakturujący oblicza wartości detaliczne danej faktury. Wartość ta jest przenoszona do kwot dodatkowych na fakturze w Rejestrze VAT w Comarch ERP Optima. Z wartości detalicznej brutto należy obliczyć jaka kwota marży przypada na wartość netto i jaka na wartość VAT. Wzór na obliczenie tych kwot wygląda następująco:

Kwota marży przypadająca na wartość netto:

@KwotaDodat-(@VAT*(@KwotaDodat-@Brutto)/@Brutto)-@Brutto

Kwota marży przypadająca na wartość VAT:

@VAT+(@VAT*(@KwotaDodat-@Brutto)/@Brutto

Schemat wygląda następująco:

Wn

221 (kwota VAT-u z faktury) 3,06

332 (Kwota dodatkowa) 55,50

Ma

201 (kwota brutto z faktury - konto kontrahenta) 46,81

341 (Kwota marży przypadającej na wartość netto) 8,12

342 (kwota marży przypadającej na wartość VAT) 3,63

Po wprowadzeniu takiej formuły do pozycji schematu, pojawia się komunikat o błędzie połączenia makr z elementów i nagłówka.

Problem ten można rozwiązać wykorzystując fakt, że "makra" (symbole kwot zaczynające się od @) są w procesie księgowania "tłumaczone" na nazwy pól w bazie danych.

Odpowiednio

@VAT odpowiada wartości pola VaN_RazemVAT

@Brutto odpowiada wartości pola VaN_RazemBrutto

Przy czym w konstrukcji schematu możliwe jest wykorzystanie obok "makr" również nazw pól w bazie.

Użycie nazwy pola w bazie skutkuje przy okazji tym, że nie jest ono uwzględniane w sprawdzaniu typów użytych makr.

Reasumując – można przygotować schemat:

Konto WnKonto MaKwota
221@Vat
332@KwotaDodat
201@Brutto (z podziałem na podmioty)
341@KwotaDodat - VaN_RazemBrutto - ROUND ( VaN_RazemVAT * ( @KwotaDodat - VaN_RazemBrutto ) / VaN_RazemBrutto, 2 )
342VaN_RazemVat + ROUND ( VaN_RazemVAT * ( @KwotaDodat - VaN_RazemBrutto ) / VaN_RazemBrutto, 2 )

Uwaga
Użycie funkcji ROUND jest tu wskazane - gdyby wynik podziału marży dał w końcówce równe 0.005 to efekcie oba księgowania (na konta 341 i 342) zostałyby zaokrąglone w górę i dostalibyśmy 1 grosz za dużo.

Patrz też pytanie: 28. Jak w schemacie dla Rejestrów VAT zdefiniować kwotę, która jest różnicą pomiędzy kwotą dodatkową i kwotą netto faktury?

27. Jak uzależnić księgowanie odpisów amortyzacyjnych od opisu na karcie danego środka trwałego?

Przypadek dotyczył sytuacji gdy klient księgował używając kategorii na konta zespołu „4” i chciał księgować na konta zespołu „5” w zależności od tego czy opis na karcie środka trwałego zawierał dany ciąg znaków. Na karcie środka trwałego są dwa pola opisowe, które można wykorzystać: Opis kategorii (czyli to pole po prawej stronie od Kategorii) i pole Opis. W schemacie można odwołać się do nich w następujący sposób:

Dla opisu kategorii na karcie środka w warunku należy wpisać np.:

'1'='1' AND EXISTS (Select * from CDN.Trwale where SrT_SrTID=SrH_SrTID and SrT_Kategoria LIKE '%550%')

Dla Opisu na karcie w warunku należy wpisać np.:

'1'='1' AND EXISTS (Select * From CDN.Trwale Where SrT_SrTID=SrH_SrTID And  SrT_Opis LIKE '%550%')

Warunki oznaczają, że podana kwota zostanie zaksięgowana jeżeli opis zawiera wyrażenie '550'.

Aby schemat zadziałał poprawnie w Opisie elementu schematu należy użyć makro, które odwołuje się do karty środka trwałego np. @ST_NrInwent (czyli Numer inwentarzowy).

28 Jak w schemacie dla Rejestrów VAT zdefiniować kwotę, która jest różnicą pomiędzy kwotą dodatkową i kwotą netto faktury?

Dodatkowo istnieje potrzeba wpisania warunku, że jeśli wynik będzie dodatni to kwota ma zostać zaksięgowana na określone konta.

Taki warunek można zawrzeć w definicji kwoty:

LpKonto Wn Konto Ma Kwota
1760340CASE WHEN @KwotaDodat > VaN_RazemNetto THEN @KwotaDodat - VaN_RazemNetto ELSE 0 END
2340760CASE WHEN @KwotaDodat < VaN_RazemNetto THEN VaN_RazemNetto - @KwotaDodat ELSE 0 END

Uwaga
Jeśli na liście kwot dodatkowych będzie wpisane więcej niż jedna kwota, to każda z nich będzie porównywana z wartością netto oddzielnie –
w szczególności, jeśli jedna z tych kwot będzie większa od netto, a druga mniejsza, to powstaną dwa zapisy.

Patrz też pytanie nr:  26. Jak w schemacie księgowym dla Rejestru VAT połączyć kwotę dodatkową
z kwotą brutto i VAT faktury tak aby schemat nie wykazywał błędu użycia makr różnych typów?

Jeżeli istnieje konieczność porównania sumy kwot dodatkowych z wartością netto, to można posłużyć się odpowiednią funkcją serwerową.

Przykład funkcji dla sumy kwot dodatkowych większej od netto:

create function cdn.KwotyDW (@VaNId Int)
returns Decimal(15,2)
as
begin
declare @wynik Decimal(15,2)
select @wynik = Sum(Kdd_Kwota) - VaN_RazemNetto
from CDN.KwotyDodatkowe join cdn.vatnag on Kdd_DokumentID=VaN_VaNID
where Kdd_DokumentID = @VaNId AND KDD_DokumentTyp=2 group by VaN_RazemNetto having
Sum(Kdd_Kwota) > VaN_RazemNetto
return IsNull(@wynik,0)
end

W schemacie, w polu Kwota należy wpisać:

'0' + cdn.KwotyDW(VaN_VaNID)

Dla sumy kwot dodatkowych mniejszych:

create function cdn.KwotyDM (@VaNId Int)
returns Decimal(15,2)
as
begin
declare @wynik Decimal(15,2)
select @wynik = VaN_RazemNetto - Sum(Kdd_Kwota)
from CDN.KwotyDodatkowe join cdn.vatnag on Kdd_DokumentID=VaN_VaNID  where  Kdd_DokumentID = @VaNId AND KDD_DokumentTyp=2 group by VaN_RazemNetto having  Sum(Kdd_Kwota) < VaN_RazemNetto
return IsNull(@wynik,0)
end

W schemacie, w polu Kwota należy wpisać:

'0' + cdn.KwotyDM(VaN_VaNID)

Warunku w ww. funkcjach nie uwzględniają sytuacji gdy suma kwot dodatkowych jest równa razem netto.

Patrz też pytanie nr: 29. Jak w schemacie księgowym uzyskać kwotę, która jest różnicą pomiędzy sumą kwot dodatkowych Wn minus suma kwot dodatkowych Ma, a wartością netto faktury?

29 Jak w schemacie księgowym uzyskać kwotę, która jest różnicą pomiędzy sumą kwot dodatkowych Wn minus suma kwot dodatkowych Ma, a wartością netto faktury?

W celu uzyskania sumy kwot dodatkowych Wn i Ma należy stworzyć funkcję serwerową. Poniżej przykład funkcji:

a) dla sumy kwot dodatkowych Wn

create function cdn.SumaKwotyDodWn (@VaNId Int) returns Decimal(15,2) as begin declare @wynik Decimal(15,2)
select @wynik = Sum(Kdd_Kwota)
from CDN.KwotyDodatkowe
where Kdd_DokumentID=@VaNId AND KDD_DokumentTyp=2 AND Kdd_Segment1<>''
return IsNull(@wynik,0) end

Kwotę w schemacie należałoby zapisać jako:
'0' + cdn.SumaKwotyDodWn(VaN_VaNID)
b) dla sumy kwot dodatkowych Ma
create function cdn.SumaKwotyDodMa (@VaNId Int) returns Decimal(15,2) as begin declare @wynik Decimal(15,2)
select @wynik = Sum(Kdd_Kwota)
from CDN.KwotyDodatkowe
where Kdd_DokumentID=@VaNId AND KDD_DokumentTyp=2 AND Kdd_Segment2<>''
return IsNull(@wynik,0) end

Kwotę w schemacie należałoby zapisać jako:
'0' + cdn.SumaKwotyDodMa(VaN_VaNID)
Aby uzyskać następującą kwotę: suma kwot dodatkowych Wn minus suma kwot dodatkowych Ma minus razem netto, jako kwotę w schemacie można wpisać:
'0' + (cdn.SumaKwotyDodWn(VaN_VaNID) - cdn.SumaKwotyDodMa(VaN_VaNID)) - VaN_RazemNetto
Patrz też pytanie nr: 28. Jak w schemacie dla Rejestrów VAT zdefiniować kwotę, która jest różnicą pomiędzy kwotą dodatkową i kwotą netto faktury?

30 Jak zaksięgować fakturę (z rejestru VAT lub z modułu FA) w zależności od form płatności przypisanych na zakładce Kontrahent faktury w Rejestrze VAT lub zakładce Płatności na fakturze w module FA)?

Chodzi o przypadek, gdy kwota płatności jest rozbijana na kilka rat lub będzie płacona kilkoma formami płatności np. część gotówką, a pozostała część przelewem.

Należy zdefiniować funkcję serwerową. Przykład takiej funkcji (w przypadku księgowania z poziomu rejestrów VAT) poniżej:

if exists (select * from sysobjects where name = 'userKwotaFormyPlatnosci' and xtype = 'FN')
drop function CDN.userKwotaFormyPlatnosci
GO
create function CDN.userKwotaFormyPlatnosci (@vanid int, @nazwa varchar(20))
returns numeric (15,2)
as
begin
declare @wynik numeric (15,2)
if exists (select * from cdn.vatnag where van_vanid = @vanid and van_trnid is not null)
--- to jest przypadek zapisu zaksięgowanego z listy faktur:
select @wynik = isnull(sum(bzd_kwotasys),0)
from cdn.bnkzdarzenia
join cdn.formyplatnosci on bzd_fplid = fpl_fplid
join cdn.tranag on bzd_dokumenttyp = 1 and bzd_dokumentid = trn_trnid
where fpl_nazwa = @nazwa
and trn_vanid = @vanid
else
--- to jest przypadek zapisu "ręcznego":
select @wynik = isnull(sum(bzd_kwotasys),0)
from cdn.bnkzdarzenia
join cdn.formyplatnosci on bzd_fplid = fpl_fplid
where fpl_nazwa = @nazwa
and bzd_dokumenttyp = 2 and bzd_dokumentid = @vanid
return @wynik
end
GO

Schemat wyglądałby wówczas np. tak
Konto Kwota
201 '0' + CDN.userKwotaFormyPlatnosci (VaN_VaNId, 'PRZELEW')
100 '0' + CDN.userKwotaFormyPlatnosci (VaN_VaNId, 'GOTÓWKA')
W tym wypadku funkcji używamy w kwocie, a nie w warunku.
W przypadku księgowania dokumentów z poziomu listy faktur w module Handel/Faktury funkcja wygląda następująco:
create function CDN.userKwotaFormyPlatnosciFA (@trnid int, @nazwa varchar(20))
returns numeric (15,2)
as
begin
declare @wynik numeric (15,2)
select @wynik = isnull(sum(bzd_kwotasys),0)
from cdn.bnkzdarzenia
join cdn.formyplatnosci on bzd_fplid = fpl_fplid
where fpl_nazwa = @nazwa
and bzd_dokumenttyp = 1 and bzd_dokumentid = @trnid
return @wynik
end

Przykładowe odwołanie do funkcji w polu Kwota schematu:
'0' + CDN.userKwotaFormyPlatnosciFA (TrN_TrNId, 'PRZELEW')

31. W Rejestrze VAT wybieram na dokumencie kategorię szczegółową ale chciałbym rozksięgować dokument na konto przypisane do kategorii ogólnej, czy jest to możliwe?

Jest to możliwe. Należy stworzyć funkcję serwerową, która odczyta segment konta z kategorii ogólnej np. mamy kategorię ogólną ENERGIA, która ma jako segment Wn konta wybrane konto 402 i mamy kategorie szczegółowe do niej:

Kategoria ogólnaKategoria szczegółowaSegment Konto Wn
ENERGIA402
ENERGIA_PRODUKCJA501-02
ENERGIA_HANDEL505-02
ENERGIA_ZARZĄD510-02

Na dokumencie wybieramy kategorie szczegółowe pozycji, za pomocą których będziemy dokonywać księgowań na konta zespołu „5”, natomiast na kategorii ogólnej mamy informację o koncie zespołu „4”. Segment konta Wn z kategorii pozycji szczegółowej, można pobrać za pomocą standardowo dostępnego makra: @KatElemKontoWn. Segment konta z kategorii ogólnej pozycji można poprać za pomocą funkcji serwerowej. Poniżej przykład takiej funkcji:
Create Function CDN.A (@VaNID INT)
Returns VarChar(50)
As
Begin
Declare @Wynik VarChar(50)
Select @Wynik = KatOgol.Kat_KontoSegmentWN
From CDN.VatTab
Join CDN.VatNag On VaT_VaNID=VaN_VaNID
Join CDN.Kategorie KatSzczeg On VaT_KatId = KatSzczeg.Kat_KatId
Join CDN.Kategorie KatOgol On KatSzczeg.Kat_KodOgolny = KatOgol.Kat_KodSzczegol
Where VaN_VaNId = @VaNId
Set @Wynik = IsNull(@Wynik,'')
Return @Wynik
End

W polu Konto Wn należy wpisać:
SUBSTRING(@KatElemKontoWn,1,0) +CDN.A(VaN_VaNID)
Przykład funkcji pobierającej konto segment Wn z kategorii ogólnej pobieranej na podstawie kategorii szczegółowej wybranej w nagłówku dokumentu:
Create Function CDN.B (@VaNID INT)
Returns VarChar(50)
As
Begin
Declare @Wynik VarChar(50)
Select @Wynik = KatOgol.Kat_KontoSegmentWN
From CDN.VatNag
Join CDN.Kategorie KatSzczeg On VaN_KatId = KatSzczeg.Kat_KatId
Join CDN.Kategorie KatOgol On KatSzczeg.Kat_KodOgolny = KatOgol.Kat_KodSzczegol
Where VaN_VaNId = @VaNId
Set @Wynik = IsNull(@Wynik,'')
Return @Wynik
End

W polu Konto Wn należy wpisać:
SUBSTRING(@KatNagKontoWn,1,0) +CDN.B(VaN_VaNID)
Konstrukcja poprzednich funkcji zakłada, że na dokumencie jest tylko jedna pozycja, bądź w przypadku kilku pozycji – że wszystkie pozycje zawierają kategorie szczegółowe należące do jednej kategorii ogólnej. W przypadku kiedy na księgowanym dokumencie znajduje się więcej niż jedna pozycja z różnymi kategoriami ogólnymi, należy zastosować poniższą, bardziej rozbudowaną funkcję:
Create Function CDN.AB (@VaNID INT, @KategoriaElem varchar(20))
Returns VarChar(50)
As
Begin
Declare @Wynik VarChar(50)
Select @Wynik = KatOgol.Kat_KontoSegmentWN
From CDN.VatTab
Join CDN.VatNag On VaT_VaNID=VaN_VaNID
Join CDN.Kategorie KatSzczeg On VaT_KatId = KatSzczeg.Kat_KatId
Join CDN.Kategorie KatOgol On KatSzczeg.Kat_KodOgolny = KatOgol.Kat_KodSzczegol
Where VaN_VaNId = @VaNId and KatSzczeg.Kat_KodSzczegol = @KategoriaElem
Set @Wynik = IsNull(@Wynik,'')
Return @Wynik
End

Odwołanie do funkcji w pozycji Konto Wn schematu:
SUBSTRING(@KatElemKontoWn,1,0) +CDN.AB(VaN_VaNID, Kat_KodSzczegol)

32. Przekształcam Paragon na kontrahenta “nieokreślonego” do Faktury na określonego kontrahenta. Jak zaksięgować KP do paragonu, na którym jest kontrahent nieokreślony, na kontrahenta, który jest na Fakturze?

W tym przypadku również można posłużyć się funkcją serwerową, która pobierze kod kontrahenta z Faktury i zbuduje na tej podstawie odpowiednią analitykę konta np. 201. Poniżej przykład funkcji, która pobierze kod kontrahenta z faktury:
Create Function CDN.C (@BZpID INT)
Returns VarChar(20)
As
Begin
Declare @Kontr VarChar(20)
Select @Kontr = Knt_Kod
From cdn.BnkRozRelacje
Join CDN.BnkZdarzenia on BRR_DDokID=BZd_BZdID
Join CDN.BnkZapisy on BZp_BZpID=BRR_ZDokID
Join cdn.tranag A on BZd_DokumentID=A.TrN_TrNID
Join cdn.TraNagRelacje on A.TrN_TrNID=TrR_FaId
Join cdn.tranag B on TrR_TrNId=B.TrN_TrNID
Join cdn.kontrahenci on B.TrN_PodID=Knt_KntId
Where BRR_ZDokTyp=2 AND BZd_DokumentTyp=1 AND BRR_DDokTyp=1 AND B.TrN_PodmiotTyp=1 AND TrR_TrNTyp=302 AND BZp_BZpID=@BZpID
Return @Kontr
End

W schemacie księgowym dla raportu kasowo/bankowego, jako konto należy wpisać:
SUBSTRING(@KontoRach,1,0) +'201-'+CDN.C(BZp_BZpID)
Konto musi istnieć już w planie kont (czyli najpierw sugerujemy księgowanie faktury).
Do warunku takiej pozycji schematu można wstawić wyrażenie, które sprawdzi czy dany dokument kasowy jest powiązany z fakturą, która została przekształcona z paragonu.
'1'='1' AND EXISTS (select * From cdn.BnkRozRelacje join CDN.BnkZdarzenia on BRR_DDokID=BZd_BZdID join cdn.tranag on BZd_DokumentID=TrN_FaId where BRR_ZDokTyp=2 AND BZd_DokumentTyp=1 AND BRR_DDokTyp=1 AND TrN_PodmiotTyp=1 AND BZp_BZpID=BRR_ZDokID and TrN_TypDokumentu=302)

33. Jak zaksięgować fakturę na konto Odbiorcy, a nie Nabywcy (konta odbiorców tworzone są wg akronimu)?

W tym przypadku również można posłużyć się funkcją serwerową, która pobierze kod kontrahenta (Odbiorcy) z Faktury i zbuduje na tej podstawie odpowiednią analitykę konta np. 201. Dodatkowo funkcja zamienia w akronimie kontrahenta znaki spacji, kropki i myślnika na znak podkreślenia ponieważ konta w planie kont nie mogą zawierać takich znaków. Poniżej przykład funkcji, która pobierze kod Odbiorcy z faktury:

Create Function CDN.G (@TrnId Int)
Returns VarChar(20)
As
Begin
Declare @Kontr VarChar(20)
Select @Kontr = REPLACE(REPLACE(REPLACE(Knt_Kod, ' ', '_'), '.', '_'), '-', '_')
FROM CDN.TraNag
Join cdn.kontrahenci on TrN_OdbID=Knt_KntId
AND TrN_OdbiorcaTyp=1 AND TrN_TrNID=@TrnId
Return @Kontr
End

W schemacie dla księgowania Faktur z modułu Faktury należy wpisać np.:
LEFT(@Opis,0)+'201-'+CDN.G(TrN_TrNID)
Konto musi istnieć już w planie kont.
Przykład dla przypadku gdy faktury są księgowane z Rejestru VAT:
Create Function CDN.B (@VaNID INT)
Returns VarChar(20)
As
Begin
Declare @Kontr VarChar(20)
Select @Kontr = REPLACE(REPLACE(REPLACE(Knt_Kod, ' ', '_'), '.', '_'), '-', '_')
From cdn.TraNag
Join CDN.VatNag on VaN_VaNID=TrN_VaNId
Join cdn.kontrahenci on TrN_OdbID=Knt_KntId
AND TrN_OdbiorcaTyp=1 AND VaN_VaNId=@VaNID
Return @Kontr
End

W schemacie dla księgowania Faktur z Rejestru VAT należy wpisać np.:
LEFT(@Opis,0)+'201-'+CDN.B(VaN_VaNId)

34. Jak automatycznie zaksięgować dokument na konto kontrahenta gdzie pierwsza analityka to kod kontrahenta, a druga analityka to segment konta pobrany z kategorii dokumentu?

Klient chce rozksięgować dokument na konto 201 wg wzorca: 201-kontrahent-kategoria. Nie da się w takiej sytuacji zastosować podziału na słowniki kontrahentów ponieważ po analityce kontrahenta ma być jeszcze jedna analityka. W takiej sytuacji można posłużyć się makrem @KodPodmiotu, które jest obecne m.in. w schematach dla Rejestrów VAT i Ewidencji dodatkowych. Za pomocą ww. makra pobierzemy kod kontrahenta, natomiast za pomocą dostępnych standardowo makr dotyczących segmentów kont na kategoriach, pobierzemy analitykę przypisaną do kategorii. W polu Konto Wn lub Konto Ma wystarczy więc wpisać np. (dla ewidencji dodatkowej):

'201-'+@KodPodmiotu+'-'+@KontoKatWn

Konta w planie kont muszą istnieć przed księgowaniem. Ewentualnie musi istnieć konto syntetyczne – jeżeli będzie zaznaczony parametr o automatycznym zakładaniu kont niesłownikowych – konta się założą. Konta będą kontami zwykłymi – nie słownikowymi.

35. Jak skonstruować schemat księgowania deklaracji VAT-7 w rozbiciu na poszczególne stawki VAT?

W schemacie księgowym można posłużyć się istniejącą funkcją, która pobiera dane z poszczególnych pól deklaracji (z tabeli CDN.DeklElem):

CDN.KwotaKsiegDekl (DkN_DkNId, DkE_Numer)

W funkcji należy podać właściwą wartość dla pola DkE_Numer  i tak np. dla wzoru 18 deklaracji VAT-7 będzie to wartość:

10500 - Dostawa towarów oraz świadczenie usług na terytorium kraju, zwolnione od podatku (poz. 10 na VAT-7)

10550 - Dostawa towarów oraz świadczenie usług, poza terytorium kraju (poz. 11 na VAT-7)

10510 – w tym świadczenie usług, o których mowa w art.100 ust.1 pkt 4 ustawy (poz.12 na VAT-7)

10700 – Dost. towarów oraz świadczenie usług na terytorium kraju, opodatk. stawką 0% (poz. 13 na VAT-7)

10705 – w tym dostawa towarów, o której mowa w art.129 ustawy (poz.14 na VAT-7)

10710 - Dostawa towarów oraz świadczenie usług na terytorium kraju, opodatkowane stawką odpowiednio 3% albo 5% - netto

10720 - Dostawa towarów oraz świadczenie usług na terytorium kraju, opodatkowane stawką odpowiednio 3% albo 5% - VAT

11400 - Dostawa towarów oraz świadczenie usług na terytorium kraju, opodatkowane stawką odpowiednio 7% albo 8% - netto

11500 - Dostawa towarów oraz świadczenie usług na terytorium kraju, opodatkowane stawką odpowiednio 7% albo 8% - VAT

11600 - Dostawa towarów oraz świadczenie usług na terytorium kraju, opodatkowane stawką odpowiednio 22% albo 23% - netto

11700 - Dostawa towarów oraz świadczenie usług na terytorium kraju, opodatkowane stawką odpowiednio 22% albo 23% - VAT

11710 – Wewnątrzwspólnotowa dostawa towarów

10600 – Eksport towarów

11730 – Wewnątrzwspólnotowe nabycie towarów – netto

11740 – Wewnątrzwspólnotowe nabycie towarów – VAT

11742 – Import towarów, podlegający rozliczeniu zgodnie z art. 33a ustawy – netto

11744 - Import towarów, podlegający rozliczeniu zgodnie z art. 33a ustawy – VAT

11750 – Import usług – netto

11760 – Import usług – VAT

11762 – w tym nabycie od podatników podatku od wartości dodanej usług, do których stosuje się art. 28b ustawy
– netto

11764 - w tym nabycie od podatników podatku od wartości dodanej usług, do których stosuje się art. 28b ustawy
– VAT

11770 – Dostawa towarów oraz świadczenie usług, dla których podatnikiem jest nabywca  - art. 17 ust. 1 pkt 7 lub 8 (pole 31 deklaracji) – kwota netto

11780 – Dostawa towarów, dla których podatnikiem jest nabywca  - art. 17 ust. 1 pkt 5 (pole 32 deklaracji) – kwota netto

11781 – Dostawa towarów, dla których podatnikiem jest nabywca  - art. 17 ust. 1 pkt 5 (pole 33 deklaracji) – kwota VAT

11791 – Dostawa towarów oraz świadczenie usług, dla których podatnikiem jest nabywca  - art. 17 ust. 1 pkt 7 lub 8 (pole 34 deklaracji) – kwota netto

11792 – Dostawa towarów oraz świadczenie usług, dla których podatnikiem jest nabywca  - art. 17 ust. 1 pkt 7 lub 8 (pole 35 deklaracji) – kwota VAT

12000 – Kwota podatku należnego od towarów i usług objętych spisem z natury, o którym mowa w art.14 ust.5 ustawy

12005 - Zwrot odliczonej lub zwróconej kwoty wydatkowanej na zakup kas rejestrujących, o którym mowa w art.111 ust.6 ustawy

12010 – Kwota podatku należnego od wewnątrzwspólnotowego nabycia środków transportu

12011 - Kwota podatku od wewnątrzwspólnotowego nabycia paliw silnikowych

Tak więc aby zaksięgować kwotę VAT w stawce 22% albo 23% (pole 20. na deklaracji VAT-7) należy wpisać w polu Kwota elementu schematu księgowego np. takie wyrażenie:

@Vat7Nalezny - @Vat7Nalezny + CDN.KwotaKsiegDekl (DkN_DkNId, 11700)

36. Jak zaksięgować różnicę pomiędzy obrotami Ma konta VAT-u a VAT-em należnym z deklaracji VAT-7?

Można to zrobić definiując funkcję, która będzie pobierała obroty Ma odpowiedniego konta za okres, za który przeliczana jest deklaracja.
Create Function CDN.ObrotyMa(@Konto VarChar(50), @RokMies Int)
Returns Decimal(15,2)
As
Begin
Declare @Wynik Decimal(15,2), @OObId Int, @AccId Int
-- Określamy Id bieżacego okresu obarchunkowego
Select @OObId = Case When IsNumeric(Fir_Wartosc)=1 Then Cast (Fir_Wartosc As Int) Else Null End From CDN.Firma Where Fir_Numer=244
-- Odczytujemy interesujące nas konto
Select @AccId = Acc_AccId From CDN.Konta Where Acc_OObId = @OObId And Acc_Numer=@Konto
-- Odczytujemy obroty Ma z uwzględnieniem bufora
Select @Wynik = Obr_ObrotyMaBufor From CDN.Obroty Where Obr_AccId = @AccId And Obr_RokMies = @RokMies And Obr_Typ = 0
Return IsNull(@Wynik, 0)
End

i wykorzystanie w schemacie:
CDN.ObrotyMa('221-2', DkN_RokMiesiac) - @Vat7Nalezny

37. Jak w warunku schematu dla WZ odwołać się do symbolu/serii w numerze faktury do której zostało wystawione WZ?

Zarówno dokument Wydania zewnętrznego (WZ) jak i faktura z tym dokumentem powiązana, są zapisane w tej samej tabeli CDN.TraNag. W tej sytuacji warunek można zbudować następująco:

'1'='1' And Exists (Select * From CDN.TraNag FA Where CDN.TraNag.TrN_FaId = FA.TrN_TrNId And Fa.TrN_NumerPelny Like 'FA%SERIA')

Patrz też pytania nr:

11. Jak uzależnić księgowanie dokumentów z ewidencji dodatkowej na poszczególne konta od symbolu użytego w schemacie numeracji?

20. Jak zaksięgować fakturę zakupu, żeby w schemacie księgowania w warunku zastosować fragment numeru dokumentu np MAGAZYN i SERIA z numeru FZ/99/MAGAZYN/SERIA?

38. Jak w opisie schematu do księgowania dokumentu WZ umieścić numer faktury, z którą powiązane jest WZ?

Należy w tym celu skonstruować funkcję serwerową, która odczyta numer faktury. Funkcja może wyglądać tak:
Create Function CDN.NumerFa (@TrNId Int)
Returns VarChar(30)
As
Begin
Declare @Numer VarChar(30)
Select Top 1 @Numer = TrN_NumerPelny From CDN.TraNag Where TrN_TrNId = @TrNId
Return IsNull(@Numer, '')
End

W opisie schematu księgowań należy podać jakiekolwiek istniejące makro razem z odwołaniem do ww. funkcji, np. w ten sposób:
@NumerPelny + ' ' + CDN.NumerFa (TrN_FaId)

39. Jak przenieść kwotę wpisaną w polu Opis na fakturze do pozycji schematu księgowego?

W Opisie faktury wprowadzonej na listę faktur sprzedaży w module Faktury wprowadzono kwotę, która powinna zostać zaksięgowana na konta. Ponieważ pole Opis nie jest polem numerycznym – należy je do takiego przekonwertować i dodatkowo księgować tylko wtedy gdy w polu Opis faktycznie występuje liczba.
W pozycji schematu, w polu Kwota można wpisać następujące wyrażenie:
@PlatRazem - @PlatRazem + CASE WHEN ISNUMERIC(TrN_Opis)=1 THEN CAST (TrN_Opis AS DECIMAL(15,2)) ELSE 0 END
Dla faktur księgowanych z Rejestru VAT można użyć pola opisu kategorii:
@PlatRazem - @PlatRazem + CASE WHEN ISNUMERIC(VaN_Kategoria )=1 THEN CAST (VaN_Kategoria AS DECIMAL(15,2)) ELSE 0 END
Makra istniejące nie mogą odwoływać się do elementów faktury – muszą odwoływać się do nagłówka (tak jak np. makro @PlatRazem). Jeżeli zostanie użyte makro odwołujące się do elementów np. @PozNetto (dla modułu FA) lub @Netto (dla rejestru VAT) – to księgowana kwota będzie mnożona przez ilość pozycji na fakturze.

40. Jak zaksięgować kwotę „do wypłaty” z listy płac
w zależności od rodzaju umowy zlecenia/dzieło i formy płatności?

Od wersji 8.0 systemu zmienił się sposób zapisywania form płatności dla pracowników. Są one zapisywane w osobnej tabeli: CDN.SchematPlatnosci. W związku z czym, o ile w poprzednich wersjach działał warunek:

Exists (Select * From CDN.PracEtaty join CDN.FormyPlatnosci on PRE_FplId=FPl_FPlId Where WPL_PraId = PRE_PraId AND WPL_DataDok Between PRE_DataOd And PRE_DataDo AND FPl_Typ=1) AND @TypWyplaty ='dzieło 20%'
Od wersji 8.0 warunek powinien wyglądać następująco:
Exists (Select * From CDN.PracEtaty join cdn.SchematPlatnosci on PRE_PreId = SPL_PodmiotId join CDN.FormyPlatnosci on SPL_FplId=FPl_FPlId Where SPL_PodmiotTyp = 3 and WPL_PraId = PRE_PraId AND WPL_DataDok Between PRE_DataOd And PRE_DataDo AND FPl_Typ=1) AND @TypWyplaty ='dzieło 20%'
FPl_Typ=1 oznacza formę płatności typu „gotówka”.

41. Jak wyksięgować kwotę dotychczasowych zaliczek
z faktury finalnej księgowanej przez Rejestr sprzedaży VAT?

Najprościej księgować faktury zaliczkowe przez moduł Faktury ponieważ w schematach do Faktur sprzedaży są dodane odpowiednie makra.
Jeżeli faktury zaliczkowe i faktura finalna są wystawiane w module Faktury, a następnie przenoszone do Rejestru VAT to kwotę dotychczasowych zaliczek z faktury finalnej można odczytać stosując istniejącą w programie funkcję i w polu Kwota pozycji schematu wpisać:
Dla kwoty zaliczki netto:
'0'+CDN.TraKwoty(VaN_TrNId,'ZN',Null,Null)
Dla kwoty zaliczki brutto:
'0'+CDN.TraKwoty(VaN_TrNId,'ZB',Null,Null)
Aby sprawdzić czy faktura jest zaliczkowa można użyć następującego warunku:
'1'='1' AND exists (select * from CDN.TraNag where TrN_VaNId = VaN_VaNID AND TrN_Rodzaj In (302200, 302202))
Warunek dla faktury finalnej:
'1'='1' AND Exists (Select * From CDN.TraNag join CDN.TraVat on TrN_TrNID = TrV_TrNID Where TrN_VaNId = VaN_VaNID AND TrV_TrNId=TrN_TrNId And TrV_Typ=1)
Warunek dla faktury zwykłej:
'1'='1' AND Not Exists (Select * From CDN.TraNag join CDN.TraVat on TrN_TrNID = TrV_TrNID Where TrN_VaNId = VaN_VaNID AND TrV_TrNId=TrN_TrNId And TrV_Typ=1) AND Not Exists (select * from CDN.TraNag where TrN_VaNId = VaN_VaNID AND TrN_Rodzaj In (302200, 302202))

42. Jak przy księgowaniu raportu kasowego rozróżnić czy konto przeciwstawne jest walutowe (i księgować
w walucie), a jak że jest złotówkowe (i księgować tylko
w złotówkach)?

Warunek dla pozycji schematu wykorzystującej konto przeciwstawne gdy jest zaznaczone księgowanie walutowe:
'1'='1' and exists (select * from CDN.Konta where Acc_Numer like @KontoPrzeciw + '%' and Acc_Waluta<>'')
Warunek dla pozycji schematu wykorzystującej konto przeciwstawne gdy nie jest zaznaczone księgowanie walutowe:
'1'='1' and not exists (select * from CDN.Konta where Acc_Numer like @KontoPrzeciw + '%' and Acc_Waluta<>'')
W Biuletynie technicznym nr 22 został przedstawiony przykład schematu księgowego wykorzystujący ww. warunki.

43. Jak automatycznie księgować na konta zespołu “4” na podstawie konta zespołu „5” wpisanego w kwotach dodatkowych?

Mamy w planie kont np. konta  501-1-1-401-01 i np. 501-1-1-402-01. Odpowiednikiem tych kont w zespole „4” są 400-401-01 i 400-402-01. W rejestrze VAT wprowadzamy na fakturze w Kwotach dodatkowych konta zespołu „5”. Chcemy żeby „4” podstawiała się automatycznie na podstawie „5”.

W schemacie księgowym, jako definicję konta można wpisać:

'400-'+SUBSTRING(@KontoDodatWn,9,6)

Jeżeli w kwocie dodatkowej wybierzemy konto 501-1-1-401-01, to po zaksięgowaniu otrzymamy konto 400-401-01.

44. Jak w schemacie do księgowania faktur zakupu z Rejestrów VAT rozróżnić zaliczkobiorcę, który jest pracownikiem od zaliczkobiorcy, który jest wspólnikiem?

W warunku schematu dotyczącym księgowania na konto pracowników należy wpisać:

'1'='1' AND exists (select * from CDN.PracEtaty where VaN_PodZalId=Pre_PraID AND VaN_PodmiotZalTyp=3 AND PRE_TypPracownika=0)

W warunku schematu dotyczącym księgowania na konto wspólnika należy wpisać:

'1'='1' AND exists (select * from CDN.PracEtaty where VaN_PodZalId=Pre_PraID AND VaN_PodmiotZalTyp=3 AND PRE_TypPracownika=1)

45. Jak należy wpisać warunek aby zaksięgować fakturę
z rejestru VAT na wybrane konto pod warunkiem, że zaliczkobiorcą jest pracownik o akronimie ‘KOWALSKI’?

W warunku można wpisać:

'1'='1' AND exists (select * from CDN.PracEtaty where VaN_PodZalId=Pre_PraID AND VaN_PodmiotZalTyp=3 AND PRE_Kod='KOWALSKI')

46. Jak w opisie pozycji schematu dla rejestrów VAT wstawić kod pracownika, który jest zaliczkobiorcą?

Jeżeli pozycja schematu zawiera konto słownikowe pracownika i podział na słowniki: Zaliczkobiorcy to w opisie można wstawić następujące wyrażenie:

''+(select top 1 PRE_Kod from CDN.PracEtaty where Pre_PraID = VaN_PodZalId and VaN_PodmiotZalTyp=3)

Jeżeli daną pozycją schematu księgujemy kwotę na konto kontrahenta (czyli jest podział na słowniki: Podmioty) a w opisie chcemy mieć informację o kodzie zaliczkobiorcy, należy użyć funkcji:

Create Function CDN.MojeFunkcje_KodZaliczkobiorcy (@VaNId Int) Returns VarChar(31) As  Begin
Declare @Kod VarChar(50)
Set @Kod = IsNull((select top 1 PRE_Kod from CDN.PracEtaty join cdn.vatnag on Pre_PraID = VaN_PodZalId and VaN_PodmiotZalTyp=3 where Van_Vanid=@VaNId), '')
Return @Kod
End

W definicji Opisu do danej pozycji schematu księgowego wpisujemy:

@Dokument + ' ' + CDN.MojeFunkcje_KodZaliczkobiorcy (VaN_VaNId)

47. Jak opisie pozycji dekretu umieścić informację o Imieniu i nazwisku zaliczkobiorcy (pracownika) wybranego na fakturze zakupu w rejestrze VAT?

W schemacie księgowym typu Rejestr zakupów VAT w polu Opis należy wkleić:
@TypZaliczkobiorcy + ' ' + CDN.ImieNazwisko (VaN_PodZalId,VaN_PodmiotZalTyp)
Operator z uprawnieniami administratora może uruchomić skrypt w menu Narzędzia/ Serwer bazy danych/ Wykonywanie skryptów.
Create Function CDN.ImieNazwisko (@VaN_PodZalId Int,@VaN_PodmiotZalTyp Int)
Returns VarChar(30)
As
Begin
Declare @ImieNazwisko VarChar(30)
Select Top 1 @ImieNazwisko = Pre_Imie1+' '+Pre_Nazwisko From cdn.pracetaty
Where @VaN_PodZalId =Pre_PraID AND @VaN_PodmiotZalTyp=3 AND PRE_TypPracownika=0
Return IsNull(@ImieNazwisko, '')
End

48. Jak ułożyć warunek dla księgowania zaliczki na PIT-36 aby w miesiącu listopadzie zawsze księgowała się podwójna zaliczka?

Innymi słowy musimy w warunku „wyciągnąć” z pola DkN_RokMiesiac tylko miesiąc. Pole zapisuje rok i miesiąc w postaci 4 cyfr dla roku i 2 cyfr dla miesiąca np. ‘201811’.
W warunku trzeba „wyciąć” pierwsze 4 znaki i użyć tylko dwóch ostatnich. Możemy to zrobić tak:
SUBSTRING(DkN_RokMiesiac,5,2)
Musimy jednak skonwertować liczbę do tekstu poprzez STR i dodatkowo usunąć zbędne spacje poprzez LTRIM. Cały warunek dla księgowania deklaracji, która pochodzi z miesiąca listopada będzie wyglądał tak:
'1'='1' AND SUBSTRING(LTRIM(STR(DkN_RokMiesiac)),5,2)=11

49. Czy w schemacie do księgowania dokumentów przesunięć MM można wykorzystać symbol magazynu do identyfikacji konta magazynu źródłowego
i docelowego?

Chodzi o to aby przy dużej ilości magazynów nie tworzyć kilkudziesięciu pozycji schematu odpowiadających wszystkim przesunięciom międzymagazynowym. Zakładamy więc, że analitykę magazynu pobieramy z symbolu magazynu. Na przykład, w polu Symbol, na formatce magazynu mamy MAG1, a konto ma postać 311-MAG1. Wtedy dla magazynu źródłowego definicja konta miałaby postać: '311-'+@Magazyn a dla magazynu docelowego: '311-'+@MagDocelowy.

50. Jak wykorzystać atrybuty do przypisania odpowiedniego konta zespołu „5” na karcie środka trwałego?

W Słownikach/ Atrybuty można zdefiniować atrybut o nazwie np. „KONTO_5”, typie „lista”, i pozycjach listy odpowiadających wszystkim kontom zespołu 5, na które jest księgowana amortyzacja np. 501-01, 502-01, 503-01 itp. Na karcie środka trwałego dodajemy atrybut „KONTO_5” i wybieramy wartość odpowiadającą „piątce” np. 501-01.

W pozycji schematu księgowego odpowiadającej za księgowanie na konta zespołu „5”, w polu Konto Wn wprowadzamy definicję:

@ST_Atrybut('KONTO_5')

W makrach dostępnych pod Kontem Wn i Kontem Ma nie ma pozycji „Wartość atrybutu” więc aby wkleić odpowiednie wyrażenie można skorzystać z pola „Opis” wybierając odpowiedni atrybut, kopiując i wklejając do „Konto Wn/Konto Ma”.

51. Jak można użyć, w schemacie księgowym, atrybutu przypiętego do pozycji faktury?

Księgując fakturę z modułu Handel są dwie możliwości:
1. Ponieważ atrybuty są zapisywane w tabeli CDN.TraElem w polach: TrE_Atr1_Kod, TrE_Atr2_Kod.... TrE_Atr5_Kod i wartości odpowiednio w polach TrE_Atr1_Wartosc do TrE_Atr5_Wartosc to można się odwołać bezpośrednio do tych pól. Założenie jednak będzie wtedy takie (aby nie komplikować warunku), że atrybut, który nas interesuje jest zawsze np. pierwszy czyli zapisywany w polach TrE_Atr1_Kod i TrE_Atr1_Wartosc.
Aby zaksięgować kwotę netto pozycji, pod warunkiem, że pierwszy atrybut to ATR1 i jego wartość to WART1 można użyć kwoty @PozNetto a w warunku:
'1'='1' AND TrE_Atr1_kod='ATR1' AND TrE_Atr1_Wartosc='WART1'
2. Jeżeli atrybut, który nas interesuje może być zapisany na różnych miejscach to aby nie tworzyć bardzo złożonego warunku można użyć funkcji, której jako parametry podamy kod atrybutu i wartość. Funkcja będzie użyta w kwocie schematu np.
Create Function CDN.userKwotaElementuZAtrybutem (@Treid int, @KodAtrybutu varchar(255), @WartoscAtrybutu varchar(255), @Typ varchar(10))
Returns Decimal (15,2)
As
Begin
Declare @Wynik Decimal(15,2)
if exists (
select * from CDN.TraElem
where TrE_TrEID = @TrEId
and ( TrE_Atr1_Kod = @KodAtrybutu and TrE_Atr1_Wartosc=@WartoscAtrybutu
or TrE_Atr2_Kod = @KodAtrybutu and TrE_Atr2_Wartosc=@WartoscAtrybutu
or TrE_Atr3_Kod = @KodAtrybutu and TrE_Atr3_Wartosc=@WartoscAtrybutu
or TrE_Atr4_Kod = @KodAtrybutu and TrE_Atr4_Wartosc=@WartoscAtrybutu
or TrE_Atr5_Kod = @KodAtrybutu and TrE_Atr5_Wartosc=@WartoscAtrybutu
) )
begin
set @Wynik = CDN.TraKwoty( @TrEId, @Typ, Null, Null)
end
Return IsNull( @Wynik, 0 )
End

W definicji kwoty wpisujemy:
@PozNetto - @PozNetto + CDN.userKwotaElementuZAtrybutem(TrE_TrEId, 'ATRYBUT', 'WARTOŚĆ', 'PN')
'PN' - oznacza kwotę netto. 'PB' oznaczałoby kwotę brutto pozycji.

52.Jak wykorzystać w schemacie księgowym, w definicji konta, wartość atrybutu przypiętego do karty kontrahenta?

Na karcie kontrahenta jest m.in. przypięty atrybut o nazwie KONTO, którego wartość odpowiada symbolowi konta, które ma być użyte do księgowania faktury z Rejestru VAT. Chcemy tak zdefiniować w pozycji schematu Konto Wn aby podstawiała się do niej wartość tego atrybutu przypięta do kontrahenta wybranego na fakturze.
W takiej sytuacji trzeba skorzystać z funkcji serwerowej. Dla faktury księgowanej z Rejestru VAT funkcja może wyglądać następująco:
Create Function CDN.A (@VaNId int, @AtrybutKod varchar(255))
Returns varchar(255)
As
Begin
Declare @Wynik VarChar(255)
Set @Wynik = ''
select @Wynik = KnA_WartoscTxt
from
CDN.KntAtrybuty
join CDN.DefAtrybuty on (KnA_DeAId = DeA_DeAId)
join CDN.PodmiotyView on (KnA_PodmiotId = Pod_PodId)
join CDN.VatNag on (VaN_PodID = Pod_PodId)
where
VaN_VaNID=@VaNId and DeA_Kod=@AtrybutKod AND KnA_PodmiotTyp = Pod_PodmiotTyp AND Pod_PodmiotTyp = VaN_PodmiotTyp
Return IsNull(@Wynik, '')
End

W definicji Konta Wn wpisujemy:
LEFT(@Opis,0)+CDN.A(Van_VaNID,'KONTO')
Ponieważ w definicji konta w pozycji schematu jest ograniczona liczba znaków, jeżeli odwoływać się do atrybutów w ten sposób, należy nadawać im krótkie nazwy.
Dla faktury księgowanej z modułu Handel:
Create Function CDN.B (@TrNId int, @AtrybutKod varchar(255))
Returns varchar(255)
As
Begin
Declare @Wynik VarChar(255)
Set @Wynik = ''
select @Wynik = KnA_WartoscTxt
from
CDN.KntAtrybuty
join CDN.DefAtrybuty on (KnA_DeAId = DeA_DeAId )
join CDN.PodmiotyView on KnA_PodmiotId = Pod_PodId
join CDN.TraNag on Pod_PodId = TrN_PodID
where
TrN_TrNID=@TrNId and DeA_Kod=@AtrybutKod AND KnA_PodmiotTyp = Pod_PodmiotTyp AND Pod_PodmiotTyp = TrN_PodmiotTyp
Return IsNull(@Wynik, '')
End

W definicji konta:
LEFT(@Opis,0)+CDN.B(Trn_TrNID,'KONTO')

53. Jak wykorzystać w schemacie księgowym z rej. VAT kwotę z ewidencji dodatkowej?

Schemat pozwala na wyksięgowanie kwoty z dokumentu ewidencji dodatkowej pod warunkiem, że numer dokumentu i Akronim kontrahenta jest identyczny na rej. VAT i ewidencji dodatkowej.
W takiej sytuacji trzeba skorzystać z funkcji serwerowej. Dla faktury księgowanej z Rejestru VAT funkcja może wyglądać następująco:
create function cdn.MojaFunkcja_ED (@ID int, @Typ int, @Dok varchar(30))
returns Decimal(15,2)
as
begin
declare @wynik Decimal(15,2)
select @wynik = EDN_KwotaRazemSys
from CDN.EwiddodNag
join cdn.vatnag on
VaN_Dokument=EDN_NumerObcy and
VaN_PodID=EDN_PodID and
VaN_PodmiotTyp=EDN_PodmiotTyp
where VaN_Dokument = @Dok AND VaN_PodID=@ID AND VaN_PodmiotTyp= @Typ
return IsNull(@wynik,0)
end

W definicji Kwoty w schemacie rej. VAT wpisujemy:
@Brutto-cdn.MojaFunkcja_ED(VaN_PodID,VaN_PodmiotTyp,VaN_Dokument)

54. Jak w schemacie księgowym dokumentów z rejestru VAT w polu Opis wykorzystać np. datę operacji
z dokumentu?

@Opis+' '+convert (varchar(10), VaN_DataOpe , 120)

55. Jak w schemacie księgowym Listy płac wyszukać pola opisu analitycznego, które nie mają żadnej wartości czyli NULL?

Jeżeli jako kwota została użyta kwota, która odwołuje się do tabeli CDN.WypElementy to warunek może wyglądać tak:
'1'='1' and not exists(select * from CDN.OpisPlace where OpP_WpEId= WpE_WpEId)
Taka kwota to np. @WynagrodzenieBrutto, @ZUSEmerPrac, @ZUSEmerFirma itp.
Gdyby kwota odwoływała się do innej tabeli np. CDN.Wyplaty to:
'1'='1' and not exists(select * from CDN.Wyplaty JOIN CDN.WypElementy ON WPL_WplId = WPE_WplId JOIN CDN.OpisPlace ON OpP_WpEId= WpE_WpEId WHERE WPL_LplId = LPL_LplId)
Taka kwota to np. @DoWyplaty.

56. Jak w schemacie do księgowania raportów K/B,
w pozycji dekretu uzyskać opis składający się
z numerów dokumentów rozliczających dany zapis K/B?

W takim przypadku można wykorzystać istniejącą funkcję CDN.NumeryRozliczonych wstawiając do opisu pozycji schematu następującą definicję:
@KategoriaSzczegol + ' ' +CDN.NumeryRozliczonych(Bzp_BzpID,2,0)
Zamiast @KategoriaSzczegol można użyć innego istniejącego makra.
Jeżeli dany zapis k/b jest rozliczany kilkoma dokumentami - ich numery w opisie będą oddzielone znakiem średnika.

57. Jak w schemacie księgowym dokumentów z rejestru VAT rozróżnić księgowanie dokumentów wystawionych na kontrahentów krajowych i zagranicznych?

W przypadku kiedy korzystamy z informacji zapisanych na karcie kontrahenta:

Warunek jaki należy wstawić przy kontrahentach krajowych:

'1'='1' AND exists (select * from cdn.kontrahenci where Knt_KntId= VaN_PodID and VaN_PodmiotTyp=1 and Knt_Export=0)

Warunek jaki należy wstawić przy kontrahentach zagranicznych:

'1'='1' AND exists (select * from cdn.kontrahenci where Knt_KntId= VaN_PodID and VaN_PodmiotTyp=1 and Knt_Export<>0)

W przypadku kiedy korzystamy z informacji zapisanych na dokumencie, czyli rodzaj transakcji, wtedy warunek może wyglądać następująco:

'1'='1' AND VaN_Export=0 (dla transakcji krajowej)

Rodzaj transakcji:

0 - krajowa

1 - eksport/import

2 - eksport - zwrot VAT

3 - dostawa/nabycie wewnątrzwspólnotowa

4 - dostawa/nabycie wewnątrzunijna trójstronna

5 - krajowa - podatnikiem jest nabywca

6 - dostawa poza terytorium kraju

7 - poza terytorium kraju (stawka NP)

8 - wewnątrzunijny - podatnikiem jest nabywca

9 - pozaunijny - podatnikiem jest nabywca

58. Jak z poziomu rejestru VAT zaksięgować dokumenty
w zależności od formy płatności na nich wybranej?

Aby zaksięgować fakturę zapłaconą gotówką należy w warunku schematu księgowego wpisać:

'1'='1' and exists (select * from CDN.FormyPlatnosci where

VaN_FplID=FPl_FPlId and FPl_Nazwa = 'gotówka')

A dla dokumentów z pozostałymi formami płatności:

'1'='1' and exists (select * from CDN.FormyPlatnosci where

VaN_FplID=FPl_FPlId and FPl_Nazwa <> 'gotówka')

59. W jaki sposób sprawdzić czy zapis kasowy został automatycznie wygenerowany przy tworzeniu faktury gotówkowej?

W schemacie księgowań dla zapisów automatycznych należy wpisać warunek:

'1'='1' AND BZp_ZapisAutomatyczny=1

Dla pozostałych zapisów:

'1'='1' AND BZp_ZapisAutomatyczny=0

60. Jak zaksięgować dokument Przyjęcia Zewnętrznego
w zależności od statusu kontrahenta?

Dla kontrahenta krajowego należy w warunku schematu wpisać:

'1'='1' AND TrN_Export=0

Dla kontrahenta unijnego:

'1'='1' AND (TrN_Export=3 OR TrN_Export=4)

Dla kontrahenta pozaunijnego:

'1'='1' AND TrN_Export=1

Status:

0 - krajowy

1 - eksport/import

2 - eksport - zwrot VAT

3 - dostawa/nabycie wewnątrzwspólnotowa

4 - dostawa/nabycie wewnątrzunijna trójstronna

5 - krajowy - podatnikiem jest nabywca

6 - dostawa poza terytorium kraju

7 - poza terytorium kraju (stawka NP)

8 - wewnątrzunijny - podatnikiem jest nabywca

9 - pozaunijny - podatnikiem jest nabywca

61. Jak zaksięgować dokument PZ w zależności od fragmentu numeru faktury, do której został utworzony np. numer faktury zakupu zaczyna się od „FA” i kończy się na MG lub EU?”

W warunku schematu księgowego należy wpisać:

 '1'='1' And Exists (Select * From CDN.TraNag FA Where CDN.TraNag.TrN_FaId = FA.TrN_TrNId And Fa.TrN_NumerPelny Like 'FA%SERIA')

zastępując słowo SERIA na końcu warunku wybraną serią dokumentu np. MG lub EU.

62. Jak podczas księgowania listy płac w polu Konto odwołać się do kategorii na wypłacie pracownika (na zakładce [Ogólne])?

Przykład funkcji:
Create Function CDN.A3 (@LplID int, @WPLID int)
Returns varchar(255)
As
Begin
Declare @Wynik VarChar(50)
Set @Wynik = ''
select @Wynik = Kat_KontoSegmentWN
from
CDN.Kategorie
join CDN.Wyplaty on WPL_KatId = Kat_KatID
join CDN.ListyPlac on WPL_LplId = LPL_LplId
where
LPL_LplId=@LplId AND WPL_WPLID=@WPLID
Return IsNull(@Wynik, '')
End
W polu
Konto Wn lub Konto Ma należy wstawić:
LEFT(@Opis,0)+CDN.A3(Lpl_LplID,WPL_WPLID)

63. Jak zaksięgować kwotę netto z faktury w Rejestrze VAT z podziałem na magazyny?

Na Fakturze Sprzedaży w module Faktury są pozycje pochodzące z różnych magazynów. Chodzi o to aby zaksięgować kwotę netto na różne konta, w zależności od magazynu. Na fakturze w Rejestrze VAT nie ma takiej informacji – informacja jest tylko na fakturze w module Faktury. Najprościej więc księgować fakturę bezpośrednio z modułu Faktury i wykorzystać w schemacie, w warunku pozycji, makro @MagazynElem.
Jeżeli natomiast istnieje potrzeba wykonania księgowania z Rejestru VAT można dodać odpowiednią funkcję serwerową i umieścić ją w definicji kwoty schematu:
if exists (select * from sysobjects where name = 'userKwotaFaMagazyny' and xtype = 'FN')
drop function CDN.userKwotaFaMagazyny
GO
create function CDN.userKwotaFaMagazyny (@vanid int, @nazwa varchar(20))
returns numeric (15,2)
as
begin
declare @wynik numeric (15,2)
select @wynik = isnull(sum(TrE_WartoscNetto),0)
from cdn.tranag
join cdn.TraElem on TrN_TrNID = TrE_TrNId
join CDN.Magazyny ON Mag_MagId = TrE_MagId
where Mag_Symbol = @nazwa
and trn_vanid = @vanid
return @wynik
end

W definicji kwoty wpisujemy:
'0' + CDN.userKwotaFaMagazyny (VaN_VaNId, 'MAGAZYN')

64. Jak z poziomu listy płac zaksięgować na konkretne konto wypłatę pracownika, który jest niepełnosprawny?

W pozycji schematu dla listy płac w polu Warunek należy wpisać:

'1'='1' AND EXISTS (select * from CDN.PracEtaty join CDN.PracKod on Pra_Praid = Pre_Praid where Pra_Praid = Wpl_Praid and Wpl_Lplid  = Lpl_Lplid and Pre_StNiepelnosp<>0)

65. Jak w schemacie do księgowania paragonów odwołać się do symbolu magazynu na pozycji paragonu?

W kwocie należy użyć makra odwołującego się do pozycji paragonu, np. @PozNetto. W warunku można użyć następującego zapytania:

'1'='1' AND EXISTS(SELECT * FROM CDN.Magazyny WHERE Mag_MagId = TrE_MagId AND Mag_Symbol='MAGAZYN')

66.Jak umieścić funkcję serwerową w polu z datą księgowania? (na przykładzie księgowania faktur za usługi transportowe)

Księgujemy faktury z Rejestru VAT i zakładamy co następuje:
1. jeżeli dokument jest rozliczony całkowicie – pobieramy datę rozliczenia (jeżeli jest rozliczony kilkoma dokumentami, będzie to data ostatniego rozliczenia),
2. jeżeli jest nierozliczony całkowicie i data bieżąca minus data wystawienia jest większa od 30 dni, pobieramy datę o 30 dni późniejszą od daty wystawienia dokumentu,
3. jeżeli jest to inny przypadek niż powyższe warunki (np. całkowicie nierozliczony ale różnica między datą bieżącą i datą wystawienia jest mniejsza niż 30 dni lub dokument jest częściowo rozliczony) funkcja wstawi zero czyli przy księgowaniu pojawi się komunikat o księgowaniu poza bieżącym okresem obrachunkowym i dokument nie zostanie zaksięgowany. Funkcję można oczywiście rozbudować o kolejne warunki.
if exists (select * from sysobjects where name = 'F1' and xtype = 'FN')
drop function [CDN].[F1]
GO
CREATE function [CDN].[F1] (@VaNId Int)
returns Datetime
as
begin
declare @wynik Datetime
select @wynik = case when exists(select * from CDN.BnkZdarzenia join CDN.VatNag on BZd_DokumentId = VaN_VaNId AND BZd_DokumentTyp = 2 WHERE BZd_Rozliczono=2 AND Van_Vanid=@VaNId) then BZd_DataRoz when exists (select * from CDN.BnkZdarzenia join CDN.VatNag on BZd_DokumentId = VaN_VaNId AND BZd_DokumentTyp = 2 WHERE BZd_Rozliczono2=1 AND (GetDate()- VaN_DataWys)>30 AND Van_Vanid=@VaNId) then DateADD(day,30,VaN_DataWys) else 0 end
from CDN.BnkZdarzenia join CDN.VatNag on BZd_DokumentId = VaN_VaNId and BZd_DokumentTyp = 2 where Van_Vanid=@VaNId
return @wynik
end

W schemacie, w polu Data ksieg. wpisujemy:
@DataWyst-@DataWyst+cdn.F1(VaN_VaNID)

67. Jak w warunku schematu dla faktur zakupu odwołać się do opcji Odliczenia VAT: Tak, Nie, Warunkowo na karcie kategorii wybranej na pozycji dokumentu?

W schemacie księgowym typu Faktura zakupu w warunku wkleić następujące wyrażenie:

Dla odliczeń na NIE

'1'='1' and exists (select * from CDN.Kategorie where Tre_Katid=Kat_Katid and Kat_Odliczenia=0)

Dla odliczeń na TAK

'1'='1' and exists (select * from CDN.Kategorie where Tre_Katid=Kat_Katid and Kat_Odliczenia=1)

Dla odliczeń WARUNKOWO

'1'='1' and exists (select * from CDN.Kategorie where Tre_Katid=Kat_Katid and Kat_Odliczenia=2)

68. Jak uzależnić księgowanie z Rejestru VAT na dane konto od tego czy dokument wpłynął maksymalnie do 20 dnia kolejnego miesiąca?

Poniższy warunek zaksięguje dokumenty, które wpłynęły maksymalnie do 20 dnia kolejnego miesiąca po miesiącu wystawienia faktury. Data księgowania w schemacie musi być ustawiona na datę wystawienia:
'1'='1' and VaN_DataZap <= dateadd(day,20,DATEADD(day,-1,DATEADD(month,DATEDIFF(month,-1,Van_DataWys),0)))
Poniższy warunek zaksięguje dokumenty, które wpłynęły po 20 dniu kolejnego miesiąca po miesiącu wystawienia faktury. Data księgowania w schemacie musi być ustawiona na datę wpływu:
'1'='1' and VaN_DataZap > dateadd(day,20,DATEADD(day,-1,DATEADD(month,DATEDIFF(month,-1,Van_DataWys),0)))
Warunki powinny być wklejone w polu Warunek w nagłówku schematu księgowego.

69. Jak rozksięgować dokumenty środków trwałych na podstawie kodu i wartości liczbowej atrybutu?

Przykład: środki trwałe są dzielone na projekty procentowo w danym miesiącu. Czyli środek był wykorzystywany w 20% w projekcie 1, 30% w drugim i 50% w trzecim. Każdy z projektów ma odpowiednie konto księgowe. Na karcie środka trwałego atrybuty w kodzie mają zawarte konto księgowe a wartość to udział procentowy amortyzacji w danym miesiącu.

Wygląda to tak:

Atrybut Kod          Wartość

501-1-1                 0,30

502-1-1                 0,20

504-2                     0,50

W schemacie księgowym w polu Konto odwołujemy się do numeru konta z kodu atrybutu

@ST_AtrybutKod

a w Kwocie przeliczamy amortyzację x wartość atrybutu

@ST_AtrybutWartosc*@Amortyzacja

Ewentualne korekty groszowe można wyksięgować za pomocą wyrażenia:

@ST_AtrybutWartosc * @Amortyzacja - convert(decimal(14,2), @ST_AtrybutWartosc * @Amortyzacja)+

70. Jak zaksięgować z poziomu rejestrów VAT dokument Tax Free z datą potwierdzenia?

W schemacie księgowym typu Rejestr sprzedaży VAT w polu Data księg. należy wpisać:

@DataWyst-@DataWyst+cdn.Data_TF(VaN_VaNID)

Operator z uprawnieniami administratora może uruchomić w menu Narzędzia/ Serwer bazy danych/ Wykonywanie skryptów skrypt dodający funkcję serwerową, z której będzie korzystał schemat.

CREATE function CDN.Data_TF (@VaNId Int)
returns Datetime
as
begin
declare @wynik Datetime
select @wynik = (select TrN_DataPtwTaxFree from CDN.TraNag join
CDN.VatNag on TrN_VaNId = VaN_VaNId AND TrN_TypDokumentu = 345 WHERE
TrN_TaxFreePotwierdzony=1 AND Van_Vanid=@VaNId)
return @wynik
end

Dodatkowo w polu Warunek można wpisać warunek czy zapis w rejestrze VAT ma powiązanie z potwierdzonym dokumentem Tax Free:

'1'='1' AND exists(select * from CDN.TraNag join CDN.VatNag on TrN_VaNId = VaN_VaNId AND TrN_TypDokumentu = 345 WHERE TrN_TaxFreePotwierdzony=1)

71. Jak sprawdzić podczas księgowania dokumentu z rejestru VAT zakupu czy był on rozliczony z delegacją?

W schemacie księgowym typu Rejestr zakupów VAT w polu Warunek należy wpisać:

'1'='1' AND EXISTS (SELECT * FROM CDN.BnkZdarzenia JOIN CDN.BnkRozRelacje on BRR_DDokID=BZd_BZdID AND BRR_DDokTyp=1 JOIN CDN.BnkZapisy ON BRR_ZDokID=BZp_BZpID AND BRR_ZDokTyp=2 WHERE BZd_DokumentTyp=2 AND BZp_NumerString LIKE '%DLG%' AND BZd_DokumentId=VaN_VaNId)

72. Jak sprawdzić podczas księgowania rozliczonego
z delegacją dokumentu z rejestru VAT zakupu na jakiego pracownika została wystawiona delegacja?

W schemacie księgowym typu Rejestr zakupów VAT w polu Opis należy wpisać:
@Dokument + ' ' + CDN.Pracownik_DLG(VaN_VaNID)
Operator z uprawnieniami administratora może uruchomić w menu Narzędzia/ Serwer bazy danych/ Wykonywanie skryptów skrypt dodający funkcję serwerową, z której będzie korzystał schemat.
Create Function CDN.Pracownik_DLG (@VanId Int)
Returns VarChar(20)
As
Begin
Declare @Kod VarChar(20)
Select @Kod = PRE_Kod
FROM CDN.PracEtaty
JOIN CDN.BnkZapisy ON BZp_PodmiotID=PRE_PreId AND BZp_PodmiotTyp=3 JOIN CDN.BnkRozRelacje ON BRR_ZDokID =
BZp_BZpID AND BRR_ZDokTyp=2 JOIN CDN.BnkZdarzenia ON BRR_DDokID=BZd_BZdID AND BRR_DDokTyp=1 WHERE BZd_DokumentId = @VanId
Return @Kod
End

Do powyższej funkcji można również odwołać się w polu Warunek (podając na początku kod określonego pracownika):
'KOWALSKI'= CDN.Pracownik_DLG(VaN_VaNID)

73. Jak zaksięgować dokument RW na konto księgowe zawierające numer dokumentu powiązanego zlecenia serwisowego?

Załóżmy, że dokument RW chcemy zaksięgować na konto analityczne konta 501, którego numer jest numerem zlecenia serwisowego (np. 501-SRW_1_2016). W schemacie księgowym typu Rozchody wewnętrzne w polu Konto Wn należy wpisać:
LEFT(@Opis,0)+'501-'+dbo.MojaFunkcja_Numer_SRW (TrN_TrNID)
Operator z uprawnieniami administratora może uruchomić w menu Narzędzia Serwer bazy danych/ Wykonywanie skryptów skrypt dodający funkcję serwerową, z której będzie korzystał schemat.
Create Function dbo.MojaFunkcja_Numer_SRW (@TrNID INT)
Returns VarChar(20)
As
Begin
Declare @numer VarChar(20)
select @numer = REPLACE (SrZ_NumerPelny,'/','_')
FROM CDN.SrsZlecenia JOIN CDN.DokRelacje ON DoR_ParentId=SrZ_SrZId AND DoR_ParentTyp=900 JOIN CDN.TraNag ON DoR_DokumentId=TrN_TrNID AND DoR_DokumentTyp=304 WHERE TrN_TrNID= @TrNID
Return @numer
End

Konta w planie kont muszą istnieć przed księgowaniem. Ewentualnie musi istnieć konto syntetyczne – jeżeli będzie zaznaczony parametr Automatyczne zakładanie kont analitycznych niesłownikowych (w Konfiguracji Firmy/ Księgowość/ Księgowość kontowa) – konta się założą.

74. Jak zaksięgować z listy płac kwotę wypłaty w gotówce dla pracownika?

Aby w dekrecie utworzonym z zaksięgowanej listy płac uzyskać kwotę wynagrodzenia wypłaconej w gotówce należy utworzyć odpowiednią funkcję serwerową, z której będzie korzystał schemat dla list płac. Operator
z uprawnieniami administratora może uruchomić w menu Narzędzia/ Serwer bazy danych/ Wykonywanie skryptów skrypt dodający tę funkcję.
Create Function CDN.MojaFunkcja_wyplaty_gotowka(@LplID int, @WPLID int)
Returns Decimal(15,2)
As
Begin
Declare @Kwota Decimal(15,2)
Select @Kwota = Sum(BZd_KwotaSys)
From CDN.BnkZdarzenia join CDN.Wyplaty on BZd_DokumentID=WPL_WplId join CDN.ListyPlac on WPL_LplId = LPL_LplId
Where LPL_LplId=@LplId AND WPL_WPLID=@WPLID and BZd_DokumentTyp=8 and BZd_FPlId=1
Return IsNull(@Kwota, 0)
End

Wywołanie funkcji w elemencie schematu księgowego w polu Kwota:
'0' + CDN.MojaFunkcja_wyplaty_gotowka(Lpl_LplID,WPL_WPLID)

75. Jak zaksięgować listę płac z wykorzystaniem atrybutów pracownika?

Dla poszczególnych pracowników przypisano atrybuty (np. 501, 502,…) z wartościami w formie współczynników określające udziały odpowiednich kosztów wydziałowych. Chcąc zaksięgować listę płac wykorzystując wartości odpowiednich atrybutów przypisanych do pracownika należy z poziomu Narzędzia/ Serwer bazy danych/ Wykonywanie zapytań SQL dodać następującą funkcję:
Create Function CDN.Wartosc_Atr_Prac (@WPLId Int, @nazwa varchar(20))
returns decimal (15,2)
As
Begin
Declare @wartosc decimal (15,2)
Select @wartosc = REPLACE (ATH_Wartosc,',','.')
From CDN.OAtrybutyHist Join CDN.OAtrybuty ON ATH_OatId=OAT_OatId Join CDN.WypElementy On OAT_PrcId = WPE_PraId Join CDN.Wyplaty on WPL_WplId=WPE_WplId
Where WPL_WPLId = @WPLId AND OAT_NazwaKlasy = @nazwa And (ATH_DataDo >= WPL_DataDo And WPL_DataOd >= ATH_DataOd)
Return CASE WHEN ISNUMERIC(@wartosc)=1 THEN CAST (@wartosc AS DECIMAL(15,2)) ELSE 0 END
End

Wywołanie funkcji w elemencie schematu księgowego w polu Kwota – przemnożenie kwoty wynagrodzenia brutto przez wartość odpowiedniego współczynnika:
@WynagrodzenieBrutto * CDN.Wartosc_Atr_Prac (WPL_WPLId, '501')




Komunikat ID 23485 „Bieżący operator posiada zakaz wykonywania akcji podgląd na obiektach typu rejestr k/b w rejestrze [Nazwa rejestru].”

W menu Kasa/Bank / Rejestry kasowe/bankowe, na formularzu rejestru, na drugiej zakładce „Zakazy” Operator ma ustawiony zakaz wykonywania akcji podgląd.




Dlaczego zaliczka podatku wykazana na PIT-4 jest niższa niż zaliczka podatku wykazana na podsumowaniu list płac za dany okres?

Najczęściej różnica w wykazanej zaliczce podatku spowodowana jest ustawieniem w konfiguracji  dodatków/umów pozycji na deklaracji PIT (System/Konfiguracja/Firma/Płace/Typy wypłat). Jeśli dodatek ma być wykazywany na PIT 4, w  polu 'pozycja na deklaracji PIT’  powinna być wybrana pozycja zaczynająca się od PIT-4 lub PIT-8B. Jeśli wybrana jest pozycja np. PIT-11 to podatek będzie wykazywany tylko na PIT-11, nie będzie wykazany na PIT-4.




Komunikat ID 24055 Przekroczono limit nieobecności na ten rok/miesiąc. Czy chcesz kontynuować?

W programie Comarch ERP Optima wprowadzono kontrolę limitu urlopu wypoczynkowego dla pracowników tymczasowych oraz podejmujących pierwszą pracę, tak aby należny za dany miesiąc urlop można było wykorzystać dopiero po upływie miesiąca pracy. W przypadku próby wprowadzenia większej niż przysługująca liczby dni urlopu pojawi się komunikat ‘Przekroczono limit nieobecności na ten rok/miesiąc. Czy chcesz kontynuować’ z możliwością wyboru czy nieobecność ma być zapisana jako urlop wypoczynkowy pomimo przekroczenia limitu czy Użytkownik chce ją edytować i zmienić okres.




OPT034 – Podłączenie kodów kreskowych drukarki DYMO

Data aktualizacji: 28-11-2018

Przykład – współpraca z drukarką DYMO

W poniższym dokumencie zostanie omówione wykorzystanie funkcji dodatkowych do współpracy z drukarkami etykiet DYMO.

Przykłady opisują kolejne fazy zaawansowania tworzenia funkcji drukującej etykiety dla towaru. Funkcję (pliki xpt) należy dodać do funkcji dodatkowych z poziomu kartoteki towarowej. Drukowanie innego rodzaju wydruków etykiet bazujących na danych z programu można wykonać w podobny sposób.

Sam mechanizm funkcji dodatkowych do programu opisuje artykuł techniczny OPT003-Funkcje dodatkowe

Uwaga
Omawiana funkcja dodatkowa uruchamia wydruk etykiety zaprojektowanej programem DymoLabelWriter i przekazuje do niej dane
z programu Comarch ERP Optima. Dlatego należy najpierw zainstalować sterowniki drukarki DYMO, skopiować na dysk lokalny do katalogu C:\DYMO przykładowe wzory etykiet (pliki z rozszerzeniem LWL). Wzory etykiet można wgrać do innego katalogu, ale wówczas należałoby podmienić ścieżkę dostępu w definicji funkcji dodatkowej.

Oczywiście w analogiczny sposób można przygotować wydruki etykiet środków trwałych czy dowolnych innych. Konieczne jest do tego przygotowanie odpowiedniego wzoru etykiety programem DymoLabelWriter oraz takie zmodyfikowanie funkcji, aby pobierała dane z innej tabeli (np.CDN.Trwale) oraz podstawiała w skrypcie odpowiednie dane do etykiety.

Wzór etykiety

Wzór etykiety (pliki LWL) przygotowujemy programem DymoLabelWriter. Można zmodyfikować załączony wzorzec lub stworzyć wzór zupełnie od początku.

Przy tworzeniu etykiety, która ma być drukowana z Comarch ERP Optima należy zwrócić uwagę na sposób przekazywania danych z programu do wydruku etykiety. Aby na drukowanej etykiecie można było wydrukować dane np. o towarze pobrane z Comarch ERP Optima, konieczne jest odpowiednie nazwanie obiektów na etykiecie.

Przykładowo, umieszczając pole typu kod kreskowy na etykiecie musimy – oprócz wartości początkowej – określić nazwę tego pola. Robi się to w następujący sposób:

  • W menu Edycja zaznaczamy Pokaż narzędzia
  • Na wybranym polu klikamy prawym klawiszem myszy
  • W otwartym okienku właściwości wpisujemy Nazwę obiektu taką, do jakiej potem odwołamy się w funkcji drukującej

W załączonych przykładowych wzorach etykiet (etykieta1, etykieta2) użyte zostały następujące nazwy pól:

  • Barcode – kod kreskowy
  • Price – cena
  • Desc – opis towaru
  • Name – nazwa towaru

Przykład

Pierwszy przykład ilustruje wydruk zadanej liczby etykiet (podanej przez użytkownika) wg ceny domyślnej towaru. Pełna definicja funkcji znajduje się w pliku etykietyTwr1.xpt.

Sekcja SQL

Sekcja SQL zawiera definicje parametrów dynamicznych oraz zapytanie do bazy danych:

Pierwszy parametr służy do przekazania filtru z aplikacji. Ma atrybut H (hide) co oznacza, że jest niewidoczny dla użytkownika i umożliwia wydrukowanie etykiety towaru którego formularz jest aktualnie otwarty.

@PAR ?@Hs200_NQ|Filtr:''@? PAR@

Informację o aktualnym filtrze można odczytać w managerze wydruków
i funkcji dodatkowych na zakładce Parametry. Drugi parametr zawiera wyłącznie tekst, który pojawi się na okienku parametrów dynamicznych:

@PAR ?@ABC('Wydruk etykiet dla towaru')@? PAR@

Trzeci zawiera wskazanie na plik ze wzorem etykiety (domyślnie C:\DYMO\Etykieta1.LWL):

@PAR ?@Fs255(File, Open, 'LabelPrinter Labels (*.LWL)|*.LWL|Wszystkie pliki
(*.*)|*.*', *.LWL)|Plik|&Wg wzorca:C:\DYMO\Etykieta1.LWL@? PAR@

A ostatni liczbę etykiet do wydrukowania:

@PAR ?@N4|Ilosc|&Ilość etykiet:1 @? @RL(1) @RH(9999) PAR@

Następnie jest zapytanie odczytujące dane o towarze.

Select Twr_Kod, Twr_Nazwa, Twr_Ean=Substring(Twr_Ean,1,12), Twr_Opis,
TwC_Cena=RTRIM(LTRIM(STR(TwC_Wartosc,15,2) + ' ' + TwC_Waluta))
From CDN.Towary
Join CDN.TwrCeny On Twr_TwrId=TwC_TwrId And TwC_TwCNumer
= Twr_TwCNumer
Where ??_NQFiltr

Proszę zwrócić uwagę na wykorzystanie parametru Filtr w klauzuli Where, oraz na sposób odczytupola EAN (Twr_Ean=Substring(Twr_Ean,1,12)). Wynika to stąd, że ostatnia cyfra w polu EAN zawiera cyfrę kontrolną, która jest przez sterownik drukarki DYMO obliczana i dodawana do kodu (dlatego należy ją „obciąć”).

Sekcja VB

Skrypt jest wykonywany w przypadku, gdy zwrócony recordset nie jest pusty (w celu uniknięcia wydruku pustej etykiety). Kolejno są tworzone obiekty sterowników drukarki:

Dim dymoAddIn, dymoLabel
Set dymoAddIn = CreateObject("DYMO.DymoAddIn")
Set dymoLabel = CreateObject("DYMO.DymoLabels")

Następnie otwierany jest plik ze wzorem etykiety do wydrukowania:

dymoAddIn.Open "??_NQPlik "

Proszę zwrócić uwagę, że nazwa pliku jest przekazywana przez parametr dynamiczny. W przypadku VBScript możemy to zrobić wprost (a nie poprzez pole w recordsecie jak we wcześniejszych przykładach w JScript), gdyż znak \ jest w VBScript traktowany jak każdy inny.

Następnie do pól na etykiecie (zgodnie z nazwami opisanymi we wcześniejszym rozdziale) są podstawiane dane odczytane z recordsetu:

dymoLabel.SetField "BarCode", Recordset.Fields("Twr_Ean").Value
dymoLabel.SetField "Name", Recordset.Fields("Twr_Nazwa").Value
dymoLabel.SetField "Price", Recordset.Fields("TwC_Cena").Value
dymoLabel.SetField "Desc", Recordset.Fields("Twr_Opis").Value

I wreszcie wysłanie wydruku na drukarkę – z ilością przekazaną przez parametr dynamiczny

dymoAddIn.Print ??Ilosc , TRUE

 

Przykład

Drugi przykład ilustruje wydruk zadanej liczby etykiet (podanej przez użytkownika) wg ceny wybranej przez użytkownika. Pełna definicja funkcji znajduje się w pliku etykietyTwr2.xpt.

Sekcja SQL

Zmiana w stosunku do poprzedniego przykładu polega na dodaniu parametru dynamicznego:

@PAR ?@R(SELECT Id = 0, Kod = 'domyślne' UNION SELECT DfC_Lp, DfC_Nazwa From
CDN.DefCeny Order By 1)|TwrCeny|&Ceny:domyślne @? PAR@

Parametr ten wyświetla listę zdefiniowanych w konfiguracji cen uzupełnionych o pozycję „domyślne”.

Zmienia się również zapytanie SQL w części związanej z dołączaniem tabeli TwrCeny:

Select Top 1 Twr_Kod, Twr_Nazwa, Twr_Ean=Substring(Twr_Ean,1,12), Twr_Opis,
TwC_Cena=RTRIM(LTRIM(STR(TwC_Wartosc,15,2) + ' ' + TwC_Waluta))
From CDN.Towary
Join CDN.TwrCeny On Twr_TwrId=TwC_TwrId And
TwC_TwCNumer={CHOOSE(??TwrCeny=0, 'Twr_TwCNumer', ??TwrCeny )}
Where ??_NQFiltr

Wyrażenie ujęte w nawiasy klamrowe zostanie zewaluowane:

{CHOOSE(??TwrCeny=0, 'Twr_TwCNumer', ??TwrCeny )}

Jeśli użytkownik wybrał cenę domyślną (0) wówczas w Join zostanie umieszczony warunek:

... And TwC_TwCNumer=Twr_TwcNumer

Jeśli użytkownik wybrał cenę inną niż domyślna, wówczas pod parametr ??TwrCeny zostanie

podstawiony numer tej ceny (np. 2) i warunek będzie miał postać:

... And TwC_TwCNumer=2

 

Przykład

Trzeci przykład został rozbudowany o wydruk zadanej liczby etykiet lub liczby odpowiadającej obecnej ilości towaru na magazynie. Pełna definicja funkcji znajduje się w pliku etykietyTwr3.xpt.

Sekcja SQL

W sekcji SQL został dodany nowy parametr dynamiczny:

@PAR ?@X|WgZasobow|&Ilość wg zasobów:1 @? PAR@

Jest to check-box, który wskazuje, czy drukowana ma być ilość etykiet wg obecnego stanu czy wg liczby etykiet podanej przez użytkownika.

Dodatkowo został zmodyfikowany parametr Ilosc:

@PAR ?@N4|Ilosc|&Ilość etykiet:1 @? @H({??WgZasobow }) @RL(1) @RH(9999) PAR@

Dzięki dodaniu @H({??WgZasobow }) będzie on ukrywany w przypadku, gdy użytkownik zaznaczył check-box Ilość wg zasobów.

Największa zmiana dotyczy konstrukcji zapytania SQL:

Select Top 1 Twr_Kod, Twr_Nazwa, Twr_Ean=Substring(Twr_Ean,1,12), Twr_Opis,
TwC_Cena=RTRIM(LTRIM(STR(TwC_Wartosc,15,2) + ' ' + TwC_Waluta)),
TwI_Ilosc {CHOOSE ( ??WgZasobow , '', '='&??Ilosc)}
From CDN.Towary
{CHOOSE ( ??WgZasobow , 'Join CDN.TwrIlosci On Twr_TwrId
= TwI_TwrId And
TwI_MagId Is Null', '')}
Join CDN.TwrCeny On Twr_TwrId=TwC_TwrId And TwC_TwCNumer={CHOOSE(??TwrCeny=0,
'Twr_TwCNumer', ??TwrCeny )}
Where ??_NQFiltr
{CHOOSE ( ??WgZasobow , 'Order By TwI_Data Desc', '') }

Po pierwsze dodano klauzulę Top 1 – po to, że jeśli odczytujemy liczbę etykiet wg zasobów (czyli wg

tabeli CDN.TwrIlosci), żeby ściągnąć tylko jeden rekord.

Dodane zostało odczytanie pola TwI_Ilosc – przy czym wyrażenie

{CHOOSE ( ??WgZasobow , '', '='&??Ilosc)}

Powoduje, że jeśli NIE zaznaczono check-boxa Ilość wg zasobów, to pod TwI_Ilosc zostaje podstawiona liczba pobrana z parametru dynamicznego Ilosc, a więc wyrażenie ma postać np.:

TwI_Ilosc=3

Dodano również warunkowe dołączenie do tabeli CDN.TwrIlosci – tylko wówczas, gdy zaznaczono check-boxa Ilość wg zasobów:

{CHOOSE ( ??WgZasobow , 'Join CDN.TwrIlosci On Twr_TwrId
= TwI_TwrId And
TwI_MagId Is Null', '')}

Na końcu dodano warunkowe dodanie klauzuli Order By – jeśli ilość pobieramy z tabeli TwrIlosci, chodzi o to, aby odczytać ostatni zapis (czyli zapis
o największej dacie)

{CHOOSE ( ??WgZasobow , 'Order By TwI_Data Desc', '') }

Sekcja VB

W sekcji VB zmieniło się jedynie wywołanie funkcji drukującej:

dymoAddIn.Print Recordset.Fields("TwI_Ilosc").Value, TRUE

Ilość jest w tym wypadku przekazywana przez pole odczytane z recordsetu,
a nie przez zmienną dynamiczną.


Lista plików dodatkowych

etykieta1.LWLDefinicja wydruku dla drukarki Dymo LabelWriter 330
etykieta2.LWLDefinicja wydruku dla drukarki Dymo LabelWriter 330
etykietyTwr1.xptFunkcja dodatkowa zawierająca uruchomienie wydruku do przykładu 1
etykietyTwr2.xptFunkcja dodatkowa zawierająca uruchomienie wydruku do przykładu 2
etykietyTwr3.xptFunkcja dodatkowa zawierająca uruchomienie wydruku do przykładu 3

Pliki do pobrania




OPT042 – Dodatkowe możliwości filtrowania list w programie

Data aktualizacji: 28-11-2018

Teoria i przykłady praktyczne

Panel filtra zaawansowanego

Filtr jest narzędziem wspomagającym przeszukiwanie list. W wielu miejscach systemu pojawiają się różnego rodzaju listy, do których można stosować filtry. Filtrowanie listy powoduje zawężenie ilości elementów wyświetlanych na liście do takich, które spełniają warunki filtra. Panel filtra można stosować na dwa sposoby:

  • Proste filtrowanie
  • Filtr zaawansowany


We wszystkich przypadkach list, które mogą być filtrowane, panel filtra zaawansowanego znajduje się na dole listy. Po prawej stronie wiersza filtra znajdują się zawsze przyciski do włączania i wyłączania działania filtra Filtruj, Wyczyść filtr oraz przycisk do tworzenia warunków filtrujących filtra zaawansowanego Konstruktor filtra.

Jeżeli pinezka (widoczna obok ikony filtrowania – lejka) jest:
wyłączona – wówczas po zmianie filtrowania na ikonie lejka pojawia się znak zapytania i dopiero po jego kliknięciu uruchomione zostanie filtrowanie. Ten tryb pracy jest efektywniejszy gdy lista zwiera bardzo dużo pozycji. Można wtedy najpierw ustawić wszystkie parametry filtrowania, a dopiero na końcu uruchomić samo przefiltrowanie listy.
włączona – wszystkie zmiany filtrowania wykonywane są na bieżąco i od razu widoczne są na liście.

Filtr zaawansowany pozwala filtrować listę według stworzonych przez Użytkownika warunków. Filtry zaawansowane są zapamiętywane w systemie. Nazwa filtra zaawansowanego jest poprzedzona znakiem „#”. Do tworzenia filtra zaawansowanego służy Konstruktor filtra , uruchamiany z dowolnego okna, w którym istnieje możliwość zastosowania filtra.
Praca z konstruktorem filtra wymaga pewnej znajomości struktury baz danych oraz umiejętności formułowania warunków logicznych.
Nazwa – nazwa filtra. Po zapisaniu filtra wpisana w tym polu nazwa zostanie poprzedzona znakiem „#”. Filtr pod tą nazwą będzie zapisany w zbiorze dostępnych filtrów dla danej listy. Zbiór filtrów przyporządkowanych do danej listy może być dowolnie modyfikowany tzn. można dodawać, poprawiać i usuwać zdefiniowane filtry.

Zakładka [Ogólne]

Zakładka [Ogólne] zawiera mechanizm łatwego konstruowania rozbudowanego wyrażenia logicznego filtrującego listę. W rozbudowanej postaci warunek logiczny może składać się z wielu członów połączonych operatorami logicznymi „oraz” (AND), „lub” (OR), „oraz nie” (AND Not) i „lub nie” (OR Not). W konstruktorze filtra tworzy się proste warunki logiczne, a następnie łączy się je za pomocą dostępnych operatorów.

Konstruktor filtra – zakładka Ogólne

Tworzenie pojedynczego wyrażenia filtra zaczyna się od dodania warunku (po kliknięciu w domyślny operator Oraz wybieramy opcję Dodaj warunek lub obok wciskamy przycisk). Następnie w warunku kliknięcie na domyślnie podstawione pierwsze pole z bazy danych rozwija listę z wyborem dostępnych pól. Nie trzeba znać dokładnie nazw pól czy struktury bazy – po prawej stronie listy znajduje się opis (komentarz).

Konstruktor filtra – lista dostępnych pól z bazy danych

Dostęp do pól zorganizowany jest za pośrednictwem list rozwijanych. W zależności od tego, dla jakiej listy tworzony jest filtr (z poziomu którego okna został wywołany konstruktor filtra), lista dostępnych pól jest różna. Przykładowo, jeżeli konstruktor filtra zostanie wywołany z okna Kontrahenci – wówczas dostępne będą pola związane z kartoteką kontrahenta.
Za każdym razem Użytkownik otrzymuje zestaw dostępnych pól odpowiedni do danej listy. Dzięki temu, chcąc tworzyć własne filtry, nie musi znać całej bazy danych. Może się ograniczyć do znajomości struktury kilku tabel, w oparciu o które będzie budował własne filtry. Po wyborze pola należy wybrać odpowiedni operator porównania
z listy. Lista pojawi się po kliknięciu na domyślnie wyświetlany operator.

Konstruktor filtra – dostępne operatory warunkujące

Inaczej mówiąc, należy przyrównać wybrane pole do ustalonej z góry wartości stałej lub do parametru, którego wartość będzie pobierana w momencie uruchamiania filtra. Wartość do której będzie odbywało się przyrównanie wpisujemy po kliknięciu w pole . Tworzenie wyrażenia może odbywać się także w oknie Edycja wyrażenia filtra, które uruchamia się po kliknięciu w pole , a następnie przycisku plusa po prawej stronie .

Po wywołaniu okna Edycja wyrażenia filtra należy podać wartość szukaną dla tego pola. Jeżeli wartość szukana ma być pobierana w momencie uruchomienia filtra to należy zaznaczyć pole wyboru Pytaj o wartość. Następnie w polu Tytuł należy wpisać opis pobieranej wartości. W ten prosty sposób tworzy się filtry z parametrem. Poniżej przedstawione zostało okno z pytaniem o parametry filtra. Okno pojawia się automatycznie po uruchomieniu filtra z parametrem.

Edycja wyrażenia filtra

Logiczna reprezentacja utworzonego w ten sposób wyrażenia filtrującego jest wyświetlana w dolnej części okna po zaakceptowaniu Edycji wyrażenia filtra.

Zakładka [Zaawansowane]

Zakładka [Ogólne] konstruktora filtra pozwala na łatwe budowanie wyrażeń filtrujących, posiada on jednak pewne ograniczenia. Dla bardziej wymagających Użytkowników została zaprojektowana zakładka [Zaawansowane]. Można tu ręczne tworzyć warunek filtrujący. Zakładka [Zaawansowane] posiada pole, do którego wprowadzany jest filtr w postaci wyrażenia z użyciem składni języka SQL. Praca z konstruktorem filtra wymaga znajomości struktury baz danych oraz umiejętności formułowania warunków logicznych.

Uwaga
Aby zobaczyć listę zdefiniowanych filtrów należy przycisnąć klawisz CTRL razem z LEWYM KLAWISZEM MYSZY na przycisku Konstruktor filtra. Lista ta obsługiwana jest przez standardowe przyciski i klawisze umożliwiające dodawanie, edytowanie i kasowanie filtrów.

Konstruktor filtra – zakładka Zaawansowane

Jeżeli zachodzi potrzeba utworzenia warunku, aby filtr działał jedynie na wybranej bazie firmowej, na początku treści filtra należy wpisać:

'DEMO' = {_QGetSQL('select SYS_Wartosc from cdn.SystemCDN where SYS_ID =1')}
po tym warunku po operatorze „AND” należy wprowadzić właściwą treść filtra. W powyższym warunku na początku jako argument (w powyższym przykładzie „DEMO”) należy podać nazwę bazy wyświetlaną na liście firm.

Zakładka [Opcje]

Zakładka [Opcje] zawiera typ filtra. Domyślnym typem jest filtr Stanowiska. Jego definicja jest zapisywana w rejestrze systemowym i filtr stanowiska będzie widoczny dla danego stanowiska.

Definicja filtra Globalnego jest zapisywana w bazie danych, dzięki czemu jest on widoczny i dostępny do edycji dla wszystkich Użytkowników.

Filtr może być dostępny tylko dla wybranego operatora po zaznaczeniu opcji Operator i wybraniu odpowiedniego operatora. Po zalogowaniu się operator będzie miał możliwość wyboru filtra z listy filtrów.

Filtr może być Obowiązkowy dla danego operatora, co oznacza, że po zalogowaniu się tego operatora filtr będzie włączony i nie będzie widoczny (do wyboru) na liście filtrów. Dodatkowo należy zaznaczyć w menu System/ Konfiguracja/ Program/ Użytkowe/ Parametry – parametr Stosuj filtry obowiązkowe.

Parametr Chroniony – jeśli zaznaczy go operator z uprawnieniami Administratora, wówczas inni operatorzy nie będą mieli możliwości edycji i usunięcia danego filtra.

Parametr Domyślny można zaznaczyć dla danego filtra niezależnie od jego typu (Stanowiska/ Operatora/ Globalny/ Obowiązkowy). Zaznaczenie parametru powoduje, że filtr jest automatycznie stosowany przy wejściu na daną listę. W odróżnieniu od filtra obowiązkowego można go wyłączyć. Filtrów domyślnych dla danej listy może być wiele, ale przy otwieraniu listy zostanie wybrany tylko jeden z nich. Kryterium wyboru wyznacza typ filtra oraz kolejność filtra w ramach typu. Najwyższy priorytet mają filtry Stanowiska, a więc związane z danym komputerem. Jeśli na jednym lub kilku filtrach typu Użytkownika, podłączonych do danej listy, zostanie zaznaczony parametr Domyślny, ostatni z nich zostanie uznany jako domyślny. W przypadku braku domyślnego filtra Stanowiska przeszukiwane są filtry Operatora, a wybór filtra domyślnego następuje analogicznie jak poprzednio. Jeśli na danej liście nie ma zdefiniowanego ani filtra domyślnego Stanowiska ani Operatora – domyślny filtr jest szukany w filtrach Globalnych.

Konstruktor filtra – zakładka Opcje

Zapamiętywanie ustawień filtra

Po zamknięciu listy zapamiętywanie ustawień filtra jest realizowane wg poniższych zasad:

  • zapamiętywane jest czy panel dodatkowy był zwinięty/rozwinięty,
  • zapamiętywane jest czy pinezka była włączona/wyłączona,
  • zapamiętywane są ustawienia pól z panelu podstawowego i rozwijanego,
  • lista otwiera się wyfiltrowana wg zapamiętanych filtrów.


Ponadto przy pierwszym uruchomieniu listy pinezka jest włączona, a dostępna opcja Wyczyść filtr na liście oraz Reset ustawień okien przywraca ustawienia domyślne dla filtrów panelu podstawowego i rozwijanego.

Odświeżanie listy odbywa się przy każdorazowym użyciu lejka lub oraz poprzez wciśnięcie F5 w dowolnym miejscu na liście.

Filtry zapisywane są do bazy konfiguracyjnej, więc odtworzenie bazy konfiguracyjnej powoduje przywrócenie wszystkich filtrów, które zostały do niej dodane. Inną możliwością przeniesienia filtrów do innej instalacji jest skopiowanie treści filtra z zakładki [Zaawansowane] Konstruktora filtra i wklejenie jej w tym samym miejscu w innej instalacji Comarch ERP Optima. Istotne jest, aby Konstruktor filtra był uruchomiony z poziomu tej samej listy.

Przykłady z instrukcją tworzenia

Moduły Handlowo-Magazynowe

Filtry tworzone z poziomu zakładki [Ogólne]

Na liście Faktur Sprzedaży chcemy wyświetlić tylko te dokumenty, których wartość brutto jest pomiędzy 500 a 1000 PLN. W konstruktorze filtra, zakładka [Ogólne] w pole Nazwa wpisujemy wybraną nazwę filtra, następnie w celu dodania warunków klikamy ikonę plusa i wskazujemy pole TrN_RazemBrutto.

Określamy dla niego warunek „Jest większe niż” oraz kwotę 500
Następnie analogicznie dodajemy kolejny warunek, w którym określamy TrN_RazemBrutto „Jest mniejsze niż” 1000. Zapisujemy filtr ikoną .
Po zapisie jest on widoczny na liście filtrów dostępnych z poziomu listy Faktur Sprzedaży.

Filtry tworzone z poziomu zakładki [Zaawansowane]

Z poziomu listy Faktur Sprzedaży do bazy danych wysyłane jest automatycznie zapytanie:

SELECT [lista kolumn] FROM A.TraNag WHERE …

Alias „A” dla tabeli TraNag, który jest widoczny w powyższym przykładzie pozwala na tworzenie bardziej skomplikowanych zapytań przy użyciu wielu tabel. Dla różnych list aliasy mogą być różne – można je podejrzeć za pomocą zaawansowanych narzędzi do obsługi serwera SQL.
W treści filtra zaawansowanego wpisujemy wyrażenie SQL, które następuje po WHERE w zapytaniu.

Prosty filtr zaawansowany
Dla filtra przedstawionego we wcześniejszym przykładzie dla zakładki [Ogólne] można zbudować bezpośrednie zapytanie w zakładce [Zaawansowane], które wyglądałoby tak:

(TrN_RazemBrutto > '500.0000' AND TrN_RazemBrutto < '1000.0000')

Jest to filtr o analogicznym działaniu, pokazujący Faktury Sprzedaży, których wartość brutto zawiera się między 500 a 1000 PLN.

Filtr zaawansowany z parametrem dynamicznym
W przykładzie pokażemy jak wyfiltrować dokumenty handlowo-magazynowe, które wystawił określony operator.
Id operatora, który wystawił dany dokument znajduje się w bazie w tabeli TraNag w polu TrN_OpeZalID. W filtrze musimy porównać wartość tego pola z ID operatora wybranego. Potrzebny będzie parametr dynamiczny. Stworzymy go klikając prawym przyciskiem myszy w polu Filtr SQL i wybierając opcję Wstaw/edytuj deklarację parametru dynamicznego.

Pojawi się kreator, który poprowadzi nas przez kolejne kroki, w których:

  • wskazujemy nazwę parametru, której użyjemy potem w zapytaniu (np. OpeID)
  • wybór typów parametru:


Parametr typu lista wywoływana
– jeśli wybierzemy typ – lista wywoływana – dla tego typu parametrów pojawia się pewien zakres gotowych procedur, z których możemy wybrać np. opcje: lista kontrahentów, lista kategorii, lista grup, lista towarów itp. Wybieramy z tej listy procedurę lista operatorów, która wyświetli listę akronimów operatorów, a po wyborze konkretnego operatora zwróci jego ID i przekaże w parametrze OpeID.

Po zatwierdzeniu kolejnych okien deklaracja parametru wygląda w ten sposób:

@PAR ?@LS20(OP_PROC.DLL|CALLLOOKUPOPELISTA())|OpeID|&OpeID:{}@? PAR@

Wywołanie parametru w zapytaniu wstawiamy jak pokazano poniżej:

TrN_OpeZalID = ??OpeID

Umożliwi to wybór z listy operatorów wybranego operatora i przefiltrowanie dokumentów po określonym operatorze. Filtr pokazuje dokumenty WYSTAWIONE przez danego operatora. Aby filtr reagował na dokumenty ZMODYFIKOWANE przez operatora należy zmienić TrN_OpeZalID na TrN_OpeModID

Parametr typu lista rozwijana
Jeśli chcielibyśmy w parametrze zastosować listę rozwijaną, wówczas w kolejnym kroku kreatora pojawi się szablon zapytania, które należy uzupełnić:

SELECT ID = 1, Kod = ''

W tym miejscu powinno znaleźć się zapytanie, które zwróci nam ID oraz KOD. KOD będzie wyświetlany na liście rozwijanej, natomiast po dokonaniu wyboru z tej listy – do parametru będzie przekazywane ID wyboru.

SELECT ID = Ope_OpeId, Kod = Ope_Kod From {OPBK()}.CDN.Operatorzy Order By Ope_Kod

Lista operatorów znajduje się w tabeli CDN.Operatorzy w bazie konfiguracyjnej, dlatego konieczne jest odwołanie w podany sposób:

{OPBK()}.CDN.Operatorzy

Ostatecznie filtr z parametrem z listą rozwijaną będzie wyglądał w ten sposób:

@PAR ?@R(SELECT ID = Ope_OpeId, Kod = Ope_Kod From {OPBK()}.CDN.Operatorzy Order By Ope_Kod)|OpeID|&OpeID:{}@? PAR@
TrN_OpeZalID = ??OpeID

Należy pamiętać o tym, aby w definicji parametru dynamicznego użyć kolumny liczbowej (w tym przypadku TrN_OpeZalID).

Funkcje systemowe
Modyfikacją zaprezentowanego filtra może być taki filtr, który pokaże dokumenty aktualnie zalogowanego operatora. W tym celu można wykorzystać funkcje systemowe. Opcja dostępna pod prawym przyciskiem myszy:

Spośród listy dostępnych funkcji możemy wybrać funkcję OperatorID, która zwróci ID zalogowanego operatora:

Ostatecznie filtr z użyciem funkcji systemowej będzie wyglądał tak:

TrN_OpeZalID = {OperatorID}

Moduły Księgowe

Filtry tworzone z poziomu zakładki [Ogólne]

Na liście zapisów kasowych/bankowych chcemy wyświetlić zapisy, na których nie zostało uzupełnione konto przeciwstawne.
W konstruktorze filtra, zakładka [Ogólne] w pole Nazwa wpisujemy wybraną nazwę filtra, następnie w celu dodania warunków klikamy ikonę plusa i wskazujemy pole Bzp_KontoPrzeciwstawne.

Określamy dla niego warunek „Jest puste”.
Następnie zapisujemy filtr ikoną .
Po zapisie jest on widoczny na liście filtrów dostępnych z poziomu listy zapisów kasowych/bankowych.

Filtry tworzone z poziomu zakładki [Zaawansowane]

Filtr zaawansowany z parametrem dynamicznym
W przykładzie pokażemy jak wyfiltrować dokumenty w rejestrze VAT, które posiadają określoną kategorię w nagłówku dokumentu.
Id kategorii, która została wybrana na dokumencie w rejestrze VAT znajduje się w bazie w tabeli VatNag w polu VaN_KatID.
W filtrze musimy porównać wartość tego pola z ID operatora wybranego. Potrzebny będzie parametr dynamiczny. Stworzymy go klikając prawym przyciskiem myszy w polu Filtr SQL i wybierając opcję Wstaw/edytuj deklarację parametru dynamicznego.

Pojawi się kreator, który poprowadzi nas przez kolejne kroki, w których:

  • wskazujemy nazwę parametru, której użyjemy potem w zapytaniu (np. Kategoria)
  • wybór typów parametru:


Parametr typu lista wywoływana
– jeśli wybierzemy typ – lista wywoływana – dla tego typu parametrów pojawia się pewien zakres gotowych procedur, z których możemy wybrać np. opcje: lista kontrahentów, lista kategorii, lista grup, lista towarów itp.
Wybieramy z tej listy procedurę lista kategorii, która wyświetli listę kategorii, a po wyborze konkretnej kategorii zwróci jego ID i przekaże w parametrze kategoria.

Po zatwierdzeniu kolejnych okien deklaracja parametru wygląda w ten sposób:

@PAR ?@LS0(OP_LIST.DLL|CALLLOOKUPKATLISTA())|kategoria|&kategoria:0|@? PAR@

Wywołanie parametru w zapytaniu wstawiamy jak poniżej:

VaN_KatId = ??Kategoria

Umożliwi to wybór z listy kategorii wybranej kategorii i przefiltrowanie dokumentów po określonej kategorii wybranej w nagłówku dokumentu w rejestrze VAT. Należy pamiętać o tym, aby w definicji parametru dynamicznego użyć kolumny liczbowej (w tym przypadku VaN_KatId).

Moduły Płace i Kadry

Filtry tworzone z poziomu zakładki [Ogólne]

Na liście pracowników w kadrach chcemy wyświetlić osoby, dla których została odnotowana informacja na temat wieloetatowości, a konkretnie posiadają ustawiony etat podstawowy.
W konstruktorze filtra, zakładka [Ogólne] w pole Nazwa wpisujemy wybraną nazwę filtra, następnie w celu dodania warunków klikamy ikonę plusa i wskazujemy pole PRI_Nadrzedny.

Określamy dla niego warunek „Jest równe” oraz podajemy wartość 1.
Następnie zapisujemy filtr ikoną .
Po zapisie jest on widoczny na liście filtrów dostępnych z poziomu listy pracowników.

Filtry tworzone z poziomu zakładki [Zaawansowane]


Filtr zaawansowany z parametrem dynamicznym

W przykładzie pokażemy jak odfiltrować pracowników, którzy posiadają przypisaną określoną kategorię.
Id kategorii, która została przypisana pracownikowi na jego formularzu kadrowym (zakładka 7 [Dodatkowe]) znajduje się w bazie w tabeli PracEtaty w polu PRE_KatId.
W filtrze musimy porównać wartość tego pola z wartością wybraną z listy słownikowej wszystkich kategorii. Potrzebny będzie parametr dynamiczny. Stworzymy go klikając prawym przyciskiem myszy w polu Filtr SQL i wybierając opcję Wstaw/edytuj deklarację parametru dynamicznego.

  • wskazujemy nazwę parametru, której użyjemy potem w zapytaniu (np. Kategoria)
  • wybór typów parametru:


Parametr typu lista rozwijana
– jeśli wybierzemy typ – lista rozwijana – dla tego typu parametrów należy zdefiniować odpowiednie zapytanie SQL podając w zapytaniu dwa pobierane pola z czego pierwsze musi być numeryczne (identyfikator) a drugie tekstowe (opis).

Należy pamiętać o tym, aby w definicji parametru dynamicznego użyć kolumny liczbowej (w tym przypadku PRE_KatId).

Pozostałe przykłady

Uwaga
Nowo dodane przykłady filtrów oznaczone są kolorem zielonym na liście.

Ogólne

Jak ustawić w filtrze datę bieżącą lub zakres dat, np. od pierwszego do ostatniego dnia miesiąca?

Aby po zdefiniowaniu filtrów, w których pada pytanie o datę lub zakres dat podpowiadała się data bieżąca, a nie data z dnia definiowania filtra, należy skorzystać z parametru dynamicznego. Na zakładce [Zaawansowane] w Konstruktorze filtra należy zdefiniować odpowiednie parametry dynamiczne (prawy klawisz myszy na polu z filtrem, Wstaw/edytuj deklarację parametru dynamicznego, potem, żeby go wykorzystać: Wstaw/edytuj odwołanie do parametru dynamicznego).
Przykładowy filtr (zakres dat na bieżący miesiąc) w polu Filtr SQL powinien mieć wpisane:

@PAR ?@D17|data1|&Data od:{DateClwFirstDay('m')} @? PAR@ @PAR ?@D17|data2|&Data do:{DateClwLastDay('m')} @? PAR@ TrN_DataDok >= ??data1 AND TrN_DataDok <= ??data2

Jak zawęzić listę kontrahentów do tych, których kod rozpoczyna się na zadaną literę?

Taki filtr może być przydatny przy seryjnym generowaniu Not odsetkowych, Ponagleń Zapłaty czy Potwierdzeń Salda, które jest dostępne z menu Ogólne/ Kontrahenci, pod ikoną Generacja na pasku zadań.
W Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać w polu Filtr SQL:

Knt_Kod LIKE ?@S100|Kod zaczyna się od:'' + '%'

Aby odfiltrować dokumenty Ponagleń zapłaty lub Potwierdzeń salda dla kontrahentów, których kod rozpoczyna się od zadanej litery, należy:
W Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać w polu Filtr SQL:

exists (select * from CDN.Kontrahenci where BDN_PodmiotID=Knt_KntId AND Knt_Kod LIKE ?@S100|Kod zaczyna się od:'' + '%')

Dla listy Not odsetkowych w polu Filtr SQL:

exists (select * from CDN.Kontrahenci where NON_PodmiotID=Knt_KntId AND Knt_Kod LIKE ?@S100|Kod zaczyna się od:'' + '%')

Jak wyfiltrować kontrahentów, którzy mają wybraną na karcie konkretną kategorię szczegółową (sprzedaży bądź zakupu)?

Aby odnaleźć kontrahentów z określoną kategorią sprzedaży, na liście kontrahentów należy uruchomić konstruktor filtra, a następnie na zakładce [Zaawansowane] w polu Filtr SQL należy wpisać:

@PAR ?@LS0(OP_LIST.DLL|CALLLOOKUPKATLISTA())|kategoria|&kategoria:0|@? PAR@
Knt_KatID= ??Kategoria

Z kolei, aby odnaleźć kontrahentów z określoną kategorią zakupu należy zastosować filtr:

@PAR ?@LS0(OP_LIST.DLL|CALLLOOKUPKATLISTA())|kategoria|&kategoria:0|@? PAR@
Knt_KatZakID= ??Kategoria

Przed odfiltrowaniem listy program będzie pytał o kategorię szczegółową.
Aby odnaleźć kontrahentów z kategorią zawierającą określoną frazę, to stosując poniższy filtr:

Knt_KatID=(select Kat_KatID from cdn.kategorie where Kat_KatID=Knt_KatID and kat_KodSzczegol like ?@S100|Kat szczeg:'')

podczas wpisywania kategorii, przed bądź za wpisywaną frazą należy wstawić znak „%” zastępujący dowolny ciąg znaków.

Jak zbudować filtr, który przed odfiltrowaniem listy kontrahentów z danego województwa będzie wyświetlał listę województw do wyboru?

Na liście kontrahentów, w Konstruktorze filtra na zakładce [Zaawansowane] należy wpisać:

@PAR ?@R(SELECT Id = 0, Kod = '' UNION
SELECT Id = 1, Kod = 'dolnośląskie' UNION
SELECT Id = 2, Kod = 'kujawsko-pomorskie' UNION
SELECT Id = 3, Kod = 'lubelskie' UNION
SELECT Id = 4, Kod = 'lubuskie' UNION
SELECT Id = 5, Kod = 'łódzkie' UNION
SELECT Id = 6, Kod = 'małopolskie' UNION
SELECT Id = 7, Kod = 'mazowieckie' UNION
SELECT Id = 8, Kod = 'opolskie' UNION
SELECT Id = 9, Kod = 'podkarpackie' UNION
SELECT Id = 10, Kod = 'podlaskie' UNION
SELECT Id = 11, Kod = 'pomorskie' UNION
SELECT Id = 12, Kod = 'śląskie' UNION
SELECT Id = 13, Kod = 'świętokrzyskie' UNION
SELECT Id = 14, Kod = 'warmińsko-mazurskie' UNION
SELECT Id = 15, Kod = 'wielkopolskie' UNION
SELECT Id = 16, Kod = 'zachodniopomorskie')|Woj|&Województwo: @? PAR@
Knt_Wojewodztwo = Case ??Woj
When 1 Then 'dolnośląskie'
When 2 Then 'kujawsko-pomorskie'
When 3 Then 'lubelskie'
When 4 Then 'lubuskie'
When 5 Then 'łódzkie'
When 6 Then 'małopolskie'
When 7 Then 'mazowieckie'
When 8 Then 'opolskie'
When 9 Then 'podkarpackie'
When 10 Then 'podlaskie'
When 11 Then 'pomorskie'
When 12 Then 'śląskie'
When 13 Then 'świętokrzyskie'
When 14 Then 'warmińsko-mazurskie'
When 15 Then 'wielkopolskie'
When 16 Then 'zachodniopomorskie'
Else ''
End

Pierwsza część (od @PAR do PAR@) jest to deklaracja parametru dynamicznego. Jeżeli zostanie wybrany parametr dynamiczny typu „Lista rozwijana” to zapytanie SQL musi zwrócić wynik dwukolumnowy – w pierwszym ma być wartość numeryczna (która zostanie podstawiona do zmiennej), a w drugim tekst (który zostanie wyświetlony na liście). Najwygodniej jest najpierw napisać sobie takie zapytanie np. w WinSQL-u (łatwo wtedy sprawdzić, czy nie ma w nim błędów), a potem przekleić do „wizarda parametru dynamicznego” w kroku 4 (wizard jest dostępny na zakładce [Zaawansowane] w Konstruktorze filtra w menu kontekstowym).
Druga część, to wykorzystanie tego parametru w zapytaniu SQL, które zostanie podstawione do filtra. Pod ??Woj program podstawi liczbę odpowiadającą wybranemu województwu, a konstrukcja CaseWhenThen … pozwoli na „przetłumaczenie” z powrotem liczby na tekst.

Kasa/Bank

Jak wyfiltrować dokumenty, które zostały rozliczone w styczniu 14 dni po terminie płatności?

Klient wystawiał noty odsetkowe tylko klientom, którzy zapłacili 14 dni po upływie terminu płatności. Zastosowanie filtra w Preliminarzu pozwoliło na wyodrębnienie dokumentów, które odpowiadały ww. zapytaniu. Wynik można wysłać do Excela i posortować wg nazwy kontrahenta.
Filtr należy zbudować z poziomu Preliminarza Płatności. W Konstruktorze filtra, na zakładce: [Zaawansowane] należy wpisać w polu Filtr SQL:

BZd_DataRoz BETWEEN CONVERT(DATETIME,'2018-01-01',120) AND CONVERT(DATETIME,'2018-01-31',120) And BZd_DataRoz > DateAdd(day, 14, BZd_Termin)

Jak wyfiltrować zdarzenia w Preliminarzu, które mają wybraną przez operatora formę płatności?

Na liście zdarzeń w Preliminarzu, pod ikonką Konstruktor filtra, na zakładce [Zaawansowane], w polu Filtr SQL wpisujemy:

@PAR ?@R(SELECT FPl_FPlId, FPl_Nazwa FROM CDN.FormyPlatnosci)|fp|&fp: @? PAR@
BZd_FPlId=??fp

Przed odfiltrowaniem pojawi się rozwijana lista z dostępnymi formami płatności.

Jak wyfiltrować z poziomu listy kontrahentów nierozliczone zdarzenia z preliminarza wystawione w zadanym okresie?

Filtr ten sprawdza, czy w Preliminarzu Płatności dla danego kontrahenta są zapisy przychodowe, zatwierdzone, nierozliczone i wystawione w zadanym okresie czasu.
Z poziomu listy kontrahentów w Konstruktorze filtra, na zakładce: [Zaawansowane] w polu Filtr SQL należy wpisać:

exists ( select * From CDN.BnkZdarzenia
where BZd_DataDok>= ?@D10-|Data od:
and BZd_DataDok<= ?@D10-|Data do: and Bzd_PodmiotTyp = 1 and Bzd_PodmiotID=Knt_KntID and BZd_Kierunek =1 and BZd_Stan>0
and BZd_KwotaSys<>BZd_KwotaRozSys)

Jak przefiltrować na preliminarzu płatności tylko te FA i FKOR, które nie mają powiązania z dokumentami magazynowymi?

Trzeba wykonać filtr w Preliminarzu płatności, który uwzględni tabelę TraNag, w której jest przechowywana taka informacja. Przykładowy filtr SQL będzie wyglądał tak:

exists (select * from CDN.TraNag where Trn_TrNID=Bzd_DokumentID And Bzd_DokumentTyp=1 and TrN_Rodzaj=302000 or Trn_Rodzaj=302001 or Trn_Rodzaj=302002 or Trn_Rodzaj=302002)

Jak wyfiltrować zapisy kasowo/bankowe zawierające kategorię szczegółowe należące do zadanej kategorii ogólnej?

Na liście zapisów kasowo/bankowych, w Konstruktorze filtra, na zakładce [Zaawansowane] w polu Filtr SQL należy wpisać:

exists (select Kat_KodOgolny, Kat_KodSzczegol from cdn.kategorie where BZp_KatID=Kat_KatID AND Kat_KodOgolny=?@S100|Kategoria ogólna:'')

Jak wyfiltrować listę kontrahentów, dla których są pary dokumentów do rozliczenia?

Chodzi o to aby użytkownik w menu Kasa/Bank/Rozliczenia, po wywołaniu listy kontrahentów, mógł ją zawęzić do tych, którzy mają nierozliczone dokumenty, które można ze sobą rozliczyć czyli np. Fakturę Sprzedaży i dokument KP lub Fakturę zakupu i dokument KW lub Fakturę Sprzedaży i Fakturę Zakupu lub Dokumenty KP i KW.
Można założyć filtr zaawansowany na liście kontrahentów w menu Ogólne/ Kontrahenci, który będzie korzystał z tabeli CDN.DokumentyKBView.
W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL można wpisać:

Exists (Select * From CDN.DokumentyKBView Where DKB_PodmiotTyp = 1 And DKB_PodmiotId = Knt_KntId And DKB_Rozliczono = 1 And DKB_Kierunek = Case DKB_TypDokumentuKB When 1 Then 1 Else -1 End)
And Exists (Select * From CDN.DokumentyKBView Where DKB_PodmiotTyp = 1 And DKB_PodmiotId = Knt_KntId And DKB_Rozliczono = 1 And DKB_Kierunek = Case DKB_TypDokumentuKB When 1 Then -1 Else 1 End)

Podobny filtr można stworzyć na liście pracowników podmieniając:

DKB_PodmiotTyp = 1 And DKB_PodmiotId = Knt_KntId

na

DKB_PodmiotTyp = 3 And DKB_PodmiotId = Pra_PraId

Filtr nie sprawdza waluty dokumentów.

Jak wyfiltrować w Preliminarzu płatności dokumenty, których termin płatności upłynął więcej niż 30 dni temu?

W Preliminarzu płatności, w Konstruktorze filtra, w polu Filtr SQL należy wstawić:

datediff ( d , BZd_Termin , {DateSQL(Today())} ) > 30

Filtr policzy różnicę pomiędzy datą bieżącą i terminem płatności i wyświetli te dokumenty, dla których różnica jest większa niż 30 dni.

Jak wyszukać zduplikowanych kontrahentów i zduplikowane zdarzenia w Preliminarzu?

W słownikach na liście kontrahentów można zastosować filtr, który sprawdzi czy są kontrahenci którym powtarza się numer NIP i dodatkowo pole NIP nie jest puste:

Knt_Nip IN
(SELECT Knt_Nip
FROM CDN.Kontrahenci WHERE Knt_Nip <> ''
GROUP BY Knt_Nip
HAVING COUNT ( Knt_Nip ) > 1 )

W Preliminarzu płatności filtr wyświetli zdarzenia o takim samym numerze obcym. To pozwoli sprawdzić czy w systemie nie wprowadzono dwa razy tego samego dokumentu:

BZd_NumerObcy IN
(SELECT BZd_NumerObcy
FROM cdn.bnkzdarzenia
GROUP BY BZd_NumerObcy
HAVING COUNT ( BZd_NumerObcy ) > 1 )

Jak wyfiltrować w Preliminarzu faktury, które w rejestrze VAT znajdują się w konkretnym podrejestrze?

W Preliminarzu należy uruchomić Konstruktor filtra, a następnie na zakładce [Zaawansowane] w polu Filtr SQL należy wpisać:

(Bzd_DokumentTyp='2' AND Bzd_DokumentID in (select Van_VanID from CDN.VatNag where Bzd_DokumentID=Van_VanID AND VaN_Rejestr=?@S100|Nazwa rejestru:'')) OR (Bzd_DokumentTyp='1' AND Bzd_DokumentID in (select Van_TrnID from CDN.VatNag where Bzd_DokumentID=Van_TrnID AND VaN_Rejestr=?@S100|Nazwa rejestru:''))

Przed odfiltrowaniem listy program będzie pytał o nazwę rejestru dla którego ma wyświetlić faktury.
Inny wariant powyższego filtra, gdzie nazwa rejestru VAT wybierana jest z rozwijalnej listy:

@PAR ?@R(SELECT LP=Gru_GruID, KOD=Gru_Nazwa FROM cdn.Grupy WHERE (Gru_Typ=1 OR Gru_Typ=2))|RejVat|&RejVat:0 |@? PAR@
(Bzd_DokumentTyp='2' AND Bzd_DokumentID in (select Van_VanID from CDN.VatNag where Bzd_DokumentID=Van_VanID AND VaN_Rejestr=??_RES2_RejVat))
OR
(Bzd_DokumentTyp='1' AND Bzd_DokumentID in (select Van_TrnID from CDN.VatNag where Bzd_DokumentID=Van_TrnID AND VaN_Rejestr=??_RES2_RejVat))

Filtry uwzględniają zarówno faktury wprowadzone bezpośrednio do Rejestrów VAT jak i faktury wystawione
w module Faktury i przeniesione do Rejestrów VAT.

Jak wyfiltrować kontrahentów, którzy nie są osobą fizyczną i suma nierozliczonych dokumentów jest większa niż podana przez operatora?

Na liście kontrahentów w menu Ogólne/ Kontrahenci, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select Knt_KntId from CDN.BnkZdarzenia where Knt_KntId=BZd_PodmiotID AND BZd_PodmiotTyp=1
having SUM(BZd_Kierunek * (BZd_KwotaSys-BZd_KwotaRozSys)) >?@N-15.4|Kwota:0)

Wyrażenie:

having SUM(BZd_Kierunek * (BZd_KwotaSys-BZd_KwotaRozSys))

pozwoli wyfiltrować różnicę nierozliczonych przychodów i rozchodów.
Filtr uwzględni wszystkie dokumenty z Preliminarza Płatności dla danego kontrahenta. Dla zawężonej listy będzie można wygenerować np. Potwierdzenie Salda lub Ponaglenie Zapłaty.
Poniżej filtr, który uwzględni również historyczność czyli stan rozliczeń na konkretny dzień podany przez operatora.
Na liście kontrahentów w menu Ogólne/ Kontrahenci, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu: Filtr SQL należy wpisać:

@PAR ?@D17|Dzien|&Na dzień:{Today()} @? PAR@ @PAR ?@N15.2|Kwota|&Kwota powyżej:0 @? @RH(999999) PAR@ @PAR ?@S3|Waluta|&Waluta:PLN @? @U() PAR@ Knt_Finalny = 0 AND EXISTS ( SELECT BZd_PodmiotId FROM (SELECT BZd_PodmiotId, BZd_Kierunek, BZd_Kwota, BZd_KwotaRoz = SUM(IsNull(BRK_Kwota,0)) FROM CDN.BnkZdarzenia LEFT OUTER JOIN (CDN.BnkRozRelacje JOIN CDN.BnkRozKwoty ON BRR_BRKId = BRK_BRKId) ON BZd_BZdId = BRR_ZDokId AND BRR_ZDokTyp = 1 AND (BRK_DataDok <= ??Dzien OR BRK_DataDok Is NULL) WHERE BZd_Stan > 0 AND BZd_PodmiotTyp = 1 AND BZd_PodmiotID = Knt_KntId AND BZd_DataDok <= ??Dzien AND CASE BZd_Waluta WHEN '' THEN 'PLN' ELSE BZd_Waluta END = ??Waluta AND BZd_Rozliczono <> 0 GROUP BY BZd_PodmiotId, BZd_Kierunek, BZd_Kwota, BZd_BZdId ) As TmpTable GROUP BY BZd_PodmiotId HAVING Sum(BZd_Kierunek * (BZd_Kwota-BZd_KwotaRoz)) > ??Kwota )

Jak wyfiltrować na liście zapisów kasowo bankowych te, które mają uzupełnione konto Wn lub konto Ma w kwotach dodatkowych?

Na liście zapisów kasowo/bankowych pod ikoną konstruktora filtra, na zakładce [Zaawansowane], w polu Filtr SQL wpisujemy:

exists (select * from CDN.KwotyDodatkowe where Kdd_DokumentID=Bzp_BzpID AND KDD_DokumentTyp=14 AND (Kdd_Segment1<>'' OR Kdd_Segment2<>''))

Aby wyfiltrować te które mają wpisane określone konto po stronie Wn , możemy użyć:

exists (select * from CDN.KwotyDodatkowe where Kdd_DokumentID=Bzp_BzpID AND KDD_DokumentTyp=14 AND Kdd_Segment1=?@S100|KontoWN:'')
Analogicznie konto Ma:

exists (select * from CDN.KwotyDodatkowe where Kdd_DokumentID=Bzp_BzpID AND KDD_DokumentTyp=14 AND Kdd_Segment2=?@S100|KontoMA :'')

lub wyszukując określoną kwotę w kwotach dodatkowych:

exists (select * from CDN.KwotyDodatkowe where Kdd_DokumentID=Bzp_BzpID AND KDD_DokumentTyp=14 AND Kdd_Kwota=?@S100|Kwota:'')

Filtr dla zapisów Kasowych/Bankowych, wyświetlający zapisy kontrahentów, którzy są przydzieleni do danego pracownika (ustawienie w Karcie Kontrahenta)

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_PRCW.DLL|CALLLOOKUPPRILISTA())|Pracownik|&Pracownik:0|@? PAR@
BZp_PodmiotTyp=1 and exists (select * from cdn.kontrahenci where BZp_PodmiotID=Knt_KntId and Knt_OpiekunId=??Pracownik and Knt_OpiekunTyp=3)

Filtr wyświetlający zdarzenia w preliminarzu dla dwóch (lub więcej) kontrahentów:

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKNTLISTA())|kod1|&kontrahent1:REG= @? PAR@ BZd_PodmiotID = ??kod1
OR
@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKNTLISTA())|kod2|&kontrahent2:REG= @? PAR@ BZd_PodmiotID = ??kod2

Filtr ograniczający listę wyświetlanych w Preliminarzu płatności dokumentów do płatności pochodzących z Faktur Zakupu z modułu Handel i zapisów z Rejestru zakupu VAT:

Filtr może być stosowany wtedy, gdy np. Faktury Zakupu z których towary mają wejść na magazyn wprowadzamy w module Handel, a Faktury Zakupu kosztowe – od razu w Rejestrach VAT. Po zastosowaniu takiego filtra w Preliminarzu możemy widzieć jednocześnie oba te rodzaje dokumentów (i tylko te dokumenty).
W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.TraNag where Trn_TrNID=Bzd_DokumentID And Bzd_DokumentTyp=1 and TrN_TypDokumentu=301) or exists (select * from CDN.VatNag where VaN_VaNID=Bzd_DokumentID And Bzd_DokumentTyp=2 and VaN_Typ=1)

Filtr ograniczający listę wyświetlanych w Preliminarzu płatności dokumentów do płatności pochodzących z Faktur Sprzedaży z modułu Handel i z Rejestru sprzedaży VAT.

Filtr może być stosowany wtedy, gdy np. Faktury Sprzedaży, z których towary mają wyjść z magazynu wprowadzamy w module Handel, a pozostałe faktury – od razu w Rejestrach sprzedaży VAT.
W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.TraNag where Trn_TrNID=Bzd_DokumentID And Bzd_DokumentTyp=1 and TrN_TypDokumentu=302) or exists (select * from CDN.VatNag where VaN_VaNID=Bzd_DokumentID And Bzd_DokumentTyp=2 and VaN_Typ=2)

W jaki sposób w Preliminarzu odnaleźć płatności mające wybrany rachunek bankowy po nazwie tego rachunku, określanego na karcie kontrahenta?

W Preliminarzu płatności w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@S30|Rachunek|&Rachunek:''@? PAR@
exists (select * from CDN.SchematPlatnosci where BZd_RachunekNr=SPL_RachunekNr and SPL_PodmiotID=BZd_PodmiotID and SPL_PodmiotTyp=1 and SPL_Opis=??Rachunek)

Jak na liście dokumentów rozliczonych odnaleźć te pochodzące z konkretnego rejestru VAT?

Na liście dokumentów rozliczonych w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@S30|Rejestr|&Rejestr:''@? PAR@
(BRK_LDokTyp=1 and exists (select * from CDN.BnkZdarzenia where BRK_LDokID=BZd_BZdID and BZd_DokumentTyp=2 and exists ( select * from CDN.VatNag where BZd_DokumentID=VaN_VaNID and VaN_Rejestr = ??Rejestr))) OR (BRK_PDokTyp=1 and exists (select * from CDN.BnkZdarzenia where BRK_PDokID=BZd_BZdID and BZd_DokumentTyp=2 and exists ( select * from CDN.VatNag where BZd_DokumentID=VaN_VaNID and VaN_Rejestr = ??Rejestr)))

W jaki sposób w Preliminarzu odnaleźć płatności z faktur sprzedażowych mających konkretny atrybut i wartość atrybutu?

W Preliminarzu płatności w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@LS20(SELECT [DeA_DeAId], [DeA_Kod], [DeA_Nazwa] FROM [CDN].[DefAtrybuty] WHERE [DeA_Typ]= 4|GENERICLOOKUP(Atrybuty dokumentów, 0, 1))|Atrybut|&Atrybut: @? @MSG(Wybór z listy) @TIP(Wybór z listy) PAR@
@PAR ?@S100|Wartosc|&Wartość: @? @MSG(Wartość atrybutu) @TIP(Wartość atrybutu) PAR@
EXISTS (SELECT * FROM CDN.TraNag JOIN CDN.DokAtrybuty ON DAt_TrNId = TrN_TrNId WHERE TrN_TrNID = BZd_DokumentID AND BZd_DokumentTyp=1 AND TrN_TypDokumentu=302 AND DAt_DeAId=??Atrybut AND DAt_WartoscTxt=??Wartosc)

W jaki sposób odnaleźć dokumenty nierozliczone kontrahentów ze statusem 'Partner’?

Na liście dokumentów nierozliczonych w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

(DKB_TypDokumentuKB=1 And EXISTS (Select * From CDN.BnkZdarzenia JOIN CDN.Kontrahenci ON BZd_PodmiotID=Knt_KntId AND BZd_PodmiotTyp=1 where DKB_DKBId=BZd_BZdID And Knt_Rodzaj_Partner=1)) OR (DKB_TypDokumentuKB=2 And EXISTS (Select * From CDN.BnkZapisy JOIN CDN.Kontrahenci ON BZp_PodmiotID=Knt_KntId AND BZp_PodmiotTyp=1 where DKB_DKBId=BZp_BZpID And Knt_Rodzaj_Partner=1))

W jaki sposób odnaleźć różnice kursowe wygenerowane przez zapisy kasowe/bankowe wprowadzone do konkretnego rejestru?

Na liście różnic kursowych w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@S30|Rejestr|&Rejestr:''@? PAR@
(BRK_LDokTyp=2 and exists (select * from CDN.BnkZapisy where BRK_LDokID=BZp_BZpID and exists ( select * from CDN.BnkRachunki where BRa_BRaID=BZp_BRaID and BRa_Symbol = ??Rejestr)))
OR
(BRK_PDokTyp=2 and exists (select * from CDN.BnkZapisy where BRK_PDokID=BZp_BZpID and exists ( select * from CDN.BnkRachunki where BRa_BRaID=BZp_BRaID and BRa_Symbol = ??Rejestr)))

W jaki sposób odnaleźć kontrahentów mających wystawione w module Kasa/Bank potwierdzenia sald w 2018 roku?

Na liście kontrahentów w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

Exists (Select * From CDN.BnkDokNag Where BDN_PodmiotID=Knt_KntID And BDN_PodmiotTyp=1 And BDN_Typ=223 And BDN_NumerPelny Like '%2018%')

W jaki sposób odnaleźć dokument kompensaty na którym wskazano dokument o określonym numerze?

Z poziomu Kasa/Bank/ Dokumenty kompensat w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@S50|Numer_dok|Numer szukanego dokumentu:''@? PAR@
EXISTS (select * from cdn.KompensatyElem left join cdn.BnkRozKwoty on KPE_BRKID = BRK_BRKID where (BRK_LNumer like ??_QNumer_dok + '%' or BRK_PNumer like ??_QNumer_dok + '%') and KPN_KPNID = KPE_KPNID)

Handel i Faktury

Jak wyfiltrować dokumenty FA, które wystawione są na klienta detalicznego ale nie ‘od netto’?

Trzeba wykonać zapytanie na liście Faktur Sprzedaży w module Faktury, uwzględniając tabelę Kontrahenci, gdzie Knt_Finalny = 1. W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Exists(select * from CDN.Kontrahenci where Trn_PodID=Knt_KntID AND TrN_PodmiotTyp=1 AND TrN_TypNB=2 AND Knt_Finalny=1)

Jak z listy faktur sprzedaży odfiltrować te faktury, które są nierozliczone lub rozliczone częściowo?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Exists (select * from CDN.BnkZdarzenia where TrN_TrNID=BZd_DokumentID AND Bzd_DokumentTyp='1' AND (Bzd_Kwota-Bzd_KwotaRoz<>0))

Filtr można zastosować również na liście faktur zakupu.

Jak wyfiltrować dokumenty handlowo-magazynowe, które wystawił określony operator?

Filtr powinien wyglądać w ten sposób:
Filtr SQL

@PAR ?@R(SELECT ID = Ope_OpeId, Kod = Ope_Kod From {OPBK()}.CDN.Operatorzy Order By Ope_Kod)|Operator|&Operator:1 @? PAR@
TrN_OpeZalID = ??Operator

Umożliwi to wybór z listy operatorów wybranego operatora i przefiltrowanie dokumentów po określonym operatorze. Filtr pokazuje dokumenty WYSTAWIONE przez danego operatora. Aby filtr reagował na dokumenty ZMODYFIKOWANE przez operatora należy zmienić TrN_OpeZalID na TrN_OpeModID

Jak filtrować kontrahentów wg atrybutów podpiętych na karcie kontrahenta?

Filtr SQL dla wyfiltrowania kontrahentów z zadanym kodem atrybutu z listy kontrahentów. Filtr przed odfiltrowaniem listy będzie wyświetlał listę atrybutów dla kontrahentów.

W celu dodania filtra należy w Konstruktorze filtra wywołanym z poziomu listy kontrahentów, na zakładce [Zaawansowane], w polu Filtr SQL wpisać:

@PAR ?@R(SELECT ID = DeA_DeAId, Kod = DeA_Kod FROM CDN.DefAtrybuty WHERE DeA_Typ=2 ORDER BY DeA_Kod)|KodAtr|&Kod atrybutu:ATR1 @? PAR@ exists(select * from CDN.KntAtrybuty where KnA_PodmiotId=Knt_KntId AND KnA_PodmiotTyp=1 AND KnA_DeAId = ??KodAtr )

Filtr SQL dla wyfiltrowania kontrahentów z określoną wartością atrybutu.

W celu dodania filtra należy w Konstruktorze filtra wywołanym z poziomu listy kontrahentów, na zakładce [Zaawansowane], w polu Filtr SQL wpisać:

Exists (Select * From CDN.KntAtrybuty Where Knt_KntId=KnA_PodmiotId AND KnA_PodmiotTyp=1 AND KnA_WartoscTxt LIKE '%' + ?@S100|Wartość:'' + '%')

Jak filtrować listę faktur wg atrybutów podpiętych na karcie kontrahenta?

Filtr SQL dla listy faktur pokazujący dokumenty wystawione na kontrahentów mających na swoich kartach przypisany określony atrybut. Filtr przed odfiltrowaniem listy będzie wyświetlał listę atrybutów kontrahentów.

W celu dodania filtra należy w Konstruktorze filtra wywołanym z poziomu listy faktur, na zakładce [Zaawansowane], w polu Filtr SQL wpisać:

@PAR ?@R(SELECT ID = DeA_DeAId, Kod = DeA_Kod FROM CDN.DefAtrybuty WHERE DeA_Typ=2 ORDER BY DeA_Kod)|KodAtr|&Kod atrybutu:ATR1 @? PAR@ exists(select * from CDN.KntAtrybuty Where KnA_PodmiotId=TrN_PodId AND KnA_PodmiotTyp=TrN_PodmiotTyp AND KnA_DeAId =??KodAtr)

Filtr SQL dla listy faktur pokazujący dokumenty wystawione na kontrahentów mających na swoich kartach przypisany atrybut z określoną wartością.

W celu dodania filtra należy w Konstruktorze filtra wywołanym z poziomu listy faktur, na zakładce [Zaawansowane], w polu Filtr SQL wpisać:

Exists (Select * From CDN.KntAtrybuty Where KnA_PodmiotId=TrN_PodId AND KnA_PodmiotTyp=TrN_PodmiotTyp AND KnA_WartoscTxt LIKE '%' + ?@S100|Wartość:'' + '%')

Jak wyfiltrować faktury, które zostały wystawione na kontrahentów, którzy mają przyporządkowanego opiekuna w formie operatora systemu Comarch ERP Optima?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = Ope_OpeID , Kod = Ope_Kod from {opbk()}.CDN.Operatorzy)|Operator|&Operator: @? PAR@
Exists (Select * From CDN.Kontrahenci Where Knt_OpiekunID = ??Operator and TrN_PodId = Knt_KntId And TrN_PodmiotTyp = 1)

Jak wyfiltrować listę Faktur Sprzedaży po opiekunie, który jest zapisany na karcie kontrahenta i jest to pracownik firmy?

Na liście faktur, w konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = Pra_PraID, Kod = Pra_Kod From CDN.PracKod)|Pracownik|&Pracownik: @? PAR@
Exists (Select * From CDN.Kontrahenci Where Knt_OpiekunID = ??Pracownik and TrN_PodID = Knt_KntID and TrN_PodmiotTyp = 1)

Jak wyfiltrować listę faktur jeśli na fakturze mam wpisaną daną kategorię nagłówka szczegółową?

Na liście faktur w module FA, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT Kat_KatID, Kat_KodSzczegol From CDN.Kategorie Where Kat_Poziom
= 2)|Kategoria|&Kategoria:AAA @? PAR@
TrN_KatID = ??Kategoria

Jak wyfiltrować faktury na liście faktur które są rozliczone po terminie?

Należy założyć filtr zaawansowany na liście faktur, który korzystał będzie z tabeli CDN.BnkZdarzenia.
W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.BnkZdarzenia where TrN_TrNID=BZd_DokumentID and
Bzd_DokumentTyp='1' and BZD_dataroz > Bzd_datareal)

Jak wyfiltrować dokumenty RO z listy RO, które są przekształcone do WZ a dodatkowo WZ ma wystawioną Fakturę Sprzedaży?

Na liście RO, po ikoną konstruktora filtra, na zakładce [Zaawansowane], w polu Filtr SQL wpisujemy:

EXISTS(Select * from cdn.tranagrelacje rel1 Where rel1.trr_trnid = trn_trnid and rel1.trr_fatyp = 306 and EXISTS(select * from cdn.tranagrelacje rel2 where rel2.trr_trnid = rel1.trr_faid and rel2.trr_fatyp =302))

Jak wyfiltrować dokumenty PA z listy PA, które są przekształcone do FA a FA skojarzone z tymi PA nie ma dokumentów WZ?

Na liście PA, pod ikoną konstruktora filtra, na zakładce [Zaawansowane], w polu Filtr SQL wpisujemy:

EXISTS (SELECT * FROM CDN.TraNag FA WHERE A.TrN_FaID = FA.TrN_TrNID AND
FA.TrN_FaID IS NOT NULL AND FA.TrN_Rodzaj = 302006 )

Jak wyfiltrować wybrany typ dokumentu z listy FA używając funkcji serwerowej?

Zastosowanie złożonego filtra na liście faktur (np. wyszukujących faktury finalne przekształcone z Faktury Pro Forma i powiązane z dokumentem WZ) nie działa przy księgowaniu dokumentów. Pojawia się komunikat „The multi-part identifier „A.trn_trnid” could not be bound.”

W związku z tym filtr z aliasem o postaci:

exists (select * from cdn.tranag A1 left join cdn.tranag A2 on A1.trn_trnid = A2.trn_faid left join cdn.tranag A3 on A1.trn_faid = A3.trn_trnid where A2.trn_rodzaj = 302200 and A.trn_trnid = A3.trn_trnid)

należy zastąpić filtrem: (select CDN.fn_PrzykladowaNazwa(Trn_trnID))=1,
gdzie funkcja serwerowa ma postać:

Create Function CDN.fn_PrzykladowaNazwa(@ATrnID int)
RETURNS int
AS
BEGIN
Declare @Result int
Set @Result = 0
select @Result = count(*) from cdn.tranag A1
join cdn.tranag A2 on A1.trn_trnid = A2.trn_faid
join cdn.tranag A3 on A1.trn_faid = A3.trn_trnid
where A2.trn_rodzaj = 302200 and A3.trn_trnid = @ATrnID
RETURN @Result
END
GO

Jak wyfiltrować kontrahentów, którzy np. w m-cu styczniu zapłacili po terminie ? Lista może być potrzebna do np. do sporządzenia masowych not odsetkowych dla kontrahentów.

Filtr z poziomu słowników kontrahentów. W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (
select * from CDN.BnkZdarzenia where BZd_PodmiotID=Knt_KntID and BZd_PodmiotTyp=1 and BZd_Rozliczono=1 and BZd_DataRoz BETWEEN ?@D17|Data od:75609 AND ?@D17|Data do:75609)
or exists (
select * from CDN.BnkZdarzenia where BZd_PodmiotID=Knt_KntID and BZd_PodmiotTyp=1 and BZd_Rozliczono=2 and BZd_DataRoz BETWEEN ?@D17|Data od:75609 AND ?@D17|Data do:75609)

Jak wyfiltrować listę kontrahentów aby uzyskać tylko tych kontrahentów z którymi prowadziliśmy transakcje ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

EXISTS (
SELECT [TrN_TrNID] FROM [CDN].[TraNag] WHERE [TrN_PodmiotTyp] = A.[Knt_PodmiotTyp] AND [TrN_PodID] = A.[Knt_KntId] AND [TrN_TypDokumentu] IN (302)
)

Typ dokumentu może przyjąć następujące wartości:
301 – [FZ] Faktura zakupu
302 – [FA] Faktura sprzedaży
303 – [PW] Przyjęcie wewnętrzne
304 – [RW] Rozchód wewnętrzny
305 – [PA] Paragon
306 – [WZ] Wydanie zewnętrzne
307 – [PZ] Przyjęcie zewnętrzne
308 – [RO] Rezerwacja odbiorcy
309 – [ZD] Zamówienie dostawcy
310 – [BOM] Bilans otwarcia magazynu
311 – [AI] Arkusz Inwentaryzacyjny
312 – [MM] Przesunięcie międzymagazynowe
313 – [PKA] Przyjęcie kaucji
314 – [WKA] Wydanie kaucji
317 – [PWP] Przyjęcie wewnętrzne produkcji
318 – [RWS] Rozchód wewnętrzny składników
320 – [FPF] Faktura ProForma
345 – [TF] Dokument TaxFree
350 – [FRR] Faktura RR

Jak wyfiltrować listę kontrahentów z którymi (nie było/lub było) transakcji po np. 01.01.2018r.?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:
a) Kontrahenci z którymi nie było transakcji

not exists (select * from CDN.TraNag Z where A.Knt_KntId = Z.TrN_PodId and TrN_PodmiotTyp = 1 and TrN_DataOpe >='2018-01-01')

b) Kontrahenci z którymi były transakcje

exists (select * from CDN.TraNag Z where A.Knt_KntId = Z.TrN_PodId and TrN_PodmiotTyp = 1 and TrN_DataOpe >='2018-01-01')

Jak wyfiltrować listę kontrahentów, z którymi (nie było/lub było) transakcji tylko FA, FZ po np. 01.01.2018r.?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:
a) Kontrahenci z którymi nie było transakcji

not exists (select * from CDN.TraElem where TrE_PodID=A.Knt_KntID and TrE_PodmiotTyp=A.Knt_PodmiotTyp and TrE_DataOpe >= '2018-01-01' and TrE_TypDokumentu IN (302,301))
b) Kontrahenci, z którymi były transakcje

exists (select * from CDN.TraElem where TrE_PodID=A.Knt_KntID and TrE_PodmiotTyp=A.Knt_PodmiotTyp and TrE_DataOpe >= '2018-01-01' and TrE_TypDokumentu IN (302,301))

Typ dokumentu:
301 – [FZ] Faktura zakupu
302 – [FA] Faktura sprzedaży

Jak wyfiltrować na liście zasobów lub cenniku towary uwzględnione z grupy głównej i grup dodatkowych ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPTWGLISTA())|TwrGrupa|&Grupa towarowa:@? PAR@
Twr_GIDNumer IN (SELECT GIDNumer FROM CDN.TwrInTwG(??TwrGrupa))

Jak wyfiltrować na liście zasobów lub cenniku towary uwzględnione tylko z grupy głównej ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPTWGLISTA())|TwrGrupa|&Grupa towarowa:@? PAR@
Twr_TwGGIDNumer = ??TwrGrupa

Jak wyfiltrować na liście zasobów lub cenniku towary, które na karcie mają określonego Dostawcę ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKNTLISTA())|Dostawca|&Dostawca:REG=!NIEOKREŚLONY! @? PAR@ Twr_KntId = ??Dostawca

Jak wyfiltrować na liście zasobów lub cennika towary względem kodu, wartości lub nazwy atrybutu przypisanego na karcie tego towaru ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:
a) potrzeba odfiltrować towary posiadające atrybut o kodzie (bez podawania wartości tego atrybutu)

@PAR ?@LS20(SELECT [DeA_DeAId], [DeA_Kod], [DeA_Nazwa] FROM [CDN].[DefAtrybuty] WHERE [DeA_Typ]= 1|GENERICLOOKUP(Atrybuty towarów, 0, 1))|Atrybut|&Atrybut: @? @MSG(Wybór z listy) @TIP(Wybór z listy) PAR@
EXISTS(SELECT [TwA_TwAId] FROM [CDN].[TwrAtrybuty] WHERE [Twr_TwrId] = [TwA_TwrId] AND [TwA_DeAId]= ??Atrybut)

b) potrzeba odfiltrować towary posiadające atrybut z określoną wartością

@PAR ?@LS20(SELECT [DeA_DeAId], [DeA_Kod], [DeA_Nazwa] FROM [CDN].[DefAtrybuty] WHERE [DeA_Typ]= 1|GENERICLOOKUP(Atrybuty towarów, 0, 1))|Atrybut|&Atrybut: @? @MSG(Wybór z listy) @TIP(Wybór z listy) PAR@
@PAR ?@S100|Wartosc|&Wartość: @? @MSG(Wartość atrybutu) @TIP(Wartość atrybutu) PAR@
EXISTS(SELECT [TwA_TwAId] FROM [CDN].[TwrAtrybuty] WHERE [Twr_TwrId] = [TwA_TwrId] AND [TwA_DeAId]= ??Atrybut AND [TwA_WartoscTxt] = ??Wartosc)

c) potrzeba odfiltrować towary po nazwie atrybutu towaru

EXISTS (SELECT * FROM CDN.TwRAtrybuty JOIN CDN.DefAtrybuty on TwA_DeAId = DeA_DeaID WHERE Twr_TwrId = TwA_TwrId AND DeA_Nazwa=?@S100|Nazwa atrybutu:'')

Jak wyfiltrować na liście zasobów lub cenniku zasoby po wartościach atrybutów towarów typu lista ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT DAE_DAEId, DAE_Wartosc from CDN.DefAtrElem)|wart_atr|&wart_atr:REG= @? PAR@ exists (select * from CDN.DefAtrElem, CDN.TwrAtrybuty where Twr_TwrId = TwA_TwrId and TwA_WartoscTxt in (select DAE_Wartosc from CDN.DefAtrElem where DAE_DAEId=??wart_atr))

Jak na liście zasobów lub cenniku wyfiltrować towary które mają jakikolwiek atrybut?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.TwrAtrybuty where TwA_TwrId = Twr_TwrId)

Jak na liście zasobów lub cenniku wyfiltrować towary które nie maja żadnego atrybutu?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

not exists (select * from CDN.TwrAtrybuty where TwA_TwrId = Twr_TwrId)

Jak na liście zasobów lub cenniku wyfiltrować towary, które w danym dniu były sprzedawane na dokumentach FA lub PA?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|data|&data:REG={Today()} @? PAR@
exists (select * from CDN.TraElem T where A.Twr_TwrId=T.TrE_TwrId and T.TrE_DataDok=??data and (T.TrE_TypDokumentu=302 or T.TrE_TypDokumentu=305))

Wariant filtra w którym podajemy zakres dat:

@PAR ?@D17|data_od|&data od:REG={Today()} @? PAR@
@PAR ?@D17|data_do|&data do:REG={Today()} @? PAR@
exists (select * from CDN.TraElem T where A.Twr_TwrId=T.TrE_TwrId and T.TrE_DataDok>=??data_od and T.TrE_DataDok<=??data_do and (T.TrE_TypDokumentu=302 or T.TrE_TypDokumentu=305))

Jak na liście zasobów lub cenniku wyfiltrować towary z którymi nie było transakcji po zadanej dacie?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|data|&Data:REG={Today()} @? PAR@
not exists (select * from CDN.TraElem Z where A.Twr_TwrId = Z.TrE_TwrId and TrE_DataOpe >= ??data)

Jak na liście zasobów lub cenniku wyfiltrować towary, których cena zakupu (ID=1) jest równa zero ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.TwrCeny C where A.Twr_TwrID=C.TwC_TwrID and C.TwC_TwCNumer=1 and C.TwC_Wartosc=0)

Jak na liście zasobów lub cenniku wyfiltrować poprzez wybór z listy ceny te towary, które mają tą cenę większą od zera?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = DfC_Lp, KOD = DfC_Nazwa from CDN.DefCeny)|cena|&cena:REG= @? PAR@
exists(select * from CDN.TwrCeny where TwC_TwCNumer=??cena and TwC_Wartosc>0 and TwC_TwrID=TwR_TwrID)

Jak na liście zasobów wyfiltrować towary po ilości, a nie ilości dostępnej przy zaznaczonym parametrze „zerowe”?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Twi_Ilosc>0

Jak wyfiltrować listę zasobów z którymi (nie było lub było) transakcji po np. 01.01.2018?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:
a) Towary z którymi nie było transakcji:

not exists (select * from CDN.TraElem Z where A.Twr_TwrId = Z.Tre_TwrId and Tre_DataOpe >= '2018-01-01')

b) Towary z którymi były transakcje:

exists (select * from CDN.TraElem Z where A.Twr_TwrId = Z.Tre_TwrId and Tre_DataOpe >= '2018-01-01')

Jak wyfiltrować WZ-ki po operatorze, który stworzył dokument źródłowy (FA lub PA)?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = Ope_OpeId, Kod = Ope_Kod From {OPBK()}.CDN.Operatorzy Order By Ope_Kod)|OperatorId|&Operator:1 @? PAR@ EXISTS (SELECT * FROM CDN.TraNag Z WHERE A.TrN_FaId
= Z.TrN_TrNID AND Z.TrN_OpeZalId= ??OperatorId)

Jak wyfiltrować na liście dokumenty handlowo-magazynowe po danej kategorii dokumentu?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKATLISTA())|kategoria|&kategoria:REG=-brak- @? PAR@
TrN_KatID = ??Kategoria

Jak wyfiltrować dokumenty WZ utworzone z FPF, do której były wygenerowane zaliczki, ale tylko dla FPF, które nie zostały jeszcze przekształcone do faktur finalnych?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

A.TrN_Rodzaj=306010 and exists (select * from CDN.Tranag Z where Z.TrN_TypDokumentu=320 and A.TrN_FaID=Z.TrN_TrNID and exists (select * from CDN.Tranag t2 where t2.Trn_Rodzaj=302200 and t2.TrN_FaID=Z.TrN_TrNID))

Jak wyfiltrować dokumenty WZ, które są skojarzone z innymi dokumentami ale ich daty wystawienia się różnią?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Exists (select * from CDN.TraNag Z where A.TrN_FaId = Z.TrN_TrNID and Z.TrN_DataWys != A.TrN_DataWys and A.Trn_Rodzaj=306004)

Jak wyfiltrować listę dokumentów handlowo-magazynowych aby nie wyświetlały się dokumenty, których wartość wynosi zero np. na korektach oraz te które są zaksięgowane do KH? Wtedy dokumenty, które nie są zaksięgowane, a ich wartość zakupu jest równa zero nie będą widoczne.

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

IsNull(TrN_DekId,0)=0 AND TrN_WartoscZakupu<>0

Jak wyfiltrować dokumenty PZ, które zostały skorygowane w całości?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select Z.TrN_ZwrID from CDN.TraNag Z where Z.TrN_ZwrId = A.TrN_TrNID and Z.TrN_Bufor=0 and (Z.TrN_Rodzaj=307001 or Z.TrN_Rodzaj=307002 or Z.TrN_Rodzaj=307003 or Z.TrN_Rodzaj=307004) group by Z.TrN_ZwrID having SUM(Z.Trn_RazemBrutto)*(-1)= A.Trn_RazemBrutto)

Jak wyfiltrować listę tych FA, których elementy mają wskazany przez nas atrybut towaru?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@S50|atrybut|&Kod atrybutu:REG=’’ @? PAR@ exists(select * from CDN.TraElem,
CDN.Twratrybuty join CDN.DefAtrybuty on TwA_DeAId = DeA_DeaID where Trn_TrnId = Tre_TrnId
and Tre_TwrId = TwA_TwrId and Dea_Kod=??atrybut)

Gdy szukamy atrybut towaru o zadanej wartości:

@PAR ?@S50|atrybut|&Wartość atrybutu:REG= @? PAR@ exists(select * from CDN.TraElem, CDN.Twratrybuty join CDN.DefAtrybuty on TwA_DeAId = DeA_DeaID where Trn_TrnId = Tre_TrnId and Tre_TwrId = TwA_TwrId and Twa_wartosctxt=??atrybut)

Można filtrować też mniej rygorystycznie z zastosowaniem wyrażenia: (LIKE ‘%’+…+’%’)

Jak wyfiltrować na liście Faktur sprzedaży listę faktur zaliczkowych bez faktur finalnych?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

A.Trn_Rodzaj = 302200 and exists (select * from CDN.TraNag Z where A.Trn_Faid = Z.Trn_TrnId and Z.Trn_TypDokumentu = 320 and Z.Trn_Faid is Null)

Niestety filtr ten nie będzie działał na standardowym wydruku listy faktur. Proszę w przypadku wydruku tak wyfiltrowanej listy korzystać z wydruku GenRap.

Jak wyfiltrować na liście faktur sprzedaży faktury zaliczkowe do których jest wystawiona faktura finalna?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

EXISTS (SELECT * FROM CDN.TraNag Z WHERE A.TrN_FaId = Z.TrN_TrNID AND Z.TrN_FaId is not null AND A.TrN_Rodzaj = 302200)

Jak wyfiltrować faktury sprzedaży, które są skojarzone z innymi dokumentami, ale ich daty wystawienia się różnią?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Exists (select * from CDN.TraNag Z where Z.TrN_FaId = A.TrN_TrNID and Z.TrN_DataWys != A.TrN_DataWys and A.Trn_Rodzaj=302004)

Jak wyfiltrować dokumenty handlowe których termin płatności mija w zadanym okresie.

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

TrN_Termin BETWEEN ?@D17|&Od:REG={Today()} @? AND ?@D17|&Do:REG={Today()} @?

Jak wyfiltrować listę dokumentów handlowo-magazynowych po wybranym towarze?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_TWR.DLL|CALLLOOKUPTWRLISTA())|Towar|&Towar:REG= @? PAR@
exists (select * from CDN.TraElem where Trn_TrnId = Tre_TrnId and Tre_TwrId = ??Towar)

Jak wyfiltrować faktury sprzedaży po fragmencie nazwy umieszczonej na zakładce -kontrahent odbiorca faktury? (Np. głównym nabywcą jest Makro W-dwa a odbiorcą faktury Makro Olsztyn).

W konstruktorze filtra wybieramy pole „TRN_OdbNazwa1 (Pierwsza linia nazwy odbiorcy)”, następnie po wywołaniu okna Edycja wyrażenia filtra należy z rozwijalnej listy w miejscu operator wybrać zawiera, a następnie zaznaczyć parametr Pytaj o wartość i podać tytuł zapytania np. Podaj nazwę odbiorcy i zatwierdzić wpis. Logiczna reprezentacja utworzonego w ten sposób wyrażenia filtrującego jest wyświetlana w dolnej części okna może wyglądać np.

TrN_OdbNazwa1 LIKE '%' + ?@S100|Podaj nazwę:'' + '%'.

W oknie Konstruktor filtra podać nazwę filtra.

Jak wyfiltrować dokumenty PA, które zostały skorygowane w całości?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select t.TrN_ZwrID from CDN.TraNag t where t.TrN_ZwrId = A.TrN_TrNID and t.TrN_Bufor=0 and (t.TrN_Rodzaj=305001 or t.TrN_Rodzaj=305005) group by t.TrN_ZwrID having SUM(t.Trn_RazemBrutto)*(-1)= A.Trn_RazemBrutto)

Jak wyfiltrować dokumenty RO, które mają oraz nie mają powiązania z dokumentami PWP?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:
a) mają powiązanie z dokumentami PWP:

EXISTS(SELECT TrN_TrNId FROM CDN.TraNag WHERE TrN_RelTrNId = A.TrN_TrNId AND TrN_TypDokumentu = 317)
b) nie mają powiązania z dokumentami PWP:

NOT EXISTS (SELECT TrN_TrNId FROM CDN.TraNag WHERE TrN_RelTrNId = A.TrN_TrNId AND TrN_TypDokumentu = 317)

Jak wyfiltrować na liście RO dokumenty, wg numeru obcego zamówienia?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

TrN_NumerObcy=?@S100|Nr zamówienia:''

Jak wyfiltrować dokumenty wg kontrahentów dla pola Nabywca?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT KnT_KntID, Knt_kod from CDN.kontrahenci)|kontrah|&kontrah:REG= @? PAR@
Trn_PodID=??kontrah

Jak wyfiltrować dokumenty wg kontrahentów dla pola Odbiorca?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKNTLISTA())|kod|&kod:REG=!NIEOKREŚLONY! @? PAR@
TrN_OdbiorcaTyp = 1 AND TrN_OdbId = ??kod

Jak wyfiltrować listę dokumentów zawierających dany atrybut dokumentu?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_TWR.DLL|CALLLOOKUPATRLISTADOK())|atr|&atr:REG= @? PAR@ exists (select * from CDN.DokAtrybuty where DAt_TrNId = TrN_TrNId and DAt_DeAId = ??atr)

Jak wyfiltrować listę dokumentów posiadających dany atrybut dokumentu, którego wartość zawiera podany przez użytkownika tekst?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_TWR.DLL|CALLLOOKUPATRLISTADOK())|atr|&atr:REG= @? PAR@
@PAR ?@S50|tekst_atrybutu|&tekst_atrybutu:REG= @? PAR@ exists (select * from CDN.DokAtrybuty where DAt_TrNId = TrN_TrNId and DAt_DeAId = ??atr and DAt_WartoscTxt Like '%'+??tekst_atrybutu+'%')

Jak wyfiltrować transakcje, gdzie na pozycjach użyto atrybutu (bez podawania wartości tego atrybutu)?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(SELECT [DeA_DeAId], [DeA_Kod], [DeA_Nazwa] FROM [CDN].[DefAtrybuty] WHERE [DeA_Typ]= 1|GENERICLOOKUP(Atrybuty towarów, 0, 1))|Atrybut|&Atrybut: @? @MSG(Wybór z listy) @TIP(Wybór z listy) PAR@
EXISTS(
SELECT [TrE_TrNId]
FROM [CDN].[TraElem] JOIN [CDN].[TraElemAtr] ON [TrE_TrEID] = [TrA_TrEId] AND
[TrE_TrNId] = [A].[TrN_TrNID]
WHERE [TrA_DeAId]=??Atrybut)

Jak wyfiltrować transakcje, gdzie na pozycjach użyto atrybutu z określoną wartością?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(SELECT [DeA_DeAId], [DeA_Kod], [DeA_Nazwa] FROM [CDN].[DefAtrybuty] WHERE [DeA_Typ]= 1|GENERICLOOKUP(Atrybuty towarów, 0, 1))|Atrybut|&Atrybut: @? @MSG(Wybór z listy) @TIP(Wybór z listy) PAR@
@PAR ?@S100|Wartosc|&Wartość: @? @MSG(Wartość atrybutu) @TIP(Wartość atrybutu) PAR@
EXISTS(
SELECT [TrE_TrNId]
FROM [CDN].[TraElem] JOIN [CDN].[TraElemAtr] ON [TrE_TrEID] = [TrA_TrEId] AND
[TrE_TrNId] = [A].[TrN_TrNID]
WHERE [TrA_DeAId]=??Atrybut
AND [TrA_Wartosc]=??Wartosc)

Jak wyfiltrować dokumenty do których nie były wykonane korekty?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

not exists (select t.TrN_ZwrID from CDN.TraNag t where t.TrN_ZwrId = A.TrN_TrNID)

Jak wyfiltrować dokumenty wystawione w dniu dzisiejszym ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

TrN_DataDok = {DateSQL(Today())}

Jak wyfiltrować dokumenty po wybranej formie płatności?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = FPl_FPlId, Kod = FPl_Nazwa From CDN.FormyPlatnosci)|formy_platnosci|&formy_platnosci:REG= @? PAR@
TrN_FPlId = ??formy_platnosci

Jeżeli chodzi nie tyle o konkretną formę płatności co o typ formy płatności to należałoby odwołać się do tabeli CDN.FormyPlatnosci. Wyrażenie:

EXISTS(SELECT * FROM CDN.FormyPlatnosci WHERE FPl_FPlId = TrN_FPlId AND FPl_Typ=1)
wpisane w polu Filtr SQL wyfiltruje dokumenty, które mają formę płatności o typie "gotówka".
FPl_Typ=2 - typ formy płatności "przelew".
FPl_Typ=3 - karta kredytowa

Jak wyfiltrować listę dokumentów po kategorii dokumentu ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKATLISTA())|kategoria|&kategoria:REG=-brak- @? PAR@ TrN_KatID = ??Kategoria

Jak wyfiltrować listę dokumentów po kategorii elementu?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKATLISTA())|Kategoria|&Kategoria:REG= @?TIP(Wybierz kategorię) PAR@ exists (select * from CDN.TraElem where Trn_TrnId=Tre_TrnId and Tre_KatId = ??kategoria)

Jak wyfiltrować listę dokumentów aby wyświetlały się wszystkie dokumenty oprócz tych w buforze, korekt i anulowanych?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

IsNull(TrN_Korekta,0)=0 AND TrN_Bufor=0

Jak wyfiltrować dokumenty, na których występują towary/ usługi z określonej grupy towarowej?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPTWGLISTA())|grupa|&grupa:REG= @? PAR@
exists( SELECT TrE_TrEID FROM CDN.TraElem JOIN CDN.Towary ON TrE_TwrID = Twr_TwrID WHERE TrE_TrNID = A.TrN_TrNID AND Twr_TwGGIDNumer=??grupa )

Jak wyfiltrować dokumenty wg. daty wystawienia oraz dowolnego fragmentu numeru pełnego dokumentu?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|Data|&Data wystawienia:REG=75828 @? PAR@ @PAR ?@S20|wartosc|&Podaj wartosc:REG= @? PAR@
TrN_NumerPelny LIKE '%' + ??wartosc+'%' and TrN_DataWys=??Data

Jak wyfiltrować dokumenty, gdzie występują elementy z określoną cechą i wartością?

Dla cech typu data, do pola wartość należy wpisać datę wg formatu RRRR-MM-DD. Żaden inny format nie będzie rozpoznany przez filtr.
Zapytanie należy wpisać z poziomu konstruktora filtra, bezpośrednio na zakładce Zaawansowane, w polu Filtr SQL:

@PAR ?@LS20(OP_TWR.DLL|CALLLOOKUPATRLISTATWR())|CechaID|&Cecha: @? @MSG(Wybór z listy) @TIP(Wybór z listy) PAR@
@PAR ?@S255|CechaWartosc|&Wartość: @? @MSG(Wartość cechy) @TIP(Wartość cechy) PAR@
EXISTS( SELECT TrE_TrEID FROM [CDN].[TraElem] JOIN [CDN].[TraSElemDost] ON [TrE_TrEID] = [TsD_TrEID] WHERE TrE_TrNID = A.TrN_TrNID AND (
(ISNULL([TsD_Cecha1_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha1_Format] = 4 AND [TsD_Cecha1_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha1_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha1_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha2_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha2_Format] = 4 AND [TsD_Cecha2_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha2_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha2_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha3_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha3_Format] = 4 AND [TsD_Cecha3_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha3_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha3_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha4_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha4_Format] = 4 AND [TsD_Cecha4_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha4_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha4_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha5_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha5_Format] = 4 AND [TsD_Cecha5_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha5_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha5_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha6_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha6_Format] = 4 AND [TsD_Cecha6_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha6_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha6_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha7_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha7_Format] = 4 AND [TsD_Cecha7_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha7_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha7_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha8_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha8_Format] = 4 AND [TsD_Cecha8_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha8_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha8_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha9_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha9_Format] = 4 AND [TsD_Cecha9_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha9_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha9_Wartosc] END = ??CechaWartosc)
OR (ISNULL([TsD_Cecha10_DeAId], 0) = ??CechaID AND CASE WHEN ([TsD_Cecha10_Format] = 4 AND [TsD_Cecha10_Wartosc] <> '') THEN CONVERT(VARCHAR(10), DATEADD("day", CONVERT(INT, [TsD_Cecha10_Wartosc]), '1800-12-28'), 21) ELSE [TsD_Cecha10_Wartosc] END = ??CechaWartosc)
))

Filtr można zastosować również na liście zasobów, wówczas należy zmodyfikować w wyrażeniu WHERE relacje po polach TrE_TwrId=A.Twr_TwrId

Jak wyfiltrować listę zasobów/cennik tylko do tych towarów które są powiązane z dostawcą (zdefiniowany kontrahent na karcie towaru zakładka Dodatkowe pole Dostawca)?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKNTLISTA())|KontrahentId|&Kontrahenci:REG=’!NIEOKREŚLONY!’ @? PAR@
Twr_KntId = ??KontrahentId

Jak wyfiltrować na liście dokumentów PZ, dokumenty nie powiązane z FRR?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

not exists (select trr_trrid from cdn.tranagrelacje where trn_trnid = trr_trnid and trr_fatyp = 301) or trn_faid not in (select trn_trnid FROM CDN.TraNag JOIN cdn.TraNagRelacje ON TrN_TrNId = TrR_TrNId where TrR_TrNId = TrN_TrNID and TrR_FaTyp=350)

Jak wyfiltrować na liście dokumentów PZ, dokumenty powiązane z FRR?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select trr_trrid from cdn.tranagrelacje where trn_trnid = trr_trnid and trr_fatyp = 301) and trn_faid in (select trn_trnid FROM CDN.TraNag JOIN cdn.TraNagRelacje ON TrN_TrNId = TrR_TrNId where TrR_TrNId = TrN_TrNID and TrR_FaTyp=350)

Jak wyfiltrować na liście dokumentów RO, dokumenty ze statusem w Realizacji do których wygenerowano dokument FA bez WZ?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from cdn.tranagrelacje where TrR_FaTyp = 302 and trn_trnid = trr_trnid and trn_zwroconocalailosc = 2)

Jak wyfiltrować na liście faktur sprzedaży, dokumenty korekt ilościowych do dokumentów pierwotnych, które nie zostały przekształcone do dokumentu PW?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

not exists (select * from CDN.TraNagRelacje where TrR_TrNId = TrN_TrNID and (TrR_FaTyp=303 or TrR_FaTyp=306) and trn_rodzaj = 302101) and trn_rodzaj = 302101

Jak wyfiltrować na liście faktur, faktury zaliczkowe które nie mają skojarzonych faktur finalnych?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Trn_TrnId not in ( select A.TrR_FaId from cdn.tranagrelacje B left outer join cdn.Tranag T on TrR_TrNID = T.TrN_TrNID left outer join cdn.TraNagRelacje A on B.TrR_FaId = A.TrR_TrNId where B.TrR_FaTyp = 320 AND TrN_Rodzaj in (302009, 302004)) and trn_rodzaj = 302200

Wyszukiwanie dokumentów z konkretnej dostawy. Filtr działa na liście WZ, wyświetli te dokumenty WZ, które rozchodowują towar z konkretnego (wskazanego w filtrze) PZ.

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@S30|numer|&numer:REG= @? PAR@
exists (select * from CDN.TraNag TRN2, CDN.TraElem TRE1, CDN.TraElem TRE2, CDN.TraSElem TRS1, CDN.TraSElem TRS2 where A.TrN_TrNID=TRE1.TrE_TrNID and TRS1.TrS_TrEId=TRE1.TrE_TrEID and TRS1.TrS_TrSIdDost=TRS2.TrS_TrSId and TRS2.TrS_TrEId = TRE2.TrE_TrEID and TRE2.TrE_TrNId=TRN2.TrN_TrNID and TRN2.TrN_NumerPelny like '%'+??numer+'%')

Wyszukiwanie dokumentów z konkretnych wydań. Filtr dla listy dokumentów PZ, po wskazaniu numeru dokumentu WZ wyświetli dokumenty PZ którymi towar z WZ został przyjęty.

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@S30|numer|&numer:REG= @? PAR@
exists (select * from CDN.TraNag TRN2, CDN.TraElem TRE1, CDN.TraElem TRE2, CDN.TraSElem TRS1, CDN.TraSElem TRS2 where A.TrN_TrNID=TRE1.TrE_TrNID and TRS1.TrS_TrEId=TRE1.TrE_TrEID and TRS1.TrS_TrSId=TRS2.TrS_TrSIdDost and TRS2.TrS_TrEId = TRE2.TrE_TrEID and TRE2.TrE_TrNId=TRN2.TrN_TrNID and TRN2.TrN_NumerPelny like '%'+??numer+'%')

Jak wyfiltrować towary z ceną domyślną w walucie np. EUR?

W menu Ogólne/ Cennik, w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.TwrCeny where TwC_TwrID=Twr_TwrId and TwC_TwCNumer=Twr_TwCNumer and TwC_Waluta='EUR')

Jak wyfiltrować towary z określonym kodem CN na liście cennikowej?

Należy założyć filtr zaawansowany który będzie korzystał z tabeli CDN.KodyCN. Filtr będzie wyglądał tak:

@PAR ?@R(SELECT KCN_KcNID, KCN_Kod From CDN.KodyCN)|Kody_CN|&Kody CN: @? PAR@
Twr_KCNID = ??Kody_CN

Jak wyfiltrować towary, które nie mają ustalonego kodu CN?

W menu Ogólne/ Cennik, w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Twr_KCNID is null

Jak wyfiltrować towary, które nie mają ustalonego kraju pochodzenia?

W menu Ogólne/ Cennik, w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Twr_KrajPochodzenia = ''

Jak wyfiltrować towary, które nie mają wprowadzonej wagi lub waga jest zerowa?

W menu Ogólne/ Cennik, w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Twr_WagaKG is null or Twr_WagaKG = 0

Jak wyfiltrować towary z przypisaną jedną grupą?

W menu Ogólne/ Cennik, w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select count (TwG_Kod) from CDN.TwrGrupy Where TwG_GIDTyp = 16 and TwG_GIDNumer = Twr_TwrId Group by TwG_Kod Having count (TwG_Kod) =1)

Jak wyfiltrować Dokumenty WZ mające powiązanie (bądź nie mające powiązania) z Fakturą Sprzedaży?

W menu Handel/ Wydania zewnętrzne, w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:
– w celu znalezienia dokumentów WZ mających powiązanie z fakturą:

exists (select * from CDN.TraNagRelacje where TrR_TrNId = TrN_TrNID and TrR_FaTyp=302)

– w celu znalezienia dokumentów WZ nie mających powiązania z fakturą:

not exists (select * from CDN.TraNagRelacje where TrR_TrNId = TrN_TrNID and TrR_FaTyp=302)

Jak wyfiltrować Dokumenty WZ powiązane z Fakturami Sprzedaży i Paragonami, gdzie daty wystawienia dokumentów handlowych znajdują się w podanym przedziale?

W menu Handel/ Wydania zewnętrzne, w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|data_od|&data od:REG={Today()} @? PAR@
@PAR ?@D17|data_do|&data do:REG={Today()} @? PAR@
Exists (select * from CDN.TraNag Z where A.TrN_FaId = Z.TrN_TrNID and Z.TrN_DataWys>= ??data_od and Z.TrN_DataWys <= ??data_do and A.Trn_TypDokumentu=306 and (Z.TrN_TypDokumentu=302 or Z.TrN_TypDokumentu=305)) Druga wersja filtra z wykorzystaniem tabeli CDN.TraNagRelacje: @PAR ?@D17|data_od|&data od:REG={Today()} @? PAR@ @PAR ?@D17|data_do|&data do:REG={Today()} @? PAR@ exists(select * from CDN.TraNagRelacje join CDN.TraNag Z on Trr_faid = z.trn_trnid where TrR_TrNId = A.TrN_TrNID and TrR_FaTyp in (302,305) and Z.TrN_DataWys>= ??data_od and Z.TrN_DataWys
<= ??data_do)

Jak na liście dokumentów WZ ukryć te mające powiązania z Fakturą Sprzedaży/Fakturą korygującą, które zostały całkowicie zwrócone?

W menu Handel/ Wydania zewnętrzne, w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

TrN_TrNID NOT IN (SELECT TrR_TrNID FROM CDN.TraNagRelacje WHERE TrR_FaTyp IN (302)) AND TrN_TrNID NOT IN ( SELECT Zrd.Tre_TrNID from CDN.TraElem [Kor] LEFT JOIN CDN.TraElem [Zrd] on Kor.TrE_ZwrId = Zrd.TrE_TrEId WHERE Kor.TrE_Aktywny <> 0 AND Zrd.TrE_TypDokumentu = 306 GROUP BY Zrd.TrE_TrNID, Zrd.TrE_Ilosc HAVING Zrd.Tre_Ilosc + SUM(Kor.Tre_Ilosc) <= 0) AND TrN_Korekta = 0 AND TrN_Anulowany = 0

Jak wyfiltrować dokumenty po opisie pozycji?

Na liście dokumentów w module Handel/Faktury w Konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@ABC(' ')@? PAR@
@PAR ?@LS20(SELECT Tre_TrnId, TrE_TwrOpis AS [Opis], TrE_TwrKod AS [Kod], TrE_TwrNazwa AS [Nazwa] FROM CDN.TraElem
WHERE REPLACE(REPLACE(REPLACE(REPLACE(TrE_TwrOpis,CHAR(13),''), char(10),''),CHAR(9), ''),' ','') <> '' AND TrE_TypDokumentu = 302
ORDER BY TrE_TwrOpis |GENERICLOOKUP(Towary z opisem na dokumencie, 0, 1))|TwrOpis|&Opis Towaru:| 6@? PAR@
Trn_TrnId = ??TwrOpis

CRM

Jak wyfiltrować listę kontaktów/ zadań aby widoczne były CRM-y zmodyfikowane danego dnia?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|data|&Data:REG={Today()} @? PAR@
FLOOR(CONVERT(DECIMAL(14,4), CRK_TS_MOD)) = FLOOR(CONVERT(DECIMAL(14,4), CONVERT(DATETIME,??data ,120)))

Jak zrobić aby właściciel firmy na liście kontaktów i zadań widział swoje zadania i zadań podwładnych, natomiast podwładni widzą tylko i wyłącznie swoje zadania ?

W Konfiguracji/ Program/ Użytkowe/ Parametry należy zaznaczyć parametr Stosuj filtry obowiązkowe.
Na zakładce Opcje w Typie filtra należy zaznaczyć Obowiązkowy oraz z menu wybrać akronim Operatora.
Do zadania może być przypisany pracownik lub operator. W bazie danych ID pracownika jak i operatora może być takie samo albo różne, dlatego w filtrze można wykorzystać również pole CRK_OpiekunTyp gdzie typ=8 to operator a typ =3 to pracownik.
W polu Filtr SQL można wpisać:

CRK_OpiekunId= {OperatorID} and CRK_OpiekunTyp =8

Gdzie {OperatorID} oznacza ID operatora aktualnie zalogowanego.
Na zakładce [Opcje] w Typie filtra należy zaznaczyć Obowiązkowy oraz z menu wybrać akronim Operatora.

Obieg dokumentów

Jak wyfiltrować w bibliotece dokumentów wszystkie dokumenty które nie mają powiązań z transakcjami ?

Będą to zarówno dokumenty firmowe, jak i wspólne (te z zasady nie są kojarzone z innymi transakcjami). Tak więc ewentualnie należy dodatkowo zawęzić listę dokumentów tylko do firmowych (parametr na liście).
Zapytanie należy wpisać z poziomu konstruktora filtra, bezpośrednio na zakładce [Zaawansowane], w polu Filtr SQL.

not exists (select * from CDN.DokRelacje Z where A.Dnv_DonId = Z.Dor_ParentId and Z.Dor_ParentTyp = 750)

Jak wyfiltrować dokumenty z biblioteki dokumentów, które są na zadanym etapie realizacji (etap bieżący) i etap ten jest etapem głównym?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = SE_SEID, Kod = SE_Symbol From {OPBK()}.CDN.SekEtapy Order By
SE_Symbol )|EtapID|&Etap:1 @? PAR@
exists (select * from CDN.DokNagProcesEtapy, CDN.DokNagEtapy where DNV_DoNID=DnPr_DoNID and DnPr_DnPrID=DnE_DnPrID and DnE_EtapID=??EtapID and A.DNV_EtapBiezacyLp=DnPr_Lp and DnPr_Poziom=1)

Jak wyfiltrować dokumenty z biblioteki dokumentów, które są na zadanym etapie realizacji (etap bieżący)?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = SE_SEID, Kod = SE_Symbol From {OPBK()}.CDN.SekEtapy Order By
SE_Symbol )|EtapID|&Etap:1 @? PAR@
exists (select * from CDN.DokNagProcesEtapy, CDN.DokNagEtapy where DNV_DoNID=DnPr_DoNID and DnPr_DnPrID=DnE_DnPrID and DnE_EtapID=??EtapID and A.DNV_EtapBiezacyLp=DnPr_Lp)

Jak wyfiltrować dokumenty z biblioteki dokumentów, które w schemacie mają zadany etap realizacji?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = SE_SEID, Kod = SE_Symbol From {OPBK()}.CDN.SekEtapy Order By
SE_Symbol )|EtapID|&Etap:1 @? PAR@
exists (select * from CDN.DokNagProcesEtapy, CDN.DokNagEtapy where DNV_DoNID=DnPr_DoNID and DnPr_DnPrID=DnE_DnPrID and DnE_EtapID=??EtapID)

Księgowość i Środki Trwałe

Jak wyfiltrować z rejestrów VAT faktury, które mają datę deklaracji VAT-7 inną niż rejestr VAT?

W Rejestrze (zakupu lub sprzedaży) VAT, w Konstruktorze filtra, na zakładce: [Zaawansowane]należy wpisać w polu Filtr SQL:

Van_RokMies<>Van_DeklRokMies

Filtr zastosowany z zakładki Rejestr VAT, zakres dat: od 2018/01/01 do 2018/01/31 pozwoli wyświetlić np. fakturę wystawioną 5 stycznia 2018, a mającą wejść na deklarację w lutym 2018.

Przeglądam dokumenty RVAT za pierwszy kwartał, chciałbym wyfiltrować te, które są rozliczane w deklaracjach za następne miesiące. Jak mogę to wykonać?

Polem odpowiedzialnym za rozliczenie wpisu w deklaracji za dany miesiąc to pole: VaN_DeklRokMies. Pole to agreguje w postaci liczby całkowitej rok oraz miesiąc, np.: dokument przeznaczony do rozliczenia w deklaracji za kwiecień 2018 będzie w tym polu posiadał wpis : 201804
Możemy, więc wprowadzić filtr zaawansowany , który będzie wykorzystywał to pole wpisując w polu Filtr SQL:

@PAR ?@D17|DATA_OD|&Od :{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|DATA_DO|&Do :{DateClwFirstDay('m')} @? PAR@
YEAR(??DATA_OD ) * 100 + MONTH(??DATA_OD) <=VaN_DeklRokMies and YEAR(??DATA_DO ) * 100 + MONTH(??DATA_DO) >=VaN_DeklRokMies

Filtr przed uruchomieniem będzie odpytywał o daty określające przedział – Od i Do. – z wskazanej daty znaczenie będą miały jedynie miesiąc oraz rok.

Czy można utworzyć filtr dla Rejestru VAT po akronimie pracownika wybranego na formatce faktury na zakładce Kontrahent?

W polu Filtr SQL można wpisać:

VaN_PodZalId=(select Pre_PreID from cdn.pracetaty where Pre_kod like ?@S100|Akronim pracownika:'') AND VaN_PodmiotZalTyp=3

Przed odfiltrowaniem listy program będzie pytał o akronim pracownika.
Można również posłużyć się deklaracją parametru dynamicznego i przekazać do zapytania kod pracownika wyświetlony na liście – w polu Filtr SQL wpisujemy:

@PAR ?@LS20(OP_PRCW.DLL|CALLLOOKUPPRILISTA())|pracownik|&pracownik:REG= @? PAR@
VaN_PodZalId=??pracownik AND VaN_PodmiotZalTyp=3

Jak z listy rejestru VAT odfiltrować te faktury, które są nierozliczone lub rozliczone częściowo i dodatkowo forma płatności jest różna od gotówki?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.BnkZdarzenia where VaN_VaNID=BZd_DokumentID and (Bzd_Kwota<>Bzd_KwotaRoz)) AND VaN_FplID<>1

Jak w Rejestrach VAT wyfiltrować faktury z podaną kategorią tak aby wyfiltrowaną listę można było zaznaczyć i zaksięgować?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKATLISTA())|Kategoria|&Kategoria: @? PAR@
VaN_KatId = ??Kategoria

Program będzie pytał o kategorię przed filtrowaniem i dodatkowo będzie ją można wybrać z listy kategorii. Po zawężeniu listy zaznaczamy faktury np. kombinacją klawiszy CTRL + A i księgujemy wybranym schematem.

Jak wyfiltrować faktury w Rejestrach VAT zawierające kategorie szczegółowe należące do zadanej kategorii ogólnej?

a) dla kategorii nagłówka dokumentu:
W konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select Kat_KodOgolny, Kat_KodSzczegol from cdn.kategorie where VaN_KatID=Kat_KatID AND Kat_KodOgolny=?@S100|Kategoria ogólna:'')

b) dla kategorii wybranych w elementach faktury VAT (kategorie przy poszczególnych stawkach VAT):
W konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

Exists (select * from cdn.vattab Join cdn.kategorie on vat_katid = kat_katid where vat_vanid = van_vanid and Kat_KodOgolny=?@S100|Kategoria ogólna:'')

Jak wyfiltrować w Rejestrach VAT listę faktur całkowicie rozliczonych i zakwalifikowanych do danej deklaracji VAT-7?

Taka lista może być potrzebna tym firmom, które potrzebują ustalić wartość zapłaconych Faktur Zakupu dla potrzeb ustalenia kwoty VAT do zwrotu na rachunek bankowy podatnika.
Aby zrobić wydruk takich faktur, należy:
1. Zbudować filtr: na zakładce [Zaawansowane] w Konstruktorze filtra w polu Filtr SQL należy wpisać:

VaN_DeklRokMies=?@N-15.4|Rok i miesiąc VAT-7:0

2. Na zakładce Rejestr VAT w Rejestrach VAT, zawęzić listę faktur, za pomocą ww. filtra, do tych które są zakwalifikowane tylko do deklaracji np. listopadowej (gdy przed odfiltrowaniem listy program zapyta o rok
i miesiąc deklaracji – wpisać: 201811).
3. Wykonać odpowiedni wydruk dokumentów rozliczonych z menu wydruków.
Listę faktur można uzyskać również bezpośrednio na ekranie.
W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.BnkZdarzenia where VaN_VaNID=BZd_DokumentID AND BZd_DokumentTyp=2 AND (BZd_KwotaSys=BZd_KwotaRozSys) AND VaN_DeklRokMies=?@N-15.4|Rok i miesiąc VAT-7:0)

Przed filtrowaniem program pyta o datę deklaracji VAT-7 – należy wpisać rok i miesiąc w formacie np. 201611. Tak wyfiltrowanej listy nie da się wydrukować ze względu na składnię filtra, ale można ją wysłać do arkusza Excel.

Jak wyfiltrować listę faktur po kolumnie KPiR, do której dokumenty mają być zaksięgowane?

Na liście faktur w rejestrze VAT, w konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT Id = 1, Kod = 'Sprzedaż' UNION SELECT Id = 2, Kod = 'Pozostałe' UNION SELECT Id = 3, Kod = 'Towary' UNION SELECT Id = 4, Kod = 'Uboczne' UNION SELECT Id = 5, Kod = 'Reklama' UNION SELECT Id = 6, Kod = 'Wynagrodzenia' UNION SELECT Id = 7, Kod = 'Inne' UNION SELECT Id = 8, Kod = 'Zaszłości')|Kolumna|&Kolumna: @? PAR@
exists (Select * From CDN.VatTab Where VaT_VaNID = VaN_VaNId And VaT_KolumnaKPR = ??Kolumna )

Filtr ma taką właściwość, że jeśli jest jakiś zapis, który ma być zaksięgowany w części do jednej kolumny,
a w części do innej, to na liście widać go w pełnej kwocie, a na wydruku w kwocie do zaksięgowania do wskazanej kolumny.

Jak uzyskać listę transakcji nierozliczonych, pochodzących z Rejestru VAT, na danym koncie rozrachunkowym?

W menu Księgowość/Księgowość/ Dzienniki, zakładka Konto, należy wybrać odpowiednie konto, a w Konstruktorze filtra, na zakładce Zaawansowane, w polu Filtr SQL wpisać:

exists(select * from CDN.VatNag join CDN.BnkZdarzenia on VaN_VaNID=BZd_DokumentID where VaN_DekID=DeN_DeNId AND Bzd_DokumentTyp=2 AND (Bzd_Kwota-Bzd_KwotaRoz<>0)) OR exists(select * from CDN.VatNag join CDN.TraNag on TrN_VaNId=VaN_VaNID join CDN.BnkZdarzenia on TrN_TrNID=BZd_DokumentID where VaN_DekID=DeN_DeNId AND Bzd_DokumentTyp=1 AND (Bzd_Kwota-Bzd_KwotaRoz<>0))

Filtr zawęzi listę do tych dekretów, które pochodzą z Rejestru VAT (zostały wprowadzone bezpośrednio do Rejestru VAT lub przesłane z modułu FA i zaksięgowane z Rejestru VAT) i nie są rozliczone lub są rozliczone częściowo.

Jak sprawdzić czy poprawnie wprowadzono Kwoty dodatkowe na fakturach w Rejestrze VAT?

Jeżeli jest jakaś reguła np. zwykle na Fakturach Zakupu rozksięgowujemy kwotę netto na różne konta „czwórek” czy „piątek” i suma księgowań po stronie Wn ma się równać kwocie netto dokumentu, to można zbudować filtr, który będzie wyświetlał faktury nie spełniające tego warunku.
W Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

not exists (select * from CDN.KwotyDodatkowe where Kdd_DokumentID=VaN_VaNID AND KDD_DokumentTyp=2 AND Kdd_Segment1<>''
having SUM(Kdd_Kwota) = VaN_RazemNetto)

Zostaną wyfiltrowane wszystkie pozycje różne od tych, na których suma kwot dodatkowych WN jest równa kwocie netto faktury.

Jak wyfiltrować środki trwałe aktywne, całkowicie umorzone?

Poniżej przykład filtra, który wyświetli środki trwałe aktywne, których wartość bieżąca bilansowa minus odpisy umorzeniowe = 0. Filtr nie uwzględnia historyczności i bierze pod uwagę tylko amortyzację bilansową.

SrT_Stan=0 and SrT_WartoscBilan + ( Select IsNull(Sum( SrH_KwotaBilan - SrH_KwotaUm ), 0) From CDN.TrwaleHist Where SrH_SrTId = SrT_SrTId And SrH_TypDokumentu<>4) = 0

Jak w dziennikach księgowych wyfiltrować dekrety, których dokumenty źródłowe były płatne gotówką?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL można wpisać:

exists (select * from CDN.TraNag where
DeN_DeNId = TrN_DekId and TrN_FPlId=1) OR exists(select * from CDN.VatNag where DeN_DeNId=VaN_DekID AND VaN_FplID=1)
TrN_FPlId=1 i VaN_FplID=1 oznacza formę płatności o ID 1. Standardowo jest to forma płatności o nazwie „gotówka”.

Jak wyfiltrować różnice kursowe, które powstały z rozliczenia dokumentów innych niż te pochodzące z Ewidencji dodatkowej?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

''=''AND(BRK_LDokTyp='1' AND exists(select*from CDN.BnkZdarzenia where BRK_LDokID=Bzd_BzdID and BZd_DokumentTyp<>12))OR(BRK_PDokTyp='1' AND exists(select*from CDN.BnkZdarzenia where BRK_PDokID=Bzd_BzdID and BZd_DokumentTyp<>12))

Powyższy filtr wyświetli różnice kursowe, na których co najmniej jeden z dokumentów nie pochodzi z Ewidencji dodatkowej. Wyfiltrowane różnice kursowe można zaznaczyć i zaksięgować.
BRK_LDokTyp=’1′ czyli że typ lewego dokumentu to dokument pochodzący z tabeli BnkZdarzenia.
BZd_DokumentTyp=1 to typ dokumentu w BnkZdarzenia np.
1 – faktura z modułu Faktury;
12 – faktura z Rejestru VAT;
12 – dokument z Ewidencji dodatkowej;

Jak sprawdzić, która faktura z rejestru zakupów VAT nie została zaksięgowana na konto VAT’u lub została zaksięgowana, ale kwota VAT z faktury nie zgadza się z kwotą VAT na koncie?

W Rejestrze zakupów VAT można stworzyć filtr, który wyświetli te faktury, których suma kwoty VAT nie jest równa kwocie zaksięgowanej na konto VAT’u. W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL można wpisać:

VaN_DekId Is Not Null And Not Exists (Select DeK_AccId From CDN.DekretyKonta Join CDN.Konta On DeK_AccId = Acc_AccId Where DeK_DeNId = VaN_DekId And Acc_Numer='221-02' And Year(DeK_DataDok)
= Year(VaN_DataZap) And Month(DeK_DataDok) = Month(VaN_DataZap) Group By DeK_AccId Having Sum(DeK_Kwota) = VaN_RazemVat)

W pole Acc_Numer=’221-2′ należy wpisać numer konta VAT. W przypadku faktur – korekt na kwoty ujemne, filtr zadziała prawidłowo wtedy, gdy kwota VAT’u jest księgowana na to samo konto co zwykła faktury i po tej samej stronie tylko ze znakiem „minus”.

Jak wyfiltrować w dziennikach księgowań PK, które zawierają pozycje zawierające zadany opis?

W menu Księgowość/ Dzienniki, zakładka [Dzienniki]. W konstruktorze filtra na zakładce [Zaawansowane] należy wpisać:

@PAR ?@S30|Szukaj|&Szukaj: @? PAR@
DeN_Dokument Like '%'+ ??Szukaj +'%' Or DeN_Kategoria Like '%'+ ??Szukaj +'%' Or Exists (Select * From CDN.DekretyElem Where DeE_DeNId = DeN_DeNId And (DeE_Dokument Like '%'+ ??Szukaj +'%' Or DeE_Kategoria Like '%'+ ??Szukaj +'%'))

Jak wyfiltrować listę dokumentów rozliczonych pochodzących z Rejestru VAT lub ewidencji dodatkowej?

Na liście Dokumentów Rozliczonych w menu Kasa/Bank w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from cdn.bnkzdarzenia where
(bzd_dokumenttyp=12 and brk_ldoktyp=1 and brk_ldokid = bzd_bzdid) or
(bzd_dokumenttyp=12 and brk_pdoktyp=1 and brk_pdokid = bzd_bzdid) or
(bzd_dokumenttyp=2 and brk_ldoktyp=1 and brk_ldokid = bzd_bzdid) or
(bzd_dokumenttyp=2 and brk_pdoktyp=1 and brk_pdokid = bzd_bzdid))

Jak wyfiltrować Rejestr VAT wg numeru NIP Kontrahenta pod warunkiem, że dokument nie jest zaksięgowany?

Na liście Rejestru VAT w menu Kasa/Bank w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@HO(RY:1|KP:2|KH:3)|TypKsi|&KSI:{GetSql('Select Fir_Wartosc From CDN.Firma Where Fir_Numer=1204', '')} @? PAR@ {CHOOSE ( ??TypKsi, 'IsNull(VaN_RycId,0)=0', 'IsNull(VaN_KPRId,0)=0', 'IsNull(VaN_DekId,0)=0', '1=1')} and VaN_KntNipE LIKE '%' + ?@S100|numer NIP:'' + '%'

Jak wyfiltrować konta w Planie kont, które mają inny numer w przyszłym okresie?

Na Planie kont w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists ( select * from cdn.konta k2 where A.Acc_NextAccId=k2.Acc_AccId
and A.Acc_Numer<>k2.Acc_Numer)

Jak wyfiltrować polecenia księgowania, które zawierają dekrety na konto 404-1 i 501-01?

Przykład takiego filtra dla zakładki [Dzienniki] w menu Księgowość/Księgowość/Dzienniki:

exists(select * from CDN.DekretyElem K1 join CDN.DekretyElem K2 on (DeN_DeNID = K2.DeE_DeNID) where DeN_DeNID = K1.DeE_DeNID and K1.DeE_KontoWn = '404-1' and K2.DeE_KontoWn = '501-01')

Na fakturze w Rejestrze VAT wpisuję jako wartość atrybutu numer rejestracyjny samochodu i jako kolejny atrybut – paliwo, jak sprawdzić ile paliwa zakupiono dla danego samochodu?

Na jednym dokumencie uzupełniono atrybuty REJESTRACJA (nr rejestracyjny samochodu) i PALIWO (ilość zakupionego paliwa). Poniższe zapytanie, w Rejestrach VAT, na zakładce [Wg atrybutów], zwróci rekordy zawierające ilość paliwa dla podanego numeru rejestracyjnego samochodu. Przed odfiltrowaniem program zapyta o nr rejestracyjny.

exists (select * from CDN.VATAtrybutyView as ATR1 join CDN.VATAtrybutyView as ATR2 on (ATR1.VAV_VaNID=ATR2.VAV_VaNID and ATR2.VAV_DeAKod='REJESTRACJA' AND ATR2.VAV_DAtWartoscTxt =?@S100|Nr rejestracyjny:'') where ATR1.VAV_VaNID=VAN_VaNID and ATR1.VAV_DeAKod = 'PALIWO')

W polu Atrybut można wybrać atrybut PALIWO – wtedy będzie można podsumować wyfiltrowane rekordy (ilość paliwa).

Jak wyfiltrować dokumenty w rejestrze VAT według wskazanych grup kontrahentów?

W Rejestrze VAT w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT Gru_GruID, Gru_Nazwa FROM cdn.Grupy WHERE Gru_Typ=31)|Grupa_kontrahentow|&Grupa_kontrahentow:REG= @? PAR@
exists (select * from cdn.kontrahenci where knt_kntID=van_podId and van_podmiotTyp=1 and knt_grupa=??_Q_RES2_Grupa_kontrahentow)

Jak wyfiltrować faktury z rejestru VAT zaksięgowane pomiędzy podanymi datami, które zakwalifikowane zostały do deklaracji VAT-7 za podany okres?

W Rejestrze VAT w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|data_od|&Data_zapisu_od:{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|data_do|&Data_zapisu_do:{DateClwLastDay('m')} @? PAR@
@PAR ?@N4|Rok|&Rok_deklaracji:{Year(Today())} @? PAR@
@PAR ?@N4|Miesiac|&Miesiąc_deklaracji:{Month(Today())} @? @RL(1) @RH(12) PAR@
EXISTS (SELECT * FROM CDN.DekretyNag WHERE VaN_DekId = DeN_DeNId AND VaN_DekId IS NOT NULL AND VaN_DeklRokMies={100 * ??Rok + ??Miesiac} AND DeN_DataDok >=??Data_od AND DeN_DataDok <= ??Data_do)

W przypadku stosowania metody kasowej należy użyć poniższego filtra:
@PAR ?@D17|data_od|&Data_zapisu_od:{DateClwFirstDay('m')} @? PAR@ @PAR ?@D17|data_do|&Data_zapisu_do:{DateClwLastDay('m')} @? PAR@ @PAR ?@N4|Rok|&Rok_deklaracji:{Year(Today())} @? PAR@ @PAR ?@N4|Miesiac|&Miesiąc_deklaracji:{Month(Today())} @? @RL(1) @RH(12) PAR@ EXISTS (SELECT * FROM CDN.DekretyNag WHERE VaN_DekId = DeN_DeNId AND VaN_DekId IS NOT NULL AND DeN_DataDok >=??Data_od AND DeN_DataDok <= ??Data_do) AND EXISTS ( SELECT * FROM CDN.VatTab7 WHERE Va7_VaNID=VaN_VaNID AND Va7_RokMiesiac={100 * ??Rok + ??Miesiac} AND VaN_MetodaKasowa=1)

Jak wyfiltrować środki trwałe mające określony atrybut?

Na liście środków trwałych w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = DeA_DeAId, Kod = DeA_Kod FROM CDN.DefAtrybuty WHERE DeA_Typ=3 ORDER BY DeA_Kod)|KodAtr|&Kod atrybutu:ATR1 @? PAR@
EXISTS (SELECT * FROM CDN.TrwaleAtrybuty JOIN CDN.DefAtrybuty ON SrA_DeAId = DeA_DeAId WHERE SrT_SrTID = SrA_SrTId AND DeA_DeAId =??KodAtr)

Jak wyfiltrować dokumenty w rejestrze VAT, które zostały wprowadzone lub zmodyfikowane po konkretnej dacie?

W Rejestrze VAT w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|data_od|&Data_wprowadzenia_lub_modyfikacji:{DateClwFirstDay('m')} @? PAR@
VaN_TS_Zal >= ??data_od OR VaN_TS_Mod >= ??data_od

Jak wyfiltrować dokumenty w Rejestrze VAT posiadające określony atrybut?

W Rejestrze VAT w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@LS20(OP_TWR.DLL|CALLLOOKUPATRLISTADOK())|Atrybut|&Atrybut:REG= @? PAR@ exists (select * from CDN.DokAtrybuty where VaN_VaNID = DAt_VaNID and DAt_DeAId = ??Atrybut)

Jak wyfiltrować dokumenty w Rejestrze VAT posiadające określoną wartość atrybutu?

W Rejestrze VAT w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@S30|Wartosc_atrybutu|&Wartosc_atrybutu:''@? PAR@
exists (select * from CDN.DokAtrybuty where VaN_VaNID = DAt_VaNID and DAt_WartoscTxt
= ??Wartosc_atrybutu)

Jak wyfiltrować dokumenty w Rejestrze VAT, które mają nie zaznaczonego parametru Rozliczać w deklaracji VAT?

W Rejestrze VAT w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

VaN_RozliczacVat7 = 0

Jak znaleźć zapisy w Rejestrze VAT, które pod listą zaliczek mają wybranego jakiegoś pracownika?

W Rejestrze VAT w konstruktorze filtra na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

VaN_PodmiotZalTyp='3’

Jak odnaleźć zapisy księgowe na koncie z daną kategorią w elemencie zapisu?

W menu Księgowość/Dzienniki, zakładka [Konto] w konstruktorze filtra na zakładce [Zaawansowane] należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKATLISTA())|Kategoria|&Kategoria:REG= @?TIP(Wybierz
kategorię) PAR@ DeE_KatId =??kategoria

Jak odnaleźć zapisy księgowe na koncie z daną kategorią w nagłówku zapisu?

W menu Księgowość/Dzienniki, zakładka [Konto] w konstruktorze filtra na zakładce [Zaawansowane] należy wpisać:

@PAR ?@LS20(OP_LIST.DLL|CALLLOOKUPKATLISTA())|Kategoria|&Kategoria:REG=-brak- @? PAR@
DeN_KatId = ??Kategoria

W jaki sposób wyszukać dokumenty środków trwałych w zależności od osoby odpowiedzialnej przypisanej w zadanym okresie?

Na liście dokumentów środków trwałych w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@D17|data1|&Data od:{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|data2|&Data do:{DateClwLastDay('m')} @? PAR@
@PAR ?@R(SELECT distinct Pri_PraId, PRi_nazwisko+' '+pri_Imie1 FROM cdn.Pracidx where PRI_Typ <>2 order by 2 )|PRACOWNIK|&PRACOWNIK:0|@? PAR@
Exists (select * from CDN.TrwaleOsobyOdpowiedzialne where SrH_SrtID=SrOO_SrTID and SrOO_DataOd<=??data1 and (SrOO_DataDo >=??data2 or SrOO_DataDo is null) and SrOO_PrcID =??PRACOWNIK)

W jaki sposób na liście zapisów w rejestrze VAT (bądź na liście faktur) wyszukać dokumenty zaksięgowane na konkretne konto?

Na liście zapisów w rejestrze VAT w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@S30|Konto|&Konto:''@? PAR@
EXISTS (SELECT * FROM CDN.DekretyNag join CDN.DekretyElem on DeN_DeNId=DeE_DeNId WHERE VaN_DekID = DeN_DeNId AND (DeE_KontoWn=??Konto OR DeE_KontoMa=??Konto))

Filtr do zastosowania na liście faktur:

@PAR ?@S30|Konto|&Konto:''@? PAR@
EXISTS (SELECT * FROM CDN.DekretyNag join CDN.DekretyElem on DeN_DeNId=DeE_DeNId WHERE TrN_DekId = DeN_DeNId AND (DeE_KontoWn=??Konto OR DeE_KontoMa=??Konto))

W jaki sposób wyszukać zapisy KPiR zaksięgowane z określonych dokumentów źródłowych?

 

Na liście zapisów KPiR w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@R (SELECT Id = 2, Kod = 'Rejestr VAT' UNION
SELECT Id = 3, Kod = 'Samochodówka' UNION
SELECT Id = 4, Kod = 'Remanent' UNION
SELECT Id = 5, Kod = 'Wynagrodzenia uproszczone' UNION
SELECT Id = 7, Kod = 'Dokumenty ŚT' UNION
SELECT Id = 10, Kod = 'Wynagrodzenia' UNION
SELECT Id = 12, Kod = 'Ewidencja dodatkowa' UNION
SELECT Id = 13, Kod = 'Różnice kursowe' UNION
SELECT Id = 14, Kod = 'Zapisy k/b'
)|Zrodlo|&Zrodlo: @? PAR@
KPR_Zrodlo = ??Zrodlo

W jaki sposób wyszukać zapisy księgowe na koncie mające parę (taką samą kwotę) po obu stronach konta?

Z poziomu Księgowość/ Dzienniki/ zakładka [Konto] w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@D17|data1|&Data od:{DateClwFirstDay('y')} @? PAR@ @PAR ?@D17|data2|&Data do:{DateClwLastDay('y')} @? PAR@
@PAR ?@S30|Konto|&Konto:''@? PAR@
Exists (Select * From CDN.DekretyElem A Where A.DeE_DeEId=DeK_DeEId
And (Exists (Select * From CDN.DekretyElem B Where A.DeE_Kwota=B.DeE_Kwota
And A.DeE_KontoMa=??Konto and B.DeE_KontoWn=??Konto
AND A.DeE_DataWys between ??data1 And ??data2
AND B.DeE_DataWys between ??data1 And ??data2)
OR Exists (Select * From CDN.DekretyElem B Where A.DeE_Kwota=B.DeE_Kwota
And A.DeE_KontoWn=??Konto and B.DeE_KontoMa=??Konto
AND A.DeE_DataWys between ??data1 And ??data2
AND B.DeE_DataWys between ??data1 And ??data2)))

W jaki sposób na planie kont wyszukać konta rozrachunkowe tego samego podmiotu, na których istnieją nierozliczone rozrachunki po przeciwnych stronach?

Z poziomu Księgowość/ Plan kont w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

EXISTS( Select * From CDN.Konta B Where A.Acc_SlownikId=B.Acc_SlownikId And A.Acc_SlownikTyp=B.Acc_SlownikTyp And A.Acc_Rozrachunkowe = 1 And B.Acc_Rozrachunkowe = 1 AND A.Acc_NumerIdx IN (SELECT Roz.KRo_KontoIdx FROM CDN.KsiRozrachunki AS Roz WHERE Roz.KRo_RozliczenieID IS NULL AND Roz.KRo_Strona=1) AND B.Acc_NumerIdx IN (SELECT Roz.KRo_KontoIdx FROM CDN.KsiRozrachunki AS Roz WHERE Roz.KRo_RozliczenieID IS NULL AND Roz.KRo_Strona=2))
OR
EXISTS( Select * From CDN.Konta B Where A.Acc_SlownikId=B.Acc_SlownikId And A.Acc_SlownikTyp=B.Acc_SlownikTyp And A.Acc_Rozrachunkowe = 1 And B.Acc_Rozrachunkowe = 1 AND A.Acc_NumerIdx IN (SELECT Roz.KRo_KontoIdx FROM CDN.KsiRozrachunki AS Roz WHERE Roz.KRo_RozliczenieID IS NULL AND Roz.KRo_Strona=2) AND B.Acc_NumerIdx IN (SELECT Roz.KRo_KontoIdx FROM CDN.KsiRozrachunki AS Roz WHERE Roz.KRo_RozliczenieID IS NULL AND Roz.KRo_Strona=1))

Powyższy filtr zadziała w przypadku, gdy jest nierozliczony rozrachunek po stronie Wn na koncie 201-2-1-ADM
i po stronie Ma na koncie 202-2-1-ADM, chociaż równie dobrze może to być to samo konto.

W jaki sposób na liście dokumentów w rejestrze VAT wyfiltrować dokumenty według stanu ich rozliczeń?

Z poziomu rejestru VAT w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać treść filtra odpowiednią dla szukanych dokumentów:
– wyłącznie dokumenty nierozliczone całkowicie:

not exists (select * from CDN.BnkZdarzenia where VaN_VaNID = BZd_DokumentID and BZd_DokumentTyp = 2 and (Bzd_KwotaRoz > 0)) AND VaN_Wewnetrzna = 0

– wyłącznie dokumenty rozliczone częściowo:

exists(select BZd_DokumentID, BZd_DokumentTyp, SUM(BZd_Kwota), SUM(BZd_KwotaRoz) from cdn.BnkZdarzenia where BZd_DokumentID = VaN_VaNID AND BZd_DokumentTyp = 2 GROUP BY BZd_DokumentID, BZd_DokumentTyp HAVING SUM(BZd_Kwota) <> SUM(BzD_KwotaRoz) AND SUM(BzD_KwotaRoz) > 0.00)

– dokumenty nierozliczone bądź częściowo rozliczone:

exists (select BZd_BZdID FROM CDN.BnkZdarzenia where VaN_VaNID=BZd_DokumentID and BZd_DokumentTyp = 2 and (Bzd_Kwota<>Bzd_KwotaRoz))

– wyłącznie dokumenty rozliczone całkowicie:

exists(select BZd_DokumentID, BZd_DokumentTyp, SUM(BZd_Kwota), SUM(BZd_KwotaRoz) from cdn.BnkZdarzenia where BZd_DokumentID = VaN_VaNID AND BZd_DokumentTyp = 2 GROUP BY BZd_DokumentID, BZd_DokumentTyp HAVING SUM(BZd_Kwota) = SUM(BzD_KwotaRoz) AND SUM(BzD_KwotaRoz) > 0.00)

Płace i Kadry

Jak wyfiltrować pracowników, dla których ważność badań upływa w podanym okresie?

Na liście pracowników w menu Kadry/Płace / Kadry, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|DataOd|Podaj datę:{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|DataDo|Podaj datę:{DateClwLastDay('m')} @? PAR@
exists (select 1 from CDN.PracEtaty where PRI_PraId=PRE_PraId and
PRE_WaznoscBadanOkres between ??DataOd AND ??DataDo)

Przed odfiltrowaniem pojawi się pytanie o daty. Domyślnie podpowiada się data pierwszego i ostatniego dnia miesiąca.

Jak odfiltrować listę pracowników niepełnosprawnych po kodzie niepełnosprawności?

Po uruchomieniu filtru pojawi się okno, w którym należy wpisać kod niepełnosprawności (1,2,3 lub 4) datę tj. dzień, na który chcemy sprawdzić listę osób niepełnosprawnych (sprawdzane są daty od-do niepełnosprawności).
W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|Data|&Data:{Today()}@? PAR@
exists(select 1 from cdn.pracetaty where pri_praid=pre_praid and PRE_StNiepelnosp LIKE '%' +
?@S100|Stopień niepełnospr:'' + '%' and ??Data between pre_niepelnospod and pre_niepelnospdo)

Jak wyfiltrować listę osób mających zawarte umowy cywilno-prawne o podanym symbolu?

Po uruchomieniu filtru pojawi się okno, w którym należy wpisać zakres dat (sprawdza datę zawarcia umowy we wskazanym okresie) oraz symbol umowy (np. UMW).
W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|DataOd|Podaj datę:{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|DataDo|Podaj datę:{DateClwLastDay('m')} @? PAR@
exists (select 1 from CDN.UMOWY where Pri_PraID = UMW_PraID and umw_numerstring LIKE
'%' + ?@S100|Symbol:'' + '%' and UMW_DataOd between ??DataOd AND ??DataDo)

Jak wyfiltrować z listy pracowników osoby z przypisanym Urzędem Skarbowym, na wskazany dzień?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|Data|na dzień:{Today()}@? PAR@
exists (select * from CDN.PracEtaty where PRI_Praid=PRE_PraId and pre_PODUrzSkarbId>0 and
??Data between PRE_DataOd and PRE_DataDo)

Ewentualnie zamiast @D17 można wykorzystać @HD17 jeśli parametr z datą ma być ukryty (a więc zawsze jako parametr ma się pojawiać data bieżąca):

@PAR ?@HD17|filtr_dtDataAkt|&filtr_dtDataAkt:{Today()}@? PAR@
exists (select * from CDN.PracEtaty where PRI_Praid=PRE_PraId and pre_PODUrzSkarbId>0 and
??filtr_dtDataAkt between PRE_DataOd and PRE_DataDo)

Osoby bez przypisanego Urzędu Skarbowego:

@PAR ?@D17|Data|na dzień:{Today()}@? PAR@
not exists (select * from CDN.PracEtaty where PRI_Praid=PRE_PraId and pre_PODUrzSkarbId>0 and
??Data between PRE_DataOd and PRE_DataDo)

Jak wyfiltrować pracowników, którym wybrana kwalifikacja kończy się w zadanym zakresie?

Na liście pracowników w menu Kadry/Płace / Kadry, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT ID = Dkm_DkmID, Kod = DKM_Nazwa from cdn.DaneKadMod where dkm_Rodzaj = 6 order by DKM_Nazwa)|Kwalifikacje|&Kwalifikacje: @? PAR@
@PAR ?@D17|DataOd|&DataOd:REG={DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|DataDo|&DataDo:REG={DateClwLastDay('m')} @? PAR@
exists (select 1 from cdn.Uprawnienia join cdn.DaneKadMod on Upr_DkmId = Dkm_DkmID where Pri_PraID
= Upr_PraID and DKM_DkmID = ??Kwalifikacje and upr_KursTermin between ??DataOd and ??DataDo)

Przed odfiltrowaniem pojawi się rozwijana lista kwalifikacji oraz pytanie o zakres dat.

Jak zablokować operatorowi dostęp do dokumentów dotyczących rozliczeń z pracownikami z tytułu wynagrodzeń?

Aby operator nie widział:
A. Zapisów kasowo/bankowych wystawionych na pracowników, należy założyć filtr w menu: Kasa/bank/Zapisy kasowe/bankowe. Kliknąć na ikonę „Konstruktor filtra” i na zakładce [Zaawansowane], wpisać w polu Filtr SQL:

BZp_PodmiotTyp<>3

Na zakładce [Opcje], wybrać: Obowiązkowy i wybrać operatora, który ma mieć załączony ten filtr.
Jeżeli jest więcej niż jeden operator, który ma mieć założony taki filtr, należy zbudować drugi identyczny filtr, z tym, że na zakładce Opcje wybrać innego operatora.

B. Dla zdarzeń w Preliminarzu pochodzących z list płac, należy założyć filtr w menu: Kasa/Bank / Preliminarz płatności.
Kliknąć na ikonę „Konstruktor filtra” i na zakładce [Zaawansowane], wpisać w polu Filtr SQL:

BZd_DokumentTyp<>8

Na zakładce [Opcje], wybrać: Obowiązkowy i wybrać operatora, który ma mieć załączony ten filtr.
Jeżeli jest więcej niż jeden operator, który ma mieć założony taki filtr, należy zbudować drugi identyczny filtr, z tym, że na zakładce Opcje wybrać innego operatora.

C. Aby operator nie mógł wybrać z listy pracownika (np. po to aby podglądnąć listę rozliczonych i nierozliczonych zapisów dla wybranego pracownika w menu Kasa/bank/ Rozliczenia podmiotu. Należy operatorowi dodać blokadę dostępu do listy pracowników. Blokadę zakłada się w menu: System / Konfiguracja / Program/Użytkowe/Operatorzy. Na formatce danego operatora, na zakładce [Blokady dostępu] należy dodać blokadę: Lista pracowników, wspólników i właścicieli.

D. Aby operator nie widział rozliczeń powstałych z dokumentów, z których przynajmniej jeden jest wystawiony na pracownika, należy założyć następujący filtr obowiązkowy dla operatora w menu Kasa/Bank/ Rozliczenia: pole Filtr SQL:

not exists (select * from CDN.BnkRozKwotyView where BRKV_BRKId=BRK_BRKId and (BRKV_PodmiotTyp1=3 OR BRKV_PodmiotTyp2=3))

Filtry obowiązkowe włącza się w menu: System/Konfiguracja/Program/Użytkowe/Parametry: Stosuj filtry obowiązkowe. Operator nadający filtry obowiązkowe musi być Administratorem, pozostali operatorzy nie powinni być administratorami.

Uwaga
Na formatce Operatora (menu: System/Konfiguracja/Program/Użytkowe/Operatorzy) znajduje się parametr Blokada dostępu do rozliczeń pracowników. Parametr ten blokuje dostęp do dokumentów w module Kasa/Bank, na których jako podmiot jest wybrany pracownik lub wspólnik.

Jak wyfiltrować listę pracowników, którym kończy się ważność badań okresowych?

Na liście pracowników w menu Kadry/Płace/Kadry, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|DataOd|Podaj datę:{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|DataDo|Podaj datę:{DateClwLastDay('m')} @? PAR@
exists (select 1 from CDN.PracEtaty where PRI_PraId=PRE_PraId and
PRE_WaznoscBadanOkres between ??DataOd AND ??DataDo)
Przed odfiltrowaniem pojawi się pytanie o zakres dat.

Jak wyfiltrować listę pracowników zatrudnionych na stanowiskach robotniczych?

Na liście pracowników w menu Kadry/Płace/Kadry, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|Data|&Data:{Today()}@? PAR@
exists (select 1 from CDN.PracEtaty join CDN.DaneKadMod on PRE_ETADkmIdStanowisko=DKM_DkmId
where DKM_Robotnicze=1 and DKM_Rodzaj=1 and PRE_PraId=PRI_PraId and ??Data between PRE_DataOd and PRE_DataDo)

Przed odfiltrowaniem pojawi się zapytanie o datę.

Jak wyfiltrować listę pracowników zgłoszonych do wszystkich ubezpieczeń (społeczne i zdrowotne)?

Na liście pracowników w menu Kadry/Płace/Kadry, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from cdn.pracetaty where pri_praid=pre_praid and pre_ubzzdrowod <> CONVERT(DATETIME,'1899-12-30',120) and PRE_UBZJestEmerytal=1 and PRE_UBZJestRentowe=1 and PRE_UBZJestchorobowe=1 and PRE_UBZJestwypad=1)

Jak wyfiltrować listę pracowników zgłoszonych tylko do ubezpieczenia zdrowotnego?

Na liście pracowników w menu Kadry/Płace/Kadry, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from cdn.pracetaty where pri_praid=pre_praid and pre_ubzzdrowod <> CONVERT(DATETIME,'1899-12-30',120) and PRE_UBZJestEmerytal=0 and PRE_UBZJestRentowe=0 and PRE_UBZJestchorobowe=0 and PRE_UBZJestwypad=0)

Jak wyfiltrować listę pracowników przypisanych do wybranej kategorii?

Na liście pracowników w menu Kadry/Płace/Kadry, w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(select ID=KAT_KatId, Kat_KodSzczegol from CDN.Kategorie)|Kategoria|&Kategoria:REG=PLACE @? PAR@
exists (select 1 from CDN.PracEtaty where PRI_PraId=PRE_PraId and PRE_KATId=
??Kategoria and ?@D17|Data:{Today()} between PRE_DataOd and PRE_DataDo)

Przed odfiltrowaniem pojawi się rozwijana lista słownikowa z kategoriami oraz pytanie o datę.

Jak wyfiltrować listę dokumentów nierozliczonych wystawionych na pracownika?

Na liście Dokumentów Nierozliczonych w menu Kasa/Bank w Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

exists (select * from CDN.PodmiotyView where DKB_PodmiotId=Pod_PodId
and Dkb_PodmiotTyp = Pod_PodmiotTyp AND DKb_PodmiotTyp=3)

Jak wyfiltrować pracowników z listy Kadry zwolnionych w zadanym okresie, w aktualnym okresie historycznym?

W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@D17|DataOd|Zwoln. w okresie od:{DateClwFirstDay('m')} @? PAR@
@PAR ?@D17|DataDo|do:{DateClwLastDay('m')} @? PAR@
exists (select 1 from CDN.PracEtaty where PRI_PraId=PRE_PraId and
PRE_ZatrudnionyDo between ??DataOd AND ??DataDo and ?@D17|Na datę aktualności:{Today()} between PRE_DataOd and PRE_DataDo)

Jak wyfiltrować pracowników, którzy mają formę płatności „ROR” lub „gotówka”, w aktualnym okresie historycznym?

Filtr działa tak, że sprawdza odpowiedni zapis historyczny pracownika (data ,którą ustawimy jako „Zapis hist. prac” – podpowiada się aktualna) oraz płatność, która ma ustawioną „nadwyżkę”.
W Konstruktorze filtra, na zakładce [Zaawansowane], w polu Filtr SQL należy wpisać:

@PAR ?@R(SELECT Id = 1, Kod = 'gotówka' UNION
SELECT Id = 3, Kod = 'ROR')|platnosc|&platność:REG= @? PAR@
exists(select 1 from CDN.PracEtaty join CDN.SchematPlatnosci on SPL_PodmiotId = PRE_PreId
where PRE_PraId=PRI_PraId and SPL_Reszta = 1 and SPL_FplId = ??Platnosc AND ?@D17|Zapis hist. prac:{Today()} between PRE_DataOd and PRE_DataDo)

W jaki sposób wyszukać pracowników z określoną kategorią na wybranej liście płac?

Z poziomu Płace i Kadry/ Wypłaty pracowników w Konstruktorze filtra, na zakładce [Zaawansowane] należy wpisać:

@PAR ?@R(SELECT LPL_LplId, LPL_NumerPelny FROM CDN.ListyPlac)|Lista|&Lista plac:REG= @? PAR@
@PAR ?@LS0(OP_LIST.DLL|CALLLOOKUPKATLISTA())|kategoria|&kategoria:0|@? PAR@
EXISTS(SELECT 1 FROM CDN.PracEtaty
JOIN CDN.Wyplaty ON WPL_PraId = PRE_PraId
JOIN CDN.ListyPlac ON LPL_LplId = WPL_LplId
WHERE PRI_PraId = PRE_PraId
AND WPL_KatId = ??Kategoria
AND LPL_LplId = ??Lista)

Można również zastosować wariant filtra, w którym numer listy płac jest automatycznie przekazywany na podstawie wybranej na oknie listy:

@PAR ?@HN0|ListaPlacId|&ListaPlacId:0@? PAR@
@PAR ?@LS0(OP_LIST.DLL|CALLLOOKUPKATLISTA())|kategoria|&kategoria:0|@? PAR@
EXISTS(SELECT 1 FROM CDN.PracEtaty
JOIN CDN.Wyplaty ON WPL_PraId = PRE_PraId
JOIN CDN.ListyPlac ON LPL_LplId = WPL_LplId
WHERE PRI_PraId = PRE_PraId
AND WPL_KatId = ??Kategoria
AND LPL_LplId = ??ListaPlacId)




OPT048 – Współpraca z urządzeniami zewnętrznymi w Comarch ERP Optima

Data aktualizacji: 28-11-2018

Wprowadzenie

Celem biuletynu jest przedstawienie urządzeń zewnętrznych, z którymi współpracuje program Comarch ERP Optima. W aktualnej wersji możliwa jest współpraca z następującymi urządzeniami zewnętrznymi:

  • drukarki fiskalne
  • kasy fiskalne
  • czytniki kodów kreskowych
  • drukarki etykiet
  • kolektory danych

Współpraca z drukarkami fiskalnymi

Do wersji Comarch ERP Optima 17

  • POSNET (oparta o protokół DF-300 lub DF-301, Temo, Thermal)
  • ELZAB (FP-600, Omega, Mera)
  • INNOVA (Profit, Market)
  • NOVITUS (Vivo, Vento, Quarto, Delio Prime, Deon (E))
  • TORELL (Duo Pro, Andros)
  • EMAR (Printo)

Uwaga
Drukarki w wersjach aptecznych nie są obsługiwane.

Uwaga
Drukarka Torell Andros w numerze paragonu nie drukuje kolejnych znaków „/”. Podczas fiskalizacji za pomocą driverów Comarch ERP Optima nie ma możliwości ingerowania w obsługę wyświetlacza.

Uwaga
W przypadku drukarek Posnet Temo USB, aby była możliwość komunikacji przez USB należy w menu drukarki włączyć obsługę USB. Domyślnie jest wyłączona. Następnie należy wykonać restart drukarki.

Uwaga
Jeżeli w nazwie towaru drukowanej na paragonie występują znaki specjalne, to w niektórych przypadkach może wystąpić problem z wydrukiem na drukarce fiskalnej. W celu uzyskania informacji na temat znaków niedozwolonych przez drukarkę, należy zapoznać się z dokumentacją konkretnego modelu drukarki lub skontaktować się z serwisem technicznym producenta drukarki.

Uwaga
Jednostki miary na paragonie. Comarch ERP Optima obsługuje tylko literowe jednostki miary (maksymalnie 5 liter), gdyż niektóre drukarki fiskalne nie akceptują cyfr w jednostkach miary. W drukarkach Emar Printo 57, Innova Market/Profit, Torell Duo Pro – przyjmowana jest tylko ilość a jednostka miary jest ignorowana. Jednostka miary jest drukowana w drukarkach: Elzab, Novitus, Posnet (z wyłączeniem wersji 1.01, 1.02).

W aktualnej wersji Comarch ERP Optima

  • POSNET (oparte o protokół DF-3001, Thermal, Posnet; Thermal HS i FV, HD, HD EJ, Temo)
  • ELZAB (Omega, Mera, Zeta)
  • INNOVA (Profit, Market, DF-1)
  • NOVITUS (Vivo, Vento, Quarto, Delio Prime (E), Deon (E))
  • TORELL (Duo Pro, Andros)
  • EMAR (Printo, Tempo 3)
  • Epson TM-T801FV

Niektóre drukarki wymagają ustawienia odpowiedniego sterowania przepływem danych w porcie COM. Użytkownik może wybrać w programie Comarch ERP Optima opcje:

  • ustawienia systemowe (program nie ustawia sterowania przepływem, brane są ustawienia systemu)
  • RTS (do sterowania przepływem jest wykorzystywana w porcie para linii RTS/CTS)
  • Xon / Xoff (sterowanie przepływem odbywa się przez wysłanie znaczników XOn oraz XOff)
  • RTS i Xon / Xoff (wykorzystuje obydwie metody sterowania przepływem)
  • brak (nie jest wykorzystywana żadna metoda kontroli przepływu danych)

Drukarka Posnet Temo podłączona bezpośrednio przez USB do poprawnej komunikacji musi mieć ustawione sterowanie przepływem: RTS. Przy pracy przez port COM parametr ten może być dowolny można ustawić ustawienia systemowe.

Uwaga
W przypadku wydruku faktury fiskalnej na drukarce Posnet Temo, długość nazwy i adresu kontrahenta nie mogą przekraczać 40 znaków (zgodnie z dokumentacją drukarki). Jeżeli nastąpi przekroczenie tej wartości, pozycje te nie będą drukowane na fakturze.

W nowych drukarkach Posnet Thermal i Novitus Delio w konfiguracji drukarki można ustawić sterowanie przepływem, w Comarch ERP Optima musi być wybrana taka sama opcje (drukarki te mają domyślne ustawienie „brak”).

Drukarka Epson w przypadku, gdy w Comarch ERP Optima dodany zostanie Paragon z towarami i kaucjami, ale nie dodano płatności na kaucje, to nie jest wysyłana żadna forma płatności do drukarki. Na innych drukarkach drukują się towary, kaucje i kwota paragonu. W drukarce Epson w takim przypadku drukuje się domyślna forma płatności gotówka. Również jeśli zostanie dodany Paragon z towarami i kaucjami i dodano płatności na kaucje, ale w ustawieniach drukarki jest zaznaczone nie drukuj form płatności, to wtedy zostanie wydrukowana domyślna forma płatności gotówka.

Ustawienia portów COM

ParametryPosnetElzabInnovaNovitusTORELLEMAR
Szybkość96009600 / 192009600960096009600
Parzystośćbrak (none)parzysta (even)brak (none)brak (none)brak (none)brak (none)
Liczba bitów888888
Bit stopu111111
Sterowanie przepływembrakbrak, xon/xoff, *brakbrakbrakbrak

Uwaga
W przypadku drukarek Elzab starszego typu należy sterowanie przepływem ustawić na: sprzętowe.

Konfiguracja drukarek fiskalnych

Więcej informacji znajdą Państwo w podręczniku do modułu HANDEL, który jest dostępny na indywidualnych stronach internetowych w obszarze walidowanym dla Klientów: http://www.comarch.pl/erp/dla-klientow oraz Partnerów: http://www.comarch.pl/erp/dla-partnerow.

Drukarki w usługach terminalowych

Więcej informacji o konfiguracji połączenia drukarek fiskalnych w usługach terminalowych znajdą Państwo w biuletynie technicznym: „OPT060 – Comarch ERP Optima w środowisku terminalowym” dostępnym na indywidualnych stronach internetowych w obszarze walidowanym dla Klientów: http://www.comarch.pl/erp/dla‑klientow oraz Partnerów: http://www.comarch.pl/erp/dla-partnerow.

Najczęściej pojawiające się problemy

Przy próbie wydruku pojawia się komunikat: „Nie zdefiniowano stawki VAT dla zw.”. Taki komunikat może pojawić się dla każdej stawki VAT niezdefiniowanej w konfiguracji programu

Remedium

  • Wydrukować raport dobowy.
  • W Konfiguracja programu/ Ogólne/ Symbole stawek VAT należy dla stawki ZW ustawić oznaczenie takie, jakie jest dla niej przypisane na raporcie dobowym.

Przy próbie wydruku pojawia się komunikat: „Błędna interpretacja stawki podatkowej”.

Remedium

  • Zmienić nazwę tego towaru (dodając np. kropkę na końcu). Towar kiedyś został sprzedany w innej stawce podatkowej, drukarka fiskalna to pamięta i nie pozwala wysłać takiego towaru z nową stawką.
  • Jeżeli to nie pomoże to może być problem z błędnym przypisaniem stawki. Należy wtedy wydrukować raport dobowy, potem w programie Comarch ERP OptimaKonfiguracja programu/ Ogólne/ Symbole stawek VAT dla odpowiedniej stawki przypisać oznaczenie takie, jakie jest dla niej na raporcie dobowym.

Przy próbie wydruku pojawia się komunikat: „Wydruk niemożliwy. Wybrana drukarka nie jest dostępna. W buforze są znaki do druku.

Remedium

  • Z menu Narzędzia wykonać raport dobowy. Spróbować czy teraz paragony się fiskalizują.
  • Zmienić nazwę drukowanego towaru. Towar mógł zostać wysłany wcześniej na drukarkę z inną stawką podatkową.
  • Wyłączyć i włączyć drukarkę ponownie, aby towary dodrukowały się na paragon.

Przy próbie wydruku pojawia się komunikat: „Wydruk niemożliwy. Wybrana drukarka nie jest dostępna. Błąd komunikacji z drukarką”.

Remedium

  • Należy sprawdzić w systemie Windows w menedżerze urządzeń ustawienia portu COM.
  • W programie Comarch ERP Optima wejść do Konfiguracji programu/ Ogólne/ Drukarki fiskalne i wybrać odpowiedni sterownik, port COM a następnie zapisać ustawienia dyskietką. Potem ikoną drukarki wykonać test połączenia z drukarką.

W usługach Terminalowych. Przy próbie wydruku pojawia się komunikat: „ODBC Serwer Driver. Serwer SQL nie istnieje lub odmówiono do niego dostępu Błąd sprawdzania licencji” lub „ODBC Server Driver does not exist for access denied for Microsoft OLE ODBC Driver”.

Remedium.

W momencie uruchomienia Comarch ERP Optima w okienku Rejestracja w programie należy kliknąć na ikonę Pokaż szczegóły i w polu serwer klucza wpisać nazwę serwera SQL do którego wpięty jest klucz HASP, a następnie zapisać wprowadzony wpis ikoną dyskietki.

Współpraca z kasami fiskalnymi

System Comarch ERP Optima współpracuje z następującymi rodzajami kas fiskalnych:

  • ELZAB (kasy II generacji: Alfa, Delta, Jota, Teta, Eco, Mini)
  • SHARP (ER-457P, ER-237P, ER-277P, ER-A285P)
  • NOVITUS (zgodne z protokołem Tango: Bravo, Nano , PS-3000, PS-4000E, Soleo)

Ustawienia portów COM

Zgodnie z instrukcją użytkownika kasy fiskalnej. Prędkość na porcie COM w systemie Windows powinna być ustawiona tak samo jak w kasie fiskalnej.

Konfiguracja kas fiskalnych

Więcej informacji na ten temat znajdą Państwo w ulotce „Kasy fiskalne” dostępnej na indywidualnych stronach internetowych dla Partnerów w obszarze walidowanym https://www.erp.comarch.pl/Partnerzy/default.aspx

Najczęściej pojawiające się problemy

Przy próbie importu paragonów z kasy pojawia się komunikat: „Błąd komunikacji z kasą. Brak towaru []. Zaimportuj PLU z kasy. (Rekord nie został znaleziony.)”.

Remedium

  • W kasie fiskalnej znajdują się towary, które nie mają założonych odpowiadających im kart cennikowych w bazie Comarch ERP Optima. Należy wykonać import towarów z kasy w menu Ogólne/ Cennik.
  • Źle została przygotowana baza danych. Kody towarów w bazie powinny być wpisane jako cyfry bez zer wiodących, czyli, np. 1,2,3…10,11…100,101… itd. W kasach fiskalnych kody krótkie są to kody, które stosuje się najczęściej do prostej identyfikacji towarów dla sprzedaży ręcznej. Kody te charakteryzują się ograniczoną maksymalną wartością oraz ignorowaniem zer nieznaczących, co oznacza, że podając np. 003 kasa przyjmie kod towaru o nr 3. Ograniczenie wartości jest zależne od modelu kasy (ilości obsadzonej pamięci) i określa maksymalną wartość kodu, który kasa zidentyfikuje jako krótki.

Przy próbie nawiązania komunikacji z kasą pojawia się komunikat: „Błąd komunikacji z kasą. Cena poza zakresem lub programowano cenę zerową, a nie ustawiono flagi „cena otwarta”.

Remedium

  • Wysyłany jest na kasę towar o niepoprawnej strukturze kodu EAN, np. w polu EAN jest znak inny niż cyfra np. 39309-75320. Kasy fiskalne akceptują tylko kody składające się z cyfr. Napis w pliku tekstowym musi być konwertowalny do liczby stałoprzecinkowej o określonej długości maksymalnej akceptowanej dla typu kasy fiskalnej.
  • Błędnie podany kanał multipleksera w konfiguracji programu.

Przy próbie wysłania towarów na kasę fiskalną z programu Comarch ERP Optima pojawia się komunikat: „Nie ustawiono stawki VAT ani grupy”.

Remedium

W programie Comarch ERP Optima Konfiguracja programu/ Ogólne/ Działy dla kas fiskalnych należy zdefiniować nazwę działu (grupy) taką jaka jest ustawiona na kasie fiskalnej.

Przy próbie wysłania towarów na kasę fiskalną z programu Comarch ERP Optima pojawia się komunikat: „Błąd komunikacji z kasą. Brak w konfiguracji symbolu stawki VAT dla stawki 22%”. Taki komunikat może się pojawić w przypadku każdej stawki VAT.

Remedium

W programie Comarch ERP Optima Konfiguracja programu/ Ogólne/ Działy dla kas fiskalnych jest zdefiniowana nazwa działu, ale w Konfiguracja programu/ Ogólne/ Symbole stawek VAT (Kasy) nie ma przypisanego odpowiedniego symbolu fiskalnego.

Przy próbie eksportu cennika do kasy pojawia się komunikat: „Napotkano niedozwolony znak”.

Remedium

  • Nazwy działów towarowych nie mogą być jedno znakowe w Konfiguracja/ Program/ Ogólne/ Działy dla kas fiskalnych. Dla kas Novitus – nazwa działu lub towaru ma być od 3 do 18 znaków.
  • W bazie towarowej są takie towary o dłuższej nazwie niż przyjmuje kasa, np. Opakowanie karton 20 szt. oraz Opakowanie karton 100 szt. – z punktu widzenia kasy to są takie same towary (pierwsze 18 znaków jest takie same, nie uwzględniając wielkości liter).
  • przy porównaniu nazw nie są brane pod uwagę znaki spacja,-,*,= itp. czyli dla kasy fiskalnej np. Novitus Soleo towar o nazwie PLANDEKA58M jest tym samym towarem co towar o nazwie PLANDEKA 58M.
  • niedozwolone znaki w nazwach towarów których nie akceptuje kasa fiskalna typu %@* itp.

Przy próbie komunikacji z kasą pojawia się komunikat: „Nie udało się nawiązać połączenia z kasą”.

Remedium

Należy sprawdzić w systemie Windows w menedżerze urządzeń prędkość dla portu COM. Prędkość na porcie COM w systemie Windows powinna być ustawiona taka sama jak na kasie fiskalnej.

Czytniki kodów kreskowych

Comarch ERP Optima współpracuje z każdym czytnikiem kodów kreskowych, który emuluje klawiaturę – ma możliwość wpięcia go do portu klawiatury.

Czytnik możemy wykorzystywać do:

  1. Wpisywania kodu EAN na formularz towaru. Karty cennikowe muszą mieć wypełnione pole EAN. Jeśli pozycja nie posiada własnego kodu (pole EAN jest puste) – wciśnięcie przycisku nadaje 13-znakowy kod EAN rozpoczynający się od 201 lub należy ustawić się w polu EAN i odczytać czytnikiem taki kod z towaru.
    Uwaga
    Wpisany tu kod kreskowy jednoznacznie identyfikuje pozycję, tzn. w jednej bazie nie mogą istnieć dwa towary o takim samym kodzie paskowym.
  2. Odszukiwania pozycji w cenniku/ na liście zasobów – operacje można wykonać z poziomu Cennika/Listy zasobów – zakładka Wg EAN.
  3. Dopisywania pozycji na dokument, w tym celu należy w Konfiguracja/ Firma/ Handel/ Parametry zaznaczyć w sekcji Dodawanie pozycji na dokumencie parametr edycja na liście – Wprowadzenie towarów polega na ustawieniu się w dokumencie w tabelce z towarami i odczyt czytnikiem kodu EAN, program szuka na liście zasobów pozycji o zadanym kodzie i jeśli taki kod istnieje pozycja zostanie dopisana. Pozostaje ustalenie ilości i ceny.
  4. Wprowadzania towaru jako składnika na recepturę.

Aby można było korzystać z czytnika kodów należy w Comarch ERP Optima zaznaczyć: w Konfiguracji firmy/ Handel/ Parametry parametr Sprzedaż tylko wg kodów EAN.

Jeśli parametr jest zaznaczony to podczas wpisywania pozycji na dokument program najpierw wyszukuje towar wg pola kod EAN, jeśli nie znajdzie towaru o takim kodzie EAN to przeszukuje listę wg kodu towaru, a jeśli nie znajdzie towaru o podanym kodzie – to w ostatniej kolejności przeszukuje listę wg nazwy.

Kody wagowe

Podczas wystawiania dokumentów w systemie Comarch ERP Optima istnieje możliwość odczytywania tzw. kodów wagowych (zawierających informację o wadze towaru). Kody takie są drukowane przez wagi, natomiast w chwili odczytu program rozpoznaje, że jest to kod wagowy i odpowiednio odczytuje ilość, wprowadzając ją na dokument. Sam towar jest rozpoznawany na podstawie 4-znakowego identyfikatora towaru, wpisanego w polu EAN na karcie towaru.

Uwaga
Funkcja odczytywania kodów wagowych nie działa na dokumentach Przyjęcia Wewnętrznego Produktów (PWP) oraz Rozchodu Wewnętrznego Składników (RWS).

Comarch ERP Optima współpracuje z kodami wagowymi, które zaczynają się od 27 lub 29.

Kod wagowy ma określoną strukturę, w związku, z czym:

  • wygenerowany kod wagowy ma mieć 13 znaków i zaczynać się od 27 lub 29 (trzeba zaprogramować poprawnie wagę metkującą).
  • kod EAN w programie Comarch ERP Optima zapisany na karcie towaru musi mieć wpisane 4 znaki (od 3 do 6 znaku z 13 znakowego kodu EAN).
  • waga towaru nie może przekraczać 9999 kg.

Uwaga
Funkcja odczytywania kodów wagowych działa tylko, jeśli w Konfiguracji firmy/ Handel/ Parametry wybrano parametr: Dodawanie pozycji na dokumencie jako: edycja na liście.

Przykłady:

  1. Towar o wadze 1,525 kg jest oznaczony numerem 29 1234 V 01525 K. Numer 1234 jest numerem tego towaru.
  2. Towar o masie np. 1,52 kg jest oznaczony numerem 27 0001 V 01520 K. Numer 0001 jest numerem danego towaru.

Drukarki etykiet

System Comarch ERP Optima współpracuje z następującymi drukarkami etykiet:

  • Dymo z serii Label Writer: 400 i 450 (Duo i Turbo)
  • Brother: QL-560 i QL-580N

W programie dostępne są wydruki etykiet opracowane w edytorze Generator Raportów dla odpowiednich rozmiarów papieru. Z listy cennikowej i kontrahentów dostępne są następujące wzory wydruków:

  • Dymo – Wzór: 57 x 32mm, 89 x 36 mm
  • Brother – Wzór: 29 x 90 mm, 62 x 100 mm

Uwaga
W przypadku drukarki Dymo dla wydruku wykonywanego bezpośrednio z menu wydruków, konieczne jest ustawienie we właściwościach drukarki w systemie Windows, w preferencjach drukowania (opcje zaawansowane), opcji „99012 Large Address” dla rozmiaru papieru.

Współpraca z kolektorami danych

System Comarch ERP Optima współpracuje z następującymi typami kolektorów:

  • Cipherlab (z serii 8000, 8001, 8300, 8400)
  • Opticon   (z firmy OptiData, np. Opticon PHL-2700)
  • BHT
  • Dolphin

Uwaga
Wymagamy, aby kolektor posiadał wgrane oprogramowanie oryginalne producenta, nie importera. Jeżeli jest inaczej może być konieczność przeprogramowania kolektora odpowiednim oprogramowaniem dostępnym na stronie producenta.

Możliwa jest współpraca z kolektorami z systemem znakowym na standardowych sterownikach Comarch ERP Optima. Kolektory z wbudowanym systemem operacyjnym nie będą działać ze standardowymi sterownikami jednak możliwe jest zastosowanie dodatkowych rozwiązań opracowanych przez innych producentów np. krakowską firmę OPTIDATA – więcej na ten temat w punkcie 6.7.

Konfiguracja danych dotyczących współpracy z kolektorem jest możliwa z poziomu Konfiguracji stanowiska/ Ogólne/ Kolektor. Należy tam wskazać przede wszystkim typ kolektora, z którym będzie współpracował program oraz port COM, przez który będzie przebiegała transmisja danych. Należy również wskazać protokół, wg, którego przebiega transmisja oraz inne parametry współpracy. W części Definicja rekordu należy podać specyfikację dotyczącą formatu pliku przesyłającego dane.

Uwaga
Po wybraniu typu kolektora program proponuje domyślne ustawienia parametrów transmisji. Użytkownik powinien jednak skontrolować, czy proponowane ustawienia są zgodne ze specyfikacją producenta kolektora.

W przypadku, gdy kolektor komunikuje się z komputerem przy wykorzystaniu tranceivera należy dodatkowo zaznaczyć parametr Używaj tranceivera.

Obsługa kolektorów jest zrealizowana w taki sposób, żeby umożliwić automatyczne dodawanie towarów wprowadzonych do kolektora na dokumenty handlowe i magazynowe oraz na arkusze inwentaryzacyjne. Możliwość importu danych z kolektora dostępna jest z poziomu większości formularzy dokumentów. Import z kolektora następuje automatycznie po wciśnięciu przycisku „Kolektor danych” lub kombinacją klawiszy

<CTRL>+<ALT>+<K>. Na podstawie danych z Konfiguracji stanowiska program nawiązuje łączność z kolektorem danych, a następnie wywołuje transmisję.

W efekcie na formularz dokumentu zostają wpisane towary wraz z ilościami. Ilości są wyrażone zawsze w jednostkach podstawowych. Ceny na dokumencie są proponowane przez program, zgodnie z obowiązującymi zasadami. W przypadku dokumentów zakupowych (FZ, PZ, PW, ZD) proponowane są ostatnie ceny zakupu. W przypadku dokumentów sprzedażowych (FA, WZ, RO, FPF…) – proponowane są ceny sprzedaży z grupy cenowej skojarzonej z kontrahentem wpisanym na dokument, z uwzględnieniem wszystkich rabatów.

Uwaga
Program Comarch ERP Optima posiada funkcję odbioru danych z kolektora, nie potrafi wysłać danych na kolektor.

Uwaga
Funkcja importu danych z kolektora nie działa w przypadku dokumentów korygujących oraz dokumentów, na których zblokowana jest możliwość dopisywania nowych pozycji (np. Faktura Sprzedaży utworzona na podstawie WZ z różnych magazynów).

Konfiguracja na przykładzie kolektora Cipherlab 8300 dla EAN13

Pobranie odpowiedniej aplikacji ze strony producenta

Ze strony WWW producenta http://www.cipherlab.com pobieramy program „Generator Aplikacji” z sekcji Download. Program dostępny również na płytach CD z oprogramowaniem dołączonym do kolektora.

Zdefiniowanie długości rekordu w kolektorze

W Generatorze Aplikacji należy wybrać z menu kontekstowego opcję Edit zakładka Form i ustawić odpowiednio parametry rekordu (Rys. 1), w naszym przypadku ustawiamy stałą długość dla kodów EAN 13, odpowiednio:

  • #1 – Pole przeznaczone na EAN: Typ danych: tekst; Min długość: 0; Max długość: 13
  • #2 – Pole przeznaczone na ilość: Typ danych: liczbowy; Min długość: 0; Max długość: 10
  • #3 – Pole przeznaczone na cechę (pole opcjonalne): Typ danych: tekst; Min długość: 0; Max długość: 20

Rysunek 1. Formularz ustawień długości rekordu w kolektorze

Dla każdej linii rekordu w kolumnie Properties należy wcisnąć przycisk More… i ustawić „Fixed data length” na wartość, która jest w polu „Max length” (Rys. 2).

Należy również ustawić odpowiednio dopełnienie do określonej ilości znaków. W tym celu w generatorze aplikacji kolektora wybieramy z rozwijalnej listy dopełnienie od lewej strony typu spacja, wybieramy więc „Left alligned (padded with space)”. Opcja ta służy do tego, aby zaczytując kolektorem towar o kodzie EAN krótszym niż 13 znaków program dopełniał go (w naszym przypadku spacjami) do 13 znaków, gdyż taką długość kodów EAN zdefiniowaliśmy w kolektorze (Rys. 2).

Rysunek 2. Formularz ustawień długości znaków dla danych

Przesłanie ustawień z Generatora Aplikacji do kolektora

W kolektorze danych należy wybrać opcje 3. Narzędzia/ 6. Ładuj aplikację i wczytać ustawienia z Generatora aplikacji – polecenie Download Application w menu kontekstowym Generatora Aplikacji. Nastąpi wówczas nawiązanie komunikacji i przesył danych do kolektora.

Ustawienie parametrów połączenia w kolektorze

W kolektorze danych Wybrać opcje 3. Narzędzia/ 1. Ustawienia programu

Ustawić:

  • Download Interface – Cradle-IR
  • Upload Interface – Cradle-IR
  • Transmission Speed – Baud rate – 9600 bps

Ustawienie parametrów dla połączenia z kolektorem w Comarch ERP Optima

W programie Comarch ERP Optima Konfiguracja stanowiska/ Ogólne/ Kolektor w sekcji Ustawienia sterownika wybieramy sterownik Cipherlab (Rys. 3). Jeżeli kolektor używa transceivera to zaznaczamy odpowiedni czek, następnie ustawiamy:

  • Protokół – SKKBHT
  • Prędkość transmisji – 9600
  • Parzystość – Brak
  • Bity danych – 8
  • Bity stopu – 1

Ustawienie definicji rekordu kolektora w Comarch ERP Optima

W programie Comarch ERP Optima, w Konfiguracji stanowiska/ Ogólne/ Kolektor w sekcji Definicja rekordu ustawiamy w naszym przypadku dla EAN 13 znakowego odpowiednio parametry (Rys. 3):

  • Długość rekordu – 24
  • Początek pola kodu towaru – 0
  • Koniec pola kodu towaru – 12
  • Początek pola ilości – 14
  • Koniec pola ilości – 23

Rysunek 3. Formularz dla ustawień kolektora Comarch ERP Optima

Import danych z kolektora do Comarch ERP Optima

Po ustawieniu powyższych parametrów połączenia oraz zdefiniowaniu prawidłowej długości rekordu w kolektorze, wybieramy w kolektorze funkcję 1. Collect data i zaczytujemy do kolektora kody towarów EAN w odpowiednich ilościach.

Następnie w kolektorze wybieramy opcję 2. Upload data a w programie Comarch ERP Optima na formularzu dokumentu ikoną Kolektor danych zaczytujemy dane z kolektora.

Przeprogramowanie frameware kolektora Cipherlab

Jeżeli kolektor posiadał wgrane oprogramowanie importera, a nie oryginalne producenta należy wówczas takiemu kolektorowi przeprogramować jego środowisko programowe, tzw. „frameware”. Pliki zawierające środowisko programowe kolektora mają rozszerzenie .SHX, dostępne do pobrania ze strony producenta. W momencie włączenia kolektora na dole ekranu pod napisem „Welcome” możemy sprawdzić jaka jest jego obecna wersja frameware.

Aby przeprogramować kolektor należy wykonać następujące czynności:

  1. Wyłączamy kolektor.
  2. Włączamy kolektor kombinacją klawiszy: 7,9 i przycisk włącz (Power).
  3. Wybieramy: 6. Load Program -> 1. Cradle-IR -> 6. Baud rate: 9600 -> please place In Cradle (odstawiamy kolektor na tranceiver).
  4. Uruchamiamy program ProgLoad.exe. Podajemy typ komunikacji, numer portu COM, prędkość transmisji oraz wskazujemy plik .SHX z frameware, zgodnie z rysunkiem 4.
  5. Wciskamy przycisk OK. Po nawiązaniu połączenia z kolektorem i wykonaniu downloadu wyłączamy kolektor.
  6. Włączamy kolektor i wykonujemy programowanie Generatorem Aplikacji zgodnie z punktem 5.1.

Rysunek 4. Formularz programu ProgLoad

Uwaga
Środowisko kolektora z którym poprawnie działa Comarch ERP Optima to starszy frameware w wersji U8000-2600.SHX. Do pobrania ze strony producenta. Przeprogramowanie na tą wersję wykonywać gdy nie można uzyskać komunikacji Comarch ERP Optima z obecną wersją frameware kolektora.

Najczęściej pojawiające się problemy

Przy próbie odczytu danych z kolektora pojawia się komunikat: „Brak danych w kolektorze”.

Remedium

  • Sprawdzić czy prędkość transmisji jest ustawiona taka sama w kolektorze jak w konfiguracji w programie Comarch ERP Optima.
  • Sprawdzić w kolektorze, który korzysta z transceivera czy w ustawieniach parametry Upload oraz Download Interface została ustawiona w obu miejscach opcja na Cradle-IR.
  • Źle jest ustawiony rekord w kolektorze lub definicja rekordu w Comarch ERP Optima.

Przy próbie odczytu danych z kolektora CipherLab pojawia się komunikat: „Wielokrokowa operacja wygenerowała błędy”.

Remedium

Problem związany jest z nieprawidłowym zaprogramowaniem kolektora. Należy sprawdzić jak jest ustawione dopełnienie, czy nie jest zaznaczona opcja konwersji kodu np. 12-znakowego na 13-znakowy kod EAN, a w kolektorze ustawiony jest EAN-14 z dopełnianiem, czy zostały zaznaczone dodatkowe błędne parametry.

Przykład ustawień dla kolektora Cipherlab 8400 (kody EAN13)

Zakładając, że kolektor posiada domyślne ustawienia dystrybutora (Torell) konfiguracja po stronie Comarch ERP Optima wygląda jak poniżej (Konfiguracja stanowiska/ Ogólne/ Kolektor).

W sekcji Ustawienia sterownika wybieramy sterownik Cipherlab (C:\Program Files\Comarch ERP Optima\cdn_ciph.dll). Jeżeli kolektor używa transceivera, to zaznaczamy odpowiedni czek, a następnie ustawiamy:

  • Protokół – YMODEM
  • Prędkość transmisji – 115200
  • Parzystość – Brak
  • Bity danych – 8
  • Bity stopu – 1
  • Bity stopu – 1

Ustawienie definicji rekordu kolektora w Comarch ERP Optima:

W menu Konfiguracja stanowiska/ Ogólne/ Kolektor w sekcji Definicja rekordu ustawiamy (w tym przypadku dla EAN 13 znakowego) odpowiednio parametry:

  • Długość rekordu – 24
  • Początek pola kodu towaru – 0
  • Koniec pola kodu towaru – 12
  • Początek pola ilości – 14
  • Koniec pola ilości – 23

Przykład ustawień dla kolektora BHT Denso w Comarch ERP Optima

Sterownik: C:\Program Files\Comarch ERP Optima\cdn_coll.dll

  • Protokół: SKKBHT
  • Prędkość transmisji: 19200
  • Parzystość: brak
  • Bit danych: 8
  • Bit stopu: 1
  • Używaj tranceivera: odznaczone

Definicja rekordu:

  • Długość rekordu: 30
  • Pocz. pola towaru: 0
  • Koniec pola tow.:19
  • Pocz. pola ilość: 21

Uwaga
W przypadku gdy z kolektora przesyła się na dokument tylko pierwsza pozycja należy w rejestrze systemowym Windows dodać w gałęzi [HKEY_LOCAL_MACHINE\SOFTWARE\CDN\Kolektory] ciąg o nazwie „Brak zakonczenia linii” i ustawić dla tego wpisu wartość „1”.

Przykład ustawień dla kolektora firmy OPTIDATA

Ustawienie parametrów połączenia w kolektorze

  • Prędkość transmisji – 19200
  • Parzystość – Brak
  • Bity danych – 8
  • Bity stopu – 1

Na urządzeniu należy wybrać profil „ERP XL” co spowoduje automatyczne ustawienie powyższych parametrów. W tym celu należy wejść do menu Parametry następnie wprowadzić odpowiednie hasło odszukać opcję „Profil” i wybrać profil „ERP XL” (jest on zgodny z Comarch ERP Optima).

W przypadku niektórych rodzajów kolektorów należy w doku komunikacyjnym – na spodzie podstawki komunikacyjnej odpowiednio ustawić grupę mikroprzełączników na takie same wartości jak na porcie COM.

Konfiguracja szerokości pól w kolektorach OptiData jest stała i nie podlega zmianom, przy czym kolektory poprawnie obsługują zarówno 8 jak i 13 znakowe kody kreskowe.

Ustawienie parametrów dla połączenia z kolektorem w Comarch ERP Optima

W programie Comarch ERP Optima, w Konfiguracji stanowiska/ Ogólne/ Kolektor w sekcji Ustawienia sterownika wybieramy sterownik Cipherlab (Rys. 5). Nie zaznaczamy czeku używaj tranceivera a następnie ustawiamy parametry:

  • Protokół – SKKBHT
  • Prędkość transmisji – 19200
  • Parzystość – Brak
  • Bity danych – 8
  • Bity stopu – 1

Ustawienie definicji rekordu kolektora w Comarch ERP Optima

  • Długość rekordu – 44
  • Początek pola kodu towaru – 0
  • Koniec pola kodu towaru – 19
  • Początek pola ilości – 21
  • Koniec pola ilości – 33

Rysunek 5. Formularz dla ustawień kolektora w Comarch ERP Optima

Terminale płatnicze

Comarch ERP Optima zapewnia współpracę z następującymi terminalami:

  • VeriFone VX 520 dystrybuowanym przez eSerwis
  • VeriFone VX520 dystrybuowanym przez Polcard
  • Ingenico ICT220 ETH dystrybuowanym przez Polcard

Za pomocą terminali płatniczych obsługiwane są dwie operacje kartą płatniczą: obciążenie karty płatniczej oraz zwrot środków płatniczych na kartę.

Konfiguracja płatności obsługiwanych przez terminal płatniczy

Aby rozpocząć współpracę z terminalem, należy dokonać odpowiedniej konfiguracji:

  • Na dokumentach musi być wybrana forma płatności o typie karta z zaznaczonym parametrem: Terminal Płatniczy (opcja do zaznaczenia na formularzu formy płatności dostępnym z poziomu System/ Konfiguracja/ Firma/ Kasa/Bank/ Formy płatności).
  • W menu System/ Konfiguracja/ Firma/ Kasa/Bank/ Parametry należy zaznaczyć parametr Automatycznie generuj dokumenty zapłaty kartą kredytową.

Uwaga
Przed uruchomieniem współpracy z terminalem należy upewnić się, że operator wystawiający dokumenty nie ma ustawionego zakazu lub blokady na wprowadzanie zapisów, powodujących ujemne saldo do rejestru powiązanego z płatnością wysyłaną na terminal. W przeciwnym wypadku płatność zostanie zarejestrowana, ale dokument nie będzie rozliczony.

Rysunek 6. Formularz formy płatności

Parametr Terminal płatniczy jest aktywny tylko dla typu płatności Karta, dla innych typów płatności parametr jest nieaktywny.

  • W System/ Konfiguracja/ Stanowisko/ Ogólne/ Terminal płatniczy należy wybrać sterownik do terminala płatniczego.

Rysunek 7. Konfiguracja terminala płatniczego

Model terminala – pole które domyślnie jest niewypełnione, po rozwinięciu listy możemy wskazać odpowiedni model terminala:

  • eServiceVeriFone VX520
  • PolcardVeriFone VX520
  • Ingenico ICT220 ETH
  • eServiceVeriFone VX520 Terminal
  • PolcardVeriFone VX520 Terminal
  • Ingenico ICT220 ETH Terminal

Uwaga
Konfiguracja samego terminala powinna być wykonywana przez Serwis obsługujący terminale.

W zależności od wybranego modelu aktywują się lub uzupełniają następujące pola:

  • Typ połączenia – ustawia się automatycznie, w zależności od wybranego sterownika terminala płatniczego.
  • Port szeregowy – pole dostępne dla urządzeń o typie połączenia RS232. Należy wskazać w nim port COM, do którego podłączone jest urządzenie.
  • Adres IP – pole dostępne dla urządzeń o typie połączenia TCP/IP. Należy w nim wpisać adres IP terminala płatniczego.
  • Port TCP/IP – pole dostępne dla urządzeń o typie połączenia TCP/IP. Należy w nim wprowadzić numer portu, na którym odbywać się będzie komunikacja pomiędzy programem Comarch ERP Optima, a terminalem płatniczym.
  • Test – po wciśnięciu przycisku Test program sprawdza, czy istnieje możliwość komunikacji pomiędzy komputerem i terminalem.

Uwaga
Po wybraniu w Konfiguracji systemowego wirtualnego portu COM dla terminala płatniczego, program Comarch ERP Optima może działać niestabilnie.

Domyślnie w systemie WINDOWS ten port jest oznaczony jako COM1.

Płatności terminalowe a rodzaje obsługiwanych dokumentów

Przesyłanie płatności do terminala realizowane jest na formularzach następujących dokumentów:

  • Fakturze Sprzedaży i na wszystkich dostępnych dla niej korektach (z wyjątkiem korekty danych),
  • Fakturze Zaliczkowej i korekcie wartości do niej,
  • Paragonie i korekcie ilości do Paragonu,
  • Wydaniu Zewnętrznym z opcją płatności i korekcie ilości/ wartości/ stawki VAT do WZ (dotyczy modułów Handel, Handel Plus).

Płatności za pomocą terminala płatniczego na dokumentach FA, PA, WZ z płatnością i FZAL

Jeśli na dokumencie Faktury lub Paragonu wybrana jest forma płatności typu Karta z zaznaczonym parametrem Terminal Płatniczy, to przy zapisie dokumentu na stałe, płatności zapisywane są w preliminarzu, a następnie wyświetlane jest okno Potwierdzenie obciążenia karty:

Rysunek 8. Okno – potwierdzenie obciążenia karty

Pole Klient wpłaca jest domyślnie przepisane z pola Do zapłaty, a ustawienie kursora znajduje się w polu potwierdzenia, co pozwala od razu zatwierdzić wpłatę. Nie ma możliwości zmiany kwoty w polu Klient wpłaca. Zmiany kwoty wysyłanej na terminal można dokonywać tylko z poziomu samego dokumentu na zakładce [Płatności].

Kwota na zakładce [Płatności] może zostać podzielona. Jeżeli dokument ma być rozliczony na przykład gotówką i kartą, wówczas w tabelce płatności należy wprowadzić kwotę płatną gotówką, wybrać przycisk z płatnością gotówkową, a następnie przycisk z płatnością kartą. Kwota dla karty płatniczej zostanie przesłana do terminala płatniczego.

Po wyświetleniu okna z wpłatą:

  • można się z niego wycofać (wciskając przycisk Anuluj zmiany), wystawiany wówczas dokument nie jest zapisywany na stałe i nie jest realizowana płatność.
  • można zatwierdzić płatność, wystawiany wówczas dokument zapisywany jest na stałe i uruchamiany jest proces płatności przez terminal płatniczy.
  • Podczas trwania transakcji w programie wyświetlane są komunikaty odzwierciedlające postęp wykonywania transakcji na terminalu.

W przypadku wystąpienia błędu przy płatności wyświetlany jest komunikat: „Transakcja nie została zakończona poprawnie, czy powtórzyć transakcję”  Do wyboru dostępne są opcje: Tak/Nie. W przypadku wyboru opcji Nie dokument jest zapisywany na stałe i nie jest rozliczany, a po wybraniu opcji Tak następuje próba rozliczenia.

Jeśli po wysłaniu płatności Klient nie zdąży wpisać pin-u (w ciągu 60 sekund) wyświetlana jest informacja, że minął czas oczekiwania i pojawia się pytanie czy transakcja przeszła poprawnie. Użytkownik może potwierdzić tę transakcję lub nie. Jeżeli transakcja zostanie odrzucona i nie zostanie potwierdzona, dokument zapisuje się na stałe. Brak potwierdzenia dotyczy wówczas samej transakcji, a nie dokumentu.

Jeśli płatność kartą zostanie zaakceptowana, wówczas zapis z preliminarza rozliczany jest z zapisem kasowo bankowym. Jeżeli podczas rozliczania nie jest otwarty Raport kasowo/bankowy, to przy zapisie jest on od razu tworzony (analogiczne działanie jak przy zapisie gotówki).

Wydruk samego dokumentu może być wykonany po zakończeniu procesu wystawiania dokumentu, natomiast jeśli dokument ma zostać zafiskalizowany, drukowanie dokumentu na drukarce fiskalnej odbywa się po zakończeniu płatności. Jeśli po rozliczeniu płatności wystąpi błąd fiskalizacji i dokument nie będzie mógł być zafiskalizowany, do dokumentu generującego płatność można wykonać korektę, której zatwierdzenie spowoduje zwrot środków na kartę płatniczą. Można też anulować dokument i wystawić dokument KW na pobraną przez terminal kwotę.

W przypadku, gdy nie jest zaznaczony parametr: Domyślny schemat numeracji dla automatycznych zapisów kasowych w menu Konfiguracja/ Firma/ Kasa/Bank/ Parametry, na zapisie kasowym generowanym automatycznie podczas płatności przez terminal w polu Numer wewnętrzny pojawi się numer zgodny ze schematem domyślnym dla zapisów, wskazanym w Konfiguracji Firmy/ Kasa/Bank/ Dokumenty. Natomiast w polu Numer pojawi się numer dokumentu handlowego, który jest rozliczany.

Uwaga
Aby wystawiać dokumenty magazynowe wymagana jest licencja na moduł Handel lub Handel Plus
.

Płatności za pomocą terminala płatniczego na dokumentach korekt do FA i PA oraz FZAL

Jeśli dokument korygujący posiada płatności typu Karta z zaznaczonym parametrem Terminal płatniczy, to w momencie zapisu dokumentu na stałe wykonywana jest transakcja płatnicza za pomocą terminala. Operacje wykonywane są analogicznie jak dla płatności dokumentu FA i PA.

W sytuacji realizowania płatności do korekt, kwota do zapłaty może być zarówno na plus jak i na minus, dlatego w zależności od kierunku płatności na oknie wpłaty podpowiadana jest odpowiednia operacja: obciążenie karty płatniczej bądź zwrot środków na kartę.

Płatności za pomocą terminala płatniczego na dokumentach walutowych

Jeżeli dokument wystawiony jest w walucie, to wszystkie wartości na terminal wysyłane są w walucie systemowej.

Na terminal wysyłana jest wartość złotówkowa, równa wartości brutto z tabelki VAT na dokumencie.

Wartość złotówkowa wysyłana na terminal przeliczana jest po kursie użytym na dokumencie.




OPT074 – Dodawanie kolumn użytkownika na listach

Data aktualizacji: 21-12-2018


Spis treści

Wstęp

Przykłady z instrukcją tworzenia


Wstęp

Użytkownik Comarch ERP Optima ma możliwość dodawania na listach dokumentów kolumn o dowolnej definicji z dowolnej tabeli dostępnej w bazie danych. Dodawanie kolumn odbywa się z pomocą mechanizmu personalizacji okna. Możliwe jest wyłączenie personalizacji listy dla danego operatora, zwykła personalizacja kolumn, które zdefiniował użytkownik poprzez dodanie kolejnych instrukcji JOIN, dodanie wyrażeń definiujących nową kolumnę oraz testowanie całego zapytania.

Można w dowolny sposób dołączać tabele (również z bazy konfiguracyjnej) do zdefiniowanego zapytania SQL oraz definiować kolumny o dowolnej składni pobierania danych. Dodawanie kolumn może odbywać się w łatwy sposób poprzez „przeciągnięcie” wybranej kolumny na listę Kolumny użytkownika. Dodane kolumny można sortować, grupować oraz wykonywać operacje dostępne z wiersza sum.

Po dodaniu kolumn i tabel wydajność pobierania danych na liście może znacznie spaść. Należy rozważyć tutaj dwa przypadki: sama definicja kolumny nie spowoduje żadnego spowolnienia, jeśli kolumna nie będzie widoczna oraz dodatkowa instrukcja LEFT JOIN spowoduje spowolnienie tylko wtedy, gdy będzie widoczna jakaś kolumna wykorzystująca tą instrukcję lub kolumna zostanie użyta w filtrze. Powyższe problemy zostawiamy do rozwiązania wdrożeniowo przez partnera rozszerzającego funkcjonalność listy.

Wygląd okna personalizacji

Funkcjonalność dostępna jest z poziomu personalizacji aktywnego okna <Shift>+<F9> po kliknięciu ikony . Na oknie Personalizacja listy jest możliwość:

  • Dodawania złączeń do kolejnych tabel bazy danych (również z bazy konfiguracyjnej).
  • Dodawania wyrażeń definiujących nową kolumnę danych,  po której będzie można sortować i grupować listę.
  • Testowania całego zapytania.

Okno personalizacji listy podzielone jest na 5 części:

  • Kolumny dostępne z aktualnie wybranych tabel (wraz z dodatkowymi instrukcjami JOIN) – Jest to lista prezentująca wszystkie pola możliwe do pokazania na liście przy aktualnie zdefiniowanej klauzuli FROM wraz z dodatkowymi złączeniami (instrukcjami JOIN) dodanymi przez użytkownika. Lista jest aktualizowana po dołączeniu nowej tabeli przez użytkownika w sekcji Tabele użytkownika. Lista wyświetlana jest w trybie tylko do odczytu, istnieje jednak możliwość „przeciągnięcia” wybranej kolumny na listę Kolumny użytkownika.
  • Kolumny użytkownika – lista kolumn dodanych przez użytkownika. Dla dodanej kolumny można określić jej nazwę dla użytkownika, instrukcję pobierania, typ i format wyświetlania, domyślną widoczność i dostępność kolumny oraz dodatkowy opis.
  • Tabele domyślne – treść zapytania FROM standardowo wysyłanego do serwera SQL – pole do odczytu.
  • Tabele użytkownika – sekcja umożliwiająca dołączenie kolejnych tabel przez użytkownika. Aby dołączyć nową tabelę należy wskazać jej nazwę (wraz z prefixem „CDN”) oraz podać instrukcję łączenia, czyli klauzulę potrzebną do wykonania połączenia tabel (np. TrN_KntID= Knt_KntID).
  • Wynikowe zapytanie SQL – zapytanie utworzone z kolumn zdefiniowanych przez użytkownika i instrukcji FROM z dodanymi złączeniami (instrukcjami JOIN) użytkownika, z możliwością sprawdzenia poprawności wykonania – pole do odczytu.

Rys. Personalizacja listy

Na oknie znajdują się przyciski:

  •  – Sprawdzenie poprawności utworzonego zapytania. Przycisk możliwy do wywołania w dwóch trybach (rozwijalna lista obok przycisku):
  • Sprawdź składnię – weryfikacja poprawności składni zapytań użytkownika, w przypadku poprawnego wykonania testu pojawia się komunikat: Kolumny zostały dodane poprawnie.
  • Sprawdź wydajność – zmierzenie czasu wykonania zapytania użytkownika; pierwsze wykonanie zmienionego zapytania SQL może nie być miarodajne, gdyż Serwer SQL nie będzie jeszcze miał w pamięci cache tego zapytania, w związku z czym pierwsze wykonanie zapytania może być dłuższe, niż kolejne.
  •  Zapis zmian. Jeżeli po wprowadzeniu zmian użytkownik nie sprawdzi poprawności zapytania, zostanie to wykonane w momencie zapisu zmian w dodatkowych kolumnach. Jeżeli zapytanie nie będzie poprawne, okna nie będzie można zapisać. Podczas zapisu okna personalizacji listy sprawdzane jest również, czy modyfikacja zapytania nie spowodowała efektu „rozmnożenia” wierszy na liście (np. faktura pokazuje się na liście tyle razy, ile ma elementów) – taka sytuacja jest błędna i niektóre funkcje programu mogą wówczas nie działać prawidłowo
  •  Eksport ustawień dodatkowych kolumn użytkownika, bez pozostałych ustawień personalizacji. Eksport wykonywany jest do formatu XML.
  •  Import ustawień dodatkowych kolumn użytkownika z pliku XML.

Kolumny użytkownika

Lista umożliwiająca dodanie przez użytkownika nowej kolumny na listę. Zawiera kolumny:

Nazwa dla użytkownika – pod jaką nazwą kolumna będzie widoczna na interfejsie.

Instrukcja pobrania danych – pole z bazy lub można wpisać treść, która występuje w klauzuli SELECT i dotyczy pojedynczej kolumny.

Format wyświetlania – można określić formatowanie zwracanych wartości w kolumnie np. jeżeli do pokazania będzie kolumna typu DateTime, a standardowo część czasowa jest ucinana, potrzebne będzie tu wprowadzenie odpowiedniej wartości formatującej pokazywaną treść. Formatowanie należy ustawić w kolumnie Typ formatu wyświetlania oraz w kolumnie Format wyświetlania. Kolumna Typ formatu wyświetlania przyjmuje 4 wartości:

  • None – dane w definiowanej kolumnie wyświetlane są sposób domyślny
  • Numeric – dane liczbowe
  • DateTime – data/czas
  • Custom – niestandardowy format wyświetlania

Ostatnie 3 opcje definiują w jaki sposób wartości mają być wyświetlane używając formatu z pola Format wyświetlania.

Kolumna Format wyświetlania

  • Standardowe formaty wyświetlania dla liczb.

Standardowy format wyświetlania dla liczb składa się z litery (określającej rodzaj formatu) oraz 2 cyfr (określających precyzję). Rodzaj formatu decyduje w jaki sposób wartość jest transformowana.

Rodzaj formatu

Opis

Przykład formatu

Przykładowa wartość

c lub CLiczba jest wyświetlana jako wartość walutowa. Specyfikacja precyzji określa żądaną ilość miejsc dziesiętnych. Jeżeli precyzja nie zostanie wpisana, zostanie użyta domyślna precyzja wartości formatu waluty z ustawień regionalnych.c2$1,234.00
n lub NLiczba jest wyświetlana w formie "-d,ddd,ddd.ddd...", gdzie każde 'd' oznacza cyfrę. Wartość będzie poprzedzona znakiem minus, jeżeli liczba jest ujemna. Separator tysięcy jest wstawiany między każdą grupę 3 cyfr na lewo od kropki dziesiętnej. Specyfikacja precyzji określa żądaną ilość miejsc dziesiętnych. Jeżeli precyzja nie zostanie wpisana, zostanie użyta domyślna precyzja wartości formatu waluty z ustawień regionalnych.n01.234
d lub DWartość jest wyświetlana jako liczba całkowita ze znakiem minus. Jeżeli wyświetlana będzie liczba z częścią dziesiętna, zostanie ona sformatowana domyślnie. Specyfikacja precyzji określa minimalną ilość cyfr, która ma zostać pokazana. Jeżeli będzie to potrzebne, liczba zostanie dopełniona „nieistotnymi” zerami z lewej strony, aby zapewnić odpowiednią długość wartości. Jeżeli precyzja nie zostanie wybrana, pokazane zostanie dokładnie tyle cyfr, ile potrzeba do reprezentowania wartości bez początkowych zer.D800004392
p lub PLiczba mnożona jest przez 100 i wyświetlana ze znakiem %. Specyfikacja precyzji określa żądaną ilość miejsc dziesiętnych. Jeżeli nie zostanie określona, pokazywane są 4 miejsca dziesiętne.P289,48 %

  • Standardowe formaty wyświetlania dla daty i czasu.

Standardowy format daty/czasu składa się z jednej litery, która określa wzorzec, wg którego wartości będą wyświetlane (czy i w jaki sposób wyświetlać lata, miesiące itd.).

FormatOpisPrzykład
dWzorzec daty krótkiej.04-06-2014
DWzorzec daty długiej.4 czerwca 2014
tWzorzec czasu krótkiego.14:08
TWzorzec czasu długiego.14:08:00
fWzorzec daty długiej i czasu krótkiego.4 czerwca 2014 14:08
FWzorzec daty długiej i czasu długiego.4 czerwca 2014 14:08:00
gWzorzec daty krótkiej i czasu krótkiego.04-06-2014 14:08
GWzorzec daty krótkiej i czasu długiego.04-06-2014 14:08:00
m lub MWzorzec miesiąca i dnia.4 czerwca
y lub YWzorzec roku i miesiąca.czerwiec 2014
sWzorzec sortowalny.2014-06-04T14:08:00

  • Niestandardowe formaty dla liczb

Formaty niestandardowe używane są do ręcznego stworzenia odpowiedniego wzorca. Tego sposobu formatowania należy używać tylko wtedy, gdy standardowe formaty nie są wystarczające. Wszystkie formaty składające się z litery, za którą występują jedna lub dwie cyfry, traktowane są jako formaty standardowe. Wszystkie pozostałe są interpretowane jako formaty niestandardowe. Poniżej znajdują się najczęściej używane symbole do konstruowanie niestandardowych formatów.

ZnakZnaczenie
0Cyfra jest wyświetlana zawsze.
#Cyfra jest wyświetlana, gdy jest potrzebna (używane np, aby nie wyświetlać początkowych zer).
.Określa miejsce kropki dziesiętnej. Wygląd symbolu dziesiętnego zależy od ustawień regionalnych.
,Wyznacza użycie separatora tysięcy. Wygląd separatora zależy od ustawień regionalnych.
%Mnoży liczbę przez 100 i wstawia symbol % zgodny z ustawieniami regionalnymi.
\Kolejny znak jest wstawiany literalnie do wyniku.

  • Niestandardowe formaty daty i czasu

Aby stworzyć wzorzec daty i czasu należy połączyć symbole z tabel poniżej, reprezentujące rok, miesiąc, dzień itd. w różnych formatach.

Symbole dotyczące dat:

SymbolZnaczenieWynik formatownia przykładowej daty (22.06.2014)
yyOstatnie dwie cyfry roku.14
yyyyCztery cyfry roku.2014
MMNumer miesiąca.06
MMMSkrót nazwy miesiąca.cze
MMMMPełna nazwa miesiąca.czerwiec
ddNumer dnia.22
dddSkrót dnia tygodnia.N
ddddPełna nazwa dnia tygodnia.niedziela
/Separator daty. Pobierany z ustawień regionalnych.

  • Symbole dotyczące czasu:

SymbolZnaczenie
hhGodziny.
mmMinuty.
ssSekundy.
:Separator czasu. Pobierany z ustawień regionalnych.

Szczegółowe informacje na temat formatowania danych można odnaleźć na stronach MSDN w obszarze dotyczącym formatowania wartości (Formatting types: http://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.100).aspx).

Domyślnie Widoczna/Dostępna – domyślne wartości, jakie ustawią się dla tej kolumny na liście.

Opis – dodatkowy opis pokazujący się po najechaniu myszką na nagłówek kolumny.

Tabele użytkownika

Lista umożliwiająca dołączenie kolejnych tabel lub innych obiektów dozwolonych przez SQL do wykonywanego już zapytania. Zawiera kolumny:

Lp – liczba porządkowa, służy do ustalenia kolejności dołączania tabel w zapytaniu.

Nazwa tabeli – nazwa tabeli ze struktury bazy danych.

Instrukcja łączenia – klauzula potrzebna do wykonania połączenia tabel np. TrN_KntID= Knt_KntID.

Parametr kolumny użytkownika na oknie personalizacji

Na oknie personalizacji znajduje się kolumna Kolumny użytkownika. Domyślnie każdy operator ma zaznaczoną tę wartość, co oznacza, że dla tego operatora są dostępne do wyboru dodatkowo zdefiniowane kolumny. Jeżeli parametr dla operatora będzie odznaczony – wówczas pomimo dodanych nowych kolumn w personalizacji, lista dla tego operatora będzie miała dostępne tylko standardowe kolumny. Na rozwijanej liście z dostępnymi kolumnami, te dodane przez użytkownika wraz z przeniesionymi domyślnymi ustawieniami w kolumnach Widoczna i Dostępna będą widoczne na końcu listy, dodatkowo pisane kursywą dla łatwego ich odróżnienia od kolumn standardowych.

Rys. Okno personalizacji

Dodawanie kolumn na listach

Podczas uruchamiania okna programu z listą, która ma dodane przez użytkownika niestandardowe tabele, zostanie najpierw wykonane sprawdzenie, czy zapytanie użytkownika nie zwraca większej ilości wierszy, niż zapytanie standardowe. Jeżeli ilość wierszy będzie taka sama, wówczas okno uruchomi się w spersonalizowanym trybie. Jeżeli natomiast ilość wierszy będzie różna, wówczas wygenerowany zostanie komunikat: Dodatkowe tabele dodane w personalizacji powodują powielanie wierszy na liście. Lista zostanie uruchomiona w trybie standardowym., po czym nastąpi uruchomienie okna bez dodatkowych kolumn i tabel.

Uwaga
Dodanie każdej tabeli użytkownika powoduje modyfikację treści FROM zapytania. W związku z tym wskazanie np. tabeli z elementami dokumentu (nawet bez wybrania kolumn z tej tabeli) będzie powodować zduplikowanie wyświetlanych wierszy i generowanie powyższego komunikatu przy otwieraniu listy.

Jeżeli nie uda się pobieranie danych na listę z dodatkowymi kolumnami i/lub tabelami, pokazany zostanie komunikat Błąd pobierania danych na listę. Lista zostanie uruchomiona w trybie standardowym., a następnie okno programu zostanie uruchomione bez dodatkowych kolumn i tabel.

W przypadku ustawienia filtrowania lub sortowania wg dodanej przez użytkownika kolumny, wydruki z list mogą nie działać poprawnie, jednakże wydruk bieżącego widoku powinien zawsze działać poprawnie.

W menu Narzędzia/ Testy integralności jest dostępny test Okna z dodatkowymi kolumnami sprawdzający, do których okien dodane zostały kolumny lub tabele użytkownika i prezentujący w logu nazwy tych okien.

Przekazywanie zmiennych dynamicznych

W polach Instrukcja wprowadzania danych oraz Instrukcja łączenia istnieje możliwość przekazania wybranych wartości ze zmiennych dynamicznych oraz wartości z panelu filtra. Otrzymujemy możliwość uzależnienia wartości pokazywanych w dodatkowych kolumnach od wartości ze zmiennych dynamicznych (np. uzależnienie od Operatora), czy wartości z panelu filtra (np. uzależnienie od daty aktualności listy).

W polach wprowadzania instrukcji, gdzie podajemy konkretne wartości (np. 2017-11-21) mamy możliwość wykorzystania specjalnych aliasów, odpowiadających tym wartościom (np. #CDN_DataBiezaca#), przekazujących wybrane zmienne dynamiczne lub wartości z panelu filtra. Aby ułatwić wstawienie odpowiedniego aliasu menu kontekstowe wyświetla listę dostępnych wartości:

Parametry standardowe - przy dodawaniu kolumn udostępnione zostały wybrane wartości ze zmiennych dynamicznych. Po wybraniu opcji Parametry standardowe rozwija się dodatkowe menu z następującymi wartościami:

Parametry filtra - po wybraniu opcji Parametry filtra rozwija się dodatkowe menu z wartościami przekazywanymi z panelu filtra danej listy. Między różnymi listami mogą być różne parametry filtra. Poniżej przykład z wartościami przekazywanymi z listy pracowników:

Po wybraniu wartości w miejsce kursora zostanie wstawiony odpowiedni alias.

Przykłady z instrukcją tworzenia

1. Lista zasobów/cennik. Kolumny: kod PLU, nazwa fiskalna oraz waga towaru

Potrzebne pola znajdują się w tabeli CDN.Towary. Na oknie personalizacji listy w sekcji Kolumny dostępne z aktualnie wybranych tabel należy odnaleźć pole Twr_PLU i przeciągnąć do sekcji Kolumny użytkownika oraz nadać nazwę dla kolumny. Tak samo należy postąpić w przypadku pozostałych kolumn czyli Twr_NazwaFiskalna oraz Twr_WagaKG. Dodatkowo dla pola Waga ustawiamy w kolumnie Typ formatu wyświetlania na Numeric a Format wyświetlania na N4 (N- wartość numeryczna, 4 – wyświetlanie do czterech miejsc dziesiętnych).

2. Lista zasobów/cennik. Kolumny: kod CN oraz kraj pochodzenia

Potrzebne pola znajdują się w tabeli CDN.Towary oraz CDN.KodyCN. Na oknie personalizacji listy w sekcji Tabele użytkownika należy połączyć powyższe tabele aby mieć dostęp do pól związanych z kodami CN. W związku z powyższym w kolumnie Nazwa tabeli podajemy tabelę CDN.KodyCN a w kolumnie Instrukcja łączenia wprowadzamy pola klucze łączące obie tabele Twr_KCNId=KCN_KCNId zgodnie ze strukturą bazy danych. Teraz w sekcji Kolumny dostępne z aktualnie wybranych tabel pojawią się pola z tabeli CDN.KodyCN. Należy odnaleźć pole KCN_Kod i przeciągnąć do sekcji Kolumny użytkownika oraz nadać nazwę dla kolumny. Tak samo należy postąpić w przypadku kolumny Twr_KrajPochodzenia.

3. Lista zasobów/cennik. Kolumna marża procentowa dla ceny hurtowa1 - szybkie sprawdzenie przewidywanej marży

Ceny zapisywane są w tabeli CDN.TwrCeny i wiązane z tabelą CDN.Towary po kluczu TwC_TwrId=Twr_TwrId. Ponieważ chcemy uzyskać marżę dla ceny o numerze drugim rozwiązaniem będzie zastosowanie zapytania SQL w kolumnie Instrukcja pobierania danych w sekcji Kolumny użytkownika. Ponieważ dodawanie kolumn odbywa się na oknie towarów należy w zapytaniu aliasować pole Twr_TwrId. Zapytanie będzie mieć następującą postać:
(SELECT TwC_Marza From CDN.TwrCeny WHERE TwC_TwrId=A.Twr_TwrId And TwC_TwCNumer=2)

Kolumna ta ma pokazywać wartość w procentach w związku z tym ustawiamy w kolumnie Typ formatu wyświetlania typ na Custom oraz w kolumnie Format wyświetlania ustawiamy maskę 00.00”%” (0 – oznacza że cyfra jest zawsze wyświetlana, . – oznacza miejsca dziesiętne, „%” – dodanie na końcu znaku procent).

4. Lista dokumentów w Handlu. Kolumna Mail

Jeśli użytkownik korzysta ze skrzynki pocztowej w module CRM i wysyła wydruki faktur do swoich klientów drogą mailową to korzystając z powiązania faktura sprzedaży – mail może na liście faktur wyświetlić informację, czy faktura została wysłana do klienta. Informacja ta jest oparta o sprawdzenie czy z fakturą skojarzony jest jakikolwiek mail.

Mail - w sekcji Kolumny użytkownika dodać kolumnę o instrukcji pobierania danych:
CASE WHEN EXISTS (SELECT * FROM CDN.DokRelacje WHERE Dor_DokumentId=A.TrN_TrnId AND Dor_ParentTyp=1011 AND DoR_DokumentTyp = 302) THEN 'Tak' ELSE 'Nie' END

5. Lista dokumentów w Handlu. Kolumna Wydruk

Jeśli użytkownik wykonuje kopie elektroniczne wydruków faktur sprzedaży to korzystając z powiązania faktura sprzedaży – wydruk w archiwum może na liście faktur wyświetlić informację czy faktura została wydrukowana. Dla przypomnienia: kopie elektroniczne wydruków są tworzone po zaznaczeniu parametru na definicji wydruku.

Wydruk - w sekcji Kolumny użytkownika dodać kolumnę o instrukcji pobierania danych:
CASE WHEN EXISTS (SELECT * FROM CDN.WdrKopieElektroniczne WHERE WdKE_ObjId=A.TrN_TrNId AND WdKE_ObjType=A.TrN_typDokumentu) THEN 'Tak' ELSE 'Nie' END

6. Lista dokumentów WZ. Kolumna marża

Marża wyliczana jest jako różnica pomiędzy sumą Wartości Netto pozycji dokumentu a sumą ich Wartości Zakupu. Zastosujemy zapytanie SQL w kolumnie Instrukcja pobierania danych w sekcji Kolumny użytkownika. Zapytanie wyliczające marżę dokumentu będzie wyglądać następująco:
(SELECT SUM(TrE_WartoscNetto) - SUM(TrE_WartoscZakupu) FROM CDN.TraElem WHERE TrE_TrnId=A.TrN_TrnId)

7. Lista dokumentów w Handlu. Kolumna e-mail kontrahenta (Nabywcy)

Należy skorzystać z widoku CDN.PodmiotyView i dostępnego pola Pod_Email. W zapytaniu sql pola z tego widoku muszą być aliasowane. Należy odnaleźć pole Pod_Email i przeciągnąć do sekcji Kolumny użytkownika nadać nazwę dla kolumny, a następnie edytować kolumnę Instrukcja pobierania danych i ustawić alias. Ostateczna postać wyrażenia Pod.Pod_Email.

8. Lista faktur sprzedaży. Kolumna pozostaje do zapłaty

Należy skorzystać z tabeli CDN.BnkZdarzenia. Kolumna Pozostaje do zapłaty musi zostać wyliczona poprzez odjęcie od pola Razem pola Zapłacono. Trzeba stworzyć wyrażenie, które będzie sprawdzać, czy faktura została utworzona z paragonu, gdyż w przypadku, gdy faktura została przekształcona z paragonu zapisy kasowo/bankowe są tworzone dla paragonu. Do sprawdzenia, czy faktura została utworzona z paragonu, posłuży pole TrN_Rodzaj oraz pole TrN_TrNFaId z tabeli CDN.TraNag. W sekcji Kolumny użytkownika należy dodać kolumnę o nazwie Pozostaje do zapłaty i następującej instrukcji pobierania danych:
CASE WHEN TrN_Rodzaj=302006 THEN (SELECT SUM(Bzd_Kwota * BZd_Kierunek) FROM CDN.BnkZdarzenia WHERE Bzd_DokumentTyp=1 AND Bzd_DokumentId=A.TrN_FaId) - (SELECT SUM(Bzd_KwotaRoz * Bzd_Kierunek) FROM CDN.BnkZdarzenia WHERE Bzd_DokumentTyp=1 AND Bzd_DokumentId =A.TrN_FaId) ELSE (SELECT SUM(Bzd_Kwota * BZd_Kierunek) FROM CDN.BnkZdarzenia WHERE Bzd_DokumentTyp=1 AND Bzd_DokumentId=A.TrN_TrNId) - (SELECT SUM(Bzd_KwotaRoz * Bzd_Kierunek) FROM CDN.BnkZdarzenia WHERE Bzd_DokumentTyp=1 AND Bzd_DokumentId =A.TrN_TrNId) ENDJeśli płatności do dokumentów są w różnych walutach, to powyższe zapytanie należy zmodyfikować i dostosować do potrzeb użytkownika.

9. Lista dokumentów w Handlu. Kolumna z informacją o akronimie operatora, który zmodyfikował dokument

Dane o operatorach zapisane są w bazie konfiguracyjnej w tabeli CDN. Operatorzy. Należy wykonać złączenie do bazy konfiguracyjnej i powyższej tabeli. Na oknie personalizacji listy w sekcji Tabele użytkownika w kolumnie Nazwa tabeli podajemy tabelę i nazwę bazy do której jest ona podpięta, obie tabele muszą istnieć na serwerze SQL. Wprowadzamy [CDN_KNF_Konfiguracja].[CDN].[Operatorzy] a w kolumnie Instrukcja łączenia wprowadzamy pola klucze łączące tabele CDN.Operatorzy i CDN.TraNag czyli Ope_OpeId=TrN_OpeModId zgodnie ze strukturą bazy danych. Należy odnaleźć pole Ope_Kod i przeciągnąć do sekcji Kolumny użytkownika oraz nadać nazwę dla kolumny.

10. Lista dokumentów w Handlu. Kolumna z nazwą dnia tygodnia terminu płatności

Należy skorzystać z funkcji sqlowej CDN. NazwaDnia i podać dla niej parametry TrN_Termin oraz tryb 0. W związku z powyższym w sekcji Kolumny użytkownika w kolumnie Instrukcja łączenia wprowadzamy wyrażenie:
(SELECT CDN.NazwaDnia(A.TrN_Termin, 0))

11. Formularz dokumentu HaMag. Ostatnia cena zakupu

W pierwszej kolejności należy dołączyć tabelę CDN.TwrCeny – instrukcja łączenia: twc_twrid = tre_twrid

Kolejny krok to samo zapytanie wyciągające cenę zakupu z cennika. Będzie to zawsze ostatnia cena zakupu zgodnie z konfiguracją programu (uwzględnianie korekt itp.):
(SELECT TwC_Wartosc from CDN.TwrCeny WHERE TwC_TwCNumer =1 AND TwC_TwrId = TrE_TwrId)

12. Lista pracowników. Kolumna z wartością atrybutu o nazwie Atrybut 1 na dzień bieżący

Potrzebne pola znajdują się w tabeli CDN.OAtrybuty oraz CDN.OAtrybutyHist. Na oknie personalizacji listy w sekcji Tabele użytkownika należy dołączyć powyższe tabele, aby mieć dostęp do ich pól. W związku z tym w kolumnie Nazwa tabeli dodajemy tabelę CDN.OAtrybuty, a w kolumnie Instrukcja łączenia wprowadzamy pola łączące obie tabele oraz dodatkowy warunek dla atrybutu o nazwie Atrybut 1, wprowadzamy zatem:
OAT_PrcId = PRI_PraId AND OAT_NazwaKlasy = 'Atrybut 1'Następnie podajemy drugą tabelę CDN.OAtrybutyHist, a w kolumnie Instrukcja łączenia wprowadzamy pola łączące obie tabele oraz dodatkowy warunek filtrujący zakres dat na dzień bieżący, wprowadzamy zatem:
ATH_OatId = OAT_OatId AND ATH_DataOd <= GETDATE() AND ATH_DataDo >= GETDATE()Teraz w sekcji Kolumny dostępne z aktualnie wybranych tabel pojawią się pola dostępne z tabeli CDN.OAtrybutyHist. Należy odnaleźć pole ATH_Wartosc i przeciągnąć do sekcji Kolumny użytkownika oraz nadać nazwę dla kolumny.

13. Lista pracowników. Kolumna z wartością atrybutu o nazwie Atrybut 1 na dzień daty aktualności listy

Potrzebne pola znajdują się w tabeli CDN.OAtrybuty oraz CDN.OAtrybutyHist. Na oknie personalizacji listy w sekcji Tabele użytkownika należy dołączyć powyższe tabele, aby mieć dostęp do ich pól. W związku z tym w kolumnie Nazwa tabeli dodajemy tabelę CDN.OAtrybuty, a w kolumnie Instrukcja łączenia wprowadzamy pola łączące obie tabele oraz dodatkowy warunek dla atrybutu o nazwie Atrybut 1, wprowadzamy zatem:
OAT_PrcId = PRI_PraId AND OAT_NazwaKlasy = 'Atrybut 1'Następnie podajemy drugą tabelę CDN.OAtrybutyHist, a w kolumnie Instrukcja łączenia wprowadzamy pola łączące obie tabele oraz dodatkowy warunek filtrujący zakres dat na dzień daty aktualności listy, wprowadzamy zatem:
ATH_OatId = OAT_OatId AND ATH_DataOd <= #filtr_dtDataAkt# AND ATH_DataDo >= #filtr_dtDataAkt#Teraz w sekcji Kolumny dostępne z aktualnie wybranych tabel pojawią się pola dostępne z tabeli CDN.OAtrybutyHist. Należy odnaleźć pole ATH_Wartosc i przeciągnąć do sekcji Kolumny użytkownika oraz nadać nazwę dla kolumny.

14. Lista pracowników. Kolumna z pełnym kodem ubezpieczenia pracownika na dzień daty aktualności listy

Na oknie personalizacji listy w sekcji Kolumny użytkownika należy dodać kolumnę o instrukcji pobierania danych:
CASE WHEN LEN(PRE_UBZTyuId) = 3 THEN '0' + CAST(PRE_UBZTyuId as CHAR(3)) + CAST(PRE_PrawoER as CHAR(1)) + CAST(PRE_StNiepelnosp as CHAR(1)) WHEN PRE_UBZTyuId = 99999 THEN '' ELSE CAST(PRE_UBZTyuId as CHAR(4)) + CAST(PRE_PrawoER as CHAR(1)) + CAST(PRE_StNiepelnosp as CHAR(1)) END

15. Lista wypłat pracowników. Kolumna z sumą naliczonej zaliczki podatku (bez zaokrągleń) w wypłacie pracownika dla wybranej listy płac

Potrzebne pola znajdują się w tabeli CDN.Wyplaty. Należy wykonać złączenie do powyższej tabeli. Na oknie personalizacji listy w sekcji Tabele użytkownika w kolumnie Nazwa tabeli podajemy tabelę CDN.Wyplaty, a w kolumnie Instrukcja łączenia wprowadzamy pola łączące obie tabele oraz dodatkowy warunek przekazujący ID wybranej listy płac, wprowadzamy zatem:
WPL_PraId = PRI_PraId and WPL_LplId = #filtr_LookupListaPlac_ID#
Następnie w sekcji Kolumny użytkownika należy dodać kolumnę o instrukcji pobierania danych:
(SELECT SUM(WPE_NalFis) FROM CDN.WypElementy WHERE WPE_WplId = WPL_WplId)

16. Lista wypłat pracowników. Kolumna z sumą naliczonej zaliczki podatku (bez zaokrągleń) w wypłacie pracownika dla wybranej listy płac – przypadek, gdy dwie wypłaty (np. umowy cywilnoprawne) policzone są w jednej wypłacie

Na oknie personalizacji listy w sekcji Kolumny użytkownika należy dodać kolumnę o instrukcji pobierania danych:
(SELECT Suma FROM (
SELECT WPE_WplId, WPE_PraId, SUM(WPE_NalFis) OVER(PARTITION BY WPE_PraID) AS Suma, WPL_LplId, ROW_NUMBER() OVER(PARTITION BY WPE_PraID ORDER BY WPE_NalFis) AS "Row Number"
FROM CDN.WypElementy
JOIN CDN.Wyplaty ON WPL_WplId = WPE_WplId
WHERE WPL_LplId = #filtr_LookupListaPlac_ID#
GROUP BY WPL_LplId, WPE_PraId, WPE_NalFis, WPE_WplId) AS T
WHERE "Row Number" = 1 AND WPE_PraId = PRI_PraId)

17. Rejestr VAT. Kolumna do jakiego dziennika został zapis z rejestru zaksięgowany oraz jaki ma numer w dzienniku

Potrzebne pola znajdują się w tabeli CDN.DekretyNag. Na oknie personalizacji listy w sekcji Tabele użytkownika należy połączyć powyższe tabele aby mieć dostęp do pól związanych z dziennikami. W związku z powyższym w kolumnie Nazwa tabeli podajemy tabelę CDN.DekretyNag a w kolumnie Instrukcja łączenia wprowadzamy pola klucze łączące obie tabele VaN_DekId = DeN_DeNId zgodnie ze strukturą bazy danych. Teraz w sekcji Kolumny dostępne z aktualnie wybranych tabel pojawią się pola dostępne z tabeli CDN.DekretyNag. Należy odnaleźć pole DeN_Dziennik i przeciągnąć do sekcji Kolumny użytkownika oraz nadać nazwę dla kolumny. Tak samo dla kolumny DeN_NrKsiegi.

18. Rejestr VAT. Kolumny: forma płatności, termin, kwota zaksięgowania do KPiR-kwota, data księgowania, numer korekty, numer dziennika cząstkowego

Forma płatności -  należy skorzystać z dostępnej na liście kolumny: Fpl_Nazwa

Termin -  należy skorzystać z dostępnej na liście kolumny: VaN_Termin

Kwota zaksięgowana do KPiR -  Kwota:   Należy w sekcji Tabele użytkownika wykonać złączenie do tabeli CDN.ZapisyKPR po polach VaN_KPRID=KpR_KPRID. Teraz w sekcji Kolumny użytkownika dodać kolumnę o instrukcji pobierania danych:

KPR_Sprzedaz+KPR_Pozostale+KPR_Towary+KPR_Uboczne+KPR_Reklama+KPR_Wynagrodz+KPR_Inne+KPR_Zaszlosci

Data księgowania - należy skorzystać z dostępnej na liście kolumny: KPR_DataOpe

Numer korekty - należy skorzystać z dostępnej na liście kolumny: VaN_Korekta

Numer dziennika cząstkowego - Należy w sekcji Tabele użytkownika wykonać złączenie do tabeli CDN.DekretyNag po polach VaN_DekID=DeN_DeNID. Teraz w sekcji Kolumny użytkownika dodać kolumnę o instrukcji pobierania danych:
DeN_Dziennik+'/'+CONVERT(varchar(20),DeN_NrDziennika)

19. Lista not odsetkowych, ponagleń zapłaty, potwierdzeń sald. Kolumna kod podmiotu

Kod podmiotu -  należy skorzystać z dostępnej na liście kolumny: Pod_Kod

20. Lista dokumentów rozliczonych. Kolumna pokazująca czy rozliczenie zostało uwzględnione na dokumencie kompensaty

Należy w sekcji Tabele użytkownika wykonać złączenie do tabeli CDN.KompensatyElem po polach BrK_BrkId=Kpe_BrkId. Teraz w sekcji Kolumny użytkownika dodać kolumnę o instrukcji pobierania danych:
CASE Brk_BrkId WHEN Kpe_BrkId THEN 'Tak' ELSE '' END

21. Lista środków trwałych. Kolumny: metoda amortyzacji, opis

Metoda amortyzacji - w sekcji Kolumny użytkownika dodać kolumnę o instrukcji pobierania danych:
CASE SrT_Metoda WHEN 1 THEN 'Liniowa' WHEN 2 THEN 'Degresywna' WHEN 3 THEN 'Jednorazowy' WHEN 4 THEN 'Naturalna' WHEN 5 THEN 'Nie amortyzowany' ENDOpis - należy skorzystać z dostępnej na liście kolumny: Srt_Opis.

22. Lista dokumentów środków trwałych. Kolumny: osoba przekazująca, osoba przyjmująca, miejsce użytkowania przekazujące, miejsce użytkowania przyjmujące

Osoba przekazująca - należy skorzystać z dostępnej na liście kolumny: SrH_PrcImieNazwisko1

Osoba przyjmująca - należy skorzystać z dostępnej na liście kolumny: SrH_PrcImieNazwisko2

Miejsce użytkowania przekazujące - należy skorzystać z dostępnej na liście kolumny: SrH_MiejsceUzytkowania1

Miejsce użytkowania przyjmujące - należy skorzystać z dostępnej na liście kolumny: SrH_MiejsceUzytkowania2

23. Lista ewidencji dodatkowej. Kolumna kod kategorii

Kod kategorii: Należy w sekcji Tabele użytkownika wykonać złączenie do tabeli CDN. Kategorie po polach EDN_KatID=Kat_KatID. Teraz w sekcji Kolumny użytkownika dodać kolumnę o instrukcji pobierania danych Kat_KodSzczegol

24. Lista zleceń serwisowych. Kolumny: nazwa urządzenia, opis urządzenia, priorytet zlecenia

Nazwa urządzenia - należy skorzystać z dostępnej na liście kolumny: SrU_Nazwa

Opis urządzenia - należy skorzystać z dostępnej na liście kolumny: SrU_Opis

Priorytet zlecenia - w sekcji „Kolumny użytkownika” dodać kolumnę o instrukcji pobierania danych:
CASE SrZ_Priorytet WHEN 1 THEN 'najwyższy' WHEN 2 THEN 'wysoki' WHEN 3 THEN 'niski' WHEN 4 THEN 'najniższy' END

25. Lista biblioteki dokumentów. Kolumny: schemat obiegu oraz etap bieżący

Schemat obiegu - należy skorzystać z dostępnej na liście kolumny: DNV_ProcesKod

Etap bieżący - Należy w sekcji Tabele użytkownika wykonać złączenie do bazy konfiguracyjnej i tabeli CDN. SekEtapy. W kolumnie Nazwa tabeli należy wprowadzić [CDN_KNF_Konfiguracja].[CDN].[SekEtapy] a w kolumnie Instrukcja łączenia wprowadzić DNV_EtapBiezacyLP=SE_SEID. Teraz w sekcji Kolumny użytkownika skorzystać z dostępnej na liście kolumny: SE_Symbol

26. Zlecenie serwisowe. Zakładka Części. Kolumna z numerem dokumentu wydającego część

W sekcji Tabele użytkownika należy wykonać złączenie do trzech tabel:

  • CDN.TraElemRelacje po polach TeR_ParentId = SrC_SrCId and TeR_ParentTyp = 902,
  • CDN.TraElem po polach TrE_TrEId = TeR_ChildId,
  • CDN.TraNag po polach TrN_TrNId = TrE_TrNId.

Następnie w sekcji Kolumny użytkownika należy dodać kolumnę o instrukcji pobierania danych TrN_NumerPelny.

27. Oferta Handlowa. Dodanie kolumny zawierającej cenę zakupu w liście elementów

W sekcji Tabele użytkownika należy wykonać złączenie do jednej tabeli : CDN.TwrCeny

W polu instrukcja łączenie wpisujemy TwC_TwCNumer=1 and TwC_TwrID =TwrId

W obszarze Kolumny użytkownika dodajemy nową kolumnę Cena Zakupu o instrukcji TwC_Wartosc

28. Dodanie na dokumentach handlowo magazynowych kolumny: Ilość dostępna i braki towaru, na magazynie z dokumentu i z datą wystawienia dokumentu

Na oknie konfiguracji kolumn dodatkowych dodajemy w obszarze dodatkowych tabel tabelę CDN.TraNag z łączem UsrA.Trn_TrnID = Tre_TrnID

Następnie w oknie dodatkowych kolumn dodajemy kolumnę Ilość dostępna:
(select case when TwI_Ilosc - TwI_Rezerwacje >0 then TwI_Ilosc - TwI_Rezerwacje else 0 end from
CDN.TwrIlosci B
where
B.TwI_TwrId = Tre_TwrId and
B.TwI_MagId = TrE_MagId --MagID
And B.TwI_Data = (
Select Top 1 H.TwI_Data From CDN.TwrIlosci H Where H.TwI_TwrId = B.TwI_TwrID --A.Twr_TwrId
and H.TwI_MagId = TrE_MagId --magId
And H.TwI_Data <= TrN_DataDok --'2016-03-10'
Order By H.TwI_Data Desc ))

A dla kolumny Braki:
(select TwI_Braki from
CDN.TwrIlosci B
where
B.TwI_TwrId = Tre_TwrId and
B.TwI_MagId = TrE_MagId --MagID
And B.TwI_Data = (
Select Top 1 H.TwI_Data From CDN.TwrIlosci H Where H.TwI_TwrId = B.TwI_TwrID --A.Twr_TwrId
And H.TwI_MagId = TrE_MagId --magId
And H.TwI_Data <= TrN_DataDok --'2016-03-10'
Order By H.TwI_Data Desc ))

29. Formularz dokumentu handlowo-magazynowego – ostatnia cena zakupu, data ostatniej dostawy oraz średnia cena zakupu

Ostatnia cena zakupu:

Należy dodać tabelę CDN.TwrCeny z łączeniem Tre_TwrId = Twc_TwrId and Twc_TwCNumer = 1

Instrukcja pobierania danych dla kolumny ma postać:

TwC_Wartosc

Data ostatniej dostawy:

Należy dodać tabelę CDN.TraSElem z łączeniem Tre_TwrId = Trs_TwrId

Instrukcja pobierania danych dla kolumny ma postać:

(select MAX(trs_dataope) from cdn.traselem where trs_typ = 1)

Średnia cena zakupu:

Należy dodać tabelę CDN.TraSElem z łączeniem Tre_TwrId = Trs_TwrId

Instrukcja pobierania danych dla kolumny ma postać:

(select CONVERT(decimal(10,2), AVG(trs_cena)) from cdn.traselem where trs_typ = 1)

30. Okno historii Towaru - kolumna opis dokumentu

W sekcji Kolumny użytkownika należy dodać kolumnę o instrukcji pobierania danych:
(Select Trn_Opis from cdn.TraNag TRN where TRN.TrN_TrNId = _DATASOURCE_.TrNId)

31. Formularz dokumentu handlowo-magazynowego - kolumna wartość atrybutu pozycji

W sekcji Kolumny użytkownika należy dodać kolumnę o instrukcji pobierania danych odpowiednio:

  • instrukcja dla kolumny pierwszego Atrybutu pozycji dokumentu:
    (SELECT TrE_Atr1_Kod + ':' + TrE_Atr1_Wartosc from CDN.traelem ATR where ATR.TrE_TrEID = _DATASOURCE_.TrE_TrEID)
  • instrukcja dla kolumny drugiego Atrybutu pozycji dokumentu:
    (SELECT TrE_Atr2_Kod + ':' + TrE_Atr2_Wartosc from CDN.traelem ATR where ATR.TrE_TrEID = _DATASOURCE_.TrE_TrEID)
  • instrukcja dla kolumny trzeciego Atrybutu pozycji dokumentu:
    (SELECT TrE_Atr3_Kod + ':' + TrE_Atr3_Wartosc from CDN.traelem ATR where ATR.TrE_TrEID = _DATASOURCE_.TrE_TrEID)
  • instrukcja dla kolumny czwartego Atrybutu pozycji dokumentu:
    (SELECT TrE_Atr4_Kod + ':' + TrE_Atr4_Wartosc from CDN.traelem ATR where ATR.TrE_TrEID = _DATASOURCE_.TrE_TrEID)
  • instrukcja dla kolumny piątego Atrybutu pozycji dokumentu:
    (SELECT TrE_Atr5_Kod + ':' + TrE_Atr5_Wartosc from CDN.traelem ATR where ATR.TrE_TrEID = _DATASOURCE_.TrE_TrEID)

32. Lista dokumentów w Handlu. Sumaryczna waga dokumentu

Na karcie towaru można podać jego wagę, a informacja ta jest zapisywana w tabeli CDN.Towary. Aby wyświetlić na liście sumaryczną wagę dla danego dokumentu należy skorzystać z poniższego zapytania:

(SELECT CAST(SUM(TRE.TrE_Ilosc * TWR.Twr_WagaKG) as numeric(36,4)) FROM CDN.TraElem TRE LEFT JOIN CDN.Towary TWR on TWR.Twr_TwrId = TRE.TrE_TwrId WHERE TRE.Tre_TrNID = A.Trn_TrnId)

33. Formularz dokumentu HaMag. Sumaryczna waga pozycji

Na karcie towaru można podać jego wagę, a informacja ta jest zapisywana w tabeli CDN.Towary. Aby wyświetlić na formularzu dokumentu sumaryczną wagę dla danej pozycji, należy skorzystać z poniższego zapytania:

(SELECT CAST(_DATASOURCE_.TrE_Ilosc * TWR.Twr_WagaKG as numeric(36,4)) FROM cdn.Towary TWR WHERE TWR.Twr_TwrId = _DATASOURCE_.TrE_TwrId)




Komunikat ID -2147217873 „Polecenie USUWANIA było sprzeczne z ograniczeniem REFERENCJI „FK_KPRKategoria”. Konflikt nastąpił w bazie „CDN_Prezentacja_KP_30”, tabeli „CDN.ZapisyKPR”, dla kolumny 'KPR_KatID’”.

Nie można usunąć kategorii, ponieważ jest wybrana na zapisie w Księdze Podatkowej.