InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: nardagus w Sierpień 01, 2017, 22:57:48
-
Witam serdecznie,
Do tej pory sobie radziłem sam odwołując się do pomocy Sfery, ale utknąłem...
Próbuję stworzyć makro w excelu, które m.in. pozwoli mi
- wczytać komplet
- wczytać wybrany składnik
- usunąć go.
Z pierwszym i ostatnim elementem nie mam problemów. Metody Wczytaj() dla kompletu i Usuń() dla składnika radzą sobie świetnie.
Natomiast mam problem z wczytaniem wybranego składnika. Wg pomocy metoda Wczytaj dla twskladnik powinna przyjąć zarówno indeks składnika na liście składników, jak i ID towaru z bazy.
W przypadku posługiwania się indeksem skrypt działa poprawnie. Jednak próba użycia ID kończy się błędem.
To jest fragment mojego kodu:
Dim oTw As InsERT.Towar
Dim rSkl As InsERT.TwSkladnik
Dim rsgt As String 'symbol receptury
rsgt = "1-37-I-LP"
'Wczytujemy sobie komplet
Set oTw = sgtapp.Towary.Wczytaj(rsgt)
'Próbujemy wczytać składnik pod ID towaru
Set rSkl = oTw.Skladniki.Wczytaj(266) 'wywala błąd "Invalid procedure call or argument"
'Próbujey wczytać składnik po indeksie z listy składników (ilość składników jest 15)
Set rSkl = oTw.Skladniki.Wczytaj(15) 'tu działa poprawnie
Generalnie idea całego makro jest taka żeby można było wg pewnych zasad podmieniać składniki receptur.
Oczywiście mogę pętlą odpytać wszystkie składniki kompletu, ale niektóre komplety mają kilkadziesiąt składników. Z kolei do zmiany może być kilkadziesiąt, a nawet kilkaset kompletów na raz. Odpytywanie pętlą tylu kompletów może potrwać.
Bardzo proszę o pomoc, jak to ugryźć.
Pozdrawiam
Rafał
-
Metoda Wczytaj dla składników kompletu wymaga indeksu elementu w kolekcji a nie identyfikatora towaru z bazy danych.
cyt. z helpa:
Metoda Wczytaj
Wczytuje obiekt do kolekcji.
Składnia
wyrazenie.Wczytaj(id)
wyrazenie
Wymagane wyrażenie, które zwraca
Parametry
id
Variant. Wartość identyfikująca obiekt. Może nią być identyfikator obiektu z bazy danych lub indeks danego elementu w kolekcji.
Uwagi
Lista kolekcji dla których argument tej metody jest indeksem elementu w kolekcji:
- IWcPozycje
- KhCechy
- KhEmaile
- KhPracownicy
- KhRachunki
- KhTelefony
- PrCechy
- PrCzlonkowieRodziny
- PrRachunkiBankowe
- PrZatrudnienia
- SuPozycje
- SuPozycjeFunduszePromocji
- SuPozycjeNiezgodnosciFM
- SuPozycjeVat
- TwCechy
- TwKodyKreskowe
- TwMiary
- TwNarzuty
- TwSkladniki
- TwZakupy
- TwZdjecia
tak więc raczej trzeba iterować, jeśli chce się to robić Sferą i zgodnie z zaleceniami.
Chociaż pewnie trafiliby się odważni, którzy robiliby to bezpośrednio na bazie danych , bez Sfery:
DELETE FROM tw_tw_Komplet where kpl_IdKompletu = ID_KOMPLETU and kpl_IdSkladnika = ID_SKLADNIKA
Na pewno byłoby to o wiele szybsze , ale czy bezpieczne - w bieżącej wersji pewnie tak, ale kto wie czy po kolejnych upgradach Subiekta GT również.
Spróbowałbym jeszcze wyszukiwać tego indeksu składnika w kolekcji robiąc zapytanie, bo w tabeli tw_Komplet wewnątrz jednego kompletu
kolejność składników powinna być posortowana po kpl_Id rosnąco.
Więc takim zapytaniem pobierałbym indeks składnika z kolekcji:
select A.Lp
from
(SELECT convert(INT,ROW_NUMBER() over (order by kpl_Id)) As [Lp],kpl_Id,kpl_IdSkladnik from tw_Komplet WHERE kpl_IdKomplet = ID_KOMPLETU ) A
WHERE kpl_IdSkladnik = ID_SKLADNIKA
ale nie mam czasu , żeby to sprawdzać :),
Jeśli dla kilku prób z kilkudziesięcioskładnikowych kompletów zwróci prawidłowy indeks to można zaryzykować twierdzenie, że to zadziała.
pozdrawiam
Piotr
-
Witam,
Przepraszam, że dopiero dziś.
Dziękuję za info. Pomysł z zapytaniem, to cenna uwaga.
Też daleki jestem od grzebania w bazie danych nie znając jej na wylot, a w końcu po coś jest Sfera. :)
Na razie zrobiłem iterację składników. Nawet działa. ;)
Pozdrawiam
Rafał
-
Dziękuję za info. Pomysł z zapytaniem, to cenna uwaga.
Też daleki jestem od grzebania w bazie danych nie znając jej na wylot, a w końcu po coś jest Sfera. :)
Jak wielokrotnie pisaliśmy Sfera służy głównie do dodawania i edycji danych, do odczytu należy wykorzystywać SQL, więc bez dobrej znajomości działania programu i struktury bazy danych skorzystanie ze Sfery jest trudne lub niemożliwe.