843 messaggi dal 08 aprile 2009
Salve a tutti.
Questo non è un problema più che altro tecnico ma di logica e volevo confrontarmi con voi per il tipo di approccio.
Stiamo risviluppando un sistema BtB quindi non e-commerce.
I nostri clienti hanno il proprio gestionale e danno accesso sul nostri BtB ai loro clienti ed agenti.
I dati (anagrafiche, articoli, listini, ecc...) vengono sincronizzati tra gestionale e web tramite dei files con dei tracciati definiti facendo delle richieste a un servizio che abbiamo messo a disposizione.
L'implementazione dei dati può essere effettuata eliminando tutto il contenuto o aggiornando solo i dati modificati.
Per le anagrafiche base no problem.
Adesso ci siamo posti il problema delle GIACENZE.
Mettiamo il caso che le giacenze vengono inviate la prima volta.
Man mano che gli utenti fanno gli ordini la disponibilità è data dal carico iniziale - il venduto.
Così come vengono inviate le anagrafiche anche gli ordini tornano indietro nel gestionale e quindi il gestionale ricalcola le giacenze.
Queste vengono rinviate al web.
E qui nasce il problema.
Potrei riazzerare tutte le giacenze ma non so se le giacenze inviate dal gestionale sono al netto dei documenti elaborati.
E cmq tra il tempo del gestionale e l'invio delle nuove giacenze altri utenti potrebbero aver rifatto ordini e quindi non sarebbe più valida la giacenza azzerata.

Se avete già affrontato questo problema che tipo di approccio avete elaborato?
Che mi consigliate?

Puntualizzo che non sempre il gestionale è un nostro sistema quindi noi non abbiamo il controllo delle operazioni che vengono effettuate.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Laura,

laurar181 ha scritto:
Mettiamo il caso che le giacenze vengono inviate la prima volta.

Ok, quindi nonostante abbiate predisposto un webservice, i vari gestionali vi comunicano le giacenze ad intervalli regolari (es. una volta al giorno) e non nel momento in cui il dato cambia?

Se è così, non puoi fare troppo affidamento sulle giacenze che ti ritrovi nel sito web, perché quei valori tenderanno a diventare obsoleti velocemente.

Se questa premessa è corretta, allora hai probabilmente un sistema eventually consistent e gli ordini che ricevi dal sito web dovrebbero essere in realtà delle richieste d'ordine. Quando poi consegnerai tali richieste al gestionale, quest'ultimo dovrà darti un esito per ciascuna: accettata o rifiutata. Importando gli esisti nel sito web, potrai comunicare con certezza ai clienti se le loro richieste sono state convertite in ordini effettivi o meno (ed eventualmente comunicare il numero d'ordine assegnato dal gestionale).

Se lo approcci così puoi anche permetterti che la connessione tra il sito web e il gestionale venga interrotta per un lungo periodo. L'ultima giacenza nota ti serve giusto come sistema di concorrenza ottimistica. Se, al ripristino della connessione, capitasse che l'effettiva giacenza sia inferiore, una o più richieste verranno rifiutate e ne darai comunicazione al cliente.

Non è strano, è un po' quello che a volte succede nella vita di tutti i giorni. Un cameriere al ristorante prende il tuo ordine, ma poco dopo torna a dirti che il piatto che avevi ordinato è finito, e ti invita a sceglierne un altro. Succede :)

ciao,
Moreno
Modificato da BrightSoul il 30 luglio 2014 23.59 -

Enjoy learning and just keep making
843 messaggi dal 08 aprile 2009
Gli intervalli di invio delle giacenze è il più disparato: ci sono clienti che le inviano 1 volta al giorno e chi ogni 5 minuti.
Si comunque è raccolta ordini e la procedura di ricezione dell'ordine dal gestionale c'è e c'è da svariati anni. I nostri clienti già utilizzano da anni i nostri sistemi di raccolta ordini sono che sono stati sempre sistemi installati su un device e quindi monoutente, invece adesso dobbiamo andare sul web.
Anche i tempi di ricezione ed elaborazione dell'ordine dal gestionale non sono noti (in quanto non sempre il gestionale non è il nostro) quindi il problema è più che altro concorrenziale.
Per come funziona sui device (quindi monoutente), ogni volta che il gestionale invia le giacenze quelle sul device vengono azzerate (carichi iniziali, vendite, resi).
Sul web dal momento in cui si ricevono ordini e vengono rielaborate le giacenze, altri utenti fanno ordini quindi il problema è:
ricevo le giacenze nuove e azzero i contatori come nel device?

In teoria no però che modo posso trovare per sapere in linea di massima fino a che ordine ricevuto dal gestionale sono state rielaborate le giacenze?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Laura,

laurar181 ha scritto:

ricevo le giacenze nuove e azzero i contatori come nel device?

non è questo il problema. Il problema principale, secondo me, è che devi prepararti all'evenienza che un ordine raccolto dal web non possa essere evaso.

Hai detto che la raccolta degli ordini c'è da diversi anni. Bene. Ora, secondo me, dovresti fare in modo che dal gestionale ti torni un feedback su questi ordini, oltre che i valori aggiornati delle giacenze.

Devi farti dire se un ordine può effettivamente essere evaso o meno, e propagare questa informazione ai clienti del portale web.

ciao,
Moreno

Enjoy learning and just keep making
843 messaggi dal 08 aprile 2009
Si è normale che dal gestionale deve arrivare un feedback però ripeto la cosa non può essere in tempo reale. Il feedback arriva con le giacenze aggiornate ma tra il tempo che vengono elaborati gli ordini dal gestionale, che vengono inviate le nuove giacenze altri utenti potrebbero aver fatti degli altri ordini ancora non inviati.
Quindi la regola di azzerare le vendite non vale più per un sistema multiutente....
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, penso di non essere riuscito a spiegare il mio punto di vista.

laurar181 ha scritto:

Si è normale che dal gestionale deve arrivare un feedback però ripeto la cosa non può essere in tempo reale.

Certo, e non è richiesto che quel feedback sia in tempo reale. Il tuo è un sistema eventually consistent, l'ho capito benissimo.

Cerco di rispiegare la cosa usando un altro approccio.

laurar181 ha scritto:

altri utenti potrebbero aver fatti degli altri ordini ancora non inviati.

Fai finta che io sia un apprendista neo-assunto da voi con limitate conoscenze di informatica, sistemi e gestione di magazzino. Tu sei la mia tutor. Spiegami perché questi altri ordini sono un problema.
Modificato da BrightSoul il 05 agosto 2014 12.54 -

Enjoy learning and just keep making
843 messaggi dal 08 aprile 2009
Cerco di spiegarmi:
La tabella giacenze, proprio a farla semplice, è composta da due colonne:
- carico
- vendite

La prima volta che vengono inviate le giaceze viene inizializzato il campo carico. Diciamo che mando 100 quindi avrò la mia tabella così composta:
- carico 100
- vendite 0

Ogni volta che un utente fa un ordine aumenta il campo vendite.
Quindi la disponibilità è data da CARICO - VENDITE.
Diciamo che a un certo punto io avrò:
- carico 100
- vendite 70
Questo vuol dire che nel mio magazzino ho ancora 30pz di quel prodotto.

A questo punto vengono inviati dal web gli ordini effettuati e quindi le vendite effettuate per 70pz.
Il gestionale elabora questi ordini.
Rimanda le giacenze al web rielaborate secondo gli ordini effettuati.
Diciamo che per quel prodotti mi dice 90.
Nel vecchio sistema mobile accadeva che ogni volta che venivano rinviate le giacenze si rinizializzava il campo carico e si metteva a 0 il campo vendite.
Qui non si può fare perchè se io facessi questa cosa accadrebbe questo:
- carico 90
- vendite 0

ma nel frattempo che gli ordini sono stati inviati ed elaborati dal gestionale e che il web ha ricevuto le nuove giacenze magari la tabella era:
- carico 100
- vendite 80

vuol dire che nel frattempo qualcuno ha fatto ordini di quel prodotto per altri 10pz e vuol dire che azzerando le vendite con le nuove giacenze io ho perso 10pz di vendite.

L'ideale sarebbe avvertire il gestionale in tempo reale di ogni vendita. Ma questo non è possibile per vari motivi:
- i gestionali a cui ci interfacciamo non sono i nostri
- non sempre i gestionali a cui ci interfacciamo sono fatti con tecnologie moderme (sappiamo benissimo quanti AS400 ancora girano)
- anche se sono fatti con tecnologie moderne il cliente non vuole spendere per farsi personalizzare e allineare la procedura.

Quindi scartando il tempo reale l'unica cosa che ci veniva in mente è salvare l'ultimo id ordine inviato.
Quando ricevo le giacenze il campo vendite è dato da 0 + somma di tutte le vendite di quel prodotto con id superiore all'ultimo salvato.
Questo mi potrebbe dare la quasi sicurezza di una giacenza al quanto reale.

Mi chiedevo però come altre persone si sono interfacciate con questo problema in quanto lo vedo abbastanza simile a un sistema di e-commerce e cioè vendita anche on-line. Non penso che le giacenze vengono inserite manualmente dall'utente ma penso che si siano costruiti dei batch di importazione. Penso inoltre che chi ha fatto il sistema di e-commerce non sia la stessa figura/azienda che ha il gestionale interno dell'azienda. Quindi mi chiedevo come queste procedure si sono interfacciate...
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

laurar181 ha scritto:

Quando ricevo le giacenze il campo vendite è dato da 0 + somma di tutte le vendite di quel prodotto con id superiore all'ultimo salvato.

Ok, e questo è risolto.

Ora poniamo il caso di un cliente le cui giacenze siano condivise tra più canali di vendita: telefono, negozi e il tuo sito web. Il gestionale a mezzogiorno ti invia il valore 100, ma già dopo alcuni minuti potrebbero essere arrivati degli ordini telefonici che hanno abbassato la giacenza a 50.
Tu non riesci a saperlo tempestivamente perché il gestionale ti invia comunicazioni solo una volta al giorno. Quindi rischi di vendere più merce di quella che sia in realtà disponibile.
E' un problema? Come ti comporti?
Modificato da BrightSoul il 06 agosto 2014 16.23 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.