Autor Wątek: Problem ze Sferą i Pythonem  (Przeczytany 2755 razy)

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

Offline slakol

  • Nowy użytkownik
  • *
  • Wiadomości: 1
  • Reputacja +0/-0
  • Wersja programu: 1.66
Problem ze Sferą i Pythonem
« dnia: Październik 05, 2021, 14:42:20 »
Wykonuję taki kawałek kodu :

import os
import sys
import win32com.client
# pip install pywin32


oGT = win32com.client.Dispatch("InsERT.GT")
oGT.Autentykacja= 0
oGT.Serwer='MCKS2\SQL2017'
oGT.Baza='A1A1'
oGT.Uzytkownik="sa"
oGT.UzytkownikHaslo= "MarcoliSql1!"
oGT.Operator="Szef"
oGT.OperatorHaslo =''
oGT.Produkt=1
oSubGT = oGT.Uruchom(0, 4 )

print(type(oGT))
print(type(oSubGT))

oDok=oSubGT.Dokumenty.Wczytaj('FS 10/2021')



i dostaję :

Traceback (most recent call last):
  File "E:/python/subiekt001/main.py", line 23, in <module>
    oDok=oSubGT.Dokumenty.Wczytaj('FS 10/2021')
  File "E:\python\subiekt001\venv\lib\site-packages\win32com\client\__init__.py", line 484, in __getattr__
    raise AttributeError("'%s' object has no attribute '%s'" % (repr(self), attr))
AttributeError: '<win32com.gen_py.InsERT dla aplikacji - Biblioteka obiektowa (ver. 1.0).Aplikacja instance at 0x2810625717576>' object has no attribute 'Dokumenty'


Widzę, że oSubGT jest typu Aplikacja. Jak otrzymać obiekt typu Subiekt ?
Bo taki chyba potrzebuję.



Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17056
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Problem ze Sferą i Pythonem
« Odpowiedź #1 dnia: Październik 05, 2021, 15:58:01 »
Widzę, że oSubGT jest typu Aplikacja. Jak otrzymać obiekt typu Subiekt ?

To musisz spytać kogoś kto zna język Python lub poczekać na jego odpowiedź. Ja co najwyżej mogę przekazać fragment kodu realizującego edycję pola własnego towaru, który kiedyś otrzymałem dla jednego z klientów:

import win32com.client
def sfera_uruchom():
    oGT = win32com.client.DispatchEx("InsERT.GT")
    # oGT = win32com.client.gencache.EnsureDispatch("InsERT.GT")
    oGT.Produkt = 1
    oGT.Autentykacja= 0
    oGT.Serwer=r"serwer\insertgt"
    oGT.Uzytkownik="sa"
    oGT.UzytkownikHaslo=""
    oGT.Operator="Szef"
    oGT.OperatorHaslo=""
    oGT.Baza = "SubTest"
    oSub = oGT.Uruchom(0,4);
    return oSub

Sfera = sfera_uruchom()
oTw = Sfera.TowaryManager.WczytajTowar(1)
oTw.Symbol = "symbol1"
oTw.Nazwa =  "nazwa1"
#odczyt
print(oTw.PoleWlasne('Zapach'))
#zapis
oTw.SetPoleWlasne('Zapach','Leśny')
oTw.Wyswietl()
oTw.Zamknij()

Polecam też "zniżyć się" do korzystania z pomocy do Sfery, gdzie w temacie FAQ czytamy:

Cytuj
Managery
Pytanie:
W jaki sposób działają i do czego służą obiekty mające w swej nazwie słowo Manager?
Odpowiedź:
Obiecałem napisać parę słów o ważnej nowości w modelu obiektowym Sfery. Od wersji 1.14 zetkniecie się Państwo z licznymi obiektami o ogólnej nazwie xxxManager, gdzie xxx to prefiks oznaczający jaki obiekt dany Manager wspomaga. Na przykład DkrManager ma za zadanie wspierać kolekcję Dekrety, a PKManager ma wspierać kolekcję Konta. Zadaniem Managerów jest wspieranie kolekcji w zakresie:
- dodawania nowych obiektów
- wczytywania obiektów
- sprawdzania istnienia obiektów w bazie danych
- otwierania kolekcji
- udostępniania obiektu listy
Doświadczony twórca aplikacji Sferycznych powinien zapytać: zaraz, ale przecież to wszystko już było, przecież dotychczasowe kolekcje miały już metody pozwalające na zrealizowanie wymienionych funkcjonalności?
Owszem, ale do tej pory kolekcje były nienowoczesne :-) Ich podstawową wadą było to, że raz utworzonej kolekcji obiektów nie można było łatwo odświeżyć. Po powołaniu jej do życia, w celu odświeżenia, należało zamknąć obiekt aplikacji, uruchomić go i na nowo załadować kolekcję. Obecnie Managery są wyposażone w metodę OtworzKolekcje, która w locie buduje kolekcję (bez potrzeby przeładowywania aplikacji). Jako argument tej metody można zadać warunek WHERE (celem wybrania odpowiednich elemetnów do kolekcji) oraz sposób sortowania ORDER (celem odpowiedniego uporządkowania
obiektów w kolekcji). Działa to o wiele szybciej i jest znacznie bardziej wydajne niż metody dostępne do tej pory.
Poza tym Managery zostały wyposażone w pewne metody specyficzne. Na przykład FinManager (którego zadaniem jest wspieranie kolekcji dokumentów finansowych) ma metody:
- DodajDokumentKasowy
- DodajOperacjeBankowa
- DodajRozrachunek
- DodajSplate
których znaczenia nie musze objaśniać.

Kolejną ważną nowością jest wyposażenie każdego z Managerów w 2 metody: Wczytaj i WczytajCoś. Wyjaśnię na przykładzie. DkrManager ma metodę Wczytaj, która udostępnia obiekt Dekret z interfejsem IDispatch, natomiast metoda WczytajDokument, która zwraca obiekt z interfejsem specyficznym dla dekretu.
Daniel, Białystok.

Offline astralom

  • Użytkownik
  • **
  • Wiadomości: 65
  • Reputacja +1/-1
  • Wersja programu: 1.73
Odp: Problem ze Sferą i Pythonem
« Odpowiedź #2 dnia: Październik 18, 2021, 09:12:01 »
Na pythonie jeszcze słąbo się znam ale z tego co widzę to próbujesz się odwoływać do atrybutu w metodzie/obiekcie (?) Dokumenty, którego tam najzwyczajniej nie ma. Zweryfikuj kod.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: Problem ze Sferą i Pythonem
« Odpowiedź #3 dnia: Październik 18, 2021, 10:03:54 »
Spróbuj zamiast Dokument użyć suDokumentManager
Sławek, Zduńska Wola

Offline aka.meles

  • Nowy użytkownik
  • *
  • Wiadomości: 2
  • Reputacja +0/-0
  • Wersja programu: Subiekt GT 1.70

Forum Użytkownikow Subiekt GT

Odp: Problem ze Sferą i Pythonem
« Odpowiedź #4 dnia: Luty 23, 2022, 10:27:17 »