Witam!
Mam taką procedurkę umieszczoną w 'Procedury dokumentu magazynowego' (w rzeczywistości jest ona zupełnie inna, ale obrazuje ideę):
Kod:
int sub OnKHChanged(long lId)
string kod
BaseBM bm
if bm.Open() then Exit
bm.SetKey("id")
bm.SetKeySeg("id", lId)
bm.GetRec(EQ)
kod = bm.GetField("khkod")
bm.Close()
OnKHChanged=0
if Mid(LCase(kod),1,1)!="t" then
message("Kontrahent musi zaczynać sie na 'T'!")
OnKHChanged=-6000
endif
endsub
Co ma powodować, że na dokumencie może być wybrany tylko kontrahent zaczynający się na literę 'T'. Ma wyświetlić komunikat i pozostać w polu wyboru kontrahenta. I to działa dobrze.
Tylko, że jest problem właśnie wtedy, gdy warunek NIE zachodzi.
Załóżmy, że wybieram sobie jakiegoś kontrahenta. Uzupełniają się wszystkie pozostałe jego dane jak NP i adres. Uruchamiana jest procedura sprawdzająca i stwierdza, że dane nie są prawidłowe. Więc zmieniam kontrahenta na 'testowy'. I co? Dane się nie uzupełniają - pozostają po poprzednio wybranym kontrahencie!
Błąd mój, czy Symfonii? A co ważniejsze - jak go obejść...
[EDIT]
Co więcej. Sprawdziłem, że do bazy zapisuje się KHKod kontrahenta na 'T', a pozostałe dane (m.in.) KHId tego poprzedniego kontrahenta...