mojaSymfonia FORUM https://forum.mix-soft.pl/ |
|
HMP -ilość dni na podstawie różnicy dat https://forum.mix-soft.pl/viewtopic.php?f=15&t=2015 |
Strona 1 z 1 |
Autor: | Khavert [ 2010-05-12, 10:31 ] |
Tytuł: | HMP -ilość dni na podstawie różnicy dat |
Witam, Mam mały problem z obliczeniem ilości dni na podstawie dwóch dat. Daty wpisywane na podstawie kontrolki DatEdit i zapisywane do zmiennych. Oczywiście deklarowane sa one jako string. I tak oto wychodzi mi: Kod: int rok, miesiac, dzien string data1,data2 data1 = "2010-02-01" data2 = "2010-04-01" rok = val(mid(data2,1,4)) - val(mid(data1,1,4)) miesiac = val(mid(data2,6,2)) - val(mid(data1,6,2)) dzien = val(mid(data2,9,2)) - val(mid(data1,9,2)) //i wychodzi mi różnica w latach rok //różnica w miesiacach miesiac //różnica w dniach dzien i tutaj pojawia się problem bo luty ma dni 28, a marzec 31. Ponadto ilość dni lutego zmienia się w zależności od roku. Czy jest jakiś prostszy sposób na obliczenie ilości dni między dwiema datami?? Jeżeli jest to jaki? Kod: |
Autor: | Misiek [ 2010-05-12, 10:57 ] |
Tytuł: | |
Wykorzystaj strukturę/obiekt Date dla programów HMP/HMF, KDP/KDF lub dla DateExt dla FKP/FKF. Spis dostępnych poleceń powinieneś znaleźć w HELPach Symfonii/AmBasic lub w poście http://forum.mojasymfonia.pl/viewtopic.php?t=1354 Pod ręką nie mam żadnego przykładu, ale nie jest to strasznie trudne do zaimplementowania w raporcie, wiec powinieneś sobie poradzić... |
Autor: | rafal [ 2010-05-12, 13:28 ] |
Tytuł: | |
Kod: date dataPrzed date mojaData date dataPo dataPrzed.FromStr("2010-01-01") mojaData.FromStr("2010-01-03") dataPo.FromStr("2010-01-05") print mojaData.DaysUntil(dataPrzed) print lf print mojaData.DaysUntil(dataPo) |
Autor: | Khavert [ 2010-05-12, 13:50 ] |
Tytuł: | |
Dzięki wielkie, a teraz jakby ktoś chciał to może sobie taki raport zaimplementować. Na podstawie zakresu dat i kontrahencie przesyła do excel'a takowe pola: -Numer Dokumentu -Kod Odbiorcy -Termin Płatności -Data Rozliczenia -Wartość Brutto -Pozostało do zapłaty -Ilość dni po terminie Pierwszy kod dotyczy formatki: Kod: //NAZWA Formatka - Platnosci string data_od, data_do, ktr int kh,errKH,btn_choose, blad ClearINFOs() blad=0 kh = Open KatalogFirmy()+"51kh.dat" for base "KH" SetKey(kh,"kod") SetKeySeg(kh,"kod","") errKH = GetRec(kh,FS) string poz = " " int sub WyborKontrahenta() Enable(btn_choose,0) save string kod = WybierzKH( ktr ) if kod != "" then ktr = kod :load Enable(btn_choose,1) endsub //************ Form "Kryteria Wyszukiwania", 260,150 DatEdit "Data od:", data_od, 70,10,120,20 DatEdit "Data do:", data_do, 70,35,120,20 edit "Lista:", ktr, 70,60,120,20 btn_choose= Button "&Wybierz", 195,60,60,20,WyborKontrahenta() Button "&Ok", 5,100,100,25,2 Button "Anuluj", 150,100,100,25,-1 int odp = execform if odp == -1 then Nooutput() end endif if ktr == "" then blad = 1 AddError("Nie wybrano kontrahenta") endif if data_od == "" || data_do == "" then blad = 1 AddError("Nie wybrano zakresu daty") endif if blad == 1 then ShowINFOs("Wstrzymanie wykonywania raportu","Uruchom Ponownie raport",100,2) end endif NoOutput() Drugi pozyskuje z bazy konkretne pola i wysyła do excela Kod: #include "Formatka - Platnosci" date data1 date data2 int dk, errDK, wiersz, pn, xt dk = open KatalogFirmy() + "51dk.dat" for base "DK" pn = open KatalogFirmy() + "51pn.dat" for base "PN" xt = open KatalogFirmy() + "51xt.dat" for base "XT" long forma int sub DrukujExcel() //EXCEL Dispatch excel excel.Create("excel.Application") Dispatch wb wb = excel.Workbooks.add Dispatch ws ws = wb.Worksheets.add SetKey(kh,"kod") SetKeySeg(kh,"kod",ktr) GetRec(kh,EQ) forma = GetField(kh,"formaplatn") SetKey(xt,"id") SetKeySeg(xt,"id",forma) GetRec(xt,EQ) SetKey(dk,"data") SetKeySeg(dk, "data",data_od) errdk = GetRec(dk,EQ) wiersz = 7 SetKey(pn, "dkid") ws.cells(1,1).value = "Zestawienie dokumentów: " + GetField(kh,"nazwa") + " NIP: " +GetField(kh,"nip") ws.cells(2,1).value = "Data od: " + data_od + " do " + data_do ws.cells(3,1).value = "Forma płatności - " + GetField(xt,"nazwa") ws.cells(3,4).value = GetField(xt,"long") ws.cells(3,5).value = "Dni" ws.cells(6,1).value = "Lp." ws.cells(6,2).value = "Numer Dokumentu" ws.cells(6,3).value = "Kod Odbiorcy" ws.cells(6,4).value = "Termin Płatności" ws.cells(6,5).value = "Data Rozliczenia" ws.cells(6,6).value = "Wartość Brutto" ws.cells(6,7).value = "Pozostało do zapłaty" ws.cells(6,8).value = "Ilość dni po terminie" While !errdk && GetField(DK, "data") <= data_do popup(0,"Wybrano: " + ktr) popup(1,"Zakres dat: od " + data_od + " do " + data_do) popup(2,"Przetwarzam: " + GetField(DK, "data")) if GetField(dk,"khkod") == ktr then data1.clear() data2.clear() ws.cells(wiersz,1).value = wiersz -6 ws.cells(wiersz,2).value = GetField(dk,"kod") ws.cells(wiersz,3).value = GetField(dk,"odkod") data1.strtodate(GetField(dk,"plattermin")) ws.cells(wiersz,4).value = GetField(dk,"plattermin") if GetField(dk,"ok") == "1" then SetKeySeg(pn, "dkid", GetField(dk, "id")) GetRec(pn,EQ) ws.cells(wiersz,5).value = GetField(pn,"datarozl") data2.strtodate(GetField(pn,"datarozl")) else data2.clear() endif ws.cells(wiersz,6).value = GetField(dk,"netto") + getField(dk,"vat") ws.cells(wiersz,7).value = round(GetField(dk,"netto") + getField(dk,"vat") - getField(dk,"wplaty"),2) if data2.valid() != 0 then if data2.compare(data1) == 1 || data2.compare(data1) == 0 then ws.cells(wiersz,8).value = data1.daysuntil(data2) -1 else ws.cells(wiersz,8).value = -data1.daysuntil(data2)+1 endif endif wiersz += 1 endif errdk = GetRec(dk,NX) wend If wiersz != 7 then excel.visible=1 else message "Nie znaleziono dokumentów dla: " + ktr excel.workbooks.close endif NoOutput() endsub drukujexcel() Jest to wersja alpha bo dopiero co skończyłem pisać i działa(przynajmniej nie wykryłem błędów...jeszcze). Po kodzie mogą walać się bezsensowne zapisy bo: 1. Jeszcze nie wywaliłem rzeczy zbędnych 2. Zamierzam to rozbudować i już dodałem zmienną ale jeszcze nie została użyta. 3. Wersja NIEZOPTYMALIZOWA POD WZGLĘDEM KODU. Pozdrawiam |
Strona 1 z 1 | Strefa czasowa UTC+1godz. [letni] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |