Archives de la liste a​i​d​e​@p​a​h​e​k​o​.c​l​o​u​d​

Ecritures répétitives

Jacques Lacroute

22/02/2021 17:53:50

Bonjour,

Notre comptable me fait part du problème qu’il rencontre:

Il supprime une écriture, quand il la ressaisit elle apparaît deux fois (sous la même
description) et ainsi de suite (voir copie d’écran).
J’ai examiné le contenu de la base: dans acc_transactions l’écriture est bien «
absente » quand elle est supprimée (voir copies d’écran de acc_transactions) , les
lignes « supplémentaires » sont bien là après la création (voir copies d’écran de
acc_transactions_lines) mais elles sont aussi là « après » la destruction ???
Une explication et une solution si possible..

Merci…

Jacques Lacroute

Version 1.0.5 installée sur un NAS Synology / php 7.4




Base avec écriture 1606


Lignes de la transaction1606



Transaction 1606 supprimée



Lignes de 1606 toujours là

Ecritures répétitives

BohwaZ/Garradin

22/02/2021 18:32:29

Hello,

si je comprends bien :
- tu crée une écriture qui a comme ID 1606
- tu supprimer l'écriture 1606
- les lignes de l'écriture sont quand même toujours dans la table
  acc_transactions_lines

Est-ce que ça se reproduit à chaque fois que tu supprime une écriture ?

Perso je viens de tester et la suppression fonctionne bien : les lignes
sont supprimées, notamment vu que la table spécifie ceci :

id_transaction INTEGER NOT NULL REFERENCES acc_transactions (id) ON
DELETE CASCADE

En français : quand la ligne dans acc_transactions est supprimée, faire
une cascade = supprimer les lignes liées dans acc_transactions_lines.

Je ne vois que deux possibilités :
- le schéma de ta base de données est corrompue et il n'y a pas cette
  instruction de cascade dans ta table.
- ta version de SQLite, pour une raison X ou Y, ne gère pas les clés
  étrangères (foreign keys), parce que normalement cette fonctionnalité
  est bien activée pour Garradin, même si tu la désactive en éditant le
  fichier SQLite avec un outil externe, Garradin s'assure qu'elle est
  bien activée quand il ouvre la base de données.

Tu peux m'envoyer en privé ta base SQLite ?

Cordialement.

Ecritures répétitives

Jacques Lacroute

23/02/2021 11:29:20

Désolé je n’ai vu ce message que ce matin.
J’ai essayé sur des images de la base et mon NAS avec MAMP et je reproduis parfois,
parfois pas…
Je t’envoie la base en message privé.



> Le 22 févr. 2021 à 18:32, BohwaZ/Garradin <bohwaz@garradin.eu> a écrit :
> 
> 
> Hello,
> 
> si je comprends bien :
> - tu crée une écriture qui a comme ID 1606
> - tu supprimer l'écriture 1606
> - les lignes de l'écriture sont quand même toujours dans la table
>  acc_transactions_lines
> 
> Est-ce que ça se reproduit à chaque fois que tu supprime une écriture ?
> 
> Perso je viens de tester et la suppression fonctionne bien : les lignes
> sont supprimées, notamment vu que la table spécifie ceci :
> 
> id_transaction INTEGER NOT NULL REFERENCES acc_transactions (id) ON
> DELETE CASCADE
> 
> En français : quand la ligne dans acc_transactions est supprimée, faire
> une cascade = supprimer les lignes liées dans acc_transactions_lines.
> 
> Je ne vois que deux possibilités :
> - le schéma de ta base de données est corrompue et il n'y a pas cette
>  instruction de cascade dans ta table.
> - ta version de SQLite, pour une raison X ou Y, ne gère pas les clés
>  étrangères (foreign keys), parce que normalement cette fonctionnalité
>  est bien activée pour Garradin, même si tu la désactive en éditant le
>  fichier SQLite avec un outil externe, Garradin s'assure qu'elle est
>  bien activée quand il ouvre la base de données.
> 
> Tu peux m'envoyer en privé ta base SQLite ?
> 
> Cordialement.
> 
> -- 
> . ____   
> / ___|  Liste d'entraide des utilisateurs de Garradin
> | |  _   http://garradin.eu/
> | |_| |
> \____|  Désinscription : http://garradin.eu/aide/

Ecritures répétitives

BohwaZ/Garradin

23/02/2021 14:53:16

Hello,

C'est un souci dû à une modification de la base par un outil tiers qui
a fait n'importe quoi.

Je constate que dans ta base tu as une table acc_transactions_lines qui
est erronée :

CREATE TABLE acc_transactions_lines (
  id integer PRIMARY KEY NOT NULL,
  id_transaction integer NOT NULL,
  id_account integer NOT NULL,
  credit integer NOT NULL,
  debit integer NOT NULL,
  reference text,
  label text,
  reconciled integer NOT NULL DEFAULT(0),
  id_analytical integer
);

Le vrai schéma original :

CREATE TABLE IF NOT EXISTS acc_transactions_lines
-- Lignes d'écritures d'une opération
(
    id INTEGER PRIMARY KEY NOT NULL,

    id_transaction INTEGER NOT NULL REFERENCES acc_transactions (id) ON
    DELETE CASCADE, id_account INTEGER NOT NULL REFERENCES acc_accounts
    (id), -- N° du compte dans le plan comptable

    credit INTEGER NOT NULL,
    debit INTEGER NOT NULL,

    reference TEXT NULL, -- Référence de paiement, eg. numéro de chèque
    label TEXT NULL,

    reconciled INTEGER NOT NULL DEFAULT 0,

    id_analytical INTEGER NULL REFERENCES acc_accounts(id) ON DELETE
    SET NULL,

    CONSTRAINT line_check1 CHECK ((credit * debit) = 0),
    CONSTRAINT line_check2 CHECK ((credit + debit) > 0)
);

Comme tu peux le voir, toutes les références ont disparu, ainsi que les
contraintes.

Donc tu as dû modifier la base de données avec un outil qui a supprimé
les contraintes dans la foulée.

Je t'invite donc à restaurer une sauvegarde ancienne, ou à recréer la
table correctement et recopier les anciennes données dedans :

ALTER TABLE acc_transactions_lines RENAME TO lines_error;
CREATE TABLE acc_transactions_lines (... recopier ici le bon schéma...);
INSERT INTO acc_transactions_lines SELECT * FROM lines_error;
DROP TABLE lines_error;

Je ne sais pas quel outil tu as utilisé mais je ne le déconseillerais
vu ce qu'il a fait :)

Cordialement.

Ecritures répétitives

Jacques Lacroute

23/02/2021 16:17:40

Merci j’ai procédé comme indiqué et cela règle le problème.
Depuis que l’on utilise Garradin (quelques années quand même) à l’époque où je
devais « bricoler » la base pour donner un nom aux exercices j’ai utilisé plusieurs
programmes « gérant » les bases sqlite (SQL Pro for sqlite, Valentina Studio, Sqlite
manager, Bases et j’en passe) lequel est à blâmer, je crains de ne pas savoir.
(Peut-être SQL Pro car je n’ai pu réparer qu’avec Valentina)
Mais la table acc_transactions_lines est liée à la V1, serait-ce l’ancienne base qui
était corrompue et a mal été « upgradée »  ?
Je peux te faire parvenir la base qui tournait sur V 0.9.8 (exercice 2020 complet), mais
si tu as d’autres priorités je comprends très bien, du moment qu’on a résolu le
problème.

Merci encor pour ta réactivité et ton support

Cordialement,

Jacques Lacroute

> Le 23 févr. 2021 à 14:52, BohwaZ/Garradin <bohwaz@garradin.eu> a écrit :
> 
> 
> Hello,
> 
> C'est un souci dû à une modification de la base par un outil tiers qui
> a fait n'importe quoi.
> 
> Je constate que dans ta base tu as une table acc_transactions_lines qui
> est erronée :
> 
> CREATE TABLE acc_transactions_lines (
>  id integer PRIMARY KEY NOT NULL,
>  id_transaction integer NOT NULL,
>  id_account integer NOT NULL,
>  credit integer NOT NULL,
>  debit integer NOT NULL,
>  reference text,
>  label text,
>  reconciled integer NOT NULL DEFAULT(0),
>  id_analytical integer
> );
> 
> Le vrai schéma original :
> 
> CREATE TABLE IF NOT EXISTS acc_transactions_lines
> -- Lignes d'écritures d'une opération
> (
>    id INTEGER PRIMARY KEY NOT NULL,
> 
>    id_transaction INTEGER NOT NULL REFERENCES acc_transactions (id) ON
>    DELETE CASCADE, id_account INTEGER NOT NULL REFERENCES acc_accounts
>    (id), -- N° du compte dans le plan comptable
> 
>    credit INTEGER NOT NULL,
>    debit INTEGER NOT NULL,
> 
>    reference TEXT NULL, -- Référence de paiement, eg. numéro de chèque
>    label TEXT NULL,
> 
>    reconciled INTEGER NOT NULL DEFAULT 0,
> 
>    id_analytical INTEGER NULL REFERENCES acc_accounts(id) ON DELETE
>    SET NULL,
> 
>    CONSTRAINT line_check1 CHECK ((credit * debit) = 0),
>    CONSTRAINT line_check2 CHECK ((credit + debit) > 0)
> );
> 
> Comme tu peux le voir, toutes les références ont disparu, ainsi que les
> contraintes.
> 
> Donc tu as dû modifier la base de données avec un outil qui a supprimé
> les contraintes dans la foulée.
> 
> Je t'invite donc à restaurer une sauvegarde ancienne, ou à recréer la
> table correctement et recopier les anciennes données dedans :
> 
> ALTER TABLE acc_transactions_lines RENAME TO lines_error;
> CREATE TABLE acc_transactions_lines (... recopier ici le bon schéma...);
> INSERT INTO acc_transactions_lines SELECT * FROM lines_error;
> DROP TABLE lines_error;
> 
> Je ne sais pas quel outil tu as utilisé mais je ne le déconseillerais
> vu ce qu'il a fait :)
> 
> Cordialement.
> 
> -- 
> . ____   
> / ___|  Liste d'entraide des utilisateurs de Garradin
> | |  _   http://garradin.eu/
> | |_| |
> \____|  Désinscription : http://garradin.eu/aide/

Ecritures répétitives

BohwaZ/Garradin

23/02/2021 16:48:29

Hello,

Cool si c'est réglé :)

La table a été créée par la 1.0, elle n'existait pas dans la 0.9.8.
Mais il n'y a aucune chance pour que ce type de problème soit produit
par Garradin, là clairement la table a été modifiée et réécrite par un
logiciel tiers.

Cordialement.