Autor Wątek: Podpięcie przedpłaty pod dokument  (Przeczytany 3958 razy)

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

Offline mlotek

  • Użytkownik
  • **
  • Wiadomości: 61
  • Reputacja +0/-0
  • Wersja programu: najnowszy
Podpięcie przedpłaty pod dokument
« dnia: 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.

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4871
  • Reputacja +172/-11
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #1 dnia: Lipiec 11, 2019, 16:13:35 »
No niby fajnie ALE klasa Przedplaty nie ma metody Element.
Hm... u mnie w dokumentacji ma (1.57HF1)
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17040
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #2 dnia: Lipiec 11, 2019, 17:09:46 »
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ą)...
Daniel, Białystok.

Offline mlotek

  • Użytkownik
  • **
  • Wiadomości: 61
  • Reputacja +0/-0
  • Wersja programu: najnowszy
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #3 dnia: Lipiec 11, 2019, 20:15:01 »
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.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17040
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #4 dnia: Lipiec 11, 2019, 20:44:42 »
Podstawy, podstawy i jeszcze raz podstawy, w tym przypadku znajomości języka C#: https://pl.wikipedia.org/wiki/Indekser.
Daniel, Białystok.

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4871
  • Reputacja +172/-11
Podpięcie przedpłaty pod dokument
« Odpowiedź #5 dnia: Lipiec 11, 2019, 21:41:34 »
mlotek, a próbowałeś po prostu oPrzedplaty[0]?
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline mlotek

  • Użytkownik
  • **
  • Wiadomości: 61
  • Reputacja +0/-0
  • Wersja programu: najnowszy
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #6 dnia: Lipiec 12, 2019, 07:47:09 »
fv.Przedplaty.Element
daje komunikat
Cytuj
Element Przedplaty nie zawiera definicji "Element"

fv.Przedplaty[0]

komunikat
Cytuj
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.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17040
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #7 dnia: Lipiec 12, 2019, 09:41:02 »
fv.Przedplaty.Element
daje komunikat
Cytuj
Element Przedplaty nie zawiera definicji "Element"

fv.Przedplaty[0]

komunikat
Cytuj
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ę:

Cytuj
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.
Daniel, Białystok.

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4871
  • Reputacja +172/-11
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #8 dnia: Lipiec 12, 2019, 10:00:32 »
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.


« Ostatnia zmiana: Lipiec 12, 2019, 10:06:29 wysłana przez candy »
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17040
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #9 dnia: Lipiec 12, 2019, 10:26:11 »
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 ;)
Daniel, Białystok.

Offline mlotek

  • Użytkownik
  • **
  • Wiadomości: 61
  • Reputacja +0/-0
  • Wersja programu: najnowszy
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #10 dnia: Lipiec 12, 2019, 10:45:08 »
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.


Offline mlotek

  • Użytkownik
  • **
  • Wiadomości: 61
  • Reputacja +0/-0
  • Wersja programu: najnowszy
Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #11 dnia: Sierpień 01, 2019, 13:42:21 »
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.

Forum Użytkownikow Subiekt GT

Odp: Podpięcie przedpłaty pod dokument
« Odpowiedź #11 dnia: Sierpień 01, 2019, 13:42:21 »