Avtomatično številčenje v Word-u (I. del)

April 8th, 2014

Oh, zmanjkalo mi je časa za redno pisanje bloga, saj sem se ukvarjal z zanimivim projektom za podjetje EGP, kjer je bila moja naloga optimizirati tisk. Zelo zanimivo, kako nastane škatlica oz. tisk na njej…

Toda seveda to ni poanta bloga, zato se vrnimo k temu, kar vam imam namen pokazati danes oz. vam bom prikazal v par naslednjih prispevkih. K pisanju je pripomoglo vprašanje uporabnice mojega foruma, ki jo je zanimalo, kako bi lahko v Word-u oblikovala dokument tako, da bi imele slike številčenje 10a, 10b in podobno. Seveda je tu govora o avtomatičnem številčenju :).

Kot vedno bomo torej najprej spoznali osnove.

Kako torej podnasloviti slike, da se bo do avtomatično številčile?

Preprosto.

  1. V Wordu označite sliko in pritisnite desni miškin gumb.
  2. Glede na verzijo Worda se vam bo odprl hitri menu z več ali manj izbirami. word_stevilcenje1
  3. Iz menija izberite opcijo Vstavi napis… In zopet se vam bo, glede na verzijo Worda, odprlo novo okno, ki je bolj ali manj podobno sledečemu: word_stevilcenje2
  4. V vsakem primeru pa boste imeli možnost napisati naslov slike (prvo vnosno polje Napis). Nikakor seveda ne izbrišite napisa ‘Slika 1’!
  5. Izbrali boste lahko drugačno oznako, saj ob številčenju seveda niste omejeni samo na slike (izbor Oznaka)
  6. In izbrali boste lahko položaj napisa; torej ali bo napis nad sliko ali pod njo (izbor Položaj).
  7. Ob teh opcijah pa imate, kot vidite, na voljo še nekaj preostalih opcij med katerimi sta uporabni predvsem dve:
  • Nova oznaka – z njo si izberete novo oznako za nek vaš element (npr. Gantagram)
  • Oštevilčenje – kjer lahko poveste ali bo v oznako slike vključena tudi številka poglavja. Včasih namreč želimo oz. potrebujemo dokument, kjer ima vsako poglavje številčene slike od 1 dalje.

Ko torej takole dodate napise k slikam, lahko slike (z napisi skupaj!) prosto premikate po dokumentu oz. jih vrivate / brišete … pa bo številčenje vedno pravilno. Seveda ne pozabite osvežiti številčenja oz. osvežiti polj! To naredite s tipko F9 (Osveži polja):

  1. Izberite celoten dokument (CTRL + A)
  2. Osvežite polja (F9).

Kakšna polja?

Vprašanje, ki se pojavi je: »Zakaj moramo osvežiti polja oz. kje so kakšna polja?«.

Na to vprašanje pa vam bom odgovoril naslednjič, ko bom razložil na kakšen način takšno avtomatično številčenje sploh deluje.

Številčenje v SQL podatkovnih bazah IV

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

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

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?

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…

Številčenje v SQL podatkovnih bazah

Oktober 31st, 2013

V razvoju prej ali slej naletimo na problem, ko moramo zapise številčiti. Vsakemu dokumentu pač moramo določiti edinstveno številko, ki pa mora biti ob tem še zaporedna.

Vse SQL podatkovne baze poznajo avtomatično številčenje primernega ključa – ko torej v tabelo dodamo nov zapis, slednji dobi naslednjo zaporedno številko. To imenujemo tehnično številčenje zapisov. Problem pa se pojavi, ko potrebujemo vsebinsko številko dokumenta.

Za lažje razumevanje problema, si predstavljajmo tipično podatkovno tabelo, v kateri imamo poslovne dokumente – predračune, račune, dobavnice… Vsi različni dokumenti so v isti tabeli, a vsak med njimi mora imeti lastno vsebinsko številko. Primer:

#  DOKUMENT     VSEB. ŠT.   OSTALI PODATKI

1  Predračun    PR-1/2013   ... itd ...
2  Predračun    PR-2/2013   ... itd ...
3  Račun        RA-1/2013   ... itd ...
4  Dobavnica    DO-1/2013   ... itd ...
5  Predračun    PR-3/2013   ... itd ...
6  Predračun    PR-4/2013   ... itd ...
7  Račun        RA-2/2013   ... itd ...
8  Dobavnica    DO-2/2013   ... itd ...
9  Dobavnica    DO-3/2013   ... itd ...

Kot je lepo vidno v tabeli ima vsak tip dokumenta lastno številčenje.

Kako določiti vsebinsko številko?

Opcij je seveda več a nekako jih lahko uredimo v tri sklope:

  1. Sekvence – če jih podatkovna baza podpira.
  2. Lastna tabela za vsak tip številčenja – za vsak tip dokumenta narediti lastno tabelo, ki določi naslednjo številko
  3. Ena tabela za vso številčenje – za vse številčenje uporabiti eno samo tabelo

Sekvence

Dobro

  • Rešitev namenjena temu konkretnemu problemu

Slabo

  • Ne poznajo jo vse podatkovne baze

Lastna tabela za vsako številčenje

Dobro

  • Deluje v vseh SQL bazah
  • Zelo podobna rešitev kot sekvence

Slabo

  • Veliko malih tabel
  • Vse tabele je potrebno ustvariti vnaprej ali pa v programu vedno preverjati ali tabela obstaja ali ne.

Za vso številčenje uporabiti eno samo tabelo

Dobro

  • Deluje v vseh SQL bazah
  • Preprosta rešitev
  • Ni veliko dodatnega dela

Slabo

  • Ni primerna za SQL baze z veliko hkratnimi uporabniki

V naslednjih prispevkih bom podrobneje predstavil vsako izmed možnosti…

Katere povezave uporablja moja datoteka?

Oktober 21st, 2013

Danes sem na forumu prejel zanimivo vprašanje, katerega rešitev je prav zanimiva. MS namreč spremlja (če mu to dovolite), kaj uporabniki počno in predvsem, česa ne počno. In če neke funkcije veliko uporabnikov ne uporablja jo preprosto skrijejo, da ne moti večine, ki je tako ali tako ne uporablja.

Ena izmed takšnih funkcij, ki je veliko uporabnikov ne uporablja, sam pa jo pri urejanju diplomskih nalog redno uporabljam, je pregled povezav dokumenta.

Kot verjetno veste, lahko Word-ov dokument vsebuje elemente, ki so povzeti iz drugih datoteke (recimo grafe, ki se nahajajo v Excelovi datoteki). Na ta način sta datoteki povezani in ko se graf spremeni v Excelu se sprememba takoj odrazi tudi v Wordu.

Vse lepo in prav, a danes ne bom govoril o tem. Z Word-om 2010 je MS namreč skril funkcijo, ki nam je omogočila pogledati katere povezave vsebuje naša datoteka

Kako priti do tega okna?

Kot rečeno je torej potrebno v Wordu 2010 in nadalnjih malce telovadbe, da pridemo do tega okna:

Najprej odpremo okno z možnostmi našega Word-a

V oknu z možnostmi se postavimo na Orodna vrstica za hitri dostop’. Na desni strani se pokažejo nove možnosti, kjer na vrhu izberemo ‘Vsi ukazi’ v ponujenm seznamu spodaj najdemo ukaz ‘Uredi povezave do datotek’ ter jih dodamo na hitro vrstico.

In tako imamo opcijo v naši hitri vrstici:

Univerzalni temeljni dohodek (UDT)

Oktober 4th, 2013

Zaradi drugih obveznosti mi je malce zmanjkalo časa za vzdrževanje bloga in zato sem razmišljal, da je čas za malce drugačno objavo.

Tako se danes ne bom posvetil računalniški tematiki, temveč socialni. Že nekaj časa se tudi v Sloveniji pogovarjamo o tki. univerzalnem temeljnem dohodeku (UTD). Ideja ni nova, a družba je že tako napredovala, da jo lahko tudi uresničimo.

Kaj je UDT?

Temeljni dohodek je dohodek, brezpogojno dodeljen vsem na individualni osnovi brez preverjanja premoženjskega stanja in brez delovne zahteve. Je oblika zagotovila minimalnega dohodka, ki se od obstoječih oblik v različnih evropskih državah razlikuje na tri pomembne načine:

  1. izplačuje se posameznikom in ne gospodinjstvom;
  2. izplačuje se ne glede na kakršenkoli dohodek iz drugih virov;
  3. izplačuje se brez zahteve po opravljanju kakršnegakoli dela ali pripravljenosti sprejeti ponujeno službo.

Prosim premislite, prebrskajte sami. To ni podpora lenuhom to je pot v boljši in pravičnejši svet.

Če se strinjate z mano (in seveda mnogimi drugimi) vas prosim, da idejo podprete s podpisom, ki bo omogočil vložitev pobude v kolesje EU.

Predstavitveni film (za SLO podnapise kliknite spodaj oznako CC (ob spodnjem desnem robu videa)): https://www.youtube.com/watch?v=zru79jcVTt4

Stran za podporo in podpis: http://basicincome2013.eu/ubi/sl/

Hvala!

Dodatek (31.10.2013 – dan varčevanja!)

Za vse, ki se še niste odločili

Nov zakon o spletnih piškotkih

Junij 25th, 2013

S  15. junijem je stopil v veljavo spremenjeni Zakon o elektronskih komunikacijah (ZEKom-1), ki zaostruje pravila glede uporabe spletnih piškotkov.

Spletni piškotki so majhne datoteke, ki se shranijo na računalnik obiskovalca spletne strani. Skrbijo za boljšo uporabniško izkušnjo, spremljanje statistik, napredno spletno oglaševanje in še marsikaj.

Po novem zakonu smo upravljalci spletnih strani dolžni opozoriti obiskovalca o piškotkih, ki jih nalagamo na vašo napravo, s katero se povezujete na splet.

Spletišče Matjazev.NET sestavljajo štirje sklopi:

  • Osnovno spletišče Matjazev.NET, s splošnimi informacijami o podjetju, nasveti, zastonj in plačljivo programsko opremo, knjigami….
  • Blog, ki ga trenutno berete
  • Forum, kjer najdete brezplačno pomoč pri uporabi MS Pisarne
  • Spletišče MEXCEL.biz, kjer najdete brezplačne dodatke za vaš MS Excel.

Nekoč smo na omenjenih spletiščih uporabljali programsko opremo Google Analytics, ki nam je omogočila spremljati koliko obiskovalcev se ustavi na naših spletnih straneh ter tudi, kaj vas najbolj zanima.

Z uveljavitvijo tega zakona je omenjena storitev postala brezpredmetna, saj jo ima vsak obiskovalec možnost izključiti in tako postanejo njeni rezultati napačni oz. nenatančni in nimajo več smisla.

S tem razlogom na spletišču ne uporabljamo Google Analytics programske opreme in tudi nobene druge programske opreme s pomočjo katere bi vas kakorkoli spremljali.

Piškotki, ki jih na naših spletnih straneh uporabljamo

MExcel.BIZ

Na spletišču Mexcel.biz uporabljamo dva piškotka, ki sta za delovanje strani nujno potrebna, zato sta dovoljena tudi v novem zakonu o elektronskih komunikacijah:

  • PHPSESSID je piškotek, ki nam omogoča vzdrževanje seje in je standarden PHP piškotek
  • lang je piškotek, s katerim si zapomnimo vašo izbrano jezikovno različico in z njegovo pomočjo se na stran vedno vrnete v izbranem jeziku.

Ker sta oba piškotka dovoljena vas za posebno dovoljenje ne sprašujemo!

Matjazev.NET

  • PHPSESSID je piškotek, ki nam omogoča vzdrževanje seje in je standarden PHP piškotek
  • PREF je piškotek, ki vam omogoča iskanje po spletišču in uporablja google tehnologijo iskanja

Na spletišču pa imate tudi možnost branja in pisanja komentarjev, kar nam zagotavlja tehnologija Disqus, ki pa uporablja lastne piškotke in za uporabo slednjih vas posebej vprašamo.

Matjazev.NET/blog

Na spletišču pa imate možnost deljenja vsebine, kar nam zagotavlja tehnologija ShareThis, ki uporablja lastne piškotke in za uporabo slednjih vas posebej vprašamo.

MExcel.BIZ/forum

Spletišče teče na tehnologiji phpBB3, ki za delovanje potrebuje piškotke, saj brez njih ne more teči, zato vas za uporabo slednjih posebej ne vprašamo.


Skupno delo

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…