Posebne primere unosa šifri rešavamo posebnom stored procedurom, koja pretvara unos (obično skeniranu vrednost) u podatke, koji su PANTHEON-u potrebni za rad. Na taj način možemo da rešavamo sledeće slučajeve:
- EAN/UCC 128 šifre,
- Šifre sa produktnom varijantom,
- netipične šifre ili
- druge kombinacije
Stored procedura se izvodi u svakom slučaju, samo ako ista postoji na serveru. Ako procedura ne postoji na serveru, PANTHEON funkcioniše normalno.
Parametri za proceduru su fiksni. Potrebno je pripaziti da procedura vraća recordset barem sa sledećim poljima:
- ISOK: koje može biti T/F i kaže da li je operacija uspela
- ERRMSG: je korisnička poruka kod greške
- IDENT: šifra artikla
- KOLICINA: količina
- SERIALNO: serijski broj
Osim ovih polja, može vratiti i sva ostala PANTHEON polja (osim korisničkih), koja se nalaze u tabeli PROMETPOZ.
 |
Ako koristite ovaj način unosa identa preko stored procedure, onda u tabeli u koju se upisuju pozicije, taster ENTER ne prelazi na sledeće polje. Funkcionalnost kursorskih tastera i TAB-a je nepromenjena. |
 |
Program uvek po povratku iz ove procedure proverava da li je šifra identa, koji je procedura vratila, pravilna (da li je upisana u šifarnik MS).
Isto tako, važeće su i kontrole za serijski broj. |
 |
set nocount on
je obavezna naredba, jer procedura mora uvek da vrati samo jedan recordset.
|
 |
Niz, koji je predstavljen u polju ERRMSG se uvek ispiše, bez obzira na to da li je ISOK = 'T' ili 'F'.
Na taj način možemo ovu mogućnost da upotrebimo za objavu određenog upozorenja. |
 |
Ako upotrebimo ovaj način traženja (upisivanja) šifri, onda
NE DELUJE i potrebno ih je uključiti (isprogramirati ručno) u proceduru!
|
Primer skenirane šifre, koja sadrži identifikator, šifru, količinu i serijski broj
Imamo šifru sledećeg oblika (npr. prehrambeni proizvod):
01EEEEEEEEEEEEEEKKKKKDDDDDDD
gde je
- 01 - identifikator, koji kaže da se radi o tako sastavljenom artiklu
- EEEEEEEEEEEEEE - 14-cifrena EAN šifra proizvoda
- KKKKK - 5-cifrena količina u gramima (IDENT je normiran u KG)
- DDDDDDD - datum isteka roka upotrebe artikla
Ako artikal nema na početku identifikator 01, onda je artikal običan, te ga prenosimo u PANTHEON.
Stored procedura, koju moramo napisati za ovaj primer je sledeća:
create procedure [dbo].[dl_HE_MSIdentSetText]
@cKljuc Char(11), -- ključ, na kom dokumentu je pokrenut unos šifre
@nPoz SmallInt, -- pozicija, na kojoj je pokrenut unos šifre (nije nužno!!)
@cSubjekt Char(30), -- Kupac ili dobavljač dokumenta
@cText VarChar(512) -- Unešena vrednost
as
set nocount on
if Left(@cText,2) = '01' -- da li je to sastavljena šifra?
select 'T' as ISOK, '' as ERRMSG, SubString(@cText,3,14) as IDENT,
(cast(SubString(@cText,18,5) as money) / 1000) as KOLICINA,
SubString(@cText,24,10) as SERIALNO
else -- ako nije, onda vrati skenirano kao ident
select 'T' as ISOK, '' as ERRMSG, @cText as IDENT,0 as KOLICINA,'' as SERIALNO
Primer skenirane šifre, koja sadrži produktnu varijantu
Imamo šifru sledećeg oblika (npr. cipele):
EEEEEEEEEEEEEEBBBBVVV
gde je
- EEEEEEEEEEEEEE - 14-ocifrena EAN šifra proizvoda
- BBBB - 4-ocifrena šifra boje
- VVV - 3-ocifrena šifra veličine
Artikli su pomešani, tako da možemo da skeniramo bilo koji artikal. Iz šifre znamo, da li je artikal sa produktnom varijantom ili ne.
Stored procedura, koju moramo da napišemo za ovaj primer je sledeća:
create procedure [dbo].[dl_HE_MSIdentSetText]
@cKljuc Char(11), -- ključ, na kojem dokumentu je pokrenut unos šifre
@nPoz SmallInt, -- pozicija, na kojoj je pokrenut unos šifre (nije nužno!!)
@cSubjekt Char(30), -- Kupac ili dobavljač dokumenta
@cText VarChar(512) -- Uneš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 MS
where IDENT = @cIdent
if @cTipSerijske is null
select 'F' as ISOK, 'Ni artikla' 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