ProstaPaczka2
ProstaPaczka2 => Subiekt GT => Wątek zaczęty przez: Tomek w Październik 13, 2021, 10:59:29 am
-
<ze zgłoszenia mailowego>
Mamy problem z ustawieniem wyrażenia regularnego, aby poprawnie mapować rodzaj dokumentu końcowego w Subiekt GT. Jak powinno wyglądać poprawne wyrażenie dla przykładowych uwag:
Nazwa klienta
Numer telefonu klienta
Id Transakcji
Numer zamówienia
#FS
Cokolwiek
-
W takim układzie proponowałbym użycie wyrażenia (?<=#).*?(?=\r|\n|\r\n|$), a następnie mapowanie nie po #FS, a samym FS, ale sytuacja wygląda w mojej ocenie na dość ryzykowną. Już wyjaśniam.
Aby ustalić na jaki dokument zrealizować ZK musimy przeprowadzić porównanie zawartości uwag z zadanym wzorcem. W Uwagach zazwyczaj znajduje się bardzo wiele elementów i porównywanie całych uwag z wzorcem byłoby niemożliwe, a na pewno wysoce utrudnione. ProstaPaczka wymaga, aby przekazać jej sam ciąg znaków informujących o tym jaki dokument końcowy nas interesuje. Do tego służą wyrażenia regularne (Regex).
Wyrażenie regularne są niczym innym jak opisem ciągu znaków i jest to dość trudne zagadnienie. Najłatwiej posłużyć się przykładem:
Jeśli w Uwagach dokumentu Subiekta GT mamy:
Nazwa klienta
Numer telefonu klienta
Id Transakcji
Numer zamówienia
#FS
Cokolwiek
to wyrażenie regularne:
(?<=#).*?(?=\r|\n|\r\n|$)
zwróci nam wartość:
FS
Tą wartość można mapować na dokument sprzedaży. Co takiego opisało to wyrażenie regularne? "Weź dowolnie długi ciąg znaków spomiędzy znaku # i końca linii".
A teraz dlaczego uważam, że nie jest to bezpieczne podejście? Jeśli w Państwa uwagach nigdy nie pojawi się inny #, to może to zadziałać, ale jak kiedyś klient będzie miał # w nazwie albo # pojawi się w numerze zamówienia, wyrażenie regularne zwróci błędną wartość.
Sugerowałbym przebudowanie swoich uwag w taki sposób, aby wyrażenie regularne zawsze zwróciło prawidłowy ciąg znaków. Moim zdaniem najlepszym wyjściem będzie następująca konstrukcja uwag:
Nazwa klienta
Numer telefonu klienta
Id Transakcji
Numer zamówienia
Dokument końcowy: FS
Cokolwiek
oraz następująca konstrukcja wyrażenia regularnego:
(?<=Dokument końcowy: ).*?(?=\r|\n|\r\n|$)
Takie wyrażenie również zwróci nam FS i właśnie FS (czy PAi, WZ itd.) należy mapować na dokument końcowy.
Podsumowując:
Jeśli mogą Państwo zmienić uwagi w taki sposób, aby zamienić " #FS" na "Dokument końcowy: FS", sugeruję zastosowanie wyrażenia (?<=Dokument końcowy: ).*?(?=\r|\n|\r\n|$), jeśli jednak nie ma takiej możliwości, proszę ustawić (?<=#).*?(?=\r|\n|\r\n|$). W obu przypadkach mapujemy "FS", a nie "#FS".
-
W przypadku, gdy w uwagach mamy oznaczenie FS, PA lub faktura, paragon i znajduje się ono na początku pola, stosujemy wyrażenie wybierające odpowiednią liczbę znaków od początku pola:
(?<=^).{7,7}
dla pararon / faktura (oba ciągi składają się z siedmiu znaków)
lub
(?<=^).{2,2}
dla PA / FS (oba ciągi składają się z dwóch znaków)