Konfiguracja sekcji dokumentu

Konfiguracja karty obiegu w Comarch DMS odbywa się poprzez definiowanie sekcji dokumentu.

Każda z sekcji prezentowanych na dokumencie może być zwinięta lub rozwinięta w zależności od aktualnych potrzeb operatora pracującego z kartą obiegu oraz od ustawienia prezentacji sekcji w panelu użytkownika (zob. Szczegóły dokumentu).

Na nowododanym typie obiegu tworzona jest automatycznie pierwsza sekcja o nazwie ‘Karta obiegu’.

Możliwa jest zmiana nazwy sekcji, gdy po kliknięciu na daną sekcję w ramach panelu Kontrolki operator zmieni nazwę sekcji w polu Nazwa i zapisze zmianę za pomocą ikony  dyskietki zapisz32 [Zapisz]. W przykładzie poniżej nazwa ‘Karta obiegu’ została zamieniona na ‘Dane ogólne’.

 

 

Zmiana nazwy sekcji „Karta obiegu”

 

Definicja typu obiegu z nazwą sekcji „Karta obiegu” zmienioną na „Dane ogólne”

 

Uwaga
W wersjach Comarch DMS nowszych od wersji 2019.1 na wszystkich istniejących definicjach obiegów dokumentów dodawana jest sekcja o nazwie ‘Karta obiegu’, na której prezentowane są wszystkie zdefiniowane wcześniej kontrolki. W przypadku Repozytoriów dodawana jest sekcja ‘Repozytorium’.

 

Konfiguracja sekcji

Aby dodać nową sekcję należy kolejno:

1. na liście kontrolek rozwinąć menu obok plusa i wybrać opcję „Dodaj sekcję”

2. uzupełnić nazwę sekcji

3. wybrać przycisk [Dodaj]

 

Jeżeli użytkownik chce zrezygnować z dodawania sekcji, powinien wybrać przycisk [Anuluj].

 

 

Dodawanie nowej sekcji na definicji typu obiegu dokumentów

 

Dodana sekcja zostanie wyświetlona na liście kontrolek i sekcji.

 

Przykładowa lista kontrolek na definicji typu obiegu, podział dokumentu na sekcje

 

W wersji 2022.0.1  w aplikacji desktopowej Comarch DMS na definicji typu obiegu została dodana wyszukiwarka kontrolek.

 

Uwaga
Wyszukiwanie nie jest wrażliwe na wielkość znaków

 

Wyszukiwanie kontrolek odbywa się w dwóch trybach:

  • Wyszukiwanie według nadanej nazwy, np. „Uwagi”,
  • Wyszukiwanie kontrolki według typu (typ znajduje się w nawiasach kwadratowych, np. [Data i godzina])

Wyszukiwanie ma miejsce w ramach wybranej zakładki.

 

Wyszukiwarka znajdująca się na definicji kontrolek

 

Wyszukiwanie według frazy będącej częścią nazwy kontrolki

 

Wyszukiwanie według typu [tekst] kontrolki
 

Informacja o braku wyników wyszukiwania

 

Obok wyszukiwarki kontrolek znajduje się ikona [Usuń] – za pomocą tej ikony można:

  • usunąć daną sekcję (po tym, jak kliknięto na tę sekcję na liście w ramach sekcji „Kontrolki”)
  • usunąć daną zakładkę (po tym, jak kliknięto na tę zakładkę na liście w ramach sekcji „Kontrolki”)
  • usunąć daną kontrolkę (po tym, jak kliknięto na tę kontrolkę na liście w ramach sekcji „Kontrolki”)

 

Uwaga

Nie jest możliwe:

  • usunięcie sekcji, jeśli na zakładce istnieje tylko jedna sekcja
  • usunięcie zakladki, jeśli w ramach danego typu obiegu istnieje tylko jedna zakładka

 

Jeśli użytkownik kliknął na jedną z sekcji lub kontrolek, wówczas w sekcji „Kontrolki” widoczne są ikony:

  • [Przesuń wyżej]jednokrotne kliknięcie na tą ikonę powoduje przeniesienie danej sekcji/kontrolki o jedną sekcję/kontrolkę w górę
  • [Przesuń niżej] jednokrotne kliknięcie na tą ikonę powoduje przeniesienie danej sekcji/kontrolki o jedną sekcję/kontrolkę w dół

 

W ramach sekcji „Kontrolki” dostępna jest ikonka [Przenieś do] – ikonka:

  • jest wyszarzona (niedostępna), jeśli użytkownik nie kliknął na żadną kontrolkę albo jeśli w danym typie obiegu istnieje tylko jedna zakładka
  • umożliwia przeniesienie kontrolki z jednej zakładki do drugiej
  • umożliwia przeniesienie kontrolki z jednej sekcji do drugiej

 

Okno konfiguracji typu obiegu z rozwiniętą listą mozliwości przeniesienia kontrolki

 

Obok ikony znajduje się ikona [Dodaj]po kliknięciu w ikonę wyświetlane jest okno dodawania kontrolek do typu obiegu .

Aby dodać nową kontrolkę, należy:

1. w ramach okna  wybrać w polu „Typ”  typ kontrolki z rozwijanej listy

2. wpisać własną nazwę kontrolki w polu „Nazwa wyświetlana”.

3. kliknąć przycisk [Dodaj] – wówczas kontrolka jest dodawana w ramach danego typu obiegu.

Jeżeli użytkownik chce zrezygnować z dodawania kontrolki, powinien wybrać przycisk [Anuluj].

Lista kontrolek

 

Dodawanie kontrolki – uzupełnianie danych

 

Uwaga
W przypadku typu obiegu jako repozytorium przycisk nie jest dostępny – nie jest możliwe dodanie zakładki.

Obok ikony [Dodaj] znajduje się strzałka po jej naciśnięciu otwierana jest lista, w ramach której dostępne są opcje:

  • Dodaj kontrolkę – po kliknięciu tej opcji można dodać nową kontrolkę w ramach danego typu obiegu – analogicznie jak opisano powyżej w przypadku wyboru ikony [Dodaj]
  • Dodaj sekcję – po kliknięciu tej opcji można dodać nową sekcję w ramach danego typu obiegu – zob. opis powyżej
  • Dodaj zakładkę – po kliknięciu tej opcji można dodać nową zakladkę w ramach danego typu obiegu – w tym celu w ramach otwartego okna nalezy wpisać nazwę zakładki i klinąć [Dodaj]. Wówczas zakładka jest dodawana w ramach danego typu obiegu. Jeżeli użytkownik chce zrezygnować z dodawania zakładki, powinien wybrać przycisk [Anuluj].

 

Uwaga
W przypadku typu obiegu jako repozytorium nie jest możliwe dodanie zakładki.

 

Lista wyświetlana po rozwinięciu strzałki

 

Dodawanie nowej zakładki

Za pomocą strzałek możliwe jest przechodzenie pomiędzy zakładkami.

W aktualnej wersji Comarch DMS konfiguracja liczby kolumn, w której prezentowana jest karta obiegu, znajduje się w ustawieniach poszczególnych sekcji karty obiegu.

W ustawieniach sekcji można określić, czy liczba zmienia się dynamicznie w zależności od szerokości karty obiegu, czy jest stała. Dla każdej sekcji ustawienia liczby kolumn i ich szerokości są osobne.

Uwaga
Po konwersji Comarch DMS domyślnie utworzona sekcja ‘Karta obiegu’ będzie prezentowana zgodnie z dotychczasowymi ustawieniami liczby kolumn, w których jest prezentowana.

 

Właściwości sekcji

 

Prezentuj sekcję w stałej ilości kolumnzaznaczenie parametru spowoduje, że w ramach sekcji kontrolki będą wyświetlane w liczbie określonej w parametrze Ilość kolumn.

Ilość kolumn – określa liczbę kolumn, w której będą wyświetlane kontrolki w ramach sekcji. Maksymalna liczba kolumn określana jest w pliku web.config w kluczu MaximumNumberOfControlCardColumns.

Szerokość kolumny – określa szerokość kolumn wyświetlanych w ramach sekcji. Dostępne są wartości:

  • Dopasuj – wybranie wartości spowoduje, że szerokość prezentowanych kolumn będzie różna w zależności od szerokości karty obiegu,
  • Wąska,
  • Normalna,
  • Szeroka.

 

Przyklad

Zdefiniowano testową kartę obiegu, w której dodano cztery sekcje.

W każdej sekcji określony został inny rozmiar kolumn w ramach sekcji.

W pierwszej sekcji kolumny wyświetlone są w rozmiarze wąskim, następnie w  normalnym, w trzeciej sekcji określono rozmiar szeroki i w ostatniej wybrano opcję dopasuj.

 

Różne szerokości kolumn w ramach sekcji na dokumencie

 

Analogicznie do kontrolek, sekcje mogą być ukrywane na dokumencie na poszczególnych etapach procesu, konfiguracja odbywa się na zakładce Kontrolki  w ramach zakładki „Schemat obiegu”, poprzez odznaczenie parametru „Widoczna” przy nazwie sekcji i zapis zmian za pomocą ikony dyskietki zapisz32 [Zapisz].

 

Odznaczanie parametru „Widoczna” dla sekcji” Karta obiegu” na etapie „Zgoda kierownika” w ramach typu obiegu „Projekt”

 

Etap „Zgoda kierownika” na dokumencie typu obiegu „Projekt” – brak widocznej sekcji „Karta obiegu”

 

W lewej części okna definicji typu obiegu wyświetlany jest podgląd karty obiegu w podziale na sekcje wraz ze wszystkimi zdefiniowanymi kontrolkami.

 

Podgląd karty obiegu

 

Rozpoczynasz pracę z Comarch DMS i chcesz dowiedzieć się, jak korzystać z programu? A może masz już podstawową wiedzę o Comarch DMS i chcesz dowiedzieć się więcej?

Sprawdź Szkolenia Comarch DMS!

 




Analiza wykorzystania i uzupełniania kontrolek na karcie obiegu

W  Comarch DMS dostępna jest funkcjonalność analizy wykorzystania i uzupełniania kontrolek na karcie obiegu. Przycisk [Statystyki użycia kontrolek] dostępny jest na definicji typu obiegu.

 

Podczas pracy z definicją typu obiegu operator posiadający uprawnienia administratora ma możliwość wyświetlenia listy kontrolek z karty obiegu wraz z informacją, kiedy ostatnio kontrolka była używana na dokumentach.

 

Na podstawie tych danych administrator może zadecydować czy kontrolka nadal jest potrzebna na karcie obiegu, czy może ją usunąć.

 

Lista kontrolek na definicji typu obiegu dokumentów,  przycisk „Statystyki użycia kontrolek”

 

Przycisk ‘Statystyki użycia kontrolek’ wywołuje okno ‘Ostatnia modyfikacja kontrolek’.

W oknie prezentowane są wszystkie kontrolki znajdujące się na definicji typu obiegu wraz z informacją o liczbie dni od ostatniej modyfikacji kontrolki.

 

Okno Ostatnia modyfikacja kontrolek zawiera kolumny:

  • Nazwa kontrolki – prezentowana jest lista nazw kontrolek znajdujących się na definicji typu obiegu, oraz nazwy (identyfikatory) kontrolek (w nawiasach).

 

Uwaga
Jeżeli we właściwościach wcześniej utworzonej i używanej kontrolki dokonano modyfikacji  w polu „Nazwa (identyfikator)”, a następnie nie modyfikowano wartości w komórce, wówczas w kolumnie Data ostatniej modyfikacji wartości wyświetlana jest informacja „Nie wprowadzono wartości”, a w kolumnie Liczba dni od ostatniej modyfikacji – informacja „Brak”.

 

  • Typ kontrolki – prezentuje typ dodanej kontrolki.
  • Data ostatniej modyfikacji wartości – wyświetla datę ostatniej modyfikacji wartości w kontrolce, w przypadku, gdy kontrolka nie była używana, wyświetlana jest informacja „Nie wprowadzono wartości”.
  • Liczba dni od ostatniej modyfikacji – wyświetla liczbę dni, które minęły od ostatniej modyfikacji wartości kontrolki, gdy kontrolka nie była używana lub była używana w tym samym dniu, wyświetlana jest informacja „Brak”.

 

Okno „Ostatnia modyfikacja kontrolek”

 

Na liście kontrolek wyświetlane są:

1. w pierwszej kolejności kontrolki, które nie były używane na dokumentach w obiegu;

2. następnie kontrolki od największej do najmniejszej liczby dni, które upłynęły od ostatniej modyfikacji kontrolki.

 

Rozpoczynasz pracę z Comarch DMS i chcesz dowiedzieć się, jak korzystać z programu? A może masz już podstawową wiedzę o Comarch DMS i chcesz dowiedzieć się więcej?

Sprawdź Szkolenia Comarch DMS!

 




Modelowanie procesów za pomocą C# – wprowadzenie

Informacje ogólne

Uwaga
W wersji 2020.0.0 Comarch DMS mechanizm modelowania procesów metodą C# jest wersją beta.

Od wersji 2021.1.0 modelowanie procesów w języku C# jest objęte licencją Premium.

Od wersji 2023.1.0 za pomocą C# można tworzyć skrypty do pracy automatycznej (zob. Konfiguracja automatycznego trybu pracy (robotyzacja procesów).

Comarch DMS został wyposażony w mechanizm wspomagający modelowanie procesów oparty
o kompilator C#. Wersja kompilatora jak również wersja języka C# jest uzależniona od Microsoft .NET Framework. Zalecana jest aktualizacja Microsoft .NET Framework do najnowszej dostępnej wersji.

Wskazówka
Kod C# ma zastosowanie w Comarch DMS m. in. przy weryfikacji kontrahenta na białej liście podatników (zob. Weryfikacja kontrahenta na białej liście podatników

 

Środowisko kompilacji C#

Wynikowymi bibliotekami kompilatora Comarch DMS są zawsze biblioteki dll.

Po skompilowaniu, biblioteki są automatycznie konfigurowane do pracy na serwerze IIS. Dzięki temu funkcjonalność jest dostępna dla wszystkich platform (aplikacji stacjonarnej, webowej, mobilnych iOS i Android).

Miejsca przechowywania bibliotek:

1. {Apl. www (serwerowa)}\bin\.scriptcs_cache – katalog do którego są kopiowane biblioteki po kompilacji kodu C#.

2. {Apl. www(serwerowa)}\bin\Scriptcs_bin – miejsce na biblioteki dll używane przez kod C# jako referencje.

Przed kompilacją skryptów C# na komputerze z IIS należy nadać użytkownikowi IIS_IUSRS prawo zapisu do katalogu .scriptcs_cache

Okno kompilacji języka C# jest dostępne z poziomu właściwości wybranych kontrolek. Kontrolki
obsługują poniższe zdarzenia:

1. Init (zdarzenie OnInit)

2. Obserwator (zdarzenie OnChange)

3. Wciśnięcie przycisku (zdarzenie OnClick)

Jeżeli zaistnieje potrzeba skorzystania z biblioteki referencyjnej w której znajdują się funkcje do
wywołania w kodzie C#, bibliotekę należy wgrać do katalogu bin\Scriptcs_bin. Nazwę tej biblioteki
należy podać w oknie „Referencje”( zob. poniżej punkt Język C# na definicjach kontrolek).

Istnieje możliwość skorzystania z referencji bibliotek com (.NET) zarejestrowanych na serwerze IIS. W takim przypadku, w oknie „Referencje” należy wpisać nazwę biblioteki bez rozszerzenia dll.

Kompilacja kodu C# odbywa się po naciśnięciu ikony lub kliknięciu przycisku „Kompiluj i zapisz”. Elementy te znajdują się w oknie edycji kodu C#. ( zob. poniżej punkt Język C# na definicjach kontrolek)

Jeżeli skompilowane biblioteki dll zostaną usunięte z katalogu .scriptcs_cache, to przed pierwszym użyciem funkcjonalności (podniesienie dokumentu DMS) zamodelowanej metodą C# nastąpi automatyczne skompilowanie bibliotek.

Włączenie funkcjonalności

Aby włączyć funkcjonalność należy:

  • przy instalacji lub aktualizacji systemu zaznaczyć parametr „Wersja Premium”

 

Wybór opcji „Wersja Premium” podczas instalacji Comarch DMS

lub

  • w pliku Web.config wartość klucza PremiumFunctionality ustawić na „True” i wprowadzić odpowiedni klucz licencji

 

Parametr „PremiumFunctionality”

 

Jeżeli operator nie posiada odpowiedniej licencji, a zaznaczył parametr „PremiumFunctionality”, wówczas przy próbie logowania w oknie logowania zostanie wyświetlona na czerwono informacja o braku licencji Premium, a dostęp do Comarch DMS nie będzie możliwy.

 

Okno logowania do aplikacji desktop z informacją o braku licencji Premium

 

Włączenie edytora C# skutkuje pojawieniem się dodatkowych opcji na definicjach kontrolek.

 

Zasady pisania kodu C#

Kod C# dzięki któremu można programować inicjowanie wartości w poszczególnych kontrolkach programuje się w udostępnianych przez kontrolki edytorach na zasadzie skryptu. Można przyjąć, że obszar edytora to „wnętrze” metody obsługującej określone zdarzenie.

W zależności od edytora kontrolki (wybranego zdarzenia), administrator ma dostęp do listy właściwości, które można przywołać wpisując nazwę „Global”.

Obiekt „Global” skupia w sobie wszystkie inne obiekty, które można wykorzystać podczas pisania obsługi zdarzenia. Poprzez ten obiekt użytkownik ma również dostęp do wartości kontrolek znajdujących się na karcie obiegu.

W przypadku zdarzeń „Inicjowanie”, każda kontrolka posiada obiekt „Common” z następującymi właściwościami:

  • Globals.Common.DocumentCompanyId – Id spółki powiązanej z kontrolką, np. DocumentCompanyId (typu int)
  • Globals.Common.DocumentId – Id dokumentu DMS, np. DocumentId (typu int?)
  • Globals.Common.ParentDocumentId – Id właściciela dokumentu, np. ParentDocumentId (typu int?)
  • Globals.Common.StageId – Id etapu w którym znajduje się dokument, StageId (typu int?)
  • Globals.Common.UserId – Id zalogowanego operatora, np.  UserId (typu int)
  • Globals.Common.WorkflowId – Id typu obiegu, np. WorkflowId (typu int)

Typ zakończony „?” (int?) oznacza, że oprócz wartości numerycznych zmienna może przechowywać również wartość NULL (pustą). Przykładowa sytuacja to brak wpisanej wartości w kontrolce typu liczba całkowita

W przypadku zdarzeń „Obserwacja”, każda z kontrolek posiada dodatkowo właściwość:

  • Globals.Common.SenderControlName – Identyfikator kontrolki inicjującej zdarzenie

Uwaga
Wszystkie właściwości udostępniane przez obiekt „Common” są tylko do odczytu.

Obiekt „Global” posiada również obiekt „MainFrame”.

Po nazwie „MainFrame” występują nazwy identyfikatorów kontrolek, następnie właściwości lub metody.

Elementy udostępniane przez obiekt „MainFrame” zależą od kontrolki, dla której pisze się obsługę zdarzenia, zdarzeń oraz od innych zdefiniowanych na karcie obiegu kontrolek.

 

W przypadku obiektu „MainFrame”, dostęp do właściwości odbywa się w oparciu o następującą ścieżkę:

Globals.MainFrame.Identyfikator kontrolki.Nazwa właściwości lub nazwa metody

Przyklad

Przykładowa linia kontrolki o identyfikatorze „Pole1” pozwalająca na wprowadzenie lub zmianę wartości kontrolki za pomocą właściwości „Text”:

Globals.MainFrame.Pole1.Text = „NR/123/2020”;

 

Język C# na definicjach kontrolek

Oprogramowano funkcjonalność tworzenia własnych zdarzeń w języku C#. W aktualnej wersji możliwość modelowania zdarzeń w języku C# dostępna jest w kontrolkach:

  • Dane tabelaryczne,
  • Dane tabelaryczne, kolumna typu lista,
  • Data i godzina,
  • Dokument elektroniczny,
  • Komunikat,
  • Kontrahent,
  • Liczba całkowita,
  • Liczba rzeczywista,
  • Liczba stałoprzecinkowa,
  • Lista,
  • Tekst,
  • Towar,
  • Własna akcja.

 

W większości kontrolek możliwe jest tworzenie skryptów służących zarówno inicjowaniu wartości w kontrolkach, jak i obserwowaniu wartości innych kontrolek. Obserwowanie wartości umożliwia „reagowanie” na zmiany. Dla kontrolek typu dane tabelaryczne oraz własna akcja możliwa jest również „obserwacja samej siebie”.

 

Pozycja C# Script w opcjach inicjowania wartości kontrolki typu tekst

 

Pozycja C# Script w kontrolce typu Własna akcja

 

Po wskazaniu inicjowania wartości za pomocą C# Script i kliknięciu
uruchamiana jest formatka, w której należy wpisać kod C#.

 

Okno Skrypt C#

 

Okno Skrypt C# składa się z pola, w którym należy wpisać kod, a następnie skompilować i zapisać przyciskiem [Kompiluj i zapisz].

Kod po skompilowaniu zapisywany jest w formie biblioteki w lokalizacji …\bin\.scriptsc_cache w katalogu, w którym zainstalowano aplikację serwerową (dawna web) Comarch DMS.

W polu Referencje należy wpisać nazwy bibliotek, z których będzie korzystał kod C#. Domyślną lokalizacją, w której należy umieścić biblioteki jest …\bin\scripts_bin w katalogu, w którym zainstalowano aplikację serwerową (dawna web)Comarch DMS.

Warunkiem koniecznym do poprawnego działania jest nadanie operatorowi IIS_USER uprawnień pełnej kontroli do katalogu .scriptsc_cache, pozwoli to na dynamiczny zapis skompilowanych plików.

W edytorze skryptów C# wyświetlane są podpowiedzi zawierające obiekty kontrolek karty obiegu (Globals.MainFrame.*) oraz zmienne (Globals.Common.*).

 

Podpowiedzi wyświetlane w edytorze skryptów C#

 

W kontrolce typu Dane tabelaryczne dostępne są następujące funkcje i właściwości:

  • MainFrame.<nazwaDT>.Items[Index]… – odwołanie do wartości kontrolki
    • Funkcje
      • MainFrame.<nazwaDT>.AddRow()dodaj kolejny wiersz.
      • MainFrame.<nazwaDT>.AddRows(count)dodaj wiersze, gdzie „count” oznacza ile wierszy ma zostać dodane.
      • MainFrame.<nazwaDT>.RemoveRow(index)usuń wiersz, gdzie „index” to wiersz, który ma zostać usunięty.
      • MainFrame.<nazwaDT>.Clear()usuwa wszystkie wiersze.
    • Właściwości
      • MainFrame.<nazwaDT>.Column – informacja o modyfikowanej komórce – numer kolumny.
      • MainFrame.<nazwaDT>.Row – informacja o modyfikowanej komórce – numer wiersza.
      • MainFrame.<nazwaDT>.RowCount – informacja o ilości wierszy w DT
.

 

Wskazówka
W tablicach C# – pierwszy wiersz to 0

 

Uwaga

Podczas pierwszego uruchomienia operacji zamodelowanej mechanizmem C# może nastąpić opóźnienie działania mechanizmu. Wynika to z konieczności załadowania biblioteki dll do pamięci komputera.

Ze względu na konieczność zachowania nomenklatury nazewniczej języka C# nie jest możliwe używanie polskich znaków diakrytycznych oraz spacji w identyfikatorach kontrolek.

 

Użytkownik może modyfikować wartości kontrolek poprzez modyfikację właściwości „Value” lub „Text”. Np. Globals.MainFrame.Liczba.Value = 10;

Możliwe jest to jednak tylko dla kontrolek, dla których został wprowadzony kod C#, czyli zostało wywołane zdarzenie OnInit lub OnChange (obserwacja). Pozostałe właściwości są tylko do odczytu.

 

Przyklad
Przepisanie wartości z kontrolki typu liczba całkowita o nazwie (identyfikatorze) Liczba do kontrolki typu tekst o nazwie (identyfikatorze) Tekst:

Globals.MainFrame.Tekst.Text = Globals.MainFrame.Liczba.Value.ToString();

 

Przyklad

Pobranie wartości z kontrolki skladnik i zapisanie tej wartości w kontrolce suma powiększonej o 1.

var a = Globals.MainFrame.skladnik.Value ?? 0; // jeżeli pusta wartość zapisz 0
a = a + 1;
Globals.MainFrame.suma.Value = a;

 

Przyklad

Przepisanie wartości z kontrolki typu tekst do kontrolki typu liczba całkowita, pod warunkiem, że wpisana wartość jest liczbą.

 

if (IsNumeric (Globals.MainFrame.Wartosc_tekst.Text))
{
Globals.MainFrame.Liczba.Value = Int32.Parse(Globals.MainFrame.Wartosc_tekst.Text);
}

public static bool IsNumeric(string value)
{
return value.All(char.IsNumber);
}

 

Przyklad

Przykład pobrania informacji o identyfikatorze operatora i wyświetlenia jej w kontrolce typu tekst.

var info = „Identyfikator operatora: ” + Globals.Common.UserId;
Globals.MainFrame.Informacja.Text = info;

 

Dla kontrolki „Własna akcja” został oprogramowany przełącznik, dzięki któremu można wskazać miejsce uruchomienia skompilowanego kodu C#. Istnieje możliwość uruchomienia kodu w ramach procesu IIS lub w ramach niezależnego procesu (jednowątkowego).

Uruchomienie na niezależnym procesie zalecane jest w przypadku obsługi API, które nie powinno działać na procesach wielowątkowych, jakim jest proces IIS.

 

Ustawienie miejsca uruchomienia kodu C# dla kontrolki „Własna akcja”

 




Parametry ^SenderControlName oraz ^InitSenderControlName w mechanizmie obserwowania i zmiany wartości kontrolki na podstawie innej kontrolki

W mechanizmie modelowania procesów metodami SQL i C# w zdarzeniu obserwacji wartości kontrolek dostępne są parametry:  ^SenderControlName i ^InitSenderControlName. Poniżej przykłady zastosowania obu parametrów:

 

Parametr ^SenderControlName

Parametr zwraca nazwę identyfikatora kontrolki będącej na najniższym poziomie mechanizmu obserwacji, po zmianie wartości w grupie kontrolek. Mechanizm użycia parametru ^SenderControlName prezentuje poniższy przykład.

 

 

Kod obsługujący pobranie wartości dla kontrolki Pole6 może rozróżnić, w której grupie obserwacyjnej zmieniła się wartość pola.

Jeżeli operator lub metoda inicjująca zmieniła wartości kontrolek Pole1, Pole2, Pole3 obserwowanych przez kontrolkę Pole4 (najniższy poziom dla kontrolki Pole6) w parametrze ^SenderControlName zostanie ustawiony identyfikator Pole4.

Natomiast po zmianie wartości w kontrolce Pole5, ^SenderControlName przyjmie identyfikator kontrolki Pole5. Przykładowy kod dla obserwatora w kontrolce Pole6:

if @^SenderControlName@ =’Pole4′
select 'Zmieniono wartości w polach Pole1, Pole2 lub Pole3′
if @^SenderControlName@ = 'Pole5′
select 'Zmieniono wartość w polu Pole5′

Jeżeli w grupie obserwacyjnej na najniższym poziomie występują dwie lub więcej kontrolek, nie można określić, która z tych kontrolek zostanie zainicjowana jako ostatnia, dlatego kod obsługujący tego typu sytuacje powinien sprawdzić nazwy identyfikatorów we wszystkich kontrolkach ostatniego poziomu.

 

 

if @^SenderControlName@ =’Pole3′ or @^SenderControlName@ = 'Pole4′
select 'Zmieniono wartości w polach Pole1 lub Pole2′
if @^SenderControlName@ = 'Pole5′
select 'Zmieniono wartość w polu Pole5′

 

Przykład zastosowania parametru  ^SenderControlName:

Operator dodał w obiegu „Faktury zakupu 2023” następujące kontrolki:

  • Numer dokumentu (Numer_dokumentu)
  • Wartość netto (netto)
  • Stawka VAT (stawka_vat)
  • Kwota VAT (kwota_vat)
  • Wartość brutto (brutto)
  • Informacja o zmianie wartości (zmiana)

 

Definicja obiegu „Faktury zakupu 2023”

 

Kontrolka „Kwota VAT” obserwuje kontrolki:  „Wartość netto” oraz „Stawka VAT” i na ich podstawie wylicza wartość.

Kontrolka „Wartość brutto” obserwuje kontrolki „Wartość netto” oraz „Kwota VAT” i na ich podstawie wylicza wartość.

 

Natomiast kontrolka „Informacja o zmianie wartości” obserwuje kontrolki „Wartość brutto” i „Numer dokumentu” – te kontrolki dodano w polu Kontrolki powiązane.

Następnie w polu Wzór na wartość  operator wybrał  „SQL OD” i w otwartym oknie wprowadził następujące zapytanie SQL:

if @^SenderControlName@ = 'brutto'
select 'Zmieniono wartości w polach Wartość netto, Wartość brutto i Kwota VAT'
if @^SenderControlName@ = 'Numer_dokumentu'
select 'Zmieniono wartość w polu Numer dokumentu'

 

Zapytanie SQL z parametrem @^SenderControlName@

 

Po zapisaniu zapytania SQL oraz zmian w obiegu za pomocą ikony dyskietki  zapisz32 [Zapisz] operator dodaje nowy dokument.

Kiedy została wprowadzona wartość netto i stawka VAT, wówczas w kontrolce „Wartość brutto” pojawia się automatycznie wartość brutto.

Kiedy wartość w kontrolce „Wartość brutto” ulega zmianie, w kontrolce „Informacja o zmianie wartości” automatycznie pojawia się tekst: „Zmieniono wartości w polach Wartość netto, Wartość brutto i Kwota VAT.”

 

Informacja o zmianie wartości kontrolek

 

Kiedy wartość w kontrolce „Numer dokumentu” ulega zmianie, w  kontrolce „Informacja o zmianie wartości” automatycznie pojawia się tekst: „Zmieniono wartość w polu Numer dokumentu”

 

Informacja o zmianie wartości w kontrolce „Numer dokumentu”

 

Parametr ^InitSenderControlName

Parametr zwraca nazwę identyfikatora kontrolki, w której nastąpiła zmiana wartości lub kliknięcie w przycisk w przypadku kontrolki typu ‘Własna akcja’.

 

W powyższym przykładzie po zmianie wartości w polach Pole1, Pole2 lub Pole5 kod obsługujący tę sytuację w kontrolce Pole6 może wyglądać następująco:

if @^InitSenderControlName@ =’Pole1′ or @^InitSenderControlName@ = 'Pole2′
select 'Zmieniono wartości w polach Pole1 lub Pole2′
if @^InitSenderControlName@ = 'Pole5′
select 'Zmieniono wartość w polu Pole5′

 

Przykład zastosowania parametru ^InitSenderControlName

Operator dodał w obiegu „Faktury zakupowe 3” następujące kontrolki:

  • Uruchom kalkulator (Kalkulator) –  kontrolka typu Własna akcja
  • Informacja (Informacja) – kontrolka typu Tekst, która obserwuje kontrolkę „Uruchom kalkulator”

 

Kontrolka „Uruchom kalkulator”

 

Kontrolka „Informacja”

 

W ramach kontrolki „Uruchom kalkulator”  operator wybrał „Ustaw” w ramach pola „Plik wykonywalny” i wpisał ścieżkę do kalkulatora.

 

Wprowadzenie ścieżki do kalkulatora w ramach kontrolki „Uruchom kalkulator”

 

Następnie w ramach właściwości kontrolki „Informacja”  operator wybrał opcję „SQL OD” w polu „Wzór na wartość”, a następnie link „Ustaw”. Później wprowadził i zapisał następujące zapytanie:

 if  @^InitSenderControlName@ = 'Kalkulator'
select 'Uruchomiono kalkulator'

 

Zapytanie wprowadzone w ramach kontrolki „Informacja”

 

Po zapisaniu definicji typu obiegu operator utworzył nowy dokument, na którym kliknął przycisk „Uruchom kalkulator”. Wówczas w kontrolce „Informacja” została wyświetlona następująca treść: Uruchomiono kalkulator.

 

Komunikat wyświetlany w kontrolce „Informacja” po kliknięciu w kontrolkę „Uruchom kalkulator”

 

Najczęstszą sytuacją, w której wykorzystywany jest parametr ^SenderControlName lub ^InitSenderControlName jest własna akcja, która dodaje wartości do kontrolki typu Dane tabelaryczne.

 

Rozpoczynasz pracę z Comarch DMS i chcesz dowiedzieć się, jak korzystać z programu? A może masz już podstawową wiedzę o Comarch DMS i chcesz dowiedzieć się więcej?

Sprawdź Szkolenia Comarch DMS!

 




Procedury

W Comarch DMS dostępne są procedury (wyzwalacze), które rozszerzają funkcjonalność modelowania procesów o możliwość wykonywania dodatkowych akcji, uruchamiane poprzez określone zdarzenie występujące podczas pracy z aplikacją.

 

Uwaga
W  wersji  2022.0 do procedury pOnAfterUserAdded.sql  został dodany parametr @Mode. W czasie aktualizacji wersji Comarch DMS nastąpi podmiana procedury na nową z parametrem.
Jeśli użytkownik w dotychczasowej procedurze miał dodatkowy własny kod, wówczas po aktualizacji powinien dodać go jeszcze raz.

 

Comarch DMS wyposażony m. in. jest w następujące wyzwalacze:

  • Baza Comarch DMS:
    • do.OnAfterDocumentCreated – procedura uruchamiana po każdym utworzeniu dokumentu w Comarch DMS.
    • do.OnAfterDocumentSave – procedura uruchamiana po każdej aktualizacji dokumentu Comarch DMS:
      • po kliknięciu w ikonę zapisu,
      • w przypadku, gdy na typie obiegu ustawiono automatyczny zapis po zainicjowaniu dokumentu,
      • po kliknięciu ‘Utwórz’ w celu utworzenia dokumentu w masowym skanowaniu,
      • po kliknięciu w ‘Generuj’ w celu wygenerowania dokumentu w punktach ACD,
      • przy próbie zapisu dokumentu w obiegu utworzonego z poziomu kolumny typu Dokumenty w obiegu w kontrolce typu Dane tabelaryczne.
    • do.OnBeforeDocumentShow – procedura uruchamiana przed wyświetleniem szczegółów dokumentu Comarch DMS:
      • w przypadku utworzenia nowego dokumentu za pomocą ikony ,
      • w przypadku wyświetlenia istniejącego dokumentu,
      • po kliknięciu ‘Utwórz’ w celu utworzenia dokumentu w masowym skanowaniu,
      • po kliknięciu w ‘Generuj’ w celu wygenerowania dokumentu w punktach ACD.
    • do.OnDocumentPropagation – procedura uruchamiana jest podczas każdego przekazania dokumentu do kolejnego etapu.
  • Bazy Comarch ERP XL, Comarch ERP Optima, Comarch ERP Altumpodczas propagacji dokumentu Comarch DMS można wykonać procedurę na bazie systemu Comarch ERP:
    • CDN.OnDocumentPropagation – procedura uruchamiana jest podczas każdego przekazania dokumentu do kolejnego etapu.

 

Uwaga
Procedura CDN.OnDocumentPropagation na bazach systemów Comarch ERP jest wykonywana wyłącznie w instalacji jednospółkowej.

 

W każdej z procedur (wyzwalaczy) obsłużono wyjątki (Try-Catch) z możliwością przekazania informacji do aplikacji jako komunikat (MessageBox). Ponadto wyjątek zwrócony poprzez instrukcję THROW spowoduje cofnięcie transakcji. Możliwość tą można wykorzystać np. do zatrzymania przekazania dokumentu do kolejnego etapu (procedura OnDocumentPropagation) w sytuacji, gdy nie został spełniony warunek przekazania. Kliknięcie „Przekaż do kolejnego etapu” może spowodować wyświetlenie komunikatu zdefiniowanego w procedurze i zatrzymanie akcji przekazania.

Budowa procedur (wyzwalaczy) rozszerzających funkcjonalność modelowania procesów (budowa procedury zostanie wyświetlona po kliknięciu w nazwę):

do.OnDocumentPropagation

Procedura jest wywoływana podczas przekazania dokumentu do następnego etapu.

CREATE PROCEDURE do.OnDocumentPropagation

@WorkflowId as int = NULL,

@StageId as int = NULL,

@DocumentId as int = NULL,

@PropagatedById as int = NULL,

@DocumentOwnerId as int = NULL,

@IsAutomaticPropagation as bit = NULL

AS

BEGIN

declare @test int

— Tutaj można obsłużyć dodatkowe akcje użytkownika.

END

Opis argumentów:

      • @WorkflowId – int, id Obiegu dokumentów (DSH_Id),
      • @StageId – int, id etapu (DDS_Id),
      • @DocumentId – int, id dokumentu (DWD_ID),
      • @PropagatedById – int, id użytkownika przekazującego dokument (DCD_Id),
      • @DocumentOwnerId int, id właściciela dokumentu (DCD_Id) – przyjmuje zawsze wartość 0,
      • @IsAutomaticPropagation bit, wartość prawdziwa, jeśli dokument był przekazany przez propagację czasową.

do.OnAfterDocumentSave

Procedura jest wykonywana podczas zapisu dokumentu.

CREATE PROCEDURE do.OnAfterDocumentSave

@DocumentId as int = NULL, — DWD_ID z tabeli DF_Work

@SavedBy as int = NULL — DCD_ID z tabeli DF_ConfOSDictionary

AS

BEGIN

declare @test int;

— Tutaj można obsłużyć dodatkowe akcje użytkownika.

END

Opis argumentów:

      • @DocumentId – id dokumentu (DWD_ID),
      • @SavedBy – id użytkownika zapisującego dokument (DCD_Id).

do.OnAfterDocumentCreated

Procedura jest wykonywana przy zapisie nowego dokumentu.

CREATE PROCEDURE do.OnAfterDocumentCreated

@DocumentId as int = NULL, — DWD_ID z tabeli DF_Work

@SavedBy as int = NULL — DCD_ID z tabeli DF_ConfOSDictionary

AS

BEGIN

declare @test int;

— Tutaj można obsłużyć dodatkowe akcje użytkownika.

END

Opis argumentów:

      • @DocumentId – id dokumentu (DWD_ID),
      • @SavedBy – id użytkownika zapisującego dokument (DCD_Id).

do.OnBeforeDocumentShow

Procedura uruchamiana jest przed wyświetleniem szczegółów dokumentu DMS

CREATE PROCEDURE do.OnBeforeDocumentShow

@documentId as int = NULL, — DWD_ID z tabeli DF_Work

@workflowId as int = NULL, — DFH_ID z tabeli DF_HeadDokumentFlow

@userId as int = NULL — DCD_ID z tabeli DF_ConfOSDictionary

AS

BEGIN

begin try

declare @test int

— Tutaj można obsłużyć dodatkowe akcje użytkownika.

end try

begin catch

DECLARE @ErrorMessage varchar(max) = 'W procedurze do.OnBeforeDocumentShow wystąpił błąd: ’ + ERROR_MESSAGE();

–THROW 50001, @ErrorMessage ,1;

declare @ErrorSeverity int = ERROR_SEVERITY(), @ErrorState int = ERROR_STATE()

raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);

end catch

END

Opis argumentów:

      • @DocumentId – identyfikator dokumentu (DWD_Id),
      • @WorkflowId – identyfikator typu obiegu (DFH_Id),
      • @UserId – identyfikator operatora (DCD_Id).

 

Przyklad

Przykład zastosowania procedury do.OnAfterDocumentCreated

W przykładzie zastosowano funkcję skalarną do.ModWorkflowName zwracającą nazwę typu obiegu. W procedurze do.OnAfterDocumentCreated dodano warunek, który ogranicza wywołanie procedury do nazwy typu obiegu. Oznacza to, że procedura zostanie uruchomiona każdorazowo, gdy w ramach wskazanego typu obiegu zostanie utworzony nowy dokument i zostanie podjęta próba jego zapisu w bazie.

W przypadku, gdy kontrolka, której identyfikator wskazano w procedurze, ma uzupełnioną wartość, dokument zostanie zapisany.

W przypadku, gdy w kontrolce, której identyfikator określono w procedurze, nie zostanie uzupełniona wartość, dokument nie zostanie zapisany i zostanie wyświetlony komunikat o treści określonej w poleceniu THROW w procedurze.

Operator w ramach definicji typu obiegu „Faktury – procedura do.OnAfterDocumentCreated” dodał cztery kontrolki:

  • Numer dokumentu (Numer_dokumentu)
  • Data wystawienia (Data_wystawienia)
  • Wartość netto (netto)
  • Wartość brutto (brutto)

 

Definicja typu obiegu „Faktury – procedura do.OnAfterDocumentCreated”

 

Następnie operator znalazł w bazie DMS procedurę do.OnAfterDocumentCreated w katalogu Programmability/Stored Procedures, kliknął na nią prawym przyciskiem myszki, wybrał opcję Modify i wprowadził następujące zapytanie:

USE [DMS]-- w nawiasie kwadratowym należy wpisać nazwę bazy Comarch DMS

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [do].[OnAfterDocumentCreated]

@DocumentId as int = NULL, --DWD_ID z tabeli DF_Work

@SavedBy as int = NULL --DCD_ID z tabeli DF_ConfOSDictionary

AS

BEGIN

BEGIN TRY

declare @string varchar(max)='';

if do.ModWorkflowName (@DocumentId)='Faktury - procedura do.OnAfterDocumentCreated' 
/*nazwa typu obiegu, w którym nastąpi blokada*/

Begin

select @string= isnull (w.DWC_ValueString,'') from do.DF_Work d

join do.DF_ConfDSHead i on d.DWD_DSHId=i.DSH_ID

join do.DF_ConfCFCardDokFlow k on k.DKO_DSHId=i.DSH_ID

join do.DF_WorkCF w on w.DWC_DKOId = k.DKO_ID

where DWD_ID=@DocumentId and k.DKO_Name='Numer_dokumentu'
 /* identyfikator kontrolki, dla której wymagane jest uzupełnienie wartości*/

if @string =''

THROW 50001, 'Pole Numer dokumentu jest wymagane' ,1; -- -treść wyświetlanego komunikatu

End

END TRY

BEGIN CATCH

DECLARE @ErrorMessage varchar(max) = ERROR_MESSAGE();

THROW 50001, @ErrorMessage ,1;

declare @ErrorSeverity int = ERROR_SEVERITY(), @ErrorState int = ERROR_STATE()

raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);

end catch

END

 

 

Wybór opcji „Modify” po kliknięciu prawym przyciskiem myszki na „do.OnAfterDocumentCreated”

 

Później operator nacisnął  przycisk „Execute”, aby procedura została zastosowana, zapisał typ obiegu w Comarch DMS i spróbował zapisać nowy dokument bez wpisywania wartości do kontrolki „Numer dokumentu”. Dokument nie został zapisany i wyświetlony został komunikat Pole Numer dokumentu jest wymagane. Operator mógł zapisać dokument dopiero po wprowadzeniu wartości w kontrolce „Numer dokumentu”.

 

Wybór przycisku „Execute”

 

Komunikat wyświetlany przy próbie zapisu dokumentu bez wprowadzenia wartości w kontrolce „Numer dokumentu”

 

Przyklad

Przykład zastosowania procedury do.OnAfterDocumentSave

Operator w ramach definicji typu obiegu dodał cztery kontrolki:

  • Numer dokumentu (Numer_dokumentu)
  • Data wystawienia (Data_wystawienia)
  • Wartość netto (netto)
  • Wartość brutto (brutto)

 

Definicja typu obiegu „Faktury”

 

Następnie operator znalazł w bazie DMS procedurę do.OnAfterDocumentSave w katalogu Programmability/Stored Procedures, kliknął na nią prawym przyciskiem myszki, wybrał opcję Modify i wprowadził następujące zapytanie:

USE [DMS]-- w nawiasie kwadratowym należy wpisać nazwę bazy Comarch DMS

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [do].[OnAfterDocumentSave]
@DocumentId as int = NULL, -- DWD_ID z tabeli DF_Work
@SavedBy as int = NULL -- DCD_ID z tabeli DF_ConfOSDictionary
AS
BEGIN
begin try
--declare @test int
--------------------------------Blokada zapisu-----------------------------
If exists(
select * from do.RO_ObjectsTypes t
join do.RO_Documents d on d.DFH_Id=t.DFH_Id
where d.DWD_ID=@DocumentId and t.DFH_Name='Faktury'
)

Begin

declare @Numer_dokumentu varchar (max)
declare @data_wystawienia varchar
declare @netto decimal (20,4)
declare @brutto decimal (20,4)


select @Numer_dokumentu=isnull (value, ' ') from do.RO_ControlsValue
where DKO_Name='Numer_dokumentu' and DWD_ID=@DocumentId
If @Numer_dokumentu=' '

THROW 50001, 'Nie możesz zapisać dokumentu, ponieważ nie wprowadzono numeru dokumentu' ,1;

select @Data_wystawienia=isnull (Value,' ') from do.RO_ControlsValue
where DKO_Name='Data_wystawienia' and DWD_ID=@DocumentId
If @Data_wystawienia=' '

THROW 50001, 'Nie możesz zapisać dokumentu, ponieważ nie wprowadzono daty
wystawienia dokumentu' ,1;

select @netto=isnull (Value,0) from do.RO_ControlsValue
where DKO_Name='netto' and DWD_ID=@DocumentId
If @netto=0

THROW 50001, 'Nie możesz zapisać dokumentu, ponieważ nie wprowadzono wartości
netto dokumentu' ,1;

select @brutto=isnull (Value,0) from do.RO_ControlsValue
where DKO_Name='brutto' and DWD_ID=@DocumentId
If @brutto=0

THROW 50001, 'Nie możesz zapisać dokumentu, ponieważ nie wprowadzono wartości
brutto dokumentu' ,1;

END
end try
begin catch
DECLARE @ErrorMessage varchar(max) = 'W procedurze do.OnAfterDocumentSave wystąpił błąd: '
+ ERROR_MESSAGE();
--THROW 50001, @ErrorMessage ,1;
declare @ErrorSeverity int = ERROR_SEVERITY(), @ErrorState int = ERROR_STATE()
raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);
end catch
END

 

Wybór opcji „Modify” po kliknięciu prawym przyciskiem myszki na „do.OnAfterDocumentSave”

 

Później operator nacisnął  przycisk „Execute”, aby procedura została zastosowana, zapisał typ obiegu w Comarch DMS i spróbował zapisać nowy dokument bez wpisywania wartości do kontrolek.

Pierwsza próba zapisu nie powiodła się, a na ekranie został wyświetlony komunikat W procedurze do.OnAfterDocumentSave wystąpił błąd: Nie możesz zapisać dokumentu, ponieważ nie wprowadzono numeru dokumentu.

Wybór przycisku „Execute”

 

Komunikat wyświetlany przy próbie zapisu dokumentu bez wprowadzenia numeru dokumentu

 

Operator wpisał numer dokumentu i ponownie próbował zapisać dokument, jednak próba zapisu nie powiodła się, a na ekranie został wyświetlony komunikat W procedurze do.OnAfterDocumentSave wystąpił błąd: Nie możesz zapisać dokumentu, ponieważ nie wprowadzono daty wystawienia dokumentu.

 

Komunikat wyświetlany przy próbie zapisu dokumentu bez wprowadzenia daty wystawienia dokumentu

 

Operator wprowadził datę wystawienia dokumentu i znów próbował zapisać dokument, ale próba zapisu nie powiodła się, a na ekranie został wyświetlony komunikat W procedurze do.OnAfterDocumentSave wystąpił błąd: Nie możesz zapisać dokumentu, ponieważ nie wprowadzono wartości netto dokumentu.

 

Komunikat wyświetlany przy próbie zapisu dokumentu bez wprowadzenia wartości netto dokumentu

 

Operator wprowadził wartość netto dokumentu i po raz kolejny próbował zapisać dokument, lecz próba zapisu nie powiodła się, a na ekranie został wyświetlony komunikat W procedurze do.OnAfterDocumentSave wystąpił błąd: Nie możesz zapisać dokumentu, ponieważ nie wprowadzono wartości brutto dokumentu.

 

Komunikat wyświetlany przy próbie zapisu dokumentu bez wprowadzenia wartości brutto dokumentu

 

Operator uzupełnił wartość brutto, spróbował zapisać dokument – i tym razem próba zapisu zakończyła się sukcesem, bo wszystkie  wymagane kontrolki zostały uzupełnione.

 

Dokument zapisany po uzupełnieniu wszystkich wymaganych kontrolek

 

Przyklad
Przykład zastosowania procedury do.OnDocumentPropagation

 

Operator utworzył typ obiegu Blokada przekazania bez komentarza i zapisał go.

 

Typ obiegu „Blokada przekazania bez komentarza”

 

Następnie operator znalazł w bazie DMS procedurę do.OnDocumentPropagation  w katalogu Programmability/Stored Procedures, kliknął na nią prawym przyciskiem myszki, wybrał opcję Modify i wprowadził następujące zapytanie:

 

USE [DMS] -- nazwa bazy Comarch DMS
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [do].[OnDocumentPropagation]
@WorkflowId as int = NULL, -- DSH_ID z tabeli DF_ConfDSHead
@StageId as int = NULL,-- DDS_ID z tabeli DF_ConfDSDictionary
@DocumentId as int = NULL, -- DWD_ID z tabeli DF_Work
@PropagatedById as int = NULL, -- DCD_ID z tabeli DF_ConfOSDictionary
@DocumentOwnerId as int = NULL, -- DWD_DCDOwnerId z tabeli DF_Work
@IsAutomaticPropagation as bit = NULL
AS
BEGIN
If exists (
select * from do.RO_ObjectsTypes t
join do.RO_StageActive s on t.DFH_Id=s.DFH_Id
join do.RO_Documents d on s.DWD_ID=d.DWD_ID
where d.DWD_ID=@DocumentId and t.DFH_Name= 'Blokada przekazania bez komentarza'
-- Nazwa typu obiegu

)

If exists (select * from do.RO_StageActive sa
join do.DF_WorkDS ds on sa.dds_id=ds.DWS_DDSId
and sa.DWD_ID=ds.DWS_DWDId
where sa.DWD_ID=@DocumentId and ds.DWS_IsCurrent=1
and isnull (ds.dws_message, '')=''
)

THROW 50001, 'Nie wpisano komentarza - uzupełnij puste pole pod nazwą kolejnego etapu',1;
END

 

Później operator nacisnął  przycisk „Execute”, aby procedura została zastosowana, utworzył nowy dokument i próbował przekazać go do następnego etapu bez wpisania komentarza. Dokument nie został przekazany, natomiast wyświetlony został komunikat Nie wpisano komentarza – uzupełnij puste pole pod nazwą kolejnego etapu. Operator mógł przekazać dokument dopiero po uzupełnieniu pola komentarza.

 

Wybór opcji „Modify” po kliknięciu prawym przyciskiem myszki na „do.OnDocumentPropagation”

 

Wybór przycisku „Execute”

 

Komunikat wyświetlany przy próbie przekazania dokumentu do następnego etapu bez wprowadzenia komentarza

 

Rozpoczynasz pracę z Comarch DMS i chcesz dowiedzieć się, jak korzystać z programu? A może masz już podstawową wiedzę o Comarch DMS i chcesz dowiedzieć się więcej?

Sprawdź Szkolenia Comarch DMS!

 




Weryfikacja kontrahenta na białej liście podatników

Od wersji 2022.0 w Comarch DMS Premium dostępna jest funkcjonalność weryfikacji kontrahentów na białej liście podatników.

Uwaga
Funkcjonalność dostępna jest tylko w przypadku, jeśli Comarch DMS jest na gwarancji. Okres gwarancji jest sprawdzany za każdym razem podczas weryfikacji kontrahenta na białej liście.

 

Kontrahent jest weryfikowany według numeru NIP. Wedle tej informacji można także sprawdzić, czy kontrahent był zarejestrowany na białej liście podatników w danym dniu.

Aby zweryfikować kontrahenta, w konfiguracji kontrolki używa się metody C#:

  • GetStatusVAT(string nip) – aby sprawdzić, czy kontrahent jest na białej liście podatników;
  • GetStatusVATForDate(string nip, DateTime date) – aby sprawdzić, czy kontrahent w danym dniu był na białej liście podatników

Przyklad

Metoda GetStatusVAT(string nip) – przykład

1. Użytkownik w ramach obiegu dokumentów tworzy dwie kontrolki typu tekst.

Są to:

  • Kontrolka Czy kontrahent zweryfikowany? (identyfikator kontrolki: weryfikacja_kontrolka)
  • Kontrolka NIP (identyfikator kontrolki: nip_kontrolka)

Kontrolka „Czy kontrahent zweryfikowany?”

 

Kontrolka „NIP”

2. Następnie we właściwościach kontrolki Czy kontrahent zweryfikowany? użytkownik dodaje w ramach pola Kontrolki powiązane kontrolkę NIP, a jako Wzór na wartość wybiera C# Script i klika Ustaw. Następnie wpisuje następujący wzór:

var nip = Globals.MainFrame.nip_kontrolka.Text;

if (!string.IsNullOrEmpty(nip))
Globals.MainFrame.weryfikacja_kontrolka.Text = Globals.Common.GetStatusVAT(nip).ToString();
else
Globals.MainFrame.weryfikacja_kontrolka.Text = „”;

 

i wybiera przycisk , aby skompilować wzór i zapisać.

3. Następnie zamyka okno Skrypt C#, zapisuje obieg i sprawdza działanie kontrolek.

 

Wprowadzanie kodu C# do weryfikacji kontrahenta

 

Możliwe wartości zwrócone po weryfikacji do kontrolki „Czy kontrahent zweryfikowany?” to:

  • No – podatnik nie jest VATowcem
  • Yes – podatnik jest czynnym VATowcem
  • Free – podatnik jest zwolniony z VAT
  • None – wystąpił błąd podczas weryfikacji
  • NIPErrorniepoprawny numer NIP

 

Weryfikacja kontrahenta – kontrahent jest czynnym VATowcem

 

Weryfikacja kontrahenta – niepoprawny numer NIP

Przyklad

Metoda GetStatusVATForDate(string nip, DateTime date) – przykład

1. Użytkownik w ramach obiegu dokumentów tworzy dwie kontrolki typu tekst i jedną kontrolkę typu data. Są to:

  • Kontrolka typu tekst Czy kontrahent był danego dnia na białej liście? (identyfikator kontrolki: kontrahent_dzien)
  • Kontrolka typu tekst NIP (identyfikator kontrolki: NIP)
  • Kontrolka typu data Data (identyfikator kontrolki: Data)

 

Kontrolka „Czy kontrahent był danego dnia na białej liście?”

 

Kontrolka „NIP”

 

Kontrolka „Data”

2. Następnie we właściwościach kontrolki Czy kontrahent był danego dnia na białej liście? użytkownik dodaje w ramach pola Kontrolki powiązane kontrolki: NIP i Data, a jako Wzór na wartość wybiera C# Script i klika Ustaw. Następnie wpisuje następujący wzór:

var nip = Globals.MainFrame.NIP.Text;
var data1 = Convert.ToDateTime(Globals.MainFrame.Data.Value);

if (!string.IsNullOrEmpty(nip))
Globals.MainFrame.kontrahent_dzien.Text = Globals.Common.GetStatusVATForDate(nip, data1).ToString();
else
Globals.MainFrame.kontrahent_dzien.Text = „”;

 

i wybiera przycisk , aby skompilować wzór i zapisać.

 

3. Następnie użytkownik zamyka okno Skrypt C#, zapisuje obieg i sprawdza działanie kontrolek.

 

Wprowadzanie kodu C# do weryfikacji kontrahenta w danym dniu

 

Możliwe wartości zwrócone po weryfikacji do kontrolki „Czy kontrahent był danego dnia na białej liście?” to:

  • No – podatnik nie był w danym dniu VATowcem
  • Yes – podatnik był w danym dniu czynnym VATowcem
  • Free – podatnik był w danym dniu zwolniony z VAT
  • None – wystąpił błąd podczas weryfikacji
  • NIPErrorniepoprawny numer NIP

 

Weryfikacja kontrahenta według stanu na 7 kwietnia 2022 – kontrahent był wtedy czynnym VATowcem




Wysyłanie wiadomości do usługi e-Doręczenia

W wersji 2024.2.0 umożliwiono wysyłanie wiadomości do usługi e-Doręczenia. Wysyłanie odbywa się za pomocą kontrolki typu Własna akcja z zastosowaniem kodu C#.

W tym celu dodano metodę EdorService.CreateClient(), która zwraca nowy obiekt klienta, używany do komunikacji z usługą e-Doręczenia.

Została również dodana metoda eDorClient.SendMessage(), przyjmująca 4 argumenty:

  • Obowiązkowe:
    • adres odbiorcy wiadomości;
    • temat wiadomości;
  • Opcjonalny:
    • Załączniki

 

Uwaga

Załącznik musi spełniać poniższe warunki:

  • wielkość wiadomości nie może przekraczać 15 MB;
  • rozszerzenie załącznika należy do następującej listy:
    • txt, rtf, pdf, xps, odt, ods, odp, doc, xls, ppt, docx, xlsx, pptx, csv – pliki tekstowe, tekstowo graficzne, multimedialne
    • jpg, jpeg, tif, tiff, geotiff, png, svg – graficzne
    • wav, mp3, avi, mpg, mpeg, mp4, m4a, mpeg4, ogg, ogv – audio
    • zip, tar, gz, gzip, 7z – archiwa
    • 5html, xhtml, css – strony internetowe
    • xml, xsd, gml, rng – definicje informacji i powiązań między nimi
    • xsl, xslt – przetwarzanie xml
    • TSL, XMLsig, XAdES, PAdES, CAdES, XMLenc – podpisy elektroniczne, weryfikacja podpisów, szyfrowanie

 

Aby wysłać wiadomość do usługi e-Doręczenia, należy kolejno:

  • W ramach wybranego typu obiegu dodać następujące kontrolki:
    • Kontrolka „Do:” (identyfikator: Do) – kontrolka typu tekst; pole obowiązkowe – adres odbiorcy wiadomości
    • Kontrolka „Temat:” (identyfikator: Temat) – kontrolka typu tekst; pole obowiązkowe – temat wysyłanej wiadomości
    • Kontrolka „Treść:” (identyfikator: Tresc) – kontrolka typu tekst; pole obowiązkowe – treść wiadomości;
    • Kontrolka „Załączniki” (identyfikator: Zalaczniki) – kontrolka typu Załącznik; pole opcjonalne – lista załączanych plików.
  • W ramach tego samego typu obiegu dodać kontrolkę typu Własna akcja „Wyślij wiadomość do usługi e-Doręczenia” (identyfikator: Wyslij);
  • Podczas konfiguracji kontrolki typu Własna akcja kliknąć w przycisk [Ustaw] w ramach pola „C# Script”;

 

Wybór opcji „Ustaw” w ramach pola „C# Script” na definicji kontrolki typu Własna akcja

 

  • W oknie „Skrypt C#” wprowadzić następujący kod:

 

var eDorClient = EDorService.CreateClient();

string messageId=null;

eDorClient.SendMessage(Globals.MainFrame.Do.Text,Globals.MainFrame.Temat.Text, Globals.MainFrame.Tresc.Text,

Globals.MainFrame.Zalaczniki.Items, ref messageId);

Globals.MainFrame.Wyslij_CSSCRIPT.Text=messageId;

 

  • Nacisnąć przycisk [Kompiluj i zapisz]

 

Uwaga
Należy pamiętać o tym, aby przed kompilacją skryptów C# na komputerze z IIS nadać użytkownikowi IIS_IUSRS prawo zapisu do katalogu .scriptcs_cache (lokalizacja: C:\inetpub\wwwroot\folder_aplikacji_serwerowej\bin)

 

  • Jeśli w dolnej części okna wyświetli się napis „Kompilacja skryptu zakończyła się sukcesem”, zamknąć okno, klikając przycisk [Zamknij];

 

Okno „Skrypt C#” po skompilowaniu kodu C#

 

  • Zapisać zmiany za pomocą przycisku [Zapisz];
  • Dodać nowy dokument i zapisać go za pomocą przycisku [Zapisz];
  • Uzupełnić pola: „Do:”, „Temat:”, „Treść:” i „Załączniki”
  • Kliknąć kontrolkę typu Własna akcja (w tym przypadku „Wyślij wiadomość do usługi e-Doręczenia
  • Jeśli konfiguracja przebiegła pomyślnie, użytkownik został zalogowany do usługi, a wiadomość została wysłana do odbiorcy.

Pobieranie dokumentów potwierdzających wysłanie wiadomości poprzez usługę e-Doręczenia

Integralnym elementem dokumentów wysyłanych poprzez usługę e-Doręczenia, są potwierdzenia świadczące o wykonaniu usługi wysyłki i dostarczenia przesyłki pod wskazany adres. Dokumenty te wystawiane są automatycznie w usłudze e-Doręczenia i są dołączane do wiadomości. Aktualnie w Comarch DMS nie ma możliwości pobrania tych dokumentów, zatem należy je pobrać samodzielnie wprost z usługi e-Doręczenia.

  • Po zalogowaniu się na konto biznesowe w serwisie biznes.gov.pl należy przejść do usługi e-Doręczenia:

 

Konto przedsiębiorcy w serwisie biznes.gov.pl

  • Następnie na liście skrzynek należy wybrać tę, z której wysyłane były wiadomości dla których będą pobierane potwierdzenia:

Lista skrzynek przedsiębiorcy w serwisie biznes.gov.pl

  • Po wejściu do skrzynki, należy wyświetlić listę wiadomości wysłanych:

Lista wiadomości wysłanych w skrzynce przedsiębiorcy w serwisie biznes.gov.pl

 

  •  Potwierdzenia mogą być pobierane wyłącznie pojedynczo dla każdego dokumentu. W ramach dokumentu można pobrać osobno potwierdzenie wysłania i potwierdzenie odbioru w formatach pdf lub xml:

Podgląd wiadomości w skrzynce przedsiębiorcy w serwisie biznes.gov.pl – dowody wysłanej wiadomości – pobieranie pojedynczo

  • Możliwe jest też pobranie wszystkich potwierdzeń na raz używając opcji Pobierz, dostępnej na dole wyświetlonej wiadomości lub w menu kontekstowym na liście wiadomości wysłanych:

Podgląd wiadomości w skrzynce przedsiębiorcy w serwisie biznes.gov.pl – pobieranie paczki plików dotyczących wiadomości

 

Opcja pobierania paczki plików dla wysłanej wiadomości

W pobranej paczce *.zip znajdą się wszystkie elementy dotyczące danej wiadomości, tj:

  • Potwierdzenie wysłania w formie pliku pdf
  • Potwierdzenie otrzymania w formie pliku pdf
  • Dowody techniczne w formie plików xml
  • Utworzony wydruk wiadomości wraz z treścią i listą załączników, w formie pliku pdf
  • Załączniki dołączone do wiadomości
  • Oraz treść wiadomości w formie pliku txt
  • Plik archiwum lub pliki pojedynczych potwierdzeń można dołączyć do kontrolki załącznik na dokumencie DMS, z którego dana wiadomość została wysłana.