Autor Wątek: Hurtowa zmiana cen przez SQL  (Przeczytany 4199 razy)

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

Offline PatrykM

  • Nowy użytkownik
  • *
  • Wiadomości: 8
  • Reputacja +0/-0
  • Wersja programu: GT 1.45
Hurtowa zmiana cen przez SQL
« dnia: Grudzień 14, 2016, 22:03:44 »
Witam serdecznie,

Zaimportowałem około 2500 produktów od nowego producenta do Subiekta, wg cen sugerowanych, które miał w arkuszu.
W firmie, w której pracuję stosujemy politykę cenową dziewiątek. Wiele zmian hurtowych robię przez zapytania SQL prosto do bazy jak np. pola własne. Problem jest przy cenach, ponieważ są one w osobnej tabeli i posiadają różne pola osobno - marża, netto, brutto.
Moje pytanie - jak zbudować odpowiednie zapytanie, aby nie popsuć niczego w bazie?

Pozdrawiam, Patryk.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9234
  • Reputacja +1306/-21
  • Wersja programu: Najnowsza
Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #1 dnia: Grudzień 14, 2016, 22:34:27 »
Używaj Sfery to raczej nie popsujesz niczego w bazie :)
Sławek, Zduńska Wola

Offline PatrykM

  • Nowy użytkownik
  • *
  • Wiadomości: 8
  • Reputacja +0/-0
  • Wersja programu: GT 1.45
Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #2 dnia: Grudzień 14, 2016, 23:02:46 »
Posiadam sferę, jednak licencja na dodatkowy program tylko po to, aby jednorazowo zmienić ceny wydaje się lekko naciągane.

Wiem, które kolumny muszę zmienić, jak wyszukać tylko te pozycje, które muszą zostać zaktualizowane oraz jak ustawić odpowiednią cenę brutto. Jednak nie mam pojęcia jak wyliczyć odpowiednie dane pod pozostałe kolumny.

UPDATE tw_Cena
SET
tc_cenanetto4= ?,
tc_cenabrutto4= ROUND(tc_cenabrutto4, -1)-1,
tc_zysk4= ?,
tc_marza4= ?,
tc_narzut4= ?
WHERE RIGHT(tc_cenabrutto4, 3) != '9,00'


Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4919
  • Reputacja +173/-11
Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #3 dnia: Grudzień 14, 2016, 23:11:08 »
A skąd my mamy wiedzieć jak chcesz wyliczyć ceny?
Poza tym to chyba prosta arytmetyka, prawda?

Kiedy już wyliczysz netto wg swoich założeń to, znając stawkę VAT, wyliczasz brutto (pamiętaj o zaokrągleniu do pełnych groszy).
Różnica to zysk, marżę wyliczasz odnosząc się do ceny kartotekowej.

Wpisz sobie dla jednego towaru i zobacz co masz w tabeli z cenami, a wszystko będzie jasne.

Dlaczego nie zrobisz tego przeceną ?
Za pierwszym razem z zaokrągleniem do pełnych PLN, za drugim obniżasz cenę o kwotę (0,01) i pijesz zasłużone piwo, bez grzebania w bazie.


Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17236
  • Reputacja +800/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #4 dnia: Grudzień 14, 2016, 23:38:06 »
Posiadam sferę, jednak licencja na dodatkowy program tylko po to, aby jednorazowo zmienić ceny wydaje się lekko naciągane.

Co rozumiesz przez "program" ? Można przecież napisać kawałek skryptu korzystającego ze Sfery, na przykład makro w VBA...
Daniel, Białystok.

Offline PatrykM

  • Nowy użytkownik
  • *
  • Wiadomości: 8
  • Reputacja +0/-0
  • Wersja programu: GT 1.45
Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #5 dnia: Grudzień 15, 2016, 00:31:12 »
Cóż, słabo znam Sferę od strony programistycznej. Do tej pory operowałem na bazie danych. Szczerze to z całym Subiektem mam styczność od miesiąca.

Dziękuję wszystkim, problem rozwiązałem z dokumentacją od Microsoftu. Kopia zapasowa zrobiona, ale na szczęście nic się nie posypało  :D Dla ciekawych udostępniam zapytania, którymi to zrobiłem. Dodam, że CenaBrutto6 jest nieużywana i posłużyła mi jako informacja, które wiersze potrzebują być zaktualizowane. Całość dałoby się zmieścić w jednym zapytaniu, ale testując fragment po fragmencie robiłem osobne, więc tak też ich później użyłem.
UPDATE Podmiot.dbo.tw_Cena
SET
tc_CenaBrutto6 = 1,
tc_CenaBrutto1 = CASE WHEN ROUND(tc_CenaBrutto1, -1) < tc_CenaBrutto1
THEN ROUND(tc_CenaBrutto1+10, -1)-1
                ELSE ROUND(tc_CenaBrutto1, -1)-1
END
WHERE RIGHT(tc_CenaBrutto1,3) != '9,00' AND tc_CenaBrutto1 != 0;

UPDATE Podmiot.dbo.tw_Cena
SET
tc_CenaNetto1= round(tc_CenaBrutto1 / 1.23,2)
WHERE tc_CenaBrutto6 = 1;

UPDATE Podmiot.dbo.tw_Cena
SET
tc_Zysk1 = tc_CenaNetto1 - tc_CenaNetto0
WHERE tc_CenaBrutto6 = 1;

UPDATE Podmiot.dbo.tw_Cena
SET
tc_Narzut1 = round(((tc_Zysk1 / tc_CenaNetto0)*100), 2),
tc_Marza1 = round(((tc_Zysk1 / tc_CenaNetto1)*100), 2),
tc_CenaNetto0 = 0
WHERE tc_CenaBrutto6 = '1' AND tc_CenaNetto0 != '0';

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4919
  • Reputacja +173/-11
Hurtowa zmiana cen przez SQL
« Odpowiedź #6 dnia: Grudzień 15, 2016, 00:52:50 »
Dlaczego w niektórych miejscach porównujesz liczby do tekstów?
Tzn dlaczego czasem '0' a nie po prostu 0?
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9234
  • Reputacja +1306/-21
  • Wersja programu: Najnowsza
Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #7 dnia: Grudzień 15, 2016, 09:53:40 »
Ja bardzo ostrożnie podchodziłbym do tego kodu (tak na prawdę to nie użyłbym go u klienta).

Trzeba pamiętać jaki jest typ danych, jaka precyzja i co się dzieje przy działaniach na liczbach.

Test, który zajął mi minutę wykazał na bazie, która ma 1725 towarów różnice w wyliczeniach dla 1701 towarów.
Oczywiście wiele będzie zależało od cen w kartotece i nie zawsze będzie tyle różnic.

Akurat błędne wyliczenie narzutu, czy też marży nie jest jakimś wielkim zagrożeniem, niemniej jest to zrobione błędnie.

BTW
Po co na końcu ustawiasz cenę kartotekową na 0?

« Ostatnia zmiana: Grudzień 15, 2016, 10:03:12 wysłana przez birds22 »
Sławek, Zduńska Wola

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4919
  • Reputacja +173/-11
Hurtowa zmiana cen przez SQL
« Odpowiedź #8 dnia: Grudzień 15, 2016, 10:41:12 »
Birds22, nazwijmy rzecz po imieniu -  ten kod jest błędny.
Nie zauważyłem tego wcześniej, ale zerowanie cent kartotekowej oznacza, że całe wyliczenia marży i narzutu można potłuc o kant d...
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline PatrykM

  • Nowy użytkownik
  • *
  • Wiadomości: 8
  • Reputacja +0/-0
  • Wersja programu: GT 1.45
Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #9 dnia: Grudzień 15, 2016, 23:40:21 »
Fakt, pomyliłem tc_CenaNetto0 z tc_CenaBrutto6 w ostatnim zapytaniu - jednak tylko w wklejonym na forum kodzie. W bazie wszystko przeszło pięknie, jak testowałem to na 10 produktach to ręcznie wklepane dane do subiekta podawały identyczne wyniki co zrobione przez powyższe zapytania do bazy.

birds22, jak duże są te różnice? Akurat nawet, gdy importowałem towary przez Sferę za pomocą Importu XLS od leo to były różnice -/+ 2 grosze, co musiałem wyrównać przez SQL później. Dla mnie najważniejsza jest cena brutto, zaś wszelkie inne wartości to informacje dla menadżera sprzedaży - jednak przy ponad 6000 produktach w bazie ułatwi mu to późniejsze edycje. Wahania o 2 grosze nie zrobią dużej krzywdy jeśli nie będą one odbiegały od wartości na fakturach, jednak ceny jakie dostaje klient końcowy powinny być zaokrąglone wg naszej polityki.

Offline Aldo

  • Ekspert
  • *****
  • Wiadomości: 10690
  • Reputacja +433/-13
  • Wersja programu: najnowsza
Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #10 dnia: Grudzień 16, 2016, 10:47:45 »
Jak dla mnie to wyważanie otwartych drzwi, a grzebanie w bazie mści się prędzej czy póżniej, ale zawsze w najmniej odpowiednim momencie.
A wiara we własne siły i umiejętności jest nieograniczona.


Forum Użytkownikow Subiekt GT

Odp: Hurtowa zmiana cen przez SQL
« Odpowiedź #10 dnia: Grudzień 16, 2016, 10:47:45 »