|
[FiK premium 2008] ambasic - porównywanie dat
Autor |
Wiadomość |
user
Rejestracja: 2008-03-12, 15:45 Posty: 71 Pomógł: 1
|
[FiK premium 2008] ambasic - porównywanie dat
jest jakis sposob zeby pobrac rekordy z danej bazy z zakresu dat?
pod forte mozna to zrobic zapytaniem sql a tu?
getrec() tez albo mniejszy rowny albo wiekszy rowny..
nie ma dostepnego typu datowego, tylko pod stringa mozna podstawic a tu trochę zabawy zeby porównac daty...
|
2008-03-17, 12:42 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Mają tu znaczenie pola które są indeksowane i klucze.
Chętnie odpowiem na przykładzie konkretnego przykładu.
Napisz z jakiej tabeli jakie dane chcesz pobrać.
|
2008-03-17, 13:19 |
|
|
user
Rejestracja: 2008-03-12, 15:45 Posty: 71 Pomógł: 1
|
transakcje z okreslonego zakresu dat, czyli z "transakcje" wg "data" pobrac np. "dokid" ale kryterium jest tez konto i narazie wg tego filtru tylko pobieram dane, trzeba jednak rekordy ograniczyc tylko do wybranego zakresu dat
zakres wczytywany z formatki datedit-ami
widzę ze poszczegolne lata sa w osobnych katalogach.. czyli jesli data bedzie miala zakres 2006-2008 to trzeba osobno otwierac bazy z poszczegolnych katalogow..
chyba ze o czyms nie wiem..
|
2008-03-17, 13:24 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Istnieją przynajmniej trzy sposoby na dostanie się do bazy transakcji z poziomu AMBasic'a.
1. Za pomocą Obiektu integracji. Obiekt Rozrachunki. 2. Za pomocą ODBC - jak się okazuje Pervasive nie jest niezbędny. 3. Za pomocą GetRec itd...
3. Najważniejsze jest aby dobrać taki klucz z istniejących, który najlepiej sprawdzi się w szukaniu wg. naszych zał.
W tym przypadku użyjmy klucza "dataOkr". W kluczu tym mamy dwa pola
- rozliczona // status transakcji 0-nierozliczona, 1-rozliczona
- dataOkr // data okresu sprawozdawczego dokumentu
Kod: int bTra = open KatalogFirmy() + "07trans.dat" for base "transakcje" BaseError( bTra, 4)
string SzukajOd = "2005-01-01" string SzukajDo = "2005-06-31" int err
SetKey(bTra,"dataOkr") SetKeySeg(bTra,"rozliczona",0) SetKeySeg(bTra,"dataOkr",SzukajOd)
err = GetRec(bTra, GE)
while !err && GetField(bTra,"dataOkr") >= SzukajDo // tu coś robimy ze znalezionymi transakcjami
err = GetRec(bTra, NX) wend
Cytuj: widzę ze poszczegolne lata sa w osobnych katalogach.. czyli jesli data bedzie miala zakres 2006-2008 to trzeba osobno otwierac bazy z poszczegolnych katalogow.. chyba ze o czyms nie wiem..
Poszczególne lata są w osobnych katalogach. Jednak tabela Transakcje jest w katalogu wpólnym dla wszystkich lat. I wystarczy otwarcie tak jak w przykładzie.
|
2008-03-17, 23:00 |
|
|
user
Rejestracja: 2008-03-12, 15:45 Posty: 71 Pomógł: 1
|
zdaje się, że zeby się polączyc przez odbc potrzebny jest sterownik a ten instaluje się własnie z pervasivem.
o obiekcie rozrachunki jakos nie widze informacji w dokumentacji programu..
właciwie moje błedne zalozenie ze porownywanie dat jako 2 stringow nie bedzie prawidłowe - dzięki za info :)
a co do samych danych - nie wystarczą tylko "transakcje" bo potrzebne byly dane z dokumentow i z ksiąg i z bufora ale procedurka sparametryzowana załatwia temat.
|
2008-03-19, 11:50 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
user pisze: zdaje się, że zeby się polączyc przez odbc potrzebny jest sterownik a ten instaluje się własnie z pervasivem. Jeżeli nie mamy pervasiva możemy dostać się do bazy przez ODBC. Wymaga to jednak instalacji sterownika ODBC. Jest to bezpłatne narzędzie Kod: ODBC Interface 2.04 for Windows 95 and Windows NT ODBC Interface 2.04 for Windows Release 1 February 1998 README.TXT
(C) Copyright 1997, Pervasive Software Inc. All Rights Reserved
do pobrania ze strony : http://www.goldstarsoftware.com/FTP/od32v204.zip UWAGA! Nie można używać tego narzędzia razem z Pervasivem.user pisze: o obiekcie rozrachunki jakos nie widze informacji w dokumentacji programu.
Opis dostęny jest w dokumentacji obiektu integracji. Dokumentacja ta nie jest dostarczana z programem.
do pobrania : http://forum.mojasymfonia.pl/dload.php?action=category&id=4
|
2008-03-19, 15:58 |
|
|
user
Rejestracja: 2008-03-12, 15:45 Posty: 71 Pomógł: 1
|
dzieki raz jeszcze
|
2008-03-19, 18:41 |
|
|
darek.007
Rejestracja: 2007-12-13, 23:19 Posty: 367 Pomógł: 2
|
user pisze: transakcje z okreslonego zakresu dat, czyli z "transakcje" wg "data" pobrac np. "dokid" ...
BOGU dziękować transakcje są w jednej tabeli, rozliczenia również.
To dokumenty i zapisy są w tabelach rocznych, a do tego jeszcze bufor i ksiegi...
|
2008-04-02, 21:11 |
|
|
user
Rejestracja: 2008-03-12, 15:45 Posty: 71 Pomógł: 1
|
z tymi bazami z poszczegolnych lat mam problem z dostępem do danych: getrec zwraca bląd nr 9 (z dokument.: "Komunikat nr 9 Koniec pliku")
wystarczy ze podstawię pod ten sam kod sciezke do jakiejs bazy z katalogfirmy a nie z podkatalogu roku np. kontrahenci i wszystko pięknie czyta :D zmieniałam klucze, parametr (ge, eq, fs) - doszłam ze nie w tym rzecz. teraz juz probuję na kluczu "id" i z parametrem fs zeby bylo uniwersalnie. czy ktos moze wie o co chodzi z tym błędem? aha, dziwi mnie ze na bazie demo działa ale na bazie firmowej wywala.
|
2008-04-08, 16:02 |
|
|
darek.007
Rejestracja: 2007-12-13, 23:19 Posty: 367 Pomógł: 2
|
może kawałek kodu - będzie łatwiej odpowiedzieć
|
2008-04-08, 16:05 |
|
|
user
Rejestracja: 2008-03-12, 15:45 Posty: 71 Pomógł: 1
|
na demo działają obydwa.
na bazie firmowej:
ten nie działa (rok bez znaczenia)
Kod: string dir2=katalogfirmy() +"2006\\" string dostep= dir2 + "07dokum.dat" int tr = Open dostep For Base "dokumenty" baseerror(tr,4) SetKey(tr,"id" ) SetKeySeg(tr,"id",0) int errtr=Getrec(tr,FS) if errtr!=0 then error using "Nr błędu: %d", errtr while !errtr print using "\n%s",getfield(tr,"skrot") errtr=getrec(tr,NX) wend ten działa Kod: string dir2=katalogfirmy() string dostep= dir2 + "08kontr.dat" int tr = Open dostep For Base "kontrahenci" baseerror(tr,4) SetKey(tr,"id" ) SetKeySeg(tr,"id",0) int errtr=Getrec(tr,FS) if errtr!=0 then error using "Nr błędu: %d", errtr while !errtr print using "\n%s",getfield(tr,"nazwa") errtr=getrec(tr,NX) wend
|
2008-04-08, 18:51 |
|
|
darek.007
Rejestracja: 2007-12-13, 23:19 Posty: 367 Pomógł: 2
|
Może dlatego, że w DEMO są zaksięgowane dokumenty a w Twojej firmie jeszcze nie
Kod: int tr = Open katalogroku()+"07dok_b.dat" for base "buf_dokum" baseerror(tr,4)
int errtr=Getrec(tr,FS) if errtr!=0 then error using "Nr błędu: %d", errtr while !errtr print using "\n%s",getfield(tr,"skrot") errtr=getrec(tr,NX) wend
Ot poprostu otwierasz bazę dokumentów zaksiegowanych a nie tych w buforze.
Spróbuj z tym powyżej...
Ostatnio zmieniony 2008-04-08, 22:38 przez darek.007, łącznie zmieniany 1 raz
|
2008-04-08, 22:34 |
|
|
user
Rejestracja: 2008-03-12, 15:45 Posty: 71 Pomógł: 1
|
nie. ja wyraznie napisałam że problem dotyczy baz podzielonych na lata. przeciez nie bede podawala przykladow na wszystkie mozliwosci :D mial byc przyklad to byl - akurat ostatniej bazy jaką testowalam. generalnie w raporcie glownym wykrzacza się akurat na bazie 06zap_b.dat - zapisy w buforze. teraz testuję sobie tylko na tym małym fragmencie kodu bo tu lezy problem. tylko nie wiem w czym.
|
2008-04-09, 00:35 |
|
|
darek.007
Rejestracja: 2007-12-13, 23:19 Posty: 367 Pomógł: 2
|
Poprzedni kawałek naprawiłem.
Teraz dlaczego się wykrzacza na zapisach w buforze - niewiem.
Dopóki nie zobaczę nie będę mógł pomóc
|
2008-04-09, 00:59 |
|
|
user
Rejestracja: 2008-03-12, 15:45 Posty: 71 Pomógł: 1
|
dobrze. napiszę jeszcze raz.
Kod: int errtr string dir2=katalogfirmy() +"2006\\" string dostep= dir2 + "06zap_b.dat" int tr = Open dostep For Base "buf_zapisy" baseerror(tr,4) SetKey(tr,"virtualne" ) SetKeySeg(tr,"synt",502) SetKeySeg(tr,"poz1",7) errtr=GetRec(tr,GE) if errtr!=0 then error using "Nr błędu: %d", errtr
while !errtr print using "%0.2f\n",getfield(tr,"kwota") errtr=getrec(tr,NX) wend
a konkretnie to co naprawiłes? bo widzę tylko usunięte
SetKey(tr,"id" ) SetKeySeg(tr,"id",0)
co w rzeczy samej nie moze stanowic problemu bo jest ignorowane przez "fs". a w moim przykladzie jest, poniewaz docelowo nie chcę pobierac ilus-tam tysięcy rekordów, tylko je przefiltrować, wiec i tak te polecenia muszą byc zastosowane.
no i zmieniles sciezkę, ale tu musi być string składany bo nie chodzi wylącznie o dane z katalogroku ale z róznych lat. i tez nie w tym rzecz, gdyby string byl zle złozony komunikat byłby inszy (np. o braku pliku).
edit:
aha, i z gory zaznaczam ze bląd jest bez względu na to czy podam wartosci wszystkich SetKeySeg w tym kluczu czy tylko te co w tym kodzie. jesli podam wszystkie poziomy analityki i date (a podaję zeby ograniczyc zakres danych) to i tak jest bląd.
|
2008-04-09, 11:51 |
|
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 20 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
|
|
|
|