Czy wiesz, że w Comarch BPM można zweryfikować, czy dokument o danym numerze jest już wystawiony (tzw. weryfikacja numeru obcego)
Zastosowanie
Dzięki tej konfiguracji system Comarch BPM zyskuje zdolność do aktywnego wykrywania i ostrzegania przed duplikatami dokumentów w obiegu. Zastosowanie to zapewnia integralność i spójność danych, uniemożliwiając wprowadzenie dokumentu, który już został zarejestrowany w systemie pod tym samym numerem i jest przypisany do tego samego kontrahenta. W przypadku wykrycia duplikatu, system natychmiast wyświetla komunikat ostrzegawczy.
Zawartość przykładu
- Definicja Typu Obiegu (Workflow): Wzorcowa ścieżka obiegu dokumentu kosztowego z krokami akceptacji i konfiguracją kontrolki Komunikat, konfiguracją kontrolki Dane tabelaryczne i wygenerowaniem dokumentu do Comarch ERPXL
Zasada działania
- Mechanizm opiera się na kontrolce typu Komunikat, która pełni rolę Obserwatora dwóch kluczowych pól wejściowych: Numer dokumentu i Kontrahent.
- Kontrolka Komunikat jest wyzwalana przy każdej zmianie wartości w polach: Numer dokumentu oraz Kontrahent.
- Komunikat wykonuje zapytanie SQL, które przeszukuje bazę BPM, odwołując się do tabel dokumentów (do.RO_Documents) i wartości kontrolek (do.RO_ControlsValueexpand).
- Zapytanie szuka innego dokumentu (z pominięciem aktualnie edytowanego dokumentu: t2.dwd_ID <> isnull(@^DocumentId @,0)), w tym samym Typie Obiegu (t1.DFH_Name=’Weryfikacja numeru obcego BPM’), o tym samym Numerze dokumentu (t3.DWC_ValueString = @Numer_dokumentu@) i przypisanego do tego samego Kontrahenta (t4.DWC_ValueInt= @Kontrahent_Id@).
- Jeśli duplikat zostanie znaleziony (If exists (Select 1 from…)), kontrolka wyświetla komunikat: „Numer faktury dla wskazanego kontrahenta już istnieje”.
Konfiguracja przykładu
1.Na karcie obiegu zdefiniowano następujące kontrolki niezbędne do skonfigurowania mechanizmu sprawdzania, czy dokument o danym numerze już istnieje w obiegu Comarch BPM:
- „Numer dokumentu” (identyfikator: Numer_dokumentu) – typ Tekst
- „Kontrahent” (identyfikator: Kontrahent) – typ Kontrahent
- „Komunikat” (identyfikator: Komunikat) – typ Komunikat
2.Dodano obserwację kontrolek: Kontrolka Komunikat obserwuje pola „Numer dokumentu” i „Kontrahent”.
3.Dodano zapytanie SQL: Kontrolka Komunikat zawiera zapytanie SQL, które wykonuje weryfikację, sprawdzając, czy inny dokument w tym samym Typie Obiegu (DFH_Name=’Weryfikacja numeru obcego BPM’) ma ten sam numer i tego samego kontrahenta.
- Jeśli duplikat zostanie znaleziony, wyświetla komunikat: „Numer faktury dla wskazanego kontrahenta już istnieje”.
BEGIN TRY If exists (Select 1 from do.RO_ObjectsTypes as t1 join do.RO_Documents as t2 on t1.DFH_Id=t2.DFH_Id join do.RO_ControlsValueexpand as t3 on t3.DWD_ID=t2.DWD_ID join do.RO_ControlsValueExpand as t4 on t4.DWD_ID=t2.DWD_ID where t3.DWC_ValueString = @Numer_dokumentu@ /*Odwołanie do kontrolki Numer dokumentu*/ and t1.DFH_Name='Weryfikacja numeru obcego w BPM' /*Podstawić właściwą nazwę typu obiegu*/ and t3.DKO_Name='Numer_dokumentu' /*Identyfikator kontrolki Numer dokumentu*/ and t4.DKO_Name='Kontrahent' /*Identyfikator kontrolki Kontrahent*/ and t4.DWC_ValueInt= @Kontrahent_Id@ /*Odwołanie do kontrolki Kontrahent*/ and t2.dwd_ID <> isnull( @^DocumentId@,0) ) Begin /*Informacja, która jest wyświetlana na karcie obiegu, w przypadku duplikacji*/ SELECT 'Numer faktury dla wskazanego kontrahenta już istnieje', 1 End END TRY BEGIN CATCH DECLARE @ErrorMessage varchar(max) = 'W zapytaniu wystąpił błąd : ' + ERROR_MESSAGE(); THROW 50001, @ErrorMessage ,1; END CATCH
Komentarze dotyczące Logiki Zapytania:
- t3.DWC_ValueString = @Numer_dokumentu@: Odwołanie do kontrolki Numer dokumentu
- t1.DFH_Name=’Weryfikacja numeru obcego w BPM’: Podstawić właściwą nazwę typu obiegu
- t3.DKO_Name=’Numer_dokumentu’: Identyfikator kontrolki Numer dokumentu
- t4.DKO_Name=’Kontrahent’: Identyfikator kontrolki Kontrahent
- t4.DWC_ValueInt= @Kontrahent_Id@: Odwołanie do kontrolki Kontrahent
- SELECT ’Numer faktury dla wskazanego kontrahenta już istnieje’, 1: Informacja, która jest wyświetlana na karcie obiegu, w przypadku duplikacji.
- Wartość 1 (Blokada Zapisu): Jeżeli zapytanie zwraca wartość 1, komunikat pojawia się na karcie obiegu, a zapisanie nowoutworzonego dokumentu lub przekazanie już zapisanego dokumentu do kolejnego etapu zostanie zablokowane. System wymusi poprawienie danych przez użytkownika, uniemożliwiając wprowadzenie duplikatu do obiegu.
- Wartość 0 (Brak Blokady): Jeżeli zamiast jedynki zwracana jest wartość 0, komunikat pojawi się jedynie jako ostrzeżenie. Użytkownik będzie mógł zapisać i procesować dokument dalej, ponieważ system zasygnalizuje potencjalny duplikat, ale nie zablokuje pracy.
Weryfikacja Duplikacji Dokumentów
Na nowoutworzonym dokumencie, który nie został jeszcze zapisany, po wprowadzeniu numeru dokumentu do kontrolki „Numer dokumentu” i następnie wybraniu kontrahenta w kontrolce „Kontrahent”, mechanizm weryfikacji zostaje natychmiast wyzwolony. System wykonał zapytanie SQL, sprawdzając bazę BPM. Kluczowym elementem zapytania jest warunek t2.dwd_ID <> isnull( @^DocumentId@,0), który zapewnia, że weryfikacja ignoruje bieżący dokument (ponieważ dopiero jest tworzony i nie ma nadanego numeru w obiegu BPM, który by go identyfikował jako zapisany). W tym momencie system wykrył, że dokument o tym samym numerze dla wskazanego kontrahenta już istnieje w BPM i pojawia się komunikat ostrzegawczy: „Numer faktury dla wskazanego kontrahenta już istnieje”. Wartość 1 w instrukcji SELECT zapytania oznacza Blokadę zapisu. System uniemożliwia zapisanie dokumentu do kolejnego etapu, dopóki nie zostanie skorygowany numer dokumentu lub kontrahent.
Pobierz przykładową definicję obiegu