Skocz do zawartości

Aktualizacja stanu magazynowego - SQL

Polecane posty

Witam.

 

Czy koś może wyciągał z bazy aktualny stan magazynowy na podstawie zmian w asortymencie i dokumentach??

 

Potrzebuję co 10 min sprawdzać czy zmienił się stan magazynowy asortymentu. Ale tylko towary, którym zmienił się stan magazynowy.

 

1. zrobiłem listę towarów i stany. Niestety w połączeniu tabeli Asortyment z tabelą encji mam tylko informację który towar został edytowany.

2. połączyłem tabele encje + asortymenty + dokumenty + pozycja dokumentu - tu jest już pół sukcesu bo mogę sprawdzać w odstępach czasowych towary, które zmieniły stan bo są już na jakimś dokumencie, który oczywiście można jeszcze odfiltrować. Problem zaczyna się, gdy np. Jakiś dokument zostanie usunięty. Wówczas nie mam informacji o zmianie ilości towaru. Czy jest na to jakieś rozwiązanie 

 

Czy może jest jeszcze gdzieś zapisywana informacja o zmianach.??

 

Będę wdzięczny za informację.

Link to postu

Witam ponownie trochę walczyłem z triggerami - bo się uczyłem 

 

testowałem trigger przy aktualizacji ceny zakupu wszystko działa jak należy jeśli aktualizuję tabelę w tej samej bazie. Problem zaczyna się gdy chcę zaktualizować bazę MySQL na hostingu.

 

Stworzyłem "LinkedServer" na podstawie ODBC. 

select * FROM OPENQUERY(Image, 'SELECT products_model, purchase_price, FROM products') MYSQL

Polecenie działa prawidłowo.

 

Połączyłem trigger z LinkedServer.

with subiekt as (
SELECT 
      cenabrutto.Symbol as products_model,
      cenabrutto.CenaZakupuBrutto as purchase_price
FROM [Nexo_IMAGE].[dbo].[ImageArteCenaZakupu] cenabrutto
)

UPDATE MYSQL
	SET MYSQL.purchase_price = subiekt.purchase_price

	FROM OPENQUERY(ImageArte, 'SELECT products_model, purchase_price FROM products') MYSQL
		inner join subiekt on subiekt.products_model=MySQL.products_model
	WHERE 
		MySQL.products_model = subiekt.products_model

Uruchamiając całość ręcznie - działa prawidłowo. Dane na hostingu MySQL zaktualizowały się.

 

Niestety jeśli dodam to jako trigger to subiekt się wsypuje przy zmianie ceny ewidencyjnej.

 

image.png.60d5d47f25ae647635892e5240d8bfab.png

 

Czytałem różne artykuły - była informacja, że trzeba w usługach składowych (dcomcnfg) wejść usługi składowe -> komputery ->koordynator transakcji rozproszonych -> Lokalna usługa DTC -> prawym przyciskiem i w zabezpieczeniach zezwolić na dostęp. niezależnie od ustawień błąd jest ten sam.

 

Nie wiem czy to ma znaczenie, ale próbując zrobić

select * from [IMAGEARTE].[bojak_ImageArte]..[cache]

 

otrzymuję informację 

 

contains no columns that can be selected or the current user does not have permissions on that object.

 

na Hostingu mam dostęp do baz danych, ale nie mogę wykonać wielu poleceń, ani nawet dodać użytkownika.Z poziomu PHPMySQL mam dość spore graniczenia. Czy ograniczenia hostingowe mogą powodować te problemy ??

 

W obecnej sytuacji wszystkie zmiany towarowe będę musiał wysyłać do tabel pośrednich a następnie poleceniem sqlcmd w pliku bat będę uruchamiał polecenie SQL z harmonogramu w określonym odstępnie czasu do aktualizacji MySQL-a. A po każdej aktualizacji czyścić tabelę.

 

Tak myślę, żeby uchronić się przez sytuacją w której jedno polecenie będzie usuwało dane z tabeli po aktualizacji hostingu a trigger w tym czasie zaktualizuje zmiany to będę musiał użycz dodatkowo znacznika czasu albo dodawać jakąś wartość do pozycji, które zostały zaktualizowane.

 

Do aktualizacji tabeli pośredniej użyłem MERGE tak więc INSERT i UPDATE załatwione w jednym kodzie. Jeszcze pozostanie do dodania opcja warunkowa, jeśli stan przez update jest taki sam to nie rób nic oraz jeśli stan się różni a jest jakiś znacznik to zrób insert.

 

wydaje mi się, że takie rozwiązanie zabezpieczy sytuację, w której w trakcie aktualizacji MySQL a następnie w trakcie usuwania zaktualizowanych pozycji wykona się trigger bo zmieni się stan. 

 

 

Będę wdzięczy za jakieś sugestie - ciągle się uczę ;)

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