Hardware Upgrade Forum

Hardware Upgrade Forum (https://www.hwupgrade.it/forum/index.php)
-   Programmazione (https://www.hwupgrade.it/forum/forumdisplay.php?f=38)
-   -   Comparare due database e aggiornarne uno (https://www.hwupgrade.it/forum/showthread.php?t=2950472)


yurassik 30-10-2021 10:05

Comparare due database e aggiornarne uno
 
Nel mio lavoro ho iniziato ad utilizzare etichette elettroniche. Il mio gestionale mi permette unicamente di generare un csv con i prodotti in ordine alfabetico tipo

Nome, prezzo originale, prezzo scontato, percentuale di sconto, ecc.

Il software di gestione vuole però che ad ogni riga, e quindi prodotto, sia associato un id numerico univoco, tipo

ID, nome, prezzo originale, ecc.

Il problema è che ogni volta introduco un prodotto nuovo questo andrà inserito in ordine alfabetico andando a spostare gli ID di tutti i prodotti, non consentendomi l’importazione automatica di un nuovo csv.

Esiste un modo per automatizzare la comparazione di due Spreadsheet e di aggiornare il nuovo in automatico?

Sono alla ricerca di qualcuno, anche a pagamento, che mi aiuti a risolvere il problema.

Grazie a tutti

misterx 30-10-2021 10:15

metti un esempio di cosa vuoi ottenere così si capisce meglio

yurassik 30-10-2021 17:19

Quote:

Originariamente inviato da misterx (Messaggio 47615176)
metti un esempio di cosa vuoi ottenere così si capisce meglio

File 1 output originario dal gestionale

Nome, prezzo originale, prezzo scontato, percentuale di sconto

Bounty, 1.00, 1.00, 0
Mars, 1.00, 0.90, 10
Twix 1.50, 1.20, 20

File 2 input software esl

ID, nome, prezzo originale, prezzo scontato, percentuale di sconto

1, Bounty, 1.00, 1.00, 0
2, Mars, 1.00, 0.90, 10
3, Twix 1.50, 1.20, 20

Ora mettiamo che inserisco un nuovo prodotto Raffaello il gestionale genera un csv

Bounty, 1.00, 1.00, 0
Mars, 1.00, 0.90, 10
Raffaello, 0.50, 0.50, 0
Twix 1.50, 1.20, 20

Che se importo pari pari avrà un risultato

1, Bounty, 1.00, 1.00, 0
2, Mars, 1.00, 0.90, 10
3, Raffaello, 0.50, 0.50, 0
4, Twix 1.50, 1.20, 20

Andandomi a cambiare gli ID di tutte le righe dopo “Raffaello”

misterx 30-10-2021 18:39

chi decide la posizione dell'ultimo inserimento?

Mi aspettavo che Raffaello fosse l'ultima voce e quindi il problema non si poneva.

Yramrag 30-10-2021 18:55

l'ID numerico è la chiave primaria (univoca) della tabella articoli?
Se viene inserito un nuovo articolo, viene inserito in ordine alfabetico causando un rename dei record? Ho capito male? :mbe:

yurassik 30-10-2021 18:57

Il mio problema è proprio quello. Ogni volta che genero il csv dal gestionale è prodotto in ordine alfabetico rendendomi impossibile automatizzarlo

yurassik 30-10-2021 19:43

Quote:

Originariamente inviato da Yramrag (Messaggio 47615652)
l'ID numerico è la chiave primaria (univoca) della tabella articoli?
Se viene inserito un nuovo articolo, viene inserito in ordine alfabetico causando un rename dei record? Ho capito male? :mbe:

Il passaggio tra i due csv è manuale. Cercavo appunto un modo di automatizzare la procedura

misterx 31-10-2021 07:05

quindi il gestionale genera il csv senza ID ed in ordine alfabetico, ma non in ordine di inserimento.
Non mi è chiaro se a te l'output interessa mantenendo l'ordine di inserimento, magari attraverso data e ora che non vedo nel csv generato dal gestionale.

yurassik 31-10-2021 15:35

Quote:

Originariamente inviato da misterx (Messaggio 47615868)
quindi il gestionale genera il csv senza ID ed in ordine alfabetico, ma non in ordine di inserimento.
Non mi è chiaro se a te l'output interessa mantenendo l'ordine di inserimento, magari attraverso data e ora che non vedo nel csv generato dal gestionale.

Quello che mi importa è preservare l’assegnazione ID al prodotto giusto. La prima volta è bastato inserire un ID corrispondente al numero riga, ma ora non posso più farlo perché mi scompiscerebbe tutte le corrispondenze ID-prodotto.
E parlo di un database di 18mila righe circa con 650 assegnazioni ID-prodotto.

Sono anche disposto a rifare tutto da capo a patto di trovare un modo di automatizzare il tutto.

misterx 31-10-2021 16:39

Quote:

Originariamente inviato da yurassik (Messaggio 47615653)
Il mio problema è proprio quello. Ogni volta che genero il csv dal gestionale è prodotto in ordine alfabetico rendendomi impossibile automatizzarlo

e l'output genera il CSV senza ID, è così?
E quando inserisci un nuovo articolo, il gestionale non rinomina l'ID, ma è solo una impressione in quanto ti ritrovi con l'ordine alfabetico.

Mi viene da pensare che se il gesionale producesse un CSV sena riordino, avresti a disposizione una lista ordinata per inserimento: è così?

Kaya 02-11-2021 13:26

Non puoi chiedere al supporto del gestionale un export in cui includano anche l'id ?

yurassik 04-11-2021 08:40

Quote:

Originariamente inviato da misterx (Messaggio 47616424)
e l'output genera il CSV senza ID, è così?
E quando inserisci un nuovo articolo, il gestionale non rinomina l'ID, ma è solo una impressione in quanto ti ritrovi con l'ordine alfabetico.

Mi viene da pensare che se il gesionale producesse un CSV sena riordino, avresti a disposizione una lista ordinata per inserimento: è così?

Purtroppo l'unica opzione che ho è un output in ordine alfabetico o, in alternativa, in ordine di codice EAN che comunque non risolve il problema.


Quote:

Originariamente inviato da Kaya (Messaggio 47618682)
Non puoi chiedere al supporto del gestionale un export in cui includano anche l'id ?

Certo, per la modica cifra di 3000 euro più 300 euro all'anno, per un file csv mi pare un pizzico eccessivo.

misterx 04-11-2021 09:05

se il gestionale è tuo, si può sempre accedere via SQL e fare ciò che si vuole.

yurassik 04-11-2021 09:59

Quote:

Originariamente inviato da misterx (Messaggio 47621283)
se il gestionale è tuo, si può sempre accedere via SQL e fare ciò che si vuole.

Il gestionale è in licenza e non mi daranno mai la password del database sql, poi anche fosse non sono competente

DoctorT 04-11-2021 12:09

Quote:

Originariamente inviato da yurassik (Messaggio 47615594)
File 1 output originario dal gestionale

Nome, prezzo originale, prezzo scontato, percentuale di sconto

Bounty, 1.00, 1.00, 0
Mars, 1.00, 0.90, 10
Twix 1.50, 1.20, 20

File 2 input software esl

ID, nome, prezzo originale, prezzo scontato, percentuale di sconto

1, Bounty, 1.00, 1.00, 0
2, Mars, 1.00, 0.90, 10
3, Twix 1.50, 1.20, 20

Ora mettiamo che inserisco un nuovo prodotto Raffaello il gestionale genera un csv

Bounty, 1.00, 1.00, 0
Mars, 1.00, 0.90, 10
Raffaello, 0.50, 0.50, 0
Twix 1.50, 1.20, 20

Che se importo pari pari avrà un risultato

1, Bounty, 1.00, 1.00, 0
2, Mars, 1.00, 0.90, 10
3, Raffaello, 0.50, 0.50, 0
4, Twix 1.50, 1.20, 20

Andandomi a cambiare gli ID di tutte le righe dopo “Raffaello”

Se ho capito bene il risultato che vorresti ottenere è :

1, Bounty, 1.00, 1.00, 0
2, Mars, 1.00, 0.90, 10
3, Twix 1.50, 1.20, 20
4, Raffaello, 0.50, 0.50, 0

se è cosi si può ottenere con uno script in python non troppo complesso
ovviamente si puo fare più o meno in qualsiasi linguaggio di programmazione

misterx 04-11-2021 14:48

il problema è che il gestionale gli genera un output senza ID e riordina in base al nome dell'articolo. In questo modo perdi l'ordine temporale degli inserimenti. Senza mettere le mani nel DB sei obbligato a tenere una traccia separata di quello che inserisci.

DoctorT 04-11-2021 15:38

non so la logica dovrebbe essere abbastanza semplice ...
carico i 2 files csv in 2 linked list
scorro in modo sequenziale la prima lista,
controllo se il prodotto è presente nella seconda lista,
se si aggiorno i dati di prezzo, e sconto
se no aggiungo un nuovo elemento alla fine della lista creando un ID in ordine progressivo di inserimento
salvo la seconda lista sul disco

chiaramente definire tutti i dettagli dell'implementazione richiede
un pochino di temp ma niente di trascendentale.
Si potrebbe ragionare un pochino sulle prestazioni ma per poche migliaia di
record non ci sono problemi.

misterx 04-11-2021 18:23

sempre che gli articoli non vengano mai rimossi dal DB. Solitamente, nei DB seri, non accade mai che un articolo viene cancellato, rimane come storico e si continua ad aggiungere.
Se ha un file di storico che conserva sin dall'inizio, anche il "semplice" excel può assolvere a questo compito.

DoctorT 04-11-2021 18:50

Quote:

Originariamente inviato da misterx (Messaggio 47622419)
sempre che gli articoli non vengano mai rimossi dal DB. Solitamente, nei DB seri, non accade mai che un articolo viene cancellato, rimane come storico e si continua ad aggiungere.
Se ha un file di storico che conserva sin dall'inizio, anche il "semplice" excel può assolvere a questo compito.

si può sempre fare un secondo passaggio per eliminare articoli non più presenti ... anche se forse non è necessario.
Si può fare anche con macro excel ma è un po meno automatizzato, con uno script basterebbe una riga di comando per lanciarlo.

yurassik 05-11-2021 06:49

Quote:

Originariamente inviato da DoctorT (Messaggio 47622156)
non so la logica dovrebbe essere abbastanza semplice ...
carico i 2 files csv in 2 linked list
scorro in modo sequenziale la prima lista,
controllo se il prodotto è presente nella seconda lista,
se si aggiorno i dati di prezzo, e sconto
se no aggiungo un nuovo elemento alla fine della lista creando un ID in ordine progressivo di inserimento
salvo la seconda lista sul disco

chiaramente definire tutti i dettagli dell'implementazione richiede
un pochino di temp ma niente di trascendentale.
Si potrebbe ragionare un pochino sulle prestazioni ma per poche migliaia di
record non ci sono problemi.

Se sei disposto ad occupartene sono più che felice di compensare per questo lavoro.
Scrivimi in MP


Tutti gli orari sono GMT +1. Ora sono le: 21:51.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.