Page 2 of 2

Re: Type de fichier d'export

Posted: 12 Jan 2017, 20:48
by tintinux
Bonjour

C'est vrai que la clôture d'un exercice ne clôt pas automatiquement chacun des journaux.
Ce n'est pas nécessaire pour verrouiller la saisie, mais cela est désormais utile pour faire un export FEC conforme aux spécifications.
Il faut donc clôturer les journaux manuellement.
Dans la version 1.5 je tâcherai de réaliser cette clôture automatiquement.

Extraire les A Nouveau en premier doit être possible avec un tri dans la requête SQL, reste à trouver comment...
Mais pour l'instant cela ne semble que suggéré et pas requis explicitement par les spécifications.

Re: Type de fichier d'export

Posted: 12 Jan 2017, 21:18
by Patrice
Bonsoir Tintinux,

Merci pour cette réponse aussi claire que précise.

A+

Re: Type de fichier d'export

Posted: 13 Jan 2017, 17:19
by gastounet
Bonjour Patrice

Vous pourriez essayer cette requête SQL à la place :

Code: Select all

SELECT
        j.Code AS JournalCode,
        j.Name AS JournalLib,
        @i:=@i+1 as EcritureNum,
        date_format(m.MoveDate, '%Y%m%d') AS EcritureDate,
        a.Account AS CompteNum,
        a.Name AS CompteLib,
        NULL AS CompAuxNum,
        NULL AS CompAuxLib,
        m.Id AS PieceRef,
        date_format(m.MoveDate, '%Y%m%d') AS PieceDate,
        m.MoveText AS EcritureLib,
        CASE WHEN ml.Amount > 0 THEN 
REPLACE(TRUNCATE(ml.Amount/100,2),'.',',') ELSE NULL END AS Debit,
        CASE WHEN ml.Amount < 0 THEN 
REPLACE(-TRUNCATE(ml.Amount/100,2),'.',',') ELSE NULL END AS Credit,
        r.ReconciliationString AS EcritureLet,
        date_format(r.UpdateDate, '%Y%m%d %H:%i:%s') AS DateLet,
        date_format(j.CloseDate, '%Y%m%d %H:%i:%s') AS ValidDate,
        NULL AS MontantDevise,
        NULL AS IDevise
     FROM Moves m
     JOIN Journals j ON j.Id=m.JournalId
     JOIN MoveLines ml ON ml.MoveNumber=m.Id
     JOIN Accounts a ON a.id=ml.AccountId
     JOIN FiscalYears f ON m.MoveDate Between f.StartDate and f.EndDate
     LEFT JOIN Reconciliations r ON r.MoveLineId=ml.MoveLineId
     JOIN (SELECT @i:=0) cpt
     WHERE m.MoveDate BETWEEN '2010-01-01' AND '2017-12-31'
     ORDER BY CASE WHEN f.ANouveauMoveId=m.Id THEN 1 ELSE 2 END, 3; 
J'y ai ajouté une jointure avec les périodes fiscales qui peuvent nous dire si une écriture est un à nouveau ou pas (quelque soit son journal)
On trie selon ce critère calculé, puis ensuite selon le 3ème champ qui est le numéro d'écriture.

Il est suggéré de trier sur la date de validation, mais en l'état, tel que c'est fait dans Gestinux, toutes les dates de validation risquent d'être identiques. Donc ça ne servira pas à grand chose.
Peut-être qu'à terme il faudra revoir cette histoire de date de validation.
Enfin vous pouvez remplacer le chiffre 3 à la fin par le n° d'autre de n'importe quel(s) autre(s) champ.

Je n'ai testé que la validité sur la base d'essai, mais je n'ai pas accès aujourd'hui à de vraies données comptables assez riches. Pouvez-vous essayer et me dire si ça convient mieux ?

Bien à vous
G.N

Re: Type de fichier d'export

Posted: 13 Jan 2017, 20:18
by Patrice
Bonsoir gastounet,

Je n'arrive pas à sortir un fichier avec la requête indiquée
(copiée/collée)

le message est le suivant:

Code: Select all

Une erreur imprévue est survenue.
Merci de la signaler en cliquant sur le bouton "Aide".

 List index (0) out of bounds
Merci de vous intéresser à cette question.

Re: Type de fichier d'export

Posted: 18 Jan 2017, 09:28
by tintinux
Bonjour,

La requête de Gastounet ne peut pas fonctionner dans Gestinux, seulement dans un client MySql.
En effet, les dates de début et de fin sont "en dur" ( '2010-01-01' et '2017-12-31' ) et Gestinux en a besoin sous forme de paramètres (:StartDate et :EndDate)

Il faudrait qu'elle soit :

Code: Select all

SELECT
        j.Code AS JournalCode,
        j.Name AS JournalLib,
        @i:=@i+1 as EcritureNum,
        date_format(m.MoveDate, '%Y%m%d') AS EcritureDate,
        a.Account AS CompteNum,
        a.Name AS CompteLib,
        NULL AS CompAuxNum,
        NULL AS CompAuxLib,
        m.Id AS PieceRef,
        date_format(m.MoveDate, '%Y%m%d') AS PieceDate,
        m.MoveText AS EcritureLib,
        CASE WHEN ml.Amount > 0 THEN
REPLACE(TRUNCATE(ml.Amount/100,2),'.',',') ELSE NULL END AS Debit,
        CASE WHEN ml.Amount < 0 THEN
REPLACE(-TRUNCATE(ml.Amount/100,2),'.',',') ELSE NULL END AS Credit,
        r.ReconciliationString AS EcritureLet,
        date_format(r.UpdateDate, '%Y%m%d %H:%i:%s') AS DateLet,
        date_format(j.CloseDate, '%Y%m%d %H:%i:%s') AS ValidDate,
        NULL AS MontantDevise,
        NULL AS IDevise
     FROM Moves m
     JOIN Journals j ON j.Id=m.JournalId
     JOIN MoveLines ml ON ml.MoveNumber=m.Id
     JOIN Accounts a ON a.id=ml.AccountId
     JOIN FiscalYears f ON m.MoveDate Between f.StartDate and f.EndDate
     LEFT JOIN Reconciliations r ON r.MoveLineId=ml.MoveLineId
     JOIN (SELECT @i:=0) cpt
     WHERE m.MoveDate BETWEEN :StartDate AND :EndDate
     ORDER BY CASE WHEN f.ANouveauMoveId=m.Id THEN 1 ELSE 2 END, 3; 
Dans une future version, on verra si on ne peut pas mettre un message plus clair dans ce cas.

A part ça elle me semble bien répondre à la demande de trier avec les A nouveau en premier.

Re: Type de fichier d'export

Posted: 19 Jan 2017, 11:05
by Patrice
Bonjour,

En remplaçant la ligne en cause par :
WHERE m.MoveDate BETWEEN :StartDate AND :EndDate

On obtient bien tous les enregistrements d'un exercice, cependant je n'ai pas
les ANouveaux en premier.

ORDER BY CASE WHEN f.ANouveauMoveId=m.Id THEN 1 ELSE 2 END, 3;
me donne bien un tri par le numéro d'écriture

ORDER BY CASE WHEN f.ANouveauMoveId=m.Id THEN 1 ELSE 2 END, 4;
me donne bien un tri par la date d'écriture, mais j'ai des écritures avant les ANouveaux dans différents journaux.

Je continue de chercher pourquoi mais mes connaissance en SQL sont bien minces ....

Remerciements.

Re: Type de fichier d'export

Posted: 24 Jan 2017, 14:23
by gastounet
Bonjour

Effectivement, ce n'était pas bon, désolé !

Voici une requête qui devrait fonctionner en mettant les à nouveau en premier :

Code: Select all

/* Version du 23/01/2017 avec Anouveau en premier */
SELECT
     j.Code AS JournalCode,
     j.Name AS JournalLib,
     @i:=@i + 1 as EcritureNum,
     date_format(m.MoveDate, '%Y%m%d') AS EcritureDate,
     a.Account AS CompteNum,
     a.Name AS CompteLib,
     NULL AS CompAuxNum,
     NULL AS CompAuxLib,
     m.Id AS PieceRef,
     date_format(m.MoveDate, '%Y%m%d') AS PieceDate,
     m.MoveText AS EcritureLib,
     CASE
         WHEN
             ml.Amount > 0
         THEN
             REPLACE(TRUNCATE(ml.Amount / 100, 2),
                 '.',
                 ',')
         ELSE NULL
     END AS Debit,
     CASE
         WHEN
             ml.Amount < 0
         THEN
             REPLACE(- TRUNCATE(ml.Amount / 100, 2),
                 '.',
                 ',')
         ELSE NULL
     END AS Credit,
     r.ReconciliationString AS EcritureLet,
     date_format(r.UpdateDate, '%Y%m%d %H:%i:%s') AS DateLet,
     date_format(j.CloseDate, '%Y%m%d %H:%i:%s') AS ValidDate,
     NULL AS MontantDevise,
     NULL AS IDevise
FROM
     Moves m
         JOIN
     Journals j ON j.Id = m.JournalId
         JOIN
     MoveLines ml ON ml.MoveNumber = m.Id
         JOIN
     Accounts a ON a.id = ml.AccountId
         LEFT JOIN
     Reconciliations r ON r.MoveLineId = ml.MoveLineId
         JOIN
     (SELECT @i:=0) cpt
WHERE
     m.MoveDate BETWEEN :StartDate AND :EndDate
ORDER BY CASE
     WHEN
         m.Id in (Select
                 Max(AnouveauMoveId)
             From
                 FiscalYears f
             where
                 f.StartDate < :StartDate)
     THEN
         1
     ELSE 2
END , 3;
Bien à vous,
G.N

Re: Type de fichier d'export

Posted: 26 Jan 2017, 14:49
by Patrice
Bonjour gastounet,

Cette requête fonctionne sans problème,
j'ai fais l'essai sur les 3 exercices clos et j'ai bien les A Nouveau en premier
(sauf évidemment sur le 1er exercice qui n'a pas d'ANouveau).

Je vais donc l'utiliser désormais.

Encore merci à vous.

Salutations.