|
|
Strona 1 z 1
|
[ Posty: 4 ] |
|
HMP -ilość dni na podstawie różnicy dat
Autor |
Wiadomość |
Khavert
Rejestracja: 2008-05-06, 21:16 Posty: 23
|
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?
|
2010-05-12, 10:31 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
Misiek
Rejestracja: 2008-12-03, 21:11 Posty: 276 Pomógł: 2
|
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ć...
_________________ Pozdrawiam
Misiek DGTL Rzeszów
|
2010-05-12, 10:57 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
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)
|
2010-05-12, 13:28 |
|
|
Khavert
Rejestracja: 2008-05-06, 21:16 Posty: 23
|
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
|
2010-05-12, 13:50 |
|
|
|
Strona 1 z 1
|
[ Posty: 4 ] |
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 20 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
|
|
|
|