Wprowadzenie
W niektórych obszarach księgowości finansowej funkcje wyszukiwania i przypisywania są wspierane poprzez zastosowanie wyrażeń regularnych, na przykład przy wyszukiwaniu i przypisywaniu partnerów oraz rozrachunków w automatycznym księgowaniu wyciągów. Poprzez podanie pojęć wyszukiwania, które stanowią wyrażenie regularne, analizowane są zawartości danych, a wartości są wyodrębniane z ciągu danych. Jako wynik zwracany jest ciąg znaków odpowiadający całemu wyrażeniu regularnemu. Prowadzi to do problemów zawsze wtedy, gdy wyszukiwany termin może zostać odnaleziony jedynie w kontekście otaczających go znaków.
KNR2202548710 RNR22545 DT20220815
Z tych danych należy odnaleźć numer faktury 22545.
Proste wyszukiwanie pięciocyfrowego pojęcia numerycznego może zostać zdefiniowane jako wyrażenie regularne w następujący sposób:
[0-9]{5}
To wyrażenie regularne zwraca cztery wyniki, a tym samym jednoznaczna identyfikacja numeru faktury nie jest możliwa:
KNR2202548710 RNR22545 DT20220815
Z tego powodu do definicji wyrażenia regularnego dodatkowo uwzględniany jest kontekst danych, które je otaczają. Oznacza to, że należy znaleźć wyłącznie pięciocyfrową wartość numeryczną, przed którą występuje ciąg znaków RNR. Wyrażenie regularne dla tej definicji może wyglądać na przykład następująco:
RNR[0-9]{5}
To wyrażenie regularne identyfikuje wówczas faktycznie tylko jeden ciąg znaków:
KNR2202548710 RNR22545 DT20220815
Przy tej definicji wyrażenia regularnego oprócz faktycznie poszukiwanego numeru faktury zwracane są jednak również dane kontekstowe, które muszą zostać uwzględnione w zapytaniu. W rezultacie wynik zamiast pożądanej pięciocyfrowej liczby 22545 zawiera ośmioznakowy ciąg RNR22545 i przypisanie otwartej pozycji nie może zostać wykonane.
Rozszerzenie dla wyrażeń regularnych
Dzięki standardowym funkcjom wyrażenia regularne oferują rozwiązanie dla opisanego przypadku. Poprzez rozszerzenia funkcji księgowości finansowej możliwe jest definiowanie wyrażeń regularnych w taki sposób, aby zwracany przez nie wynik mógł zostać optymalnie przetworzony.
Oznacza to, że ciąg wynikowy może zostać podzielony na pojedyncze elementy, które następnie mogą być oceniane oddzielnie. W zapisie wyrażeń regularnych takie elementy wyniku są oznaczane za pomocą nawiasów okrągłych. W odniesieniu do wcześniej opisanego przykładu wyrażenie regularne przyjmuje wówczas następującą postać:
(RNR)([0-9]{5})
Wyrażenie to zwraca następujące wyniki:
- Element1 – RNR oraz
- Element2 – 22545
Konieczny do uwzględnienia kontekst danych jest więc zwracany w osobnym elemencie.
Standardowo elementy wynikowe wyrażeń regularnych są numerowane, dzięki czemu mogą być wywoływane na podstawie numeru elementu. Odbywa się to poprzez podanie znaku dolara, po którym następuje numer elementu, na przykład:
- $1 zwraca RNR (wynik z elementu 1)
- $2 zwraca 22545 (wynik z elementu 2)
Alternatywnie istnieje również możliwość nadania nazw poszczególnym elementom. Składnia wyrażenia regularnego dla takiego pobierania danych wygląda następująco:
(?<Kontekst>RNR)(?<Numer>[0-9]{5})
Elementy w wyrażeniu regularnym używanym do przetwarzania danych mogą być następnie wywoływane na podstawie ich nazw:
- ${Kontekst} zwraca wynik z elementu ?<Kontekst>, czyli RNR
- ${Numer} zwraca wynik z elementu ?<Numer>, czyli 22545
Aby wykorzystywać takie definicje do przetwarzania całkowitego wyniku zapytania, oprócz pola służącego do właściwej definicji zapytania (pojęcia wyszukiwania) dostępne jest dodatkowe pole do przetwarzania wyniku zapytania.
Kolejną istotną funkcją w zastosowaniu wyrażeń regularnych są ustawienia parametrów wyrażeń regularnych w wyrażeniu zapytania. Parametry te sterują ogólnym zachowaniem wyrażenia regularnego. Można na przykład określić, czy ma zostać zwrócony tylko pierwszy znaleziony wynik, czy wszystkie znalezione wyniki. Może to mieć istotne znaczenie.
KNR2202548710 RNR22545 DT20220815 RNR22601 DT20220901 RNR22646 DT20220917
W tym celu definiowany jest następujący wyrażenie zapytania:
(?<Kontekst>RNR)(?<Numer>[0-9]{5})
oraz dodatkowo wyrażenie do przetwarzania ${Numer}.
Bez ustawienia dodatkowych parametrów wyrażenie regularne identyfikuje jednak tylko pierwszy wynik z ciągu danych:
KNR2202548710 RNR22545 DT20220815 RNR22601 DT20220901 RNR22646 DT20220917
Przetworzony wynik ma wówczas postać 22545.
Jeżeli jednak zostanie ustawiony parametr global dla wielu wyników, wówczas identyfikowane są wszystkie pasujące ciągi wynikowe:
KNR2202548710 RNR22545 DT20220815 RNR22601 DT20220901 RNR22646 DT20220917
Przetworzony wynik ma wówczas postać 22545;22601;22646;
Ustawienia
Do stosowania wyrażeń regularnych, na przykład w funkcjach wyszukiwania i przypisywania w automatycznym księgowaniu wyciągów, w poniższych aplikacjach dostępne są dodatkowe dane i informacje.
Słowa kluczowe
W aplikacji Słowa kluczowe dla pojęć wyszukiwania typu wzorzec wyszukiwania dostępne są dodatkowe pola służące do sterowania funkcjami wyszukiwania i przypisywania za pomocą wyrażeń regularnych.
Są to następujące pola:
- Przygotowanie
- Opcje realizacji
- Pokaż tylko wartości wyników
Szczegółowy opis aplikacji oraz jej pól znajduje się w artykule Słowa kluczowe.
Definicje księgowań
W nagłówku aplikacji Definicje księgowań w polu Słowo kluczowe do przygotowania tytułu płatności można wskazać słowo kluczowe służące do przetwarzania. Słowo to służy do tymczasowego przetwarzania tytułów przelewów w dialogu księgowania.
W edytorze pozycji aplikacji, na zakładkach Numery i teksty oraz Wyszukiwanie konta, dostępne są dodatkowe pola i opcje wyboru do wyszukiwania i przypisywania. Można tam wskazać słowa kluczowe oraz wybrać dane, do których słowa te mają zostać zastosowane.
Dodatkowo dostępna jest zakładka Przyporządkuj klucz zewnętrzny rozrachunku. Na tej zakładce można określić dane służące do ustalania zawartości pól klucza obcego w rozrachunku. Kluczowi obcemu można również przypisać słowo kluczowe w celu przetwarzania zawartości pola klucza obcego.
Szczegółowy opis aplikacji oraz jej pól znajduje się w artykule Definicje księgowań.
Przyporządkowania klucza zewnętrznego rozrachunku
W aplikacji Przyporządkowania klucza zewnętrznego rozrachunku dostępne są pola do analizy danych za pomocą wyrażeń regularnych. Za pomocą słowa kluczowego można zdefiniować wyrażenie regularne, na podstawie którego zawartość pola klucza obcego ma zostać przeanalizowana lub przetworzona.
Szczegółowy opis aplikacji oraz jej pól znajduje się w artykule Przyporządkowania klucza zewnętrznego rozrachunku.
Dialog księgowania
W dialogu księgowania, na zakładce Automatyczne księgowanie wyciągów, wyświetlane są tytuły przelewów. Sprawdzane jest przy tym, czy w używanej definicji księgowania wskazano słowo kluczowe do przetwarzania tytułów przelewów. Jeżeli tak, wyświetlenie danych tytułu przelewu następuje po zastosowaniu wyrażeń regularnych zdefiniowanych w słowie kluczowym do całego ciągu danych tytułu przelewu. Oznacza to, że dane w tytule przelewu są prezentowane w formie przetworzonej, tak aby były czytelne i możliwe było rozróżnienie poszczególnych komponentów.
Jeżeli natomiast nie zdefiniowano słowa kluczowego do przetwarzania danych tytułu przelewu, wyświetlane są dane oryginalne.
Lista: Rozrachunki
Do wyświetlania rozrachunków w zestawie kolumn dostępne są kolumny Klucz zewnętrzny 1 – 10. Jeżeli dla takiego klucza zdefiniowano wyrażenie regularne do przetwarzania danych, zawartość pola danego klucza obcego jest prezentowana w tych kolumnach w formie przetworzonej.
Przetworzone dane są również wyświetlane w widoku szczegółowym aplikacji Rozrachunki, na zakładce Przyporządkuj klucz zewnętrzny rozrachunku.
Zastosowanie wyrażeń regularnych
Podczas stosowania wyrażeń regularnych, na przykład do wyszukiwania i przypisywania partnerów oraz rozrachunków w automatycznym księgowaniu wyciągów, można określić do czterech informacji merytorycznych. Są to dane dotyczące pojęć wyszukiwania, przetwarzania, opcji wykonania oraz wartości wynikowych, które są zarządzane w aplikacji Słowa kluczowe.
Match-Pattern – wzorzec dopasowania jest reprezentowany przez pole pojęcie wyszukiwania. Zawiera on wzorzec wyszukiwania, czyli definicję wyrażenia regularnego służącego do odnajdywania określonych treści tekstowych w ciągu wyszukiwania.
Replace-Pattern – wzorzec zastępowania jest odwzorowany przez pole przetwarzanie. Określa on, jakimi wartościami mają zostać zastąpione wartości znalezione na podstawie wzorca dopasowania. W Replace-Pattern możliwe jest odwoływanie się do poszczególnych grup danych zdefiniowanych we wzorcu dopasowania oraz ich dowolne porządkowanie. Daje to możliwość, aby nie wszystkie elementy pojęcia wyszukiwania musiały być częścią wyniku. Dodatkowo do Replace-Pattern mogą zostać dodane stałe tekstowe, dzięki czemu poszczególne grupy wyników mogą być, w razie potrzeby, prezentowane z własnym opisem lub oddzielone separatorami.
Opcja realizacji – dla zastosowania wyrażeń regularnych do ciągu danych można określić różne ustawienia. Najważniejszym z nich jest opcja globalna. Jeżeli opcja globalna jest aktywna, zwracane są wszystkie wyniki uzyskane na podstawie wzorca dopasowania. Jeżeli opcja globalna nie jest aktywna, zwracany jest tylko pierwszy wynik znaleziony w ciągu wyszukiwania.
Wariant wyniku – wariant wyniku umożliwia wybór, jaki wynik ma zostać zwrócony. Rozróżnia się następujące warianty:
- Wariant A (pole Pokaż tylko wartości wyników jest aktywne) – zwracane są wyłącznie dane określone w Replace-Pattern. Pozostałe dane pierwotnie przeszukiwanego ciągu nie są uwzględniane w wyniku.
- Wariant B (pole Pokaż tylko wartości wyników jest nieaktywne) – zwracany jest kompletny pierwotny ciąg wyszukiwania, przy czym dane zidentyfikowane przez Match-Pattern są zastępowane danymi określonymi w Replace-Pattern.
Przykłady wyrażeń regularnych
Na podstawie różnych przykładów zostanie przedstawione zastosowanie wyrażeń regularnych.
REG-01.04.2023 FIL00033 KNR2202548710 RNR2254522 DT20220815 GNR-22601 DT20220901 RNR 22646 DT20220917 GNR/22646RNR 999988 DT20220917
Jako numer rozrachunku mają zostać zidentyfikowane wyłącznie numery:
- A – które są numeryczne o długości 5–8
- B – którym poprzedza oznaczenie RNR lub GNR
- C – pomiędzy oznaczeniem a numerem może wystąpić od 0 do maksymalnie trzech znaków nienumerycznych
- D – po numerze występuje co najmniej jeden znak nienumeryczny
Wyrażenie regularne do analizy ciągu danych ma wówczas następującą postać:
(?<KontoRozrachunku>RNR|GNR)([\D]{0,3})(?<NumerRozrachunku>[0-9]{5,8})([\D]{1,1})
Wynik analizy jest zilustrowany w ciągu danych.
REG-01.04.2023 FIL00033 KNR2202548710 RNR2254522.DT20220815 GNR–22601.DT20220901 RNR.22646.DT20220917 GNR/22646RNR 999988 DT20220917
Wynikiem ma być lista wszystkich znalezionych numerów rozrachunku rozdzielona średnikami. Numery rozrachunku mają zostać oczyszczone z ewentualnych separatorów występujących pomiędzy oznaczeniem a numerem.
Wyrażenie regularne do przetwarzania znalezionych numerów rozrachunku ma postać:
${KontoRozrachunku}${NumerRozrachunku};
i zwraca następujący ciąg wynikowy, jeżeli pole Pokaż tylko wartości wyników jest aktywne.
RNR2254522;GNR22601;RNR22646;GNR22646;
Jeżeli pole jest nieaktywne, jako wynik zwracany jest kompletny ciąg wyszukiwania.
Wszystkie numery rozrachunku są zwracane tylko wtedy, gdy dla opcji wykonania ustawiono parametr g (global). Jeżeli parametr nie zostanie ustawiony, zwracany jest tylko pierwszy znaleziony numer rozrachunku.
Komentarz do przykładu:
Numer RNR 999988 zawarty w ciągu danych nie został odnaleziony, ponieważ pomiędzy nim a poprzednim numerem rozrachunku GNR/22646 nie występuje znak nienumeryczny, zgodnie z wymaganiem D. Jeżeli w wyrażeniu regularnym zostanie usunięta definicja warunku D, wówczas zostanie znaleziony również numer rozrachunku RNR 999988.
Grupy analizy dla warunków C oraz D nie zostały oznaczone nazwą ?, ponieważ nie są wykorzystywane w przetwarzaniu. Dzięki temu całe wyrażenie analizy jest krótsze i bardziej przejrzyste.
Dla tego przykładu wprowadzanie danych w polach edytora pozycji aplikacji Słowa kluczowe wygląda następująco.
- A – które są numeryczne o długości 5
- B – którym poprzedza oznaczenie FIL
Jako data regulacji mają zostać zidentyfikowane pojęcia,
- C – które przedstawiają grupę cyfr w formacie 99.99.9999
- D – którym poprzedza oznaczenie REG
- E – pomiędzy oznaczeniem a numerem nie może wystąpić więcej niż trzy znaki nienumeryczne (od 0 do maksymalnie 3)
Ponadto obowiązuje:
- F – numer filii zawsze występuje po dacie regulacji. Pomiędzy datą regulacji a numerem filii może wystąpić dowolna liczba znaków.
Wyrażenie regularne do analizy ciągu danych w tym przykładzie ma wówczas następującą postać:
(?<DatKont>REG)([\D]{0,3})(?<RegDat>(?<RegTT>[0-9]{1,2})(\.)(?<RegMM>[0-9]{1,2})(\.)(?<RegJJ>[0-9]{1,4}))(.*)(?<FiKont>FIL)(?<FiNum>[0-9]{5,5})
Wynik analizy jest zilustrowany w poniższym ciągu danych.
REG–01.04.2023.FIL00033 KNR2202548710 RNR2254522 DT20220815 GNR-22601 DT20220901 RNR 22646 DT20220917 GNR/22646RNR 999988 DT20220917
Jako wynik do przeniesienia do klucza obcego numer filii oraz data regulacji mają zostać połączone z tytułu przelewu. Data regulacji ma zostać dołączona do pięciocyfrowego numeru filii w formacie RRRMMDD.
Wyrażenie regularne do przetwarzania ma tutaj postać:
${FiNum}${RegJJ}${RegMM}${RegTT}
i zwraca następujący ciąg wynikowy, jeżeli pole Pokaż tylko wartości wyników jest aktywne.
0003320230401
Jeżeli pole jest nieaktywne, jako wynik zwracany jest kompletny ciąg wyszukiwania.
000092942226862915011821290000
Poszukiwana jest kombinacja danych znajdująca się na początku tytułu przelewu i składająca się z następujących elementów:
- A – numer rachunku bankowego, 10 znaków alfanumerycznych
- B – numer partnera, 6 znaków numerycznych
- C – rodzaj zlecenia faktury, 3 znaki alfanumeryczne
- D – numer faktury, 7 znaków alfanumerycznych
Wyrażenie regularne do analizy ciągu danych w tym przykładzie ma następującą postać:
(?<BkNr>[0-9a-zzA-Z]{10})(?<PtNr>[0-9]{6})(?<AuAr>[0-9a-zA-Z]{3})(?<RgNr>[0-9a-zA-Z]{7})
Wyrażenie regularne do przetwarzania ma postać:
Klient: ?{PtNr} Faktura: ?{AuAr}–?{RgNr} KontoBankowe: ?{BkNr}|
Jeżeli pole Pokaż tylko wartości wyników jest aktywne, zwracany jest następujący wynik:
Klient: 268629 Faktura: 150–1182129 Bank: 0000929422|
Ciąg danych 000092942226862915011821290 udostępniony w polu klucza obcego ma zostać przeanalizowany i przetworzony.
Wyrażenie regularne zdefiniowane dla klucza obcego (wyrażenie analizy) ma w tym przypadku następującą postać:
^(?<BkNr>[0-9a-zzA-Z]{10})(?<PtNr>[0-9]{6})(?<AuAr>[0-9a-zA-Z]{3})(?<RgNr>[0-9a-zA-Z]{7})(?<rest>.*$)
Wynik analizy jest zilustrowany w poniższym ciągu danych:
000092942226862915011821290
Poszczególne elementy są przy tym zapisywane lub zwracane w następujących zmiennych tekstowych:
?<BkNr> = 0000929422
?<PtNr> = 268629
?<AuAr> = 150
?<RgNr> = 1182129
?<Rest> = 0
Do przetwarzania możliwe jest łączenie stałych tekstów ze zmiennymi tekstowymi zdefiniowanymi w powyższym wyrażeniu analizy. Może to wyglądać na przykład następująco:
Klient: ${PtNr} Faktura: ${AuAr} – ${RgNr} KontoBankowe: ${BkNr}
W odniesieniu do powyższego przykładu jako wynik przetwarzania otrzymane zostaną następujące dane:
Klient: 268629 Faktura: 150 – 1182129 Bank: 0000929422



