Newsgroup: it.comp.lang.delphi
Titolo: Sincronizzazione ordini

Ciao a tutti.
Un'applicazione di gestione ordini basata su file paradox è installata 
su 2 portatili consegnati all'agente A e all'agente B che lavorano 
autonomamente, nel senso che non hanno una sede vera e propria presso la 
quale ritrovarsi per scambiarsi i files o sincronizzare i database.
Come posso far emettere ordini ad entrambi se la numerazione sequenziale 
degli ordini non viene rispettata?
In fase di redazione dell'ordine, il software assegna una numerazione 
autoincrement relativa al database locale e non tiene conto degli ordini 
gia' emessi dall'altro agente.
Avete un'idea di come far rispettare la numerazione degli ordini ad 
entrambi gli agenti?
Ho anche pensato di far lavorare gli agenti autonomamente con 
numerazione locale e farli sincronizzare ogni sera collegandosi tra loro 
e facendo fare il "server" che spedisce l'ordine definitivo con 
numerazione definitiva solo ad uno dei portatili.
Ogni idea e' gradita.
Ciao
Gino

 ad uno dei portatili.
Buona soluzione.
Ciao
-- 
Morde

Morde ha scritto:

C'e' solo un piccolo problema.
Se non sono riusciti a sincronizzarsi una sera non possono spedire gli 
ordini, pena un caos con la numerazione :(
Tenkiu

 ordini, pena un caos con la numerazione :(
Certo, a meno che... immagina di assegnargli una numerazione 
alfanumerica sulla base di numerazioni personali. Ad esempio, hai due 
venditori tizio e caio e il software, offline, emette ordini con 
numerazione TZ per tizio e CA per caio, un esempio:
TZ2009001,CA2009001, ecc... così non avresti problemi di conflitti.
Il tuo software, in modalità offline, emette solo documenti con 
numerazione "pubblica" per così dire, nel momento in cui fai il merge 
nella base dati aziendale, gli verrà assegnato una numerazione univoca 
e interna.
Un ordine di un cliente fatto a tizio, potrebbe così avere TZ2009122 
come numero d'ordine sui documenti pubblici, e 123456 come numero 
d'ordine interno, calcolcato al momento del merge, per la gestione 
interna tua.
Spero di essermi spiegato abbastanza chiaramente..
Ciao
-- 
Morde

 
Ti sei spiegato molto bene Morde.
Rimane il problema che se uno dei portatili (chiamiamolo portatile A )ha 
il compito di raccogliere , rinumerare e spedire gli ordini alla casa 
mandante, non può spedire gli ordini della giornata fino a quando non 
riceve gli ordini provenienti dal computer B.
Se il portatile A spedisse i propri ordini prima della sincronizzazione 
si potrebbe verificare l'eventualità che assegni numeri d'ordine 
superiori ad ordini con data inferiore (cosa poco simpatica per chi si 
vede arrivare ordini con sequenza errata).
Grazie mille.

 ordini con sequenza errata).
Nì :-)
La mia architettura si basa sul concetto che sia A che B sono *client* 
del tuo sistema informativo centrale (la sede) e che non sono loro ad 
assegnare la numerazione interna, ma il sistema centrale. A e B 
generano invece degli ORDER KEY che sono corretti e progressivi ognuno 
in base al proprio contatore. Sarà il sistema centrale ad assegnare poi 
una numerazione sequenziale ed univoca a tutti i flussi di record che 
gli arriveranno da A e B, in qualsiasi momento lo facciano.
Se il computer B non dovesse mandare il suo flusso al sistema 
informativo per tre giorni i fila, il sistema genererebbe una 
numerazione interna aziendale univocamente relativa agli ordini 
provenienti da A.
Se poi B ti manda tutti gli ordini tre giorni dopo, sul documento 
d'ordine fatto firmare al cliente e stampato da B in loco, compare 
comunque una numerazione alfanumerica con la data giusta.
Il tuo sistema informativo a quegli ordini dara' una numerazione 
interna con i contatori di 3 giorni dopo, ma la numerazione è *interna* 
a vostro uso.
Questo sistema cerca di limitare al massimo la fuoriuscita di 
informazioni "imbarazzanti" dalla tua azienda: il cliente all'azienda 
si rivolgerà utilizzando sempre il numero d'ordine che lui possiede, 
quello pubblico, e il vostro ORDER KEY sarà sempre quello generato dai 
due computer A e B.
So che non e' un approccio perfetto e pulito, ma se devi gestire 
l'OFFLINE non vedo soluzioni definitive in tal senso. (a meno che 
qualcuno la pensi in modo migliore dal mio e si palesi qui sul ng)
Ciao
-- 
Morde

 arriveranno da A e B, in qualsiasi momento lo facciano.
Grazie Morde.
Nel primo post ho scritto testualmente:
  "all'agente A e all'agente B che lavorano autonomamente, nel senso che 
non hanno una sede vera e propria presso la quale ritrovarsi per 
scambiarsi i files o sincronizzare
"
quindi gli agenti non hanno una sede vera e propria, l'unico modo e' 
farli comunicare via internet.
Non esiste un computer centrale (sede) che ordina la numerazione.
Gli agenti generano un numero di ordine da 1 a x per ciascuna ditta 
rappresentata (sono agenti plurimandatari).
Per assurdo dovrebbero telefonarsi per scambiarsi l'ultimo numero 
d'ordine generato per la ditta rappresentata A e per la ditta B ecc. ecc.
Ecco perché ho pensato alla sincronizzazione via internet e al fatto che 
solo uno pc aveva il compito di numerare e spedire (alla ditta 
rappresentata) gli ordini da evadere.
Ciao


E cosi' ogni agente dovrebbe conoscere tutti gli altri agenti di tutte le
ditte rappresentate per potersi sincronizzare con loro ? A che ora si
dovrebbero sincronizzare? Cosa succede se il pc dell'unico agente
abilitato a trasmettere gli ordini si rompe o se questo agente si ammala ?
Se dovessi implementare la soluzione farei come Morde.
Ciao
--- posted by geoForum on 
http://www.delphiedintorni.it

 Se dovessi implementare la soluzione farei come Morde.
E' un pattern: puoi avere da uno a N client, e tutti devono riconoscere 
un unico Gestore. Sarà il Gestore ad assegnare la numerazione dovuta.
Nel caso in questione, il gestore deve fare anche il client, ecco 
perchè è di difficile soluzione.
Semplificare: "divide et impera" è sempre valido.
Ciao
-- 
Morde

> Ecco perchÃ© ho pensato alla sincronizzazione via internet e al fatto che 

Il problema e' che non esiste "il sistema centrale".
L'azienda e' formata da soli 2 agenti chiaro?
Non esiste ufficio. Non esiste server (altrimenti sarebbe tutto 
risolto). C'e' solo connettività internet sporadicamente durante la 
giornata.
Gli agenti vorrebbero spedire gli ordini separatamente.
Ma questo implica per forza la spedizione di ordini con contenuto 
diverso ma con numerazione duplicata.

 con numerazione duplicata.
Non ti resta che far generare una numerazione distinta per ogni agente, 
A o B o C ecc...
A2008000001
B2008000001
ecc.
..
Ciao
-- 
Morde

Slackit ha scritto:

la butto li' :)
Un web service che quando chiamato (con appositi parametri) restituisce 
il numero giusto ?
Goblin
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/

 numero giusto ?
Ha appena detto che non esiste un "server centrale".. vale a dire che 
esistono solo i rappresentanti coi loro notebook.
Ciao
-- 
Morde

 esistono solo i rappresentanti coi loro notebook.
Costa pochi euro all'anno.
Lo fai su Aruba, lo fai su amazon, lo fai dove ti pare per 50 euro
all'anno.
Gp

 all'anno.
Si, certamente, ma se leggessi tutto il thread vedresti che un'altra 
problematica e' la mancata connettività degli agenti.. non tutti hanno 
la possibilità di accedere a internet tutti i giorni, pertanto il merge 
dei dati non e' mai garantito.Tuttavia ci sono i principali provider 
telefonici che vendono adsl su  chiavetta usb per collegarsi col 
telefonino.
E poi, non essendoci un server centrale, tutti gli agenti dovrebbero 
collegarsi nello stesso momento per fare il merge verso l'agente 
responsabile che farebbe da server. Il tutto mi pare di aver capito che 
gira intorno a due soli venditori.
Ciao
-- 
Morde

 la possibilità di accedere a internet tutti i giorni
Il thread l'ho letto e in esso c'e' scritto anche come fare qualora
qualcuno non si collega tutti i giorni.
Non c'e' problema: io mi collego circa una volta al giorno, tu circa
una volta ogni 3, pinco una volta ogni 5.
Il sistema dala numerazione sequenziale a chi si collega e quando si
collega.
Se vedi anche questo un problema, credo che il problema ce l'abbiano i
tuoi clienti. Spiegaglielo con calma che funzionata.
Ciao,
Gp

 tuoi clienti. Spiegaglielo con calma che funzionata.
Non ti seguo piu'...
-- 
Morde

 gira intorno a due soli venditori.
Ok.
Continuo a ringraziarvi per il tempo dedicato.
Tanto per rendere semplici le cose vi faccio uno schemino.
L'agente A inserisce gli ordini 1,2,3 ... sul database del suo portatile
lo stesso giorno, l'agente B inserisce gli ordini 1,2,3,4,5,6 ... sul 
database del suo portatile.
Arriva il momento di spedire le email contenenti gli ordini :
allora l'agente A va a casa, si connette e spedisce gli ordini 1,2 e 3 
alla casa madre A.
Il giorno dopo (oppure non appena trova connettività) l'agente B 
spedisce i suoi ordini 1,2,3,4,5,6 alla stessa casa madre.
Risultato ...... un casino che non finisce più.
Il grosso problema e' che non e' detto che questi benedetti agenti 
abbiano la possibilità di sincronizzarsi tra loro prima di spedire gli 
ordini. In quanto non e' detto che siano entrambi disponibili allo 
stesso momento.
Il paradosso e' che il caso è difficile perché é troppo banale.
La soluzione di contattare un servizio di numerazione esterna a cui 
tutti gli agenti devono riferirsi prima di spedire non e' una brutta idea.
Anche perché per spedire devi avere connettività e per sincronizzare la 
numerazione anche.
Questo vuol dire che se l'orine numero 23 e' stato assegnato all'agente 
A non sarà più disponibile per l'altro agente B.
Della serie : "Il primo che arriva si accaparra il numero".
Gino

 stesso momento.
e quindi ci deve essere un agente esterno che metta ordine nei loro numeri
d'ordine , e la casa madre che riceve gli ordini non ci pensa nemmeno di
farlo suppongo.
Mario

 Risultato ...... un casino che non finisce più.
Nessun casino
Girono 1
Agente A ordini A1,A2,A3,A4,A5
Agente B ordini B1,B2,B3,B4,B5
Quando pronti fanno il merge
Ordini evasi dal data base centrale (C) di A+B C1,C2..C10
Giorno 2
Agente A ordini A6,A7,A8,A9,A10
Agente B ordini B6,B7,B8,B9,B10
In questo giorno B non si collega ....
Gli Ordine evasi dal sistema centrale sono solo quelli di A, quindi 
C11,C12,C13,C14,C15 che si riferiscono solo a quelli di A6..A10
Girono 3
Agente A ordini A11,A12,A13,A14,A15
Agente B ordini B11,B12,B13,B14,B115
Oggi si collegano entrambi al sistema centrale, il sistema fa il merge a 
continua la sua numerazione interna, quindi C16,C17,C18..C25
Ovviamente dovrai mettere un campo con riferimento interno per ricordare chi 
ha fatto cosa ovvero
C1 punta ad A1, C2 ad A2, C5a B1, C6 a B2 ...... C11 ad A6, C12 as A7 ....., 
C16 ad A11, C21 a B11, C22 a B12
Spero di non aver capito male !!!!
Ciao, Daniele 

 Ciao, Daniele 
Grazie mille

 Hai capito bene eccome. Hai centrato il problema nel dettaglio .
Ha spiegato la soluzione come avrei voluto spiegarla io, oltre che aver 
centrato il problema.
Ciao
-- 
Morde

 
Diciamo che il problema e' un po' meno semplicistico.
Come sempre vi ringrazio molto per la vostro utilissimo aiuto.
Grazie a tutti e a buon rendere.
Gino