Archive for the ‘Zanimivo’ Category

Davčne blagajne

Ponedeljek, November 9th, 2015

V januarju 2016 bo v Sloveniji obvezna uporaba davčnih blagajn za vse gotovinska plačila. Na spletni strani FURS-a si lahko preberete vse tehnične specifikacije potrebne za davčno potrjevanje računov.

Kako poteka davčno potrjevanje računov

V osnovi je to zelo preprost in uporaben sistem. Pred izpisom (izdajo računa) se morate namreč povezati na strežnik davčne uprave in nanj prenesti podatke o računu, FURS pa vam vrne edinstveno številko EOR (Edinstvena Oznaka Računa), ki jo morate izpisati na računu in s katero dokazujete, da ste račun tudi zares poslali na FURS.

Ozadje

Seveda pa se podrobnosti vedno skrivajo v ozadju in povezava na FURS niti ni tako trivialno preprosta oz. povezava je preprosta, saj gre za standarden internetni protokol, vendar pa je tja potrebno poslati digitalno podpisan račun in tukaj se stvari malce zapletejo.

Zastonj rešitev na dlani

Da bi se ne bilo potrebno vsakumur ukvarjati s:

  • podrobnostmi digitalnega podpisa,
  • podrobnostmi izračuna zaščitne številke (ZOI)
  • podrobnostmi izrisa QR kode

sem na GITHub-u odprl rešitev, ki je vsakomur na voljo povsem brezplačno. Za uporabo rešitve potrebujete le računalnik z operacijskim sistemom Windows. Ker je v SLO še kar nekaj blagajn, ki tečejo na operacijskem sistemu Windows XP, je podprt tudi slednji.

Minimalne zahteve za uporabo te povsem zastonj rešitve je:

  1. Win XP, SP 3, .NET 4.0 – ali seveda katerikoli novejši WIN sistem
  2. Uporaba .NET razvojnega okolja (C#, VB.NET ali pa tudi kakšnega bolj eksotičnega, a teh verjetno ni veliko 🙂 )
Izgled testnega programa

Izgled testnega programa

Kaj pa če ne uporabljate .NET razvojnega okolja

V tem primeru pa seveda ponujene knjižnice ne morete neposredno izkoristiti, a dokler vaš program teče v WIN okolju je problem rešen. Ponudim vam lahko namreč sledeč možnosti povezave:

  1. EXE program, ki ga pokličete iz vašega programa in slednji
    • Pregleda račun ali slednji vsebuje vse zahtevane elemente
    • Izračuna zaščitno kodo (ZOI)
    • Obda račun z zahtevano ovojnico
    • Ga digitalno podpiše in pošlje na FURS
    • Od FURS-a sprejme odgovor in ga posreduje v vaš program
    • Podroben opis EXE programa najdete tukaj.
  2. WIN service, ki nadzoruje dve poljubni mapi in čim vi odložite podatke o računu v prvo mapo, jih program vzame, obdela, pošlje na FURS (enako kot v primeru EXE programa) in rezultat izpiše v izhodno mapo
  3. V kolikor želite uporabiti knjižnico sami in elemente zvezati neposredno v vaš program, vam lahko ponudim ActiveX komponento, ki naredi vse našteto
  4. Če imate zares veliko blagajn pa lahko vse skupaj zavrtite na nekem strežniku in ponudim vam lahko ASP.NET spletne storitve ki izvedejo vse omenjeno.

V kolikor torej potrebujete rešitev pišite na info@matjazev.net in rešitev boste dobili na dlani 😉

Gmail koledar zna pošiljati SMS-e

Torek, Oktober 7th, 2014

Danes me je opomnik koledarja spet zmotil. Seveda sem ga prekinil in potem pa nanj pozabil. Malce sem razmišljal, da bi mi zelo ustrezalo, če bi namesto klasičnega opomnika dobil raje SMS.

Ne bodi len! Seveda sem se takoj zagnal na internet in pogledal, katera aplikacija mi zna za opomnik poslati SMS. Malce iščem med aplikacijami in njihovimi cenami/zmožnostmi… nakar opazim omembo Google koledarja 🙂

In res! Google koledar lahko – med vsemi ostalimi možnostmi – kot opomnik pošlje tudi SMS in to seveda zastonj.

Kako vključiti SMS pošiljanje opomnikov?

  1. Zaženete aplikacijo Google koledar in v gornjem desnem kotu Nastavitve.
    gmail_sms1
  2. Med nastavitvami koledarja boste našli tudi ‘Mobilne nastavitve’
    gmail_sms2
  3. Tu izberete državo in vpišete vašo telefonsko številko ter zahtevate varnostno kodo
    gmail_sms3
  4. Google vam po SMS-u pošlje varnostno kodo, ki jo vpišete v spodnje polje in to je to.
  5. Sedaj lahko kot opomnike uporabljate tudi SMS-e
    gmail_sms4

Skupinsko delo ali pomoč na daljavo

Ponedeljek, September 1st, 2014

Po daljši odsotnosti, vam bom v današnjem prispevku predstavil dve zelo uporabni spletni storitvi, ki vam lahko pomagata pri skupinskem delu in/ali delu na daljavo.

Osebno obe orodji uporabljam, kadar pomagam uporabnikom na daljavo oz. kadar se pogovarjamo po telefonu pa je potrebno zraven še kaj narisati in/ali napisati.

Skupinsko pisanje – MoPad

V kolikor se znajdete v situaciji, ko je potrebno nekaj zapisati, uporabniki pa so raztreseni po pisarnah ali celo mestih (državah 😉 ) lahko uporabite orodje MoPad (https://etherpad.mozilla.org/)

Uporaba orodja (spletne strani) je skrajno preprosta. Ko pridete na omenjeno spletno stran imate na izbiro dva gumba. Z enim odprete javno beležko z drugim pa lahko stvari še malce bolj omejite oz. ustvarite delovno skupino.

Ko torej odprete novo beležko, s tem dobite edinstven spletni naslov (URL), ki seveda vsebuje osnovno ime spletne strani, ter avtomatično generirano ime vaše beležke (npr: https://etherpad.mozilla.org/bxYEgcJ3RU)

Vse kar morate narediti je da uporabnikom oz. sodelavcem posredujete omenjen spletni naslov in vsi bodo takoj videli vašo beležko in lahko pisali vanjo.

skupinsko_delo_1

Kot lahko hitro vidite je zaslon razdeljen na 4 dele:

  1. Zgoraj imate orodja za preprosto urejanje besedila
  2. Večji del zaseda beležka, kamor lahko pišete
  3. Desno zgoraj lahko vsak uporabnik zapiše svoje ime in s tem dobi svojo barvo
  4. Desno spodaj pa lahko uporabniki tudi govorite »chatate«, ne da bi pri tem pokvarili besedilo v beležki

Skupinsko risanje – WhiteBoard Fox

Arhitekturno enakovredno orodje za risanje pa se imenuje WhiteBoardFox in domuje na naslovu (http://whiteboardfox.com/). Ideja je povsem enakovredna že predstavljeni, le da v tem primeru uporabniki ne vpisujemo teksta (no seveda ga tuli lahko), temveč skupaj rišemo.

Tudi uporaba je enakovredna. Odprete novo risalno ploščo (delavno tablo) in njen naslov posredujete ostalim. S tem se lahko tudi ostali pridružijo skupini in skupaj ustvarite skico.

skupinsko_delo_2

In še najlepše…

Ker vse deluje v spletnem brskalniku lahko orodji uporabljate tako na računalniku, kot tablicah, telefonih in ostalih napravah, ki so povezane v splet in imajo spletne brskalnike.

Spet DropBox

Sreda, Maj 7th, 2014

Že skoraj tri leta je minilo odkar sem opisal, tedaj še ne tako zelo znano, spletno storitev Dropbox. Ker je prispevek še vedno popularen (glede na statistko obiska) vam bom danes pokazal še kako iz, že teko zelo dobre storitve, mogoče iztisniti še več.

Ko si torej začnete uporabljati DropBox, slej ali prej želite kakšno sliko, datoteko, film… deliti tudi s kom drugim. Tedaj v DropBox-u izberete opcijo ‘Copy public link’ in storitev vam pove preko katere javne povezave bodo lahko tudi drugi uporabniki prišli do vaše datoteke.

V mojem primeru sem na splet dal sliko konja in v kolikor zahtevam povezavo, mi DropBox vrne tole: https://www.dropbox.com/s/oxg08i5gz04wnxp/horse.jpg?dl=0. Kot vidite je to navadna spletna povezava in če kliknete nanjo boste v brkljalnik naložili sliko konja.

Obstaja pa še ena opcija in sicer, da na konec povezave dodate ?dl=1, v tem primeru brkljalnik ne bo poskušal odpreti datoteke, temveč jo bo uporabniku vedno kar naložil (“dovnlovdal”; kot temu pravimo dandanes)

https://www.dropbox.com/s/oxg08i5gz04wnxp/horse.jpg?dl=1

 

Številčenje v SQL podatkovnih bazah IV

Sreda, December 18th, 2013

Naslednji način pridobivanja številke (prvi del, drugi del, tretji del) pa je poenotena tabela za avtomatično številčenje različnih (poljubnih) elementov. Spet velja, da je to smiselno za MSSql in SQLite podatkovni bazi, saj Oracle pač uporablja sekvence.

Definirajmo torej enotno tablo za številčenje. Tabela bo imela 3 polja. Prvo polje je pač primarni ključ. Za to rešitev ga ne potrebujemo, vendar pa sem osebno pristaš pravila, da mora imeti vsaka tabela primarni ključ. Drugo polje je nek opis števca saj je želja, da se za vsak različen števec neodvisno številči. Tretje polje pa je pač števec sam. tabela s podatki bi torej izgledala takole:

ID   OPIS       ŠTEVILO
1    Dobavnica      1
2    Predračun      1
3    Predračun      2
4    Račun          1
5    Predračun      3
6    Račun          2
7    Dobavnica      2
8    Dobavnica      3
9    Dobavnica      4
10   Predračun      4
11   Dobavnica      5
12   Račun          3
13   Dobavnica      6

Definicija tabele

MSSql:

CREATE TABLE SEKVENCA
( ID        INT   IDENTITY(1,1)  NOT NULL
, OPIS      VARCHAR(15) NOT NULL
, STEVILO   INT         NOT NULL
);

SQLite:

CREATE TABLE SEKVENCA
( ID        INTEGER     NOT NULL
, OPIS      VARCHAR(15) NOT NULL
, STEVILO   INTEGER     NOT NULL

, PRIMARY KEY(ID)
);

Pridobivanje nove številke:

MSSql:

BEGIN TRANSACTION;
INSERT INTO SEKVENCA (OPIS, STEVILO) VALUES('racun', (SELECT COALESCE(MAX(STEVILO) + 1, 1) FROM SEKVENCA WHERE OPIS = 'racun'));
COMMIT TRANSACTION;

SQLite:

BEGIN TRANSACTION;
INSERT INTO SEKVENCA (OPIS, STEVILO) VALUES('racun', (SELECT COALESCE(MAX(STEVILO) + 1, 1) FROM SEKVENCA WHERE OPIS = 'racun'));
COMMIT TRANSACTION;

OPOMBA: Uporaba transakcije je obvezna! Na pogled se zdi, da se izvaja INSERT stavek, ki je avtonamna akcija, toda znotraj INSERT stavka se izvaja še SELECT stavek in vmes se lahko vsebina podatkov spremeni!

Številčenje v SQL podatkovnih bazah III

Sreda, December 18th, 2013

Naslednji način pridobivanja številke (prvi del, drugi del) je lastna tabela za vsako številčenje. Izmed omenjenih SQL podatkovnih baz (Oracle, MSSql in Sqlite) je Oracle že od nekdaj uporabljal sekvence in avtomatičnega številčenja primarnih ključev ne pozna. Za MSSql in SQLite pa je to osnovni način avtomatičnega številčenja. Kot omenjeno že zadnjič je MSSql sekvence dobil šele v reinkernaciji iz leta 2012, SQLite pa jih še vedno ne pozna.

Za avtomatično številčenje na podlagi primarnega ključa je torej potrebno to določiti že v definiciji tabele:

MSSql:

CREATE TABLE SEQ_RACUNI
(
  SID INT IDENTITY(1,1)
);

SQLite

CREATE TABLE SEQ_RACUNI
(
  SID INTEGER NOT NULL

, PRIMARY KEY(ID)
);

V obeh primerih smo določili tabelo z enim samim poljem, ki se bo avtomatično povečevalo v kolikor mu številke ne določimo. Torej:

INSERT INTO SEQ_RACUNI DEFAULT VALUES

Na ta način torej v MSSql in SQLite podatkovnih bazah dobimo avtomatično številčenje.

POZOR: Seveda pa – glede na sekvence – obstaja velika razlika. Pri sekvencah vsak zahtevek po novi številki samo poveča trenutno vrednost sekvence; v primeru avtomatičnega številčenja primarnih ključev pa se številke zapisujejo v podatkovno bazo in tako imamo za prvih 1000 številk v tabeli 1000 zapisov. To se seveda lahko preprosto reši s periodičnim brisanjem podatkovne tabele:

DELETE FROM SEQ_RACUNI WHERE SID < (SELECT MAX(SID) FROM SEQ_RACUNI)

Številčenje v SQL podatkovnih bazah II

Sreda, December 18th, 2013

Zadnjič sem vam omenil tri načine avtomatičnega številčenja v SQL podatkovnih bazah, danes pa vam bom prikazal prvega. Posamezne načine vam bom prikazal na primeru treh popularnih SQL baz: Oracle, MSSQL in Sqlite.

Sekvence (SEQUENCE)

Izmed omenjenih treh podatkovnih baz poznata sekvence Oracle in MSSQL (vendar MS samo od letnika 2012 dalje!). Postopek dela s sekvencami je skrajno preprost.

  1. Najprej definiramo novo sekvenco
  2. Ko potrebujemo naslednjo številko jo iz sekvence zahtevamo

To je očitno zelo dober način za pridobivanje avtomatičnih številk. Sekvenco določimo z najmanj petimi parametri (ime sekvence, minimalna vrednost, maksimalna vrednost, preskok in začetna vrednost):

CREATE SEQUENCE sequence_name
  MINVALUE value
  MAXVALUE value
  START WITH value
  INCREMENT BY value;

Primer:

CREATE SEQUENCE seq_racuni
  MINVALUE 1
  MAXVALUE 99999999
  START WITH 1
  INCREMENT BY 1;

Kot je vidno sekvenca ni omejena na zaporedno številčenje, temveč lahko številčimo tudi s korakom večjim od 1 (INCREMENT BY). Ravnotako ni nujno, da se sekvenca začne z 1 (START WITH).

OPOMBA: Seveda je z uporabo najpreprostejše srednješolske matematike tako ali tako preprosto napisati poljubno funkcijo številčenja tako da pač napišemo neko funkcijo y = F(x), kjer X pač raste od 1 do N, y pa je številka, ki nas zanima. Recimo, če želimo začeti številčiti z 8 in potem nadaljevati s korakom 15: y = 8 + 15 * (x – 1)!

Uporabiti takšno sekvenco pa je še bolj preprosto.

V Oracle jo preprosto zahtevamo s funkcijo .nextval:

SELECT seq_racuni.nextval FROM dual;

oziroma

INSERT INTO racuni
  (stevilka_racuna, znesek, datum...)
VALUES
  (seq_racuni.nextval, 1123.4, SYSDATE...);

V MSSQL pa s konstruktom NEXT VALUE FOR:

SELECT NEXT VALUE FOR seq_racuni;

oziroma

INSERT INTO racuni
  (stevilka_racuna, znesek, datum...)
VALUES
  (SELECT NEXT VALUE FOR seq_racuni, 1123.4, SYSDATE...);

Oracle Data Provider For .NET – What is Number?

Četrtek, November 7th, 2013

Grrr… Oracle Data Provider for .NET just cost me time, (some) money and above all reputation.

My .NET application was using MS Oracle Data Provider which was OK. Many are not satisfied with it, but I had no particular problems… Until I hit BLOBs.

To be honest BLOBs are not often used in business application, so I didn’t have much knowledge on how to use it in c#. It is quite easy, but MS Oracle data provider is not fond of them.

So I was forced to use ORACLE Data provider for .NET… And – o my god – database is full of NUMBER fields so MS is using OracleType.Number, but Oracle for .NET does not know “numbers” so I was forced to change the source code from OracleType.Number to OracleDbType.Int32 or OracleDbType.Double (or something like that).

And there I made a typical programming error – typo – I one procedure I changed OracleType.Number to OracleDbType.Int32, but it was used as amount field (so double)… 🙁

And all “of the sudden” amounts were rounded to integers. Nobody noticed for 14 days… and then panic – everything is wrong – who is to blame – me – I admit (ashamed)…

BUT: Thanks Oracle, maybe guys from DB team can teach guys from .NET team what are “numbers” in DB terms…

Skupno delo

Ponedeljek, Junij 3rd, 2013

Kot že ptički čivkajo je Microsoft v novi različici MS podprl skupinsko delo več uporabnikov na istem dokumentu. Osebno se mi to zdi uporabna možnost in dodatek novi pisarni ki pa ima en velik problem… Vsi ljudje še namreč nimate najnovejše MS pisarne… Pa tudi tako hitro je še ne bodo/boste imeli.

V vmesen času pa lahko podobno – seveda zelo okrnjeno – a vseeno zelo uporabno možnost skupinskega urejanja dokumenta izkusite povsem zastonj in povsem internetno – torej brez potrebe kakršne koli instalacije na lokalni računalnik- kar hkrati pomeni tudi uporabo z različnimi napravami in različnimi operacijskimi sistemi.

Programska oprema se imenuje MoPad in nastaja pod okriljem Mozzila fundacije, dosegljivo pa je na spletni strani https://etherpad.mozilla.org/.

Preizkusite ne bo vam žal…

Iskanje celic glede na obliko oz. lastnosti

Torek, Februar 5th, 2013

Iskanje vrednosti v Excelovih tabelah je preprosto in ga takoj obvlada vsak uporabnik. Tako recimo vsi vemo, da lahko poiščemo vse celice, ki imajo vrednost 516 preprosto tako, da izberemo orodje za iskanje (bližnjica CTRL+F, Urejanje / Najdi (Excel pred 2007) oz Osnovno / Urejanje / Poišči in izberi (Excel 2007 in nadalnji)) ter vanj vpišemo vrednost 516 ter kliknemo ‘Nadaljuj iskanje’ ali pa ‘Najdi vse’


Iskanje posebnost

Kaj pa če želimo najti vse združene celice ali pa vse celice, katerih tekst je v rdeči barvi?

Tudi tukaj nam zna Excel priskočiti na pomoč, saj lahko v že omenjenem oknu, natančneje določimo kakšno obliko celice iščemo. Zgoraj desno imamo namreč na voljo gumb ‘Oblika’ s katero določimo obliko in Excel išče celice, ki imajo natanko določeno obliko.

Primer: iskanje združenih celic

Če želimo poiskati vse združene celice izberemo torej orodje za iskanje, iskalni pogoj pustimo prazen, saj nas vsebina ne zanima in izberemo gumb ‘Oblika’. Odpre se novo okno, v katerem določimo obliko celic, ki jih želimo najti. Ker nas zanimajo celice, ki so združene, se postavimo na zavihek ‘Poravnava’ ter označimo, da nas zanimajo združene celice

Ko vse potrdimo, nam Excel prikaže seznam združenih celic oz. nam pokaže posamezne združene celice:

Na enak način lahko recimo najdemo tudi vse celice, ki imajo rdečo barvo ali pa imajo rdečo barvo in so združene.

Če nas ob obliki zanima tudi vrednost pač v okno vnesemo tudi vrednost in tako najdemo vse celice, ki imajo npr. vrednost 516 in so obarvane rdeče.
Ne pozabite počistiti oblikovanja, ko iščete nekaj drugega!

Excel si namreč zapomni kakšno oblikovanje ste izbrali in ob naslednjem iskanju oblikovanje ohrani. Ko torej vi naslednji recimo vnesete iskalni pogoj ‘Ljubljana’ se lahko zgode, da bo Excel vstrajal da te besede ne najde, čeravno vi veste, da se v tabel zagotovo nahaja…

Problem je lahko v tem, da ste prej označili, da vas zanimajo celice z rdečo barvo in Ljubljane z rdečo barvo pa v tabeli recimo ni. Excel vam tudi kaže, kakšno obliko išče, zato bodite na to pozorni

Oblikovanje počistite v padajočem meniju