Likučių rezervavimas lokacijose

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).

Pagrindiniai veikimo principai

Visas likučių rezervavimo ir atrinkimo procesas susideda iš trijų pagrindinių žingsnių:

  1. Iniciavimas ir būsenos pakeitimas: sistemoje pažymimos reikiamos pardavimų arba vidinės operacijos. Naudojant priskirtą greitąjį klavišą, joms sukuriamos susietos lokacijų rezervavimo operacijos. Tuo pačiu metu pradinėms operacijoms automatiškai priskiriama nauja būsena, indikuojanti, kad jos jau perduotos atrinkimui į lokacijų modulį.
  2. Atrinkimas MSCAN aplikacijoje: tolesnis darbas vyksta išskirtinai per MSCAN aplikaciją. Sandėlio darbuotojas terminale mato ir vykdo tik lokacijų operacijas (su pačiais pardavimų ar vidiniais dokumentais tiesiogiai nedirbama).
  3. Rezultato sinchronizavimas: MSCAN aplikacijoje užbaigus lokacijos operaciją, surinkti duomenys (rezultatas) automatiškai perkeliami atgal į pradines pardavimų arba vidines operacijas. Šioms pradinėms operacijoms taip pat automatiškai suteikiama atitinkama pabaigimo (įvykdymo) būsena.

Paruošiamieji nustatymai

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.

    rez_01

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

    rez_02

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.

rez_03

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

rez_04

Sukurta formulė nurodoma parametre MSCAN_PABAIG.

rez_05

Operacijų grupavimas (maršrutų optimizavimas)

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:

  • Prioritetas vienodoms prekėms: formuojant bendrą operaciją, sistema pirmiausia stengiasi sugrupuoti tas pačias prekes iš skirtingų užsakymų, kad darbuotojas jas paimtų vienu ypu.
  • Vientisumo išlaikymas: grupuojamos pradinės operacijos nėra skaidomos per kelias skirtingas lokacijų operacijas.
  • Valdymas: grupavimo logika įjungiama ir konfigūruojama naudojant atitinkamos funkcijos parametrus (6, 7 ir 8).

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.