Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-04-28, 11:46x



Odpowiedz w temacie  [ Posty: 4 ] 
HMP -ilość dni na podstawie różnicy dat 
Autor Wiadomość

Rejestracja: 2008-05-06, 21:16
Posty: 23
Post 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:


2010-05-12, 10:31
Wyświetl profil
Autor Wiadomość
 


Awatar użytkownika

Rejestracja: 2008-12-03, 21:11
Posty: 276
Pomógł: 2
Post 
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
Wyświetl profil
Ekspert
Ekspert

Rejestracja: 2007-11-16, 15:08
Posty: 3983
Pomógł: 445
Post 
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)

_________________
Skontaktuj się z Ekspertem | Zamów dodatek

tel. 22 7 538 538
ekspert@mojaSymfonia.pl
http://www.mojaSymfonia.pl


2010-05-12, 13:28
Wyświetl profil

Rejestracja: 2008-05-06, 21:16
Posty: 23
Post 
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
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 4 ] 
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. Integracja HMP i FKP - ilość powiązanych dokumentów

w Techniczne

user_Sam

5

2895

2013-02-18, 15:33

wrob Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. grosz różnicy na korekcie-POMOCY

w Programy Handlowe

Aga1303

0

2238

2020-04-27, 11:37

Aga1303 Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. STP2017 widomość o różnicy wersji

w Programowanie

Mustrum

1

1897

2017-06-07, 11:20

rafal Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. FV na podstawie PZ

w Programy Handlowe

piescmiweza

2

1964

2014-04-17, 23:29

rafal Wyświetl najnowszy post



Kto jest online

Użytkownicy przeglądający to forum: Bing [Bot] i 38 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

Szukaj:
Przejdź do:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Support forum phpbb by phpBB Assistant