Autor Wątek: SDK dwa pytania.  (Przeczytany 21934 razy)

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

Offline keczerad

  • Nowy użytkownik
  • *
  • Wiadomości: 17
  • Reputacja +0/-0
SDK dwa pytania.
« dnia: Październik 06, 2014, 23:19:44 »
Wiem ktoś może dlaczego wywołanie takiego kodu:


foreach (PozycjaCennika poz in jestTowar.Dane.PozycjeCennika)
                            {
                               
                               
                                 switch (poz.Cennik.PoziomCen.Nazwa)
                                {
                                 case "Detaliczny":
                                    poz.CenaNetto = Convert.ToDecimal(dr["Cena netto"].ToString());
                                     break;
                                 case "Hurtowy":
                                     poz.CenaNetto = Convert.ToDecimal(dr["Cena hurt"].ToString());
                                      break;
                                }

                               
                            }


 kończy się błędem "Modyfikacja pola CenaNetto encji PozycjaCennika nie powiodła się, ponieważ albo encja nie została przyłączona do obiektu kontrolującego modyfikację danych (biznesowego), albo ten, do którego jest przyłączona nie pozwala na zmianę tego konkretnego pola."


Drugie pytanko to jak dodać KodKreskowy do towaru bo nie mam pojecia jak to zrobić. W pomocy do programu zdecydowanie brakuje przykładów jak cos zrobić, a sam plik pomocy przypomna raczej wygenerowany automatem chm na podstawie obiektów w kodzie plus tzy przyklady na krzyż. Nie mówiąc o tym ze same interfejsy mnie kończą w domyślaniu co i jak jest zrobione.

Dlatego że w necie nie ma wogołe przykładu kodów pozwolę sobie dodać swoje wypociny.

Jak dodać producenta i dostawce do produktu:

jestTowar = menedzerAsortymentow.Znajdz(dr["Symbol"].ToString());

                        if (jestTowar != null)
                        {                         

                            if (dr["Producent"].ToString() != String.Empty)
                            {                             
                               
                                podmioty = polaczenie.PodajObiektTypu<IPodmioty>();
                                string producentS =  dr["Producent"].ToString();
                                var klient = podmioty.Dane.Wszystkie().Where(p => p.NazwaSkrocona == producentS).FirstOrDefault();

                                if (klient == null)
                                {
                                    InsERT.Moria.Klienci.Podmioty podProducent = polaczenie.PodajObiektTypu<Podmioty>();
                                    IPodmiot ipod = podProducent.UtworzFirme();
                                    ipod.NadajNumer();
                                    ipod.Dane.NazwaSkrocona = dr["Producent"].ToString();
                                    ipod.Zapisz();
                                    var klientN = podmioty.Dane.Wszystkie().Where(p => p.NazwaSkrocona == producentS).FirstOrDefault();

                                    if (klientN != null)
                                        klient = klientN;
                                }                               

                                if(jestTowar.Dane.Dostawcy().Where( d => d.Id == klient.Id).Count() == 0)
                                    jestTowar.Dostawcy.Dodaj(klient);
                                jestTowar.Producent.Ustaw(klient);
                               
                            }
                            if (dr["Dostawca"].ToString() != String.Empty)
                            {
                                podmioty = polaczenie.PodajObiektTypu<IPodmioty>();
                                string dostawcaS = dr["Dostawca"].ToString();
                                var dostawca = podmioty.Dane.Wszystkie().Where(p => p.NazwaSkrocona == dostawcaS).FirstOrDefault();

                                if (dostawca == null)
                                {
                                    InsERT.Moria.Klienci.Podmioty podProducent = polaczenie.PodajObiektTypu<Podmioty>();
                                    IPodmiot ipod = podProducent.UtworzFirme();
                                    ipod.NadajNumer();
                                    ipod.Dane.NazwaSkrocona = dr["Dostawca"].ToString();
                                    ipod.Zapisz();
                                    var dostawcaN = podmioty.Dane.Wszystkie().Where(p => p.NazwaSkrocona == dostawcaS).FirstOrDefault();

                                    if (dostawcaN != null)
                                        dostawca = dostawcaN;
                                }
                                var ileD = jestTowar.Dane.Dostawcy().Where(d => d.Podmiot.NazwaSkrocona == dostawcaS).Count();

                                if (jestTowar.Dane.Dostawcy().Where(d => d.Podmiot.NazwaSkrocona == dostawcaS).Count() == 0)
                                    jestTowar.Dostawcy.Dodaj(dostawca);

                                foreach (DaneAsortymentuDlaPodmiotu x in jestTowar.Dane.Dostawcy())
                                {
                                    if (x.Podmiot.NazwaSkrocona == dostawcaS && dr["Symbol_dostawca"].ToString() != String.Empty)
                                    {
                                        x.Symbol = dr["Symbol_dostawca"].ToString();
                                        x.SredniCzasDostawy = 30;
                                    }
                                }
                            }
}


Jak dodać cechę:

string nazwa = "Tutaj nazwa cechy";
InsERT.Moria.Asortymenty.ICechaAsortymentu cechaA;
InsERT.Moria.Asortymenty.ICechyAsortymentu cechyA = polaczenie.PodajObiektTypu<InsERT.Moria.Asortymenty.ICechyAsortymentu>();

cechaA  = cechyA.Znajdz(nazwa);

if(cechaA == null)
{
cechaA = cechyA.Utworz();
cechaA.Dane.Nazwa = nazwa_cala;               
                           
   if (!cechaA.Zapisz())
  {
       ///obsluga błędu
  }
}


Jak dodać cechę do produktu:

//obiekt jestTowar jak z kodu powyzej
string cecha = "Nazwa cechy";
InsERT.Moria.Asortymenty.ICechyAsortymentu cechy = polaczenie.PodajObiektTypu<InsERT.Moria.Asortymenty.ICechyAsortymentu>();
InsERT.Moria.ModelDanych.CechaAsortymentu cecha = cechy.Dane.Wszystkie().Where(a => a.Nazwa == cecha).First();

if(jestTowar.Dane.Cechy.Where(b=>b.Id == cecha.Id).Count() ==0)
             jestTowar.Dane.Cechy.Add(cecha);



Offline fosuk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +7/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #1 dnia: Październik 07, 2014, 10:00:16 »
"Modyfikacja pola CenaNetto encji PozycjaCennika nie powiodła się, ponieważ albo encja nie została przyłączona do obiektu kontrolującego modyfikację danych (biznesowego), albo ten, do którego jest przyłączona nie pozwala na zmianę tego konkretnego pola."
Bez kontroli obiektu biznesowego nie można modyfikować danych, a ceny towaru (czyli pozycje cenników) mają swoje obiekty biznesowe. Żeby poprawić ceny, trzeba sobie obiekty biznesowe pozycji cenników osobno wczytać i osobno zapisać - osobno od towaru. Dodatkowo trzeba pamiętać, że w tej sytuacji ceny widoczne od strony towaru nie zmienią się po zapisaniu pozycji, bo jest to inny obiekt biznesowy. Jeśli chcemy zobaczyć tę zmianę w towarze, to konieczne jest ponowne wczytanie danych towaru. Natomiast od strony obiektu biznesowego pozycji cennika dostępna jest oczywiście zmodyfikowana wersja pozycji cennika.  :)
IPozycjeCennika pozycjeCennika = polaczenie.PodajObiektTypu<IPozycjeCennika>();
foreach (PozycjaCennika poz in jestTowar.Dane.PozycjeCennika)
{
    IPozycjaCennika jestPozycja = pozycjeCennika.Znajdz(poz);
    switch (jestPozycja.Dane.Cennik.PoziomCen.Nazwa)
    {
        case "Detaliczny":
            jestPozycja.Dane.CenaNetto = Convert.ToDecimal(dr["Cena netto"].ToString());
            break;
        case "Hurtowy":
            jestPozycja.Dane.CenaNetto = Convert.ToDecimal(dr["Cena hurt"].ToString());
            break;
    }
    if (!jestPozycja.Zapisz())
    { /* obsługa błędów */ }
}


Offline fosuk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +7/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #2 dnia: Październik 07, 2014, 10:42:25 »
Drugie pytanko to jak dodać KodKreskowy do towaru
Kod kreskowy jest przypisany do jednostki miary towaru. W towarze jest jednostka podstawowa i są dodatkowe. Tak samo z kodami - każda jednostka miary danego towaru ma kolekcję kodów, z których jeden jest podstawowy. Możliwości jest więc trochę...  ;)
Kod dla podstawowych przypadków:
var kod = new KodKreskowy() { Kod = "5901812785312" };
//dodanie kodu kreskowego do podstawowej jednostki miary towaru
jestTowar.Dane.PodstawowaJednostkaMiaryAsortymentu.KodyKreskowe.Add(kod);
//ustawienie dodanego kodu jako podstawowego dla tej jednostki
jestTowar.Dane.PodstawowaJednostkaMiaryAsortymentu.PodstawowyKodKreskowy = kod;

kod = new KodKreskowy() { Kod = "5901812785305" };
//dodanie dodatkowego kodu kreskowego do podstawowej jednostki miary towaru
jestTowar.Dane.PodstawowaJednostkaMiaryAsortymentu.KodyKreskowe.Add(kod);

var jmBOX = jestTowar.Dane.JednostkiMiar.Where(j => j.JednostkaMiary.Symbol == "BOX").FirstOrDefault();
if (jmBOX != null)
{
    //dodanie kodu kreskowego do dodatkowej jednostki miary towaru
    var kodBOX = new KodKreskowy() { Kod = "5901812785336" };
    jmBOX.KodyKreskowe.Add(kodBOX);
    //ustawienie tego kodu jako podstawowego dla tej jednostki
    jmBOX.PodstawowyKodKreskowy = kodBOX;
}

Offline keczerad

  • Nowy użytkownik
  • *
  • Wiadomości: 17
  • Reputacja +0/-0
Odp: SDK dwa pytania.
« Odpowiedź #3 dnia: Październik 08, 2014, 13:27:16 »
Dziekuję ślicznie. Wiesz może jak dobrać się znaczy pobrać nazwy pol wlasnych artykułów i do ich widoczności przez API ?


Offline fosuk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +7/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #4 dnia: Październik 09, 2014, 14:51:34 »
Wiesz może jak dobrać się znaczy pobrać nazwy pol wlasnych artykułów i do ich widoczności przez API ?
Czy o to chodzi?
IPolaWlasnePodstawowe mgrPolaWlasne = polaczenie.PodajObiektTypu<IPolaWlasnePodstawowe>();
IEnumerable<IProstePoleWlasne> polaWlasne = mgrPolaWlasne.PobierzProstePolaWlasne<Podmiot>();

Offline keczerad

  • Nowy użytkownik
  • *
  • Wiadomości: 17
  • Reputacja +0/-0
Odp: SDK dwa pytania.
« Odpowiedź #5 dnia: Październik 10, 2014, 14:43:50 »
A jak ustawić dostawcę podstawowego ? Nie mogę znaleźć takiej zależności do producenta jest a do dostawcy nie widze takiej prostej zależności.

Offline keczerad

  • Nowy użytkownik
  • *
  • Wiadomości: 17
  • Reputacja +0/-0
Odp: SDK dwa pytania.
« Odpowiedź #6 dnia: Październik 10, 2014, 14:53:07 »
Wiesz może jak dobrać się znaczy pobrać nazwy pol wlasnych artykułów i do ich widoczności przez API ?
Czy o to chodzi?
IPolaWlasnePodstawowe mgrPolaWlasne = polaczenie.PodajObiektTypu<IPolaWlasnePodstawowe>();
IEnumerable<IProstePoleWlasne> polaWlasne = mgrPolaWlasne.PobierzProstePolaWlasne<Podmiot>();

Bardziej chodziło o to, ale dziękuje.

IPolaWlasnePodstawowe mgrPolaWlasne = polaczenie.PodajObiektTypu<IPolaWlasnePodstawowe>();
IEnumerable<IProstePoleWlasne> polaWlasne = mgrPolaWlasne.PobierzProstePolaWlasne<Asortyment>();

Offline fosuk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +7/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #7 dnia: Październik 10, 2014, 15:01:26 »
Wiesz może jak dobrać się znaczy pobrać nazwy pol wlasnych artykułów i do ich widoczności przez API ?
Czy o to chodzi?
IPolaWlasnePodstawowe mgrPolaWlasne = polaczenie.PodajObiektTypu<IPolaWlasnePodstawowe>();
IEnumerable<IProstePoleWlasne> polaWlasne = mgrPolaWlasne.PobierzProstePolaWlasne<Podmiot>();

Bardziej chodziło o to, ale dziękuje.

IPolaWlasnePodstawowe mgrPolaWlasne = polaczenie.PodajObiektTypu<IPolaWlasnePodstawowe>();
IEnumerable<IProstePoleWlasne> polaWlasne = mgrPolaWlasne.PobierzProstePolaWlasne<Asortyment>();
:D Sorry, chyba się nie wczytałem. Sięgnąłem po prostu po kod, który miałem pod ręką. :)

Offline fosuk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +7/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #8 dnia: Październik 10, 2014, 15:04:45 »
A jak ustawić dostawcę podstawowego ? Nie mogę znaleźć takiej zależności do producenta jest a do dostawcy nie widze takiej prostej zależności.

Najprościej przez property Dostawcy, które zwraca dodaną asocjację. Od razu można ją wykorzystać do ustawienia pozostałych parametrów powiązania albo też ustawienia dodanego dostawcy jako podstawowego. Pierwszy dodawany będzie podstawowy z automatu, ale dla kolejnego, jeśli ma się stać podstawowy, trzeba to ustawić.
IPodmioty podmioty = polaczenie.PodajObiektTypu<IPodmioty>();
var podmiot = podmioty.Dane.Wszystkie().Where(p => p.Sygnatura.PelnaSygnatura == "ABC").FirstOrDefault();
if (podmiot != null)
{
    var dostawca = jestTowar.Dostawcy.Dodaj(podmiot);
    jestTowar.Dostawcy.Podstawowy = dostawca;
}
Edit:
Oczywiście jestTowar = menedzerAsortymentow.Znajdz(dr["Symbol"].ToString()); :)
« Ostatnia zmiana: Październik 10, 2014, 15:16:20 wysłana przez fosuk »

Offline keczerad

  • Nowy użytkownik
  • *
  • Wiadomości: 17
  • Reputacja +0/-0
Odp: SDK dwa pytania.
« Odpowiedź #9 dnia: Październik 21, 2014, 11:10:16 »
Wiesz może jak sobie poradzić z takim fantem, że po dodaniu jakiegokolwiek pola dodatkowego z poziomu interfejsu Nexo, przestaje działać nawet logowanie przez API ponieważ Subiekt buduje nowe biblioteki i jest lipa do kwadratu. Probówałem nawet te nowe bibliteki dołączać do projektu ale to też nie działa.

Offline fosuk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +7/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #10 dnia: Październik 21, 2014, 12:31:57 »
Po dodaniu pól własnych nexo PRO buduje od nowa bibliotekę InsERT.Moria.ModelDanych.dll i tę nową bibliotekę trzeba używać również przy łączeniu Sferą. Jeśli rozwiązanie własne jest wdrożone przez Program serwisowy to się tego nie zauważa. Natomiast jeśli rozwiązanie testujemy, bądź mamy wdrożone dla jednej wersji, z wykorzystaniem plików z SDK to trzeba to jakoś rozwiązać. To już zależy od stosowanej konfiguracji. Ważne żeby użyć tę odpowiednią DLL-kę. Pytanie - skąd ją uzyskać. W katalogu
%LOCALAPPDATA%\InsERT\Deployments\nexo
Znajdują się katalogi robocze dla baz danych nexo.
W bazie danych nexo, w tabeli InsLauncher.InstalledProducts znajdują się informacje o zainstalowanym produkcie, m.in. DeploymentName – to jest nazwa lokalnego katalogu w podanej wcześniej lokalizacji.
W tym katalogu znajduje się z kolei folder Binaries zawierający pliki (hardlinki) odpowiedniej wersji nexo.
Przykład:
C:\Users\fosuk\AppData\Local\InsERT\Deployments\Nexo\Test_wer3062b1b55c9866409591053b\Binaries
W tym folderze jest też InsERT.Moria.ModelDanych.dll i powinien mieć świeżą datę modyfikacji.
Do tego pliku trzeba się zareferencjonować albo skopiować go sobie - no to już właśnie zależy od konfiguracji.
Ja, gdy testuję rozwiązania, w folderze z SDK kopiuję sobie folder Bin na drugi i do tego drugiego wrzucam ten ModelDanych z Binaries dla danej bazy i VisualStudio ustawiam ReferencePath na ten folder. Nie wiem w jakiej konfiguracji uruchamiasz swoje rozwiązanie, więc ciężko mi coś więcej poradzić.

Offline keczerad

  • Nowy użytkownik
  • *
  • Wiadomości: 17
  • Reputacja +0/-0
Odp: SDK dwa pytania.
« Odpowiedź #11 dnia: Listopad 03, 2014, 21:28:39 »
Wiesz może jak dodać Osobę i tą osobę przypisać podmiotowi ?

Offline fosuk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +7/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #12 dnia: Listopad 03, 2014, 22:59:50 »
Nie rozumiem o co dokładnie chodzi. Czy chodzi o dodanie Podmiotu typu Osoba?
Jeśli tak, to:using (IPodmiot osoba = managerPodmiotow.UtworzOsobe())
{
    osoba.Dane.Osoba.Imie = "Karin";
    osoba.Dane.Osoba.Nazwisko = "Michałowska";
    osoba.Zapisz();
}

Offline fiber

  • Użytkownik
  • **
  • Wiadomości: 52
  • Reputacja +2/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #13 dnia: Grudzień 04, 2014, 09:51:25 »
http://www.forumsubiekta.pl/subiekt/exel2sgt/msg737/#msg737
https://www.youtube.com/user/keczerad

Wynika z tego, że takie pytania zadaje właściciel e-mo.pl, który pewnie robi teraz apkę/i pod nexo. Tylko, że jak na kogoś, kto bierze kasę za swoje programy, to poziom programistyczny marny, bo problemy podstawowe.
A tutaj jeszcze dostaje darmową pomoc...
Czasem kupię jakiś dodatek, bo nie mam czasu (albo chęci) pisać samemu, a są gotowe i dobre rozwiązania. Z programów firmy e-mo.pl akurat nie korzystałem, ale to chyba dobrze, bo obraz już mam.

Offline fosuk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +7/-0
  • Wersja programu: nexo
Odp: SDK dwa pytania.
« Odpowiedź #14 dnia: Grudzień 04, 2014, 10:18:54 »
Co to znaczy "poziom programistyczny"? Pytania dotyczą API nexo, a tego można nie wiedzieć - nie uczą na studiach. Co do darmowej pomocy, to korzystają na tym przecież wszyscy czytający forum. Dodatkowo, rozpoczął ten wątek pytaniem, ale jednocześnie podając własne rozwiązania-przykłady.

Forum Użytkownikow Subiekt GT

Odp: SDK dwa pytania.
« Odpowiedź #14 dnia: Grudzień 04, 2014, 10:18:54 »