Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment éviter deux enregistrements d'un même produits dans un sous formulaire commmande

1 réponse
Avatar
pibo
Bonjour =E0 tous,

Voici mon probl=E8me et d'avance merci pour votre aide (D=E9sol=E9, je
dois =EAtre un peu long mais je pense qu'il faut cela pour =EAtre
compris).

Pour mon application (ACCESS 2003) j'ai cr=E9e

1-------------
Une requ=EAte R_CommandeEntrer
Cette requ=EAte est d=E9finie comme suit une table T_Clients en relation
avec
Une table
T_Commande

SELECT T_Clients.IdClient, T_Clients.R=E9fClient, T_Clients.TitreClient,
T_Clients.NomClient, T_Clients.Pr=E9nomClient,
T_Clients.ResponsableCommandeSoci=E9t=E9, [T_Clients.NomClient] & " " &
[T_Clients.Pr=E9nomClient] AS LeNom, T_Clients.Cat=E9gorie,
T_Clients.AdresseClient, T_Clients.CodePostal, T_Clients.Ville,
T_Clients.Province, T_Clients.Pays, T_Clients.Num=E9roTva,
T_Clients.EscompteClient, T_Clients.RemiseClient,
T_Commandes.NumeroCommande, T_Commandes.NumeroBordereau,
T_Commandes.IdClient, T_Commandes.R=E9fClient, T_Commandes.NomPatient,
T_Commandes.EtapeDeR=E9alisation, T_Commandes.Remarques,
T_Commandes.DateEntr=E9eCommande, T_Commandes.DateLivraisonPr=E9vue,
T_Commandes.DateDeSortieLabo, T_Commandes.DateDeRetourLabo,
T_Commandes.DateSortieCommande, T_Commandes.TotalCommande,
T_Commandes.TotalTvaCommande, T_Commandes.TotalCommandeTvaComprise,
T_Commandes.Encours, T_Commandes.Sortie, T_Commandes.Description,
T_Clients.AffInfoPatientSurFact
FROM T_Clients INNER JOIN T_Commandes ON T_Clients.R=E9fClient =3D
T_Commandes.R=E9fClient;

Une requ=EAte R_CommandeSortir
Cette requ=EAte est d=E9finie comme suit une requ=EAte R_CommandeEntrer
Une table
T_Controle

SELECT T_Controle.NumderBordereau, R_CommandeEntrer.T_Clients.IdClient,
R_CommandeEntrer.T_Clients.R=E9fClient, R_CommandeEntrer.TitreClient,
R_CommandeEntrer.NomClient, R_CommandeEntrer.Pr=E9nomClient,
R_CommandeEntrer.ResponsableCommandeSoci=E9t=E9, R_CommandeEntrer.LeNom,
R_CommandeEntrer.Cat=E9gorie, R_CommandeEntrer.AdresseClient,
R_CommandeEntrer.CodePostal, R_CommandeEntrer.Ville,
R_CommandeEntrer.Province, R_CommandeEntrer.Pays,
R_CommandeEntrer.Num=E9roTva, R_CommandeEntrer.EscompteClient,
R_CommandeEntrer.RemiseClient, R_CommandeEntrer.NumeroCommande,
R_CommandeEntrer.NumeroBordereau,
R_CommandeEntrer.T_Commandes.IdClient,
R_CommandeEntrer.T_Commandes.R=E9fClient, R_CommandeEntrer.NomPatient,
R_CommandeEntrer.EtapeDeR=E9alisation, R_CommandeEntrer.Remarques,
R_CommandeEntrer.DateEntr=E9eCommande,
R_CommandeEntrer.DateLivraisonPr=E9vue,
R_CommandeEntrer.DateDeSortieLabo, R_CommandeEntrer.DateDeRetourLabo,
R_CommandeEntrer.DateSortieCommande, R_CommandeEntrer.TotalCommande,
R_CommandeEntrer.TotalTvaCommande,
R_CommandeEntrer.TotalCommandeTvaComprise, R_CommandeEntrer.Encours,
R_CommandeEntrer.Sortie, R_CommandeEntrer.Description,
R_CommandeEntrer.AffInfoPatientSurFact
FROM R_CommandeEntrer, T_Controle
WHERE (((R_CommandeEntrer.Encours)=3DTrue) AND
((R_CommandeEntrer.Sortie)=3DFalse));


Une requ=EAte R_D=E9tailsCommandeComplets
Cette requ=EAte est d=E9finie comme suit une table T_D=E9tailsCommande en
relation avec
Une table
T_Nomenclature en relation avec
une table
T_TauxdeTVA

SELECT T_D=E9tailsCommande.Num=E9roCommande,
T_D=E9tailsCommande.R=E9fNomenclature, T_Nomenclature.Libell=E9,
T_Nomenclature.TauxdeTva, T_D=E9tailsCommande.Quantit=E9,
T_Nomenclature.PrixUnitaire, T_D=E9tailsCommande.TotalFa=E7on,
T_D=E9tailsCommande.TotalFourniture, T_D=E9tailsCommande.TvaLigneCommande
FROM T_TauxdeTVA INNER JOIN (T_Nomenclature INNER JOIN
T_D=E9tailsCommande ON
T_Nomenclature.R=E9fNomenclature=3DT_D=E9tailsCommande.R=E9fNomenclature) ON
T_TauxdeTVA.[Taux de tva]=3DT_Nomenclature.TauxdeTva;


2-----------------------
Pour encoder une commande sortante, j'ouvre un Premier formulaire
F_SortirCommandeRecherche dont les donn=E9es proviennent de la requete
R_CommandeSortir.
Une fois que j'ai choisi un client, ce formulaire sur base du code ci
dessous ouvre un nouveau formulaire appel=E9 F_SortirCommande

Private Sub NumerodelaCommande_AfterUpdate()
DoCmd.OpenForm "F_SortirCommande", , , "NumeroCommande=3D" &
NumerodelaCommande, acFormEdit
End Sub

Le Formulaire F_SortirCommande contient un sous_formulaire
F_ContenuCommande
Les donn=E9es du formulaire principal proviennent de la requ=EAte
R_CommandeSortir.
Les donn=E9es du sous formulaire principal proviennent de
R_DetailsCommandeComplets

3------------------------

Et maintenant commence mes probl=E8mes ???

Le but de l'application est de pouvoir encod=E9 une commande en
plusieurs =E9tape (Il y a des =E9tapes de r=E9alisations qui le justifie
donc le travail command=E9 sort et entre plusieurs fois et pour =E9vit=E9
des oublis, Les diverses op=E9rations r=E9alis=E9es sont encod=E9es apr=E8s
chaques =E9tapes et en final lorsque le travail est termin=E9 il est
imprim=E9 sous forme de bon de livraison en vue facture mensuelle)

Lorsque je saisis les =E9l=E9ments de ma commande (R=E9fNomenclature), Je
ne sais pas comment programmer la v=E9rification d'un encodage
ant=E9rieur sans =EAtre oblig=E9 de v=E9rifier manuellement (utilisation de
l'ascenseur lat=E9ral).

J'ai trouv=E9 cette astuce qui fonctionne mais uniquement lors de la
premi=E8re commande.
Lors de la saisie d'une deuxi=E8me commande, si une m=EAme
r=E9fNomenclature est d=E9j=E0 encod=E9e pour une autre commande, il
consid=E8re que la r=E9f=E9rence est d=E9j=E0 encod=E9e dans cette nouvelle
commande ??


Private Sub R=E9fNomenclature_BeforeUpdate(Cancel As Integer)
'----
'- Je v=E9rifie que la r=E9f=E9rence nomenclature n'est pas d=E9j=E0
encod=E9 OK
'-
'- dans le sous-formulaire F_ContenuCommande
'- Si OUI 1_ Je supprime la saisie
2_ Pas encore programmer
JE repositionne le curseur sur l'enregistrement en
position saisie de la quantit=E9
'- Si NON on continue l'op=E9ration de saisie normalement.
'----

If (Not IsNull(DLookup("[R=E9fNomenclature]",
"R_D=E9tailscommandecomplets", "[R=E9fNomenclature]=3D '" &
Me!R=E9fNomenclature & "'" )))Then

MsgBox "Produit d=E9j=E0 pr=E9sent dans la commande, Corrig=E9 la
quantite."
Cancel =3D True
Me!R=E9fNomenclature.Undo
End If
End Sub

Je pense que dans la condition, je devrait ajouter un test sur le
num=E9ro de commande
du genre

If (Not IsNull(DLookup("[R=E9fNomenclature]",
"R_D=E9tailscommandecomplets", "[R=E9fNomenclature]=3D '" &
Me!R=E9fNomenclature & "'" And "[Num=E9roCommande] =3D &
Me.Num=E9roCommande" ))) then

Mais j'ai essay=E9 et access me met une erreur d'incoh=E9rence de type (
le num=E9ro de commande est du type Num=E9rique alors que la
R=E9fNomenclature est du type Caract=E8re
De plus, je n'ai trouv=E9 aucun exeemple utilisant l'op=E9rateur AND

En plus, je ne sais pas comment repositionner mon curseur sur la bonne
ligne et sur le champ quantit=E9 apr=E8s l'ex=E9cution de ce code, la
ligne est bien supprim=E9e, mais je ne suis pas repositionner sur la
ligne contenant l'=E9l=E9ment existant.

4---------------------
Ma derni=E8re question :

Comment supprimer un enregistrement dont la quantit=E9 saisie serait
=E9gale =E0 z=E9ro?
J'ai plac=E9 dans les propri=E9t=E9s du champ Quantit=E9 Valide si <>
0

Mais 0 est accepter quand m=EAme et la saisie passe =E0 la ligne
suivante ??

Si vous lisez ceci "Merci pour votre compr=E9hension et votre
patience"

Pierre

1 réponse

Avatar
3stone
Salut,

"pibo"

[...]
Je pense que dans la condition, je devrait ajouter un test sur le
numéro de commande
du genre



essaies :


If (Not IsNull(DLookup("[RéfNomenclature]" , "R_Détailscommandecomplets", "[RéfNomenclature]= '" &
Me!RéfNomenclature & "' And [NuméroCommande] = & Me.[NuméroCommande]" ))) then




En plus, je ne sais pas comment repositionner mon curseur sur la bonne
ligne et sur le champ quantité après l'exécution de ce code, la
ligne est bien supprimée, mais je ne suis pas repositionner sur la
ligne contenant l'élément existant.



il faut faire le test dans l'événement "avant mise à jour" et annuler
(cancel = true) le cas échéant...







Comment supprimer un enregistrement dont la quantité saisie serait
égale à zéro?


Zéro ou pas de saisie ??

si c'est pas de saisie, utilise Is Null


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/