Czy wiesz, że można znacznie uprościć proces przekazywania dokumentu do kolejnego etapu obiegu?

Zamiast ręcznie wybierać uprawnienia z rozbudowanej listy „Uprawnienia do następnego etapu”, można wskazać pracownika bezpośrednio w kontrolce na formularzu dokumentu — z zawężonej i precyzyjnie dobranej listy dostępnych osób.

W momencie kliknięcia przycisku „Przejdź do następnego etapu”,

osoba wskazana w kontrolce typu Lista na karcie obiegu automatycznie zostanie przypisana do uprawnień na kolejny etap. Dzięki temu dokument trafi do właściwego pracownika, który został wybrany, bez konieczności dodatkowej, ręcznej konfiguracji uprawnień.

Warunkiem koniecznym działania tego mechanizmu jest przypisanie w definicji typu obiegu do etapu, do którego automatycznie przypisujemy wskazanego w kontrolce typu Lista pracownika, użytkownika technicznego (można utworzyć pracownika „Techniczny” bez uprawnień administratora).

W przypadku, gdy nie zostanie wybrana osoba w kontrolce typu Lista, w momencie przekazania dokumentu do następnego etapu pojawi się komunikat:

„Nie wybrano dodatkowych uprawnień w kontrolce Pracownik. Wybierz pracownika z Listy, aby można było przekazać dokument do następnego etapu.”

 

Komunikat wyświetlany, gdy nie zostanie wybrana osoba w kontrolce typu Lista, w momencie przekazania dokumentu do następnego etapu

 

 

Konfiguracja przykładu:

1. W ramach typu obiegu należy dodać następujące kontrolki:

  • kontrolkę typu Lista „Dział” (identyfikator: Dzial)wypełnianą danymi z bazy danych na podstawie następującego zapytania SQL:
 select dcd_id, DCD_Name1 from do.DF_ConfOSDictionary where dcd_type=1 and DCD_Archival=0

 

Konfiguracja kontrolki typu Lista „Dział”

  • kontrolkę typu Lista „Pracownik” (identyfikator: Pracownik) –  w ramach pola „Kontrolki powiązane” należy wybrać kontrolkę „Dział (Dzial)”; kontrolka „Pracownik” natomiast powinna zostać wypełniona danymi z bazy danych na podstawie następującego zapytania SQL:
 select t2.dcd_id, t2.dcd_Name1 from do.DF_ConfOSTree as t1
inner join do.DF_ConfOSDictionary as t2 on t1.DCO_DCDId=t2.DCD_ID
inner join do.DF_ConfOSTree as t3 on t1.DCO_DCOId=t3.DCO_ID 
left join do.DF_ConfOSDictionary as t4 on t4.DCD_ID=t3.DCO_DCDId
where t1.DCO_Archival=0 and t2.dcd_type=2 and t4.DCD_Name1=@Dzial_Text@

 

Definicja kontrolki typu Lista „Pracownik”

 

2. Następnie należy przypisać użytkownika Technicznego na definicji typu obiegu do etapu, do którego ma zostać przekazany dokument – w przykładzie jest to etap „Akceptacja”

Należy zapisać wprowadzone zmiany.

Przypisanie użytkownika Technicznego

 

3. Na bazie BPM należy zmodyfikować procedurę On.DocumentPropagation.

 

Uwaga
Należy pamiętać,  aby  w ramach przykładu procedury On.DocumentPropagation zmienić Id typu obiegu dla DFH_Id na id typu obiegu, którego ma dotyczyć.

Jeżeli:

  • zmieniono identyfikator kontrolki „Pracownik”, wówczas należy wpisać aktualny identyfikator dla DKO_Name
  • zmieniono nazwę etapu na inną niż „Akceptacja”, wówczas należy wprowadzić nazwę etapu dla DDS_Name

 

Przykład modyfikacji procedury On.DocumentPropagation:

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

------------------------Początek-----------------------------

BEGIN

DECLARE @ErrorMessage NVARCHAR(MAX);

BEGIN TRY

/* Warunek przekazania dokumentu w określonym typie obiegu i etapie */

IF EXISTS (

SELECT 1

FROM do.RO_StageActive

WHERE DFH_Id = 6 /* Id typu obiegu Dynamiczne uprawnienia Lista */

AND DDS_Name = 'Akceptacja' /* Nazwa etapu, do którego przekazujemy dokument */

AND DWD_ID = @DocumentId

)

BEGIN

/* Sprawdzenie, czy nie zostały wybrane uprawnienia w kontrolce Pracownik */

IF EXISTS (

SELECT 1

FROM do.DF_ConfCFCardDokFlow c

JOIN do.df_workcf w ON c.DKO_ID = w.DWC_DKOId

WHERE c.DKO_Name = 'Pracownik' -- identyfikator kontrolki lista

AND w.DWC_DWDId = @DocumentId

AND w.DWC_ValueListPos IS NULL

)

BEGIN

/* Rzucenie komunikatu, jeśli nie wybrano uprawnień w kontrolce typu Lista o nazwie Pracownik */

SET @ErrorMessage = 'UWAGA!!! ' + CHAR(13) + CHAR(10) +

'Nie wybrano dodatkowych uprawnień w kontrolce Pracownik.' + CHAR(13) + CHAR(10) +

'Wybierz pracownika z Listy, aby można było przekazać dokument do następnego etapu.';

THROW 50001, @ErrorMessage, 1;

END

/* Dodanie dynamicznych uprawnień */

INSERT INTO do.DF_WorkDSAccess ([WSA_DWSId], [WSA_DCDId], [WSA_DCPId], [WSA_TypeAccess], [WSA_Archival])

SELECT DISTINCT

s.DWS_ID,

w.DWC_ValueListPos,

NULL,

0,

0

FROM do.RO_ControlsValue c

JOIN do.DF_WorkCF w ON w.DWC_DKOId = c.DKO_ID

JOIN do.RO_StageActive s ON s.DWD_ID = w.DWC_DWDId

WHERE c.DKO_Name = 'Pracownik' -- identyfikator kontrolki lista

AND w.DWC_DWDId = @DocumentId;

END

END TRY

BEGIN CATCH

/* Obsługa błędów */

DECLARE @CatchErrorMessage NVARCHAR(MAX) = ERROR_MESSAGE();

DECLARE @ErrorSeverity INT = ERROR_SEVERITY();

DECLARE @ErrorState INT = ERROR_STATE();

RAISERROR (@CatchErrorMessage, @ErrorSeverity, @ErrorState);

END CATCH

END

 

4.  Nastepnie należy utworzyć nowy dokument i wybrać pracownika w kontrolce typu Lista o nazwie Pracownik (identyfikator: Pracownik)

 

Uwaga
Pomimo przypisania użytkownika Technicznego dokumentu nie można przekazać (pojawia się stosowny komunikat), dopóki nie zostanie wybrany pracownik w kontrolce typu Lista o nazwie Pracownik.

 

Wyświetlanie komunikatu przy próbie rzekazania dokumentu do kolejnego etapu, gdy nie wybrano pracownika w kontrolce typu Lista

 

5. Po wybraniu pracownika dokument zostaje przekazany do tej osoby.

 

Widok dokumentu po przekazaniu do nastepnego etapu do wybranego pracownika

 

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

Sprawdź Szkolenia Comarch BPM!

 

 




Czy wiesz, że za pomocą procedury SQL do.OnAfterDocumentCreated możliwe jest automatyczne podpięcie wszystkich załączników z e-maila do dokumentu BPM, w tym logiczne rozdzielenie plików zOCR-owanych od pozostałych, które nie podlegają przetwarzaniu?

Zastosowanie

Dzięki tej konfiguracji złożonej z dwóch punktów ACD (Współpraca ze skrzynką pocztową (pobieranie załączników i Współpraca z Comarch OCR) oraz procedury SQL (do.OnAfterDocumentCreated), możliwa jest precyzyjna kontrola nad załącznikami pobranymi z maila, które trafiają do tworzonego dokumentu BPM. Mechanizm ten ma zastosowanie w procesach, gdzie dokumenty są pobierane ze skrzynki pocztowej i w mailu oprócz dokumentu PDF, który ma zostać zOCR-owany, są również inne załączniki, które powinny zostać podpięte podczas tworzenia dokumentu BPM, ale nie są przeznaczone do przetwarzania przez OCR.

Celem jest pobranie wszystkich załączników dołączonych do maila i podpięcie ich na dokument BPM z zachowaniem logicznej separacji oraz zapewnieniem, że plik główny jest podpięty pod kontrolkę o nazwie Załącznik, a pozostałe pliki z maila są podpięte pod osobną kontrolkę o nazwie Pozostałe załączniki.

 

Zawartość przykładu

  • Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu kosztowego z kontrolką typu Załącznik o nazwie Załącznik, do której będzie pobierany plik po przetworzeniu przez OCR oraz drugą kontrolką tego samego typu o nazwie Pozostałe załączniki, do której będą pobierane pozostałe pliki z maila.
  • Punkt konfiguracyjny ACD: Wzorcowa konfiguracja, która jest odpowiedzialna za pobranie ID dokumentu OCR, Załącznika oraz wszystkich kluczowych danych nagłówkowych (NIP, Kontrahent, Dane kontrahenta, Data zakupu, Data wystawienia, Termin płatności, Forma płatności, Waluta) oraz inicjację dokumentu obiegowego.
  • Procedura SQL (do.OnAfterDocumentCreated): Procedura odpowiedzialna za logiczną segregację, eliminację wtórnych wystąpień oraz wstawienie załączników do odpowiednich kontrolek na karcie obiegu.

 

Uwaga

  • W definicji typu obiegu w kontrolkach są zapytania SQL, które odwołują się do bazy danych Comarch ERP XL
  • W punkcie ACD dla zapytania pobierającego Kontrahenta należy wskazać właściwą nazwę bazy ERPXL
  • Punkt ACD Współpraca ze skrzynką pocztową (pobieranie załączników) należy skonfigurować we własnym zakresie.

 

Kliknij tutaj, aby pobrać przykład

 

Zasada działania

Mechanizm opiera się na sekwencyjnym działaniu dwóch punktów ACD i procedury SQL:

  • Etap I (ACD Współpraca ze skrzynką pocztową): Na skrzynkę zostaje wysłany mail, który zawiera główny plik pdf oraz pozostałe pliki. Po pobraniu wiadomości użytkownik pozostawia tylko plik pdf, który ma zostać przetworzony przez OCR, pozostałe pliki, które nie będą przetwarzane przez OCR usuwa.
  • Etap II (ACD Współpraca z Comarch OCR): Plik główny PDF po pobraniu z maila zostaje zaczytany przez Comarch OCR. Następnie wygenerowany do Comarch BPM.
  • Etap III (Procedura SQL — OnAfterDocumentCreated): Podczas generowania dokumentu w BPM z punktu ACD Współpraca z Comarch OCR jest wywoływana procedura do.OnAfterDocumentCreated, która podpina przetworzony przez OCR plik PDF pod kontrolkę Załącznik, a do kontrolki Pozostałe załączniki są podpinane pozostałe pliki z warunkiem wykluczającym plik główny.

 

Konfiguracja przykładu

1. Utworzono kontrolkę Załącznik: Na karcie obiegu dodano kontrolkę typu Załącznik o nazwie Załącznik (identyfikatorze Zalacznik), do której będzie podpinany przetworzony przez OCR dokument.

 

Kontrolka typu Załącznika o nazwie Załącznik

 

2. Utworzono kontrolkę Załącznik: Na karcie obiegu dodano kontrolkę typu Załącznik o nazwie Pozostałe załączniki (identyfikatorze PozostaleZalaczniki), do której będą podpinane pozostałe pliki z maila.

 

Kontrolka typu Załącznika o nazwie Pozostałe załączniki

 

3. Utworzono kontrolkę ID_dokumentuOCR: Na karcie obiegu dodano kontrolkę typu Liczba całkowita o nazwie (identyfikatorze) ID_dokumentuOCR, do której będzie zapisywane ID OCR-owanego dokumentu.

4. Punkt ACD: Utworzono punkt: ACD – Współpraca z Comarch OCR do odczytywania danych z dokumentów pdf.

 

Punkt ACD Współpraca z Comarch OCR – zakładka Ogólne

 

5. Utworzono kontrolki: W punkcie ACD na zakładce Kontrolki dodano kontrolki:

 

  • Załącznik (identyfikator Zalacznik), do której będzie podpinany przetworzony przez OCR dokument i przypisano zapytanie:

 

select OCD_SourceContent, OCD_FileName from DO.OC_Documents left join do.DF_WorkAPProcess on OCD_ID = APW_DocumentID1 where OCD_ID=@ID1@

 

  • ID_dokumentuOCR, do której będzie pobierane ID dokumentu OCR i przypisano zapytanie:

 

select @Id1@

 

Punkt ACD Współpraca z Comarch OCR – zakładka Kontrolki

 

6. Punkt ACD: Utworzono punkt Współpraca ze skrzynką pocztową (pobieranie załączników).

 

Punkt ACD – Współpraca ze skrzynką pocztową (pobieranie załączników)

 

7. Procedura SQL (do.OnAfterDocumentCreated): Na bazie BPM w Management Studio w procedurze do.OnAfterDocumentCreated został uruchomiony skrypt, który do kontrolki Załącznik podpina zOCR-owany dokument, a pod kontrolkę Pozostałe załączniki podpina pozostałe pliki z maila.

 

----------------------Pobieranie załączników z maila----------------------




DECLARE @DWCID_Glowne INT

DECLARE @DWCID_Inne INT

DECLARE @DDSID INT

DECLARE @OCDID INT

DECLARE @MLM_Id INT

DECLARE @MLA_Id_Glownego INT

DECLARE @OCD_FileName_String VARCHAR(MAX)

/* 1. POBIERANIE ZMIENNYCH */

/* Pobranie ID Kontrolki 'Załączniki' (kontrolka główna) */

SELECT @DWCID_Glowne = DWC_ID FROM do.RO_ControlsValue WHERE DWD_ID = @DocumentId AND DKO_Name = 'Zalacznik'

/* Pobranie ID Kontrolki 'Pozostałe załączniki' (kontrolka pomocnicza) */

SELECT @DWCID_Inne = DWC_ID FROM do.RO_ControlsValue WHERE DWD_ID = @DocumentId AND DKO_Name = 'PozostaleZalaczniki'

/*Pobranie ID dokumentu przetworzonego przez OCR(klucz do identyfikacji pliku głównego)*/

SELECT @OCDID = Value FROM do.RO_ControlsValue WHERE DWD_ID = @DocumentId AND DKO_Name = 'ID_dokumentuOCR'

/* Pobranie ID etapu (Stage ID), na którym znajduje się obecnie dokument */

SELECT @DDSID = DDS_ID FROM do.RO_StageActive WHERE DWD_ID = @DocumentId

/* 2. POBRANIE ID GŁÓWNEGO ZAŁĄCZNIKA (@MLA_Id_Glownego) - Poprawne Parsowanie */

SELECT @OCD_FileName_String = OCD_FileName

FROM do.OC_Documents

WHERE OCD_id = @OCDID

/* Użycie parsowania (Trzeci segment to MLA_Id, pierwszy to MLM_Id) */

DECLARE @Pos1 INT = CHARINDEX('_', @OCD_FileName_String);

DECLARE @Pos2 INT = CHARINDEX('_', @OCD_FileName_String, @Pos1 + 1);

DECLARE @Pos3 INT = CHARINDEX('_', @OCD_FileName_String, @Pos2 + 1);

IF @Pos3 > 0

BEGIN

SET @MLM_Id = CAST(SUBSTRING(@OCD_FileName_String, 0, @Pos1) AS INT);

SET @MLA_Id_Glownego = CAST(

SUBSTRING(

@OCD_FileName_String,

@Pos2 + 1,

@Pos3 - @Pos2 - 1

)

AS INT);

END

ELSE

BEGIN

SET @MLM_Id = 0;

SET @MLA_Id_Glownego = 0;

END

/* 3. CZYSZCZENIE: USUŃ PLIKI WCZEŚNIEJ WSTAWIONE DO KONTROLKI GŁÓWNEJ

To jest konieczne, aby usunąć plik o "długiej nazwie" wstawiony przez system OCR */

DELETE FROM do.DF_WorkCFBin

WHERE DWB_DWCID = @DWCID_Glowne;

/* 4. CZĘŚĆ 1: Wstawianie GŁÓWNEGO ZAŁĄCZNIKA (Załączniki)

Cel: Wstaw oryginalny plik (krótsza nazwa) */

INSERT INTO do.DF_WorkCFBin (DWB_ID, [DWB_DWCID], [DWB_BIN], [DWB_Name], [DWB_Size], [DWB_Archival], [DWB_CreateDate], [DWB_CompanyId], [DWB_ModificationData], [DWB_DDSID], [DWB_DCDID], [DWB_AngleOfRotation])

SELECT

    NEWID(),

    @DWCID_Glowne, /* Podpinanie pod główną kontrolkę */

    MLA_Content,

    MLA_FileName, /* Wstawia KRÓTSZĄ, ORYGINALNĄ NAZWĘ */

    DATALENGTH(MLA_Content),

    0,

    GETDATE(),

    1,

    GETDATE(),

    @DDSID,

    1,

    0

FROM do.ML_Mail_Attachments

WHERE

MLA_MailId = @MLM_Id

/* WARUNEK UNIKALNY: TYLKO ten załącznik, który ma ID głównego dokumentu */

AND MLA_Id = @MLA_Id_Glownego

/* 5. CZĘŚĆ 2: Wstawianie POZOSTAŁYCH ZAŁĄCZNIKÓW (PozostałeZałączniki)

-- Cel: Wstaw WSZYSTKO inne, co NIE jest plikiem GŁÓWNYM. */

INSERT INTO do.DF_WorkCFBin (DWB_ID, [DWB_DWCID], [DWB_BIN], [DWB_Name], [DWB_Size], [DWB_Archival], [DWB_CreateDate], [DWB_CompanyId], [DWB_ModificationData], [DWB_DDSID], [DWB_DCDID], [DWB_AngleOfRotation])

SELECT

    NEWID(),

    @DWCID_Inne, -- Podpinanie pod dodatkową kontrolkę

    MLA_Content,

    MLA_FileName,

    DATALENGTH(MLA_Content),

    0,

    GETDATE(),

    1,

    GETDATE(),

    @DDSID,

    1,

    0

FROM do.ML_Mail_Attachments

WHERE

    MLA_MailId = @MLM_Id

   

    /* WARUNEK WYKLUCZAJĄCY GŁÓWNY DOKUMENT: Wyklucz plik, który ma to samo MLA_Id */

    AND MLA_Id <> @MLA_Id_Glownego

    /* WYKLUCZENIA (Anty-Smime) */

    AND MLA_FileName NOT LIKE '%.smime' 

    AND MLA_FileName NOT LIKE '%smime%' 

    AND MLA_FileName NOT LIKE '%.p7s'

    AND MLA_FileName NOT LIKE 'ATT%DOC'

-------------------------------KONIEC---------------------

 

Podpięcie dokumentów pod odpowiednie kontrolki typu Załącznik po utworzeniu dokumentu z punktu ACD Comarch OCR

1. Do punktu ACD Współpraca ze skrzynką pocztową (pobieranie załączników) pobrano wiadomość e-mail z załącznikami. Tylko jeden plik ma zostać przetworzony przez OCR, a pozostałe powinny zostać usunięte z listy ręcznie przez użytkownika.

 

 

Punkt ACD – pobranie wiadomości e-mail z załącznikami

 

2. Po usunięciu pozostałych plików, które nie podlegają przetworzeniu przez OCR, został zaznaczony mail i dokument z listy zapisano do folderu, który jest wskazany z powiązanym punktem ACD Współpraca z Comarch OCR (Faktura kosztowa + załaczniki).

 

Zapis dokumentu pdf do przetworzenia

 

3. Dokument został pobrany przez punkt OCR (Faktura kosztowa + załaczniki). Po zaznaczeniu dokumentu i kliknięciu na przycisk Generuj dokument został utworzony w Comarch BPM w ramach typu obiegu wskazanego w tym punkcie.

 

Generowanie dokumentu

 

Utworzony dokument na liście dokumentów

 

4. Dokument główny został podpięty pod kontrolkę Załącznik, a pozostałe pliki z maila pod kontrolkę Pozostałe załączniki.

 

Podpięcie dokumentu przetworzonego przez OCR wraz z pozostałymi załącznikami.

 

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

Sprawdź Szkolenia Comarch BPM!