|
Statystyka zatrudnienia - czas wykonywania raportu
Autor |
Wiadomość |
MaciekCh
Rejestracja: 2014-10-13, 11:23 Posty: 24 Pomógł: 2
|
Re: Statystyka zatrudnienia - czas wykonywania raportu
Sprawdziliśmy dokładnie co zmieniło się w stanie pracowników i znaleźliśmy jedna osobę która miała przedłużaną umowę od 28.06 i to właśnie ona nie jest liczona. Drugi raport liczy do końca umowy i nie 'widzi' że zaczęła się kolejna.
|
2016-07-19, 13:35 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
szepczący
Rejestracja: 2016-05-17, 20:41 Posty: 392 Pomógł: 75
|
Re: Statystyka zatrudnienia - czas wykonywania raportu
(1)
Dzięki za informację, błąd znaleziony i poprawiony. Kod poniżej: Kod: //1,"statzatrplus.sc","Statystyka zatrudnienia plus","Zestawienia/Dla kierownika",0,2.1.1,SYSTEM #include "pdfparam.sci" #define OK 2 #define ANULUJ -1
#include "strings.sci" #include "funprac.sci" #include "funeksp.sci" #include "table.sci" #include "hf_graf.sci"
int iDrukujSzarosci,iUlamki = 1 int rv
float sub EtatStrToFloat(String sval) float liczniki float mianowniki buf = sval if !((find regular"{:d#}//{:d#}") == "") then liczniki = Val(regular 1) mianowniki = Val(regular 2) else liczniki =Val(buf) mianowniki = 1 endif EtatStrToFloat=liczniki/mianowniki endsub
string sub EtatStrToStr(String sval,int ulamek) float liczniki float mianowniki buf = sval if !((find regular"{:d#}//{:d#}") == "") then if ulamek==0 then EtatStrToStr=sval else liczniki = Val(regular 1) mianowniki = Val(regular 2) EtatStrToStr=using "%.3f",(liczniki/mianowniki) endif else if ulamek==0 then liczniki =Val(sval) EtatStrToStr =ToFactorFormat(liczniki,1) else EtatStrToStr=sval endif endif
endsub
string sOd,sDo,sRok, sMiesiac int idOk string sKomunikat = "Nieprawidłowa wartość pola \"%s\"." date dataDo date dat
int sub OnCommand(int id,int msg) if idOk == id then Save endif endsub
int sub Sprawd() dat.Set(Val(sRok),Val(sMiesiac),Val(sOd)) dataDo.Set(Val(sRok),Val(sMiesiac),Val(sDo)) Sprawd=0 if dat.Valid() then if dataDo.Valid() then if dat.IS_LE(dataDo) then Sprawd=OK else message "Wartość \"dni od\" musi być miniejsza równa od wartości \"do\"." endif else message using sKomunikat, "do" endif else message using sKomunikat, "dni od" endif endsub
long IdSk1 InfoPrac prac
if !(IdSk1 = IdSkladnika("Umowa o pracę")) then message "\"brak elementu Umowa o prace\"{{icon=s}}" : error "" if Arg4 != "" then sOd = Arg4 else sOd = DataOkresu(Okres()) sOd += "-01" endif dat.FromStr(sOd) sRok = using"%d",dat.year sMiesiac = using"%d",dat.month sOd = using"%d",dat.day sDo = sOd Form "Statystyka zatrudnienia", 290,200 Edit "Rok", sRok,70,10,43,20, (len(find regular "^:d:d:d:d$") && Val(sRok)>1950 && Val(sRok)<2050), using sKomunikat, "Rok" Edit "Miesiąc", sMiesiac, 172, 10, 30,20,(len(find regular "(^:d$)|(^:d:d$)") && Val(sMiesiac)>0 && Val(sMiesiac)<13), using sKomunikat, "Miesiąc" Edit "Za dni od",sOd,70,35,30,20,(len(find regular "(^:d$)|(^:d:d$)") && Val(sOd)>0 && Val(sOd)<32), using sKomunikat, "dni od" Edit "do",sDo,130,35,30,20, (len(find regular "(^:d$)|(^:d:d$)") && Val(sDo)>0 && Val(sDo)<32), using sKomunikat, "do" ChkBox "Eksport do MSExcel", bCzyExcel, 40, 60, 200, 20 ChkBox "Drukuj wypełnienia", iDrukujSzarosci, 40, 85, 120, 20 ChkBox "Ułamki prezentuj w postaci dziesiętnej", iUlamki, 40, 110, 200, 20 idOk = Button "&OK",40,135,85,25,Sprawd() Button "&Anuluj",165,135,85,25,ANULUJ rv = ExecForm(OnCommand) if rv == ANULUJ then error ""
string sOd1 = dat.ToStr()
string tmpFileName //tmpFIleName=GetTempFileName("xml","C:\\") tmpFIleName=GetTempFileName("xml")
XmlParser XMLParss MapValue MapaEtatow
MapaEtatow.type(long) MapaEtatow.Clear() int ileWartMap //zmienne z XML'a long lile string etat int bile int betat long SumIlePrac float SumIleEtat date DataSumy
int iTworzArkusz = 0
int ile,i, iluPracownikow
#ifdef FORTE
//tutaj genryjemy sobie XML'a XmlAdoExport xmlexp
Int Sub AddParamsPracownicy(String sod, string sdo) long idprac long idgrupy = val( Arg0 ) int typ = val( Arg1 )
xmlexp.StartXMLElement("PRACOWNICY") if !idgrupy && !typ then message "sErrTylkoZOknaPrac" : error "" if !SetGroup( idgrupy, typ, TR_PRACOWNICY ) then message "sErrBlednaGrupa" : error "" //if !SetGroup( idgrupy, typ, TR_PRACOWNICY , okres_od, okres_do ) then message sErrBlednaGrupa : error "" idprac= GetFirst() while idprac xmlexp.XMLElement("id",idprac) idprac = GetNext() wend xmlexp.EndXMLElement("PRACOWNICY") endsub
xmlexp.SetXmlOutputFile(tmpFIleName) xmlexp.StartXMLParams()
AddParamsPracownicy(dat.ToStr(),dataDo.ToStr()) xmlexp.XMLElement("data_od",dat.ToStr() ) xmlexp.XMLElement("data_do",dataDo.ToStr() ) xmlexp.EndXMLParams() xmlexp.ExecuteCommand("xml_kd_StatystykaZatrudnienia")
#else
//error("TO JEST BETRIF")
HrMgr hMgr HrComponent hComp HrValue hVal XMLFile xmlf
// int i, ileWartMap // int iKtWie = 0 // float fIloscEtatow
xmlf.Encoding("utf-8") xmlf.open(tmpFIleName) //<STATYSTYKA_ZATRUDNIENIA><DATA data="2005-06-01"><DZIAL nazwa="Administracja"> xmlf.StartElement("STATYSTYKA_ZATRUDNIENIA")
//debugger PobierzPracKadrZGrupy(IdSk1, dat.ToStr(), datado.ToStr()) iluPracownikow = MapaPracownikow.Size()//pracownicy w osobach MapaEtatow.Clear() date dtTemp hMgr.AddHRComponent(IdSk1)
dataPD = dat
for i = 1 to i > iluPracownikow idprac = Val(MapaPracownikow.GetKey(i)) Pracownik(prac, idprac) hMgr.FreeValues () hMgr.SetEmpId(idprac) dtTemp = dat
while (dtTemp.IS_LE (dataDo)) sOd = dtTemp.ToStr() hMgr.FreeValues () hMgr.LoadValues(sOd,sOd) hMgr.GetComponent(hComp,IdSk1) If hComp.GetValuesCount() > 0 then hComp.GetValue(hVal, hComp.GetValuesCount(), hComp.GetAttrIndexById(8490)) if hval.Value != 0 then ile = MapaEtatow.Index(sOd+"|"+hVal.StrValue) if (ile == 0) then MapaEtatow.Set(sOd+"|"+hVal.StrValue,1) else ile = MapaEtatow.Get(sOd+"|"+hVal.StrValue) ile += 1 MapaEtatow.Set(sOd+"|"+hVal.StrValue,ile) endif EndIf endif // iKtWie+=1 dtTemp.AddDays(1) wend
next i
// <ZATRUDNIENIE wymiar="0" liczba_etetow="1"> ileWartMap=MapaEtatow.Size() dtTemp = dat while (dtTemp.IS_LE (dataDo)) sOd = dtTemp.ToStr() xmlf.Attribute("data",sOd) xmlf.StartElement("DATA") xmlf.Attribute("nazwa","Razem") xmlf.StartElement("DZIAL") for i=1 to i >ileWartMap buf = MapaEtatow.GetKey(i) if (find regular "{[~/#]#}/|{[~/#]#}") != "" then if (regular 1) == sOd then xmlf.Attribute("wymiar" ,(regular 2)) xmlf.Attribute("liczba_etetow",MapaEtatow.Get(i)) xmlf.Element("ZATRUDNIENIE") endif endif // xmlf.EndElement("ZATRUDNIENIE") next i xmlf.EndElement("DZIAL") xmlf.EndElement("DATA") dtTemp.AddDays(1) wend
xmlf.EndElement("STATYSTYKA_ZATRUDNIENIA") xmlf.Close() MapaEtatow.Clear() #endif
//utworzenie mapy etatów
//<STATYSTYKA_ZATRUDNIENIA><DATA data="2005-06-01"><DZIAL nazwa="Administracja"><ZATRUDNIENIE wymiar="0" liczba_etetow="1">
int sub EndElem(string sTagName,string strVal ) if UCASE(sTagName)=="ZATRUDNIENIE" then if bile>0 && betat>0 then if MapaEtatow.Index(etat)== 0 then MapaEtatow.Set(etat,0) endif else Error ("Nie poprawnie zdefiniowany XML") endif lile=0 etat="" bile=0 betat=0 endif endsub
int sub Attrib(string sTagName,string sAtrName ,string strVal ) if UCASE(sTagName)=="ZATRUDNIENIE" then if sAtrName=="wymiar" then etat=EtatStrToStr(strVal,1) betat=1 endif if sAtrName=="liczba_etetow" then lile=Val(strVal) bile=1 endif endif if UCASE(sTagName)=="DATA" then if sAtrName=="data" then DataSumy.FromStr(strVal) endif endif endsub
//Najpierw robimy sobie mapke etatuf posortujemy ja a potem wydrukujemy
XMLParss.OnEndElement( EndElem ) XMLParss.OnAttribute( Attrib) XMLParss.Parse(tmpFileName)
//mamy tabliczkem etetuf wiec mozemy zacac dalej walczyc
MapaEtatow.Sort (1)
if MapaEtatow.Size() <= 12 then str.wydruk(0,-1,0) else str.wydruk(0,-1,1) endif
#include "fonty.sci" Strona 50,230,50,100 if MapaEtatow.Size() == 0 then print "Brak pracowników do statystyki" end endif //int iTworzArkusz = 0 ileWartMap = MapaEtatow.Size()
if (sOd1 == dataDo.ToStr()) then nazwaRaportu = "Statystyka zatrudnienia w dniu "+ sOd1 else nazwaRaportu = "Statystyka zatrudnienia za okres od " + sOd1 + " do "+dataDo.ToStr() endif if (sNazwaGrupy) then nazwaRaportu += " dla grupy "+sNazwaGrupy endif
long lKolorWypRamki =-1 int dn,gl,gl1 gl = 130 gl1 = 170 dn = 120//(str.szer - 430)/ileWartMap+1 //if dn > 120 then dn = 120 if iDrukujSzarosci then lKolorWypRamki = RGB(240, 240, 240) int stlNormalCentered = styl( tekst1, 0 ) int tblH = Init( 1, 10) AddKol(gl, stlNormalCentered,lKolorWypRamki) AddKol(gl1, stlNormalCentered,lKolorWypRamki) AddKol(gl, stlNormalCentered,lKolorWypRamki) For i = 4 to i > ileWartMap+3 AddKol(dn,stlNormalCentered,lKolorWypRamki) Next i Define()
int tbl1 = Init( 1, 10) AddKol( gl, stlNormalCentered, lKolorWypRamki ) AddKol( gl1, stlNormalCentered, -1) AddKol( gl, stlNormalCentered, -1) For i = 4 to i > ileWartMap+3 AddKol(dn,stlNormalCentered,-1) Next i Define()
int sub Header() #ifdef STORE Store() #endif int ileWart = MapaEtatow.Size() ramka #H SubHead() koniec CreateTable(tblH) SetKol(1, "Dnia") SetKol(2, "Liczba\nzatr.\nw etatach") SetKol(3, "Liczba\nzatr.\nw osobach") for i = 4 to i > ileWart+3 SetKol(i,"wymiar " + EtatStrToStr( MapaEtatow.GetKey(i-3),iUlamki)) next i Show( 0,str.Pozycja(#Y)) #ifdef STORE ReStore() #endif endsub
int sub Footer() ramka #F SubFoot() koniec endsub
int sub FormatujArkusz() d.Rows("2:2").Select d.Selection.NumberFormat = "@" d.Columns("B:B").Select d.Selection.NumberFormat = "@" endsub
int iWiersz = 0 int sub HeaderExc() int ileWart = MapaEtatow.Size() string sWieHead = "Dnia:|Liczba zatr. w etatach|Liczba zatr. w osobach|" for i = 1 to i > ileWart sWieHead+=MapaEtatow.GetKey(i)+"|" next i iWiersz += 1 ZapiszWierszS(iWiersz, 1, sWieHead) endsub
int iPrzycisk if (ileWartMap > 22)then//Jeżeli ilość rodzajów etatów jest większa //od 22 wówczas rezygnujemy z wydruku w //symfonii i eksportujemy do excel iPrzycisk = message "Ilosc rodzajów etatów jest większa od 22\nRaport może zostać wykonany wyłącznie przez eksport do MSExcel\nCzy chcesz kontynuować wykonanie raportu? DefBtn: &Tak=1 Btn: &Anuluj=2 Ico:?" if (iPrzycisk == 1) then bCzyExcel = 1 TworzArkusz() FormatujArkusz() ScalajKomorki(1, 1, ileWartMap+3) iWiersz += 1 ZapiszWiersz(iWiersz, 1, nazwaRaportu+"|") HeaderExc() iTworzArkusz = 1 else // error"" endif else if bCzyExcel then TworzArkusz() FormatujArkusz() ScalajKomorki(1, 1, ileWartMap+3) iWiersz += 1 ZapiszWartosc(iWiersz, 1, nazwaRaportu) HeaderExc() iTworzArkusz = 2 endif Header() endif
int sub PiszWiersz(Date datawr, int czyExp,string sIleEtat, float ilePrac)
int IloscWart = MapaEtatow.Size() int j string sWiersz
// find regular "/-{:d^2}$" if (iTworzArkusz != 1) then CreateTable(tbl1) SetKol(1, (using"%d",datawr.day)) SetKol(2,sIleEtat) SetKol(3,(using"%d",ilePrac)) for j = 1 to j > IloscWart // if !((j+3)>size(stabWyn)) then SetKol(j+3,(using"%d", MapaEtatow.Get(j))) // endif next j Show( 0,str.Pozycja(#Y)) if ( iTworzArkusz == 2 ) then sWiersz = (using"%d",datawr.day)+"|" sWiersz += sIleEtat+"|" sWiersz += (using"%d",ilePrac)+"|" for j = 1 to j > IloscWart sWiersz += (using"%d",MapaEtatow.Get(j))+"|" next j iWiersz += 1 ZapiszWiersz(iWiersz, 1, sWiersz) endif else sWiersz = (using"%d",datawr.day)+"|" sWiersz += sIleEtat+"|" sWiersz += (using"%d",ilePrac)+"|" for j = 1 to j > IloscWart sWiersz += (using"%d",MapaEtatow.Get(j))+"|" next j iWiersz += 1 ZapiszWiersz(iWiersz, 1, sWiersz) endif endsub
int sub EndElemPas2(string sTagName,string strVal ) string sIleEtat if UCASE(sTagName)=="ZATRUDNIENIE" then if bile>0 && betat>0 then SumIlePrac+=lile SumIleEtat+=lile*EtatStrToFloat(etat) if MapaEtatow.Index(etat)!= 0 then // jet niepotrzebne ale moze cos przeo lile+=MapaEtatow.Get(etat) MapaEtatow.Set(etat,lile) else Error ("Zmiana zawartosci pliku XML") endif else Error ("Nie poprawnie zdefiniowany XML") endif lile=0 etat="" bile=0 betat=0 endif if UCASE(sTagName)=="DATA" then //Tu koniczymy przetwarzanie dla danej daty if iUlamki then sIleEtat=using "%.3f",SumIleEtat else sIleEtat=ToFactorFormat(SumIleEtat,1)//WyliczIloscEtatow(MapaEtatow) endif
PiszWiersz(DataSumy,iTworzArkusz,sIleEtat,SumIlePrac) //SumIleEtat,0)// // Wyczyscic mape etatuf -> wpisac zera for SumIlePrac = 1 to SumIlePrac > ileWartMap MapaEtatow.Set(MapaEtatow.GetKey(SumIlePrac),0) next SumIlePrac SumIlePrac=0 SumIleEtat=0 endif endsub
//Tu przeparsowac jesecze raz zeby wypluc wyniczki XMLParss.OnEndElement( EndElemPas2 ) XMLParss.OnAttribute( Attrib) XMLParss.Parse(tmpFileName)
Delete File tmpFileName
if (iTworzArkusz != 1) then Footer() if (iTworzArkusz == 1 || iTworzArkusz == 2) then d.visible = 1 PD()
|
2016-07-19, 20:09 |
|
|
MaciekCh
Rejestracja: 2014-10-13, 11:23 Posty: 24 Pomógł: 2
|
Re: Statystyka zatrudnienia - czas wykonywania raportu
To ja dziękuję, liczy szybko i poprawnie.
Szkoda że nie ma jakiegoś podręcznika do tego AmBasica, czasem trzeba coś na szybko zmienić to bez szukania na ślepo się nie obejdzie.
|
2016-07-20, 10:52 |
|
|
gregg
Rejestracja: 2016-02-29, 10:32 Posty: 133 Pomógł: 20
|
Re: Statystyka zatrudnienia - czas wykonywania raportu
|
2016-07-20, 10:59 |
|
|
MaciekCh
Rejestracja: 2014-10-13, 11:23 Posty: 24 Pomógł: 2
|
Re: Statystyka zatrudnienia - czas wykonywania raportu
wygląda mi na tę samą dokumentacją którą znajdę w helpie programu, ale dzięki, może znajdę coś więcej jak przekopie się głębiej.
|
2016-07-20, 11:28 |
|
|
szepczący
Rejestracja: 2016-05-17, 20:41 Posty: 392 Pomógł: 75
|
Re: Statystyka zatrudnienia - czas wykonywania raportu
Do nieco starszych wersji programu (np. 2014) dołączony jest w dokumentacji plik "Funkcje do formuł i raportów". Opisane są w nim prawie wszystkie obiekty ambasic używane w KDP/KDF. Szkoda tylko że przestali go dołączać do programu i aktualizować :(
|
2016-07-20, 18:56 |
|
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 34 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
|
|
|
|