PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD8 URGENT] Insertion ligne dans table fichier
[WD8 URGENT] Insertion ligne dans table fichier
Iniciado por netmaster2, 12,nov. 2004 18:45 - 3 respuestas
Publicado el 12,noviembre 2004 - 18:45
Bonjour,

je cherche à insérer une ligne dans une table fichier qui est parcourue dans
l'ordre de la cle primaire (Numéro auto)
ca fonctionne sur l'affichage du tableau mais pas dans le fichier HF car la ligne ajoutee est systematiquement en derniere position dans le fichier

j'ai essayé de faire 2 tableaux dynamiques :

1 pour la partie supérieure du tableau (au dessus de la ligne à insérer)
1 pour la partie inférieure du tableau (au dessous de la ligne à insérer)

j'efface mon fichier hyperfile et je le reconstruit en creant :

1°) reinscription tu tableau 1
2°)insertion ligne vide
3°) reinscription tableau2

Mais ca ne fonctionne pas, ya pleins de bugs et de tte facon la solution me
semble bien plus compliquée qu'elle ne doit l'être réellement
voici mon code :

============================================================================
===========

// session_acte = Numéro de l'acte en cours (filtre) cf : logiciel de
facturation
// g fait un hfiltre sur mon fichier HF pour récupérer les bonnes lignes de
ma facture
// table_item est a table contenant les lignes de facturation


PROCEDURE Insertion(NumLigne)
//Numligne = numéro de la ligne selectionnée avant laquelle jedois inserer
une ligne vide

Tableau1,Tableau2 sont des tableaux dynamiques de 0 par 5 chaînes

i est un entier = 0
//creation du tableau contenant les lignes AVANT la ligne d'insertion
POUR i = 1 A NumLigne - 1

Dimension(Tableau1,i,5)
Tableau1[i,1] = Table_Item.Num_Acte_Item
Tableau1[i,2] = Table_Item.Description_Item
Tableau1[i,3] = Table_Item.Qte_Item
Tableau1[i,4] = Table_Item.TVA_Item
Tableau1[i,5] = Table_Item.HT_Item
FIN

//creation du tableau contenant les lignes APRES la ligne d'insertion

POUR i = NumLigne A Table_Item..Occurrence

Dimension(Tableau2,i,5)
Tableau2[i,1] = Table_Item.Num_Acte_Item
Tableau2[i,2] = Table_Item.Description_Item
Tableau2[i,3] = Table_Item.Qte_Item
Tableau2[i,4] = Table_Item.TVA_Item
Tableau2[i,5] = Table_Item.HT_Item

//trace(Tableau2[i,1],Tableau2[i,2],Tableau2[i,3],Tableau2[i,4],Tableau2[i,5
])
FIN

//============================
//Mise à jour de la table
//============================

//suppression des enregistrements

HLitRecherchePremier(Item,Num_Acte_Item,session_acte)
TANTQUE HTrouve
HSupprime(Item)
HLitSuivant(Item)
FIN

//Partie supérieure
POUR i = 1 A TableauInfo(Tableau1,tiDimension)

Item.Num_Acte_Item = Tableau1[i,1]
Item.Description_Item = Tableau1[i,2]
Item.Qte_Item = Tableau1[i,3]
Item.TVA_Item = Tableau1[i,4]
Item.HT_Item = Tableau1[i,5]

HAjoute(Item)

FIN


//insertion de la ligne

TableSelectMoins(Table_Item)
TableInsèreLigne(Table_Item,Table_Item..Occurrence + 1)
TableSelectPlus(Table_Item,Table_Item..Occurrence+1)
Table_Item.Num_Acte_Item = session_acte
Table_Item.Description_Item = "test insertion" // verif de l'ériture de la
clé
TableEnregistre(Table_Item)

//Partie Inferieure

POUR i = 1 A TableauInfo(Tableau2,tiDimension)

Item.Num_Acte_Item = Tableau2[i,1]
Item.Description_Item = Tableau2[i,2]
Item.Qte_Item = Tableau2[i,3]
Item.TVA_Item = Tableau2[i,4]
Item.HT_Item = Tableau2[i,5]

HAjoute(Item)

FIN

TableAffiche(Table_Item,taCourantBandeau)
===================================================

Voila !!!

J'ai essayé de faire ca proprement , mais ca ne marche pas comme je voudrais

QUI A UNE SOLUTION ---SIMPLE--- ET ---FIABLE--- ?

Merci de votre aide !
Fred
Publicado el 12,noviembre 2004 - 19:22
Bonjour,

voici le code qui permet d'insérer une ligne dans une table fichier "TABLE"
qui contient les legnes d'une facture avec une clé sur numéro de ligne
"LG_LIG"
//début code

LOCAL
n est un entier=0
// ne fait rien si aucun enregistrement sélectionné dans la table fichier
"TABLE" liée aux lignes de factures avec une clé sur numéro de ligne de
facture
SI TableSelect(TABLE)=-1 ALORS
Info("Sélectionner d'abord la ligne ou il faut insérer !")
RETOUR
FIN
// Si c'est la ligne de saisie/sélection, on ne peut pas la supprimer
SI TableSelect(TABLE)>TableOccurrence(TABLE) ALORS
Info("La ligne sélectionnée permet la saisie directe dans la table","Cette
ligne ne peut être modifiée")
RETOUR
FIN
// rafraichissement de la table avant la modification
// dans le cas où une modification à été faite sur un autre poste
TableAffiche(TABLE,taCourantBandeau)
n=TableSelect(TABLE)
SAV_LIG=LG_LIG // LG_LIG est lié à la rubrique LG.LG_LIG du fichier
lignes des factures qui est la clé qui contient le numéro de la ligne
TableSelectPlus(TABLE,TableOccurrence(TABLE))
TANTQUE TableSelect(TABLE)>=n
SI LG_LIG>"0001" ALORS
LG_LIG=NumériqueVersChaine(Val(LG_LIG)+1,"04d")
TableEnregistre(TABLE)
TableSelectPlus(TABLE,TableSelect(TABLE)-1)
SINON
LG_LIG=NumériqueVersChaine(Val(LG_LIG)+1,"04d")
TableEnregistre(TABLE)
SORTIR
FIN
FIN
TableInsèreLigne(TABLE,n,SAV_LIG)
TableEnregistre(TABLE)
// rafraichissement de la table
TableSelectPlus(TABLE,n)
RepriseSaisie(AR_CODE)

//fin code

Bon courage





"Fred.S" <netmaster2@wanadoo.fr> a écrit dans le message de
news:4194def2$1@news.pcsoft.fr...

Bonjour,

je cherche à insérer une ligne dans une table fichier qui est parcourue

dans
l'ordre de la cle primaire (Numéro auto)
ca fonctionne sur l'affichage du tableau mais pas dans le fichier HF car

la ligne ajoutee est systematiquement en derniere position dans le fichier

j'ai essayé de faire 2 tableaux dynamiques :

1 pour la partie supérieure du tableau (au dessus de la ligne à insérer)
1 pour la partie inférieure du tableau (au dessous de la ligne à insérer)

j'efface mon fichier hyperfile et je le reconstruit en creant :

1°) reinscription tu tableau 1
2°)insertion ligne vide
3°) reinscription tableau2

Mais ca ne fonctionne pas, ya pleins de bugs et de tte facon la solution

me
semble bien plus compliquée qu'elle ne doit l'être réellement
voici mon code :


============================================================================
===========

// session_acte = Numéro de l'acte en cours (filtre) cf : logiciel de
facturation
// g fait un hfiltre sur mon fichier HF pour récupérer les bonnes lignes

de
ma facture
// table_item est a table contenant les lignes de facturation


PROCEDURE Insertion(NumLigne)
//Numligne = numéro de la ligne selectionnée avant laquelle jedois inserer
une ligne vide

Tableau1,Tableau2 sont des tableaux dynamiques de 0 par 5 chaînes

i est un entier = 0
//creation du tableau contenant les lignes AVANT la ligne d'insertion
POUR i = 1 A NumLigne - 1

Dimension(Tableau1,i,5)
Tableau1[i,1] = Table_Item.Num_Acte_Item
Tableau1[i,2] = Table_Item.Description_Item
Tableau1[i,3] = Table_Item.Qte_Item
Tableau1[i,4] = Table_Item.TVA_Item
Tableau1[i,5] = Table_Item.HT_Item
FIN

//creation du tableau contenant les lignes APRES la ligne d'insertion

POUR i = NumLigne A Table_Item..Occurrence

Dimension(Tableau2,i,5)
Tableau2[i,1] = Table_Item.Num_Acte_Item
Tableau2[i,2] = Table_Item.Description_Item
Tableau2[i,3] = Table_Item.Qte_Item
Tableau2[i,4] = Table_Item.TVA_Item
Tableau2[i,5] = Table_Item.HT_Item


//trace(Tableau2[i,1],Tableau2[i,2],Tableau2[i,3],Tableau2[i,4],Tableau2[i,5
])
FIN

//============================
//Mise à jour de la table
//============================

//suppression des enregistrements

HLitRecherchePremier(Item,Num_Acte_Item,session_acte)
TANTQUE HTrouve
HSupprime(Item)
HLitSuivant(Item)
FIN

//Partie supérieure
POUR i = 1 A TableauInfo(Tableau1,tiDimension)

Item.Num_Acte_Item = Tableau1[i,1]
Item.Description_Item = Tableau1[i,2]
Item.Qte_Item = Tableau1[i,3]
Item.TVA_Item = Tableau1[i,4]
Item.HT_Item = Tableau1[i,5]

HAjoute(Item)

FIN


//insertion de la ligne

TableSelectMoins(Table_Item)
TableInsèreLigne(Table_Item,Table_Item..Occurrence + 1)
TableSelectPlus(Table_Item,Table_Item..Occurrence+1)
Table_Item.Num_Acte_Item = session_acte
Table_Item.Description_Item = "test insertion" // verif de l'ériture de la
clé
TableEnregistre(Table_Item)

//Partie Inferieure

POUR i = 1 A TableauInfo(Tableau2,tiDimension)

Item.Num_Acte_Item = Tableau2[i,1]
Item.Description_Item = Tableau2[i,2]
Item.Qte_Item = Tableau2[i,3]
Item.TVA_Item = Tableau2[i,4]
Item.HT_Item = Tableau2[i,5]

HAjoute(Item)

FIN

TableAffiche(Table_Item,taCourantBandeau)
===================================================

Voila !!!

J'ai essayé de faire ca proprement , mais ca ne marche pas comme je

voudrais

QUI A UNE SOLUTION ---SIMPLE--- ET ---FIABLE--- ?

Merci de votre aide !
Fred


Publicado el 12,noviembre 2004 - 22:11
Je ne sais pas ce que tu veux faire, mais l'insertion ne veut pas dire grand
chose.
Tu dois ajouter ton enreg, toujours en fin de fichier. Ce qui compte ensuite
c'est la rubrique de parcours utilisé.

Antoine


Fred.S wrote:
Bonjour,

je cherche à insérer une ligne dans une table fichier qui est
parcourue dans
l'ordre de la cle primaire (Numéro auto)
ca fonctionne sur l'affichage du tableau mais pas dans le fichier HF
car la ligne ajoutee est systematiquement en derniere position dans
le fichier

j'ai essayé de faire 2 tableaux dynamiques :

1 pour la partie supérieure du tableau (au dessus de la ligne à
insérer) 1 pour la partie inférieure du tableau (au dessous de la
ligne à insérer)

j'efface mon fichier hyperfile et je le reconstruit en creant :

1°) reinscription tu tableau 1
2°)insertion ligne vide
3°) reinscription tableau2

Mais ca ne fonctionne pas, ya pleins de bugs et de tte facon la
solution me
semble bien plus compliquée qu'elle ne doit l'être réellement
voici mon code :

============================================================================
===========

// session_acte = Numéro de l'acte en cours (filtre) cf : logiciel de
facturation
// g fait un hfiltre sur mon fichier HF pour récupérer les bonnes
lignes de
ma facture
// table_item est a table contenant les lignes de facturation


PROCEDURE Insertion(NumLigne)
//Numligne = numéro de la ligne selectionnée avant laquelle jedois
inserer
une ligne vide

Tableau1,Tableau2 sont des tableaux dynamiques de 0 par 5 chaînes

i est un entier = 0
//creation du tableau contenant les lignes AVANT la ligne d'insertion
POUR i = 1 A NumLigne - 1

Dimension(Tableau1,i,5)
Tableau1[i,1] = Table_Item.Num_Acte_Item
Tableau1[i,2] = Table_Item.Description_Item
Tableau1[i,3] = Table_Item.Qte_Item
Tableau1[i,4] = Table_Item.TVA_Item
Tableau1[i,5] = Table_Item.HT_Item
FIN

//creation du tableau contenant les lignes APRES la ligne d'insertion

POUR i = NumLigne A Table_Item..Occurrence

Dimension(Tableau2,i,5)
Tableau2[i,1] = Table_Item.Num_Acte_Item
Tableau2[i,2] = Table_Item.Description_Item
Tableau2[i,3] = Table_Item.Qte_Item
Tableau2[i,4] = Table_Item.TVA_Item
Tableau2[i,5] = Table_Item.HT_Item

//trace(Tableau2[i,1],Tableau2[i,2],Tableau2[i,3],Tableau2[i,4],Tableau2[i,5
])
FIN

//============================
//Mise à jour de la table
//============================

//suppression des enregistrements

HLitRecherchePremier(Item,Num_Acte_Item,session_acte)
TANTQUE HTrouve
HSupprime(Item)
HLitSuivant(Item)
FIN

//Partie supérieure
POUR i = 1 A TableauInfo(Tableau1,tiDimension)

Item.Num_Acte_Item = Tableau1[i,1]
Item.Description_Item = Tableau1[i,2]
Item.Qte_Item = Tableau1[i,3]
Item.TVA_Item = Tableau1[i,4]
Item.HT_Item = Tableau1[i,5]

HAjoute(Item)

FIN


//insertion de la ligne

TableSelectMoins(Table_Item)
TableInsèreLigne(Table_Item,Table_Item..Occurrence + 1)
TableSelectPlus(Table_Item,Table_Item..Occurrence+1)
Table_Item.Num_Acte_Item = session_acte
Table_Item.Description_Item = "test insertion" // verif de l'ériture
de la
clé
TableEnregistre(Table_Item)

//Partie Inferieure

POUR i = 1 A TableauInfo(Tableau2,tiDimension)

Item.Num_Acte_Item = Tableau2[i,1]
Item.Description_Item = Tableau2[i,2]
Item.Qte_Item = Tableau2[i,3]
Item.TVA_Item = Tableau2[i,4]
Item.HT_Item = Tableau2[i,5]

HAjoute(Item)

FIN

TableAffiche(Table_Item,taCourantBandeau)
===================================================

Voila !!!

J'ai essayé de faire ca proprement , mais ca ne marche pas comme je
voudrais

QUI A UNE SOLUTION ---SIMPLE--- ET ---FIABLE--- ?

Merci de votre aide !
Fred
Publicado el 13,noviembre 2004 - 01:04
Bonjour,

D'abord puisque la clé est auto tu peux normalement pas la gérer!
Cela dit je pense qu'en desactivant temporairement la gestion de l'id auto tu peux arriver a decaler tous les les id et faire un trou pour inserer ta ligne!

Bon sinon heureusement il y a pour moi une solution plus simple tu dois rajouter une cle avec doublon ou même unique dans ta table et le gérer comme index d'affichage et cl" de parcours et la tu t'amuses a decaler tous les index pour rajouter ta ligne en premier, pas terrible mais ça marche.
Sinon tu peux créer une table annexe contenant uniquement les identifiants dans l'ordre que tu veux les afficher pour inserer en premier tu rajoutes une ligne (c.a.d à la fin) et tu y colles le 1er id, puis ton id à ajouter tu le mets en première que tu modifie.
Pour l'affichage t'as plus qu'a rajouter un order by tblordre.id dans ta requête en modifiant les clauses select et from.

En espérant que cela puisse t'aider.

Guillaume