InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: nardagus w Sierpień 01, 2017, 22:57:48

Tytuł: dodawanie/usuwanie składników kompletu - Sfera
Wiadomość wysłana 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ł
Tytuł: Odp: dodawanie/usuwanie składników kompletu - Sfera
Wiadomość wysłana przez: Tworkin w Sierpień 02, 2017, 15:32:35
Metoda Wczytaj dla składników kompletu wymaga indeksu elementu w kolekcji a nie identyfikatora towaru z bazy danych.

cyt. z helpa:
Cytuj
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




Tytuł: Odp: dodawanie/usuwanie składników kompletu - Sfera
Wiadomość wysłana przez: nardagus w Sierpień 08, 2017, 13:00:18
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ł
Tytuł: Odp: dodawanie/usuwanie składników kompletu - Sfera
Wiadomość wysłana przez: dkozlowski w Sierpień 08, 2017, 13:13:42
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.