Récupération de données dans Dolibarr
Dans le cadre d'une intégration de dolibarr chez un client, il m'a été demandé de récupérer des listes d'historiques
de clients, de facturations et d'encaissements.
Mon client avait plusieurs feuilles excel contenant ses informations, elles avaient le format suivant :

Une version de ce document peut se trouver ici : RecupDolibarr.xls
Voici le source du script vbs utilisée pour cette reprise
de clients, de facturations et d'encaissements.
Mon client avait plusieurs feuilles excel contenant ses informations, elles avaient le format suivant :

Une version de ce document peut se trouver ici : RecupDolibarr.xls
Voici le source du script vbs utilisée pour cette reprise
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
' importation des données à partir des encaissements saisie dans un fichier XLS ' Définition des variables en dur dans le programmes szAnneeMois="200804" szFileName="REPR1" ' code produit par défaut pour les factures lfk_Product="4" dblTVA=19.6 'mode re règlement, par défaut VIR pour ne pas avoir à gérer les dépots de chèque szModeReglt="VIR" szFeuilleXLS="C:\Import\" & szFileName & "-" & szAnneeMois & ".xls" ' entete des factures : AF pour Anciennes Factures szEnteteFact="AF" right(szAnneeMois,4) & "-" 'entete client si non existant : AC pour Ancien Client szEnteteCli="AC" right(szAnneeMois,4) & "-" szDateCre=left(szAnneeMois,4) & "/" & right(szAnneeMois,2) & "/01" 'connection à la base dolibarr sServerName="localhost" sDatabase="dlbdemo" 'sDatabase="dolibarr" sUserName="root" SPassword="" l_base = "DRIVER={MySQL ODBC 5.1 Driver}; SERVER=" & sServerName & "; PORT=3306;" l_base = l_base & "DATABASE=" & sDatabase & "; USER=" & sUserName & "; OPTION=3; Stmt=;" l_base = l_base & "PASSWORD=" & SPassword & ";" Set cnx = CreateObject("ADODB.Connection") cnx.open l_base ' ouverture de la feuille Excel Set objExcel = WScript.CreateObject("Excel.Application") objExcel.Visible = true objExcel.Workbooks.open(szFeuilleXLS) NumLgn=2 ' on boucle sur les lignes de la feuille Excel do while true if len(objExcel.cells(NumLgn,1))=0 then exit do end if ' on récupère le numéro et on le complète avec des zéro numFact =objExcel.cells(NumLgn,1) nbCar=len(numFact) for i= nbCar to 4 numFact= "0" & numFact next ' on vérifie si le tiers existe déjà szNomClient=ucase(replace(objExcel.cells(NumLgn, 2), "'", "''")) sql="select rowid from llx_societe where ucase(nom)='" & szNomClient & "'" Set rsTiers = CreateObject("ADODB.Recordset") rsTiers.CursorLocation = 3 ' adUseClient 2: useserver' rsTiers.Open sql, cnx, 3, 3 if rsTiers.recordcount > 0 then lNumTiers=rsTiers.fields("rowid") else ' on récupère le numéro de facture comme numéro unique de clé sqlI="insert into llx_societe (nom, datec, tms, status, client, code_client) values (" sqlI=sqlI & " '" & szNomClient & "' , '" & szDateCre &"', '" & szDateCre & "', 1, 1," sqlI=sqlI & "'" & szEnteteCli & numFact & "')" cnx.execute (sqlI) ' ensuite on récupère le numéro de tier crée rsTiers.close rsTiers.Open sql, cnx, 3, 3 lNumTiers=rsTiers.fields("rowid") end if rsTiers.close set rsTiers=Nothing ' deuxieme étape, la création de la facture, on vérifie si elle n'existe pas déjà sql="select rowid from llx_facture where facnumber='" & szEnteteFact & numFact & "'" Set rsFact = CreateObject("ADODB.Recordset") rsFact.CursorLocation = 3 ' adUseClient 2: useserver' rsFact.Open sql, cnx, 3, 3 if rsFact.recordcount > 0 then lNumFact=rsFact.fields("rowid") else MntFactHT=objExcel.cells(NumLgn,3) MntFactTTC=replace(MntFactHT*(1+(dblTVA/100)),",",".") MntHT=replace(MntFactHT*(dblTVA/100),",",".") sqlI="insert into llx_facture (facnumber, entity, type, fk_soc, datec, datef," sqlI=sqlI & " paye, model_pdf, fk_mode_reglement, fk_statut, " sqlI=sqlI & " fk_user_author, fk_user_valid, total, total_ttc, tva) values (" sqlI=sqlI & " '" & szEnteteFact & numFact & "',1, 0," sqlI=sqlI & lNumTiers & ", '" & szDateCre & "', '" & szDateCre & "'" & ",1, 'crabe', 7, 2," sqlI=sqlI & " 1, 1, " & MntFactHT & ", " & MntFactTTC & ", " & replace(dblTVA,",",".") & ")" cnx.execute (sqlI) 'ensuite on récupère le numéro de la facture crée rsFact.close rsFact.Open sql, cnx, 3, 3 lNumFact=rsFact.fields("rowid") ' création d'une ligne détail de la facture sqlI="insert into llx_facturedet (fk_facture, fk_product, description," sqlI=sqlI & " tva_tx, qty, price, total_ht, total_tva, total_ttc) values (" sqlI=sqlI & lNumFact & "," & lfk_Product & "," & "'Reprise" & szFileName & "' ," sqlI=sqlI & replace(dblTVA, ",", ".") & ", 1, " & MntFactHT & "," & MntFactHT & "," sqlI=sqlI & replace(MntHT , ",", ".") & "," & MntFactTTC & ")" cnx.execute (sqlI) end if rsFact.close set rsFact = nothing ' derniere étape, la création des lignes de reglement des factures for ColReglt = 4 to 13 MntRegltHT=objExcel.cells(NumLgn,ColReglt) 'si il y a eu un règlement de saisie if len(MntRegltHT) > 0 then ' on récupère la date du règlement en première ligne szDateReglt=objExcel.cells(1,ColReglt) szDateReglt = right(szDateReglt,4) & "/" & mid(szDateReglt,4,2) & "/" & left(szDateReglt,2) ' attention le montant est HT, il faut lui ajouter la TVA MntRegltTTC=replace(MntRegltHT*(1+(dblTVA/100)),",",".") ' on ajoute le règlement à llx_paiement llx_paiement_facture et llx_bank llx_bank_url sql="insert into llx_bank (datec, datev, dateo, amount, label, fk_account, " sql=sql & " fk_user_author, fk_type ) values (" sql=sql & " '" & szDateReglt & "', '" & szDateReglt & "', '" & szDateReglt & "', " sql=sql & MntRegltTTC & ", '" & szNomClient & "',1 , 1, '" & szModeReglt & "')" cnx.execute (sql) ' ensuite on recupére l'id sql="select max(rowid) as MaxNumBank from llx_bank " Set rsBank = CreateObject("ADODB.Recordset") rsBank.CursorLocation = 3 ' adUseClient 2: useserver' rsBank.Open sql, cnx, 3, 3 lNumBank=rsBank.fields("MaxNumBank") rsBank.close set rsBank=nothing sql="insert into llx_paiement (datec, tms, datep, amount, fk_paiement," sql=sql & " fk_bank, fk_user_creat) values (" sql=sql & " '" & szDateReglt & "', '" & szDateReglt & "', '" sql=sql & szDateReglt & "', " & MntRegltTTC & ", 2, 1, 1)" cnx.execute (sql) sql="select max(rowid) as MaxNumBank from llx_paiement " Set rsPaiement = CreateObject("ADODB.Recordset") rsPaiement.CursorLocation = 3 ' adUseClient 2: useserver' rsPaiement.Open sql, cnx, 3, 3 lNumPaiement=rsPaiement.fields("MaxNumBank") rsPaiement.close set rsPaiement=nothing sql="insert into llx_paiement_facture( fk_paiement, fk_facture, amount) " sql= sql & " values (" & lNumPaiement & ", " & lNumFact & ", " & MntRegltTTC & ")" cnx.execute (sql) end if next NumLgn=NumLgn+1 loop msgbox ("Fin du traitement") |