mojaSymfonia FORUM
https://forum.mix-soft.pl/

import kontrahentow - problem z rodzajem
https://forum.mix-soft.pl/viewtopic.php?f=15&t=1571
Strona 1 z 1

Autor:  JacekBomba [ 2010-01-07, 12:55 ]
Tytuł:  import kontrahentow - problem z rodzajem

Witam.
Probuje zaimportowac kontrahenta przy pomocy ponizszego kodu:

Kod:
//================================================================================
// Import kontrahenta.
//================================================================================
int Sub CustomerImport()

Clear(basKH)
string naglowek = readColumn()   
string kod = readColumn()
string nazwa = readColumn()
string miasto = readColumn()
string ulica = readColumn()
string numerDomu = readColumn()
string numerLokalu = readColumn()
string kodPocztowy = readColumn()
string nip = readColumn()
string telefon = readColumn()
string typPlatnosciId = readColumn()
string rabat = readColumn()
string czyBrutto = readColumn()
string cennikId = readColumn()
string negocjacjaCen = readColumn()
string terminPlatnosci = readColumn()
string rodzajId = readColumn()
   
SetField (basKH, "typ", "0")
SetField (basKH, "typi", 0)
SetField (basKH, "subtypi", 0)
SetField (basKH, "kod", kod)
SetField (basKH, "nazwa", nazwa)
SetField (basKH, "miejscowosc", miasto)
SetField (basKH, "ulica", ulica)
SetField (basKH, "dom", numerDomu)
SetField (basKH, "lokal",numerLokalu)
SetField (basKH, "kodpocz", kodPocztowy)
SetField (basKH, "nip", nip)
SetField (basKH, "tel1", telefon)
if typPlatnosciId != "" then
   SetField (basKH, "formaplatn", Val(typPlatnosciId))
endif
SetField (basKH, "upust", Val(rabat))
int grupaceni = 0
if czyBrutto == "1" then
   grupaceni = grupaceni + 1
endif
select case (cennikId)
   case "65":
      grupaceni = grupaceni + 2   // A
   case "66":
      grupaceni = grupaceni + 4   // B
   case "67":
      grupaceni = grupaceni + 6   // C
   case "68":
      grupaceni = grupaceni + 8   // D
endselect
SetField (basKH, "grupaceni", grupaceni)
if negocjacjaCen = "0" then
   SetField (basKH, "negoc", "T")
else
   SetField (basKH, "negoc", "N")
endif
if rodzajId == "" then
   SetField (basKH, "rodzaj", 3100)
else
   SetField (basKH, "rodzaj", Val(rodzajId))
endif
SetField (basKH, "idkraju", 5801)
SetField (basKH, "katalog", 2100)

if InsRec(basKH) != 0 then
   ShowMsgError()   
   baseError (basKH, 2)
   Error ""
endif

EndSub


Mam problem z przypisaniem rodzaju kontrahenta oraz typu platnosci. Jesli przypisze rodzaj (id = 438 tak jak dla istniejacych w bazie kontrahentow, ktorych wczesniej sobie wyeksportowalem) to powstaje ponizszy blad:
1. W podgladzie kontrahenta nie pojawia sie zaden rodzaj
2. Nie moge przypisac kontrahentowi jakiegokolwiek rodzaju (pojawia sie komunikat 'Nieznany katalog lub rodzaj')
3. Nie moge usunac takiego kontrahenta (pojawia sie nieudokumentowany blad obslugi bazy -4101)

W przypadku platnosci, nie pojawia sie przypisana forma platnosci.

Gdzie tkwi blad?

Pozdrawiam,
Jacek Frieske

Autor:  JacekBomba [ 2010-01-07, 15:36 ]
Tytuł: 

Problem pojawia sie podczas importu wartosci slownikowych zdefiniowanych w tabeli XT. Z tabeli odczytalem sobie wartosc id katalogu o nazwie DOSTAWCY = 116. Zaimportowalem kontrahenta zgodnie z powyzszym kodem podajac jako id katalogu wartosc 116

Kod:
SetField (basKH, "katalog", 116)


Po imporcie kontrahenta w polu katalog istnieje wartosc 51BM.DAT Przeanalizowalem zawartosc tabeli XT i widze, ze sa dwa pola o identyfikatorze 116 (DOSTAWCY oraz 51BM.DAT) W dokumentacji jest napisane, ze pole id jest polem unikalnym (autoincrement). Czy u was tez istnieje taka niespojnosc?

Jak obejsc problem importu kontrahenta i przypisania mu wartosci slownikowych (typ platnosci, rodzaj, katalog)?

Autor:  rafal [ 2010-01-07, 16:13 ]
Tytuł: 

Katalogi dodane przez użytkownika w programie nie będą miały mniejszego ID niż 65000.
Tak więc nie wiem skąd u Ciebie ID jest równe 116.

Autor:  wrob [ 2010-01-07, 16:15 ]
Tytuł: 

dokladniej 2^16 czyli >65536

Autor:  JacekBomba [ 2010-01-07, 16:58 ]
Tytuł: 

Rozwiazanie jest banalne, ale bez pomocy bym nigdy tego nie znalazl. Podczas eksportu tabeli xt w konwersji z liczby na stringa rzutowalem long'a na int'a i stad wziely sie problemy z wartosciami identyfikatorow.

Dzieki za pomoc,

pozdrawiam
Jacek

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/