Forum Użytkownikow Subiekt GT
InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: mlotek w Lipiec 11, 2019, 14:30:16
-
Witam,
w jaki sposób można podpiąć przedpłaty pod wystawianą fakturę ?
W dokumentacji jest taki przykład
Set oPrzedplaty = oDok.Przedplaty
Set oPrzedplata = oPrzedplaty.Element(1)
No niby fajnie ALE klasa Przedplaty nie ma metody Element.
To co ja chcę uzyskać to podpięcie pod fakturę przedpłat o nzf_Id równym np. 123 i 124
Przedpłaty oczywiście istnieją w bazie podczas wystawia.
-
No niby fajnie ALE klasa Przedplaty nie ma metody Element.
Hm... u mnie w dokumentacji ma (1.57HF1)
-
Ech, uparcie nie korzystasz z informacji zgromadzonych na forum i nie zaglądasz do pomocy do Sfery, nie dawno kolejny raz o tym pisałem - przykłady w pomocy są w języku VBA, na podstawie informacji z pomocy do Sfery (atrybut, metoda) należy je przetłumaczyć na język, w którym się programuje - jak pokazał @candy "Element" NIE jest metodą tylko atrybutem (właściwością)...
-
Piszę w c#
problem jest w tym że Element nie istniej, to znaczy jak po "Przedplaty" stawiam kropkę i nawet ręcznie wpisuję Element to nie da się tego skompilować ponieważ kompilator wywala błąd w stylu "Element nie istniej".
Może rzeczywiście zasugerowałem się tym przykładem(nawiasami na końcu) i próbowałem użyć Element jako metody, ale nawet jak przechodziłem do definicji klasy "Przedplaty" to tam nie było czegoś takiego jak Element, ani jako metoda ani jako atrybut.
I owszem u mnie w dokumentacji również to istnieje, zresztą z tego źródła wkleiłem te wcześniejsze dwie linijki kodu. Ale w c# nie choroby nie chciało tego "odszukać".
Niestety obecnie nie mam dostępu do komputera z c# i sferą, jutro to sprawdzę dokładniej i dam znać.
A na forum znalazłem jeden temat dotyczący takiego problemu ale tam się okazało że ktoś miał starszego subiekta niż 1.26, a Element ma być dostępny od tej wersji.
-
Podstawy, podstawy i jeszcze raz podstawy, w tym przypadku znajomości języka C#: https://pl.wikipedia.org/wiki/Indekser (https://pl.wikipedia.org/wiki/Indekser).
-
mlotek, a próbowałeś po prostu oPrzedplaty[0]?
-
fv.Przedplaty.Element
daje komunikat
Element Przedplaty nie zawiera definicji "Element"
fv.Przedplaty[0]
komunikat
Nie można przypisać wartości do właściwości lub indeksatora "Przedplaty.this[int]" - jest on tylko do odczytu
Tak wygląda interfejs Przedplaty
#region Zestaw Interop.InsERT4, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a59bfa3a209beb60
// C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Interop.InsERT4\v4.0_1.0.0.0__a59bfa3a209beb60\Interop.InsERT4.dll
#endregion
using System.Collections;
using System.Reflection;
using System.Runtime.InteropServices;
namespace InsERT
{
[DefaultMember("Element")]
[Guid("4F32A2BB-731B-4A7A-9C51-24ECEB232CD9")]
[TypeLibType(TypeLibTypeFlags.FDual | TypeLibTypeFlags.FNonExtensible | TypeLibTypeFlags.FDispatchable)]
public interface Przedplaty : _GTA, IEnumerable
{
[DispId(-4)]
[TypeLibFunc(TypeLibFuncFlags.FRestricted)]
IEnumerator GetEnumerator();
[DispId(6)]
void Odswiez();
[DispId(65535)]
Aplikacja Aplikacja { get; }
[DispId(65534)]
dynamic Rodzic { get; }
[DispId(65533)]
string ObiektNazwa { get; }
[DispId(65532)]
string ObiektXml { get; }
[DispId(65531)]
int ObiektId { get; }
[DispId(0)]
Przedplata this[int lIndex] { get; }
[DispId(1)]
int LiczbaElementow { get; }
[DispId(2)]
decimal WartoscGotowka { get; }
[DispId(3)]
decimal WartoscPrzelew { get; }
[DispId(4)]
decimal WartoscSuma { get; }
[DispId(5)]
decimal WartoscDoRozliczeniaSuma { get; }
}
}
Element pojawia się tylko w [DefaultMember("Element")] i powiem szczerze że nie do końca wiem jak to ma działać, przykłady z DefaultMember które znajduje w internecie wyglądają zupełnie inaczej.
@dkozlowski ja się domyślam że to może i są "podstawy, podstawy i jeszcze raz podstawy" ale na co dzień nie programuję w c#, a w vB nie pisałem nigdy.
To po podesłałeś wygląda jak interfejs ArrayAccess z php(w którym programuję) tylko że za bardzo wiem jak miałby mi to pomóc.
-
fv.Przedplaty.Element
daje komunikat
Element Przedplaty nie zawiera definicji "Element"
fv.Przedplaty[0]
komunikat
Nie można przypisać wartości do właściwości lub indeksatora "Przedplaty.this[int]" - jest on tylko do odczytu
Tak wygląda pierwszy z brzegu przykład z pomocy do Sfery, który indeksuje kolekcję:
Sfera - InsERT GT dla aplikacji 1.0
Atrybut Ceny
Zwraca kolekcję cen towarów typu TwCeny.
Uwagi
Przykład 1
Przykład pokazuje, w jaki sposób można odczytać ceny sprzedaży towaru o zadanym symbolu i wypisać je w okienku Immediate Window.
Private Sub ListaCenTowaru()
On Error Resume Next
Dim oSubGT As InsERT.Subiekt
Dim oTw As InsERT.Towar
Dim oCena As InsERT.TwCena
Dim i As Integer
Dim sSymbol As String
Set oSubGT = UruchomSubiekta()
sSymbol = InputBox("Podaj symbol:")
Set oTw = Nothing
Set oTw = oSubGT.Towary.Wczytaj(sSymbol)
'Wypisanie cen wszystkich zdefiniowanych w Subiekcie poziomów
If oTw Is Nothing Then
MsgBox "Nie znaleziono towaru o symbolu: " + sSymbol
Else
Debug.Print "Towar: " + oTw.Nazwa
For i = 1 To oTw.Ceny.Liczba
Set oCena = oTw.Ceny.Element(i)
Debug.Print vbTab + "Id poziomu ceny: " + CStr(oCena.id) + vbTab + _
" Netto: " + CStr(oCena.Netto) + vbTab + " Brutto: " + CStr(oCena.Brutto)
Next i
End If
oTw.Zamknij
End Sub
Aby zobaczyć wyniki działania kodu należy otworzyć okno Immediate Window (Ctrl+G). Polecenie Debug.Print wpisuje wartości w tym właśnie okienku.
W przykładzie wykorzystano funkcję UruchomSubiekta(), której kod jest podany w temacie Uruchom.
Przykład 2
Przykład pokazuje, w jaki sposób można przecenić wszystkie towary o 10%. Należy zwrócić uwagę, że ustawienie dla każdego z towarów atrybutu CenaKartotekowa powoduje automatyczne przeliczenie:
- ceny netto
- ceny brutto
- zysku
- marży
- narzutu
dla każdego z poziomów cen sprzedaży towaru. Działa to identycznie, jak "ręczna" zmiana ceny kartotekowej z poziomu interfejsu programu Subiekt GT.
Private Sub Przecena()
On Error Resume Next
Dim oSubGT As InsERT.Subiekt
Dim oTw As InsERT.Towar
Set oSubGT = UruchomSubiekta()
For Each oTw In oSubGT.Towary
oTw.CenaKartotekowa = oTw.CenaKartotekowa * 0.9
oTw.Zapisz
Next
End Sub
W przykładzie wykorzystano funkcję UruchomSubiekta(), której kod jest podany w temacie Uruchom.
Zobacz także
obiekt TwCeny
Stosuje się do
obiekt Towar
Wersja
Dostępność od wersji: 1.05 systemu InsERT GT. Biblioteka obiektowa: 1.0
© 2005-2019 InsERT S.A.
Widać gdzie popełniłeś błąd.
@dkozlowski ja się domyślam że to może i są "podstawy, podstawy i jeszcze raz podstawy" ale na co dzień nie programuję w c#, a w vB nie pisałem nigdy.
To przecież żadne tłumaczenie, powtarzam na forum do znudzenia (takie jest moje zdanie) - należy programować w językach i środowiskach, które się zna, to nie jest przecież forum poświęcone nauce programowania w VBA, C#, czy PHP, są dostępne fora i kursy poświęcone tej tematyce... Powtarzam również, że nie każdy musi się znać na wszystkim, nie trzeba samemu próbować zostać programistą, takie usługi można również zamawiać...
To po podesłałeś wygląda jak interfejs ArrayAccess z php(w którym programuję) tylko że za bardzo wiem jak miałby mi to pomóc.
Liczę, że wszystko jest już jasne.
-
Dla pewności sprawdziłem, że to działa.
Subiekt sgt = uruchomSubiekta();
SuDokument fs = (SuDokument) sgt.SuDokumentyManager.Wczytaj(idFS);
Przedplaty przedplaty = fs.Przedplaty;
string msg = "";
int nr = 1;
foreach (Przedplata p in przedplaty)
{
msg += string.Format("{0}: kwota {1}\r\n", nr++, p.Wartosc);
}
MessageBox.Show(msg);
msg = "";
for (int i = 1; i <= przedplaty.LiczbaElementow; i++)
{
msg += string.Format("{0}: kwota {1}\r\n", i, przedplaty[i].Wartosc);
}
MessageBox.Show(msg);
Oba podejścia dają oczekiwane wyniki
Hint (z Helpa):
Atrybut Element
(...)
Musi się mieścić w zakresie od 1 do wartości atrybutu LiczbaElementow.
-
Hint (z Helpa):
Atrybut Element
(...)
Musi się mieścić w zakresie od 1 do wartości atrybutu LiczbaElementow.
Dokładnie tę informację wyróżniłem w swojej poprzedniej wypowiedzi ;)
-
Widać gdzie popełniłeś błąd.
No wyobraź sobie że nie ;p
Tak to jest ten sam przypadek odwołują się do "Element" który nie istnieje ....
Ja wiem że to że nie programuję zwykle w c# jest wymówką, bardziej chodzi mi o to każdy język "ma swoje dziwactwa" i jak piszesz w tym cały cas to dla ciebie jest to normalne, ale jak trafiasz na coś takiego pierwszy raz to jest to problem nie do przeskoczenia. Jak już się znajdzie rozwiązanie to wtedy następuje takie "no tak przecież to oczywiste" ale na razie takie nie jest.
@candy ten przykład pokazuje jak listować przedpłaty.
I zgodzę się to jest proste, tym samym sposobem przeszukiwałem i modyfikowaniem produktów w fs.
Ale ja nie chcę przeszukać już przypisanych płatności ponieważ wiem że tych nie ma(robię nową fakturę) tylko chcę podpiąć płatności(przedpłaty).
Z tego co widziałem to np. w produktach jest metoda fs.Pozycje.Dodaj która dodaje kolejną pozycję.
Tylko że przedpłatach tego nie ma.
-
Dobra wróciłem do tematu po dłuższym czasie i mnie olśniło.
Gdyby ktoś miał z tym problem i trafił na ten temat to poniżej zamieszczam opis o co chodzi.
Nie podpina się przedpłat pod dokument,
w oDok.Przedplaty jest lista wszystkich przedpłat możliwych do użycia
żeby "przypisać" przedpłatę do zamówienia należy dodać do jej właściwości Wartosc wybranej przedpłaty kwotę jaka ma zostać użyta jako przedpłata.