mojaSymfonia FORUM https://forum.mix-soft.pl/ |
|
Statystyka zatrudnienia - czas wykonywania raportu https://forum.mix-soft.pl/viewtopic.php?f=3&t=7332 |
Strona 2 z 2 |
Autor: | MaciekCh [ 2016-07-19, 13:35 ] |
Tytuł: | 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. |
Autor: | szepczący [ 2016-07-19, 20:09 ] |
Tytuł: | Re: Statystyka zatrudnienia - czas wykonywania raportu |
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() |
Autor: | MaciekCh [ 2016-07-20, 10:52 ] |
Tytuł: | 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. |
Autor: | gregg [ 2016-07-20, 10:59 ] |
Tytuł: | Re: Statystyka zatrudnienia - czas wykonywania raportu |
http://pomoc.sage.com.pl/Help/ambasic :) |
Autor: | MaciekCh [ 2016-07-20, 11:28 ] |
Tytuł: | 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. |
Autor: | szepczący [ 2016-07-20, 18:56 ] |
Tytuł: | 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ć :( |
Strona 2 z 2 | Strefa czasowa UTC+1godz. [letni] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |