Autor Wątek: dodawanie/usuwanie składników kompletu - Sfera  (Przeczytany 4750 razy)

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

Offline nardagus

  • Nowy użytkownik
  • *
  • Wiadomości: 3
  • Reputacja +0/-0
  • Wersja programu: 1,48 SP1
dodawanie/usuwanie składników kompletu - Sfera
« dnia: 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ł

Offline Tworkin

  • Aktywny użytkownik
  • ***
  • Wiadomości: 200
  • Reputacja +43/-0
Odp: dodawanie/usuwanie składników kompletu - Sfera
« Odpowiedź #1 dnia: 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





Offline nardagus

  • Nowy użytkownik
  • *
  • Wiadomości: 3
  • Reputacja +0/-0
  • Wersja programu: 1,48 SP1
Odp: dodawanie/usuwanie składników kompletu - Sfera
« Odpowiedź #2 dnia: 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ł

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17067
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: dodawanie/usuwanie składników kompletu - Sfera
« Odpowiedź #3 dnia: 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.
Daniel, Białystok.

Forum Użytkownikow Subiekt GT

Odp: dodawanie/usuwanie składników kompletu - Sfera
« Odpowiedź #3 dnia: Sierpień 08, 2017, 13:13:42 »