Optima - wyszukiwanie kontrahentów

0

Próbuję wyszukać kontrahentów po polu 'Akronim'. Niestety nie mam dostępu do dokumentacji Optimy, nie wiem czy szukam po poprawnym polu. Robię to tak:

CDNHeal.IKontrahent checkKontr = (CDNHeal.IKontrahent)Kontrahenci["Knt_Kod='" + Kontrahent.Akronim + "'"];

dostaję wyjątek, że nie znaleziono tutaj rekordu danych. Więc oprócz pola mam problem z API jak dostać kolekcję, by sobie potem sprawdzić czy jest ona pusta?

Z góry dzięki za wszelkie wskazówki.

0

zobacz tak:

	CDNBase.ICollection Kontrahenci		= (CDNBase.ICollection)(Sesja.CreateObject( "CDN.Kontrahenci", null ));
			// pobieranie kontrahenta, formy platnosci  i waluty
			CDNHeal.IKontrahent	Kontrahent	= (CDNHeal.IKontrahent)Kontrahenci[ "Knt_Kod='ALOZA'" ];
		
0

To jest właśnie dokładnie to, jak ja to robię. Czy wg Ciebie 'Kod' to będzie 'Akronim' ? Jak by się nie dało wyciagnać kolekcji, to trudno, mogę wyłapywać wyjątek.

0

Tak, w ERP Optimie Akronim kontrahenta to jest pole Knt_kod w tabeli CDN.Kontrahenci.

Pytanie co chcesz z tym zrobić? Jeżeli do wystawiania dokumentów lepiej sprawdzić czy istnieje, odpytujesz tabele CDN.Kontrahenci.

0

To prosty skrypt do importu faktur (najpiew wrzucam kontrahentów, potem faktury). No i chcę uniknąć tworzenia dubli kontrahentów - wiec potrzebne mi sprawdzanie. Teraz mam tylko obiekty COM, nie mam połączenia SQL i jak da się sprawdzić czy istnieje przez COM, to chętnie przy tym zostanę, by już nie rozbudowywać tego ponad potrzebę.

0

Dubli kontrahentów nie zrobisz, na Knt_kod jest wymuszona unikatowość.

Co do importu - na szybko to polecam XML, na większości list pod "trybikami" jest import/eksport do XML. Struktura dość prosta, kiedyś wczytaliśmy tym 10k dokumentów. Można wskazać folder, czyli operacje seryjne są dozwolone.

Jeżeli nie możesz podłączyć się do bazy aby sprawdzić klienta to jedyna opcja próba założenia karty kontrahenta ze śledziem wyjątku.

0

Jeszcze mam taką zagwozdkę: Akronim, mimo, że wymuszam tutaj stringowy identyfitator, jest generowany jako liczba przez Optimę. Do którego pola mogłbym wstawić własny ID (numeryczny lub string) pochodzący z zewnętrznego programu, tak by potem po tym szukać kontrahentów (wszystko przez COM API) ?

0
CDNHeal.IKontrahent checkKontr = (CDNHeal.IKontrahent)Sesja.CreateObject("CDN.Kontrahenci", "Knt_Kod='" + Kontrahent.Akronim + "'");

@cerrato
Na urlopie jestem :D

0
Wojciech Stańczuk napisał(a):

Jeszcze mam taką zagwozdkę: Akronim, mimo, że wymuszam tutaj stringowy identyfitator, jest generowany jako liczba przez Optimę. Do którego pola mogłbym wstawić własny ID (numeryczny lub string) pochodzący z zewnętrznego programu, tak by potem po tym szukać kontrahentów (wszystko przez COM API) ?

Do jakiegoś wolnego, najczęściej np EAN jest wolny (pole w bazie Knt_EAN).

0

A kontrahent nie ma atrybutów?

0

Problem rozwiązałem tak: pytam bazę przez obiekt COM po kilku polach, które identyfikują mi unikalnego kontrahenta:

string where=String.Format("(Knt_Nazwa1 = '{0}') AND (Knt_Miasto = '{1}') AND (Knt_Ulica = '{2}')",nazwa,miasto,ulica);
CDNHeal.IKontrahent checkKontr = (CDNHeal.IKontrahent)Kontrahenci[where];

W kodzie obsługuję wyjątki kiedy te operacje nie zwrócą żadnych danych, lub więcej niż 1.

1 użytkowników online, w tym zalogowanych: 0, gości: 1