Skocz do zawartości

Scalanie kontrahentów w jednego

Polecane posty

Mam takie sytuacje, że niektóre transakcje nie pobierają się na czas. Np zamówienie z dzisiaj rano Sello pobierze dopiero wieczorem lub jutro a klient dzwoni i chce mieć wysłane dzisiaj to robimy tak, że tworzymy kontrahenta i transakcje w Sello ręcznie. Potem to zamówienie wpada i tworzy się kolejny kontrahent. To jedna taka sytuacja ale zdarza się również, że klient jest już w Sello a potem zamawia przez telefon/email i tworzymy kolejnego kontrahenta. Dało by się ich scalić?

Fajnie jak by była taka opcja bezpośrednio w Sello ale wiem jak jest dlatego chciałbym to zrobić modyfikacją w bazie. Proszę tylko o potwierdzenie od ST (@Bartosz Rosa) czy dobrze kombinuję.

Otóż, mam kilku kontrahentów których chce scalić. Najpierw sprawdzam identyfikator tego głównego kontrahenta, który zostanie. Wykonuje polecenie SQL, które w poniższych polach podmienia identyfikator tych scalanych kontrahentów na tego głównego.

em_CustomerId (z tabeli em__Email)
pc_CustomerId (z tabeli pc__Package)
tr_CustomerId (z tabeli tr__Transaction)

Po takim zabiegu usuwam tych "pustych" kontrahentów, których e-maile, paczki i transakcje zostały przypisane do głównego kontrahenta.

Będzie dobrze? Czy coś pominąłem?

Link to postu
7 godzin temu, Bartosz Rosa napisał:

Jeśli zaktualizujesz wszystkie tabele z kluczami obcymi wskazującymi na klienta to powinno być ok -  trzeba by zajrzeć do dokumentacji bazy, bo też każdej tabeli na pamięć nie znam :).

Tylko jeśli chodzi o bazę to chcę przypisać transakcję do klienta a nie na odwrót, więc w teorii zmieniam tylko tr_CustomerId na tego nowego i transakcja powinna przeskoczyć do nowego klienta, czyż nie? Reszta powiązań jest bezpośrednio z transakcją.

Link to postu
  • 1 miesiąc temu...

Udało mi się pomyślnie scalić kontrahentów. W zasadzie przypisałem z jednego kontrahenta do drugiego elementy takie jak transakcje, paczki, wiadomości. Powiązałem również kontrahenta z Subiekta, żeby się nie utworzył nowy przy tworzeniu dokumentów.

Zapytanie wygląda tak (może się komuś przyda):

Declare @IdKontrahenta_TenCoZostaje INT = ''
Declare @IdKontrahenta_TenKtoregoPrzenosimy INT = ''
update tr__Transaction set tr_CustomerId = @IdKontrahenta_TenCoZostaje where tr_CustomerId = @IdKontrahenta_TenKtoregoPrzenosimy -- transakcje
update pc__Package set pc_CustomerId = @IdKontrahenta_TenCoZostaje where pc_CustomerId = @IdKontrahenta_TenKtoregoPrzenosimy -- paczki
update em__Email set em_CustomerId = @IdKontrahenta_TenCoZostaje where em_CustomerId = @IdKontrahenta_TenKtoregoPrzenosimy -- wiadomości e-mail
update cs__Customer 
set cs_Linked = 1, -- powiazanie z Subiekt = TAK
cs_RegistrationId = (SELECT cs_RegistrationId from cs__Customer where cs_Id = @IdKontrahenta_TenKtoregoPrzenosimy), -- id programu sprzedaży (Subiekta)
cs_Symbol = (SELECT cs_Symbol from cs__Customer where cs_Id = @IdKontrahenta_TenKtoregoPrzenosimy), -- nick kontrahenta z bazy Subiekt
cs_ExternalCustomerId = (SELECT cs_ExternalCustomerId from cs__Customer where cs_Id = @IdKontrahenta_TenKtoregoPrzenosimy)   -- id kontrahenta z bazy Subiekt
where cs_Id = @IdKontrahenta_TenCoZostaje

 

Edytowane przez maniootek •
Link to postu

Jeszcze jedno pytanie:
Czy dało by się stworzyć kontrahenta w Sello w taki sposób, aby miał już powiązanie z klientem w Allegro? Czy wystarczy w bazie (w tabeli cs__Customer) uzupełnić pole cs_ExtServiceId (id kontrahenta w Allegro, który można odczytać z linka prowadzącego do karty użytkownika z ocenami) oraz dodatkowe takie jak cs_SvcProvId (powiązanie z serwisem Allegro, wartość 1) cs_Rank (punkty Allegro, wartość 0)

Dało by mi to możliwość stworzenia transakcji ręcznej w sytuacji kiedy nie mogła by się pobrać ta prawidłowa. Potem ta prawidłowa wpadła by już do tego samego klienta. Czy to zadziała? Czy na coś zwrócić uwagę?

Link to postu

Tak, wystarczy te właśnie pola (cs_Rank niekoniecznie, będzie niedługo usunięte) + nick.

Nowy mechanizm pobierania transakcji powinien działać o wiele bardziej niezawodnie, więc pewnie nie będzie takiej potrzeby. Nie polega on już na różnych dziwnych konstrukcjach pamiętających jeszcze rok 2006, gdzie problem z działaniem jednej funkcji w API wpływał na działanie całego mechanizmu pobierania i zapisywania transakcji. Teraz transakcje są (będą w 1.33) tworzone wprost według danych zwróconych z Allegro z jednej tylko funkcji.

Link to postu
27 minut temu, Bartosz Rosa napisał:

Tak, wystarczy te właśnie pola (cs_Rank niekoniecznie, będzie niedługo usunięte) + nick.

Nowy mechanizm pobierania transakcji powinien działać o wiele bardziej niezawodnie, więc pewnie nie będzie takiej potrzeby. Nie polega on już na różnych dziwnych konstrukcjach pamiętających jeszcze rok 2006, gdzie problem z działaniem jednej funkcji w API wpływał na działanie całego mechanizmu pobierania i zapisywania transakcji. Teraz transakcje są (będą w 1.33) tworzone wprost według danych zwróconych z Allegro z jednej tylko funkcji.

Czyli pobieranie transakcji też będzie jeszcze szybsze?

Link to postu

Stare pobieranie używa 4 różnych funkcji API, z których każda może mieć opóźnienia, może zawieść, zwrócić niepełne dane, co spowoduje opóźnienie lub brak transakcji. Nowy mechanizm korzysta tylko z jednej funkcji API, która zwraca komplet danych potrzebnych do realizacji zamówienia - czyli stworzenia transakcji w Sello. Jeśli chcesz dociągnąć dane jednej transakcji to wywoływany jest jeden request do API, odpowiedź przychodzi poniżej 200ms + czas wyszukania transakcji w bazie + czas przetwarzania danych + zapis transakcji do bazy - wszystko poniżej 1s.

Do tego nowy mechanizm synchronizacji, który z założenia jest dużo szybszy i zużywa dużo mniej pamięci również działają tutaj na plus.

Link to postu
2 godziny temu, Bartosz Rosa napisał:

Stare pobieranie używa 4 różnych funkcji API, z których każda może mieć opóźnienia, może zawieść, zwrócić niepełne dane, co spowoduje opóźnienie lub brak transakcji. Nowy mechanizm korzysta tylko z jednej funkcji API, która zwraca komplet danych potrzebnych do realizacji zamówienia - czyli stworzenia transakcji w Sello. Jeśli chcesz dociągnąć dane jednej transakcji to wywoływany jest jeden request do API, odpowiedź przychodzi poniżej 200ms + czas wyszukania transakcji w bazie + czas przetwarzania danych + zapis transakcji do bazy - wszystko poniżej 1s.

Do tego nowy mechanizm synchronizacji, który z założenia jest dużo szybszy i zużywa dużo mniej pamięci również działają tutaj na plus.

giphy.gif

  • Lubię to 1
Link to postu

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Użytkownik forum
Odpowiedz...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...