Shembuj të veçantë mbi hyrjen e ID-së mund të vazhdojnë me një procedurë të ruajtur që do të konvertojë hyrjen (zakonisht vlera e skanuar) në të dhëna që programi kërkon për të funksionuar në një mënyrë normale. Kështu, ju mund të trajtoni rastet në vijim:
- Kodi EAN/UCC 128
- Kodet me një variacion produkti
- Kodet atypike ose
- Kombinime të tjera.
Nëse një procedurë e ruajtur ekziston në server, programi do ta ekzekutojë atë. Nëse procedura nuk ekziston në server, programi do të funksionojë në një mënyrë të zakonshme.
Parametrat për procedurën janë të fiksuar. Kujdes, procedura kthen grupin e regjistrave me të paktën fushat në vijim:
- ISOK: mund të jetë T ose F dhe raporton nëse operacioni ka pasur sukses;
- ERRMSG: është një paralajmërim për përdoruesin kur ndodh një gabim;
- IDENT: ID e artikullit;
- KOLICINA: Sasia;
- SERIALNO: Numri serial.
Programi mund, përveç këtyre fushave, të kthejë fusha të tjera që janë në Pantheon, përveç fushave të përdoruesit që janë në tabelën
PROMETPOZ.
 |
Nëse hyni artikuj përmes procedurës së ruajtur, nuk mund të lëvizni me çelësin ENTER në fushën tjetër.
Funksionalitetet e kursorit dhe çelësave TAB nuk ndryshojnë.
|
 |
Kur procedura do të kthejë një artikull, programi do të kontrollojë nëse ky artikull është i saktë (nëse është regjistruar në regjistrin e Artikujve).
Është e njëjtë për kontrollin e numrave serialë.
|
 |
set nocount on
është një komandë e detyrueshme sepse procedura duhet të kthejë gjithmonë vetëm një grup regjistrash.
|
 |
Gama e karaktereve në fushën ERRMSG do të shfaqet gjithmonë, nëse ISOK =
'T' ose 'F'.
Kështu, ju mund të përdorni këtë mundësi për të shfaqur një paralajmërim të caktuar.
|
 |
Nëse përdorni këtë lloj kërkimi (hyrjeje) ID-sh, atëherë nuk mund të përdorni:
dhe duhet ta integroni atë në procedurë manualisht!
|
Shembulli i një kodi të skanuar me një identifikues, ID, sasi dhe
numër serial
Le të themi, ka një artikull me formën e mëposhtme të ID-së (p.sh. artikulli ushqimor):
01EEEEEEEEEEEEEEKKKKKDDDDDDD
ku
- 01 - është një identifikues për një artikull të përbërë;
- EEEEEEEEEEEEEE - është një kod EAN 14-shifror i
artikullit;
- KKKKK - është një kod 5-shifror sasia në gramë (ARTIKULLI
është standardizuar në KG);
- DDDDDDD - është një datë skadence e artikullit.
Nëse një artikull nuk ka një identifikues 01 në fillim, atëherë artikulli konsiderohet si një artikull normal dhe do të transferohet në Pantheon.
Procedura e ruajtur që duhet të vendoset për këtë rast është si më poshtë:
create procedure [dbo].[dl_HE_MSIdentSetText]
@cKljuc Char(13), -- çelësi për dokumentin mbi të cilin keni kryer hyrjen e kodit
@nPoz SmallInt, -- rreshti mbi të cilin u aktivizua hyrja e kodit (nuk është e nevojshme!!)
@cSubjekt Char(30), -- klienti ose furnizuesi i dokumentit
@cText VarChar(512) -- vlera e futur
as
set nocount on
if Left(@cText,2) = '01' -- a është ky një kod i përbërë?
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 -- jo, atëherë kthejeni të skanuar si artikull
select 'T' as acISOK, '' as acERRMSG, @cText as acIDENT,0 as anQty,'' as acSERIALNO
Shembulli i një kodi të skanuar me një variacion produkti
Le të themi, ka një artikull me formën e mëposhtme të ID-së (p.sh. këpucë):
EEEEEEEEEEEEEEBBBBVVV
ku:
- EEEEEEEEEEEEEE - është kodi EAN 14-shifror i artikullit;
- BBBB - është kodi 4-shifror i ngjyrës;
- VVV - është kodi 3-shifror i madhësisë.
Artikujt janë të përzier, kështu që mund të skanoni cilindo nga artikujt. Artikulli do t'ju tregojë nëse përmban një variacion produkti apo jo.
Procedura e ruajtur që duhet të vendoset për këtë rast është si më poshtë:
create procedure [dbo].[dl_HE_MSIdentSetText]
@cKljuc Char(11), -- çelësi për dokumentin mbi të cilin keni kryer hyrjen e kodit
@nPoz SmallInt, -- rreshti mbi të cilin u aktivizua hyrja e kodit (nuk është e nevojshme!!)
@cSubjekt Char(30), -- klienti ose furnizuesi i dokumentit
@cText VarChar(512) -- vlera e futur
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, 'Nuk ka identë' 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