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/