Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-11-15, 22:04x



Odpowiedz w temacie  [ Posty: 8 ] 
Procedura dok.sprzedaży. 
Autor Wiadomość

Rejestracja: 2008-03-10, 14:01
Posty: 593
Post Procedura dok.sprzedaży.
Witam.
Przed wystawieniem f-ry sprawdzam kilka rzeczy i zauważyłem pewną (tak sądzę) nieścisłość.
Ustawiam OnBeforeInsert=0 na początku i potem OnBeforeInsert=-6000 tylko wtedy, kiedy coś mi się nie zgadza.
Mimo to system podkłada wartość zero jeśli któraś z funkcji nie zwróci -6000 i muszę sprawdzać ponownie wszystkie wartości.
Czy jest na to jakaś metoda?

Kod:
int Sub OnBeforeInsertFVS(long lId)         // faktura sprzedaży VAT
   OnBeforeInsertFVS = 0
   OnBeforeInsertFVS = f1(lId)
message "po f1" + using "%i", OnBeforeInsertFVS
   OnBeforeInsertFVS = f2(lId)
message "po f2" + using "%i", OnBeforeInsertFVS
   OnBeforeInsertFVS = f3(lId)   
message "po f3" + using "%i", OnBeforeInsertFVS
   OnBeforeInsertFVS = f4(lId)
message "po f4 " + using "%i", OnBeforeInsertFVS

   if f1(lId)==-6000 || f2(lId)==-6000 || f3(lId)==-6000 || f4(lId)==-6000 then OnBeforeInsertFVS=-6000
EndSub

_________________
zz


2011-03-01, 12:44
Wyświetl profil
Autor Wiadomość
 



Rejestracja: 2009-01-13, 10:45
Posty: 86
Post 
Przeglądając ten kod zauważyłem (mogę to stwierdzić z całą pewnością) jednoznaczny błąd w rozumowaniu.

Twoje funkcje mogą dawać taki ciąg operacji:
Kod:
int zmienna
zmienna = 0
zmienna = -6000
zmienna = 0


Na końcu tego ciągu operacji - zmienna ma wartość 0.

Gdyby ciąg operacji wyglądał tak:
Kod:
int zmienna
zmienna = 0
zmienna = 0
zmienna = -6000


Na końcu - zmienna ma wartość -6000.

Ja nie widzę tu nic niewłaściwego - każdy język programowania (z tych które znam) tak działa ;P

Rozwiązań tego zagadnienia jest wiele - jedno udało się Panu uzyskać - kod może wyglądać tak:
Kod:
int Sub OnBeforeInsertFVS(long lId)            // faktura sprzedaży VAT
    OnBeforeInsertFVS = 0

    if f1(lId)==-6000 || f2(lId)==-6000 || f3(lId)==-6000 || f4(lId)==-6000 then OnBeforeInsertFVS=-6000
EndSub


Jak dla mnie bezsensem jest uruchamianie funkcji f1, f2, f3, f4 wielokrotnie - w wielu sytuacjach taka operacja może dać przy każdym uruchomieniu inny wynik (np jeżeli funkcja dokonuje jakiś modyfikacji w bazie to raz coś zmieni a następnym razem nie - i mamy klops :oops: :oops: ).


2011-03-02, 11:44
Wyświetl profil

Rejestracja: 2008-03-10, 14:01
Posty: 593
Post 
Witam panie A. :)
Tak jak napisałem ustawiam zero na początku OnBeforeInsert i potem w poszczególnych procedurkach nie sprawdzam poprawności ale 'niepoprawność' i wtedy daję -6000.
Więc skąd bierze się zero na wyjściu ?

PS. Jak najbardziej wartość procedur może być inna za każdym razem (sprawdzam kilka niezależnych rzeczy np. datę wystawienia, opis, ...) i blokuję, jeśli coś jest nie OK.

_________________
zz


2011-03-02, 12:21
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 3999
Pomógł: 447
Post Re: Procedura dok.sprzedaży.
zz pisze:
[...]
Kod:
int Sub OnBeforeInsertFVS(long lId)         // faktura sprzedaży VAT
   OnBeforeInsertFVS = 0
   OnBeforeInsertFVS = f1(lId)
message "po f1" + using "%i", OnBeforeInsertFVS
   OnBeforeInsertFVS = f2(lId)
message "po f2" + using "%i", OnBeforeInsertFVS
   OnBeforeInsertFVS = f3(lId)   
message "po f3" + using "%i", OnBeforeInsertFVS
   OnBeforeInsertFVS = f4(lId)
message "po f4 " + using "%i", OnBeforeInsertFVS

   if f1(lId)==-6000 || f2(lId)==-6000 || f3(lId)==-6000 || f4(lId)==-6000 then OnBeforeInsertFVS=-6000
EndSub


Wykonujesz funkcje sprawdzające w kolejności f1...f4
Jeżeli f1 zwraca -6000 oznacza to, że możesz już przerwać sprawdzanie pozostałymi funkcjami bo masz już wystarczający powód aby nie kontynuować wystawiania dokumentu.
A to dlatego, że jedna z kolejnych funkcji może zwrócić 0 i wcześniejsze przypisanie do OnBeforeInsertFVS wartości -6000 traci sens.

może sprawdzaj te warunki w pętli if

Kod:
if OnBeforeInsertFVS = f1(lId) == -6000 then goto wyjdz
if OnBeforeInsertFVS = f1(lId) == -6000 then goto wyjdz
if OnBeforeInsertFVS = f1(lId) == -6000 then goto wyjdz
if OnBeforeInsertFVS = f1(lId) == -6000 then goto wyjdz

OnBeoreInsertFVS = 0
wyjdz:

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2011-03-02, 22:25
Wyświetl profil

Rejestracja: 2008-03-10, 14:01
Posty: 593
Post 
Na pewno to zadziała, ale...
.... ale chciałem, żeby komunikaty o wszystkich ew. błędach pojawiały się w jednym 'kroku' (czy użytk. je przeczyta, to już inna bajka).
PS. Punkcik za podpowiedź stawiam :)

_________________
zz


2011-03-03, 10:22
Wyświetl profil

Rejestracja: 2009-01-08, 11:43
Posty: 96
Pomógł: 1
Post 
Zamiast przypisywać wartość zwracanej funkcji do OnBeforeInsert możesz przypisywać ją do zmiennych trzecich, a potem sprawdzić czy którakolwiek ma wartość -6000. A najlepiej to upchaj wszystkie procedury do jednej, ładnie obsłuż wewnątrz i dopiero tą wrzuć do OnBeforeInsert


2011-03-03, 17:09
Wyświetl profil

Rejestracja: 2008-03-10, 14:01
Posty: 593
Post 
Fakt, to też niezły pomysł, ale...
...ale oprócz swoich mam też 'obce' procedurki i muszę je wywoływać oddzielnie.

_________________
zz


2011-03-04, 08:49
Wyświetl profil

Rejestracja: 2009-01-08, 11:43
Posty: 96
Pomógł: 1
Post 
Obce procedurki przecież też możesz wrzucić do jednej swojej.... No albo pododawaj te zmienne


2011-03-04, 11:08
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 8 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. Export do Excela z wydruków dok. sprzedaży.

w Programy Handlowe

Złoty

3

4250

2015-12-20, 11:32

rafal Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Dekretacja dok sprzedaży dla dwóch różnych pozycji

w Programy Handlowe

LukKWA

1

1894

2020-12-30, 14:53

rafal Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Własne pola dla dok. sprzedaży i magazynowych na wydruku

w Programowanie

symfoniahandel2019

1

4548

2020-01-02, 22:41

alan0z Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Załączniki Wybór towaru podczas wystawiania dok. sprzedaży/zakupu ?!

w Techniczne

metoda

3

2927

2018-01-02, 16:42

rafal Wyświetl najnowszy post



Kto jest online

Użytkownicy przeglądający to forum: Google [Bot] i 15 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant