Posty bez odpowiedzi |oraz Aktywne tematy Dzisiaj jest 2024-11-26, 00:09x



Odpowiedz w temacie  [ Posty: 21 ]  Przejdź na stronę Poprzednia  1, 2
Statystyka zatrudnienia - czas wykonywania raportu 
Autor Wiadomość

Rejestracja: 2014-10-13, 11:23
Posty: 24
Pomógł: 2
Post 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
Wyświetl profil
Autor Wiadomość
 



Rejestracja: 2016-05-17, 20:41
Posty: 392
Pomógł: 75
Post Re: Statystyka zatrudnienia - czas wykonywania raportu
Ta wiadomość była pomocna.(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
Wyświetl profil

Rejestracja: 2014-10-13, 11:23
Posty: 24
Pomógł: 2
Post 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
Wyświetl profil

Rejestracja: 2016-02-29, 10:32
Posty: 133
Pomógł: 20
Post Re: Statystyka zatrudnienia - czas wykonywania raportu
http://pomoc.sage.com.pl/Help/ambasic :)


2016-07-20, 10:59
Wyświetl profil

Rejestracja: 2014-10-13, 11:23
Posty: 24
Pomógł: 2
Post 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
Wyświetl profil

Rejestracja: 2016-05-17, 20:41
Posty: 392
Pomógł: 75
Post 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
Wyświetl profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w temacie   [ Posty: 21 ]  Przejdź na stronę Poprzednia  1, 2
   Podobne tematy   Autor   Odpowiedzi   Odsłony   Ostatni post 
Na tym forum nie ma nowych nieprzeczytanych postów. Statystyka zatrudnienia

w Programy Kadrowo Płacowe

chemosh

3

3011

2009-09-23, 15:50

dejwmag Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. Błąd podczas wykonywania raportu RSA

w Programy Kadrowo Płacowe

suand

2

2922

2011-11-17, 09:54

suand Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. generowanie raportu: data zatrudnienia, data końca umowy

w Programy Kadrowo Płacowe

Jana

2

3219

2017-09-01, 07:48

Jana Wyświetl najnowszy post

Na tym forum nie ma nowych nieprzeczytanych postów. statystyka inna kwota niz na liscie plac

w Programy Kadrowo Płacowe

Gia65

8

4604

2009-07-29, 09:06

Gia65 Wyświetl najnowszy post



Kto jest online

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