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.
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 PremiumFunctionalityustawić 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 logowaniaw oknie logowania zostanie wyświetlonana 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 opcjina 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ść:
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 w
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 bibliotekiw 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 koniecznymdo poprawnego działania jest nadanie operatorowi IIS_USER uprawnień pełnej kontroli do katalogu .scriptsc_cache, pozwoli to na dynamiczny zapisskompilowanych plików.
W edytorze skryptów C# wyświetlane są podpowiedzizawierają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
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:
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 boolIsNumeric(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;
Od wersji 2024.3.0 zablokowano możliwość zmiany miejsca wykonywania skryptów C# – dostępna jest jedynie opcja Proces (exe).
Uwaga
W przypadku wcześniejszych wersji uruchomienie skryptu na niezależnym procesie exe jest zalecane w przypadku obsługi API, które nie powinno działać na procesach wielowątkowych takich jak proces IIS.
Okno definiowania procedury wywołania kontrolki typu Własna akcja w języku C#
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)
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 klikaUstaw. 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
NIPError – niepoprawny 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śćwybieraC# Script i klikaUstaw. 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 wybieraprzycisk , aby skompilować wzór i zapisać.
W wersji 2023.1.0 w aplikacji desktop Comarch DMS udostępniono funkcjonalność robotyzacji procesów.
Uwaga
Robotyzacja procesów jest dostępna jedynie w aplikacji desktop Comarch DMS .
W ramach mechanizmu robotyzacji użytkownik korzysta ze skryptów C#, z zastosowaniem predefiniowanych klas. W tym celu został udostępniony lokalny kompilator C#.
Skrypty mogą korzystać z referencji.
Skrypty są aktywowane ręcznie
Uwaga
Aby możliwe było uruchomienie skryptów, operator musi być zalogowany do aplikacji desktop Comarch DMS.
Zakładka „Konfiguracja automatycznego trybu pracy” – nadawanie uprawnień do zakładki i elementy okna
W wersji 2023.1.0 została dodana nowa zakładka [Konfiguracja automatycznego trybu pracy] , dostępna w menu głównym aplikacji desktop Comarch DMS nad ikoną panelu użytkownika .
Zakładka [Konfiguracja automatycznego trybu pracy] jest dostępna w menu głównym aplikacji desktop Comarch DMS jedynie wtedy, gdy danemu operatorowi nadano uprawnienie do tej zakładki na karcie pracownika.
Aby przyznać uprawnienie do zakładki [Konfiguracja automatycznego trybu pracy] pracownikowi należy przejść na zakładkę [Struktura organizacyjna], następnie kliknąć na sekcje „Pracownicy”, na danego pracownika i na zakładkę „Uprawnienia”. Następnie należy wybrać sekcję „Funkcjonalności” i w ramach pola „Konfiguracja automatycznego trybu pracy” wybrać wartość „Tak”, a następnie zapisać zmiany znakiem dyskietki. Wówczas pracownik będzie mógł tworzyć skrypty do pracy automatycznej.
Jeżeli w polu „Konfiguracja automatycznego trybu pracy” ustawiona jest wartość „Nie”, wówczas zakładka nie jest widoczna dla pracownika i nie ma on uprawnień do tworzenia skryptów do pracy automatycznej.
Uwaga
Jeżeli operator nadaje uprawnienie „Konfiguracja automatycznego trybu pracy” samemu sobie, wówczas zakładka będzie widoczna dopiero po ponownym zalogowaniu .
Nadawanie pracownikowi uprawnień do zakładki „Konfiguracja automatycznego trybu pracy”
Po pierwszym przejściu na zakładkę [Konfiguracja automatycznego trybu pracy] widoczne jest puste okno ze zwiniętym panelem „Skrypty” . W górnej części okna dostępne są następujące przyciski:
[Dodaj] – po naciśnięciu przycisku zostaje dodany nowy skrypt
[Usuń] – przycisk pozwala na usunięcie programu z listy programów w oknie „Konfiguracja automatycznego trybu pracy” oraz z listy programów, które mogą być uruchomione przez użytkownika
[Zapisz] – przycisk służy do zapisywania zmian w programie
[Uruchom] – przycisk otwiera okno „Automatyczny tryb pracy”; przycisk widoczny jedynie dla użytkowników, którym nadano uprawnienie do danego programu na zakładce „Uprawnienia” w ramach okna „Konfiguracja automatycznego trybu pracy” (zob. Uruchamianie i zatrzymywanie programu).
Okno „Konfiguracja automatycznego trybu pracy” po pierwszym otwarciu zakładki
Aby dodać nową pozycję, należy nacisnąć przycisk [Dodaj]. Wówczas zostanie dodany nowy program z predefiniowaną nazwą „Nazwa programu 1”. W ramach okna widoczne są dwie zakładki:
Edytor skryptów
Uprawnienia
Zakładka „Edytor skryptów”
W wersji 2023.1.0 została dodana nowa zakładka [Konfiguracja automatycznego trybu pracy] , dostępna w menu głównym aplikacji desktop Comarch DMS nad ikoną panelu użytkownika .
Zakładka [Konfiguracja automatycznego trybu pracy] jest dostępna w menu głównym aplikacji desktop Comarch DMS jedynie wtedy, gdy danemu operatorowi nadano uprawnienie do tej zakładki na karcie pracownika.
Aby przyznać uprawnienie do zakładki [Konfiguracja automatycznego trybu pracy] pracownikowi należy przejść na zakładkę [Struktura organizacyjna], następnie kliknąć na sekcje „Pracownicy”, na danego pracownika i na zakładkę „Uprawnienia”. Następnie należy wybrać sekcję „Funkcjonalności” i w ramach pola „Konfiguracja automatycznego trybu pracy” wybrać wartość „Tak”, a następnie zapisać zmiany znakiem dyskietki. Wówczas pracownik będzie mógł tworzyć skrypty do pracy automatycznej.
Jeżeli w polu „Konfiguracja automatycznego trybu pracy” ustawiona jest wartość „Nie”, wówczas zakładka nie jest widoczna dla pracownika i nie ma on uprawnień do tworzenia skryptów do pracy automatycznej.
Uwaga
Jeżeli operator nadaje uprawnienie „Konfiguracja automatycznego trybu pracy” samemu sobie, wówczas zakładka będzie widoczna dopiero po ponownym zalogowaniu .
Nadawanie pracownikowi uprawnień do zakładki „Konfiguracja automatycznego trybu pracy”
Po pierwszym przejściu na zakładkę [Konfiguracja automatycznego trybu pracy] widoczne jest puste okno ze zwiniętym panelem „Skrypty” . W górnej części okna dostępne są następujące przyciski:
[Dodaj] – po naciśnięciu przycisku zostaje dodany nowy skrypt
[Usuń] – przycisk pozwala na usunięcie programu z listy programów w oknie „Konfiguracja automatycznego trybu pracy” oraz z listy programów, które mogą być uruchomione przez użytkownika
[Zapisz] – przycisk służy do zapisywania zmian w programie
[Uruchom] – przycisk otwiera okno „Automatyczny tryb pracy”; przycisk widoczny jedynie dla użytkowników, którym nadano uprawnienie do danego programu na zakładce „Uprawnienia” w ramach okna „Konfiguracja automatycznego trybu pracy” (zob. Uruchamianie i zatrzymywanie programu).
Okno „Konfiguracja automatycznego trybu pracy” po pierwszym otwarciu zakładki
Aby dodać nową pozycję, należy nacisnąć przycisk [Dodaj]. Wówczas zostanie dodany nowy program z predefiniowaną nazwą „Nazwa programu 1”. W ramach okna widoczne są dwie zakładki:
Edytor skryptów
Uprawnienia
Zakładka „Uprawnienia”
W ramach zakładki „Uprawnienia” zostają zdefiniowane uprawnienia operatorów do uruchamiania skryptów.
Uprawnienia dla każdego utworzonego programu są nadawane oddzielnie.
Zakładka „Uprawnienia” w ramach okna „Konfiguracja automatycznego trybu pracy” przed dodaniem uprawnień
Na zakładce dostępne są następujące pola:
Nazwa spółki – pole dostępne jedynie w trybie wielospółkowym Comarch DMS; należy w nim dokonać wyboru spółki, z której pochodzi operator, któremu mają zostać nadane uprawnienia
Typ – w ramach tego pola możliwy jest wybór pracownika, działu lub stanowiska, dla którego mają zostać przyznane uprawnienia do danego programu
Wartość – w zależności od wyboru dokonanego w polu „Typ” w ramach tego pola można wybrać danego pracownika/dział/ stanowisko, któremu zostaną przyznane uprawnienia do danego programu
Po nadaniu uprawnień należy zapisać zmiany, klikając na przycisk [Zapisz]. Wówczas operator zostaje przeniesiony na zakładkę „Edytor skryptów”, a w prawym górnym rogu okna „Konfiguracja automatycznego trybu pracy” pojawia się przycisk [Uruchom], służący do uruchomienia programu.
Zakładka „Uprawnienia” w ramach okna „Konfiguracja automatycznego trybu pracy” z dodanymi uprawnieniami – przed zapisaniem zmian
Uruchamianie i zatrzymywanie programu
Okno „Uruchom program”
Aby uruchomić program, należy kliknąć w ikonę [Uruchom], która jest widoczna:
na zakładce [Dokumenty] – dla każdego użytkownika, któremu przyznano uprawnienia do co najmniej jednego programu
Widok listy dokumentów dla użytkownika, któremu nadano uprawnienia do programu – w prawym górnym rogu widoczna jest ikona „Uruchom”
W ramach okna „Konfiguracja automatycznego trybu pracy”, dla operatora, któremu przyznano uprawnienia do tego okna oraz do co najmniej jednego programu
Widok okna „Konfiguracja automatycznego trybu pracy” dla użytkownika, któremu nadano uprawnienia do programu – w prawym górnym rogu widoczna jest ikona „Uruchom”
Po naciśnięciu ikony [Uruchom] zostaje otwarte okno „Uruchom program”. W ramach tego okna operator może uruchomić program. W oknie znajdują się dwa pola:
Uruchom program – w ramach tego pola użytkownik może wybrać program, który chce uruchomić, z rozwijanej listy
Uwaga
W ramach pola „Uruchom program” widoczne są tylko te programy, do których przyznano danemu operatorowi uprawnienia na zakładce „Uprawnienia” w oknie „Konfiguracja automatycznego trybu pracy” (zob. Zakładka „Uprawnienia”).
Wybór z listy programu, który ma zostać uruchomiony
Zabezpiecz hasłem – pole domyślnie odznaczone; jeżeli zostanie zaznaczone, wówczas zatrzymanie pracy programu będzie wymagało podania hasła zalogowanego operatora w oknie „Automatyczny tryb pracy”.
Okno „Uruchom program” z zaznaczonym checkboxem „Zabezpiecz hasłem”
Po wyborze programu operator powinien nacisnąć przycisk [Uruchom] – wówczas okno „Uruchom program” zostanie zamknięte, a otworzy się okno „Automatyczny tryb pracy” i wybrany program rozpocznie działanie.
Natomiast jeżeli operator nie chce jednak uruchomić programu, powinien kliknąć przycisk [Anuluj] – wtedy okno „Uruchom program” zostanie zamknięte, a program się nie uruchomi.
Okno „Automatyczny tryb pracy”
Po naciśnięciu w oknie „Uruchom program” przycisku [Uruchom] zostaje otwarte okno „Automatyczny tryb pracy”.
W ramach okna „Automatyczny tryb pracy” znajduje się nazwa programu, który został uruchomiony, jest również podawany czas, który zajęło dotychczas wykonywanie programu.
Aby zakończyć działania programu, należy kliknąć przycisk [Zatrzymaj program], znajdujący się w dolnej części okna.
Uwaga
Jeśli okno „Automatyczny tryb pracy” jest włączone, użytkownik nie może pracować z Comarch DMS.
Okno „Automatyczny tryb pracy”
Kiedy operator naciśnie przycisk [Zatrzymaj program]:
jeśli w oknie „Uruchom program” nie zaznaczono checkboxa „Zabezpiecz hasłem” – wykonywanie skryptu zostanie przerwane, okno „Automatyczny tryb pracy” – zamknięte, a operator może znowu pracować z Comarch DMS;
jeśli w oknie „Uruchom program” zaznaczono checkbox „Zabezpiecz hasłem” – wyświetlone zostaje okno, w ramach którego należy wprowadzić hasło zalogowanego operatora.
Okno, w którym należy wpisać hasło zalogowanego operatora, aby zatrzymać program
W oknie dostępne są następujące przyciski:
[Zatrzymaj program] – kiedy operator wybierze tn przycisk, wówczas wykonywanie skryptu zostanie zatrzymane, okno „Automatyczny tryb pracy” – zamknięte, zostanie również wyświetlone okno informujące o zakończeniu działania programu, w którym należy kliknąć przycisk „Ok”. Operator będzie mógł znowu pracować z Comarch DMS;
Okno wyświetlane po podaniu hasła operatora i zatrzymaniu programu
[Zamknij aplikację] – po naciśnięciu tego przycisku zostaje wyświetlone następujące okno:
Okno wyświetlone po wyborze przycisku „Zamknij aplikację”
W ramach okna znajdują się dwa przyciski:
Tak – aplikacja Comarch DMS zostanie zamknięta
Nie – jeżeli operator wybierze tę opcję, wówczas aplikacja Comarch DMS pozostaje otwarta, a skrypt nadal jest wykonywany
[Anuluj] – jeśli użytkownik kliknie ten przycisk, wówczas okno do wprowadzenia hasła zostanie zamknięte, a skrypt będzie nadal wykonywany;
Jeżeli operator nie wprowadzi hasła lub wprowadzi błędne hasło, a następnie kliknie w przycisk [Zatrzymaj program], wówczas zostanie wyświetlona informacja o nieprawidłowym haśle, a skrypt nadal będzie wykonywany.
Informacja wyświetlana, jeśli nie wprowadzono hasła lub wprowadzono błędne hasło
Klasa ACD
W obiekcie Globals dodano klasę ACD, która określa grupę metod wykonywanych jedynie w kontekście okna ACD. W klasie ACD udostępniono następujące metody:
GenerateDMSDocuments (int) – metoda umożliwia wciśnięcie przycisku „Generuj” na zakładce „Automatyczne generowanie dokumentów”.
zwraca wyniki:
0 – operacja została wykonana poprawnie
-1 – kiedy wystąpił błąd
Int GenerateDMSDocuments()
Return: 0 – ok, -1 – error
Uwaga
Od wersji 2024.0.1 na zakładce „Edytor skryptów” na zakładce [Konfiguracja automatycznego trybu pracy] można korzystać z następujących wariantów metody GenerateDMSDocuments():
W ramach parametru string company należy wprowadzić nazwę spółki, a w ramach parametru string department – nazwę działu danej spółki
Przykład skryptu z metodą GenerateDMSDocuments(string company, string department)
GenerateDMSDocuments(string company)
W ramach parametru string company należy wprowadzić nazwę spółki
Przykład skryptu z metodą GenerateDMSDocuments(string company)
[/alert]
GetDocumentList – metoda umożliwia pobranie informacji o zaczytanych dokumentach
Zwraca wyniki:
0 – operacja została wykonana poprawnie
-1 – wystąpił błąd
Int GetDocumentList(ref ACDDocument[])
Struct ACDDocument
(
string Name,
byte Status
)
Name: document name
Status: 0 - correct, 1 – incorrect
Return: 0 – ok, -1 - error
GetNumberItems (ref long) – metoda, która sprawdza liczbę pobranych dokumentów w punkcie ACD
brak parametrów wejściowych
zwraca wyniki:
Liczba pobranych dokumentów
0 – operacja została wykonana poprawnie
-1 – kiedy metoda została wywołana w niewłaściwym kontekście
int GetNumberItems(ref long)
long: number of documents
return: 0 – ok, -1 - error
RefreshList() – metoda umożliwia wciśnięcie przycisku „Odśwież” na zakładce „Automatyczne generowanie dokumentów”
brak parametrów wejściowych
zwraca wyniki:
0 – operacja została wykonana poprawnie
-1 – kiedy wystąpił błąd
Int RefreshList()
return: 0 – ok, -1 - error
SelectDocument (int) – metoda, która umożliwia podświetlenie dokumentu na liście (jeżeli lista prezentuje dokumenty z checkboxami – zaznaczenie checkboxa).
Parametry wejściowe:
Identyfikator dokumentu
Zwraca wyniki:
0 – operacja została wykonana poprawnie
-1 – wystąpił błąd
int SelectDocument(int)
int: document index
return: 0 – ok, -1 - error
SetPoint (string,byte) – metoda, która odpowiada za wskazanie punktu ACD i włączenie lub wyłączenie automatycznego wysyłania dokumentów do Comarch OCR
Parametry wejściowe:
Pierwszy parametr jest wymagany, należy wprowadzić w nim nazwę punktu ACD, w ramach którego będzie się odbywało przetwarzanie dokumentów
Drugi parametr jest opcjonalny, dotyczy kwestii włączenia procesowania dokumentów w punkcie ACD, przyjmuje następujące wartości:
0 – procesowanie dokumentów jest wyłączone (dotyczy punktów ACD, które nie obsługują OCR)
1 – procesowanie dokumentów jest włączone
Zwraca wyniki:
0 – operacja została wykonana poprawnie
-1 – kiedy wystąpił błąd
-2 – kiedy punkt ACD o podanej nazwie nie istnieje
int SetPoint(string,byte)
string: ACD point name
byte:1 -turn on ACD proces, 0 – turn off ACD proces
return: 0 – ok, - 1 – error, -2 – ACD point not exists
SetViewMode (byte) – metoda, która odpowiada za tryb filtrowania pobranych dokumentów
1 – operator nie jest uprawniony do okna ACD – jeśli ta wartość została zwrócona, w aplikacji zostaje wyświetlony komunikat „Operator nie posiada uprawnień do automatycznego generowania dokumentów”
int Show()
return: 0 – ok, -1 - error
Uwaga
W wersji 2024.3.0 udostępniono metodę Globals.ACD:int GetErrorList(ref ACDError[] errors) w ramach skryptów C# na zakładce [Konfiguracja automatycznego trybu pracy]. Metoda zwraca listę ostatnich błędów (do 50 błędów) na bieżącym punkcie ACD, można ją zastosować dla punktów współpracujących z Comarch OCR oraz dla punktów współpracujących ze skrzynką pocztową.
Poniżej przedstawiono przykład z zastosowaniem nowej metody (została oznaczona zieloną czcionką) dla przykładowych punktów ACD typu Współpraca z Comarch OCR ("Faktury od Firmy A", "Faktury od Firmy B", "Faktury od Firmy C"):
Globals.ACD.Show();
while (1==1)
{
Globals.ACD.SetPoint("Faktury od Firmy A",1);
Globals.ACD.RefreshList();
Globals.ACD.GenerateDMSDocuments();
Globals.ACD.SetPoint("Faktury od Firmy B",1);
Globals.ACD.RefreshList();
ACDError[] errors; Globals.ACD.GetErrorList(ref errors);Globals.ACD.GenerateDMSDocuments();
Globals.ACD.SetPoint("Faktury od Firmy C",1);
Globals.ACD.RefreshList();
Globals.ACD.GenerateDMSDocuments();
}
Zakładka „Konfiguracja automatycznego trybu pracy” z wprowadzonym kodem C# z nową metodą
Klasa Common
W ramach klasy Comon udostępniono następującą metodę:
Trace(string) – metoda umożliwia wyświetlanie dodatkowych informacji na oknie „Automatyczny tryb pracy”,[/su_list]
void Trace(string)
string:message
Przykład:
Globals.Common.Trace("Trwa procesowanie dokumentów dla punktu: \"Faktury od Firmy C\"");
Okno „Automatyczny tryb pracy” z przykładowym zastosowaniem metody Trace
Konfiguracja i uruchamianie automatycznego trybu pracy – przykład
Administrator otworzył do edycji plik DMS.exe.config, znajdujący się w folderze z aplikacją desktop Comarch DMS i w ramach klucza „RPAFolderPath” wprowadził ścieżkę do aplikacji desktop Comarch DMS – w tym przypadku <add key=”RPAFolderPath” value=”C:\dms202310″/> – a później zapisał zmianę.
Administrator dodał na zakładce [Automatyczne generowanie dokumentów] trzy punkty ACD należące do typu „Współpraca z Comarch OCR” o następujących nazwach:
Faktury od Firmy A (zgodnie z ustawieniami punktu dokumenty wygenerowane w tym punkcie mają trafiać do obiegu „Faktury – firma A”)
Faktury od Firmy B (zgodnie z ustawieniami punktu dokumenty wygenerowane w tym punkcie mają trafiać do obiegu „Faktury – firma B”)
Faktury od Firmy C (zgodnie z ustawieniami punktu dokumenty wygenerowane w tym punkcie mają trafiać do obiegu „Faktury – firma C”)
Ustawienia punktu ACD „Faktury od Firmy A” – zakładka „Ogólne”
Ustawienia punktu ACD „Faktury od Firmy A” – zakładka „Kontrolki”
następnie administrator przeszedł na zakładkę [Konfiguracja automatycznego trybu pracy] i kliknął przycisk [Dodaj].
Wskazówka
Aby zobaczyć przykład, kliknij na film poniżej.
Na zakładce „Edytor skryptów” w ramach pola „Nazwa programu” wpisał „Faktury z firm A,B,C”, później na zakładce „Uprawnienia” nadał uprawnienia do programu dla siebie i kilku innych operatorów i kliknął [Zapisz].
Wskazówka
Aby zobaczyć przykład, kliknij na filmy poniżej.
Na zakładce „Edytor skryptów” w polu edytora administrator wprowadził następujący kod:
Globals.ACD.Show();
while (1==1)
{
Globals.ACD.SetPoint("Faktury od Firmy A",1);
Globals.ACD.RefreshList();
Globals.ACD.GenerateDMSDocuments();
Globals.ACD.SetPoint("Faktury od Firmy B",1);
Globals.ACD.RefreshList();
Globals.ACD.GenerateDMSDocuments();
Globals.ACD.SetPoint("Faktury od Firmy C",1);
Globals.ACD.RefreshList();
Globals.ACD.GenerateDMSDocuments();
}
Wprowadzanie kodu do edytora skryptów
Następnie administrator nacisnął przycisk [Kompiluj i zapisz]. Kompilacja przebiegła pomyślnie, więc w dolnej części okna wyświetlona została informacja „Kompilacja skryptu zakończyła się sukcesem”.
Wskazówka
Aby zobaczyć przykład, kliknij na film poniżej.
Następnie administrator zapisał zmiany, klikając przycisk [Zapisz]. Później nacisnął przycisk [Uruchom] i w ramach otwartego okna „Uruchom program” wybrał w polu „Uruchom program” program „Faktury z firm A,B,C” i (nie zaznaczając checkboxa „Zabezpiecz hasłem”), a później kliknął przycisk [Uruchom].
Wskazówka
Aby zobaczyć przykład, kliknij na film poniżej.
wówczas administrator został przeniesiony na zakładkę „Automatyczne generowanie dokumentów”, gdzie otworzyło się okno „Automatyczny tryb pracy”, a w tle odbywało się inicjowanie dokumentów.
Wskazówka
Aby zobaczyć przykład, kliknij na film poniżej.
Gdy wszystkie dokumenty zostały wygenerowane, administrator kliknął przycisk [Zatrzymaj program]. Okno „Automatyczny tryb pracy” zostało zamknięte.
Następnie administrator przeszedł na zakładkę [Dokumenty w obiegu] – na liście dokumentów widoczne były wszystkie dokumenty wygenerowane w wyniku działania programu „Faktury z firm A,B,C”. Po wejściu do przykładowego dokumentu można zauważyć, że na dokument zmapowano również wartości odczytane przez OCR, zgodnie z ustawieniami punktów ACD.
Przykładowy dokument wygenerowany w automatycznym trybie pracy
Aby przyklad działał poprawnie, konieczne jest spełnienie następujących warunków:
1. Instalacja systemu Comarch ERP XL na serwerze IIS
2.Poprawna konfiguracja współpracy pomiędzy systemami Comarch ERP XL oraz Comarch DMS
3. Nadanie użytkownikowi IISUSER uprawnień do zapisu w katalogu bin\Scriptcs_bin oraz katalogu bin\.scriptcs_cache, które znajdują się w plikach aplikacji serwerowej Comarch DMS
4.Skopiowanie biblioteki cdn_api[wersja].net.dll do katalogu bin\Scriptcs_bin, biblioteka znajduje się w katalogu, w którym zainstalowano Comarch ERP XL, w przykładach wykorzystano cdn_api20232.net.dll
5. Należy sprawdzić, czy w katalogu bin aplikacji web Comarch DMS znajduje się plik cdn_sys.dll, jeżeli jest należy usunąć go z tej lokalizacji.
Skrypty C# zostały wykorzystane w kontrolkach typu Własna akcja i Komunikat. Skrypt dla kontrolki typu własna akcja utworzono na podstawie wzorca API XL
Wskazówka
Rekomendujemy wykorzystanie wzorca API XL jako elementu bazowego na potrzeby własnych rozwiązań.
Wzorzec API XL dostępny jest na indywidualnych stronach dla Partnerów w obszarze Comarch DMS\Przykłady\ERP XL: Wzorzec API XL
Konfiguracja typu obiegu
Przykład pokazuje, w jaki sposób administrator Comarch DMS może skonfigurować definicję obiegu, aby generować dokument „Faktura zakupu” do systemu Comarch ERP XL, bez pomocy kontrolki typu Dokument ERP XL. W tym celu należy:
1.dodać nowy typ obiegu w ramach zakladki [Definicje obiegów dokumentów]
2.nadać nazwę typowi obiegu – np. Generowanie faktury zakupu i prefix – np. GEN
3.nadać danemu administratorowi uprawnienie do inicjowania dokumentuna zakładce „Ustawienia obiegu” w sekcji „Uprawnienia do inicjowania dokumentu”
Nadawanie uprawniń do inicjowania dokumentu dla administratora – przykład
4. W ramach zakładki „Schemat obiegu” utworzyć etap początkowy „Generuj dokument” i etap końcowy „Koniec”oraz dodać uprawnienie dla danego administratora do etapów.
Dodawanie etapów i uprawnień
5. W ramach zakładki „Karta obiegu” dodać następujące kontrolki:
AKontrolka typu Kontrahent – „Kontrahent” (identyfikator: Kontrahent)
Kontrolka „Kontrahent”
BKontrolka typu Dane tabelaryczne – „Elementy”(identyfikator: Elementy) – w ramach kontrolki należy:
w zakładce „Listy” dodać następujące listy:
„Jm”z wartością „Jednostki miary” w polu „Inicjowanie”
„VAT”z wartością „Stawki VAT” w polu „Inicjowanie”
Kontrolka „Elementy”, zakładka „Listy”
w zakładce „Ogólne” dodać następujące kolumny:
kolumna typu Towar – „Towar”(identyfikator: Towar)
kolumna typu Liczba stałoprzecinkowa – „Ilość”(identyfikator: Ilosc)
kolumna typu Lista – „Jm.” (identyfikator: Jm) z wartością „Jm”wybraną w polu „Listy”
kolumna typu Lista – „VAT” (identyfikator: VAT) z wartością „VAT” wybraną w polu „Listy”
kolumna typu Liczba stałoprzecinkowa – „Cena netto”(identyfikator: CenaNetto)
kolumna typu Liczba stałoprzecinkowa – „Cena brutto”(identyfikator: CenaBrutto)
kolumna typu Liczba stałoprzecinkowa – „Wartość Netto”(identyfikator: WartoscNetto)
kolumna typu Liczba stałoprzecinkowa – „Wartość Brutto” (identyfikator: WartoscBrutto)
Kontrolka „Elementy”, zakładka „Ogólne” – widok kolumn 1-3
Kontrolka „Elementy”, zakladka „Ogólne” – widok kolumn 4-8
w zakładce „Inicjowanie wartości” :
w ramach pola „Kontrolki powiązane” kliknąć przycisk „Dodaj” i wybrac kontrolkę „Elementy”
w ramach pola „Wzór na wartość” wybrać opcję „SQL OD”, kliknąć „Ustaw”, a następnie wprowadzić następujące zapytanie:
if @^InitSenderControlName@ = 'Elementy'
Begin
declare @vat decimal(22,4) = 0.0
declare @netto decimal (22,4) = 0.0
declare @brutto decimal (22,4) = 0.0
declare @ilosc decimal (22,4) = 0.0
if @Elementy_Column@ in (2,4,5)
Begin
select @netto = CenaNetto, @ilosc = Ilosc from @Elementy@
where POS = @Elementy_Row@
select @vat = case
when VAT = 1 then 23
when VAT = 2 then 8
when VAT = 3 then 0
when VAT = 4 then 0
when VAT = 5 then 0
when VAT = 6 then 7
when VAT = 7 then 5
else 0 end
from @Elementy@ where POS = @Elementy_Row@
set @brutto = ((@netto*@vat)/100)+@netto
update @Elementy@ set CenaBrutto = @brutto, WartoscBrutto = @ilosc * @brutto,
WartoscNetto = @ilosc * @netto where POS = @Elementy_Row@
select * from @Elementy@
End
if @Elementy_Column@ = -1
Begin
update @Elementy@ set Ilosc = 1, JM = 1, VAT = 1
where POS = @Elementy_Row@
select * from @Elementy@
End
End
Wprowadzone zapytanie należy zapisać, klikając w przycisk „Zapisz” w oknie „Wyrażenie kontrolki”
Ckontrolka typu Własna akcja – „Generuj dokument” (identyfikator: GenerujDokument) – w ramach definicji kontrolki należy kliknąć w link „Ustaw” w polu „C# Script”, następnie w otwartym oknie „Skrypt C#” w polu „Miejsce wykonania skryptu” wybrać „Proces (exe)” (jeśli istnieje opcja wyboru) i wprowadzić następujący kod:
using System.Threading;
using System.Runtime.InteropServices;
using cdn_api;
static ThreadLocal<bool> threadToClarionAttached = new ThreadLocal<bool>(() => false);
[DllImport("ClaRUN.dll")]
private static extern void AttachThreadToClarion(int flag);
public void AttachThreadToClarion()
{
try
{
if (!threadToClarionAttached.Value)
{
AttachThreadToClarion(1); // C8
threadToClarionAttached.Value = true;
}
}
catch (DllNotFoundException ex)
{
// -----------------------------------------------------------------
// Tu przekaż informacje o statusie działania skryptu
// -----------------------------------------------------------------
Globals.MainFrame.GenerujDokument_CSSCRIPT.Text = ex.Message;
}
}
AttachThreadToClarion();
int _lSesjaID = 0;
string blad = "";
try
{
int documentId = 0;
int wersjaApi = odpowiedniawersjaapi;
var loginInfo = new XLLoginInfo_odpowiedniawersjaapi()
{
Wersja = odpowiedniawersjaapi,
ProgramID = "Comarch DMS",
Winieta = -1,
TrybWsadowy = 1,
Baza = "nazwafirmy",
OpeIdent = "Login",
OpeHaslo = "hasło",
SerwerKlucza = @"serwerklucza"
};
var XLLoginResult = cdn_api.cdn_api.XLLogin(loginInfo, ref _lSesjaID);
if (XLLoginResult != 0)
{
blad = "Funkcja XLLogin zwróciła bład nr: " + XLLoginResult;
throw new Exception();
}
// -----------------------------------------------------------------
// Tu dodaj kod obsługi API
// -----------------------------------------------------------------
var dokumentNagInfo = new XLDokumentNagInfo_odpowiedniawersjaapi
{
Wersja = odpowiedniawersjaapi,
Typ = 1521,//FZ
KntTyp = 32,
KntNumer = Globals.MainFrame.Kontrahent.Id ?? 0, // Pobierz GidNumer kontrahenta
RodzajZakupu = 1,
//Avista = 1
};
var XLNowyDokumentResult = cdn_api.cdn_api.XLNowyDokument (_lSesjaID, ref documentId, dokumentNagInfo);
if (XLNowyDokumentResult != 0)
{
blad = "Funkcja XLNowyDokument zwróciła bład nr: " + XLNowyDokumentResult;
throw new Exception();
}
//var element;
for (int i=0; i<Globals.MainFrame.Elementy.RowCount; i++)
{
var element = new XLDokumentElemInfo_odpowiedniawersjaapi();
element.Wersja = odpowiedniawersjaapi;
element.TwrTyp = 16;
element.Ilosc = Globals.MainFrame.Elementy.Items[i].Ilosc.Value.ToString();
element.TwrNumer = Globals.MainFrame.Elementy.Items[i].Towar.Id;
element.JmZ = Globals.MainFrame.Elementy.Items[i].Jm.Text;
element.Cena = Globals.MainFrame.Elementy.Items[i].CenaNetto.Value.ToString();
var XLDodajPozycjeResult = cdn_api.cdn_api.XLDodajPozycje(documentId, element);
if (XLDodajPozycjeResult != 0)
{
blad = "Funkcja XLDodajPozycje zwróciła bład nr: " + XLDodajPozycjeResult;
throw new Exception();
}
}
var zamkniecieDokumentuInfo = new XLZamkniecieDokumentuInfo_odpowiedniawersjaapi
{
Wersja = odpowiedniawersjaapi,
Tryb = 1
};
var XLZamknijDokumentResult = cdn_api.cdn_api.XLZamknijDokument(documentId, zamkniecieDokumentuInfo);
if (XLZamknijDokumentResult != 0)
{
blad = "Funkcja XLZamknijDokument zwróciła bład nr: " + XLZamknijDokumentResult;
throw new Exception();
}
}
catch (Exception ex)
{
if (blad == "")
blad = "Nieokreślony błąd: " + ex.Message;
}
finally
{
var XLLogoutResult = cdn_api.cdn_api.XLLogout(_lSesjaID);
if (XLLogoutResult != 0)
{
blad = "Funkcja XLLogout zwróciła bład nr: " + XLLogoutResult;
}
// -----------------------------------------------------------------
// Tu przekaż informacje o statusie działania skryptu
// -----------------------------------------------------------------
if ( blad == "")
Globals.MainFrame.GenerujDokument_CSSCRIPT.Text = "Operacja zakończona sukcesem.";
else
Globals.MainFrame.GenerujDokument_CSSCRIPT.Text = blad;
}
gdzie należy zmienić następujące wartości:
odpowiedniawersjaapi – wersja API ERP XL zgodna z wersją pliku cdn_api[wersja].net.dll
nazwafirmy – nazwa Firmy Comarch ERP XL (nazwę firmy można sprawdzić w managerze baz Comarch ERP XL)
Login – login operatora Comarch ERP XL
hasło – hasło operatora Comarch ERP XL
serwerklucza – serwer klucza licencji
Po wprowadzeniu kodu należy nacisnąć przycisk[Kompiluj i zapisz], a następnie, gdy w dolnej części okna zostanie wyświetlony napis „Kompilacja skryptu zakończyła się sukcesem” nacisnąć przycisk „Zamknij”.
Widok okna „Skrypt C#” po skompilowaniu skryptu
DKontrolka typu Komunikat – należy w ramach pola:
„Nazwa (identyfikator)” wprowadzić nazwę „Msg1”
„Tytuł” wprowadzić tekst „Status wykonania API ERP XL”
„Kontrolki powiązane” kliknąć w link „Dodaj” i wybrać kontrolkę „Generuj dokument”
„Wzór na wartość” wybrać wartość „C# Script”, kliknąć „Ustaw”, a następnie wprowadzić następujący kod:
Po wprowadzeniu kodu należy nacisnąć przycisk[Kompiluj i zapisz], a następnie, gdy w dolnej części okna zostanie wyświetlony napis „Kompilacja skryptu zakończyła się sukcesem” nacisnąć przycisk „Zamknij”.
Widok okna „Skrypt C#” po skompilowaniu skryptu
6.zapisać typ obiegu za pomocą przycisku [Zapisz]
Zapisywanie typu obiegu
Generowanie dokumentu FZ do Comarch ERP XL – jak działa
Po zdefiniowaniu typu obiegu operator przechodzi na zakładkę [Dokumenty], klika na typ obiegu „Generowanie faktury zakupu” i naciska przycisk [Dodaj]. Następnie kolejno:
1.zapisuje nowy dokument, naciskając [Zapisz]
2.wybiera kontrahenta w ramach kontrolki „Kontrahent”
3. w ramach kontrolki „Elementy” dodaje towar w kolumnie „Towar”, wybiera opcję w kolumnach „Jm.” i „VAT” oraz wpisuje wartość w kolumnie „Cena netto”(jeśli poprawnie skonfigurowano obieg, wówczas kolumny „Cena brutto”, „Wartość Netto” i „Wartość Brutto” powinny zostać uzupełnione automatycznie)
Uwaga
Należy zwrócić uwagę, aby wartość wybrana w kolumnie „VAT” dla danego towaru była zgodna ze stawką przypisaną do tego towaru w Comarch ERP XL.
4. naciska przycisk „Generuj dokument”– wówczas następuje generowanie dokumentu – poniżej przycisku widoczne są poruszające się punkty
5.Jeśli generowanie dokumentu zakończyło się powodzeniem, wówczas na środku ekranu wyświetlany jest następujący komunikat:
Komunikat wyświetlany, jeśli generowanie dokumentu zakończyło się powodzeniem
Film
Aby zobaczyć przebieg generowania dokumentu do Comarch ERP XL, kliknij w poniższy film:
Wygenerowany dokument jest już widoczny w Comarch ERP XL:
Dokument wygenerowany z Comarch DMS do Comarch ERP XL
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?
Aby przyklad działał poprawnie, konieczne jest spełnienie następujących warunków:
1. Instalacja systemu Comarch ERP XL na serwerze IIS
2.Poprawna konfiguracja współpracy pomiędzy systemami Comarch ERP XL oraz Comarch DMS
3. Nadanie użytkownikowi IISUSER uprawnień do zapisu w katalogu bin\Scriptcs_bin oraz katalogu bin\.scriptcs_cache, które znajdują się w plikach aplikacji serwerowej Comarch DMS
4.Skopiowanie biblioteki cdn_api[wersja].net.dll do katalogu bin\Scriptcs_bin, biblioteka znajduje się w katalogu, w którym zainstalowano Comarch ERP XL, w przykładach wykorzystano cdn_api20232.net.dll
5. Należy sprawdzić, czy w katalogu bin aplikacji web Comarch DMS znajduje się plik cdn_sys.dll, jeżeli jest należy usunąć go z tej lokalizacji.
Skrypty C# zostały wykorzystane w kontrolkach typu Własna akcja i Komunikat. Skrypt dla kontrolki typu własna akcja utworzono na podstawie wzorca API XL
Wskazówka
Rekomendujemy wykorzystanie wzorca API XL jako elementu bazowego na potrzeby własnych rozwiązań.
Wzorzec API XL dostępny jest na indywidualnych stronach dla Partnerów w obszarze Comarch DMS\Przykłady\ERP XL: Wzorzec API XL
Konfiguracja typu obiegu
Przykład pokazuje, w jaki sposób administrator Comarch DMS może skonfigurować definicję obiegu, aby zatwierdzić dokument „Faktura zakupu” w systemie Comarch RP XL z poziomu Comarch DMS. W tym celu należy:
1.dodać nowy typ obiegu w ramach zakladki [Definicje obiegów dokumentów]
2.nadać nazwę typowi obiegu – np. Zatwierdzanie faktury zakupu i prefix – np. ZAT
3.nadać danemu administratorowi uprawnienie do inicjowania dokumentuna zakładce „Ustawienia obiegu” w sekcji „Uprawnienia do inicjowania dokumentu”.
Nadawanie uprawniń do inicjowania dokumentu dla administratora – przykład
4. W ramach zakładki „Schemat obiegu” utworzyć etap początkowy „Zatwierdzanie dokumentu” i etap końcowy „Koniec”oraz dodać uprawnienie dla danego administratora do etapów.
Dodawanie etapów i uprawnień
5. W ramach zakładki „Karta obiegu” dodać następujące kontrolki:
AKontrolka typu Dokument elektroniczny – „Faktura zakupu” (identyfikator: FakturaZakupu) – w polu „Typ” należy wybrać „Faktura zakupu”
Kontrolka „Faktura zakupu”
Bkontrolka typu Własna akcja – „Zatwierdź dokument” (identyfikator: ZatwierdzDokument) – w ramach definicji kontrolki należy kliknąć w link „Ustaw” w polu „C# Script”, następnie w otwartym oknie „Skrypt C#” w polu „Miejsce wykonania skryptu” wybrać „Proces (exe)” (jeśli istnieje opcja wyboru) i wprowadzić następujący kod:
using System.Threading;
using System.Runtime.InteropServices;
using cdn_api;
static ThreadLocal<bool> threadToClarionAttached = new ThreadLocal<bool>(() => false);
[DllImport("ClaRUN.dll")]
private static extern void AttachThreadToClarion(int flag);
public void AttachThreadToClarion()
{
try
{
if (!threadToClarionAttached.Value)
{
AttachThreadToClarion(1); // C8
threadToClarionAttached.Value = true;
}
}
catch (DllNotFoundException ex)
{
// -----------------------------------------------------------------
// Tu przekaż informacje o statusie działania skryptu
// -----------------------------------------------------------------
//Globals.MainFrame.ZatwierdzDokument_CSSCRIPT.Text = ex.Message;
Globals.MainFrame.ZatwierdzDokument_CSSCRIPT.Text=ex.Message;
}
}
AttachThreadToClarion();
int _lSesjaID = 0;
string blad = "";
try
{
int documentId = 0;
int wersjaApi = odpowiedniawersjaapi;
var loginInfo = new XLLoginInfo_odpowiedniawersjaapi()
{
Wersja = odpowiedniawersjaapi,
ProgramID = "Comarch DMS",
Winieta = -1,
TrybWsadowy = 1,
Baza = "nazwafirmy",
OpeIdent = "Login",
OpeHaslo = "hasło",
SerwerKlucza = @"serwerklucza"
};
var XLLoginResult = cdn_api.cdn_api.XLLogin(loginInfo, ref _lSesjaID);
if (XLLoginResult != 0)
{
blad = "Funkcja XLLogin zwróciła bład nr: " + XLLoginResult;
throw new Exception();
}
// -----------------------------------------------------------------
// Tu dodaj kod obsługi API
var otworzDocumentInfo = new XLOtwarcieNagInfo_odpowiedniawersjaapi
{
Wersja = odpowiedniawersjaapi,
GIDTyp = 1521,
GIDNumer = Globals.MainFrame.FakturaZakupu.Id ?? 0,
Tryb = 2
};
var XLOtwarcieInfoResult = cdn_api.cdn_api.XLOtworzDokument(_lSesjaID, ref documentId, otworzDocumentInfo);
if (XLOtwarcieInfoResult != 0)
{
blad = "Funkcja XLOtworzDokument zwróciła bład nr: " + XLOtwarcieInfoResult;
throw new Exception();
}
var zamkniecieDokumentuInfo = new XLZamkniecieDokumentuInfo_odpowiedniawersjaapi
{
Wersja = odpowiedniawersjaapi,
Tryb = 0
};
var XLZamknijDokumentResult = cdn_api.cdn_api.XLZamknijDokument(documentId, zamkniecieDokumentuInfo);
if (XLZamknijDokumentResult != 0)
{
blad = "Funkcja XLZamknijDokument zwróciła bład nr: " + XLZamknijDokumentResult;
throw new Exception();
}
// -----------------------------------------------------------------
}
catch (Exception ex)
{
if (blad == "")
blad = "Nieokreślony błąd: " + ex.Message;
}
finally
{
var XLLogoutResult = cdn_api.cdn_api.XLLogout(_lSesjaID);
if (XLLogoutResult != 0)
{
blad = "Funkcja XLLogout zwróciła bład nr: " + XLLogoutResult;
}
// -----------------------------------------------------------------
// Tu przekaż informacje o statusie działania skryptu
// -----------------------------------------------------------------
//Globals.MainFrame.ZatwierdzDokument_CSSCRIPT.Text = blad;
if (blad == "")
Globals.MainFrame.ZatwierdzDokument_CSSCRIPT.Text = "Operacja zakończona sukcesem";
else
Globals.MainFrame.ZatwierdzDokument_CSSCRIPT.Text = blad;
}
gdzie należy zmienić następujące wartości:
odpowiedniawersjaapi – wersja API ERP XL zgodna z wersją pliku cdn_api[wersja].net.dll
nazwafirmy – nazwa Firmy Comarch ERP XL (nazwę firmy można sprawdzić w managerze baz Comarch ERP XL)
Login – login operatora Comarch ERP XL
hasło – hasło operatora Comarch ERP XL
serwerklucza – serwer klucza licencji
Następnie należy kliknąć w przycisk [Referencje], znajdujący się w prawym górnym rogu okna „Skrypt C#”, w wpisać tam nazwę odpowiedniego pliku dll:
cdn_api[odpowiedni numer wersji].net.dll
Następnie należy nacisnąć przycisk [Zapisz].
Fragment okna „Skrypt C#” z otwartym oknem „Referencje”
Po wprowadzeniu kodu do edytora i nazwy dll w oknie „Referencje” należy nacisnąć przycisk[Kompiluj i zapisz], a następnie, gdy w dolnej części okna zostanie wyświetlony napis „Kompilacja skryptu zakończyła się sukcesem” nacisnąć przycisk „Zamknij”.
Uwaga
Jeśli w ramach okna „Referencje” po kliknięciu przycisku [Referencje] wprowadzono niewłaściwą nazwę pliku dll, wówczas po naciśnięciu przycisku [Kompiluj i zapisz] w dolnej części okna wyświetlana jest informacja „Assembly not found”.
Widok okna „Skrypt C#” po skompilowaniu skryptu
CKontrolka typu Komunikat – należy w ramach pola:
„Nazwa (identyfikator)” wprowadzić nazwę „Message1”
„Tytuł” wprowadzić tekst „Status działania API ERP XL”
„Kontrolki powiązane” kliknąć w link „Dodaj” i wybrać kontrolkę „Zatwierdź dokument”
„Wzór na wartość” wybrać wartość „C# Script”, kliknąć „Ustaw”, a następnie wprowadzić następujący kod:
Po wprowadzeniu kodu należy nacisnąć przycisk[Kompiluj i zapisz], a następnie, gdy w dolnej części okna zostanie wyświetlony napis „Kompilacja skryptu zakończyła się sukcesem” nacisnąć przycisk „Zamknij”.
Kontrolka „Message1”
Widok okna „Skrypt C#” po skompilowaniu skryptu
6.zapisać typ obiegu za pomocą przycisku [Zapisz].
Zapisywanie typu obiegu
Zatwierdzanie dokumentu FZ w Comarch ERP XL – jak działa
Po zdefiniowaniu typu obiegu operator przechodzi na zakładkę [Dokumenty], klika na typ obiegu „Zatwierdzanie faktury zakupu” i naciska przycisk [Dodaj]. Następnie kolejno:
1.zapisuje nowy dokument, naciskając [Zapisz]
2.dodaje dokument z Comarch ERP XL w ramach kontrolki „Faktura zakupu”
3. naciska przycisk „Zatwierdź dokument”– wówczas następuje zatwierdzanie dokumentu – poniżej przycisku widoczne są poruszające się punkty
4.Jeśli zatwierdzanie dokumentu zakończyło się powodzeniem, wówczas na środku ekranu wyświetlany jest następujący komunikat:
Komunikat wyświetlany, jeśli zatwierdzanie dokumentu zakończyło się powodzeniem
Widok szczegółów dokumentu z komunikatem o udanym zatwierdzeniu dokumentu
Widok listy dokumentów w Comarch ERP XL z dokumentem FZ-2/24 zatwierdzonym z poziomu Comarch DMS
Uwaga
Jeśli operator w kontrolce „Faktura zakupu” wybierze dokument, który już został zatwierdzony w Comarch ERP XL, i kliknie przycisk „Zatwierdź dokument”, wówczas zostaje wyświetlony następujący komunikat:
Komunikat wyświetlany przy próbie zatwierdzenia zatwierdzonego dokumentu
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?
Wskazanie identyfikatora connection stringa za pomocą kodu C#
Od wersji 2024.0.2 możliwe jest wskazanie identyfikatora connection stringa za pomocą kodu C#, aby określić connection string, na podstawie którego będzie następowało połączenie do bazy danych. Jeżeli:
<add key=”MultiCompany” value=”false” /> – wówczas connection stringi strConnectERPComp i strConnectERPConf1 są przechowywane w plikuWeb.config
<add key=”MultiCompany” value=”true” /> – wówczas connection stringi są przechowywane w pliku Web.config i w tabeli do.DF_ConfCMDictionary – w tym przypadku connection stringi do baz: konfiguracyjnej i firmowej są zapisywane pod jednym ID połączenia, zastosowano zatem nastepujące identyfikatory: