 | Loading… |
|
|
Napredni način unošenja šifri
Napredni način unošenja šifri
Napredni način unošenja šifri
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 da rješavamo sljedeć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, preduslov je da 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 sljedeć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 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 artikala preko stored procedure, onda u tabeli u
koju se upisuju pozicije, tipka ENTER ne prelazi na sljedeće polje.
Funkcionalnost kursorskih tipki i TAB-a je nepromenjena.
|
 |
Program uvek po povratku iz ove procedure provjerava da li je šifra artikla, kojeg
je procedura vratila, pravilna (da li je upisana u šifrant artikala).
Isto tako, važeće su i kontrole za serijski broj.
|
 |
set nocount on
je obavezna naredba, jer procedura mora uvijek da
vrati samo jedan recordset.
|
 |
Niz, koji je predstavljen u polju ERRMSG se uvijek 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 koristimo ovaj način traženja (upisivanja)
šifri, onda
NE DELUJE i potrebno ih je uključiti (isprogramirati ručno) u proceduru!
|
Primjer skenirane šifre, koja sadrži identifikator, šifru, količinu i
serijski broj
Imamo šifru sljedeć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(13), -- 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 vrijednost
as
set nocount on
if Left(@cText,2) = '01' -- da li je to sastavljena šifra?
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 sljedećeg oblika (npr. cipele):
EEEEEEEEEEEEEEBBBBVVV
gdje je
- EEEEEEEEEEEEEE - 14-ocifrena EAN šifra
proizvoda
- BBBB - 4-ocifrena šifra boje
- VVV - 3-ocifrena šifra veličine
Artikli su pomješ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 sljedeć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 vrijednost
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
 | Loading… |
 | Loading… |
|
|
|