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



Odpowiedz w temacie  [ Posty: 4 ] 
Budowa formatki z typami dokumentów i seriami numeracji HMP 
Autor Wiadomość

Rejestracja: 2010-02-10, 21:24
Posty: 260
Pomógł: 4
Post Budowa formatki z typami dokumentów i seriami numeracji HMP
Witam,
Mam problem z budowa formatki. Chodzi mi o to by na formatce były dwie listy typu cmbbox, jedna z typami dokumentów zakupu, druga z seriami dokumentów , ale ma prezentowć tylko serie zwiazane z typem dokumentu wybranym na pierwszej liście
Pierwsza listę zbudowałem bez problemu i prezentuje mi żadane typy dokumentów. Natomiast mam problem z funkcja OnCommand, bo nie wiem jak dynamicznie budować listę z seriami numeracji w zależnosci od wyboru typu dokumentu którego dokonałem.

Poiżej fragmenty kodu:
Kod:
setkey(bXt,"super")
setkeyseg(bXt,"super",7010)
int idDefDok = GetRec(bXt,FS)
int ik = 1
int dl1 = Size(stabTypDk)
int dl2
int rodzajDok

while !idDefDok
   rodzajDok = GetField(bXt, "subtypi")
   if GetField(bXt, "subtypi") == 40 &&  (GetField(bXt, "super") == 7010 || GetField(bXt, "super") == 7012) then
      if ik>1 then dl2 = grow stabTypDk,1
      stabTypDk(ik) = GetField(bXt, "kod")
      ik+=1
   endif
   idDefDok=GetRec(bXt,NX)
wend

int sub OnCommand_E(int id, int msg)
      IF ID == FRM_TYPDK THEN
      setkey(bXt,"kod")
      setkeyseg(bXt,"kod",sTyp)
      u=GetRec(bXt,FS)
      while !u && getfield(bxt,"kod") == sTyp //&& getfield(bxt,"typi")==32
               idd =GetField(bXt,"id")
               setkey(BxT,"super")
               setkeyseg(bXt,"super",idd)
               p=getrec(bXt,FS)
               while !p
                  if ik>1 then dl2 = grow stabseriaDk,1
                  stabseriaDk(ik) = GetField(bXt, "kod")
                  
                  ik+=1
                  p=getrec(bXt,NX)
               wend
         
         
      u=GetRec(bXt,NX)   
      wend
      ENDIF
      

endsub

int sub ExForm()

   int lrv
   //sPlk = GetIni("Excel","sciezka")
   Form "Wybór Pliku - import WB Nordea",550,310
      Group "Otwórz plik", 10, 10, 520, 125
      edit "Nazwa &Pliku",sPlk,120,30,290,20
      button "Przeglądaj",420,27,90,25,PrzegladajPlik()
      frm_typdk=cmbbox "Typ Dokumentu: ",sTabTypDk,sTyp, 120,80,100,90
      frm_sn=cmbbox "Seria numeracji: ",sTabSeriaDk,sSeria, 120,110,100,90
      button "O&K",160,240,80,25,2
      button "&Anuluj",280,240,80,25,-1

   lrv = execform OnCommand_E


   if lrv  <= 0 then error ""
endsub

Pomoże ktoś?


2015-06-26, 18:32
Wyświetl profil
Autor Wiadomość
 


Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: Budowa formatki z typami dokumentów i seriami numeracji
pokaż jakiś działający kawałek kodu, który można przetestować.

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

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


2015-06-29, 08:10
Wyświetl profil

Rejestracja: 2010-02-10, 21:24
Posty: 260
Pomógł: 4
Post Re: Budowa formatki z typami dokumentów i seriami numeracji
Cały kod - dziala - problem dla mnie to tylko to by na formate były dwa rozwijane pola - pierwsze to typ dokumentu zakupu zdefiniowany w systemie - to działa, drugie to serie numeracji ale tylko dla typu dokumentu wybranego z pierwszej rozwijanej listy.
Wszystko rozbija się o funkcje OnCommand
Kod:

string sTabTypDk(1) //= "FVZ","FVS","WNT"
string sTabSeriaDk(1)//= "sFVZ","sFVS","sWNT"

string sTyp,sSeria,sDataW,sNrObcy,sDataO,sDataZ,sKodKh,sOpis,sRejPlat,sFormPlat,sKodTw,sIlosc,sCenaSp,sPlk,sWaluta,sKurs
int wyst_czy_buf,licz,frm_typdk,frm_sn
long idd,u,p
STRING TEST

wyst_czy_buf = 0

//=========================================
int bXt = Open KatalogFirmy()+"51xt.dat" For base "XT"
BaseError( bXt,4 )

setkey(bXt,"super")
setkeyseg(bXt,"super",7010)
int idDefDok = GetRec(bXt,FS)
int ik = 1
int dl1 = Size(stabTypDk)
int dl2
int rodzajDok

while !idDefDok
   rodzajDok = GetField(bXt, "subtypi")
   if GetField(bXt, "subtypi") == 40 &&  (GetField(bXt, "super") == 7010 || GetField(bXt, "super") == 7012) then
      if ik>1 then dl2 = grow stabTypDk,1
      stabTypDk(ik) = GetField(bXt, "kod")
      ik+=1
   endif
   idDefDok=GetRec(bXt,NX)
wend   
ik=1
dl2=0
//=======================================


sTyp = sTabTypDK(1)
sSeria = sTabSeriaDk(1)

record rec_
   string recKodtw[150]
   string recIlosc[20]
   string recWartn[30]
   string recKoszt[30]
endrec

rec_ recPoz(1)

int sub OnCommand_E(int id, int msg)
      IF ID == FRM_TYPDK THEN
      setkey(bXt,"kod")
      setkeyseg(bXt,"kod",sTyp)
      u=GetRec(bXt,FS)
      while !u && getfield(bxt,"kod") == sTyp //&& getfield(bxt,"typi")==32
               idd =GetField(bXt,"id")
               setkey(BxT,"super")
               setkeyseg(bXt,"super",idd)
               p=getrec(bXt,FS)
               while !p
                  if ik>1 then dl2 = grow stabseriaDk,1
                  stabseriaDk(ik) = GetField(bXt, "kod")
                  
                  ik+=1
                  p=getrec(bXt,NX)
               wend
         
         
      u=GetRec(bXt,NX)   
      wend
      ENDIF
      

endsub
int sub PrzegladajPlik()

   sPlk = FileDlg( 1, "Pliki (*.txt)|*.txt|Pliki (*.csv)|*.csv|Wszystkie pliki (*.*)|*.*" )
   if sPlk then
         PrzegladajPlik = 1
      else
         PrzegladajPlik = 0
   endif

endsub
//Formatka
int sub ExForm()

   int lrv
   //sPlk = GetIni("Excel","sciezka")
   Form "Wybór Pliku - import WB Nordea",550,310
      Group "Otwórz plik", 10, 10, 520, 125
      edit "Nazwa &Pliku",sPlk,120,30,290,20
      button "Przeglądaj",420,27,90,25,PrzegladajPlik()
      frm_typdk=cmbbox "Typ Dokumentu: ",sTabTypDk,sTyp, 120,80,100,90
      frm_sn=cmbbox "Seria numeracji: ",sTabSeriaDk,sSeria, 120,110,100,90
      button "O&K",160,240,80,25,2
      button "&Anuluj",280,240,80,25,-1

   lrv = execform OnCommand_E


   if lrv  <= 0 then error ""
endsub


ExForm()

int plk = open splk for input
if !plk then Message using "Nie odnazeziono pliku:\n%s", sPlk :error ""


while input #plk, buf
   licz+=1
   if licz > 1 then
       if find regular "{*}\t{*}\t{*}\t{*}\t{*}\t{*}$" then
   
            if recPoz(1).recKodtw then grow recPoz,1
            recPoz(licz-1).recKodtw = regular 2
            recPoz(licz-1).recIlosc = regular 4
            recPoz(licz-1).recWartn = regular 5
            recPoz(licz-1).recKoszt = regular 6
            
            
       endif
   else
      if find regular "{*}\t{*}$" then
         sWaluta = regular 1
         sKurs = regular 2
      endif
   endif

wend



//Tworzenie dokumentu

   iorec rec
   int count, i
   long iddk


   rec.SetField( "typ_dokumentu", sTyp )
   rec.setfield( "seria", sSeria )
   rec.SetField( "data_Wystawienia", sDataW )   
   rec.setfield( "numer_obcy", sNrObcy )
   rec.setfield( "data_obcy", sDataO )
   rec.setfield( "data_zakupu", sDataZ )   
   rec.setfield( "waluta", sWaluta )
   rec.setfield( "kurs", sKurs )   

   rec.SetField( "Khkod", sKodKh )   

   rec.setfield("opis", sOpis )
   rec.SetField("rezerwacja", "0")
   rec.setfield("rejestr_platnosci", sRejPlat )
   rec.setfield("forma_platnosci", sFormPlat )    

   count = size(recPoz)

   for i=1 to i>count      
      rec.BeginSection("Pozycja dokumentu")   
            rec.SetField("kod", recPoz(i).recKodTw)
            rec.SetField("ilosc", recPoz(i).recIlosc)
            rec.SetField("cena", recPoz(i).recWartn)
            rec.SetField("koszt", recPoz(i).recKoszt)
      rec.EndSection()
   Next i
   
   iddk=rec.importZK()
   
   if wyst_czy_buf == 1 then//1 - wystawia, 0, pozostawia w buforze   
      iddk=WystawDokumentHandlowy(iddk,1,0)
   endif

nooutput()


2015-06-29, 13:43
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 4000
Pomógł: 448
Post Re: Budowa formatki z typami dokumentów i seriami numeracji
Masz trochę błędów. Zwłaszcza w OnCommand.

Kiedyś zamieszczałem taki przykład, może Cię naprowadzi

Załącznik:
hmmixwyb01.jpg
hmmixwyb01.jpg [ 54.11 KiB | Przeglądany 3279 razy ]


Kod:
//"mixdrz.sci","Mix-soft Drzewo - include",70012,0,1.0.4,SYSTEM
//" Raporty Mix-soft",2400,14,62

// typy kolumn
#define ftString   0   
#define ftInt      1   
#define ftLong      16
#define ftMoney      2
#define ftDate      3
#define ftBitmap      17
#define ftCheck      7
#define ftDrop      128

// kolumny
#define   COL_NAZWA   0
#define   COL_OPCJA   1
#define   COL_WART   2
#define   COL_VALUE   3



#define COL_dg_SKROT   0
#define COL_dg_ID      1
#define COL_dg_CHECK   2
#define COL_dg_NAZWA      3
#define COL_dg_TYP      4
#define   COL_dg_VALUE   5
#define   COL_dg_SERIA   6


string sCo
int iU

dispatch dgDok

//------------------------------------------------
int Sub AddColumn(dispatch g, string ColName, int ColWidth, int ColType, int ColSize, int ColHidden, int ColLocked)
//------------------------------------------------
   int col

    G.ColumnCount = G.ColumnCount + 1
    col = G.ColumnCount - 1
    G.Columns(col).Name       = ColName
    G.Columns(col).Width       = ColWidth
    G.Columns(col).FieldType(ColType,ColSize)
    G.Columns(col).hidden       = ColHidden
    G.Columns(col).Locked       = ColLocked

endsub



//----------------------------------------------------------------------------------------------------
int Sub WczytajListeDok()
//----------------------------------------------------------------------------------------------------   

string sTypy = GetIni("Dokumenty", (using "%l",CurrentMag), Katalog()+"mixdok.ini")

dispatch dRow

   dgDok.ColumnCount = 0
   dgDok.TreeMode = 1

   AddColumn(dgDok, "Nazwa", 150, ftString,100, 0, 1)   
   AddColumn(dgDok, "Id", 60, ftLong,0, 1, 0)                  
   AddColumn(dgDok, "A", 20, ftCheck,0, 1, 1)   
   AddColumn(dgDok, "Nazwa", 60, ftString,100, 1, 1)            
   AddColumn(dgDok, "typ", 60, ftLong,0, 1, 0)            
   AddColumn(dgDok, "Value", 160, ftString,100, 0, 0)
   AddColumn(dgDok, "Seria", 60, ftString,100, 1, 0)


   dgDok.Template.SetFont(0, "Arial", 14, 1)
   dgDok.Template.SetFont(1, "Arial", 14, 0)
   dgDok.Template.SetFont(-1, "Arial", 14, 1)
   dgDok.RowHeader = 0

            dRow = dgDok.InsertRow(dgDok.RowCount)
            dRow.Value(COL_dg_SKROT) = "Dokumenty"
            dRow.Value(COL_dg_ID) = 7001
            dRow.Value(COL_dg_NAZWA) = ""

         

   BaseXT xt
   int err
   int k

   BaseDK dok

for k = 1 to k > dgDok.RowCount
   xt.SetKey("super")
   xt.SetKeySeg("super",dgDok.Rows(k-1).Value(COL_dg_ID))
   xt.SetKeySeg("kod","")   

   err = xt.GetRec(GE)
   while err == 0
      if xt.GetField("super") != dgDok.Rows(k-1).Value(COL_dg_ID) then exit
         
                           dok.GetRecById( xt.GetField("klient") )
            
            
                           dRow = dgDok.InsertChildRow(k-1,0)
                           dRow.Value(COL_dg_SKROT) = xt.GetField("kod")
                           dRow.Value(COL_dg_ID) = xt.GetField("id")
                           dRow.Value(COL_dg_TYP) = xt.GetField("typ")
                              if xt.GetField("typ") == "32" then
                                 dRow.Value(COL_dg_VALUE) = dok.GetField("nazwa")
                                 dRow.Value(COL_dg_SERIA) = dok.GetField("odadres")
                              endif
                           if xt.GetField("flag") == 128 then dRow.Value(COL_dg_CHECK) = 1

      err = xt.GetRec(NX)
   wend
next k


// porozwijaj wszytkie gałęzie
for k = 1 to k > dgDok.RowCount
   dgDok.Rows(k-1).Expanded = 1
next k
   


endsub

//------------------------------------------------
int sub Wybierz()
//------------------------------------------------

dispatch dRow
iorec io
long iddok

   dRow = dgDok.Rows(dgDok.CurRow)

// ...

endsub

//------------------------------------------------
int sub OnCommandDok(int id, int msg)
//------------------------------------------------

   if id == 0 && msg == 0 then
      WczytajListeDok()
   endif

endsub


//------------------------------------------------
int sub PokazForme()
//------------------------------------------------

//if dk.GetField("subtypi") == 41 then exit

   Form "Mix-soft Wybór dokumentu",375,416
        control "grid", dgDok, 5,5,360,340
        button "Anuluj", 95,355,80,25, -1
        button "Wybierz", 5,355,80,25, Wybierz()

   int ko = execform OnCommandDok

endsub

PokazForme()

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

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


2015-06-29, 16:04
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 4 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. Załączniki Zmiana numeracji dokumentów z rocznej na miesięczną FK2016A

w Programy Księgowe

karol

2

2683

2017-02-04, 09:20

karol Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Anulowanie wielu dokumentów HMP 3.40

w Programowanie

vanszic

2

3058

2008-11-17, 13:36

vanszic Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Dodanie raportu - budowa nagłówka

w Programowanie

keczer

2

3163

2008-10-15, 23:09

rafal Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Budowa pliku e_kontrah.txt

w Techniczne

dziadek02

3

3214

2011-03-24, 16:48

wrob Wyświetl najnowszy post



Kto jest online

Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 21 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:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant