PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → OngletOuvre en modale
OngletOuvre en modale
Iniciado por ecoinfo, 06,sep. 2019 22:06 - 14 respuestas
Miembro registrado
31 mensajes
Publicado el 06,septiembre 2019 - 22:06
Bonjour tout le monde

Je m’expliquer

fenêtre interne commande, fenêtre interne client, et onglet dynamique onglet1
sur la fenêtre interne commande je voudrai sélectionner le client après avoir ouvrier la fenêtre interne client sur l'onglet dynamique

autrement dit OngletOuvre en modale..

J'arrive pas à trouver de piste

Avez-vous une idée

Merci d'avance
Miembro registrado
4.361 mensajes
Publicado el 06,septiembre 2019 - 23:20
Bonjour,
Pourrait-on avoir une copie de ton interface ou une description moins succinte ?

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
31 mensajes
Publicado el 06,septiembre 2019 - 23:38
Bonjour

ci-après des captures d'écrans










le clique sur sélectionner le client normalement pour ouvrir la fenêtre interne client dans l'onglet et sélectionner dans la table le client voulus et cliquer sur le bouton sélectionner et fermer qu'est sur la fenêtre interne client

J’espère que mon problème est claire

Merci d'avance
Miembro registrado
4.361 mensajes
Publicado el 07,septiembre 2019 - 04:15
Une fenêtre normale (FEN_ListeClients) concernant la liste des clients est suffisante. A la limite, tout se passe dans le code de sélection du champ table (TABLE_Clients)
Initialisation de FEN_ListeClient
MoiMême..ValeurRenvoyée=Faux

Sélection d'une ligne :
MaFenêtre..ValeurRenvoyée=Client.PK_Client

Mieux, si le champ table mémorise PK_Client (Description/Contenu)
MaFenêtre..ValeurRenvoyée=MoiMême


Le code du bouton de l'onglet devient alors :
nIDClient est entier sur 8 octets

nIDClient=Ouvre(FEN_ListeClients)


Une autre solution consisterait à sélectionner le client via une combo.

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
31 mensajes
Publicado el 07,septiembre 2019 - 10:04
Bonjour

Je vous remercie de vos réponses, mais je voudrai rester sur ce système des onglets
car sur la fenêtre liste clients, il peut y avoir le bouton créer un client ouvrera un autre onglet avec OngletOuvre etc
Miembro registrado
4.361 mensajes
Publicado el 07,septiembre 2019 - 11:35
Je commence à comprendre, enfin presque.
C'est une fenêtre de gestion des clients et non des commandes.
Un onglet "Commande" dédié à la recherche me posais quelques problèmes, d'autant plus que cette partie peut se faire hors onglet.

En gros, tu veux quelque choses dans ce genre.




Dans ce cas, l'onglet "Client" est un onglet statique.

Le principe est quasiment le même, il faut passer la clé primaire de Client à la fenêtre interne comme on le ferait pour une fenêtre normale.
Initialisation :
Procedure FI_Client(gnNoClient est entier sur 8 octets=0)
SI PAS HLitRecherche(Client,PK_Client,gnNoClient) ALORS //Passage en mode création demandé( pas de paramètre) ou "forcé" (Enregistrement non trouvé)
HRAZ(Client)
SI gnNoClient<>0 ALORS
ToastAffiche("L'enregistrement n'a pas été trouvé"+CRLF+"Passage en mode création")
FIN
FIN
FichierVersEcran()


Consultation (Bouton Consulter)
sLibelleOnglet est une chaîne

sLibelleOnglet="Client :%1%2"

SI HLitRecherche(Client,PK_Client,TABLE_Client) ALORS
sLibelleOnglet=ChaîneConstruit(sLibelleOnglet,CRLF,Client.NDX_NomClient)
SINON
sLibelleOnglet="Nouveau Client"
FIN
OngletOuvre(ONG_Clients,sLibelleOnglet,FI_Client,Client.PK_Client)


Création :
OngletOuvre(ONG_Clients,"Nouveau client",FI_Client)


Remarque :
Il est possible d'inclure une FI directement dans un champ table, sans avoir à passer par les onglets https://doc.pcsoft.fr/fr-FR/?1013200#NOTE5_FI_Detail_Ligne

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
31 mensajes
Publicado el 07,septiembre 2019 - 22:03
Bonjour

d'abord merci de vos réponses
je crois le problème n'est pas bien clarifié,
ci-après une vidéo d'un exemple de ce que je voulais réaliser avec windev 24
la minute 0:27


Merci d'avance
Miembro registrado
4.361 mensajes
Publicado el 09,septiembre 2019 - 10:08
La vidéo ne m'a rien apporté.
Récapitulons :
Nous avons une fenêtre (FEN_Commandes) comportant un onglet dynamique (ONG_Commande) alimenté par défaut par une fenêtre interne (FI_Commande)



On veut sélectionner le client concerné via un bouton de sélection (1) qui ouvre une fenêtre (FEN_ListeClient) comportant un champ table (TABLE_Client)



A partir de cette fenêtre, on pourra soit sélectionner le client (2), soit en créer un nouveau (3) via ONG_Commande




--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
31 mensajes
Publicado el 11,septiembre 2019 - 01:18
Bonjour

Exactement c'est ça

la question est le code à mettre sur 1
l'ouverture de l'onglet client et le code à mettre sur 2 et redonner le focus à commande sachant que il peut y avoir plusieurs onglets ouvertes

Merci d'avance
Miembro registrado
4.361 mensajes
Publicado el 11,septiembre 2019 - 10:27
On a récupéré une grosse partie des outils au fil des post précédents. Il ne nous reste plus qu'à gérer la gestion du focus, c'est l'histoire de quelques lignes.
La récupération du client a été traitée dans mon post #4, il suffit de renvoyer le client sélectionné à la fermeture de FEN_ListeClients.
On s'assurera que le champ table de la fenêtre FEN_ListeClient renvoie l'identifiant de client (Valeur mémorisée dans l'onglet contenu de la description)
Initialisation de FEN_ListeClient
MoiMême..ValeurRenvoyée=Faux

Sélection d'une ligne du champ table :
MaFenêtre..ValeurRenvoyée=MoiMême

Code du Bouton OK :
Ferme()
[/code)
Code du Bouton Créer :
[code]
MaFenêtre..ValeurRenvoyée=0
Ferme()

Code du bouton Annuler :
Code du Bouton Créer :
MaFenêtre..ValeurRenvoyée=-1
Ferme()

En ce qui concerne la reprise de focus, l'astuce consiste à mémoriser l'alias de l'onglet appelant.
Code d'initialisation de FI_Client (Penser à déclarer le contexte HFSQL indépendant DANS Description/Détail) :
[Code]
Procedure FI_Client(sOngletAppelant est chaîne,gnNoClient est entier sur 8 octets=0)
SI PAS HLitRecherche(Client,PK_Client,gnNoClient) ALORS //Passage en mode création
HRAZ(Client)
SI gnNoClient<>0 ALORS
ToastAffiche("L'enregistrement n'a pas été trouvé"+CRLF+"Passage en mode création")
FIN
FIN
FichierVersEcran()


Code du bouton de sélection (1):
nNoClient est entier sur 8
sLibelleOnglet est une chaîne

sLibelleOnglet="Client :%1%2"

nNoClient=Ouvre(FEN_Liste_Client)
SI nNoClient = -1 ALORS //Sélection annulée
RETOUR
SINON
SI HLitRecherche(Client,PK_Client,nNoClient) ALORS
FichierVersEcran()
HRAZ(Facture)
Facture.FK_Client=nNoClient
//On crée le bon de commande pour le client sélectionné
Facture.NDX_DateFacture=DateDuJour()
HAjoute(Facture)
gnNoCommandeEnCours=Facture.PK_Facture
TableAffiche(TABLE_Commande,taInit)
sLibelleOnglet=ChaîneConstruit(sLibelleOnglet,CRLF,Client.NDX_NomClient)
SINON
sLibelleOnglet="Nouveau Client"
FIN
OngletOuvre(ONG_Commandes,sLibelleOnglet,FI_Client,ONG_Commandes,nNoClient)
FIN


Il ne nous reste plus qu'à traiter la reprise de focus, tout se passe lors de la fermeture d'un volet.
SI EnumèreElément(enumFenêtreInterne)="FI_Client" ALORS //On est dans le cas d'une saisie de client
//Vérifier l’existence de l'onglet
ONG_Commandes=FI_Client.sOngletAppelant
FIN


Normalement, tout y est

--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
31 mensajes
Publicado el 11,septiembre 2019 - 12:48
Bonjour

Vous avez utiliser Ouvre(FEN_Liste_Client)
l'idée est d'avoir tous les fenêtres sur l'onglet ! avec OngletOuvre
Miembro registrado
4.361 mensajes
Publicado el 11,septiembre 2019 - 16:39
Le principe est le même, mais ça va vite devenir une usine à gaz si plusieurs bons de commande sont ouverts simultanément.
Et cela peut devenir ingérable pour l'utilisateur
Il va falloir mettre en place une table des appels pour contrôler la sélection du client pour chaque bon de commande.

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 11,septiembre 2019 - 16:49
Miembro registrado
4.361 mensajes
Publicado el 11,septiembre 2019 - 16:55
On peut rapidement arriver à ça :




--
Il y a peut être plus simple, mais, ça tourne
Miembro registrado
31 mensajes
Publicado el 11,septiembre 2019 - 17:02
Bonjour
c'est exactement mon besoin, la question d'un seul onglet client et bien gérée,
exemple si la fenêtre interne FEN_Liste_Client est déjà ouverte je leur donne le focus.. avec EnumèreChamp

Reste le code à mettre sur 1
l'ouverture de l'onglet client et le code à mettre sur 2 ..

Merci
Miembro registrado
4.361 mensajes
Publicado el 11,septiembre 2019 - 17:48
C'est ce que je disais dans mon post précédent.
Tu as tous les outils à ta disposition.
il faut cependant penser à savoir que faire si la sélection du client est appelée plusieurs fois depuis le même volet, quelle choix prend on en compte ?
Le premier, le dernier, un autre ...

--
Il y a peut être plus simple, mais, ça tourne