Exemple speciale pentru introducerea ID-ului pot fi realizate cu o procedură stocată care va converti intrarea (de obicei valoarea scanată) în datele necesare programului pentru a funcționa în mod normal. În acest fel, puteți gestiona următoarele cazuri:
- Cod EAN/UCC 128
- Coduri cu o variație a produsului
- Coduri atipice sau
- Alte combinații.
Dacă există o procedură stocată pe server, programul o va rula cu siguranță. Dacă procedura nu există pe server, programul va funcționa în mod obișnuit.
Parametrii pentru procedură sunt fixați. Aveți grijă, procedura returnează setul de înregistrări cu cel puțin următoarele câmpuri:
- ISOK: poate fi T sau F și raportează dacă operația a reușit;
- ERRMSG: este un avertisment pentru utilizator atunci când apare o eroare;
- IDENT: ID-ul articolului;
- KOLICINA: Cantitate;
- SERIALNO: Număr de serie.
Programul poate returna, pe lângă aceste câmpuri, alte câmpuri care sunt în Pantheon, cu excepția câmpurilor utilizator care sunt în tabelul
PROMETPOZ.
 |
Dacă introduceți articole prin procedura stocată, nu puteți trece cu tasta ENTER la câmpul următor.
Funcționalitățile cursorului și ale tastelor TAB nu se schimbă.
|
 |
Când procedura va returna un articol, programul va verifica dacă acest articol este corect (dacă este introdus în registrul articolelor).
Este la fel pentru verificarea numerelor de serie.
|
 |
set nocount on
este o comandă obligatorie deoarece procedura trebuie să returneze întotdeauna doar un set de înregistrări.
|
 |
Intervalul de caractere din câmpul ERRMSG va afișa întotdeauna, dacă ISOK =
'T' sau 'F'.
În acest fel, puteți folosi această posibilitate pentru a afișa un anumit avertisment.
|
 |
Dacă folosiți acest tip de căutare (introducere) a ID-urilor, atunci nu puteți folosi:
și trebuie să o integrați manual în procedură!
|
Exemplu de cod scanat cu un identificator, ID, cantitate și
număr de serie
Să spunem, există un articol cu următoarea formă de ID (de exemplu, articol alimentar):
01EEEEEEEEEEEEEEKKKKKDDDDDDD
unde
- 01 - este un identificator pentru un articol compus;
- EEEEEEEEEEEEEE - este un cod EAN de 14 cifre al
articolului;
- KKKKK - este o cantitate de 5 cifre în grame (ARTICOLUL
este standardizat în KG);
- DDDDDDD - este o dată de expirare a articolului.
Dacă un articol nu are un identificator 01 la început, atunci articolul este
considerat un articol normal și va fi transferat în Pantheon.
Procedura stocată care trebuie configurată pentru acest caz este următoarea:
create procedure [dbo].[dl_HE_MSIdentSetText]
@cKljuc Char(13), -- cheia pentru documentul pe care ați rulat introducerea codului
@nPoz SmallInt, -- linia pe care a fost activată introducerea codului (nu este necesar!!)
@cSubjekt Char(30), -- client sau furnizor al documentului
@cText VarChar(512) -- valoarea introdusă
as
set nocount on
if Left(@cText,2) = '01' -- este acesta un cod compus?
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 -- nu, atunci returnează scanatul ca articol
select 'T' as acISOK, '' as acERRMSG, @cText as acIDENT,0 as anQty,'' as acSERIALNO
Exemplu de cod scanat cu o variație a produsului
Să spunem, există un articol cu următoarea formă de ID (de exemplu, încălțăminte):
EEEEEEEEEEEEEEBBBBVVV
unde:
- EEEEEEEEEEEEEE - este cod EAN de 14 cifre al articolului;
- BBBB - este codul de 4 cifre al culorii;
- VVV - este codul de 3 cifre al mărimii.
Articolele sunt amestecate, astfel încât puteți scana oricare dintre articole. Articolul vă va spune dacă
conține o variație a produsului sau nu.
Procedura stocată care trebuie configurată pentru acest caz este următoarea:
create procedure [dbo].[dl_HE_MSIdentSetText]
@cKljuc Char(11), -- cheia pentru documentul pe care ați rulat introducerea codului
@nPoz SmallInt, -- linia pe care a fost activată introducerea codului (nu este necesar!!)
@cSubjekt Char(30), -- client sau furnizor al documentului
@cText VarChar(512) -- valoarea introdusă
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