mojaSymfonia FORUM https://forum.mix-soft.pl/ |
|
Pervasive - Wprowadzanie kursu walut? https://forum.mix-soft.pl/viewtopic.php?f=15&t=5334 |
Strona 1 z 4 |
Autor: | grabber [ 2013-11-26, 11:21 ] |
Tytuł: | Pervasive - Wprowadzanie kursu walut? |
Witam, chciałem spytać się czy istnieje możliwość dodania przy pomocy raportów własnego wpisu do kursu walut...? |
Autor: | rafal [ 2013-11-26, 11:35 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
o jakim programie piszesz? |
Autor: | grabber [ 2013-11-26, 12:06 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Oczywiście chodzi o Symfonia Handel 2013. |
Autor: | rafal [ 2013-11-26, 12:35 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Kod: int sub DodajKurs(string sWaluta, string sData, float fKurs) BaseWL wl wl.Clear() wl.SetField("data", sData ) wl.SetField("waluta", sWaluta ) wl.SetField("kurs", fKurs ) wl.SetField("kurss", fKurs ) wl.SetField("kursk", fKurs ) wl.Insert() wl.DoUpdate() endsub DodajKurs("EUR","2012-10-01",4.0) UWAGA Rozwiązanie ingeruje w dane programu |
Autor: | grabber [ 2013-11-26, 13:24 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Cytuj: UWAGA Rozwiązanie ingeruje w dane programu Czyli rozumiem że jak za rok uszkodzi mi się baza z zupełnie innego powodu, to sage powie mi że to moja wina bo: 11 miesięcy, 4 dni, 7h, 23min temu wprowadziłem ręcznie prawidłowo kurs do programu i to pewnie tego wina...? Tak czy inaczej bardzo dziękuje za kod... |
Autor: | grabber [ 2013-11-26, 20:14 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Sorry że truje ale proszę jeszcze o jedną informacje: - Chcę pobrać z bazy ostatnią (najnowszą) datę kursu walut jaka została wpisana ale kiedy pobieram z nowo otwartego wskaźnika tabeli to odczytuje mi najstarszy wpis... Jak zrobić aby odczytał mi aktulany ostatni wpis? Bardziej szczegółowo: Kod: string data BaseWL wl data = wl.GetField("data") message data Jak odczytać inny wiersz niż pierwszy po otwarciu tabeli? |
Autor: | rafal [ 2013-11-26, 23:05 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Istnieje funkcja KursWaluty Kod: Print KursWaluty("EUR") Możesz także sam czytać z bazy Kod: float sub Kurs(string sWaluta, string sData) BaseWL wl wl.SetKey( "waluta" ) wl.SetKeySeg( "waluta", sWaluta) wl.SetKeySeg( "data", sData) if !wl.GetRec( EQ ) then Kurs = wl.GetField( "kurs" ) endsub Print Kurs("EUR","2013-11-26") Tylko pamiętaj, że w jednym dniu waluta może mieć kilka kursów. |
Autor: | grabber [ 2013-11-27, 18:40 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Wiem wiem że waluta może mieć różne wartości jednego dnia... Mi potrzebne tylko aby sprawdzić czy w danym dniu ktoś już wprowadzał kurs... A jeśli nie to zostanie pobrany z nbp i doda się sam do listy :) Wiem że to lenistwo... ;P |
Autor: | rafal [ 2013-11-27, 18:51 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Ciekawy jestem jak będziesz pobierał kursy w NBP. Masz już jakiś pomysł? |
Autor: | grabber [ 2013-11-27, 19:15 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Napisałem aplikacje (nie związaną z symfonią) która pobiera z nbp ostatni kurs waluty EURO (w tym przypadku bez parametru) lub kurs dowolnej waluty z dowolnego dnia podawany jako parametr aplikacji czyli ShellExecute("x:\application.exe EUR 01012014") Całość zapisuje do pliku w postaci: 1 linijka WALUTA, 2 linijka DATA, 3 linijka ŚREDNI KURS Dalej pozostaje już odczytać plik w symfonii... |
Autor: | rafal [ 2013-11-27, 20:00 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Napisz jak Twoja aplikacja pobiera kurs z NBP. Moze uda sie to zaimplementowac w AmBasicu. Wystarczy Execute(). ShellExecute jest do otwierania Np. Pliku JPG za pomoca domyslnego programu. Kod: ShellExecute("c:\zdjecie.jpg") Poza tym przy execute raport leci dalej i nie czeka az Twoja aplikacja sciagnie kurs. Tak wiec moze cos sie wysypac. Poszukaj na forum sposobu na uruchomienie zewnetrznej aplikacji i poczekanie na jej zamkniecie. |
Autor: | grabber [ 2013-11-27, 20:48 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Spokojnie... znam oba polecenia ShellExecute i Execute. A napisałem ShellExecute bo akurat często używam go w innych językach... Co do samego sposobu pobierania z NBP to: Aby dostać aktualny (ostatni) kurs wystarczy: 1. Pobrać plik dane z adresu: http://www.nbp.pl/kursy/xml/LastA.xml 2a. Rozdzielić do tablicy kolejno wszystkie linijki z pliku i poszukać stringu <kod_waluty>EUR</kod_waluty> jeśli się znajdzie to należy przyjąć że następna linijka będzie zawierać <kurs_sredni> "wartość waluty" </kurs_sredni> więdz wyciągamy wartość pomiędzy ciągiem <kurs_sredni> a </kurs_sredni> lub 2b. Jeśli można wczytać cały plik do jednego stringa to użyć RegExp aby pobrać ciąg liczbowy pomiędzy <kod_waluty>EUR a </kurs_sredni> ....(nie wspominam tu oczywiście o sprawdzaniu błedów i ewentualne porównywanie z poprzednimi kursami w celu upewnienia się czy czasem waluta z 4.2019 zmieniła wartość na 174.4323...) Kwestia pobierania z innych dat wymaga dodatkowo sprawdzenia w pliku http://www.nbp.pl/kursy/xml/dir.txt wybranego pliku XML dla danego dnia... ale to nie problem więc jeśli zaczniesz zabawę z pisaniem tego w AMBasicu to Ci pomogę... (PS. Czasem lepiej zrobić ShellExecute i zrobić timer w oczekiwaniu na rezultat programu niż blokowanie całej aplikacji do czasu zakończenia procesu... który nie zawsze musi się skończyć ;) (Czy w AM są jakieś timery, countery lub tym podobne?? bo jak nie to pozostaje tylko porównanie wartości zwracanych przez funkcje Time) |
Autor: | wrob [ 2013-11-27, 22:51 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Soreki ze sie wtrace do waszej dyskusji ale nurtuje mnie pytanie: Ale po co zaczynac to robić? - juz dawno (od ponad 4 lat) takie rozwiania są napisane do symfonii (od paru rożnych firm )- korzystające pliku xml z nbp i wget albo dispatch ie ( Kontakt w stopce - zmodyfikowane przez Administrator FORUM) i nawet sage ma na stronie swoj dodatek tez (w rozwiązaniach dodatkowych)- wiec wybor jest spory co do regexp - popelnilem taka wersja w ambasicu i dziala sprawnie od lat ale teraz ostatnio jednak uważam ze lepiej do parsowania uzyc biblioteki XMLdom - szybciej sie czyta i ladniej wyglada programistyczne - biblioteka jest zazwyczaj w kazdym windowsie gdzies a jak nie ma to mozna sobie pobrac np stad http://www.microsoft.com/en-us/download ... px?id=3988 |
Autor: | grabber [ 2013-11-28, 07:07 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
:) Pewnie że łatwiej użyć rozwiązania innych... ale dawać sage za taką przyjemność 400 netto...? Nie że jestem zboczony ale chyba wole wydać te pieniądze na inne przyjemności :) Co do sposobu to oczywiste że najbardziej logiczne jest użyć MSXML... bo po to XML był stworzony... Ale w przypadku gdy program ma odczytać jedną małą wartość float z pliku to powoływanie specjalnie obiektu MSXML jest w tym przypadku tak samo wydajne jak regexp czy bardziej proste rozwiązania. Zasada jest taka że zawsze należy oceniać wielkość przedsięwzięcie do opłacalności używania zewnętrznych rozwiązań... Jak to powiadał wujek Sam: Nie pytaj co twój Windows może zrobić dla Ciebie, zapytaj co tym możesz zrobić za twojego windowsa... |
Autor: | rafal [ 2013-11-28, 11:31 ] |
Tytuł: | Re: Pervasive - Wprowadzanie kursu walut? |
Kod: limit 200000 float sub PobierzKurs(string sWaluta, string sData) date dDataNBP dDataNBP.FromStr( sData ) dispatch fso = "Scripting.FileSystemObject" dispatch req = "Microsoft.XmlHttp" dispatch xml = "Microsoft.XMLDOM" dispatch tmpFile dispatch dNull dispatch xmlPOZYCJE dispatch xmlPOZYCJA dispatch xmlKOD_WALUTY dispatch xmlKURS_SREDNI string sWybranyXML string tmp = KatalogFirmy() + "kurs.tmp"// plik tymczasowy string url = "http://www.nbp.pl/kursy/xml/dir.txt" int iPozycje req.open ("GET", url, 0) req.send fso.CreateTextFile( tmp, 1 ) tmpFile = fso.OpenTextFile( tmp, 2 ) tmpFile.Write( req.responseText ) tmpFile.Close tmpFile = dNull tmpFile = fso.OpenTextFile( tmp, 1 ) while !tmpFile.AtEndOfStream buf = tmpFile.ReadLine if find regular (using "a???z%s%2.2d%2.2d", mid((using "%d", dDataNBP.Year ),3,2), dDataNBP.Month, dDataNBP.Day) then sWybranyXML = buf wend xml.async = 0 xml.Load( "http://www.nbp.pl/kursy/xml/" + sWybranyXML +".xml" ) xmlPOZYCJE = xml.getElementsByTagName("pozycja") for iPozycje = 0 to iPozycje > xmlPOZYCJE.length - 1 xmlPOZYCJA = xmlPOZYCJE.item( iPozycje ) if xmlPOZYCJA.getElementsByTagName("kod_waluty").item(0).text == sWaluta then PobierzKurs = val(xmlPOZYCJA.getElementsByTagName("kurs_sredni").item(0).text) endif next iPozycje endsub print PobierzKurs("EUR","2013-11-27") |
Strona 1 z 4 | Strefa czasowa UTC+1godz. [letni] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |