Autor Wątek: Problem z zapisaniem adresów dostawy dla kontrahentów [Subiekt i Sfera Subiekta]  (Przeczytany 314 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline wiktor

  • Nowy użytkownik
  • *
  • Wiadomości: 4
  • Reputacja +0/-0
    • Zobacz profil
  • Wersja programu: 1.56 SP2 HF2
Dzień dobry

Od wielu lat korzystamy z Subiekta GT (ponad 10 lat) od niedawna korzystamy z opcji ustawiania adresów dostawy.
Do automatycznego ustawiania tych adresów wykorzystujemy Sferę do Subiekta.
Ostatnio okazało się jednak, że jest problem z ustawianiem tych adresów dla części kontrahentów.
Próba zapisania przez Sferę kontrahenta z ustawionym adresem dostawy kończy się błędem "Zapisz Wystąpił wyjątek."
Okazuje się, że dla wybranych kontrahentów próba ręcznego ustawienia danych dostawy jest nie możliwa. Nie kończy się co prawda błędem, ale dane się nie zapisują w Subiekcie.
Przeprowadziłem analizę bazy danych z której wynikło, że problematycznych jest ok 3839 z ok 36000 kontrahentów.
Ci problematyczni charakteryzują się tym, że nie posiadają w bazie w tabeli: dbo.adr__Ewid rekordów z wartością adr_TypAdresu = 11.
Zauważyłem, że problematyczne rekordy są z okolic 2008-2009 roku (być może to przydatna wskazówka).

Kilkukrotna, ręczna próba dodania adresu dostawy (przez Subiekta, w ustawieniach adresów kontrahenta -> zarządzaj adresami dostawy) powoduje, że tworzy się w bazie pusty rekord z adr_TypAdresu = 11 w adr__Ewid, ale w adr_Historia nie ma nowego rekordu.
Dopiero ręczne ustawienie "domyślnego adresu dostawy", spowodowało że nowo dodawane adresy przez "zarządzanie adresami dostaw" zaczęły się pojawiać na liście w subiekcie.

Pobranie rekordów wykonałem poniższą SQLką.
SELECT *
FROM dbo.kh__Kontrahent k
LEFT JOIN dbo.adr__Ewid b ON k.kh_Id = b.adr_IdObiektu
WHERE b.adr_TypAdresu = 1 AND NOT EXISTS(
SELECT 1
FROM dbo.adr__Ewid c
WHERE c.adr_TypAdresu = 11 AND b.adr_IdObiektu = c.adr_IdObiektu)
ORDER BY kh_id DESC

Prawdopodobnie nie jest to do końca poprawne śledzenie problemu, ale być może dobry trop.
Moje pytanie brzmi jak mogę zweryfikować poprawność danych w bazie oraz jak uzupełnić brakujące dane tak, aby nie stracić spójności danych?
Ręczne przeklikiwanie ok 4000 kontrahentów, algorytmem ustaw domyślny adres, a następnie go wyłącz, raczej odpada :)

Pozdrawiam,
Wiktor

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4129
  • Reputacja +163/-11
    • Zobacz profil
Problem z zapisaniem adresów dostawy dla kontrahentów [Subiekt i Sfera Subiekta]
« Odpowiedź #1 dnia: Listopad 10, 2019, 18:21:10 »
Stawiam w ciemno że korzystaliscie wtedy z jakiegoś "ekonomicznego" integratora że sklepem internetowym który nie korzystał że Sfery, prawda?
Na dziś jedyne rozwiązanie to uzupełnić brakujące rekordy. Nie ma na to gotowego narzędzia, trzeba sobie zrobić albo (najlepiej) to zlecić komuś kto to umie zrobić.
Nie podam tu żadnego skryptu bo to już moim zdaniem nie jest zabawa dla każdego.
« Ostatnia zmiana: Listopad 10, 2019, 18:35:42 wysłana przez candy »
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 14473
  • Reputacja +772/-23
    • Zobacz profil
  • Wersja programu: GT/Navireo/nexo
Prawdopodobnie nie jest to do końca poprawne śledzenie problemu, ale być może dobry trop.

Trop jest dobry.

Moje pytanie brzmi jak mogę zweryfikować poprawność danych w bazie...

Tak jak zrobiłeś to i opisałeś wyżej - stosowanymi zapytaniami SQL, nie ma gotowych kontroli danych/testów.

...oraz jak uzupełnić brakujące dane tak, aby nie stracić spójności danych?

Piszemy o tym na forum od lat - należy sprawdzić co robi program i zrobić tak samo.

Ręczne przeklikiwanie ok 4000 kontrahentów, algorytmem ustaw domyślny adres, a następnie go wyłącz, raczej odpada :)

W takim razie zamów taką usługę u dostawcy programu/serwisanta.
Daniel, Białystok.

Offline wiktor

  • Nowy użytkownik
  • *
  • Wiadomości: 4
  • Reputacja +0/-0
    • Zobacz profil
  • Wersja programu: 1.56 SP2 HF2
Stawiam w ciemno że korzystaliscie wtedy z jakiegoś "ekonomicznego" integratora że sklepem internetowym który nie korzystał że Sfery, prawda?

Jedynym integratorem z jakiego korzystaliśmy jest ten który widnieje na stronie Inserta :) 
 https://www.insert.com.pl/dla_uzytkownikow/subiekt_gt/dodatki_rozszerzenia/rozwiazania_partnerskie.html?query=ZARA%20Tomasz%20%C5%BBara
kosztował 500 zł i potrzebował Sfery, więc chyba nie można go nazwać ekonomicznym :)

Nie używamy nic co może modyfikować bazę danych. Ewentualnie SELECT'ujemy z bazy. Do modyfikacji/dodawania danych służy Sfera. Ciężko powiedzieć dlaczego wtedy powstały te braki w tak starych rekordach.

Za bardzo nie chcę robić insertów na bazie nie wiedząc do końca co subiekt robi pod spodem (brak kodu źródłowego).

Udało mi się jednak w pewien sposób ogarnąć ten problem poprzez wykonanie oKontrahent.Zapisz() (w normalnych warunkach zbędne) przed adresyDostaw.Zapisz() [tutaj leci błąd];
Co prawda przy pierwszym razie i tak poleci błąd (jak dotąd), ale zapis na "wadliwym" kontrahencie spowoduje "wyprostowanie danych" w bazie i ponowne pobranie kontrahenta przez "Wczytaj" i zapisanie mu adresyDostaw.Zapisz(); skończy się sukcesem. :)



Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4129
  • Reputacja +163/-11
    • Zobacz profil
Problem z zapisaniem adresów dostawy dla kontrahentów [Subiekt i Sfera Subiekta]
« Odpowiedź #4 dnia: Listopad 11, 2019, 13:27:00 »
OK, nie będziemy się doktoryzować, szukając przyczyny błędu sprzed lat.
Ważne że chyba znalazłeś skuteczne i bezpieczne rozwiązanie.
Gratulacje.
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Forum Użytkownikow Subiekt GT

Problem z zapisaniem adresów dostawy dla kontrahentów [Subiekt i Sfera Subiekta]
« Odpowiedź #4 dnia: Listopad 11, 2019, 13:27:00 »