Kai su MSCAN lokacijomis vienu metu (lygiagrečiai) dirba keli darbuotojai, atsiranda poreikis iš anksto rezervuoti prekių likučius. Tai užtikrina, kad skirtingi asmenys nebūtų siunčiami į tą pačią lokaciją paimti tų pačių prekių.
Šiam tikslui sukurta galimybė tiesiai iš pardavimų arba vidinių operacijų modulių sugeneruoti lokacijos rezervavimo operacijas. Darbuotojui užbaigus atrinkimą, rezultatas automatiškai perkeliamas atgal į pradinę operaciją.
Šio funkcionalumo naudojimui būtina mscan.app aplikacija (daugiau informacijos skyriuje Diegimas).
Visas likučių rezervavimo ir atrinkimo procesas susideda iš trijų pagrindinių žingsnių:
Prieš pradedant naudotis likučių rezervavimu, būtina atlikti šiuos sistemos konfigūravimo žingsnius:
1. Naujos būsenos sukūrimas. Reikia sukurti naują būseną, kuri indikuotų, jog operacija yra sėkmingai perduota atrinkimui į lokacijų modulį:
Sistemos parametre MSCAN_BUS sukuriamas naujas įrašas, kurio vartotojo kodas yra L.

Pardavimų bei vidinių operacijų sąrašuose sukuriama nauja operacijos būsena su identišku pavadinimu.

2. Naujo klavišo aprašymas. Pardavimų operacijų sąraše aprašomas naujas greitasis klavišas (pvz., CTRL + Q), kurį paspaudus bus iškviečiamas operacijos perdavimas atrinkimui.

Pardavimuose:
mscan_ro_0e("", "expDate2 asc", "priority desc", .f., .f., .f., .f.)
Vidinėse op.:
mscan_vd_0e("", "expDate2 asc", "priority desc", .f., .f., .f., .f.)
Funkcijose mscan_ro_0e ir mscan_vd_0e naudojami parametrai:
| Nr. | Reikšmė | Pavyzdys |
|---|---|---|
| 1. | Lokacija į - lokacija į kurią perkeliamos prekės, pvz. atrinkimo zona, gali būti tuščia |
"AZ" |
| 2. | Rūšiavimo eiliškumas parenkant likučius, pvz.: nuo mažiausio galiojimo | "exptDate2 asc" |
| 3. | Rūšiavimo eiliškumas formuojant lokacijų operacijas, pvz.: nuo didžiausio lokacijos prioriteto | "priority desc" |
| 4. | Lokacijos operacijos tipas (pagal nutylėjima 4 - rezervavimas) | 1 |
| 5. | Jei parametras užpildytas, užsakymai su pateiktu arba didesniu eilučių kiekiu siunčiami tiesiai atrinkimui MSCAN nekuriant lokacijų op. | 70 |
| 6. | Grupuoti užsakymus, nurodoma kiek vienetų į vieną užsakymą, negrupuojama jei parametras tuščias arba neperduotas | 100 |
| 7. | Jei grupuojama, apatinė kiekio riba | 90 |
| 8. | Jei grupuojama, viršutinė kiekio riba | 110 |
Svarbu tinkamai sukonfigūruoti rūšiavimo parametrą, kad lokacijų likučiai būtų parenkami tinkama tvarka, pvz nuo mažiausio galiojimo, pagal lokacijos kodą ir pan.
3. Formulė rezultato perkėlimui į pradinę operaciją. Sukuriama nauja formulė:
-- MSCAN rezultato perkėlimas iš lokacijų op. į pardavimus / vidines op.
-- randamas ryšys su pardavimo op. per i38 (turi būti ryšys 1 su 1 ir lok.op. pastabose prie visų eilučių turi būti pard.op. eil.nr.)
if exists (select 1 from dbo.I38_IRYS where i38_pav = 'Likučių lokacijoje rezervavimas' and i38_kodas2 = @operationCode and i38_modul2 = '0E' and i38_modul1 in ('RO', 'VD') having count(*) = 1)
and not exists (select 1 from dbo.RGI_MSCAN_0E_D where kodas_0e = @operationCode and note is not null and isnumeric(note) <> 1) and @module = '0E'
begin
declare @kodas_op char(12), @operationType2 char(12), @module2 char(2)
select @module2 = i38_modul1 from dbo.I38_IRYS where i38_pav = 'Likučių lokacijoje rezervavimas' and i38_kodas2 = @operationCode and i38_modul2 = '0E'
select @kodas_op = i38_kodas1 from dbo.I38_IRYS where i38_pav = 'Likučių lokacijoje rezervavimas' and i38_kodas2 = @operationCode and i38_modul2 = '0E' and i38_modul1 = @module2
select @operationType2 = 'ATR'
if @module2 = 'RO' and exists (select 1 from dbo.I06_PARH where i06_kodas_po = @kodas_op and i06_op_tip = 52)
select @operationType2 = 'PAJ'
delete dbo.RGI_MSCAN_D where operationCode = @kodas_op and module = @module2
insert into dbo.RGI_MSCAN_D (operationCode, module, operationType, rowNumber, productCode, productName, mscanCode, barcode, objectCode, lot,
unitCode, quantityApp, quantityDoc, fraction, isFullyCollected, quantitiesModifiedSuccessfully, errorMessage, addUser, updateUser, updateDate,
addDate, note, isInserted, extraInfo1, extraInfo2, extraInfo3, extraInfo4, extraInfo5, objectCode2, lot2, expDate)
select @kodas_op, @module2, @operationType2, E.note, D.productCode, max(D.productName), max(D.mscanCode), D.barcode, D.objectCode, D.lot,
D.unitCode, sum(D.quantityApp), sum(D.quantityDoc), D.fraction, 0, null, null, @user, @user, convert(char(30), getdate(), 20),
convert(char(30), getdate(), 20), max(D.note), 0, max(D.extraInfo1), max(D.extraInfo2), max(D.extraInfo3), max(D.extraInfo4),
max(D.extraInfo5), max(D.objectCode2), max(D.lot2), max(D.expDate)
from dbo.RGI_MSCAN_D D left join dbo.RGI_MSCAN_0E_D E on D.operationCode = E.kodas_0e and D.rowNumber = E.rowNumber
where D.module = '0E' and D.operationCode = @operationCode
group by E.note, D.productCode, D.barcode, D.objectCode, D.lot, D.unitCode, D.fraction
declare @mscan_koreguojama varchar(100), @mscan_koreguojama_busena numeric(3,0), @documentType numeric(2,0), @busena_be char(12)
if @module2 = 'RO'
select @documentType = i06_op_tip - 50 from dbo.I06_PARH where i06_kodas_po = @kodas_op
if @module2 = 'VD'
select @documentType = i09_tipas from dbo.I09_VIH where i09_kodas_vd = @kodas_op
select @mscan_koreguojama = coalesce(nullif(dbo.RGI_uf_param_96('MSCAN_BUS', @module2, 'K', 1), ''), 'MSCAN renkama')
select @mscan_koreguojama_busena = L19_BUSENA from dbo.L19_BUS where L19_PAV = @mscan_koreguojama and L19_MODUL = @module2 and (L19_TIPAS = 0 or L19_TIPAS = @documentType)
if @module2 = 'RO'
select @busena_be = L19_KODAS_BE from dbo.I06_PARH, dbo.L19_BUS where I06_KODAS_PO = @kodas_op and l19_busena = i06_busena and l19_modul = @module2
if @module2 = 'VD'
select @busena_be = L19_KODAS_BE from dbo.I09_VIH, dbo.L19_BUS where I09_KODAS_VD = @kodas_op and l19_busena = i09_busena and l19_modul = @module2
execute dbo.RGI_MSCAN_CHANGE_STATE @modul = @module2, @op = @kodas_op, @user = @user, @veiksmas = 'P', @busena = @busena_be, @busena_nauja = @mscan_koreguojama_busena, @tyliai = 1
execute dbo.RGI_OPK_EDIT @operationCode = @kodas_op, @module = @module2, @finalizeOption = 1, @tip_prekes = 1, @user = @user, @response_type = 2
end

Sukurta formulė nurodoma parametre MSCAN_PABAIG.

Siekiant efektyvinti darbą ir sumažinti vaikščiojimą sandėlyje, kelias pardavimo arba vidines operacijas galima sugrupuoti į vieną bendrą lokacijų rezervavimo operaciją.
Kaip veikia operacijų grupavimas:
Naudojant operacijų grupavimą, prarandamas atgalinis ryšys – nebelieka galimybės automatiškai perkelti atrinkimo rezultatų atgal į pradines operacijas. Šį procesą reikės valdyti ir užbaigti savarankiškai.