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

[FiK premium 2008] ambasic - porównywanie dat
https://forum.mix-soft.pl/viewtopic.php?f=15&t=66
Strona 1 z 2

Autor:  user [ 2008-03-17, 12:42 ]
Tytuł:  [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... :roll:

Autor:  rafal [ 2008-03-17, 13:19 ]
Tytuł: 

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ć.

Autor:  user [ 2008-03-17, 13:24 ]
Tytuł: 

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.. :shock:
chyba ze o czyms nie wiem..

Autor:  rafal [ 2008-03-17, 23:00 ]
Tytuł: 

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.

Autor:  user [ 2008-03-19, 11:50 ]
Tytuł: 

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 :evil: - 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.

Autor:  rafal [ 2008-03-19, 15:58 ]
Tytuł: 

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

Autor:  user [ 2008-03-19, 18:41 ]
Tytuł: 

dzieki raz jeszcze :-D

Autor:  darek.007 [ 2008-04-02, 21:11 ]
Tytuł: 

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...

Autor:  user [ 2008-04-08, 16:02 ]
Tytuł: 

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.

Autor:  darek.007 [ 2008-04-08, 16:05 ]
Tytuł: 

może kawałek kodu - będzie łatwiej odpowiedzieć

Autor:  user [ 2008-04-08, 18:51 ]
Tytuł: 

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


Autor:  darek.007 [ 2008-04-08, 22:34 ]
Tytuł: 

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...

Autor:  user [ 2008-04-09, 00:35 ]
Tytuł: 

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.

Autor:  darek.007 [ 2008-04-09, 00:59 ]
Tytuł: 

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 :-(

Autor:  user [ 2008-04-09, 11:51 ]
Tytuł: 

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.

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