[Résolu][Base] Enregistrement de dossiers par formulaire

Discussions sur les projets et applications développés en liaison avec une suite bureautique libre.

Modérateur : Vilains modOOs

Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Base] Enregistrement de dossiers par formulaire

Message par Piaf »

Bonsoir
le troubadour a écrit :la requête absent ne fonctionne pas , tout le reste a l'air d'être bon
A l'air seulement. Les requêtes renvoient ce qu'on leurs demande.
Je n'ai pas compris à quoi servent ces requêtes, mais pour que les résultats soient justes, il faut tenir compte du type de jointure entre les tables qui les constituent.
Elles sont toutes en jointure interne, donc elles renvoient uniquement les enregistrements dont le contenu des champs liés possède la même valeur dans les différentes tables.
Pour qu'elles renvoient les bons enregistrements, il faut utiliser les jointures gauches.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
le troubadour
Membre OOrganisé
Membre OOrganisé
Messages : 99
Inscription : 09 nov. 2013 14:07

Re: [Base] Enregistrement de dossiers par formulaire

Message par le troubadour »

bonjour
Piaf a écrit :il faut utiliser les jointures gauches.
ok réalisé

sur le rapport absent j'ai voulu mettre les feuilles en portrait . Seulement la première c'est mise en portrait les autres sont restées en paysage. Comment l'appliquer à tout le rapport ?

Piaf a écrit :Je n'ai pas compris à quoi servent ces requêtes
je l'ai ai faites pour éditer les rapports . Je m'apercois maintenant que le fichier évolue elles ne servent pas à grand chose , mais ça m'aide à comprendre

merci


Le troubadour
open office 4.1,2 , libre office 5.0.5.2 windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Base] Enregistrement de dossiers par formulaire

Message par Piaf »

Bonjour
le troubadour a écrit :sur le rapport absent j'ai voulu mettre les feuilles en portrait . Seulement la première c'est mise en portrait les autres sont restées en paysage
c'est normal le format de la première page est différent des autres, une fois que ta première page est en portrait, tu crées un nouveau style de page basé sur le format de ta première page. Tu modifies le nouveau style en supprimant les entêtes et les pieds de page. Dans ta première page à style de suite tu sélectionnes ton nouveau style.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
le troubadour
Membre OOrganisé
Membre OOrganisé
Messages : 99
Inscription : 09 nov. 2013 14:07

Re: [Résolu][Base] Enregistrement de dossiers par formulaire

Message par le troubadour »

bonjour à tous , je reviens vers vous car depuis quelques temps mon programme à des signes de fatigues, est-ce le fait d'une nouvelles version , je ne sais pas
je m'explique, lorsque je fais une recherche via le formulaire flstDossiers1 par motif de saisie j'ai un message d'erreur et je pense qu'il y a un problème de compatibilité et je pense que c'est sur l'ensemble des macros du filtre

fichier: http://www.sendbox.fr/d5f5ca99c7758257/bureauER_(1).odb


merci


Le troubadour
open office 4.1,2 , libre office 5.0.5.2 windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Résolu][Base] Enregistrement de dossiers par formulaire

Message par Piaf »

Bonjour
Tu devrais supprimer le [Résolu]. Entre 2014 et 2016 les choses ont évoluées.
A toutes fins utiles, le code pour le filtre multicritères que tu utilises était destiné à la version de LibO à l'époque, et ta signature indique AOO.
Précise sous quelle(s) suite(s) et avec quelle version la macro doit fonctionner.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
le troubadour
Membre OOrganisé
Membre OOrganisé
Messages : 99
Inscription : 09 nov. 2013 14:07

Re: [Base] Enregistrement de dossiers par formulaire

Message par le troubadour »

merci

en fait c'est bien sur Libre Office que ça dois tourner mais là le filtre ne fonctionne plus du tout, c'est la misère, lorsque je mets le formulaire " flstDossiers1" le filtre ne fonctionne plus lorsque je met un critère


merci


le troubadour
open office 4.1,2 , libre office 5.0.5.2 windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Résolu][Base] Enregistrement de dossiers par formulaire

Message par Piaf »

Re
Tu édites ton formulaire, dans l'onglet Données des propriétés du formulaire à Type de contenu tu sélectionnes Instruction SQL et dans Contenu, tu colles cette instruction.

Code : Tout sélectionner

SELECT YEAR( "dteEnreg" ) AS "AnneeDossier", "IdDossier", "refmotifsaisie", "dteEnreg", "NomCandidat", "PrenomCandidat", "dtenaiss", "dosrecup" FROM "tDossiers"
Tu enregistres les modifications et tu fermes le formulaire.
Tu remplaces la macro Filtre par

Code : Tout sélectionner

Sub Filtre(oEv as Object)
Dim maConnexion as Object, maRequete as Object, oForm as Object
Dim strSQLTout as String
	maConnexion = ThisDatabasedocument.CurrentController.ActiveConnection
	maRequete = maConnexion.Queries.getByName("rFiltres")
	oForm = oEv.Source.Model.Parent
	strSQLTout = "SELECT YEAR( ""dteEnreg"" ) AS ""AnneeDossier"", ""IdDossier"", ""refmotifsaisie"", ""dteEnreg"", ""NomCandidat"", ""PrenomCandidat"", ""dtenaiss"", ""dosrecup"" FROM ""tDossiers"""
	Select case oEv.Source.Model.Name
		Case "cmdSupFiltre"
			strSQL = strSQLTout
			Clause = False
			With oForm
				.getByName("lstAnnee").SelectedItems = Array()
				.getByName("lstMotifs").SelectedItems = Array()
				.getByName("lstPRest").SelectedItems = Array()
				.getByName("rechNom").Text = ""
			End With
		Case "lstPRest"
			If oEv.Source.SelectedItem = "Dossiers en Cours" Then
				Valeur = 0
			Else
				Valeur = 1	
			End If
			If clause = False Then
				strSQL = strSQLTout & " WHERE ""dosrecup"" = " & Valeur
				Clause = True
			Else
				strSQL = strSQL & " AND ""dosrecup"" =" & Valeur
			End If		
		Case "lstMotifs"
			If clause = False Then
				strSQL = strSQLTout & " WHERE ""refmotifsaisie"" = " & oEv.Source.Model.SelectedValue
				Clause = True		
			Else
				strSQL = strSQL & " AND ""refmotifsaisie"" = " & oEv.Source.Model.SelectedValue
			End If	
		Case "lstAnnee"	
			If clause = False Then
				strSQL = strSQLTout & "WHERE YEAR( ""dteEnreg"" ) =" & oEv.Source.SelectedItem
				Clause = True
			Else
				strSQL = strSQL & " AND YEAR( ""dteEnreg"" ) =" & oEv.Source.SelectedItem
			End If		
		Case "rechNom"
			oEv.Source.Text = Majuscule(oEv.Source.Text)
			If Clause = False Then
				strSQL = strSQLTout & " WHERE ""NomCandidat"" LIKE " & Apos(oEv.Source.Text & "%")
				Clause = True
			Else
				strSQL = strSQL & " AND ""NomCandidat"" LIKE " & Apos(oEv.Source.Text & "%")
			End If	
		Case "numDoss"
         If isNumeric(oEv.Source.Model.Text) Then
            If Clause = False Then
               strSQL = strSQLTout & " WHERE ""IdDossier"" = " & oEv.Source.Text
               Clause = True
            Else
               strSQL = strSQL & " AND ""IdDossier"" = " & oEv.Source.Text
            End If            
         Else
            MsgBox("Vous ne pouvez taper qu'une valeur numérique dans ce contrôle")
            Exit Sub
         End If

	End Select
	oForm.Command = strSQL
	oForm.Reload	
End Sub
Tu enregistres.
Tu testes le formulaire.
le troubadour a écrit :j'ai un message d'erreur
Quel message d'erreur ?
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
le troubadour
Membre OOrganisé
Membre OOrganisé
Messages : 99
Inscription : 09 nov. 2013 14:07

Re: [Résolu][Base] Enregistrement de dossiers par formulaire

Message par le troubadour »

bonsoir à tous

merci le PIAF ça à l'air de fonctionner , une autre chose sur le même menu dans la barre de navigation lorsque je fais une recherche ça m'affiche toujours 49* (enregistrement) .
Est-il possible d'avoir le nombre réel d'enregistrements ?

le message d'erreur se met lorsque l'on appuie sur "gestion des doublons" dans le même menu , il y a une erreur de syntaxe SQL et on ne peut pas télécharger le contenu

merci

Le troubadour
open office 4.1,2 , libre office 5.0.5.2 windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Résolu][Base] Enregistrement de dossiers par formulaire

Message par Piaf »

Bonjour
le troubadour a écrit :Est-il possible d'avoir le nombre réel d'enregistrements ?
Tu ajoutes le code suivant à la fin de la macro Filtre

Code : Tout sélectionner

	rst = oForm.CreateResultset
	rst.Last
	rst.First
le troubadour a écrit :le message d'erreur se met lorsque l'on appuie sur "gestion des doublons"
Ça n'est pas une erreur due au code, dans la version LibO 5.0.5.2, l'application n'accepte pas la relation sur le champ concaténé entre le formulaire principal et le sous formulaire, dans AOO 4.1.2 et LibO 4.4.7.2 elle l'accepte.
Pour que cela fonctionne, tu changes la requête Rnom_en_double par

Code : Tout sélectionner

SELECT "NomCandidat", "PrenomCandidat", "Candidat", COUNT( "Candidat" ) "Nbr" FROM "rDossiers" GROUP BY "NomCandidat", "PrenomCandidat", "Candidat" HAVING ( ( COUNT( "Candidat" ) > 1 ) )
Et dans le formulaire fDossiers_en_double, tu établis la relation entre le formulaire et le sous-formulaire sur le nom et le prénom
liaisons.png
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
le troubadour
Membre OOrganisé
Membre OOrganisé
Messages : 99
Inscription : 09 nov. 2013 14:07

Re:[Base] Enregistrement de dossiers par formulaire

Message par le troubadour »

bonjour à tous, merci le PIAF

au niveau du formulaire de recherche , il y a quelque chose qui ne fonctionne pas , par exemple si tu tapes comme critère le dossier N°5816 tu tombe sur la bonne personne mais si la sélectionne et que l'on ouvre son dossier et bien ça ne l'ouvre pas.

et lorsque l'on veut supprimer le filtre ça ne supprime pas le critère de recherche

pour les doublons c'est réglé

merci

fichier : http://www.sendbox.fr/fdde34168be4ea0d/bureauER_(1).odb

Le troubadour
open office 4.1,2 , libre office 5.0.5.2 windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Résolu][Base] Enregistrement de dossiers par formulaire

Message par Piaf »

Bonjour
le troubadour a écrit :lorsque l'on veut supprimer le filtre ça ne supprime pas le critère de recherche
Normal, le contrôle n'est pas inclus dans la macro.
Il suffit de l'ajouter.

Code : Tout sélectionner

         With oForm
            .getByName("lstAnnee").SelectedItems = Array()
            .getByName("lstMotifs").SelectedItems = Array()
            .getByName("lstPRest").SelectedItems = Array()
            .getByName("rechNom").Text = ""
            .getByName("numDoss").Text = ""
         End With
Pour l'ouverture du formulaire ça ne peut pas fonctionner. Le champ IdDossier étant de type Integer,

Code : Tout sélectionner

if EnregistrementEnCours.String = Cherche
doit être remplacé par

Code : Tout sélectionner

if EnregistrementEnCours.Value = Cherche
Mais la macro PositionParSignet2 balaie tous les enregistrements (7193) et n'affiche le bon enregistrement dans le formulaire que lorsqu'il est trouvé.
Si l'enregistrement est dans les derniers de la recherche, c'est long (voir très long ; le temps est relatif :lol: )
Tu aurais peut-être intérêt à filtrer le formulaire.

Code : Tout sélectionner

Sub PositionParFiltre(oEv as Object)
Dim oForm as Object, ctrlListeChoix as Object, NouveauFormulaire as Object, Grille as Object
Dim ValeurChoix as Integer, nomFormulaire As String, Motif as Integer
	oForm = oEv.Source.Model.Parent
	Grille = oForm.getByName("Dossiers_Grid")
	vueGrille = thisComponent.CurrentController.getControl(Grille)
	lignesSel = vueGrille.Selection
	If UBound(lignesSel)<> 0 Then
		MsgBox("Vous devez sélectionner une ligne",64)
		Exit Sub
	Else
		ValeurChoix = oForm.getInt(2)
		Motif = oForm.getInt(3)
	End If
	Select case Motif
		Case 0
			nomFormulaire = "fDossiersAbsent"
		Case 1
			nomFormulaire = "fDossiersCandidatlibre"
		Case 2
			nomFormulaire = "fDossiersDuplicata"
		Case 3
			nomFormulaire = "fDossiersEtablisFerme"
		Case 4
			nomFormulaire = "fDossiersRetenus"
		Case 5
			nomFormulaire = "fDossiersVerifAdm"
		Case 6
			nomFormulaire = "fDossiersVM"
	End Select		
	NouveauFormulaire = OuvrirFormulaire(nomFormulaire)
	With NouveauFormulaire.drawpage.forms.getbyname(nomFormulaire)
   		.Filter="""IdDossier"" =" & ValeurChoix    
		.Applyfilter = True
		If  .isloaded = False Then
			.load
		Else
            .reload
		End If
	End With
        FermerFormulaire("flstDossiers1")
End Sub
Je suis actuellement sous une version 4.4.7.2 de LibO et l'affichage du Formulaire avec le bon enregistrement se fait tout de suite.
je testerais ce soir sous LibO 5.0.5.2.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
le troubadour
Membre OOrganisé
Membre OOrganisé
Messages : 99
Inscription : 09 nov. 2013 14:07

Re: [Base] Enregistrement de dossiers par formulaire

Message par le troubadour »

merci

effectivement si je prends le dernier dossier, c'est interminable, je viens mettre la macro proposée et cela semble fonctionner

Le troubadour
open office 4.1,2 , libre office 5.0.5.2 windows 7
le troubadour
Membre OOrganisé
Membre OOrganisé
Messages : 99
Inscription : 09 nov. 2013 14:07

Re: [Résolu][Base] Enregistrement de dossiers par formulaire

Message par le troubadour »

bonsoir à tous , salut le PIAF

lorsque tu m'as donné le code ça semblait fonctionner , mais là plus du tout , je ne sais pas si je l'ai mis au bon endroit

le troubadour a écrit:
Est-il possible d'avoir le nombre réel d'enregistrements ?
Tu ajoutes le code suivant à la fin de la macro Filtre
CODE :
rst = oForm.CreateResultset
rst.Last
rst.First
merci

Le troubadour
open office 4.1,2 , libre office 5.0.5.2 windows 7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Résolu][Base] Enregistrement de dossiers par formulaire

Message par Piaf »

Bonjour
le troubadour a écrit :je ne sais pas si je l'ai mis au bon endroit
A la fin de la macro Filtre.

Code : Tout sélectionner

.................
   End Select
   oForm.Command = strSQL
   oForm.Reload 
   
   rst = oForm.CreateResultset
   rst.Last
   rst.First  
End Sub
HS : Si tu as encore des questions, supprime le [Résolu] et la coche de ton premier message.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64