mojaSymfonia FORUM https://forum.mix-soft.pl/ |
|
Budowa formatki z typami dokumentów i seriami numeracji HMP https://forum.mix-soft.pl/viewtopic.php?f=15&t=6708 |
Strona 1 z 1 |
Autor: | wojtek [ 2015-06-26, 18:32 ] |
Tytuł: | 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ś? |
Autor: | rafal [ 2015-06-29, 08:10 ] |
Tytuł: | Re: Budowa formatki z typami dokumentów i seriami numeracji |
pokaż jakiś działający kawałek kodu, który można przetestować. |
Autor: | wojtek [ 2015-06-29, 13:43 ] |
Tytuł: | 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() |
Autor: | rafal [ 2015-06-29, 16:04 ] |
Tytuł: | 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 [ 54.11 KiB | Przeglądany 3282 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() |
Strona 1 z 1 | Strefa czasowa UTC+1godz. [letni] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |