Posebne primjere unosa šifri rješavamo posebnom stored procedurom,
koja pretvara unos (obično skeniranu vrijednost) u podatke, koji su
PANTHEON-u potrebni za rad. Na taj način možemo rješavati slijedeće
slučajeve:
- EAN/UCC 128 šifre
- Šifre s produktnom varijantom
- netipične šifre ili
- druge kombinacije
Stored procedura se izvede u svakom slučaju, samo ako ista postoji na
poslužitelju. Ako procedura na poslužitelju ne postoji, PANTHEON funkcionira
normalno.
Parametri za proceduru su fiksni. Potrebno je pripaziti da procedura vraća
recordset barem sa slijedećim poljima:
- ISOK: koje može biti T/F i kaže da li je operacija uspjela
- ERRMSG: je korisnička poruka kod greške
- IDENT: šifra artidenta
- KOLICINA: količina
- SERIALNO: serijski broj
Osim tih polja, može vratiti i sva ostala PANTHEON polja (osim korisničkih),
koja se nalaze u tablici PROMETPOZ.
 |
Ako upotrebljavate ovaj način unosa identa preko stored procedure, onda u
tablici u koju se upisuju pozicije, tipka ENTER ne prelazi na slijedeće polje.
Funkcionalnost kursorskih tipki i TAB-a je nepromijenjena.
|
 |
Program uvijek po povratku iz te procedure provjerava da li je šifra identa,
kojeg je procedura vratila, pravilna (da li je upisana u šifrant MS).
Isto tako, važeće su i kontrole za serijski broj.
|
 |
set nocount on
je obavezna naredba, jer procedura mora uvijek
vratiti samo jedan recordset.
|
 |
Niz, koji je predan u polju ERRMSG se uvijek ispiše, ne glede na to da li je
ISOK = 'T' ili 'F'.
Na taj način možemo ovu mogućnost upotrijebiti za objavu određenog upozorenja.
|
 |
Ako upotrijebimo ovaj način traženja
(upisivanja) šifri, onda
NE RADI i potrebno ih je uključiti (ručno isprogramirati) u proceduru!
|
Primjer skenirane šifre, koja sadrži identifikator, šifru, količinu i
serijski broj
Imamo šifru slijedećeg oblika (npr. prehrambeni proizvod):
01EEEEEEEEEEEEEEKKKKKDDDDDDD
gdje je
- 01 - identifikator, koji kaže da se radi o
tako sastavljenom ident
- EEEEEEEEEEEEEE - 14 mjesna EAN šifra proizvoda
- KKKKK - 5 mjesna količina u gramima (IDENT je
normiran u KG)
- DDDDDDD - datum isteka roka upotrebe identa
Ako artikl na početku nema identifikator 01, onda je artikl običan, te ga
prenesemo u PANTHEON.
Stored procedura, koju moramo napisati za taj primjer je slijedeća:
create procedure [dbo].[dl_HE_MSIdentSetText]
@cKljuc Char(13), -- ključ, na katerem dokumentu je bil sprožen vnos kode
@nPoz SmallInt, -- pozicija, na katerem je bil sprožen vnos kode (ni nujno!!)
@cSubjekt Char(30), -- Kupec ali dobavitelj dokumenta
@cText VarChar(512) -- Vnešena vrednost
as
set nocount on
if Left(@cText,2) = '01' -- je to sestavljena koda?
select 'T' as acISOK, '' as acERRMSG, SubString(@cText,3,14) as acIDENT,
(cast(SubString(@cText,18,5) as money) / 1000) as anQty,
SubString(@cText,24,10) as acSERIALNO
else -- ne, potem vrni poskenirano kot ident
select 'T' as acISOK, '' as acERRMSG, @cText as acIDENT,0 as anQty,'' as acSERIALNO
Primjer skenirane šifre, koja sadrži produktnu varijantu
Imamo šifru slijedećeg oblika (npr. cipele):
EEEEEEEEEEEEEEBBBBVVV
gdje je
- EEEEEEEEEEEEEE - 14 mjesna EAN šifra proizvoda
- BBBB - 4 mjesna šifra boje
- VVV - 3 mjesna šifra veličine
Artikli su miješani, tako da možemo skenirati bilo koji artikl. Iz šifre znamo
da li se radi o artiklu s produktnom varijantom ili ne.
Stored procedura, koju moramo napisati za taj primjer je slijedeća:
create procedure [dbo].[dl_HE_MSIdentSetText]
@cKljuc Char(11), -- ključ, na katerem dokumentu je bil sprožen vnos kode
@nPoz SmallInt, -- pozicija, na katerem je bil sprožen vnos kode (ni nujno!!)
@cSubjekt Char(30), -- Kupec ali dobavitelj dokumenta
@cText VarChar(512) -- Vnešena vrednost
as
set nocount on
declare
@cIdent char(16),
@cTipSerijske char(1)
set @cIdent = Left(@cText,14)
set @cTipSerijske = null
select @cTipSerijske = SERIALNO
from IDENT
where IDENT = @cIdent
if @cTipSerijske is null
select 'F' as ISOK, 'Ni identa' as ERRMSG, '' as IDENT,0 as KOLICINA,'' as SERIALNO
else
if @cTipSerijske = 'P' then
select 'T' as ISOK, '' as ERRMSG, @cIdent as IDENT,0 as KOLICINA,Right(@cText,7) as SERIALNO
else
select 'T' as ISOK, '' as ERRMSG, @cText as IDENT,0 as KOLICINA,'' as SERIALNO