PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Table Conteneur et Colonne clone
Table Conteneur et Colonne clone
Débuté par thomas.dreuilhe, 11 juil. 2023 14:36 - 2 réponses
Posté le 11 juillet 2023 - 14:36
Bonjour,
J'ai une table avec une colonne conteneur "modèle", avec 2 champs de saisie et un champ interrupteur, que je clone plusieurs fois.
Je remplis ensuite la table par programmation.
Jusque là tout va bien mais le problème c'est que lorsque je rentre en saisie dans un des champs, tous les champs de la ligne en cours se vident...

Au niveau du code j'ai

Initialisation de la table :
NomNouvelleColonne est une chaîne
NomColonne est une chaîne
//Supprime tout
NomColonne = "COL_DEFO"
SI ChampExiste(NomColonne) ALORS
ChampSupprime(NomColonne)
FIN
POUR TOUT Marque
NomColonne = "COL_" + Marque.Nom
SI ChampExiste("COL_" + Marque.Nom) ALORS
ChampSupprime(NomColonne)
FIN
FIN

NomNouvelleColonne = "COL_DEFO"
ChampClone(COL_OriginalMarque,NomNouvelleColonne)
{NomNouvelleColonne,indChamp}..Libellé = "Défaut"
{NomNouvelleColonne,indChamp}..Visible = Vrai
{NomNouvelleColonne+".LIB_IdMarque",indChamp}..Libellé = 0
POUR TOUT Marque
// On construit le nom de la nouvelle colonne
NomNouvelleColonne = "COL_" + Marque.Nom
ChampClone(COL_OriginalMarque,NomNouvelleColonne)
{NomNouvelleColonne,indChamp}..Libellé = Marque.Nom
{NomNouvelleColonne,indChamp}..Visible = Vrai
{NomNouvelleColonne+".LIB_IdMarque",indChamp}..Libellé = Marque.IDMarque
FIN


Affichage d'une ligne de la table :
POUR TOUT Famille_Marque AVEC IDFamille = TABLEH_SansNom1.COL_Id
HLitRecherchePremier(Marque,IDMarque,Famille_Marque.IDMarque)
sNomMarque est une chaîne
SI HTrouve(Marque) ALORS
sNomMarque = Marque.Nom
SINON
sNomMarque = "DEFO"
FIN
{"TABLEH_SansNom1.COL_"+sNomMarque+"["+TABLEH_SansNom1+"].SAI_Marge",indChamp} = Famille_Marque.Marge
{"TABLEH_SansNom1.COL_"+sNomMarque+"["+TABLEH_SansNom1+"].SAI_MargeMax",indChamp} = Famille_Marque.MargeMax
{"TABLEH_SansNom1.COL_"+sNomMarque+"["+TABLEH_SansNom1+"].INT_DepassePVP",indChamp} = Famille_Marque.DepassePVP
SI Famille_Marque.Marge > 0 OU Famille_Marque.MargeMax > 0 OU Famille_Marque.DepassePVP = Vrai ALORS
{"TABLEH_SansNom1.COL_"+sNomMarque+"["+TABLEH_SansNom1+"]",indChamp}..CouleurFond = VertClair
FIN
FIN



Sortie de colonne COL_OriginalMarque :
IdMarque est un entier sur 8 octets = LIB_IdMarque
HLitRecherche(Famille_Marque,IDFamille_IDMarque,[TABLEH_SansNom1.COL_Id,IdMarque],hIdentique)
SI HTrouve(Famille_Marque) ALORS
SI SAI_Marge = 0 ET SAI_MargeMax = 0 ET INT_DepassePVP = Faux ALORS
HSupprime(Famille_Marque)
SINON
Famille_Marque.MargeMax = SAI_MargeMax
Famille_Marque.Marge = SAI_Marge
Famille_Marque.DepassePVP = INT_DepassePVP
HModifie(Famille_Marque)
FIN
SINON
SI SAI_Marge <> 0 OU SAI_MargeMax <> 0 OU INT_DepassePVP = Vrai ALORS
HRAZ(Famille_Marque)
Famille_Marque.IDFamille = TABLEH_SansNom1.COL_Id
Famille_Marque.IDMarque = IdMarque
Famille_Marque.MargeMax = SAI_MargeMax
Famille_Marque.Marge = SAI_Marge
Famille_Marque.DepassePVP = INT_DepassePVP
HAjoute(Famille_Marque)
FIN

FIN
Posté le 11 juillet 2023 - 16:27
J'ai oublié quelques précisions utiles :
- la table est une table hierarchique remplie par fichier
- le remplissage différé des sous niveaux n'est pas coché
- Je suis sur Windev 26
Posté le 20 août 2025 - 10:41
As tu résolut ton problème je rencontre le même soucis.

cordialement