Skocz do zawartości

Problem z symbolem

Polecane posty

Mam w bazie danych Symbol 9419. Chciałbym dodać symbol 009419, ale Subiekt (a także Sfera go odrzuca). Dostaje błąd jak niżej. Manipulowałem parametrami w Parametry numerów NIP, PESEL i symboli, ale mimo tego nadal nie mogę tego dodać. Symbole w bazie danych są trzymane jako tekst, więc tak samo chciałbym je móc wprowadzać.

image.png.dfabf6de9bd5b3717a6a0d681e0961ca.png

Edit: Sprawdziłem, że po zapisaniu, nie kasujecie zer wiodących i działają prawidłowo, więc chyba walidator jest kopnięty, albo nie wiem, jak go ustawić.

Edytowane przez Radomił Ząbik
Link to postu
1 godzinę temu, Radomił Ząbik napisał:

Symbole w bazie danych są trzymane jako tekst, więc tak samo chciałbym je móc wprowadzać.

Nie tylko, symbole numeryczne "trzymane są" również w globalnym mechanizmie numeracji, którego liczniki zawsze zapisywane są bez wiodących zer - stąd problem z zapisaniem takiego symbolu.

1 godzinę temu, Radomił Ząbik napisał:

Manipulowałem parametrami w Parametry numerów NIP, PESEL i symboli

Te parametry dotyczą tylko klientów. Analogiczne dla asortymentów są w parametrach asortymentu.

 

1 godzinę temu, Radomił Ząbik napisał:

Sprawdziłem, że po zapisaniu, nie kasujecie zer wiodących i działają prawidłowo

Na pewno? mnie nie udało się zapisać. Może spacja wkradła się na koniec, co spowodowało, że symbol przestał być numeryczny?

Link to postu
19 minut temu, Jacek Izydorczyk napisał:

Na pewno? mnie nie udało się zapisać. Może spacja wkradła się na koniec, co spowodowało, że symbol przestał być numeryczny?

Dodaję sferycznie spory pakiet indeksów. W symbolach trafiają się 0 wiodące i bez problemu się dodają - zmienna jest string i jako string przekazuje. Dopiero pojawił się problem, jak miałem symbole jak w przykładzie i lekko zgłupiałem, bo pierw zapytaniem LINQ sprawdzam czy symbol istnieje, no i prawidłow mam informacje, że jest wolny, a podczas dodawania się wysypuje.

image.png.4c359d076a366b60b6a1f5f89782828a.png

21 minut temu, Jacek Izydorczyk napisał:

Nie tylko, symbole numeryczne "trzymane są" również w globalnym mechanizmie numeracji, którego liczniki zawsze zapisywane są bez wiodących zer - stąd problem z zapisaniem takiego symbolu.

Troszkę nie wiem, co to za globalny mechanizm numeracji, jeśli dalej rozmawiamy o Symbolach. Jeśli jest on numeryczny, to jak w nim przechowywane są symbole składające się z znaków? Szukam uzasadnienia do blokowania symboli bez zer wiodących.

Link to postu
1 minutę temu, Radomił Ząbik napisał:

Dodaję sferycznie spory pakiet indeksów. W symbolach trafiają się 0 wiodące i bez problemu się dodają

Tak, ale na przykładzie 004397, zapisanie takiego symbolu spowoduje, że numer 4397 zostanie już zajęty w mechanizmie numeracji i nie da się już dodać takiego symbolu bez względu na liczbę zer wiodących.

 

6 minut temu, Radomił Ząbik napisał:

Troszkę nie wiem, co to za globalny mechanizm numeracji

To ten sam mechanizm, który numeruje dokumenty.

 

7 minut temu, Radomił Ząbik napisał:

Jeśli jest on numeryczny, to jak w nim przechowywane są symbole składające się z znaków?

Symbole, które nie są numeryczne, zapisywane są z pominięciem mechanizmu numeracji.

 

8 minut temu, Radomił Ząbik napisał:

Szukam uzasadnienia do blokowania symboli bez zer wiodących.

To skutek uboczny mechanizmu numeracji, ale dzięki niemu mamy np. mechanizm uzupełniania luk w numeracji. 

 

Myślę, że jest jakiś sposób na to, aby sferycznie pominąć mechanizm numeracji podczas dodawania asortymentu, wszak importer danych z GT jakoś sobie z tym radzi i potrafi dodać symbol numeryczny poza mechanizmem numeracji. Może wystarczy IdLicznika ustawić na NULL przed zapisem, albo przed nadaniem symbolu?

Link to postu
Godzinę temu, Jacek Izydorczyk napisał:

Myślę, że jest jakiś sposób na to, aby sferycznie pominąć mechanizm numeracji podczas dodawania asortymentu, wszak importer danych z GT jakoś sobie z tym radzi i potrafi dodać symbol numeryczny poza mechanizmem numeracji. Może wystarczy IdLicznika ustawić na NULL przed zapisem, albo przed nadaniem symbolu?

Było by miło, może Insert podpowie, przeglądałem, kombinowałem, ale nie znalazłem samodzielnie tej "sztuczki", aczkolwiek wiem, że takie istnieją.

Na szybko, można oszukać mechanizm kontrolny, dodając na końcu/początku jakikolwiek znak, który nie jest cyfrą, np. podkreślnik, co wtedy traktuje go jako string.

Godzinę temu, Jacek Izydorczyk napisał:

To skutek uboczny mechanizmu numeracji, ale dzięki niemu mamy np. mechanizm uzupełniania luk w numeracji. 

Ok, rozumiem. I też rozumiem wykorzystanie tego mechanizmu od lat. Aczkolwiek, powinna być chyba możliwość parametrem wyłączenia tego dla programu - wtedy nie kontrolować numeru, traktować to jako string, raczej nie jest to wyzwaniem programistycznym, i nie będzie miało wpływ na obecne wdrożenia. Zobaczymy co Insert na to ;)

 

Póki co, klient musi się zdecydować na jakąś protezę, bo tu końcówka roku, trzeba ruszać, a ten piękny przypadek trafił się dopiero po imporcie kilku tysięcy indeksów - na przyszłość testować więcej niż 5000 :D

Link to postu
34 minuty temu, Radomił Ząbik napisał:

Na szybko, można oszukać mechanizm kontrolny, dodając na końcu/początku jakikolwiek znak, który nie jest cyfrą, np. podkreślnik, co wtedy traktuje go jako string.

Jasne, ale to w sumie nie oszustwo... taki symbol nie będzie już numeryczny i tym samym nie będzie miał przypisanego licznika. Jeśli masz 100% pewności, że symbole u źródła są "stringowo" unikalne, to te problematyczne możesz dodać z jakimś charakterystycznym zestawem znaków na końcu (albo początku), a później skryptem SQL usunąć te znaki.

Link to postu
9 godzin temu, Radomił Ząbik napisał:

Mam w bazie danych Symbol 9419. Chciałbym dodać symbol 009419, ale Subiekt (a także Sfera go odrzuca).

Potwierdzam wszystko to co napisał Pan Jacek. Numeracja symboli towarów jest oparta o taki sam mechanizm numeracji, który jest użyty np. w dokumentach. Mamy dzięki temu sporo dodatkowych możliwości definiowania wyglądu automatycznie nadawanego symbolu bo przy wyborze zaawansowanego nadawania symboli jest możliwość zdefiniowania własnej numeracji opartej na metawłasnościach asortymentu (także własnych). Skutkiem ubocznym jest to, że przy "prostym" nadawaniu symboli, które składają się z samych cyfr Subiekt wprowadzony ręcznie symbol próbuje "interpretować" jako "numer nadany przez numerację" przez co niezależnie od liczby wpisanych zer wiodących symbole jak w Pana przykładzie są traktowane jako numer 9419. Jest to wykonywane po to żeby później numeracja nie próbowała tego numeru 9419 nie próbowała nadać automatycznie dla innej kartoteki.

7 godzin temu, Radomił Ząbik napisał:

Troszkę nie wiem, co to za globalny mechanizm numeracji, jeśli dalej rozmawiamy o Symbolach. Jeśli jest on numeryczny, to jak w nim przechowywane są symbole składające się z znaków? Szukam uzasadnienia do blokowania symboli bez zer wiodących.

W skrócie - jest to mechanizm, który "zajęte numery" przechowuje w osobnych tabelach w bazie w postaci "liczb całkowitych", a jego konfigurację w programie przeprowadza się w "Konfiguracja -> Numeracja".

7 godzin temu, Jacek Izydorczyk napisał:

Myślę, że jest jakiś sposób na to, aby sferycznie pominąć mechanizm numeracji podczas dodawania asortymentu, wszak importer danych z GT jakoś sobie z tym radzi i potrafi dodać symbol numeryczny poza mechanizmem numeracji.

Tak, wewnętrznie mechanizmy Subiekta potrafią to "ominąć" ze względu właśnie na przeniesienie danych w kreatorze wdrożeniowym bądź import kartotek asortymentowych z EPP. Niestety furtka ta nie została "usferyczniona" gdyż nie sądziliśmy, że będzie ona potrzebna.

7 godzin temu, Jacek Izydorczyk napisał:

Może wystarczy IdLicznika ustawić na NULL przed zapisem, albo przed nadaniem symbolu?

To nie zadziała gdyż to się dzieje wewnątrz samego "settera" pola Symbol gdzie wpisana wartość jest odpowiednio parsowana i jeśli jej część numeryczna faktycznie składa się z samych cyfr i może być zinterpretowana jako "numer" to podejmowana jest próba jego "rezerwacji". Niezależnie od tego czy na ten moment asortyment był podpięty pod licznik numeracji czy nie.

6 godzin temu, Radomił Ząbik napisał:

Było by miło, może Insert podpowie, przeglądałem, kombinowałem, ale nie znalazłem samodzielnie tej "sztuczki"

Zapiszę ten temat do przemyślenia. Być może furtka zostanie usferyczniona, a być może w ogóle program przestanie traktować wprowadzanie symbolu z numerem takim samym jak numer innego towaru, ale różniącym się tylko liczbą zer wiodących jako błąd.

6 godzin temu, Radomił Ząbik napisał:

Na szybko, można oszukać mechanizm kontrolny, dodając na końcu/początku jakikolwiek znak, który nie jest cyfrą, np. podkreślnik, co wtedy traktuje go jako string.

To w połączeniu z:

5 godzin temu, Jacek Izydorczyk napisał:

a później skryptem SQL usunąć te znaki.

Powinno się udać. Unikalność symboli asortymentu jest sprawdzana na poziomie bazy danych (CONSTRAINT typu UNIQUE na kolumnie Symbol tabeli Asortymenty) więc nawet jeśli po próbie usunięcia znaków doprowadzimy do sytuacji nieunikalnych symboli to UPDATE się nie powiedzie.

  • Lubię to 2
Link to postu

Dziękuje bardzo za odpowiedzi i pomoc. Póki co, klient którego dotyczy problem, zgodził się na jego obejście poprzez zmianę podejścia do symbolu. Ale na przyszłość, fajnie jakby się pojawiła jakaś furtka, czy to jako parametr subiekta, czy sferyczna, na ominięcie tego problemu.

Rozumiem wasze podejście do liczników itp., ale moim zdaniem, powinna być możliwość całkowitej rezygnacji z tego, w parametrach subiekta, tak aby nie było konieczne stosowanie furtek, ale rozumiem też, że jest to niszowy problem, a jego zmodyfikowanie pewnie bardzo czasochłonne.

  • Lubię to 1
Link to postu
×
×
  • Dodaj nową pozycję...