[RESOLU] update clients existants en mass

Bonjour à tous,

Je vous expose mon problème, j’ai besoin de modifier via import le code client de client existant.
Il faut absolument que je mette le code client de mon ancien système (700 clients)

Par exemple CL0010 devient 100230, bien sûr je vais déjà dans le module client pour paramétrer la numérotation pour {000000}, je fais un export ID client et code client du système actuel et ensuite change le code client par le nouveau.
Il faudrait que le système prenne comme référence l’ID pour un update de code client, mais je procède de la sorte le système me retourne une erreur en me disant que le client existe déjà…
Il y a-t-il un moyen de rendre possible la mise à jour client via un import CSV ?

Sinon j’avais pensé faire cela via une requête SQL mais ne sais pas quelle requête utiliser.

Est-ce que quelqu’un pourrait me donner un coup de main pour solutionner mon problème.

Je suis un peu bloqué et faire ça à la main est relativement long.

Merci d’avance pour votre aide.

Bien cordialement,

Salut johannhouss,

par import, ça n’est pas possible: ça ne fait qu’ajouter des enregistrements, ça ne met pas à jour.

Via sql, il est bien sûr possible de mettre un champs à jour, mais j’ai du mal à anticiper l’impact que ça aurait…
la table llx_societe comporte un rowid,donc le code client n’est pas censé être une clef pour des jointures dans des traitements… mais ça j’en sais rien du tout.

SUR UNE BASE TEST, tu peux :
construire un fichier d’update à l’aide d’excel, c’est tout bête:

dans la première colonne tu met ton code client actuel
dans la 2eme colonne tu mets ton ancien code client (qui correspond bien sûr …
et dans la 3eme colonne tu mets la formule : =concatener(« UPDATE llx_societe set code_client= »;A2;" where code_client=";A1)
où A1 et A2 font référence au code actuel et ancien code de la ligne où la ligne de la formule est tapée…
ça te donnera un truc du style UPDATE llx_societe set code_client=100230 where code_client=CL0010

tu copies/colles la formule sur toutes les lignes
tu copies la colonne et tu la colles dans un éditeur de texte
tu l’enregistre en toto.sql
tu vas dans phpmyadmin et tu exécutes ce fichier de requêtes.

je le répète : fais le sur une base test et fait de nombreux essais pour voir si ça n’entraîne pas de dysfonctionnement.

Je pense notamment aux factures que tu aurais déjà émises : le code client ne sera plus le même…
et il y a peut être d’autres effets néfaste.

Ca serait bien qu’un dev passe par là et confirme que ça soit faisable avant que tu ne casses tout :wink:

Salut Arre,

Merci pour ta réponse, je pense qu’il ne devrait pas y avoir trop de problème, car si je le fait à la main sur une instance test ça se passe bien et pour les factures, Bl, commandes… il suffi juste les re générer pour qu’elles prennent le bon code client.
Je test et te ferrai un retour.

Merci beaucoup

de rien

pour la formule, j’ai oublié les guillemets, en fait c’est :
=CONCATENER(« UPDATE llx_societe set code_client=’ »;A2;"’ where code_client=’";A1;"’")

soit prudent avec ce genre de manip, et même si ça marche en base test : fais une sauvegarde de la prod avant de te lancer :happy:

Bonjour :happy:

j’ai bien le même avis concernant le choix entre les imports de Dolibarr ou les requêtes SQL

la bonne solution est de créer le script SQL qui vous fera les insertions des informations que vous souhaitez reprendre
j’ai fait cela il y deux ans afin de reprendre les données d’une gestion commerciale sous Sage avec près de 2000 tiers, 6000 produits et quelques milliers de factures sur les trois dernières années
il suffit de connaitre les structures des tables de Dolibarr et de quelques essais…

Bonne continuation

J’ai donc fais un test et j’ai une erreur sur l’import…
Pour la formule Arre je pense que ça dois être ça: =CONCATENER(« UPDATE llx_societe set code_client=’ »;B1;"’ where code_client=’";A1;"’") tu as mis A2 et A1.

Voici l’erreur:

Le tableur utilisé:

Final sql import:

Désolé je ne suis pas un pro niveau SQL merci encore pour ton aide.

pcbleu, moi aussi c’est pour des code client qui viennent de Sage.

Bonjour
En 3 étapes :
- création d’une table temporaire avec id et newref
- injection du csv dans la table
- update avec un innerjoin par exemple sur le rowid
Pas facile à vous mettre un exemple avec un téléphone.
Sinon une tite recherche chez Qwant vous donnera certainement une réponse.
@+

Bonjour,
merci pour votre retour, si vous pouvez me mettre un exemple quand vous serez devant un ordi ce serai vraiment cool.

@johannhouss oups, j’ai oublié le point virgule en fin de ligne :blush:

et tu as raison pour la référence au cellules, j’ai fais ça de tête sans regarder excel…

la bonne formule est :
=CONCATENER(« UPDATE llx_societe set code_client=’ »;B1;"’ where code_client=’";A1;"’;")

(je viens de tester à l’instant sur 100 enregistrements)

@phil : c’est quoi l’intérêt de passer par une table temporaire ?

@Arre,
je viens de faire un test rapide et ça à l’air de fonctionner, je vais tester ça en profondeur et te fais un retour.

Franchement merci, t’es au top

Dans le concaténer préférez un chère sur le rowid, vous êtes ainsi sûr de ne pas avoir un doublon à la con. Genre un nouveau numéro qui correspond à l’ancien d’un autre ou un déjà modifié.

@arre : je n’avais pas pensé à générer le code SQL depuis le tableur :blush:
l’intérêt de ma solution c’est de pouvoir travailler sans toucher le csv et être capable de traîter des gros volumes, et enfin d’automatiser la procédure pour des maj de nuit de csv téléchargés de tarifs de retours de logisticiens etc…
@+

@phil
le tableur avec le concaténer et la recherche verticale … c’est la vie :happy:

Après la solution de passer par une table d’import est automatisable c’est sûr, mais pour du « one shoot » c’est trop long à mettre en place.

@johannhouss
comme phil le souligne : il faudra veiller au prochain numéro attribué aux prochains tiers

et tant que j’y pense : regarde aussi ta génération de compte comptable: si tu étais sous un modèle aquarium (concaténation d’un 411+code client par exemple) : ça va te faire un truc bizarre pour les clients mis à jour…

Bonjour Arre,

Tout fonctionne parfaitement, mais comme indiqué j’ai un problème sur les numéro attribué aux nouveaux tiers.
Les nouveaux code client importer qui viennent de Sage son comme cela: 01005704.
Dans le module tiers la configuration est {00000000} donc quand nous faisons la création d’un nouveau tiers celui ci va prendre le numéro 00000001, comment faire pour réussir à reprendre la même configuration que les codes importés.

Merci d’avance

Salut johannhouss,

content pour toi :happy:

à droite de la case dans la quelle tu paramètres ton modèle de numérotation dans le module tiers, il y a un petit points d’interrogation qui donne la syntaxe.

Regarde les exemples donnés.
Pour commencer à 01005704 ça doit être un truc du style {00000000+1005704}