четвртак, 9. август 2012.

Zakon o visini stope zatezne kamate

Uf...
Danas je dosla na red ispravka načina obračuna kamte za korisnike koji koriste ovaj naš modul. Kao što pretpostavljam da znate, Ustavni sud je 27.jula 2012. godine doneo odluku da je primena konformnog metoda obračuna zatezne kamate nije u saglasnosti sa Ustavom.
Ja nisam ekonomista ali ovo je strasno. Mesčna stopa zatezne kamate je propisana Zaknom članovima 2 i 3.


Član 2
Stopa zatezne kamate sastoji se od:
1. mesečne stope rasta potrošačkih cena
2. fiksne stope od 0,5% mesečno.
Član 3
Obračun duga uvećanog za zateznu kamatu vrši se tako da se fiksna stopa od 0,5% množi iznosom glavnog duga uvećanog za kamatu po stopi iz člana 2. tačka 1. ovog zakona.

Znači, glavni dug se množi sa fiksnom stopom od 0,5% uvečanom za stopu rasta potrošačkih cena (rast cena na malo). U tački 1 člana 2 Zakona se sadrži mesečna stopa inflacije (rasta potrošačkih cena), ova stopa se utvđuje na mesečnom nivou u ovoj godini mesčna stopa iznosi otprilike 1%. Republički zavod za statistiku objavljuje podatke o mesečnim stopama rasta potrošačkih cena u Republici Srbiji na mesečnom nivou.
Znači. Baba ima 100 dinara, za tih 100 dinara baba može da kupi 100 jaja, zavod objavi da je rast potrosackih cena u januaru nio 1% babi a i Ustavnom sudu je jasno da babi 1.februara treba 101 dinar da bi kupila 100 jaja, ali sada nastaje problem zavod objavi da je i u februaru rast potrosackih cena bio 1%, ustavni sud pokusava da ubedi babu da ce joj 01.marta za 100 jaja trebati 102 dinara. Meni se cini da ce se baba poprilicno iznenaditi kada pokusa da kupi 100 jaja.
I sada ispada ako je inflacija dovoljno velika i za duzi vremenski period, da poverilac na ime zatezne kamate dobija manji iznos nego sto se postize revalorizacijom potrošačkih cena.

E sada moje pitanje je da li u Ustavu postoji povelja da svako ko u Srbiji ima veci IQ od 80 mora da napusti  zemlju pa da ostanu samo babe koje ce pokusavati 01.marta da kupe 100 jaja za 102 dinara.

Hm.. Mozda. Baba ce 31.decembra misliti da moze da kupi jaja za 112  dinara, pa onih 0,6825 dinara moguce da ce se prelije kod nekih novih - starih tajkuna, pa ako bude dovoljno baba, malo li je?
Idem ja da radim.

среда, 4. април 2012.

SachsenWasser - utosak po mernim mestima

Izvršena izmena programa Pregled stanja vodomjera ( IKO001v ). Dodana je opcija prikaza utrošaka fluida na mernim mestima za izabranu godinu po mesecima. Prikazani utrošak prestavlja u stvari fakturisani fluid za svaki iazabrani period. U prikazu će se pojaviti sva merna mesta kojima je obračunat utrošak fluida bez obzira na način obračuna:

  • Obračun po članu
  • Obračun po procentu
  • Pomočno merilo
  • Sekundarni paušalac
  • Paušalac po članu
  • Samostalni paušalac
  • Samostalno merilo
  • Glavno merilo
  • Uneta potrošnja po ćlanu
  • Paušal po mesecu i ćlanu

Ako vas interesuju utrošci samo onih mernih mesta koja imaju merač u tu grupu spadaju:
  • Samostalno merilo
  • Glavno merilo
  • Pomočno merilo
Program sa izmenama se nalazi na svim klijentima. Da bi ste pokrenuli program u meniju "Komunalne usluge" izaberite podmeni "Pregledi" a zatim "Pregled i analiza stanja Vodomera" 
Po pokretanju programa treba izabrati opciju “Pregled merača koji su ugrađeni u merno mesto“  (kao na slici)
Prelaskom u prozor sa izborom prikaza podataka, primećujemo da postoje dva  nova izbora:
  • Prikaz mernih mesta sa utroškom vode u izabranoj godini
  • Prikaz merača i mernih mesta sa utroškom vode u izabranoj godini


Izborom opcije „Prikaz mernih mesta sa utroškom vode u izabranoj godini“ i klikom na dugme Prikaži izabrane podatke prelazimo u sledeći izbor. U ovom prozoru je potrebno izabrati godinu za koju želimo da prikažemo podatke.


Izborom godine potrebno je da sačekamo da se podaci popune u tabelu.
Tabela ima sledeće kolone:
  • Šifra rejona
  • Šifra podrejona
  • Broj mernog mesta
  • Sledećih dvanaest kolona su meseci sa fakturisanom vodom u tim mesecima.

Negativne količine prestavljaju stornirane kubike kroz reklamaciju. U VIK ovima se prilikom reklamacije ne vezuju kubike koje storniraju za mesec u kojem su pogrešno fakturisani. 
Izborom druge opcije:
Prikaz merača i mernih mesta sa utroškom vode u izabranoj godini, postupak je indetičan samo što će mo dobti drukčiju strukturu podataka.





Žutom bojom su označene one kolone kod kojih mernih mesta je bila zamena merača u toku izabrane godine. Tako da je u prvoj koloni broj merača a sledeće kolone su parametri mernog mesta čiji se utrošci prikazuju.
Dobijene podatke možete ivesti u EXCEL ako uradite desni klik u tabelu i izaberete opciju „Izvoz“




недеља, 1. април 2012.

Zen problem

Budistički sveštenik dobija zadatak od svog učitelja da meditira tačno 45 minuta.
Nema sat, ima samo dva mirišljava štapića, od kojih svaki gori tačno jedan sat, ali različitom brzinom. 
Kako će sveštenik izmeriti tačno 45min meditacije?


Pošto budistički sveštenik zna C#, verovatno je napisao ovakav code:


using System;
using System.Threading;
namespace Puzzle
{
    class Program
    {
        public static Thread T1_l, T1_r, T2_l, T2_r;
       
        static void Main(string[] args)
        {
            ST st1 = new ST(60, 50, 1);
            ST st2 = new ST(60, 50, 2);
            T1_l = new Thread(new ThreadStart(st1.F1));
            T1_r = new Thread(new ThreadStart(st1.F2));
            T2_l = new Thread(new ThreadStart(st2.F1));
            T2_r = new Thread(new ThreadStart(st2.F2));
            st1._e1 += new EventHandler(_EH1l);
            st1._e2 += new EventHandler(_EH1r);
            st1._e0 += new EventHandler(_Fin1);
            st2._e1 += new EventHandler(_EH2l);
            st2._e2 += new EventHandler(_EH2r);
            st2._e0 += new EventHandler(_Fin2);
 
            T1_l.Start();
            T1_r.Start();
            T2_l.Start();
 
            Console.ReadLine();
        }
 
        static void _Fin1(object sender, EventArgs e)
        {
            Console.WriteLine("First finish  " + sender.ToString());
            if (!T2_r.IsAlive)
                T2_r.Start();
        }
        static void _EH1l(object sender, EventArgs e)
        {
            Console.WriteLine("Left  " + sender.ToString());
        }
        static void _EH1r(object sender, EventArgs e)
        {
            Console.WriteLine("Right " + sender.ToString());
        }
        static void _Fin2(object sender, EventArgs e)
        {
            Console.WriteLine("Finish  " + sender.ToString());
        }
        static void _EH2l(object sender, EventArgs e)
        {
            Console.WriteLine("     Left  " + sender.ToString());
        }
        static void _EH2r(object sender, EventArgs e)
        {
            Console.WriteLine("     Right " + sender.ToString());
        }
    }
    public class ST
    {
        public event EventHandler _e1, _e2, _e0;
        private decimal _d = 0;
        private int[] v_s;
        private int[] v_t;
        private int[] v_d;
        int x, y = 0;
        private DateTime dt;
        private int tt = 1000;
        private int a = 0;
        Random sl = new Random();
        public ST(int _t, int _i, int _a)
        {
            v_s = new int[_t];
            v_t = new int[_t];
            v_d = new int[_t];
            Console.Write("Stick " + _a.ToString() + " (");
            for (int i = 0; i < _t; i++)
            {
                v_s[i] = sl.Next(1, _i);
                v_t[i] = _t / 60;
                v_d[i] = v_s[i] * v_t[i];
                if (i != (_t - 1))
                    Console.Write(v_s[i].ToString() + ",");
                else
                    Console.Write(v_s[i].ToString());
 
            }
            Console.WriteLine(")");
            dt = DateTime.Now;
            //   this._d = v_s.Sum();
            foreach (int q in v_s)
                this._d += q;
            y = _t;
            this.a = _a;
 
            //    Console.WriteLine("Stick {0} Duration: {1} Time: {2}", _a, v_d.Sum(),_t);
            int e = 0;
            foreach (int q in v_d)
                e += q;
            Console.WriteLine("Stick {0} Duration: {1} Time: {2}", _a, e, _t);
            Console.WriteLine();
        }
        public void F1()
        {
            string _b = "";
            decimal _tt = 0;
            while (Duration > 0)
            {
                if (Duration <= v_d[x])
                {
                    _tt = Math.Round(((Duration / Convert.ToDecimal(v_d[x])) *
                        Convert.ToDecimal(v_t[x]) / 2), 2) * tt;
 
                    if ((Program.T2_r.IsAlive) && a == 2)
                        Program.T2_r.Abort();
                    if ((Program.T1_r.IsAlive) && a == 1)
                        Program.T1_r.Abort();
                }
                else
                    _tt = v_t[x] * tt;
                Thread.Sleep(Convert.ToInt32(_tt));
                _b = String.Format("Speed: {0:D2} Time: {1:F0} Duration: {2:D2} Remaining: {3:F0} Elapsed: {4:D2}",
                    v_s[x], _tt / tt, v_d[x], Duration - v_d[x], dt.Subtract(DateTime.Now).Duration().Seconds);
 
                _e1((object)_b, new EventArgs());
                Duration = v_d[x];
                x++;
            }
        }
        public void F2()
        {
            string _b = "";
            decimal _tt = 0;
            while (Duration > 0)
            {
                y--;
                if (Duration <= v_d[y])
                {
                    _tt = Math.Round(((Duration / Convert.ToDecimal(v_d[y])) *
                        Convert.ToDecimal(v_t[y]) / 2), 2) * tt;
                    if ((Program.T2_l.IsAlive) && a == 2)
                        Program.T2_l.Abort();
                    if ((Program.T1_l.IsAlive) && a == 1)
                        Program.T1_l.Abort();
                }
                else
                    _tt = v_t[y] * tt;
                Thread.Sleep(Convert.ToInt32(_tt));
                _b = String.Format("Speed: {0:D2} Time: {1:F0} Duration: {2:D2} Remaining: {3:F0} Elapsed: {4:D2}",
                 v_s[y], _tt / tt, v_d[y], Duration - v_d[y], dt.Subtract(DateTime.Now).Duration().Seconds);
                _e2((object)_b, new EventArgs());
                Duration = v_d[y];
            }
        }
        private decimal Duration
        {
            get { return _d; }
            set
            {
                _d = _d - value;
                if (_d < 0)
                    _d = 0;
                if (_d == 0)
                {
                   _e0((object)dt.Subtract(DateTime.Now).Duration().Seconds, new EventArgs();
 
                    if ((Program.T1_l.IsAlive) && a == 1)
                        Program.T1_l.Abort();
                    if ((Program.T1_r.IsAlive) && a == 1)
                        Program.T1_r.Abort();
                    if ((Program.T2_l.IsAlive) && a == 2)
                        Program.T2_l.Abort();
                    if ((Program.T2_r.IsAlive) && a == 2)
                        Program.T2_r.Abort();
                }
            }
        }
    }
}