Bonjour,
Je teste depuis 2-3 semaines le version 1.4b3 de openconcerto.
Je viens de faire des essais avec la fonction "Comptabilité -> Import des écritures"
J'utilise un fichier ods.
1)
l'interface indique que les champs à renseigner dans le fichier sont :
Date (jj/mm/yy) -> Journal -> N°Compte -> NomPièce -> Libellé -> Débit -> Crédit
mais en fait ce qui est lu par le logiciel est :
Date (jj/mm/yy) -> Journal -> N°Compte -> NomPièce -> Libellé -> Crédit -> Débit
Vous avez une permutation des deux dernier champs.
2)
En outre le champ "NomPièce" n'est pas repris dans les écritures.
Le contenu du champ est fusionné avec le "Libellé" de chaque écriture pour créer un nouveau libellé.
Un champ NomPièce est crée de-novo à partir de la date d'import des données.
Ceci n'est pas vraiment pratique.
En plus toutes les écritures sont fusionnées dans un seul mouvement ... arghhhhhhhh !
Les mouvements doivent rester séparés, comme c'est notamment le cas dans le format FEC.
Ceci pourrait être fait en utilisant un champ supplémentaire "N°Mouvement" lors de l'import (le champ EcritureNum du FEC), le numéro du fichier d'entré servant uniquement à identifier les lignes d'écriture devant être assemblées dans le même mouvement, l'incrément du numéro de mouvement dans la base openconcerto étant généré par la base elle même.
Cordialement,
erreur import écritures dans version 1.4b3
-
- Messages : 144
- Enregistré le : mer. juil. 22, 2015 12:17 pm
au sujet de l'erreur d'import entre Debit et Credit, dans :
org.openconcerto.erp.core.finance.accouting.ui / ImportEcriturePanel.class :
vous avez permuté les deux champs "CREDIT" et "DEBIT".
cordialement,
Samuel
org.openconcerto.erp.core.finance.accouting.ui / ImportEcriturePanel.class :
Code : Tout sélectionner
.../...
gen.mEcritures.put("CREDIT", Long.valueOf(montantD));
gen.mEcritures.put("DEBIT", Long.valueOf(montantC));
solde += montantD;
solde -= montantC;
.../...
cordialement,
Samuel
-
- Messages : 144
- Enregistré le : mer. juil. 22, 2015 12:17 pm
Ci dessous une proposition de modification de l'import csv/xls/odt, en ajoutant la gestion des mouvements et des nom des pièces présents dans le fichier à importer.
La dernière (7°) colonne du csv/xls/odt contient un entier positif qui change entre chaque mouvement successif.
Comme je n'ai pas les sources de la version 1.4b3 dans un projet eclipse et que je suis pas une flèche en java
je n'ai pas encore pu tester ce code.
en outre il faut vérifier la façon dont la classe GenerationEcritures gen = new GenerationEcritures(); se ré-initialise à chaque nouveau mouvement, je suppose que comme on est en java c'est auto-géré par le compilateur/environnement d’exécution.
La dernière (7°) colonne du csv/xls/odt contient un entier positif qui change entre chaque mouvement successif.
Comme je n'ai pas les sources de la version 1.4b3 dans un projet eclipse et que je suis pas une flèche en java
je n'ai pas encore pu tester ce code.
en outre il faut vérifier la façon dont la classe GenerationEcritures gen = new GenerationEcritures(); se ré-initialise à chaque nouveau mouvement, je suppose que comme on est en java c'est auto-géré par le compilateur/environnement d’exécution.
Code : Tout sélectionner
public void importData(File f, String mvtName, final Frame owner)
throws Exception
{
DataImporter importer = new DataImporter(this.tableEcr);
importer.setSkipFirstLine(false);
DateFormat dF = new SimpleDateFormat("dd/MM/yyyy");
ArrayTableModel m = importer.createModelFrom(f); // lire tout les champs du fichier (csv, ods, xls) au kilomètre
GenerationEcritures gen = new GenerationEcritures(); // comment on fait un .clear() sur une classe en java ? c'est auto-géré ?
long solde = 0L;
int lastMvtFakeId = -1; // pseudo Mouvment_Id
int idMvt = -1; // real Mouvment_Id
for (int i = 0; i < m.getRowCount(); i++)
{
Object valueAt = m.getValueAt(i, 0);
if (valueAt == null) {
break;
}
Date dateValue;
Date dateValue;
if (valueAt.getClass().isAssignableFrom(Date.class))
{
dateValue = (Date)valueAt;
}
else
{
if (valueAt.toString().trim().length() == 0) {
break;
}
dateValue = dF.parse(valueAt.toString());
}
int currentMvtFakeId = m.getValueAt(i, 7); // pseudo Mouvment Id from CSV file
String pieceName = m.getValueAt(i, 3).toString(); // nom de la pièce de la ligne d'écriture
if (lastMvtFakeId != currentMvtFakeId) {
// GenerationEcritures gen = new GenerationEcritures(); // comment on fait un .clear() sur une classe en java ? c'est auto-géré ?
lastMvtFakeId = currentMvtFakeId;
idMvt = gen.getNewMouvement("", 1, 1, pieceName); // créer un nouveau mvmt
}
gen.mEcritures.put("ID_MOUVEMENT", Integer.valueOf(idMvt));
int idCpt = ComptePCESQLElement.getId(m.getValueAt(i, 2).toString().trim());
gen.mEcritures.put("ID_COMPTE_PCE", Integer.valueOf(idCpt));
String stringValueD = m.getValueAt(i, 5).toString();
long montantD = GestionDevise.parseLongCurrency(stringValueD);
String stringValueC = m.getValueAt(i, 6).toString();
long montantC = GestionDevise.parseLongCurrency(stringValueC);
gen.mEcritures.put("DEBIT", Long.valueOf(montantD)); // typo fixed
gen.mEcritures.put("CREDIT", Long.valueOf(montantC)); // typo fixed
solde += montantD;
solde -= montantC;
System.err.println("(" + stringValueD + " : " + stringValueC + ") ---- (" + montantD + " : " + montantC + ")");
final String valueJrnl = m.getValueAt(i, 1).toString();
if (this.mapJournal.get(valueJrnl) == null) {
try
{
System.err.println("LOCKED");
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
JDialog diag = new JDialog(owner);
diag.setModal(true);
diag.setContentPane(new SelectionJournalImportPanel(valueJrnl, ImportEcriturePanel.this.mapJournal, null));
diag.setTitle("Import écritures");
diag.setLocationRelativeTo(null);
diag.pack();
diag.setVisible(true);
}
});
System.err.println("PASSED");
}
catch (InterruptedException e1)
{
e1.printStackTrace();
}
}
gen.mEcritures.put("ID_JOURNAL", this.mapJournal.get(valueJrnl));
gen.mEcritures.put("DATE", dateValue);
gen.mEcritures.put("NOM", m.getValueAt(i, 4).toString() + " " + m.getValueAt(i, 3).toString());
gen.ajoutEcriture();
}
if (solde != 0L) {
throw new IllegalArgumentException("La partie double n'est respectée (solde = " + solde + "). Import annulé!");
}
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
JOptionPane.showMessageDialog(owner, "Importation des écritures terminée");
}
});
}
}
Bonjour,
On va regarder cela. Merci pour votre retour.
Il me semble tout de même que cela a déjà été corrigé il y a quelques semaines,
si vous voulez jouer avec les preview de la prochaine béta, c'est par ici :
http://www.openconcerto.org/fr/telechar ... tas/1.4b4/
Cordialement,
On va regarder cela. Merci pour votre retour.
Il me semble tout de même que cela a déjà été corrigé il y a quelques semaines,
si vous voulez jouer avec les preview de la prochaine béta, c'est par ici :
http://www.openconcerto.org/fr/telechar ... tas/1.4b4/
Cordialement,
-
- Messages : 12
- Enregistré le : mar. sept. 08, 2015 8:51 pm
Bonjour,
Je suis en train de tester la version 1.4Beta4 pour basculer de Ciel...
Effectivement le fait que l'import des données intègre tout dans un seul mouvement et que le numéro de pièce n'arrive pas dans la bonne cas me semble domage.
Je touve la proposition de @Samuel_Burg très judicieuse.
Il serait aussi pratique de pouvoir renseigner dans le fichier le libéllé des comptes. Celà simplifierait les bascules d'un logiciel de compta vers OpenConcerto.
D'autre part contrairement à ce qui est écrit dans la page d'aide aux imports, la date doit être au format dd/MM/yyyy et non dd/MM/yy).
Il semblerait aussi que même si des nouveaux journaux ont été créé avant l'import, ils ne sont pas pris en compte et une reselection manuelle doit être faite.
Cordialement
Thomas Guenneguez
PS : En tout cas le logiciel a l'aire d'être bien fait.
Je suis en train de tester la version 1.4Beta4 pour basculer de Ciel...
Effectivement le fait que l'import des données intègre tout dans un seul mouvement et que le numéro de pièce n'arrive pas dans la bonne cas me semble domage.
Je touve la proposition de @Samuel_Burg très judicieuse.
Il serait aussi pratique de pouvoir renseigner dans le fichier le libéllé des comptes. Celà simplifierait les bascules d'un logiciel de compta vers OpenConcerto.
D'autre part contrairement à ce qui est écrit dans la page d'aide aux imports, la date doit être au format dd/MM/yyyy et non dd/MM/yy).
Il semblerait aussi que même si des nouveaux journaux ont été créé avant l'import, ils ne sont pas pris en compte et une reselection manuelle doit être faite.
Cordialement
Thomas Guenneguez
PS : En tout cas le logiciel a l'aire d'être bien fait.