Zatwierdzanie faktury zakupu w Comarch ERP XL z wykorzystaniem skryptów C#

image_pdfimage_print

[su_list icon=”icon: angle-right” icon_color=”#009de0″]
[su_spoiler title=”Spis treści artykułu” open=”yes” style=”fancy” icon=”caret”]

[/su_spoiler]
[/su_list]

 

Informacje podstawowe

Uwaga
Aby przyklad działał poprawnie, konieczne jest spełnienie następujących warunków:

[su_dropcap style=”default” size=”2″]1.[/su_dropcap] Instalacja systemu Comarch ERP XL na serwerze IIS

[su_dropcap style=”default” size=”2″]2.[/su_dropcap] Poprawna konfiguracja współpracy pomiędzy systemami Comarch ERP XL oraz Comarch DMS

[su_dropcap style=”default” size=”2″]3.[/su_dropcap] 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

[su_dropcap style=”default” size=”2″]4.[/su_dropcap] 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

[su_dropcap style=”default” size=”2″]5.[/su_dropcap] 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:

[su_dropcap style=”default” size=”2″]1.[/su_dropcap] dodać nowy typ obiegu w ramach zakladki  [Definicje obiegów dokumentów] 

[su_dropcap style=”default” size=”2″]2.[/su_dropcap] nadać nazwę typowi obiegu – np. Zatwierdzanie faktury zakupu i prefix – np. ZAT

[su_dropcap style=”default” size=”2″]3.[/su_dropcap] nadać danemu administratorowi uprawnienie do inicjowania dokumentu na zakładce „Ustawienia obiegu” w sekcji „Uprawnienia do inicjowania dokumentu”.

 

[su_lightbox type=”image” src=”https://pomoc.comarch.pl/dms/wp-content/uploads/2024/06/zat1-e1717671744330.png”]

Nadawanie uprawniń do inicjowania dokumentu dla administratora – przykład

[/su_lightbox]

 

[su_dropcap style=”default” size=”2″]4.[/su_dropcap] 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.

 

[su_lightbox type=”image” src=”https://pomoc.comarch.pl/dms/wp-content/uploads/2024/06/zat2.png”]

Dodawanie etapów i uprawnień

[/su_lightbox]

[su_dropcap style=”default” size=”2″]5.[/su_dropcap] W ramach zakładki „Karta obiegu” dodać następujące kontrolki:

 [su_dropcap style=”flat” size=”2″]A[/su_dropcap] Kontrolka typu Dokument elektroniczny„Faktura zakupu” (identyfikator: FakturaZakupu) – w polu „Typ” należy wybrać „Faktura zakupu”

 

Kontrolka „Faktura zakupu”

[su_dropcap style=”flat” size=”2″]B[/su_dropcap] kontrolka 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:

odpowiedniawersjaapiwersja API ERP XL zgodna z wersją pliku cdn_api[wersja].net.dll

nazwafirmynazwa Firmy Comarch ERP XL (nazwę firmy można sprawdzić w managerze baz Comarch ERP XL)

Login login operatora Comarch ERP XL

hasłohasło operatora Comarch ERP XL

serwerkluczaserwer 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].

 

[su_lightbox type=”image” src=”https://pomoc.comarch.pl/dms/wp-content/uploads/2024/06/zat5-e1718107175210.png”]

Fragment okna „Skrypt C#” z otwartym oknem „Referencje”

[/su_lightbox]

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”.

 

[su_lightbox type=”image” src=”https://pomoc.comarch.pl/dms/wp-content/uploads/2024/06/zat6.png”]

Widok okna „Skrypt C#” po skompilowaniu skryptu

[/su_lightbox]

 

[su_dropcap style=”flat” size=”2″]C[/su_dropcap] Kontrolka typu Komunikat – należy w ramach pola:[su_list icon=”icon: check” icon_color=”#009de0″]

    • „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:[/su_list]

 

 Globals.MainFrame.Message1.Message = Globals.MainFrame.ZatwierdzDokument_CSSCRIPT.Text

 

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”

 

[su_lightbox type=”image” src=”https://pomoc.comarch.pl/dms/wp-content/uploads/2024/06/zatw10.png”]

Widok okna „Skrypt C#” po skompilowaniu skryptu

[/su_lightbox]

 

[su_dropcap style=”default” size=”2″]6.[/su_dropcap] zapisać typ obiegu za pomocą przycisku zapisz32 [Zapisz].

 

[su_lightbox type=”image” src=”https://pomoc.comarch.pl/dms/wp-content/uploads/2024/06/zat9.png”]

Zapisywanie typu obiegu

[/su_lightbox]

 

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:

[su_dropcap style=”default” size=”2″]1.[/su_dropcap] zapisuje nowy dokument, naciskając zapisz32 [Zapisz]

[su_dropcap style=”default” size=”2″]2.[/su_dropcap] dodaje dokument z Comarch ERP XL w ramach kontrolki „Faktura zakupu”

[su_dropcap style=”default” size=”2″]3.[/su_dropcap] naciska przycisk „Zatwierdź dokument” – wówczas następuje zatwierdzanie dokumentu – poniżej przycisku widoczne są poruszające się punkty

[su_dropcap style=”default” size=”2″]4.[/su_dropcap] 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

 

[su_lightbox type=”image” src=”https://pomoc.comarch.pl/dms/wp-content/uploads/2024/06/zatwsukces.png”]

Widok szczegółów dokumentu z komunikatem o udanym zatwierdzeniu dokumentu

[/su_lightbox]

 

[su_lightbox type=”image” src=”https://pomoc.comarch.pl/dms/wp-content/uploads/2024/06/zatwierdzony-dok-w-xl.png”]

Widok listy dokumentów w Comarch ERP XL z dokumentem FZ-2/24 zatwierdzonym z poziomu Comarch DMS

[/su_lightbox]

 

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

 

[su_note note_color=”#DDFACB” text_color=”#240b0b”]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?

[su_button url=”https://pomoc.comarch.pl/dms/index.php/dokumentacja/szkolenia-comarch-dms/”]Sprawdź Szkolenia Comarch DMS![/su_button]

[/su_note]

 

[su_divider top=”yes” text=”Powrót do początku artykułu” style=”default” divider_color=”#1914D6″ link_color=”#1914D6″ size=”1″ margin=”16″]

Czy ten artykuł był pomocny?