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

Księgi czy bufor, jak rozpoznać
https://forum.mix-soft.pl/viewtopic.php?f=15&t=5232
Strona 1 z 1

Autor:  qres [ 2013-10-20, 11:07 ]
Tytuł:  Księgi czy bufor, jak rozpoznać

FiK 2013
Witam ponownie
ja dalej z uporem maniaka :)
Jesteśmy na Liście Dokumentów, mamy id dokumentu wybranego "prawoklikiem" (Arg0) i jeśli chcemy korzystać z danych zawartych w bazie a nie z "grid'a", pojawia się problem, jak nasz raport ma rozpoznać czy to lista z bufora czy z ksiąg ?
Radzę sobie następującym kodem, opracowanym na podstawie raportów zawartych w FiK oraz informacji zgromadzonych na tym forum :

Kod:
#include "dbutil.sci"
#include "wrap.sci"

string    skZlisty
long    idZlisty,nrZlisty, ZrodloDb
int errDok(2),errDo
#define XROWSDATA userObject

         idZlisty   = XROWSDATA.item( 1 ).id
         nrZlisty   = val(Mid(XROWSDATA.item( 1 ).numer   ,5))
         skZlisty   = Mid(XROWSDATA.item( 1 ).numer   ,1,4)
            buf = skZlisty
            while replace " ", ""
            wend
            skZlisty = buf         

BASEHANDLE bKt, bKth, bDokTab(2),bDok(2),bD,bDo

   bDokTab( 1 ) = dbOpenDokBase( indeksRoku(), 0, 0 ) // księgi
   bDokTab( 2 ) = dbOpenDokBase( indeksRoku(), 1, 0 ) // bufor
      bDok(1) = bDokTab( 1 )
      bDok(2) = bDokTab( 2 )
      SetKey( bDok(1), "id" )
      SetKeySeg( bDok(1), "id", idZlisty )
      errDok(1) = GetRec( bDok(1), EQ )

      SetKey( bDok(2), "id" )
      SetKeySeg( bDok(2), "id", idZlisty )
      errDok(2) = GetRec( bDok(2), EQ )

         if  (GetField( bDok(1), "id" )==idZlisty)&&(GetField( bDok(1), "numer" )==nrZlisty)&&(GetField( bDok(1), "skrot" )==skZlisty) Then
               ZrodloDb = 0
         else
               ZrodloDb = 1
         endif


   DbClose(bDokTab( 1 ))
   DbClose(bDokTab( 2 ))
      


      bD = dbOpenDokBase( indeksRoku(), ZrodloDb, 0 )
      bDo = bD
               SetKey( bDo, "id" )
               SetKeySeg( bDo, "id", val(Arg0) )
               errDo = GetRec( bDo, EQ )
/*
// tu robimy co chcemy z danymi, oczywiście bez przesady :)            
*/
   DbClose(bD)


Pytanie moje brzmi, czy jest zmienna , właściwość lub metoda pozwalająca w prostszy sposób określić źródło danych z których powinniśmy skorzystać ?
PS. spokojnie można "zaremować" operacje tyczące się bazy opatrzonej indeksem 2 :)

Autor:  qres [ 2013-10-21, 11:18 ]
Tytuł:  Re: Księgi czy bufor, jak rozpoznać

Sorki że tak post po poście ale nie mogę edytować poprzedniego.
Poniżej poprawiony kod pozwalający określić źródło danych Listy Dokumentów (może komuś się przyda)

Kod:
#include "dbutil.sci"
#include "fkutil.sci"
#include "wrap.sci"


long    idZlisty, ZrodloDb
int errDo

#define XROWSDATA userObject
   idZlisty   = XROWSDATA.item( 1 ).id

BASEHANDLE bKt, bKth, bD,bDo

   bD = dbOpenDokBase( indeksRoku(), 1, 0 ) // bufor
      bDo = bD
      SetKey( bDo, "id" )
      SetKeySeg( bDo, "id", XROWSDATA.item( 1 ).id )
      errDo = GetRec( bDo, EQ )

         if  dbNrEwToStr_Dok(bDo)==XROWSDATA.item( 1 ).numer Then
               ZrodloDb = 1
         else
               ZrodloDb = 0
         endif

      if ZrodloDb == 0 then
         DbClose(bD)
            bD = dbOpenDokBase( indeksRoku(), ZrodloDb, 0 )
            bDo = bD
      endif
               SetKey( bDo, "id" )
               SetKeySeg( bDo, "id", val(Arg0) )
               errDo = GetRec( bDo, EQ )

            
   if ZrodloDb == 1 Then
      Print "Dane pobrane z bufora";LF
   else
      Print "Dane pobrane z ksiąg";LF
   endif
Print "----------------";LF
Print "Arg0      :";Arg0;LF
Print "id        :";GetField( bDo, "id");"*";LF
Print "skrot     :";GetField( bDo, "skrot");"*";LF
Print "numer     :";GetField( bDo, "numer");"*";LF
Print "numer ewid:";dbNrEwToStr_Dok(bDo);"*";LF
Print "nr. dokum :";GetField( bDo, "nazwa");"*";LF
Print "treść     :";GetField( bDo, "tresc");"*";LF
Print "kontrahent:";GetField( bDo, "kontrahent");"*";LF
Print "data dokum:";GetField( bDo, "datadok");"*";LF
Print "data wprow:";GetField( bDo, "datawpr");"*";LF
Print "data oper :";GetField( bDo, "dataoper");"*";LF
Print "kwota     :";GetField( bDo, "kwota");"*";LF
Print "sygnatura :";GetField( bDo, "sygnatura");"*";LF

   DbClose(bD)

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